機械学習・ディープラーニングがゼロから学べる大人気『脱ブラ』が無料に!

【Python 入門】Prophet を使った時系列データ分析と Plotly による可視化!

こんにちは、機械学習の講師をしている木下です!

ビックデータ自体の今、時系列データが多く取得できるようになっています。しかし、時系列データは分析・可視化・解釈が難しく、多くの人の頭を悩ませています。

多くの人が用いているのが、Prophet という非常に便利なライブラリです!Prophet を用いると簡単に分析できるのですが、その後の解釈や可視化の難しさはまだ課題として残っています。

ここでは、そんな時に便利なライブラリ plotly について Google Colaboratory を用いて初学者向けに解説していきます。

こんな人におすすめ!
  • これから時系列データ分析を始めてみたい!
  • 予測した結果を綺麗に可視化してみたい!
  • 動的なグラフを書き出す方法を知りたい!

実行環境・使用するデータ

用いるデータは pandas_datareader に含まれている Meta の株価とします。以下のようにデータを取得してみてください。

ライブラリの読み込み
!pip install pandas_datareader --upgrade
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from pandas_datareader.yahoo.daily import YahooDailyReader
from datetime import datetime
取得する日付
# 取得開始日時
date_st = datetime(2015, 10, 1)
# 取得終了日時
date_fn = datetime(2022, 6, 1)
データセットの取得
df = YahooDailyReader('META', date_st, date_fn).read()

取得したデータを確認してみます。

データセットの取得
df.head() # 先頭 5 行の確認

ここでそれぞれの列は以下の値を示します。

  • High: 高値
  • Low: 安値
  • Open: 始値
  • Close: 終値
  • Volume: 出来高
  • Adj.Close: 調整後終値

データの可視化を以下のように行うことが可能です。

データの可視化
df['Close'].plot(); # 終値の可視化

今後はこのデータセットを用います。

Prophet を用いた基本的な処理

まずは、Prophet を用いて、時系列の分析を行います。
Proohet は Meta が公開している時系列解析向けのライブラリで、手軽にトレンドの抽出や未来の値を予測できます。

Prophet では予測する列を y、日付データを ds とすることに注意して、Close を予測するモデルを作成してみます。

Prophet の実行

# ライブラリの install
!pip install pystan==2.19
!pip install fbprophet
from fbprophet import Prophet # ライブラリの読み込み
# 列名の変更
data = df.reset_index().rename(columns={'Date': 'ds', 'Close': 'y'})
# インスタンス化
model = Prophet()
# 学習
model.fit(data)

これでモデルが学習できました。それでは、30 日後の値まで予測してみましょう。

予測
# 学習データに基づいて未来を予測
future = model.make_future_dataframe(periods=30)
forecast = model.predict(future)

この結果は通常、以下のように matplotlib を用いて可視化します。

可視化
# 予測結果の可視化
model.plot(forecast)
plt.show()

トレンド性や周期性も同様に確認することができます。

予測
# トレンド性と周期性の抽出
model.plot_components(forecast)
plt.show()


この可視化でも十分に効果的ですが、細かい予測の値などを把握するのに一苦労です。plotly を用いるとより詳細な情報を含んだグラフを表示することができます。

plotly を用いた可視化

plotly について

matplotlibplot で出力した描画はグラフ上の特定の点に対して、細かな数字が確認できないといったデメリットがあります。
plotly を使用すれば、特定の点の数値を確認することができ、非常に便利です。

plotly は他にもさまざまな描画に対応しているので、公式サイトを確認してみてください。

plotly を用いた可視化

それでは実際にコーディングを見てみましょう。

plotly のインポート
# ライブラリのインストール
!pip install plotly
# ライブラリのインポート
from fbprophet.plot import plot_plotly
import plotly.offline as py

予測した forecast と model を引数に取ることで plotly を用いた可視化を行います。

plotly を用いた可視化
# 描画
fig1 = plot_plotly(model, forecast)
# ノードブック上に出力
py.iplot(fig1)

出力されたグラフの黒点にカーソルを合わせると実際の値、青線にカーソルを合わせると予測した値を確認することができます。

また、下部のグラフをドラッグ&ドロップすることで表示範囲も動的に変更し、注目したい部分のみを表示することが可能です。

このように、動的で一度に様々な情報を得ることのできるグラフを作成できることが plotly の素晴らしいところです。

最後に

本記事では、時系列データの分析ライブラリである prophet と可視化ライブラリである plotly を紹介しました。
これらを使いこなすことでより深い分析を行うことができるためぜひ活用してみましょう

もし忘れてしまったら本記事を思い出して再度復習してみてください。

以上、Python 学習している方々のお力添えになれば幸いです!
(本記事はキカガク長期コース卒業生に協力していただき作成しました)

参考リンク

参考 Python 3.9.2 ドキュメント 参考 Chainer チュートリアル

大人気コース「Python & 機械学習入門コース」が無料!

現在 e ラーニングプラットフォーム「キカガク」に無料登録すると、これまで多くの方にご受講いただいた、Python の基礎から機械学習の数学やプログラミングまでを学べる大人気コース「Python & 機械学習入門コース」が無料です。

好評である手書きの数学とハンズオン形式のプログラミングを通じて、初学者でも数学の理論から実装まで一から学習できます。また、動画で丁寧に解説しているため、迷うことなく最後まで継続して学習しやすいです。

Python の基礎から機械学習を学習したい方は、ぜひ教材の1つとしてご利用ください!