NumPy - 5. 프로젝트 및 응용데이터 분석 프로젝트
2025. 1. 20. 22:12ㆍ프로그래밍 (확장)/Python-NumPy
1. 데이터 분석 프로젝트
NumPy로 간단한 데이터셋 분석
NumPy를 활용하여 간단한 데이터셋(예: 날씨 데이터, 매출 데이터)을 분석하고 통계 정보를 도출할 수 있습니다.
예제: 날씨 데이터 분석
import numpy as np
# 가상의 날씨 데이터 (온도, 강수량, 풍속)
data = np.array([
[25, 0, 5],
[28, 3, 7],
[22, 5, 2],
[21, 0, 4],
[26, 2, 6]
])
# 평균값 계산
mean_values = np.mean(data, axis=0)
print("평균값 (온도, 강수량, 풍속):", mean_values)
# 최대값 및 최소값
max_values = np.max(data, axis=0)
min_values = np.min(data, axis=0)
print("최대값:", max_values)
print("최소값:", min_values)
통계 분석 및 시각화 연계
Matplotlib을 활용하여 통계 결과를 시각화합니다.
import matplotlib.pyplot as plt
# 데이터 시각화
categories = ['온도', '강수량', '풍속']
plt.bar(categories, mean_values)
plt.title('평균 날씨 데이터')
plt.ylabel('값')
plt.show()
2. 이미지 처리 프로젝트
간단한 이미지 필터 구현
NumPy를 사용하여 간단한 이미지 필터(예: 엣지 감지, 블러)를 구현할 수 있습니다.
예제: 엣지 감지 필터
from PIL import Image
import numpy as np
# 이미지 로드 및 배열 변환
image = Image.open('example.jpg').convert('L') # 그레이스케일 변환
image_array = np.array(image)
# 엣지 필터 커널 정의
kernel = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
# 필터 적용
filtered_image = np.zeros_like(image_array)
for i in range(1, image_array.shape[0]-1):
for j in range(1, image_array.shape[1]-1):
region = image_array[i-1:i+2, j-1:j+2]
filtered_image[i, j] = np.sum(region * kernel)
# 결과 이미지 저장
filtered_image = np.clip(filtered_image, 0, 255)
Image.fromarray(filtered_image.astype('uint8')).save('filtered.jpg')
이미지의 RGB 채널 분리 및 변환
이미지의 각 채널(RGB)을 분리하거나 새로운 색상 채널을 생성할 수 있습니다.
예제:
# 이미지 로드
image = Image.open('example.jpg')
image_array = np.array(image)
# RGB 채널 분리
red_channel = image_array[:, :, 0]
green_channel = image_array[:, :, 1]
blue_channel = image_array[:, :, 2]
# 새로운 조합 생성
combined_image = np.stack((red_channel, blue_channel, green_channel), axis=2)
Image.fromarray(combined_image).save('combined.jpg')
3. 선형대수 프로젝트
선형 방정식 풀이와 응용
NumPy의 linalg.solve를 사용하여 선형 방정식을 해결할 수 있습니다.
예제:
import numpy as np
# Ax = b 형태의 선형 방정식
A = np.array([[3, 1],
[1, 2]])
b = np.array([9, 8])
# 방정식 풀이
x = np.linalg.solve(A, b)
print("해:", x)
특이값 분해(SVD)와 차원 축소 활용
특이값 분해(SVD)는 차원 축소 및 데이터 압축에 사용됩니다.
예제:
# 랜덤 행렬 생성
matrix = np.random.rand(4, 3)
# SVD 수행
U, S, VT = np.linalg.svd(matrix)
print("U:", U)
print("S:", S)
print("VT:", VT)
# 데이터 압축 예
compressed_matrix = np.dot(U[:, :2], np.dot(np.diag(S[:2]), VT[:2, :]))
print("압축된 행렬:", compressed_matrix)
4. 연습 문제와 실습
난이도별 연습 문제 제공
- 난이도 낮음: 배열 생성 및 기본 연산 수행.
- 예: 0부터 20까지의 숫자를 5씩 증가시키는 배열 생성.
- 난이도 중간: 다차원 배열의 통계값 계산.
- 예: 2D 배열의 행과 열별 평균값 구하기.
- 난이도 높음: 사용자 정의 필터 구현.
- 예: 특정 커널을 사용한 이미지 컨볼루션 수행.
오픈 데이터 활용 실습
- Kaggle에서 제공되는 데이터셋(예: 코로나19 데이터, 주식 가격 데이터) 활용.
- 예제 프로젝트: "날씨 데이터 기반 예측 모델 구축."
5. 학습 지원 자료
Jupyter Notebook 기반 학습
- 이론과 코드를 함께 학습할 수 있도록 Jupyter Notebook을 활용.
- 시각적이고 인터랙티브한 방식으로 실습 가능.
단계별 퀴즈와 실습 문제
- 각 단계가 끝날 때마다 간단한 퀴즈로 복습.
- 실습 문제를 통해 응용력을 배양.
NumPy 공식 문서와 학습 전략
- 공식 문서를 참고하여 NumPy의 고급 기능 학습.
- 예제 중심 학습으로 실무 프로젝트에 바로 적용 가능.
'프로그래밍 (확장) > Python-NumPy' 카테고리의 다른 글
NumPy - 4. 실전 활용데이터 전처리 (0) | 2025.01.20 |
---|---|
NumPy - 3. 고급 배열 변형 (0) | 2025.01.20 |
NumPy - 2. 배열 연산 (0) | 2025.01.20 |
NumPy - 1. 기초 (0) | 2025.01.20 |
NumPy 기본 사용법 (0) | 2024.07.29 |