2021. 8. 18. 21:24ㆍpython/pandas, numpy
# Numpy
# 0차원(scala)[숫자]1차원데이터(vector) 혹은 2차원데이터(matrix)를 다루기 쉽게 도와주는 module
# Machine Learning, Deep Learning의 기본 자료구조로 Numpy의 ndarray가 사용
# n-dimensional array(ndarray)를 이용해요!
# numpy(외부모듈)를 사용하기 위해서는 module을 설치해야 해요!
# ndarray를 생성하는 방법
# 1. python의 list를 가지고 ndarray를 만들어요! => np.array()
# ndarray의 가장 큰 특징 중 하나는... 모든 개별적인 요소들이 같은 data type을
# 가져요! default는 float
# - ndarray가 가지는 여러가지 속성
# dtype : ndarray안에 저장되어 있는 데이터의 type
# ndim : ndarray의 차원의 수를 알려줘요!
# shape : tuple로 표현되고 차원의 수와 각 차원의 요소수를 알려줘요!
# size : 요소의 갯수를 알려준다
난수 : 정해진 범위 내에서 규칙 없이 만들어진 수 == random
표준편차 : 정규분포 평균값 +-n사이 많은값이 모여있다?
정규분포 : 산처럼 생긴 그래프이며 중앙에 값들이 몰려있다
표준 정규분포 : 평균이 0이고 표준편차가 1인 정규분포
# 2. numpy가 제공하는 몇몇개의 함수가 존재
# astype() - int32형태의 ndarray로 변경하고 싶다 (result = arr.astype(np.int32))
# np.ones(), np.zeros(), np.full(), np.empty()
# np.full((3,4), 9.) #내가 원하는 값으로 채운다 , 보기는 9.로 채운다
# np.ones_like() - 기존 있는 array 에서 동일한 shape으로 만들어라
# np.arange() - 파이썬의 range
# np.linspace() - start에서 stop까지 범위에서 num개를 균일한 간격으로 원소를 생성하고 배열을 만들어요 : np.linspace(start,stop,num)
# ndarray를 만들고 그 안에 값을 난수(random)로 초기화하기 위해서는 어떻게 해야 하나요?
# 5가지 함수
# np.random.normal() - 정규분포 확률밀도함수에서 실수 표본을 추출
# np.random.rand() - 0 이상 1미만의 균등분포 확률밀도함수에서 실수 표본을 추출
# np.random.randn() - 표준 정규분포상에서 실수 표본을 추출해서 ndarray를 생성
# np.random.random() - 0이상 1미만의 균등분포에서 실수형 난수(random)를 추출해서 ndarray를 생성
# np.random.randint(low, high, shape) - 최소값과 최대값 사이에서 정해진 shape으로 난수를 추출해서
# ndarray를 생성 => 균등분포를 이용해서 난수(정수) 추출
# seed(n)처리 - 난수값을 도출/ 초기값이 없으면 랜덤값이 계속 바뀌지만 초기값이 잇으면 고정 값은 어 떤 수도 상관 없다 seed(n) / np.random.seed(3)
# shuffle()처리, - random 데이터의 순서를 바꾸려면 어떻게 해야 하나요?? => shfflue() => ndarray 원본이 변경
# sampling()처리 - 데이터 집합에서 일부를 무작위로 sampling을 수행하기 위해서 사용하는 choice()
# numpy.random.choice(n, size, replace, p)
# n : ndarray, 혹은 정수가 나오면 arange()를 수행한 결과
# size : sample 개수
# replace=True : 한번 뽑은걸 다시 뽑을 수 있어요! 중복으로 뽑을수 있다라는 뜻
# ndarray => p=[0.1, 0.3, 0, 0.1, 0.1, 0.35, 0.05] 확률
# 3. ndarray를 사용하기 위해 필수적으로 알아야 하는 속성과 함수
# reshape() => shape을 다시만들어 view처리
# ravel() => 무조건 1차원으로 만들어요! => view
# resize() => reshape()은 요소의 수가 맞지 않으면 shape이 변경되지 않아요!
# 요소의 수가 맞지 않아도 shape을 변경할 수 있어요! => view X
# copy() # view가 아니라 별도의 ndarray를 만들고 싶어요!
# 4. ndarray의 제어
indexig은 차원이 준다[n]
slicing은 차원을 유지[n:n] ndarray에 대해서 slicing을 하면 view가 만들어져요!!
[ , ] 기준으로 행과 열이 변경
print(arr[1,2]) #6 2차원 ndarray의 indexing(1행2열)
print(arr[2,:]) #[7, 8, 9] 1차원의 ndarray가 결과로 나와요(view)
print(arr[1:3,:]) # [[4, 5, 6] [7, 8, 9]] 결과값이 2차원이므로 주의
fancy indexing - 리스트형태로 만들어서 해당 값 위치에서 값을 가져온다 / fancy indexing은 차원을 유지
print(arr[[0, 2, 3]])
fancy indexing을 내부구조상 2번 사용할수 없다!! : np.ix_([0,2][0,2]) 를 이용해 사용 가능
print(arr[np.ix_([0,2],[0,2])]) # 이렇게 사용해야 해요! == print(arr[[0,2]][:,[0,2]])
Boolean Indexing
Boolean Mask안에서 True로 지정된 요소만 indexing하는 방식.
arr[arr % 2 == 0]
arr이 가진거중에 []를 계산하여 짝수만 나온다 / (데이터가 많은상태로 if 문이라면 하루종일 걸린다)
# 5. ndarray의 연산(사칙연산같은거..)
# 같은 shape을 가지는 ndarray끼리 연산이 가능하고 같은 위치에 있는 요소들끼리
# 연산이 수행
# 만약 shape이 다른경우 자동으로 shape을 맞추기 위해서 ndarray를 변형 => broadcasting
arr = np.arange(0,5,1)
arr2 = np.arange(10,13,1)
print(arr + 1)각 값에 1씩 더한다
[0 1 2 3 4]
[1 1 1 1 1]
위 상황에서 print(arr + arr2)
arr2가 3개면 +2를 못하므로 불가능
만약 arr1이 6개면 arr2값 * 2로 가능하다
# 행렬곱연산 ( matrix multiplication : 매트릭스 곱하기)
# np.matmul(행렬곱) 연산에서는 broadcasting이 발생하지 않아요!
# 앞쪽행렬의 열의 개수와 뒤쪽 행렬의 행의 개수가 같아야 행렬곱 연산이 성립!
# 6. ndarray 반복처리하려면 어떻게 해야 하나요?
# for, while을 이용해도 되요!
# iterator를 이용한 while문을 사용해서 반복처리를 해야 해요!
# 2차원 ndarray
it = np.nditer(arr, flags=['multi_index'])
while not it.finished:
idx = it.multi_index # (1,0)
print(arr[idx], end=' ')
it.iternext()
# 7. ndarray는 집계함수를 제공해줘요!
# print(arr)
[[1 2 3][4 5 6]]
# # print(arr.sum())
# print(np.sum(arr)) # 합
# print(np.mean(arr)) # 평균
# print(np.max(arr)) # 최대값
# print(np.min(arr)) # 최소값
# print(np.argmax(arr)) # 최대값을 찾아서 그 최대값의 index / 2차원이라도 1차원으로 만들어 몇번째인지
# print(np.std(arr)) # 표준편차
# axis개념.
1차원인 경우 축의 번호는 0이고 이때 0의 의미는 열 (열 방향)
2차원인 경우 축의 번호는 0과 1을 쓸 수 있고 0이 행, 1이 열
print(arr.argmax(axis=1)) # [2 2 2]
'python > pandas, numpy' 카테고리의 다른 글
dataframe으로 json이용 (0) | 2021.08.19 |
---|---|
pandas 기초 (0) | 2021.08.19 |
numpy 3일차 (0) | 2021.08.18 |
numpy 2일차 (0) | 2021.08.18 |
numpy 1일차 (0) | 2021.08.17 |