[무턱대고 빅데이터 분석기사] Numpy를 활용한 데이터 다루기 | 설치부터 활용까지 | pandas와의 차이
numpy는 반복문 없이 벡터, 행렬 계산이 가능한 패키지입니다.
행렬을 쉽게 만들고 가공할 수 있는 것이 특징입니다.
기본 통계 연산이 가능하여 빅데이터 분석에 자주 이용됩니다.
목차
Numpy 설치 및 실행
numpy 실행은 패키지 설치와 동일하다.
numpy 설치하기
쥬피터 노트북(Jupyter Notebook)에서 설치하는 경우:
!pip install numpy
파이썬 스크립트나 터미널에서 설치하는 경우:
pip install numpy
numpy 불러오기
import numpy as np
Numpy 특징
NumPy(Numerical Python) 라이브러리는 통계 계산을 위한 몇 가지 특징과 편리한 기능을 제공합니다.
- 다차원 배열 객체(ndarray): NumPy는 빠르고 효율적인 다차원 배열 객체를 제공합니다. 이는 요소별산 및 선형 대수, 푸리에 변환 같은 고급 수학 연산을 수행할 수 있습니다.
- 브로드캐스팅: 브로드캐스팅은 서로 다른 크기의 배열간 연산을 가능하게 해줍니다. 이것은 일반적으로 파이썬 리스트에서는 어울 수 있는 연산을 NumPy를 사용하여 손쉽게 수행할 수 있도록 합니다.
- 벡터화 연산: NumPy는 벡터화된산을 통해 빠른 실행 속도를 제공합니다. 이는 Python 루프보다 훨씬 더 빠르게 배열 연산을 처리할 수 있도록 합니다.
- 유연한 인덱싱과 슬라이싱: NumPy에서는양한 인덱싱 및 슬라이싱 기법을 사용하여 ndarray의 원소에 손쉽게 접근할 수 있습니다.
- 선형 대수 및 난 생성: NumPy는 선형 대수 함수와 난수 생성 라이브러리를 포함하고 있습니다. 이는 행렬 곱셈, 역행렬 찾기, 행렬식 계산 등과 같은 선형 대수산을 쉽게 할 수 있게 합니다.
- 외부 라이브러리와의 호환성: NumPy 배열은 다른 데이터 분석 및 머신러 라이브러리와도 호환성이 좋습니다. 예를 들어, Pandas, SciPy, scikit-learn 및 TensorFlow와 같은 라이브러리와 잘 작동합니다.
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(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는 각각 데이터 처리와 데이터 분석에 있어 유용한 라이브러리이며, 프로젝트의 요구사항에 따라 적절하게 선택해서 사용하는 것이 좋습니다.
'빅데이터 분석기사' 카테고리의 다른 글
[빅데이터] 통계에서 보간(Interpolation)이란? | 공식 | 방법 | 외섭과의 차이 (0) | 2023.06.04 |
---|---|
[무턱대고 빅데이터분석기사] Pandas란? | 명령어 | 분석방법 | 활용 예시 (0) | 2023.06.02 |
자연어 처리(NLP)란? | 구현 방법 | NLTK | 페이스북에서 활용 (0) | 2023.05.27 |
빅데이터 분석에서 많이 쓰는 기법 TF-IDF란? | TF-IDF 방법 | TF-IDF 예시 | 비판점 (0) | 2023.05.27 |
아나콘다 및 파이썬 설치(feat. 프롬프트, 빅분기) (0) | 2023.05.24 |
댓글