하나를 배우면 다른 하나를 자꾸 잊어버리게 된다. 이제 슬슬 헷갈리는 단계에 접어든듯..
그날그날 복습은 물론, 이전에 배웠던 파이썬 함수, 리스트 등등도 꾸준히 공부해야할 것 같다ㅠ.ㅠ
지금까지 데이터 다루기를 배웠었는데, 오늘부터 3주차까지는 데이터 다듬기를 배우게 된다.
후에 데이터 분석의 정확성과 모델의 성능을 높이기 위해 데이터를 처리하고 정제하는 과정으로, 아주 중요한 단계!
파이썬에서는 pandas와 numpy를 사용하여 수행할 수 있다.
Numpy란?
Python이 수학적 연산을 보다 효과적으로 할 수 있게 만드는 패키지이다.
배열을 작성하여 계산을 위한 빠르고 효율적인 방법을 제공하는데,
특히, 다른 데이터형을 포함할 수 있는 리스트와 달리, Numpy 배열은 배열 내 모든 데이터 종류가 동일( 한가지 자료형만 가짐)하다.
예시로, 리스트 각 요소에 2를 곱하는 것은 어렵지만, numpy를 통하여 배열 각 요소에 2를 곱할 수가 있다.
1. 라이브러리 불러오기
# 리스트
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 2 곱하기?
a = a * 2
# 확인
print(a)
# 출력 결과
[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 요소에 2가 곱해지는 것이 아니라 기존 리스트를 2번 담게 된다.
# 라이브러리 불러오기
import numpy as np
# 배열
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 2 곱하기
a = a * 2
# 확인
print(a)
# 출력 결과
[ 2 4 6 8 10 12 14 16 18]
2. 배열 만들기 (=Numpy 배열)
(1) 용어 정리
- axis: 배열의 각 축
- rank: 축의 개수
- shape: 축의 길이, 배열의 크기
(2) 배열 만들기 np.array()
# 1차원 리스트 (벡터)
a1 = [1, 2, 3, 4, 5]
# 배열로 변환
b1 = np.array(a1)
# 확인
print(b1)
# 출력 결과
[1 2 3 4 5]
# 2차원 리스트 (List of List)
# a2 = [[1.5, 2.5, 3.2], [4.2, 5.7, 6.4]]
a2 = [[1.5, 2.5, 3.2],
[4.2, 5.7, 6.4]]
# 배열로 변환
b2 = np.array(a2)
# 확인
print(b2)
# 출력 결과
[[1.5 2.5 3.2]
[4.2 5.7 6.4]]
# 3차원 리스트
a3 = [[[1, 3, 1],
[4, 7, 6],
[8, 3, 4]],
[[6, 2, 4],
[8, 1, 5],
[3, 5, 9]]]
# 배열로 변환
b3 = np.array(a3)
# 확인
print(b3)
# 출력 결과
[[[1 3 1]
[4 7 6]
[8 3 4]]
[[6 2 4]
[8 1 5]
[3 5 9]]]
(3) 배열 정보 확인
# 차원 확인
print(b1.ndim) # 1
print(b2.ndim) # 2
print(b3.ndim) # 3
# 형태(크기 확인)
# 앞에서부터 axis=0, axis=1, axis=2 크기 의미
print(b1.shape) # (5,)
print(b2.shape) # (2, 3)
print(b3.shape) # (2, 3, 3)
# 자료형 형식 확인
print(b1.dtype) # int32
print(b2.dtype) # float64
print(b3.dtype) # int32
3. Reshape
a = np.array([[1, 2, 3],
[4, 5, 6]]) # (2, 3) 2차원 배열
b = a.reshape(3,2) # (3, 2) 2차원 배열로 reshape
# 또는
b = np.reshape(a, (3, 2))
# 출력결과
[[1,2]
[3,4]
[5,6]]
# np.reshape() 함수는 다른 자료형도 변환시킨다.
a1 = [1, 2, 3, 4, 5, 6]
b = np.reshape(a1, (3, 2))
print(b)
# 출력결과
[[1,2]
[3,4]
[5,6]]
# 1차원 배열로 Reshape
c = a.reshape(6,) # a = ([[1, 2, 3],
[4, 5, 6]])
# 또는
c = np.reshape(a, (6,))
print(c)
# 출력 결과
[1 2 3 4 5 6]
* 행/열 개수를 모르는 경우, (m, -1) 또는 (-1, n) 처럼 사용해 행 또는 열 크기 한 쪽만 지정할 수 있다.
# (2, 3) 형태의 2차원 배열 만들기
a = np.array([[1, 2, 3],
[4, 5, 6]])
# 확인
print(a)
[[1 2 3]
[4 5 6]]
# reshape(m, -1) 형태로 지정하여 reshape
print(a.reshape(3, -1))
# 출력 결과
[[1 2]
[3 4]
[5 6]]
3. 배열 인덱싱과 슬라이싱 경우는 기존 내용과 동일하다.
# 첫 번째 ~ 세 번째 행, 두 번째 ~ 세 번째 열 조회
print(a[0:3, 1:3])
# 요소 중에서 90 이상인 것만 조회
print(score[score >= 90])
Numpy에서 반드시 숙지해야 하는 내용은,
1) np.array()로 배열만들기.
2) shape 속성으로 배열의 형태 확인하기.
3) Reshape로 배열 수정하기.
4) 또한, 한가지 자료형만 가지는 특징이 있다는 것이다.
'파이썬 > 데이터 다듬기' 카테고리의 다른 글
[240920] 데이터다듬기#6 - 판다스 데이터프레임 변경 (2) (0) | 2024.09.21 |
---|---|
[240920] 데이터다듬기 #5 판다스 데이터프레임 변경(1) (1) | 2024.09.21 |
[240913] 데이터다듬기#4 - 판다스 데이터프레임 집계 (0) | 2024.09.13 |
[240913] 데이터다듬기#3 - 판다스 데이터프레임 조회 (1) | 2024.09.13 |
[240912] 데이터 다듬기 #2 판다스 데이터프레임 생성 (0) | 2024.09.12 |