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. 연습 문제와 실습

난이도별 연습 문제 제공

  1. 난이도 낮음: 배열 생성 및 기본 연산 수행.
    • 예: 0부터 20까지의 숫자를 5씩 증가시키는 배열 생성.
  2. 난이도 중간: 다차원 배열의 통계값 계산.
    • 예: 2D 배열의 행과 열별 평균값 구하기.
  3. 난이도 높음: 사용자 정의 필터 구현.
    • 예: 특정 커널을 사용한 이미지 컨볼루션 수행.

오픈 데이터 활용 실습

  • 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