티스토리 뷰
통계할 때 자주 쓰이는 numpy 모듈을 알아봅시다 :)
[Numpy]
- 수학, 과학 계산용 패키지
- 성능: 파이썬의 리스트보다 빠름
- 메모리 사이즈: 파이썬의 리스트보다 작은 메모리를 사용
- 빌트인 함수: 선형함수, 통계관련 여러 함수들을 내장
1) 모듈 불러오기
import numpy
numpy
numpy
out::::
<module 'numpy' from 'C:\\Users\\82103\\anaconda3\\lib\\site-packages\\numpy\\__init__.py'>
실행하게 되면 다른 사람이 만들어 놓은 모듈이 설치 되었다는 것을 알려줍니다.
2) 모듈 별칭 주기
# 별칭을 주자(as)
import numpy as np
np
out::::
<module 'numpy' from 'C:\\Users\\82103\\anaconda3\\lib\\site-packages\\numpy\\__init__.py'>
별칭으로 실행하게 되어도 numpy로 실행했을 떄와 객체가 같음을 확인할 수 있습니다.
3) array(배열)
- 여러 값들의 그룹
- 기본적으로 ndarray를 만드는 방법
arr = np.array([1,2,3,4])
type(arr) # numpy.ndarray = n dimension array
out::::
numpy.ndarray
실제로 type을 입력해보면 ndarray임을 확인할 수 있습니다.
- 파이썬 list를 ndarray로 형변환
# 파이썬의 기본 list
list1 = [1,2,3,4] # 1차원
list2 = [[1,2,3,4],[5,6,7,8]] # 2차원
# 기본 list -> ndarray (형변환)
arr1 = np.array(list1)
arr2 = np.array(list2)
4) array의 data 타입
- ndarray는 list와 다르게 1개의 데이터 타입만 허용
list는 서로 다른 데이터 타입도 저장 가능합니다.
# list는 서로 다른 데이터 타입도 저장 가능
list = [1, 3.14, 'python','😍','1234',True]
ndarray 안에 int 타입과 float 타입을 넣으면 저장이 안 될 것 같지만, 알아서 int 타입을 float 타입으로 저장하게 됩니다.
arr = np.array([1,2,3.14,4])
arr # noarray는 단일 타입만 저장할 수 있기 때문에 int 타입을 더 큰 자료형인 float 타입으로 저장
out::::
array([1. , 2. , 3.14, 4. ])
- type을 통일
# int와 float 타입이 같이 존재하는 경우 int로 설정
arr = np.array([1,2,3.14,4], dtype=int)
arr
out::::
array([1, 2, 3, 4])
'1234'은 str타입이지만 int 타입으로 변환 가능합니다.
arr = np.array([1, 2, 3, 3.14, '1234'],dtype=int)
arr
out::::
array([ 1, 2, 3, 3, 1234])
5) 슬라이싱(Slicing)
- 배열의 부분 선택
arr = np.array(['😍','😊','👍','🙌','💕'])
print(arr[0])
print(arr[4])
print(arr[-1])
out::::
😍
💕
💕
print(arr[0:3]) # 0번부터 3전까지(0부터 2까지)
out::::
['😍' '😊' '👍']
print(arr[2:]) # 2번부터 끝까지
out::::
['👍' '🙌' '💕']
print(arr[:2]) # 맨처음부터 1까지
out::::
['😍' '😊']
6) Fancy 인덱싱
- 범위가 아닌 특정 index의 집합의 값을 선택하여 추출하고 싶을 때 활용
arr = np.array([10,23,2,7,90,65,32,66,70])
idx = [1,3,5] # 추출하고 싶은 인덱스를 리스트로 저장
arr[idx]
out::::
array([23, 7, 65])
7) Boolean 인덱싱
- 조건 필터링을 통하여 Boolean 값을 이용한 색인
arr = np.array(['😍','😊','👍','🙌','💕'])
# 추출하고 싶은 인덱스는 True, 아니면 False로
myValue = [True, False, True, False, True]
arr[myValue]
out::::
array(['😍', '👍', '💕'], dtype='<U1')
- ndarray와 짝이 맞지 않으면 index 에러
myValue = [True, False, True, False] # 짝이 안 맞으면 index에러
arr[myValue]
out::::
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_10796/1397428343.py in <module>
1 myValue = [True, False, True, False] # 짝이 안 맞으면 index에러
----> 2 arr[myValue]
IndexError: boolean index did not match indexed array along dimension 0; dimension is 5 but corresponding boolean dimension is 4
- 조건을 이용한 Boolean 인덱싱
arr2d = np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12]])
arr2d > 4
out::::
array([[False, False, False, False],
[ True, True, True, True],
[ True, True, True, True]])
ndarray 안에 조건식을 넣으면 인덱싱을 할 수 있습니다.
그런데 Boolean 인덱싱을 하면 ndarray -> 1차원으로 바뀌는 것을 기억합시다.
arr2d[arr2d>4] # Boolean 인덱스를 사용하면 1차원으로 바뀜
out::::
array([ 5, 6, 7, 8, 9, 10, 11, 12])
8) 행렬 연산
* Matrix
- 행(row) + 열(column)
- 데이터분석 및 기계학습에서는 행렬을 제외하고 연산할 수 없음
- 덧셈, 뺄셈, 곱셈 연산
- shape가 같아야 함
- 같은 position끼리 연산
a = np.array([[1,2,3],
[2,3,4]])
b = np.array([[3,4,5],
[1,2,3]])
* 덧셈연산
a + b # 각각의 position끼리 연산
out::::
array([[4, 6, 8],
[3, 5, 7]])
* 뺄셈 연산
a - b
out::::
array([[-2, -2, -2],
[ 1, 1, 1]])
* 곱셈 연산
a * b # 같은 position 끼리 연산
out::::
array([[ 3, 8, 15],
[ 2, 6, 12]])
- dot procuct(내적)
- 맞닿는 shape가 같아야 함
a.shape, b.shape
out::::
((3, 3), (3, 2))
앞 ndarray의 '열'과 뒤 ndarray의 '행'이 같아야 합니다.
np.dot(a,b)
out::::
array([[22, 28],
[22, 28],
[31, 40]])
9) arange
- 순차적인 값을 생성할 때 사용
arr = np.arange(1,11) # 1부터 11미만
arr
out::::
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
또 다른 방법입니다.
arr = np.arange(start=1, stop=11)
arr
out::::
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
10) 정렬(sort)
arr = np.array([1,10,5,8,2,4,3,6,8,7,9])
np.sort(arr) # 기본적으로 오름차순 정렬
np.sort(arr)[::-1] # 내림차순
- 2차원에서의 정렬
# 2차원 sort
arr2d = np.array([[11,10,12,9],
[3,1,4,2],
[5,6,7,8]])
# 행 정렬
np.sort(arr2d, axis=0) # 행의 맨 처음 성분으로 오름차순 정렬
# 열 정렬
np.sort(arr2d, axis=1) # 각 열에서 오름차순 정렬
# 마지막 방향
np.sort(arr2d, axis=-1) #(행)(열) 이므로 -1은 (열)에 해당
- axis=0 : 행
- axis=1 : 열
- axis=-1 : 열('행','열' 에서 마지막 성분에 해당하므로 '열'을 의미)
참고로, xyz 성분 이라면 axis=-1은 z성분을 뜻하겠습니다.
여기까지 numpy 모듈을 알아봤습니다 :)
'빅데이터 인공지능 > 데이터분석' 카테고리의 다른 글
[데이터분석] ⑥ 쇼핑몰 고객주문 데이터 프로젝트 실습 (0) | 2022.06.30 |
---|---|
[데이터분석] ⑤ matplotlib 라이브러리 (0) | 2022.06.28 |
[데이터분석] ④ 데이터 전처리 활용 및 수행 (0) | 2022.06.27 |
[데이터분석] ③ 기본적인 pandas 모듈(2) (0) | 2022.06.27 |
[데이터분석] ② 기본적인 pandas 모듈(1) (0) | 2022.06.24 |
- Total
- Today
- Yesterday
- 딥러닝
- 머신러닝
- rtl
- 프론트엔드
- CSS
- styled-components
- 리액트
- HTML
- 리액트 훅
- 파이썬
- JSP
- 자바
- 데이터분석
- 프로젝트 회고
- 프론트엔드 기초
- Python
- 자바스크립트
- jest
- 타입스크립트
- 디프만
- TypeScript
- frontend
- 스타일 컴포넌트 styled-components
- 프론트엔드 공부
- 자바스크립트 기초
- testing
- react-query
- 인프런
- react
- next.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |