파이썬라이브러리를 활용한 데이터 분석 - Numpy

esc247·2022년 6월 9일
0

Data Analysis

목록 보기
1/10
post-thumbnail

Numpy란

-다차원 배열을 효과적으로 처리
-List에 비해 빠르고 강력한 기능

ndarray

-N차원의 배열 객체, 전체 데이터 블록에 수학적인 연산 수행 가능.

-모든 원소는 같은 자료형

  • .shape : 각 차원의 크기 알려줌, .dtype : 자료형 알려줌, .ndim : 차원
    -> dtype은 특정 데이터를 해석하기 위해 필요한 정보 담고 있는 특수 객체
  • array.astype() 으로 배열의 dtype 변환 가능
    -> return 값으로 있으므로 초기화 해야
  • np.array() 이용해 넘겨받은 데이터가 들어있는 새로운 NumPy 배열 생성.
  • .zeros() , .ones() : 주어진 길이나 모양에 각각 0과 1이 들어 있는 배열 생성, .empty() : 초기화 되지 않은 배열
  • for 문 작성하지 않고 데이터 일괄 처리 가능 - 벡터화
    -> ex) arr*arr, arr**0.5 등
  • 배열 조각은 원본배열의 뷰, 데이터 복사되지 않고 그대로 원본 배열에 반영
    ->복사 얻고 싶다면 .copy() 사용
  • 2차원 배열에서 각 인덱스에 해당하는 요소는 1차원 배열.
    arr2d[0][0] == arr2d[0,1] , 동일한 표현이다.

불리언 값으로 선택

names = ['Bob', 'Joe', 'Will', 'Bob', 'Joe', 'Joe']
data = np.random.randn(7,4)
data[names=='Bob’ ] # 일치하는 행 array로 리턴
  • ~(names == ‘Bob’): ~ 연산자는 반대로 쓰고 싶을 때 사용
  • & , | 도 사용 가능.

Numpy의 차원

1차원 축 (행) : axis 0 - Vector
2차원 축 (열) : axis 1 - Matrix
3차원 축 (채널) : axis 2 - Tensor

Numpy 생성

array1 = np.arange(4)
array2 = np.zeros((4,4), dtype = float)
array3 = np.ones((3,3), dtype = str)
array4 = np.random.randint(0,10,(3,3))
#평균 0 , 표준편차 1인 배열
array5 = np.random.normal(0,1,(3,3))

합치기

array1 = np.array([1,2,3])
array2 = np.array([4,5,6])
array3= np.concatenate([array1, array2])

바꾸기

array1= np.array([1,2,3,4])
array2= np.reshape((2,2))

세로로 합치기

array1 = np.arange(4).reshape(1, 4)
array2 = np.arange(8).reshape(2, 4)
array3= np.concatenate([array1, array2], axis=0)

나누기

array = np.arange(8).reshape(2, 4)
left,right = np.split(array, [2], axis=1) #왼쪽 오른쪽으로 2x2 로 나눔

연산과 함수

연산

import numpy as np
 
array = np.random.randint(1,10,size=4).reshape(2,2)
print(array)

[[7 9]
 [5 3]]
result_array = array * 10
print(result_array)

[[70 90]
 [50 30]]

서로 다른 형태 연산

  • 행 우선으로 수행된다. (broadcasting, 형태를 동적으로 변환)
array1 = np.arange(4).reshape(2,2)
array2 = np.arange(2)
 
array1 + array2

array([[0, 2],
       [2, 4]])
array1 = np.arange(0,8).reshape(2,4)
array2 = np.arange(0,8).reshape(2,4)
array3 = np.concatenate([array1,array2],axis=0)
 
array4 = np.arange(0,4).reshape(4,1)
 
print(array3+array4)

[[ 0  1  2  3]
 [ 5  6  7  8]
 [ 2  3  4  5]
 [ 7  8  9 10]]

마스킹 연산

: 각 원소에 대해 체크

array1 = np.arange(16).reshape(4,4)
print(array)

array2 = array1<10
print(array2)

array1[array2] = 100
print(array1)


[[7 9]
 [5 3]]
[[ True  True  True  True]
 [ True  True  True  True]
 [ True  True False False]
 [False False False False]]
[[100 100 100 100]
 [100 100 100 100]
 [100 100  10  11]
 [ 12  13  14  15]]
array = np.arange(16).reshape(4,4)

print(np.max(array), np.min(array), np.sum(array), np.mean(array))
print(array)
print("합계: ", np.sum(array,axis=0))

15 0 120 7.5
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
합계 [24 28 32 36]

Numpy 저장

import numpy as np

array = np.arange(0,10)
np.save('saved.npy',array)

result = np.load('saved.npy')
print(result)

[0 1 2 3 4 5 6 7 8 9]
array1 = np.arange(0,10)
array2= np.arange(10,20)
np.savez('saved.npz',array1=array1,array2=array2)

data = np.load('saved.npz')
result1= data['array1']
result2 = data['array2']

print(result1,'\n',result2)
[0 1 2 3 4 5 6 7 8 9] 
 [10 11 12 13 14 15 16 17 18 19]

Numpy 정렬

array = np.array([5,9,10,3,7])
array.sort()
print(array)
#내림차순
print(array[::-1])
[ 3  5  7  9 10]
[10  9  7  5  3]

다차원 배열 정렬

  • 열을 기준으로도 정렬 가능
array = np.array([[9,1,3,5,10],[5,2,6,10,9]])
print(array)
array.sort(axis=0)
print(array)
[[ 9  1  3  5 10]
 [ 5  2  6 10  9]]
[[ 5  1  3  5  9]
 [ 9  2  6 10 10]]
#균일한 간격으로 데이터 생성
array = np.linspace(0,10,5)
print(array)

[ 0.   2.5  5.   7.5 10. ]
#난수의 재현 (실행마다 결과 동일)
np.random.seed(7)
print(np.random.randint(0,10,(2,3)))

[[4 9 6]
 [3 3 7]]
#numpy 배열 객체 복사
array1 = np.arange(0,10)
array2 = array1.copy()
array2[0]=100
print(array1)

[0 1 2 3 4 5 6 7 8 9]
#중복 원소 제거
array = np.array([1,1,2,3,4,5,5,6,6])
print(np.unique(array))

[1 2 3 4 5 6]

profile
막상 하면 모르니까 일단 하자.

0개의 댓글