728x90
반응형
1. 선형 보간법 (Linear Interpolation): 데이터 포인트 간에 직선을 그려서 결측값을 추정하는 방법입니다. numpy 또는 scipy의 함수들을 사용할 수 있습니다.
import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt
# 예시 데이터
x = np.array([0, 1, 4, 5])
y = np.array([1, 2, np.nan, 4])
# 결측값을 제외한 데이터로 보간 함수를 생성
x_no_nan = x[~np.isnan(y)]
y_no_nan = y[~np.isnan(y)]
f = interp1d(x_no_nan, y_no_nan, kind='linear', fill_value="extrapolate")
# 결측값을 보간
x_new = np.linspace(min(x), max(x), num=100)
y_new = f(x_new)
# 결과 시각화
plt.plot(x_no_nan, y_no_nan, 'o', label='Original Data')
plt.plot(x_new, y_new, '-', label='Interpolated Data')
plt.legend()
plt.show()
2. 다항식 보간법 (Polynomial Interpolation): numpy.polyfit 또는 scipy.interpolate의 BarycentricInterpolator 등을 사용하여 다항식 함수를 사용해 보간합니다.
import numpy as np
from numpy.polynomial import Polynomial
import matplotlib.pyplot as plt
# 예시 데이터
x = np.array([0, 1, 4, 5])
y = np.array([1, 2, np.nan, 4])
# 결측값을 제외한 데이터로 다항식 피팅
x_no_nan = x[~np.isnan(y)]
y_no_nan = y[~np.isnan(y)]
coeff = Polynomial.fit(x_no_nan, y_no_nan, deg=2) # 2차 다항식
# 보간
x_new = np.linspace(min(x), max(x), num=100)
y_new = coeff(x_new)
# 결과 시각화
plt.plot(x_no_nan, y_no_nan, 'o', label='Original Data')
plt.plot(x_new, y_new, '-', label='Polynomial Interpolation')
plt.legend()
plt.show()
3. 스플라인 보간법 (Spline Interpolation): scipy.interpolate의 UnivariateSpline 또는 make_interp_spline을 사용하여 매끄러운 곡선을 생성합니다.
import numpy as np
from scipy.interpolate import UnivariateSpline
import matplotlib.pyplot as plt
# 예시 데이터
x = np.array([0, 1, 4, 5])
y = np.array([1, 2, np.nan, 4])
# 결측값을 제외한 데이터로 스플라인 보간
x_no_nan = x[~np.isnan(y)]
y_no_nan = y[~np.isnan(y)]
spline = UnivariateSpline(x_no_nan, y_no_nan, s=0)
# 보간
x_new = np.linspace(min(x), max(x), num=100)
y_new = spline(x_new)
# 결과 시각화
plt.plot(x_no_nan, y_no_nan, 'o', label='Original Data')
plt.plot(x_new, y_new, '-', label='Spline Interpolation')
plt.legend()
plt.show()
4. 스무딩 방법 (Smoothing Methods): scipy.ndimage.uniform_filter1d 또는 pandas의 rolling 메서드를 사용하여 데이터를 스무딩할 수도 있습니다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 예시 데이터
x = np.array([0, 1, 4, 5])
y = np.array([1, 2, np.nan, 4])
# 결측값을 선형 보간
y_interp = pd.Series(y).interpolate(method='linear')
# 결과 시각화
plt.plot(x, y, 'o', label='Original Data')
plt.plot(x, y_interp, '-', label='Interpolated Data')
plt.legend()
plt.show()
728x90
반응형
'기술공부 > 개발_코드' 카테고리의 다른 글
배치처리 vs. 개별처리 (0) | 2025.02.25 |
---|---|
🚀 Windows에서 OpenSSH를 활용한 원격 접속 설정 및 문제 해결 가이드 (0) | 2025.02.18 |
가상환경 구축 후 패키지 깔기 (0) | 2024.08.06 |
엑셀 function: 표에서 원하는 값을 하이라이트하기 (0) | 2024.07.29 |
맥북 닫아도 안꺼지게 (0) | 2024.07.15 |