ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 확장 패키지 : numpy (1)
    파이썬 Python/데이터 분석 2022. 2. 14. 21:52

    Numpy 패키지

    - 넘파이(NumPy)는 Numerical Python의 약자로 대표적인 파이썬 기반 수치 해석 라이브러리로 알려져 있다.

      특히 선형대수 연산에 필요한 다차원 배열과 배열 연산을 수행하는 다양한 함수를 제공한다.

    - 데이터 분석을 위한 패키지

    - 파이썬으로 과학 연산을 쉽고 빠르게 할 수 있게 만든 패키지

    - 배열 데이터를 효과적으로 다룬다.

     

    numpy 1차원 배열 생성

    import numpy
    
    # 리스트 생성
    data1 = [1, 2, 3, 4, 5]
    data2 = [1.7, 2, 5.5, 7, 9.9]
    data3 = [1.7, 2, '5.5', 7, 9.9]
    
    print(data1)
    print(data2)
    print(data3)
    print('-' * 30)
    
    # numpy 1차원 배열 생성 : 리스트로 numpy 배열 만들기
    # ndarray : n dimension array (다차원 배열)
    arr1 = numpy.array(data1)
    print(arr1)
    print(type(arr1)) # 자료형 확인
    print(arr1.dtype) # 데이터 종류 확인
    print(arr1.shape) # 배열 형태 확인
    print()
    
    # 단일 데이터만 취급
    # => 정수와 실수가 섞여 있으면 모두 실수로 변환
    arr2 = numpy.array(data2) 
    print(arr2)
    print(arr2.dtype)
    print(arr2.shape)
    print()
    
    # 단 1개라도 문자열이 섞여 있으면, 모두 문자열로 변환됨
    arr3 = numpy.array(data3)
    print(arr3)
    print(arr3.dtype) 
    print(arr3.shape)

    [1, 2, 3, 4, 5]
    [1.7, 2, 5.5, 7, 9.9]
    [1.7, 2, '5.5', 7, 9.9]
    ------------------------------
    [1 2 3 4 5]
    <class 'numpy.ndarray'>
    int32
    (5,)

    [1.7 2.  5.5 7.  9.9]
    float64
    (5,)

    ['1.7' '2' '5.5' '7' '9.9']
    <U32
    (5,)

     

     

    numpy 2차원 배열 생성 : numpy.array()

    import numpy
    
    data1 = [1, 2, 3]
    data2 = [4, 5, 6]
    data3 = [7, 8, 9]
    
    # numpy 2차원 배열 생성, []를 ()로 묶는다.
    arr1 = numpy.array([data1, data2, data3])
    
    # 저장 내용 확인
    print("arr1 :")
    print(arr1)
    
    # numpy 배열 속성확인
    print("arr1 type :", type(arr1))
    print("arr1 배열 데이터 타입 :", arr1.dtype)
    print("arr1 배열 형태 :", arr1.shape)

    arr1 :
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    arr1 type : <class 'numpy.ndarray'>
    arr1 배열 데이터 타입 : int32
    arr1 배열 형태 : (3, 3)

     

     

    범위를 지정해서 배열 생성

    import numpy
    
    # 범위를 지정해서 numpy 배열 생성, 
    # arange([start,] stop[, step])
    arr1 = numpy.arange(0, 10, 2) # 1~9까지 2씩
    arr2 = numpy.arange(1, 10)    # 1~9까지
    arr3 = numpy.arange(5)        # 4까지
    
    # 저장 내용 확인
    print("arr1 :", arr1)
    print("arr2 :", arr2)
    print("arr3 :", arr3)
    print()
    
    # numpy 배열 속성확인
    print("arr1 type :", type(arr1))
    print("arr1 배열 데이터 타입 :", arr1.dtype)
    print("arr1 배열 형태 :", arr1.shape)

    arr1 : [0 2 4 6 8]
    arr2 : [1 2 3 4 5 6 7 8 9]
    arr3 : [0 1 2 3 4]

    arr1 type : <class 'numpy.ndarray'>
    arr1 배열 데이터 타입 : int32
    arr1 배열 형태 : (5,)

     

     

    m x n 행렬로 변경 (2차원)

    import numpy
    
    arr1 = numpy.arange(1, 13)
    print("arr1 :", arr1)
    print("arr1 배열 형태 :", arr1.shape)
    
    # reshape()을 통해 차원을 변경할 때는 데이터 개수가 일치해야 함
    # 2차원 배열로 변경
    arr2 = arr1.reshape(3, 4) # 3행 4열로 변경
    print("arr2 :")
    print(arr2)
    print("arr2 배열 형태 :", arr2.shape)
    print()
    
    # 데이터 개수에 상관없이 변경(행) : -1 사용
    arr2 = arr1.reshape(3, -1)
    print("arr2 :")
    print(arr2)
    print("arr2 배열 형태 :", arr2.shape)
    
    # 데이터 개수에 상관없이 변경(열) : -1 사용
    arr2 = arr1.reshape(-1, 3)
    print("arr2 :")
    print(arr2)
    print("arr2 배열 형태 :", arr2.shape)
    print('-')
    
    # 3차원 배열로 변경
    arr3 = arr2.reshape(2, 2, 3) # 2행3열이 2개 (면, 행, 열)
    print("arr3 :")
    print(arr3)
    print("arr3 배열 형태 :", arr3.shape)
    print()
    
    # 4차원 배열로 변경
    arr4 = arr2.reshape(2, 2, 3, 1) # 3행1열이 2개씩 들어간것 이 2개
    print("arr4 :")
    print(arr4)
    print("arr4 배열 형태 :", arr4.shape)
    print()
    
    # 4차원 배열을 1차원 배열로 변경 -1
    arr1 = arr4.reshape(12)
    print("arr1 :", arr1)
    print("arr1 배열 형태 :", arr1.shape)
    print()
    
    # 4차원 배열을 1차원 배열로 변경 -2
    arr1 = arr4.reshape(-1)
    print("arr1 :", arr1)
    print("arr1 배열 형태 :", arr1.shape)

    arr1 : [ 1  2  3  4  5  6  7  8  9 10 11 12]
    arr1 배열 형태 : (12,)
    arr2 :
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    arr2 배열 형태 : (3, 4)

    arr2 :
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    arr2 배열 형태 : (3, 4)
    arr2 :
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]
    arr2 배열 형태 : (4, 3)
    -
    arr3 :
    [[[ 1  2  3]
      [ 4  5  6]]

     [[ 7  8  9]
      [10 11 12]]]
    arr3 배열 형태 : (2, 2, 3)

    arr4 :
    [[[[ 1]
       [ 2]
       [ 3]]

      [[ 4]
       [ 5]
       [ 6]]]


     [[[ 7]
       [ 8]
       [ 9]]

      [[10]
       [11]
       [12]]]]
    arr4 배열 형태 : (2, 2, 3, 1)

    arr1 : [ 1  2  3  4  5  6  7  8  9 10 11 12]
    arr1 배열 형태 : (12,)

    arr1 : [ 1  2  3  4  5  6  7  8  9 10 11 12]
    arr1 배열 형태 : (12,)

     

     

    시작과 끝 범위, 데이터 개수를 지정해서 numpy 배열 생성

    import numpy
    
    # 범위의 시작과 끝을 지정하고 데이터 개수를 지정해서 numpy 배열을 생성
    # linspace(start, end, 개수)
    arr1 = numpy.linspace(1, 5, 10)
    print("arr1 :")
    print(arr1)
    print("arr1 type :", type(arr1))
    print("arr1 배열 데이터 타입 :", arr1.dtype)
    print("arr1 배열 형태 :", arr1.shape)
    print()
    
    arr2 = numpy.linspace(-1, 1, 50)
    print("arr2 :")
    print(arr2)
    print("arr2 type :", type(arr2))
    print("arr2 배열 데이터 타입 :", arr2.dtype)
    print("arr2 배열 형태 :", arr2.shape)

    arr1 :
    [1.         1.44444444 1.88888889 2.33333333 2.77777778 3.22222222
     3.66666667 4.11111111 4.55555556 5.        ]
    arr1 type : <class 'numpy.ndarray'>
    arr1 배열 데이터 타입 : float64
    arr1 배열 형태 : (10,)

    arr2 :
    [-1.         -0.95918367 -0.91836735 -0.87755102 -0.83673469 -0.79591837
     -0.75510204 -0.71428571 -0.67346939 -0.63265306 -0.59183673 -0.55102041
     -0.51020408 -0.46938776 -0.42857143 -0.3877551  -0.34693878 -0.30612245
     -0.26530612 -0.2244898  -0.18367347 -0.14285714 -0.10204082 -0.06122449
     -0.02040816  0.02040816  0.06122449  0.10204082  0.14285714  0.18367347
      0.2244898   0.26530612  0.30612245  0.34693878  0.3877551   0.42857143
      0.46938776  0.51020408  0.55102041  0.59183673  0.63265306  0.67346939
      0.71428571  0.75510204  0.79591837  0.83673469  0.87755102  0.91836735
      0.95918367  1.        ]
    arr2 type : <class 'numpy.ndarray'>
    arr2 배열 데이터 타입 : float64
    arr2 배열 형태 : (50,)

     

     

    모든 원소가 0 또는 1인 numpy 배열 생성

    import numpy
    
    # 모든 원소가 0인 numpy 배열 생성
    arr1 = numpy.zeros(10)
    arr2 = numpy.zeros((2, 3))
    arr3 = numpy.zeros((2, 3, 4))
    print("arr1 :")
    print(arr1)
    print("arr2 :")
    print(arr2)
    print("arr3 :")
    print(arr3)
    print("arr1 배열 데이터 타입 :", arr1.dtype)
    print("arr1 배열 형태 :", arr1.shape)
    print("arr2 배열 형태 :", arr2.shape)
    print("arr3 배열 형태 :", arr3.shape)
    print()
    
    # 모든 원소가 1인 numpy 배열 생성
    arr1 = numpy.ones(10)
    arr2 = numpy.ones((2, 3))
    arr3 = numpy.ones((2, 3, 4))
    print("arr1 :")
    print(arr1)
    print("arr2 :")
    print(arr2)
    print("arr3 :")
    print(arr3)
    print("arr1 배열 데이터 타입 :", arr1.dtype)
    print("arr1 배열 형태 :", arr1.shape)
    print("arr2 배열 형태 :", arr2.shape)
    print("arr3 배열 형태 :", arr3.shape)

    arr1 :
    [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
    arr2 :
    [[0. 0. 0.]
     [0. 0. 0.]]
    arr3 :
    [[[0. 0. 0. 0.]
      [0. 0. 0. 0.]
      [0. 0. 0. 0.]]

     [[0. 0. 0. 0.]
      [0. 0. 0. 0.]
      [0. 0. 0. 0.]]]
    arr1 배열 데이터 타입 : float64
    arr1 배열 형태 : (10,)
    arr2 배열 형태 : (2, 3)
    arr3 배열 형태 : (2, 3, 4)

    arr1 :
    [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
    arr2 :
    [[1. 1. 1.]
     [1. 1. 1.]]
    arr3 :
    [[[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]

     [[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]]
    arr1 배열 데이터 타입 : float64
    arr1 배열 형태 : (10,)
    arr2 배열 형태 : (2, 3)
    arr3 배열 형태 : (2, 3, 4)

     

     

    단위 행렬 생성

    import numpy
    
    # 단위 행렬로 numpy 배열 생성
    # n x n 정사각형 행렬에서 주 대각선이 모두 1이고 나머지는 0인 행렬
    arr1 = numpy.eye(3)
    
    # 저장 내용 확인
    print("arr1 :")
    print(arr1)
    print("--------------")
    
    # numpy 배열 속성확인
    print("arr1 type :", type(arr1))
    print("arr1 배열 데이터 타입 :", arr1.dtype)
    print("arr1 배열 형태 :", arr1.shape)

    arr1 :
    [[1. 0. 0.]
     [0. 1. 0.]
     [0. 0. 1.]]
    --------------
    arr1 type : <class 'numpy.ndarray'>
    arr1 배열 데이터 타입 : float64
    arr1 배열 형태 : (3, 3)

     

     

    '파이썬 Python > 데이터 분석' 카테고리의 다른 글

    Matplotlib (1) - 그래프  (0) 2022.02.16
    파이썬 확장 패키지 : numpy (2)  (0) 2022.02.15
    반복문 - while  (0) 2022.02.09
    반복문 - for  (0) 2022.02.08
    변수, 입력  (0) 2022.02.07
Designed by Tistory.