はじめに
この実験では、Python パッケージの Pandas を使って時系列データを扱う方法を学びます。このチュートリアルでは、大気質データを使います。文字列を日付時刻オブジェクトに変換し、これらの日付時刻オブジェクトに対して操作を行い、時系列を別の頻度にリサンプリングする方法などを学びます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。そうすれば、迅速に問題を解決します。
必要なライブラリをインポートしてデータを読み込む
まず、必要な Python ライブラリをインポートして、大気質データを読み込む必要があります。このデータは、2 次元のラベル付きデータ構造である pandas の DataFrame に読み込まれます。
## 必要なライブラリをインポートする
import pandas as pd
import matplotlib.pyplot as plt
## 大気質データを読み込む
air_quality = pd.read_csv("data/air_quality_no2_long.csv")
## "date.utc" 列を "datetime" にリネームする
air_quality = air_quality.rename(columns={"date.utc": "datetime"})
文字列を日付時刻オブジェクトに変換する
「datetime」列の日付は現在文字列です。これらを日付時刻オブジェクトに変換して、操作を簡単にするためです。
## "datetime" 列を日付時刻オブジェクトに変換する
air_quality["datetime"] = pd.to_datetime(air_quality["datetime"])
測定月の新しい列を追加する
今、DataFrame に、各測定の月のみを含む新しい列を追加したいと思います。これは、dt アクセサを使って達成できます。
## 各測定の月の新しい列を追加する
air_quality["month"] = air_quality["datetime"].dt.month
週の各日における平均 NO2 濃度を計算する
これで、各測定地点における週の各日の平均 NO2 濃度を計算することができます。これは、groupby メソッドを使って行うことができます。
## 週の各日における平均 NO2 濃度を計算する
average_NO2 = air_quality.groupby([air_quality["datetime"].dt.weekday, "location"])["value"].mean()
1 日の各時間における平均 NO2 値をプロットする
1 日の各時間における平均 NO2 値をプロットすることもできます。これは、plot メソッドを使って行うことができます。
## 1 日の各時間における平均 NO2 値をプロットする
fig, axs = plt.subplots(figsize=(12, 4))
air_quality.groupby(air_quality["datetime"].dt.hour)["value"].mean().plot(kind='bar', rot=0, ax=axs)
plt.xlabel("Hour of the day")
plt.ylabel("$NO_2 (µg/m^3)$")
時系列データをリサンプリングする
resample メソッドは、時系列データの頻度を変更する強力な方法です。ここでは、現在の毎時の時系列データを各測定地点で月間最大値に集約します。
## データをピボットすることで、日付時刻情報が表のインデックスになりました。
no_2 = air_quality.pivot(index="datetime", columns="location", values="value")
no_2.head()
## 5 月 20 日から 5 月 21 日の終わりまでの異なる測定地点の値のプロットを作成する
no_2["2019-05-20":"2019-05-21"].plot()
## 時系列データをリサンプリングする
monthly_max = no_2.resample("M").max()
monthly_max
まとめ
この実験では、pandas ライブラリを使って Python で時系列データを扱う方法を学びました。大気質データを読み込み、日付文字列を日付時刻オブジェクトに変換し、週の各日の平均 NO2 濃度を計算し、1 日の各時間の平均 NO2 値をプロットし、時系列データを異なる頻度にリサンプリングしました。