본문 바로가기

인공지능/딥러닝

데이터 처리 도구 - 넘파이!

반응형

오늘은 데이터세트를 전처리 하기위한 도구인 넘파이에 대해서 알아볼게요!

넘파이란?

NumPy는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리할 수 있도록 지원하는 파이썬의 라이브러리이다. NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공한다.

  • 정의는 위와 같아요. 데이터 전처리 할 때 정말 많이 사용하는 라이브러리이니, 잘 알아둬야 해요!

넘파이 배열 만들기

  • 넘파이 배열을 만드는 방법을 알아볼게요!
  • 넘파이 배열은 단순히 array() 함수를 이용해서 파이썬에서 list를 넘파이 배열로 변환해 줄 수 있어요!
import numpy 

mid_scores = np.array([10, 20, 30])
final_scores = np.array([60, 70, 80])
  • 위와 같이 python list를 입력값으로 받아, 넘파이 배열로 만들어줍니다! 단, 파이썬의 List와는 다르게 넘파이 배열 속 값들은 동일한 자료형으로 통일이 되어 있답니다. 따라서 자료형이 다른 입력은 주의를 하셔야 겠죠?

넘파이 배열 연산해주기!

  • 넘파이 배열을 대상으로 더하기, 빼기, 곱하기, 나누기 연산을 바로 해줄 수 있어요!
  • 코드를 보시죠!
mid_scores = np.array([10, 20, 30])
final_scores = np.array([60, 70, 80])

total = mid_scores + final_scores

print('합계: ', total)
print('평균: ', total/2)
print('곱하기: ', mid_scores * 2)
print('나누기: ', mid_scores / 2)
  • 이렇게 넘파일 배열을 대상으로 바로 연산이 가능하다는 장점이 있습니다! 하나를 더 알아볼까요?
import numpy as np

numpy_height = np.array([1.83, 1.76, 1.69, 1.89, 1.77, 1.73])
numpy_weight = np.array([86, 74, 59, 95, 89, 68])

bmi = numpy_weight / (numpy_height ** 2)

print('대상자들의 키:', numpy_height)
print('대상자들의 몸무게: ', numpy_weight)

print('대상자들의 bmi 지수: ', bmi)
  • 이런식으로 배열에 대한 연산을 간편하게 해줘서, 정말 편리하죠?

넘파이 배열에 대한 특성 알아보기!

  • 데이터를 조사할 때 해당 데이터의 유형에 대해서 꼭 알아보게 됩니다. 따라서 우리는 자주 사용하는 데이터 특성에 대해 알아보겠습니다!
a = np.array([1, 2])

print(a.shape, a.dtype, a.ndim)
  • shape, dtype, ndim와 같이 데이터에 대한 특성을 알려주는 인자들입니다! 알아두고 써보세요!

넘파이 2차원 배열 만들어보기!

  • 보통 데이터는 고차원 배열로 이루어져 있을거에요! 그러니까 해당 데이터들을 탐색할 때 2차원 배열 구조를 잘 알아야겠죠?
np_array1 = np.array([[2,3,4], [4,5,6], [7,8,9]])
np_array2 = np.array([[1,1,1,],[1,1,1], [1,1,1]])
  • 위 코드를 입력해서 배열 특성 코드를 한번 실행시켜 보세요!

넘파이 2차원 배열에 인덱스로 접근하기!

  • 데이터를 가져올 때 어떤식으로 가져올까요? 다음과 같이 가져올 수 있어요!
np_array1 = np.array([[1, 2, 3], [4,5,6], [7,8,9]])

print(np_array1[0, 2])
print(np_array1[0][2])
print(np_array1[0, 0])
print(np_array1[2, -1])
  • 인덱스에 접근하는 방법이 다양하니 더 알아보아요!
import numpy as np 
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]])

print(a[::2][::2])
print(a[::2, ::2])
  • 위 코드를 한번 실행해보세요! 신기하게도 잘 출력됩니다!
import numpy as np

player =[[
    170, 76.4
],
    [183, 86.2],
    [181, 78.5],
    [176, 80.1]
]

np_player = np.array(player)

print('몸무게가 80이상인 선수 정보')
print(np_player[np_player[:, 1] >= 80.0])

print('키가 180 이상인 선수 정보')
print(np_player[np_player[:, 0] >= 180.0])
  • 위 코드를 보시면 인덱스를 대상으로 비교 연산을 진행하고 있어요! 요런 식으로 조건식을 만들어 특정 조건에 맞는 값들만 가져올 수도 있습니다!
import numpy as np

player =[[
    170, 76.4
],
    [183, 86.2],
    [181, 78.5],
    [176, 80.1]
]

np_player = np.array(player)

print('몸무게가 80 이상이고, 키가 180이상인 선수 정보')
print(np_player[(np_player[:, 1] >= 80.0) & (np_player[:, 0] >= 180.0)])
  • 위 코드처럼 &연산자를 통해서 하나로 연결해 수도 있습니다!

넘파이로 제로 배열 생성하기!

import numpy as np

zero1 = np.zeros(3, dtype='int32')
print(zero1)

zero2 = np.zeros((2,3), dtype='float64')
print(zero2)

위 처럼 zeros 함수를 사용해서 0으로 가득찬 배열을 만들 수 있습니다!!

  • zeros가 있으면? ones가 있겠죠? 연습겸 다음 그림 처럼 코드를 만들어보세요!

  • 답안 코드
box = np.ones((5,5), dtype='int32')

#box[1:4, 1:4] = 0
#box[1:-1, 1:-1] = 0

box[0, :] = 0
box[:, 0] = 0
box[4, :] = 0
box[:, 4] = 0

print(box)
  • 배열을 만들고 인덱싱을 잘 할 수 있겠죠?

오늘은 간단하게나마 넘파이를 사용하는 방법에 대해서 알아보았어요! 다음에는 그래프 관련해서 알아볼게요!

반응형