時系列分析、やっていますでしょうか?時系列分析のテーマは幅広く、時系列予測や異常検知、因果推論など興味深いテーマが多数ありますよね。
今回は、時系列分析で利用できるデータセットを紹介します。特定のアルゴリズムを試すのに、手早くデータセットを準備したい際などにご利用ください。時系列のデータセットは、単変量、多変量、そして異常検知のアルゴリズムを試すことができるように、正解と異常のラベルがあるデータセットも紹介します。
このページは現役でデータサイエンティストをしている自分が、データセットを見つけ次第適宜更新していくので、ぜひお気に入りに登録して、ご活用ください。
- 単変量の時系列データセット
- 多変量の時系列データセット
(準備)ライブラリのインポート
この記事では、データを扱うライブラリとしてpandasと可視化用のライブラリとしてmatplotlibを用います。まず、データを準備する前に、これらのライブラリをインポートしておきます。
import pandas as pd
import matplotlib.pyplot as plt
単変量の時系列データセット
それではまず、単変量の時系列データセットを紹介します。
AirPassengers: 飛行機乗客数
超有名なデータセットである、AirPassengersです。こちらのデータセットは、1949〜1960 年における、毎月の国際線の航空旅客数のデータです。季節成分があり、かつ右肩上がりのトレンドがあるのが特徴です。
データセットの準備
AirPassengersのデータは、pythonライブラリに同梱されていないので、データを配布しているサイトからダウンロードして利用します。データは下記のコードを実行することでダウンロードできます。
df = pd.read_csv("https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv", index_col='Month', parse_dates=True)
plt.figure(figsize=(10, 3), dpi=100)
plt.plot(df)
Nile: ナイル川の年間流量
Nileは、ナイル川の年間流量の時系列データです。データの取得間隔は1年で、1871年から1970年までのデータを得ています。データの特徴としては、一見するとトレンド成分はなく、季節成分もあるかどうかといったところです。データが定常的で、ランダムウォークしているようなデータにも見て取れます。
データセットの準備
こちらも、外部URLから取得することで簡単にデータセットを準備することができます。
df = pd.read_csv("https://raw.githubusercontent.com/statsmodels/statsmodels/main/statsmodels/datasets/nile/nile.csv", index_col="year")
plt.figure(figsize=(10, 3), dpi=100)
plt.title("Nile River")
plt.plot(df)
多変量の時系列データセット
ここでは、多変量の時系列データセットを紹介します。多変量のデータセットとして、有名な例としては、株価データや、機器のセンサー類のデータがあります。
Telemanom: NASA人工衛星のデータセット
Telemanomは、NASAが過去に運用していた2つの探査機・人工衛星「SMAP」と「MSL」のデータセットです。具体的なデータは、人工衛星の各機器類のセンサーデータとなっており、センサーの正常データと異常データのラベル付きのデータセットになっています。
近年ディープラーニングで時系列多変量データの異常検知が流行っていますが、機械学習・深層学習の最新の論文や学会発表でも非常に用いられるデータセットです。
Telemanomのデータセットの準備方法は、下記リンクで詳しく説明しているので、そちらを参考にしてください。
東京の日々の気象データ
気象庁がホームページ上にて公開している、日本の天気データも簡単に利用することができます。気象庁のホームページから、日本全国の都市と、降水量や積雪量、風量、平均気温、最大気温、最低気温、蒸気圧、湿度など様々な情報を取得することができます。
基本的に上記のページから簡単に入手することができますが、とりあえず手元ですぐに確認したい、という人は次のコードを利用してみてください。
気象庁から取得できるデータのうち、2018/05/17 ~ 2023/5/17までの、「平均雲量、平均風速、平均気温、最大気温、最低気温、平均降水量」の6つの項目を日ごとで計測したデータです。
データセットの準備
df = pd.read_csv("https://raw.githubusercontent.com/aweglteo/tokyo_weather_data/main/data.csv", parse_dates=True, index_col=0)
このようなデータが取得できると思います。各系列名は、それぞれ上記の「平均雲量、平均風速、平均気温、最大気温、最低気温、平均降水量」の6つの項目に対応しています。
簡単に可視化してみると、このようになります。
fig = plt.figure(figsize=(16,11))
ax1 = fig.add_subplot(311)
ax2 = fig.add_subplot(312)
ax3 = fig.add_subplot(313)
ax1.plot(df["ave_tmp"])
ax1.set_title("average temperature")
ax2.plot(df["wind"])
ax2.set_title("average wind")
ax3.plot(df["cloud"])
ax3.set_title("average cloud")
plt.show()
今回は期間をざっと5年分用意しましたが、さらに長期間のデータを利用したい場合は、先ほど紹介した気象庁のページより取得することができます。