[파이썬] 시계열 데이터 분석

시계열 데이터는 시간에 따라 발생하는 데이터를 의미합니다. 예를 들어, 매일의 주식 가격, 매일의 날씨 데이터, 시간별 트래픽 데이터 등이 모두 시계열 데이터입니다. 이러한 시계열 데이터를 분석하여 패턴을 이해하고 예측을 할 수 있습니다. Python은 강력한 데이터 분석 도구를 제공하므로 시계열 데이터 분석에 적합한 언어입니다.

Pandas를 이용한 시계열 데이터 분석

Python의 Pandas 라이브러리는 시계열 데이터를 쉽게 다룰 수 있는 기능을 제공합니다.

import pandas as pd

# CSV 파일에서 시계열 데이터 불러오기
data = pd.read_csv('data.csv', parse_dates=['date'], index_col='date')

# 시계열 데이터 확인하기
print(data.head())

# 시계열 데이터 시각화하기
data.plot()

위의 코드는 시계열 데이터를 CSV 파일에서 불러온 후, 데이터를 인덱스로 지정하여 Pandas의 DataFrame으로 저장하는 예시입니다. 그리고 데이터를 확인하기 위해 처음 5개의 샘플을 출력하고, 시계열 데이터를 시각화합니다.

시계열 데이터의 패턴 분석

시계열 데이터의 패턴을 파악하고 예측하기 위해 다양한 분석 기법을 활용할 수 있습니다. 예를 들어 주기성을 가진 데이터의 경우 푸리에 변환(Fourier transform)을 사용하여 이를 주파수 도메인으로 변환하여 주기성을 분석할 수 있습니다. 또한, 이동 평균(Moving average)지수 평활법(Exponential smoothing)을 사용하여 추세를 파악하고 예측할 수 있습니다.

이러한 분석 기법은 statsmodels 라이브러리를 활용하여 Python에서 쉽게 구현할 수 있습니다.

import statsmodels.api as sm

# 이동 평균 계산
rolling_mean = data['value'].rolling(window=30).mean()

# 지수 평활법 적용
exp_smooth = data['value'].ewm(alpha=0.2).mean()

# 푸리에 변환
fft = np.fft.fft(data['value'])

# 분석 결과 시각화
plt.plot(data['value'], label='Original')
plt.plot(rolling_mean, label='Moving Average')
plt.plot(exp_smooth, label='Exponential Smoothing')
plt.legend()
plt.show()

위의 코드는 이동 평균과 지수 평활법을 사용하여 데이터의 추세를 파악하는 예시입니다. 또한, 푸리에 변환을 사용하여 데이터의 주파수 도메인을 분석하고, 그 결과를 그래프로 시각화합니다.

예측 모델 구축

시계열 데이터의 패턴 파악 후, 다양한 예측 모델을 구축할 수 있습니다. 예를 들어, 선형 회귀, ARIMA 모델, Prophet 등을 활용하여 시계열 데이터를 예측할 수 있습니다.

from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.seasonal import seasonal_decompose

# ARIMA 모델 학습
model = ARIMA(data['value'], order=(1, 1, 1))
model_fit = model.fit()

# 예측 결과
predictions = model_fit.predict(start=len(data), end=len(data)+10)

# 계절성 분해
result = seasonal_decompose(data['value'], model='additive')

# 예측 결과 시각화
plt.plot(data['value'], label='Original')
plt.plot(predictions, label='Predicted')
plt.legend()
plt.show()

위의 코드는 ARIMA 모델을 사용하여 예측하는 예제입니다. 먼저 ARIMA 모델을 학습시키고, 학습된 모델을 통해 미래의 값을 예측합니다. 또한, 계절성 분해를 통해 데이터의 계절성 패턴을 추출하여 시각화합니다.

시계열 데이터 분석은 데이터의 패턴 파악과 예측에 매우 유용한 도구입니다. Python의 Pandas와 statsmodels 라이브러리를 활용하여 시계열 데이터를 쉽게 다루고 예측할 수 있습니다.