【Pandas】時系列データ分析:時刻インデックスによるデータ準備

Pandas
この記事は約7分で読めます。

こんにちは、JS2IIUです。
時系列データは、株価、気温、Webサイトのトラフィックなど、時間とともに変化するあらゆるデータを指します。Pandasは、Pythonで時系列データを扱うための強力なライブラリです。本記事では、Pandasを用いた時系列データ分析の基礎として、時刻によるインデックスを中心に、データを扱いやすくするための事前準備について解説します。

時刻インデックスとは

Pandasでは、datetimedateutildatetime64Timestampオブジェクトを用いて時刻情報を表現し、これをインデックスとして設定することで時系列データを効率的に扱えます。時刻インデックスを設定すると、データの抽出、集計、可視化などが容易になります。

データの読み込みとインデックスの設定

まずは、CSVファイルから時系列データを読み込み、時刻インデックスを設定する例を見てみましょう。

Python
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()メソッドのシグネチャ

Python
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

pandas.to_datetime — pandas 2.3.3 documentation

データの確認とクリーニング

読み込んだデータに欠損値や異常値がないか確認し、必要があればクリーニングを行います。

Python
# 欠損値の確認
print(df.isnull().sum())

# 欠損値の補完
df = df.fillna(method='ffill')

# 異常値の検出
# ...

isnull().sum()で各列の欠損値の数をカウントできます。fillna()関数で欠損値を補完したり、異常値を検出して適切な値に修正したりする処理を行います。

時系列データのリサンプリング

時系列データを集計する際に、時間間隔を変更する必要がある場合があります。Pandasでは、resampleメソッドを用いて簡単にリサンプリングできます。

Python
# 日次データを月次データにリサンプリングし、平均値を計算
df_monthly = df.resample('M').mean()

print(df_monthly)

このコードでは、日次データを月次データにリサンプリングし、各月の平均値を計算しています。resampleメソッドの引数には、リサンプリングする時間間隔を指定します。

DataFrame.resample()メソッドのシグネチャ

Python
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

Time series / date functionality — pandas 2.3.3 documentation

時系列データのシフト

過去のデータや未来のデータと比較するために、時系列データをシフトする必要がある場合があります。Pandasでは、shiftメソッドを用いてデータをシフトできます。

Python
# データを1日シフト
df_shifted = df.shift(1)

print(df_shifted)

このコードでは、データを1日シフトしています。shiftメソッドの引数には、シフトする期間を指定します。

時系列データの可視化

Pandasでは、plotメソッドを用いて時系列データを簡単に可視化できます。

Python
import matplotlib.pyplot as plt

# 時系列データをプロット
df.plot()
plt.show()

このコードでは、時系列データを折れ線グラフで表示しています。

Pandasで使えるプロット関連メソッドはこちらの記事でまとめています。

まとめ

本記事では、Pandasを用いた時系列データ分析の基礎として、時刻によるインデックスを中心に、データを扱いやすくするための事前準備について解説しました。時刻インデックスを設定することで、データの抽出、集計、可視化などが容易になります。

参考資料

今回も少しだけPRです。

Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。

「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。

最後まで読んでいただきありがとうございます。73

コメント

タイトルとURLをコピーしました