본문 바로가기
빅데이터 분석기사

[무턱대고 빅데이터 분석기사] Numpy를 활용한 데이터 다루기 | 설치부터 활용까지 | pandas와의 차이

by 공불러 2023. 5. 31.
728x90
반응형

[무턱대고 빅데이터 분석기사] Numpy를 활용한 데이터 다루기 | 설치부터 활용까지 | pandas와의 차이

numpy는 반복문 없이 벡터, 행렬 계산이 가능한 패키지입니다.

행렬을 쉽게 만들고 가공할 수 있는 것이 특징입니다.

기본 통계 연산이 가능하여 빅데이터 분석에 자주 이용됩니다.

목차

     

    Numpy 설치 및 실행

    numpy 실행은 패키지 설치와 동일하다.

    numpy 설치하기

    쥬피터 노트북(Jupyter Notebook)에서 설치하는 경우:

    !pip install numpy



    파이썬 스크립트나 터미널에서 설치하는 경우:

    pip install numpy

    numpy 불러오기

    import numpy as np

    Numpy 특징

    Numpy 특징

    NumPy(Numerical Python) 라이브러리는 통계 계산을 위한 몇 가지 특징과 편리한 기능을 제공합니다. 

    • 다차원 배열 객체(ndarray): NumPy는 빠르고 효율적인 다차원 배열 객체를 제공합니다. 이는 요소별산 및 선형 대수, 푸리에 변환 같은 고급 수학 연산을 수행할 수 있습니다.
    • 브로드캐스팅: 브로드캐스팅은 서로 다른 크기의 배열간 연산을 가능하게 해줍니다. 이것은 일반적으로 파이썬 리스트에서는 어울 수 있는 연산을 NumPy를 사용하여 손쉽게 수행할 수 있도록 합니다.
    • 벡터화 연산: NumPy는 벡터화된산을 통해 빠른 실행 속도를 제공합니다. 이는 Python 루프보다 훨씬 더 빠르게 배열 연산을 처리할 수 있도록 합니다.
    • 유연한 인덱싱과 슬라이싱: NumPy에서는양한 인덱싱 및 슬라이싱 기법을 사용하여 ndarray의 원소에 손쉽게 접근할 수 있습니다.
    • 선형 대수 및 난 생성: NumPy는 선형 대수 함수와 난수 생성 라이브러리를 포함하고 있습니다. 이는 행렬 곱셈, 역행렬 찾기, 행렬식 계산 등과 같은 선형 대수산을 쉽게 할 수 있게 합니다.
    • 외부 라이브러리와의 호환성: NumPy 배열은 다른 데이터 분석 및 머신러 라이브러리와도 호환성이 좋습니다. 예를 들어, Pandas, SciPy, scikit-learn 및 TensorFlow와 같은 라이브러리와 잘 작동합니다.

    Numpy 활용

    Numpy 활용

    다차원 배열 연산: NumPy는 다차원 배열(ndarray)을 제공합니다. 따라서 이를 이용해 요소별 연산, 행렬 및 선형 대수산 등의 수학 연산을 수행할 수 있습니다.

    통계분석: NumPy는 추가 산, 중간값, 사분위수, 분산, 표주 등과 같은 통계량을 계산할 수습니다. 이를 이용하면 데이터의 분포, 위치 및 변동성을 파악할 수 있습니다.

    난수 생성: NumPy는 다양한 분포의 난수를 생성할 수 있는 기능을 제공합니다. 이는 확률 모델링 및 시뮬레이션 등에 유용합니다.

    푸리에 변환이나 합성곱 연산: NumPy는 푸리에 변환 및 푸리에 역변환 함수도 지원합니다. 이는 이미지 및 신호 처리 분야에서 많이 사용됩니다.

    다차원 인덱싱: NumPy는 다차원 배열에 대한 다양한 인덱싱 및 슬라이싱 기능을 제공합니다. 이를 이용하면 복잡한 연산을 효율적으로 수행할 수 있습니다.

    Numpy 기본 명령어

    배열 생성

    numpy.array: 배열을 생성합니다.

    import numpy as np
    
    # 리스트를 기반으로 배열 생성
    arr = np.array([1, 2, 3, 4, 5])
    print(arr)  # [1 2 3 4 5]
    numpy.zeros: 모든 요소가 0인 배열을 생성합니다.



    # 크기가 3인 1차원 배열 생성

    arr = np.zeros(3)
    print(arr)  # [0. 0. 0.]


    # 크기가 2x2인 2차원 배열 생성

    arr = np.zeros((2, 2))
    print(arr)
    # [[0. 0.]
    #  [0. 0.]]



    numpy.ones: 모든 요소가 1인 배열을 생성합니다.

    import numpy as np
    
    # 크기가 3인 1차원 배열 생성
    arr = np.ones(3)
    print(arr)  # [1. 1. 1.]


    # 크기가 2x2인 2차원 배열 생성

    arr = np.ones((2, 2))
    print(arr)
    # [[1. 1.]
    #  [1. 1.]]
    numpy.empty: 초기화되지 않은 배열을 생성합니다. (메모리 상태에 따라 무작위 값이 들어갈 수 있습니다.)


    # 크기가 3인 1차원 배열 생성

     

    arr = np.empty(3)
    print(arr)  # [2.12199579e-314 2.12199579e-314 2.12199579e-314]

    출력 값이 이상하죠?

    numpy.empty 함수는 배열을 생성할 때 초기화하지 않고 메모리에 있는 값을 그대로 사용합니다. 따라서 배열의 초기값은 메모리 상태에 따라 무작위로 나타날 수 있습니다. 출력값이 [2.12199579e-314 2.12199579e-314 2.12199579e-314]와 같이 나타난 것은 초기화되지 않은 상태의 메모리 값을 나타내는 것입니다. 이 값은 실제로는 사용되지 않은 값이며, 배열을 사용하기 전에 적절한 값으로 초기화해주어야 합니다.

    만약 원하는 값으로 배열을 초기화하고자 한다면, numpy.zeros, numpy.ones 등의 함수를 사용하거나 생성된 배열에 값을 대입하여 초기화할 수 있습니다. 예를 들어, 아래와 같이 배열을 0으로 초기화할 수 있습니다:

    import numpy as np
    
    arr = np.zeros(3)
    print(arr)  # [0. 0. 0.]


    또는 다음과 같이 생성된 배열에 값을 대입하여 초기화할 수도 있습니다:

    import numpy as np
    
    arr = np.empty(3)
    arr.fill(0)
    print(arr)  # [0. 0. 0.]


    따라서, numpy.empty를 사용할 때는 초기화되지 않은 배열이 생성되므로, 배열을 사용하기 전에 적절한 값으로 초기화해주어야 합니다.

    # 크기가 2x2인 2차원 배열 생성

    arr = np.empty((2, 2))
    print(arr)
    # [[1. 1.]
    #  [1. 1.]]


    numpy.arange: 지정된 범위의 값으로 배열을 생성합니다.

    import numpy as np
    
    # 0부터 9까지의 값으로 1차원 배열 생성
    arr = np.arange(10)
    print(arr)  # [0 1 2 3 4 5 6 7 8 9]
    
    # 5부터 9까지의 값으로 1차원 배열 생성
    arr = np.arange(5, 10)
    print(arr)  # [5 6 7 8 9]
    
    # 0부터 9까지의 값 중에서 짝수만으로 1차원 배열 생성
    arr = np.arange(0, 10, 2)
    print(arr)  # [0 2 4 6 8]


    배열 연산:

    import numpy as np
    
    arr1 = np.array([[1, 2], [3, 4]])
    arr2 = np.array([[5, 6], [7, 8]])
    
    result = np.dot(arr1, arr2)
    print(result)
    # [[19 22]
    #  [43 50]]


    numpy.reshape: 배열의 형태를 변경합니다.

    import numpy as np
    
    arr = np.arange(9)
    print(arr)  # [0 1 2 3 4 5 6 7 8]
    
    reshaped_arr = arr.reshape((3, 3))
    print(reshaped_arr)
    # [[0 1 2]
    #  [3 4 5]
    #  [6 7 8]]


    numpy.transpose: 배열의 전치(transpose)를 수행합니다.

    import numpy as np
    
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr)
    # [[1 2 3]
    #  [4 5 6]]
    
    transposed_arr = np.transpose(arr)
    print(transposed_arr)
    # [[1 4]
    #  [2 5]
    #  [3 6]]


    numpy.dot: 배열의 내적(dot product)을 계산합니다.

    import numpy as np
    
    arr1 = np.array([[1, 2], [3, 4]])
    arr2 = np.array([[5, 6], [7, 8]])
    
    result = np.dot(arr1, arr2)
    print(result)
    # [[19 22]
    #  [43 50]]

     

    NumPy 분석 명령어

    배열 연산

    배열 합계 계산: numpy.sum

     

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    total = np.sum(arr)
    print(total)  # 15


    배열 평균 계산: numpy.mean

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    avg = np.mean(arr)
    print(avg)  # 3.0


    배열 최댓값 및 최솟값 계산: numpy.max, numpy.min

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    max_val = np.max(arr)
    min_val = np.min(arr)
    print(max_val)  # 5
    print(min_val)  # 1


    배열 정렬: numpy.sort

    import numpy as np
    
    arr = np.array([3, 1, 5, 2, 4])
    sorted_arr = np.sort(arr)
    print(sorted_arr)  # [1 2 3 4 5]

     


    통계 함수:

    분산 계산: numpy.var

     

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    variance = np.var(arr)
    print(variance)  # 2.0


    표준편차 계산: numpy.std

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    std_deviation = np.std(arr)
    print(std_deviation)  # 1.4142135623730951

     


    배열 인덱싱 및 슬라이싱

    인덱싱: 특정 위치의 요소에 접근

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    print(arr[2])  # 3


    슬라이싱: 배열의 일부분에 접근

    import numpy as np
    
    arr = np.array([1, 2, 3, 4, 5])
    print(arr[1:4])  # [2 3 4]


    선형 대수 연산:

    행렬 곱셈: numpy.matmul

    import numpy as np
    
    arr1 = np.array([[1, 2], [3, 4]])
    arr2 = np.array([[5, 6], [7, 8]])
    
    result = np.matmul(arr1, arr2)
    print(result)
    # [[19 22]
    #  [43 50]]


    이는 분석에 활용되는 일부 NumPy 명령어와 예시 코드입니다. NumPy는 다양한 기능을 제공하므로 실제 분석 작업에 따라 다양한 함수와 메서드를 활용할 수 있습니다.

     

     

     

    명령어 설명
    numpy.array 배열을 생성합니다.
    numpy.zeros 모든 요소가 0인 배열을 생성합니다.
    numpy.ones 모든 요소가 1인 배열을 생성합니다.
    numpy.empty 초기화되지 않은 배열을 생성합니다.
    numpy.arange 지정된 범위의 값으로 배열을 생성합니다.
    numpy.reshape 배열의 형태를 변경합니다.
    numpy.transpose 배열의 전치(transpose)를 수행합니다.
    numpy.dot 배열의 내적(dot product)을 계산합니다.
    numpy.sum 배열의 합계를 계산합니다.
    numpy.mean 배열의 평균을 계산합니다.
    numpy.max 배열의 최댓값을 계산합니다.
    numpy.min 배열의 최솟값을 계산합니다.
    numpy.sort 배열을 정렬합니다.
    numpy.var 배열의 분산을 계산합니다.
    numpy.std 배열의 표준편차를 계산합니다.

     

    numpy와 pandas의 차이

    numpy와 pandas의 차이

    NumPy(Numerical Python)와 pandas는 모두 Python 데이터 분석을 위한 라이브러리입니다. NumPy는 다차원 배열과 고급 수학 연산을 위한 라이브러리이고, pandas는 데이터 조작 및 분석을 위한 라이브러리입니다. 여기서 간략하게 두 라이러리의 차이점을 설명해드리겠습니다.

    데이터 구조: NumPy의 핵심 요소는 n차원 배열인 ndarray인 반면, pandas의 핵심 요소는 1차원 및 2차원 데이터인 Series 및 DataFrame입니다.

    인덱싱: NumPy 배열에서는 위치 기반 인덱싱과 슬라이싱에 의존하지만, pandas에서는 레이블 기반 인덱싱을 사용합니다.

    결측치 처리: pandas는 결측치를 보다 쉽게 처리할 수 있는 기능을 제공합니다. 반면, NumPy에서는 결측치 처리를 위한 별도의 함수나 라이브러리가 필요합니다.

    데이터 조작: pandas는 Excel 및 SQL과 비슷한 데이터 조 기능을 제공합니다. 데이터 필터링, 그룹화, 집계 등과 같은 고급 조작이 가능합니다. 반면, NumPy는 배열 요소별산 및 행렬 연산과 같은 고급 수학 함수를 제공합니다.

    시계열 데이터 처리: pandas는 시계열 데이터를 처리하는 기능을 제공합니다. 이를 통해 날짜 및 시간 데이터를 쉽게 처리할 수 있습니다. NumPy에서는 별도의 모듈이나 라이브러리가 필요합니다.

    따라서, NumPy와 pandas는 각각 데이터 처리와 데이터 분석에 있어 유용한 라이브러리이며, 프로젝트의 요구사항에 따라 적절하게 선택해서 사용하는 것이 좋습니다.

    728x90
    반응형

    댓글