[NumPy] 데이터 분석하기
NumPy
Python에서 대규모 다차원 배열을 다룰 수 있게 도와주는 라이브러리
아래처럼 모듈을 import 하여 사용한다.
1
import numpy as np
dtype
dtype에 단일 타입을 입력할 수 있다.
dtype을 전달하면 해당 타입으로 배열이 생성된다.
dtype | 설명 | 다양한 표현 |
---|---|---|
int | 정수형 타입 | i, int_, int32, int64, i8 |
float | 실수형 타입 | f, float_, float32, float64, f8 |
str | 문자열 타입 | str, U, U32 |
book | 부울 타입 | ?, bool_ |
1
2
3
4
5
6
arr = np.array([1, 2, 3, 4], dtype=float)
# array([1., 2., 3., 4.]) 실수 형태
arr.dtype
# dtype('float64')
arr.astype(int)
# array([1, 2, 3, 4]) 정수 형태로 변환
np 메서드
array(object, dtype, …)
배열을 생성한다. (object 파라미터는 배열이다.)
1
2
3
4
5
6
np.array([1, 2, 3, 4, 5])
# array([1, 2, 3, 4, 5])
np.array([[1, 2], [3, 4]])
# array([[1, 2],
# [3, 4]])
zeros(shape, dtype, …)
dtype 타입의 0이 n개 들어간 배열을 생성한다.
shape에는 n 혹은 (m, n) 형식의 튜플이 들어갈 수 있다.
(m, n) 형식인 경우 n개의 요소를 가진 배열을 m개 생성한다.
1
2
3
4
5
6
np.zeros(10, dtype=int)
# array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.zeros((2, 2))
# array([[ 0., 0.],
# [ 0., 0.]])
ones(shape, dtype, …)
dtype의 1이 n개 들어간 배열을 생성한다.
shape에는 n 혹은 (m, n) 형식의 튜플이 들어갈 수 있다.
(m, n) 형식인 경우 n개의 요소를 가진 배열을 m개 생성한다.
1
2
3
4
np.ones((3, 5), dtype=float)
# array([[1., 1., 1., 1., 1.],
# [1., 1., 1., 1., 1.],
# [1., 1., 1., 1., 1.]])
np.arange([start, ]stop, [step, ]dtype, …)
start 이상 stop 미만 사이에서 step씩 증가하는 배열을 생성한다.
1
2
np,arange(0, 20, 2)
# array([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
np.random 메서드
랜덤한 값을 가진 배열을 생성한다.
random.random(shape)
0.0 이상 1.0 미만의 범위에서 n개의 임의 부동 소수점 배열 shape 형식으로 생성한다.
1
2
3
np.random.random((2, 2))
# array([[0.30986539, 0.85863508],
# [0.89151021, 0.19304196]])
random.normal(average, scale, shape)
평균이 0이고 표준편차가 scale인 배열을 shape 형식으로 생성한다.
1
2
3
np.random.normal(0, 1, (2, 2))
# array([[0.44050683, 0.04912487],
# [-1.67023947, -0.70982067]])
random.randint(start, stop, shape)
start 이상 stop 미만 범위에서 shape 형식으로 생성한다.
1
2
3
np.random.randint(0, 10, (2, 2))
# array([[3, 9],
# [3, 2]])
배열 프로퍼티
1
2
3
4
5
6
7
8
x2 = np.random.randint(10, size=(3, 4))
# array([[2, 2, 9, 0],
# [4, 2, 1, 0],
# [1, 8, 7, 3]])
x2.ndim # 2 :배열의 차원
x2.shape # (3,4) :배열의 모양
x2.size # 12 :총 요소의 수
x2.dtype # dtype('int64')
배열 수정 메서드
reshape
array의 shape를 변경할 수 있다.
1
2
3
4
5
6
7
x = np.arange(8)
x.shape #(8,)
x2 = x.reshape((2,4))
# array([[0, 1, 2, 3],
# [4, 5, 6, 7]])
x2.shape
# (2, 4)
concatenate
axis가 0이면 세로, 1이면 가로 방향으로 배열을 붙인다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
matrix = np.array([[0,1,2,3],
[4,5,6,7]])
# matrix 두 개를 세로로 붙이기
m = np.concatenate([matrix, matrix], axis=0)
print(m)
# [[0 1 2 3]
# [4 5 6 7]
# [0 1 2 3]
# [4 5 6 7]]
# matrix 두 개를 가로로 붙이기
n = np.concatenate([matrix, matrix], axis=1)
print(n)
# [[0 1 2 3 0 1 2 3]
# [4 5 6 7 4 5 6 7]]
split
axis가 0이면 세로, 1이면 가로 방향으로 배열을 나눈다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
matrix = np.array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9,10,11],
[12,13,14,15]])
# matrix를 [3] 행에서 axis 0으로 나누기
a, b = np.split(matrix, [3], axis=0)
# a = [[0 1 2 3]
# [4 5 6 7]
# [8 9 10 11]]
# b = [12 13 14 15]
# matrix를 [1] 열에서 axis 1로 나누기
c, d = np.split(matrix, [1], axis=1)
# c = [[ 0]
# [ 4]
# [ 8]
# [12]]
# d = [[ 1 2 3]
# [ 5 6 7]
# [ 9 10 11]
# [13 14 15]]
기본 연산
array는 기본 연산을 지원하기 때문에 for문을 돌리는 것보다 기본 연산을 사용하면 훨씬 빠르게 루프를 돌 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
x = np.range(4)
# [0, 1, 2, 3]
x + 5
# [5, 6, 7, 8]
x - 5
# [-5, -4, -3, -2]
x * 5
# [0, 5, 10, 15]
x / 5
# [0., 0.2, 0.4, 0.6]
행렬간 연산
1
2
3
4
5
6
7
8
9
10
x = np.arange(4).reshape((2,2))
y = np.random.randint(10, size=(2,2))
# x = [[0, 1], [2, 3]]
# y = [[1, 6], [4, 2]]
x + y
# [[1, 7], [6, 5]]
x - y
# [[-1, -5], [-2, 1]]
브로드캐스팅
shape이 다른 array끼리의 연산
1
2
3
matrix = [[2, 4, 2], [6, 5, 9], [9, 4, 7]]
matrix + np.array([1, 2, 3])
# [[3, 6, 5], [7, 7, 12], [10, 6, 10]]
집계함수
데이터에 대한 요약 통계를 볼 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
x = np.arange(8).reshape((2, 4))
# [[0, 1, 2, 3], [4, 5, 6, 7]]
np.sum(x) # 28 (총 합)
np.min(x) # 0 (최소값)
np.max(x) # 7 (최대값)
np.mean(x) # 3.5 (평균값)
np.std(x) # 2.29128784747792 (표준편차)
np.sum(x, axis=0)
# [4, 6, 8, 10] (세로 방향으로 더하기)
np.sum(x, axis=1)
# [6, 22] (가로 방향으로 더하기 [0+1+2+3, 4+5+6+7])
마스킹 연산
array를 True, False 값으로 뽑아내는 방법
1
2
3
4
5
6
7
8
9
x = np.arange(5)
# [0, 1, 2, 3, 4]
x < 3
# [True, True, True, False, False]
x > 5
# [False, False, False, False, False]
x[x < 3]
# [0, 1, 2] (True인 인덱스만)