NumPy란? 파이썬 데이터 과학의 핵심
출처: Dev.to
Python에서 데이터 과학, 머신러닝, AI를 하고 싶다면 — NumPy를 계속해서 사용하게 됩니다. pandas부터 TensorFlow까지 모든 주요 라이브러리는 NumPy 위에 구축되어 있습니다. 여기서 NumPy가 무엇이며 왜 중요한지 살펴보겠습니다.
NumPy는 Numerical Python의 약자입니다. 이 라이브러리는 Python이 대규모 숫자 배열을 매우 빠르게 다룰 수 있게 해줍니다.
Python 리스트도 숫자를 저장할 수 있지만, 수학 연산에서는 느립니다. NumPy 배열은 같은 작업을 10배에서 100배 빠르게 수행합니다.
데이터가 수천 행에 달하거나 수백만 개의 예제로 머신러닝 모델을 학습시킬 때 이 차이는 크게 작용합니다.
import numpy as np
sales = np.array([45000, 52000, 38000, 61000, 55000])
print(np.mean(sales)) # average
print(np.sum(sales)) # total
print(np.max(sales)) # highest
print(np.std(sales)) # how spread out the numbers are
다섯 줄만으로 어떤 숫자 리스트든 평균, 합계, 최댓값, 표준편차를 즉시 구할 수 있습니다. 루프도 없고, 수동 계산도 필요 없습니다.
Python 리스트에 2를 곱하면 Python이 각 요소를 하나씩 순회합니다. 반면 NumPy 배열에 2를 곱하면 내부에서 최적화된 C 코드가 모든 요소를 동시에 처리합니다.
import numpy as np
import time
data = list(range(1_000_000))
np_data = np.array(data)
# Python loop
start = time.time()
result = [x * 2 for x in data]
print(f"Python loop: {time.time() - start:.4f} seconds")
# NumPy
start = time.time()
result = np_data * 2
print(f"NumPy: {time.time() - start:.4f} seconds")
내 컴퓨터에서는 이 연산에서 NumPy가 약 50배 더 빠릅니다. 백만 개의 아이템을 기준으로 한 것이죠. 데이터가 커질수록 그 차이는 더욱 커집니다.
sales = np.array([45000, 52000, 38000, 61000, 55000])
# Get only months above 50,000
high_months = sales[sales > 50000]
print(high_months) # [52000 61000 55000]
avg = np.mean(sales)
performance = np.where(sales >= avg, "Good", "Below average")
print(performance)
# ['Good' 'Good' 'Below average' 'Good' 'Good']
# 6 months of data: revenue, orders, avg order value
monthly = np.array([
[45000, 120, 375],
[52000, 138, 377],
[38000, 102, 373],
])
print(monthly[:, 0].sum()) # total revenue across all months
print(monthly[:, 1].mean()) # average orders per month
[:, 0] 은 “모든 행, 0번째 열”을 의미합니다. 이렇게 중첩 루프 없이 2차원 데이터를 슬라이스할 수 있습니다.
pandas DataFrame은 NumPy 배열 위에 구축됩니다. pandas에서 df['Revenue'].mean()을 호출하면 pandas가 내부적으로 NumPy를 사용합니다. scikit-learn에서 머신러닝 모델을 학습시킬 때도 데이터를 NumPy 배열로 변환한 뒤 처리합니다.
NumPy를 이해한다는 것은 앞으로 사용할 모든 데이터 과학 도구가 내부에서 어떻게 동작하는지 알게 된다는 뜻입니다.
pip install numpy
그 다음 Google Colab을 열고 바로 아래 코드를 실행해 보세요:
import numpy as np
data = np.array([10, 20, 30, 40, 50])
print("Mean:", np.mean(data))
print("Doubled:", data * 2)
print("Above 25:", data[data > 25])
세 줄만으로 루프를 하나도 작성하지 않고 데이터를 필터링하고, 변환하고, 분석할 수 있습니다.
NumPy 덕분에 Python이 실제 데이터 과학에 충분히 빠르게 동작합니다 — 모든 것이 이 위에 구축된 기반입니다.
작성자: Raaga Priya Madhan — 방갈로르의 컴퓨터공학 전공 학생. 저는 Python, 데이터 과학, 머신러닝에 대해 글을 씁니다. 제 코드는 GitHub에서 확인하고, LinkedIn에서 연결해 주세요.