こんにちは、JS2IIUです。
時系列データは、株価、気温、Webサイトのトラフィックなど、時間とともに変化するあらゆるデータを指します。Pandasは、Pythonで時系列データを扱うための強力なライブラリです。本記事では、Pandasを用いた時系列データ分析の基礎として、時刻によるインデックスを中心に、データを扱いやすくするための事前準備について解説します。
時刻インデックスとは
Pandasでは、datetime、dateutil、datetime64、Timestampオブジェクトを用いて時刻情報を表現し、これをインデックスとして設定することで時系列データを効率的に扱えます。時刻インデックスを設定すると、データの抽出、集計、可視化などが容易になります。
データの読み込みとインデックスの設定
まずは、CSVファイルから時系列データを読み込み、時刻インデックスを設定する例を見てみましょう。
import pandas as pd
# CSVファイルの読み込み
df = pd.read_csv('data.csv')
# 'date'列をdatetime型に変換し、インデックスに設定
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
print(df)このコードでは、read_csv関数でCSVファイルを読み込み、to_datetime関数でdate列をdatetime型に変換しています。そして、set_index関数でdate列をインデックスに設定しています。
to_datetime()メソッドのシグネチャ
pandas.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=False, format=None, exact=<no_default>, unit=None, infer_datetime_format=<no_default>, origin='unix', cache=True)pandas.to_datetime — pandas 2.2.3 documentation
データの確認とクリーニング
読み込んだデータに欠損値や異常値がないか確認し、必要があればクリーニングを行います。
# 欠損値の確認
print(df.isnull().sum())
# 欠損値の補完
df = df.fillna(method='ffill')
# 異常値の検出
# ...isnull().sum()で各列の欠損値の数をカウントできます。fillna()関数で欠損値を補完したり、異常値を検出して適切な値に修正したりする処理を行います。
時系列データのリサンプリング
時系列データを集計する際に、時間間隔を変更する必要がある場合があります。Pandasでは、resampleメソッドを用いて簡単にリサンプリングできます。
# 日次データを月次データにリサンプリングし、平均値を計算
df_monthly = df.resample('M').mean()
print(df_monthly)このコードでは、日次データを月次データにリサンプリングし、各月の平均値を計算しています。resampleメソッドの引数には、リサンプリングする時間間隔を指定します。
DataFrame.resample()メソッドのシグネチャ
DataFrame.resample(rule, axis=<no_default>, closed=None, label=None, convention=<no_default>, kind=<no_default>, on=None, level=None, origin='start_day', offset=None, group_keys=False)resampleメソッドの引数である、ruleにはDateOffset, Timedelta or strを入れることになっています。リサンプルする周期に関する引数となります。どのような値を入れることができるか、についてはこちらのページの表を参照して下さい。
Time series / date functionality — pandas 2.2.3 documentation
時系列データのシフト
過去のデータや未来のデータと比較するために、時系列データをシフトする必要がある場合があります。Pandasでは、shiftメソッドを用いてデータをシフトできます。
# データを1日シフト
df_shifted = df.shift(1)
print(df_shifted)このコードでは、データを1日シフトしています。shiftメソッドの引数には、シフトする期間を指定します。
時系列データの可視化
Pandasでは、plotメソッドを用いて時系列データを簡単に可視化できます。
import matplotlib.pyplot as plt
# 時系列データをプロット
df.plot()
plt.show()このコードでは、時系列データを折れ線グラフで表示しています。
Pandasで使えるプロット関連メソッドはこちらの記事でまとめています。
まとめ
本記事では、Pandasを用いた時系列データ分析の基礎として、時刻によるインデックスを中心に、データを扱いやすくするための事前準備について解説しました。時刻インデックスを設定することで、データの抽出、集計、可視化などが容易になります。
参考資料
- Pandas Documentation
- Python Data Science Handbook
- How to handle time series data with ease — pandas 2.2.3 documentation
今回も少しだけPRです。
Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。
「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。
最後まで読んでいただきありがとうございます。73

