본문 바로가기
파이썬/데이터 다듬기

[240912] 데이터 다듬기 #1 Numpy(넘파이)

by 황오독 2024. 9. 12.
더보기

하나를 배우면 다른 하나를 자꾸 잊어버리게 된다. 이제 슬슬 헷갈리는 단계에 접어든듯..

그날그날 복습은 물론, 이전에 배웠던 파이썬 함수, 리스트 등등도 꾸준히 공부해야할 것 같다ㅠ.ㅠ

 

지금까지 데이터 다루기를 배웠었는데, 오늘부터 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) 또한, 한가지 자료형만 가지는 특징이 있다는 것이다.