時系列データの分析:Pandasでの処理と可視化

プログラミング

時系列データの分析:Pandasでの処理と可視化

時系列データは、時間の経過とともに記録されたデータの集合であり、株価、気象データ、センサーデータなど、様々な分野で活用されています。Pandasライブラリは、Pythonで時系列データを効率的に処理・分析するための強力なツールを提供します。本稿では、Pandasを用いた時系列データの基本的な処理方法から、可視化、そして応用的なテクニックまでを解説します。

Pandasにおける時系列データの基本

Pandasは、SeriesとDataFrameというデータ構造を提供します。時系列データの場合、インデックスとしてDatetimeIndexを使用することが一般的です。これにより、時間に基づいた様々な操作が容易になります。

データの読み込みとDatetimeIndexの生成

CSVファイルなどの外部ファイルから時系列データを読み込む際には、日付/時刻を表す列をparse_dates引数で指定することで、自動的にDatetimeIndexに変換できます。

“`python
import pandas as pd

# CSVファイルから読み込み、’Date’列をDatetimeIndexに変換
df = pd.read_csv(‘your_time_series_data.csv’, parse_dates=[‘Date’], index_col=’Date’)
“`

もしDatetimeIndexが自動で生成されない場合、後からpd.to_datetime()関数を用いて変換することも可能です。

“`python
df[‘Date’] = pd.to_datetime(df[‘Date’])
df.set_index(‘Date’, inplace=True)
“`

時間ベースのインデックス操作

DatetimeIndexを持つデータフレームでは、年、月、日、曜日などの時間単位でデータを抽出したり、集計したりすることが容易です。

“`python
# 特定の年のデータを抽出
df_2023 = df[df.index.year == 2023]

# 月ごとの平均値を計算
monthly_mean = df.resample(‘M’).mean()

# 曜日ごとの集計
daily_mean = df.groupby(df.index.dayofweek).mean()
“`

resample()メソッドは、時系列データを指定した頻度(’D’:日、’W’:週、’M’:月、’Q’:四半期、’Y’:年など)にリサンプリングする際に非常に便利です。

時系列データの可視化

時系列データの傾向、季節性、異常値などを把握するために、適切な可視化は不可欠です。Pandasは、Matplotlibをバックエンドとした描画機能を統合しており、簡単なコードでグラフを作成できます。

基本的な折れ線グラフ

最も基本的な時系列データの可視化は、時間軸を横軸、値を縦軸とした折れ線グラフです。

“`python
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 6))
df[‘Value’].plot()
plt.title(‘Time Series Data’)
plt.xlabel(‘Date’)
plt.ylabel(‘Value’)
plt.grid(True)
plt.show()
“`

季節性の可視化

年や月ごとのパターンを視覚的に捉えるために、以下のようなグラフが有効です。

月別平均値の棒グラフ

“`python
monthly_mean = df.resample(‘M’).mean()
plt.figure(figsize=(10, 5))
monthly_mean[‘Value’].plot(kind=’bar’)
plt.title(‘Monthly Average Value’)
plt.xlabel(‘Month’)
plt.ylabel(‘Average Value’)
plt.grid(True)
plt.show()
“`

年別平均値の折れ線グラフ

“`python
yearly_mean = df.resample(‘Y’).mean()
plt.figure(figsize=(10, 5))
yearly_mean[‘Value’].plot(kind=’line’)
plt.title(‘Yearly Average Value’)
plt.xlabel(‘Year’)
plt.ylabel(‘Average Value’)
plt.grid(True)
plt.show()
“`

移動平均と標準偏差の表示

ノイズを平滑化し、長期的なトレンドを把握するために移動平均はよく用いられます。移動標準偏差は、データの変動性を示します。

“`python
df[‘Moving_Average’] = df[‘Value’].rolling(window=30).mean() # 30日移動平均
df[‘Moving_Std’] = df[‘Value’].rolling(window=30).std() # 30日移動標準偏差

plt.figure(figsize=(12, 6))
df[‘Value’].plot(label=’Original Data’)
df[‘Moving_Average’].plot(label=’Moving Average (30 days)’)
plt.title(‘Time Series with Moving Average’)
plt.xlabel(‘Date’)
plt.ylabel(‘Value’)
plt.legend()
plt.grid(True)
plt.show()
“`

高度な時系列処理テクニック

Pandasは、より高度な時系列分析のための機能も提供しています。

データのラグとリード

shift()メソッドを使用すると、データを一定期間ずらすことができます。これは、過去のデータが現在のデータに与える影響を分析する際に役立ちます。

“`python
df[‘Lag_1’] = df[‘Value’].shift(1) # 1期間前の値
df[‘Lead_1’] = df[‘Value’].shift(-1) # 1期間後の値
“`

差分系列の計算

差分系列を計算することで、定常性のない時系列データを定常時系列に変換し、分析しやすくすることができます。diff()メソッドを使用します。

“`python
df[‘Difference’] = df[‘Value’].diff() # 1期差
“`

季節調整

季節的な変動を除去することで、トレンドや不規則な変動をより明確にすることができます。STL (Seasonal-Trend decomposition using Loess)などの手法が利用可能ですが、Pandas単体では直接的なSTL分解機能は提供されていません。別途statsmodelsライブラリなどと連携することが一般的です。

欠損値の補間

時系列データでは、欠損値が発生することがよくあります。Pandasのinterpolate()メソッドを用いることで、線形補間や多項式補間など、様々な方法で欠損値を埋めることができます。

“`python
df[‘Value’].interpolate(method=’linear’, inplace=True)
“`

まとめ

Pandasは、時系列データの読み込み、前処理、分析、可視化に至るまで、一連のワークフローを強力にサポートするライブラリです。DatetimeIndexを活用した時間ベースの操作、resample()によるリサンプリング、rolling()による移動統計量の計算、そして豊富な可視化機能は、時系列データ分析の効率と質を大きく向上させます。これらの機能を理解し、適切に活用することで、データに隠されたパターンやインサイトを効果的に引き出すことが可能になります。