티스토리 뷰
오늘은 시계열 데이터의 특징과 전처리 방법에 대해 학습했습니다. 시계열 데이터는 시간의 흐름에 따라 변하는 데이터를 의미하며, 다양한 패턴을 가질 수 있습니다. 이러한 데이터를 효과적으로 분석하기 위해 데이터의 특성을 이해하고 적절한 전처리 기법을 적용하는 것이 중요합니다.
1. 시계열 데이터의 개념
1.1 시계열 데이터 패턴
시계열 데이터는 다양한 패턴을 가질 수 있으며, 대표적인 패턴은 다음과 같습니다.
- 추세(Trend): 데이터가 시간에 따라 증가하거나 감소하는 경향을 보이는 패턴
- 계절성(Seasonality): 일정한 주기를 가지고 반복되는 패턴
- 순환성(Cyclical): 일정한 주기를 가지지만 주기의 길이가 일정하지 않은 패턴
- 불규칙성(Irregular): 지진, 홍수, 전염병과 같은 외부 요인에 의해 발생하는 불규칙한 패턴
1.2 시계열 데이터 분석 방법
시계열 데이터는 다양한 방법으로 분석할 수 있습니다.
1) 분해법 (Decomposition)
시계열 데이터를 다음과 같은 구성 요소로 분해하여 분석하는 기법입니다.
- 추세(Trend)
- 계절성(Seasonality)
- 주기(Cycle)
- 불규칙성(Irregularity)
2) 시간 영역 분석법
- AR (Auto Regressive Model): 자기 회귀 모델
- MA (Moving Average Model): 이동 평균 모델
- ARMA: AR + MA 결합 모델
- ARIMA (Autoregressive Integrated Moving Average): ARMA 모델에 차분을 적용한 모델
2. 시계열 데이터 전처리
2.1 날짜 형식 변환 (to_datetime())
시계열 데이터에서 날짜는 중요한 요소이므로, datetime 형식으로 변환하는 것이 필수적입니다.
import pandas as pd
# 데이터프레임 생성
data = pd.DataFrame({'date': ['2019-01-03', '2021-11-22', '2023-01-05'],
'value': [10, 20, 30]})
# 날짜 타입 확인
print(data.info())
# 날짜 데이터를 datetime 형식으로 변환
data['date'] = pd.to_datetime(data['date'])
# 변환 후 데이터 타입 확인
print(data.info())
2.2 날짜 컬럼을 인덱스로 설정 (set_index())
날짜를 기준으로 데이터를 다루기 위해서는 날짜 컬럼을 인덱스로 설정해야 합니다.
data.set_index('date', inplace=True)
print(data.head())
2.3 결측치 처리 (isnull(), fillna(), dropna(), interpolate())
시계열 데이터에서 결측치는 분석에 영향을 미칠 수 있으므로 적절한 방법으로 처리해야 합니다.
1) 결측치 확인
print(data.isnull().sum())
2) 결측치 처리 방법
- 이전 값으로 채우기 (Forward Fill)
data.fillna(method='ffill', inplace=True)
- 이후 값으로 채우기 (Backward Fill)
data.fillna(method='bfill', inplace=True)
- 결측값 행 삭제
data.dropna(inplace=True)
- 선형 보간법 (Interpolate)
data.interpolate(inplace=True)
2.4 빈도 설정 (asfreq())
시계열 데이터의 빈도를 설정하여 분석의 일관성을 유지할 수 있습니다.
data = data.asfreq('D', method='ffill') # 일 단위로 빈도 설정 후 이전 값 채우기
2.5 이동 평균 및 특징량 생성 (rolling())
이동 평균을 이용하여 데이터의 변동성을 줄이고 패턴을 분석할 수 있습니다.
data['rolling_mean'] = data['value'].rolling(window=3).mean()
print(data.head())
2.6 이전 값과 차이 계산 (diff())
이전 값과의 차이를 계산하여 변화량을 분석할 수 있습니다.
data['diff'] = data['value'].diff()
print(data.head())
2.7 지연값(시차 데이터) 생성 (shift())
이전 데이터를 활용하여 현재 데이터의 패턴을 분석할 수 있습니다.
data['lag_1'] = data['value'].shift(1) # 한 타임 스텝 전의 값을 추가
print(data.head())
2.8 원-핫 인코딩 (get_dummies())
범주형 데이터를 분석하기 위해 원-핫 인코딩을 적용할 수 있습니다.
data['category'] = ['A', 'B', 'A']
data_encoded = pd.get_dummies(data, columns=['category'])
print(data_encoded.head())
3. 시계열 데이터 분석의 활용
3.1 시계열 데이터 시각화
시계열 데이터를 효과적으로 분석하기 위해 matplotlib과 seaborn을 활용하여 시각화할 수 있습니다.
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
plt.plot(data.index, data['value'], label='Value')
plt.plot(data.index, data['rolling_mean'], label='Rolling Mean', linestyle='dashed')
plt.legend()
plt.show()
3.2 시계열 데이터 분석을 위한 해결방안
- 데이터를 datetime 형식으로 변환하여 활용하기
- 결측치를 적절히 처리하여 데이터의 연속성을 유지하기
- 이동 평균을 사용하여 데이터의 패턴을 확인하기
- 이전 값과의 차이를 분석하여 변화량을 추적하기
- 빈도를 설정하여 일관된 분석 환경을 구축하기
- 지연값을 활용하여 시계열 데이터의 의존성을 분석하기
4. 결론
오늘 배운 시계열 데이터 분석 및 전처리 기법을 통해 데이터의 패턴을 이해하고 적절한 방법으로 처리하는 것이 중요하다는 점을 다시 한 번 깨닫게 되었습니다.
'LG U+ Why Not SW 부트캠프 5기' 카테고리의 다른 글
| 파이썬을 이용한 미국 항공 운항 데이터 분석(실습) (1) | 2025.02.28 |
|---|---|
| 주식 시세 분석 및 데이터 처리 (0) | 2025.02.21 |
| 데이터 전처리 및 병원 노쇼(No-show) 분석 (1) | 2025.02.21 |
| 파이썬을 이용한 웹 크롤링 & 시각화 실습: 다나와 무선청소기 예제 (0) | 2025.02.20 |
| 파이썬 기반 웹 크롤링 & 시각화 프로젝트: Selenium + Folium 사례 (1) | 2025.02.20 |
