본문 바로가기

파이썬

1. NumPy 기본 튜토리얼

이패스코리아 신성진 김용재

# 📌 NumPy 기초 튜토리얼

# 1️⃣ NumPy 설치 및 불러오기
import numpy as np

# 2️⃣ 배열(Array) 생성하기

## ✅ 1차원 배열 생성
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)
print(type(arr1))  # <class 'numpy.ndarray'>

## ✅ 2차원 배열(행렬) 생성
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)

# 3️⃣ 배열 속성 확인
print("배열 크기:", arr2.shape)    # (행, 열) 형태 반환
print("배열 차원:", arr2.ndim)      # 배열 차원(1D, 2D, 3D 등)
print("배열 요소 개수:", arr2.size)  # 배열 내 총 요소 개수
print("배열 데이터 타입:", arr2.dtype) # 배열 요소의 데이터 타입

# 4️⃣ 특정 값으로 배열 생성

## ✅ 0으로 채운 배열
zeros = np.zeros((3, 3))  # 3x3 크기의 0 행렬
print(zeros)

## ✅ 1로 채운 배열
ones = np.ones((2, 4))  # 2x4 크기의 1 행렬
print(ones)

## ✅ 특정 숫자로 채운 배열
full = np.full((2, 2), 7)  # 2x2 크기의 7로 채운 배열
print(full)

# 5️⃣ 범위 및 랜덤 값 생성

## ✅ 특정 범위의 숫자 배열
arr = np.arange(1, 10, 2)  # 1부터 9까지 2씩 증가하는 숫자 배열
print(arr)  # [1 3 5 7 9]

## ✅ 특정 범위의 값 균등 분할
arr = np.linspace(0, 10, 5)  # 0부터 10까지 5개의 값으로 나눔
print(arr)  # [ 0.   2.5  5.   7.5 10. ]

## ✅ 랜덤 값 생성
rand_arr = np.random.rand(3, 3)  # 0~1 사이의 난수를 가지는 3x3 배열
print(rand_arr)

# 6️⃣ 배열 연산

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print("덧셈:", a + b)  # [5 7 9]
print("뺄셈:", a - b)  # [-3 -3 -3]
print("곱셈:", a * b)  # [ 4 10 18]
print("나눗셈:", a / b)  # [0.25 0.4  0.5 ]

## ✅ 행렬 곱 (dot product)
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

dot_product = np.dot(A, B)  # 행렬 곱 수행
print(dot_product)

# 7️⃣ 배열 인덱싱과 슬라이싱

## ✅ 1차원 배열 인덱싱
arr = np.array([10, 20, 30, 40, 50])
print(arr[0])  # 10
print(arr[-1]) # 50

## ✅ 2차원 배열 인덱싱
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2[0, 1])  # 첫 번째 행, 두 번째 열 (값: 2)

## ✅ 슬라이싱
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])
print(arr[2:5])   # 2번째부터 4번째까지 (2,3,4)
print(arr[:4])    # 처음부터 3번째까지 (0,1,2,3)
print(arr[::2])   # 2칸씩 건너뛰기 (0,2,4,6)

# 8️⃣ 배열 변환 및 정렬

## ✅ 배열 모양 변경 (reshape)
arr = np.array([[1, 2, 3], [4, 5, 6]])
reshaped = arr.reshape(3, 2)  # (3행, 2열) 형태로 변경
print(reshaped)

## ✅ 배열 정렬
arr = np.array([3, 1, 4, 5, 2])
sorted_arr = np.sort(arr)  # 오름차순 정렬
print(sorted_arr)  # [1 2 3 4 5]

# 9️⃣ 기본 통계 함수

arr = np.array([1, 2, 3, 4, 5])

print("합계:", np.sum(arr))  # 15
print("최소값:", np.min(arr)) # 1
print("최대값:", np.max(arr)) # 5
print("평균:", np.mean(arr))  # 3.0
print("중앙값:", np.median(arr)) # 3.0
print("표준편차:", np.std(arr)) # 1.414

# 🔟 NumPy 활용 – 머신러닝 데이터 준비

## ✅ 데이터 정규화 (Min-Max Scaling)
arr = np.array([10, 20, 30, 40, 50])
normalized = (arr - np.min(arr)) / (np.max(arr) - np.min(arr))
print(normalized)  # [0.   0.25 0.5  0.75 1. ]

## ✅ 결측치 처리 (NaN 값 대체)
arr = np.array([1, 2, np.nan, 4, 5])
arr = np.nan_to_num(arr, nan=np.mean(arr[np.logical_not(np.isnan(arr))]))  # NaN을 평균으로 대체
print(arr)

# 🎯 마무리
# 이제 NumPy의 기본 개념과 활용법을 익혔습니다!
# 머신러닝, 데이터 분석에서 자주 사용되므로 실습을 반복해보세요 🚀