fc2ブログ

時系列データ解析ライブラリProphetを使う(2)

 前回は、Facebookの時系列データ解析ライブラリProphetをR環境で使用しましたが、今回はPython環境のお話です。Rに比べ、インストール、プログラム実行で苦労しましたので、その備忘録です。

 まず、インストールですが、公式サイトの通り、以下のコマンドを実行しましたが、エラーが出てうまく行きませんでした。
pip install fbprophet
よく手順を確認すると、Anacondaを使っている場合は、以下のコマンドを実行しなさいということでしたが、これもダメでした。
conda install -c conda-forge fbprophet
いろいろ触っているうちに、インストール先のAnacondaの仮想環境py37の動きが変になってしまいました。結局、この仮想環境py37を削除し、再構築することにしました。  
 また、Prophetがpystanと依存関係があり、先にpystanをインストール必要があることが分かりましたので、最終的に以下の手順で進めました。
 ①仮想環境py37を再構築
 ②pystanをAnaconda navigator上でインストール
 ③py37のターミナルから以下のconda installコマンドを実行
conda install -c conda-forge fbprophet
これでエラーなく、最後まで走りました。苦労しましたが、何とかインストールは成功しました。引き続き、以下のQuick Startのテストコードを実行しました。
import pandas as pd
from fbprophet import Prophet

df = pd.read_csv('example_wp_log_peyton_manning.csv')
df.head()

m = Prophet()
m.fit(df)

future = m.make_future_dataframe(periods=365)
future.tail()

forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

fig1 = m.plot(forecast)
fig2 = m.plot_components(forecast)

from fbprophet.plot import plot_plotly
import plotly.offline as py
py.init_notebook_mode()

fig = plot_plotly(m, forecast)
py.iplot(fig)
実行すると、以下の通り、上記プログラムの14行目までは正常に動作しましたが、16行目のグラフ表示の所で、エラーにはまりました。
>>> import pandas as pd
>>> from fbprophet import Prophet
>>>
>>> df = pd.read_csv('example_wp_log_peyton_manning.csv')
>>> df.head()
ds y
0 2007-12-10 9.590761
1 2007-12-11 8.519590
2 2007-12-12 8.183677
3 2007-12-13 8.072467
4 2007-12-14 7.893572
>>>
>>> m = Prophet()
>>> m.fit(df)
INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
Initial log joint probability = -19.4685
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
99 7975.65 0.00900645 1590.32 1 1 130
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
130 7983.57 0.00042495 289.241 2.698e-06 0.001 208 LS failed, Hessian reset
199 7992.52 0.003794 380.212 0.3256 0.3256 290
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
299 7997.34 0.00112364 349.916 0.137 1 406
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
361 7998.37 7.8273e-05 175.666 8.691e-07 0.001 526 LS failed, Hessian reset
399 7998.92 5.01025e-05 57.8301 0.3866 0.3866 574
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
499 8000.66 0.00508482 301.143 1 1 693
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
543 8001.91 4.57256e-05 148.429 3.757e-07 0.001 792 LS failed, Hessian reset
599 8003.2 0.000312406 190.708 0.3742 1 857
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
650 8003.61 4.29878e-05 86.7806 1.611e-07 0.001 968 LS failed, Hessian reset
699 8003.7 7.53265e-06 74.7985 0.3554 0.3554 1032
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
704 8003.71 7.81067e-05 133.635 7.522e-07 0.001 1078 LS failed, Hessian reset
788 8004.16 4.16874e-05 128.25 3.843e-07 0.001 1230 LS failed, Hessian reset
799 8004.29 0.000370995 128.452 0.3408 1 1243
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
818 8004.44 3.05116e-05 88.0118 1.864e-07 0.001 1310 LS failed, Hessian reset
886 8004.63 6.31442e-05 69.6094 7.392e-07 0.001 1427 LS failed, Hessian reset
899 8004.65 0.000620172 140.283 0.3397 1 1445
Iter log prob ||dx|| ||grad|| alpha alpha0 # evals Notes
931 8004.7 3.38749e-07 72.5032 0.1382 0.6065 1485
Optimization terminated normally:
Convergence detected: relative gradient magnitude is below tolerance
<fbprophet.forecaster.Prophet object at 0x1a1b3967d0>
>>>
>>> future = m.make_future_dataframe(periods=365)
>>> future.tail()
ds
3265 2017-01-15
3266 2017-01-16
3267 2017-01-17
3268 2017-01-18
3269 2017-01-19
>>>
>>> forecast = m.predict(future)
>>> forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
ds yhat yhat_lower yhat_upper
3265 2017-01-15 8.206497 7.479805 8.904837
3266 2017-01-16 8.531523 7.796942 9.229912
3267 2017-01-17 8.318930 7.577875 9.048126
3268 2017-01-18 8.151543 7.373401 8.875379
3269 2017-01-19 8.163477 7.465614 8.905640
>>>
>>> fig1 = m.plot(forecast)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/..../anaconda3/envs/py37/lib/python3.7/site-packages/fbprophet/forecaster.py", line 1522, in plot

<中略>

File "/Users/..../anaconda3/envs/py37/lib/python3.7/site-packages/numpy/core/numeric.py", line 538, in asarray
return array(a, dtype, copy=False, order=order)
TypeError: float() argument must be a string or a number, not 'datetime.datetime'
型の不一致で怒られているようです。ネットに対策が書かれてあるのを見つけました。

 最終的に、動作したプログラムは以下の通りです。
import pandas as pd
from fbprophet import Prophet
import matplotlib.pyplot as plt

df = pd.read_csv('example_wp_log_peyton_manning.csv')
df.head()

m = Prophet()
m.fit(df)

future = m.make_future_dataframe(periods=365)
future.tail()

forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

pd.plotting.register_matplotlib_converters()
fig1 = m.plot(forecast)
plt.show(fig1)
fig2 = m.plot_components(forecast)
plt.show(fig2)
19行目のグラフ表示は以下の通りで、Prophet_Python_Fig1_190817.png21行目のグラフ表示は以下の通りになりました。Prophet_Python_Fig2_190817.png 当然ですが、Rと同じ結果になりました。ただ、ここまで来るのに大変難儀しました・・。よい勉強をさせてもらいましたが・・・。
スポンサーサイト



時系列データ解析ライブラリProphetを使う(1)

 日経ソフトウェアの9月号にFacebookの時系列データ解析ライブラリ「Prophet」に関する記事がありました。以前、Rを使って、ARMAモデル等を使って時系列データ解析を行ったことがありますが、難儀しました。Prophetは手軽に時系列データ解析ができると謳われているので、早速味見をしてみました。 ProphetはPythonとRをサポートしており、日経ソフトウェアの記事を元にPythonで動作検証をしていたのですが、インストールも難儀し、グラフ描画も記事通りにうまく行かず、途中から慣れているRに鞍替えをして動かしました。最終的には苦労しながらPythonでも動かせましたが・・。

 RへのインストールはPythonに比べると天と地の差で、すんなり行きました。Facebookのサイトにインストール方法が書かれていますが、この1行でOKでした。
install.packages('prophet', type="source")
 インストールも無事に完了しましたので、早速、同サイトの「Quick Start」に沿って動かしてみました。
library(prophet)

df = read.csv('example_wp_log_peyton_manning.csv')

m = prophet(df)
future <- make_future_dataframe(m, periods = 365)
tail(future)

forecast <- predict(m, future)
tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')])
plot(m, forecast)

prophet_plot_components(m, forecast)
6行目のmake_future_dataframe関数はモデルオブジェクトと予測する日数を入れることで適切なデータフレームを生成するもので、この場合は将来365日分を予測します。直近までのデータを学習に使います。
 9行目のpredict関数で予測をし、10行目で予測値(yhat、yhat_lower、yhat_upper)を表示、11行目でグラフ描画します。Prophet_R_Fig1_190813.png青線が予測値、黒点が過去の学習データです。
 13行目のprophet_plot_components関数を用いると、予測をトレンドや年・週単位の周期性に落とし込んで、確認できます。グラフの文字化けはMacの呪縛?のせい・・?Prophet_R_Fig2_190813.png 簡単に結果を出力でき、大変便利なツールですね。別案件に早速使ってみようと思います。
 次回は、PythonでProphetを使う時の苦労話をしたいと思います。

九博に「室町将軍」展を見に行く

 博多の実家滞在も4日目で、年寄りの話を聞くのも疲れてきた頃です。一通り、じじばばの話を聞いたので、それ以降は何度も繰り返される同じ(似たような)会話を聞き続けるだけです。自分も年を取るとそうなるのかも知れませんが・・。
 また、歳を取ると、保守的(わがまま、子供化)になるのか?人の話を聞きませんね。自分の話したいことのみを話す。人が話していても自分の話をする。会話が成り立たないこと(噛み合わないこと)も多々あってストレス気味です・・。(私は歳を取らなくても保守的ですが・・余計タチ悪い・・)
 
 帰省して実家にじっとしておくのもつらいので、太宰府の九博(九州国立博物館)に足を伸ばしました。現実逃避の一環ですが、九博には帰省時に何度も行っています。かつて「東山魁夷展」や「始皇帝と大兵馬俑展」に行きました。

 今回見た展示は「特別展 室町将軍」です。なかなか渋い路線です。室町将軍展_190812展示の紹介動画は以下の通り。
  解説編
  将軍紹介(ラップ編)

 室町時代は、武家中心社会で華やかさが少なく地味なイメージがありますね。ただ、展示を見ている中で、武家文化に禅の影響を受けた落ち着いた今の日本文化に繋がる基礎が築かれた時代であることを認識しました。展示の最後に等持院の将軍木像13体が一堂に展示してありました。見応えありです。各将軍の顔も個性的でリアリティがありました。

 また、当日(8/12)「京都・等持院 歴代足利将軍像の謎に迫る」という無料シンポジウムもあり、合わせて聴きに行きました。室町将軍展_シンポジウム190812大学時代に京都・等持院の近所に下宿していたこともあり(大学バレバレですね・・)、興味がありました。拝観したことはありませんでしたし、歴代の将軍木像が納められていることも今回初めて知りました。木像の実物の展示を見た後であり、大変興味深くシンポジウムを聴くことができました。私自身、自然科学分野の出身ですが、人文科学分野の先生方の話を聞くのも新鮮で良かったです。

 いつもの梅ケ枝餅を「きくち」で買って帰宅しました。昔からのなじみの味で大変満足でした。小腹が空いていたので、帰りのに西鉄電車の中で2個食べました。あつあつのできたてが、またうまいんです!

世界遺産「三角西港」に行く

 暑い日が続きますね。8/8(木)の夜から九州の実家に帰省しています。貧乏性なのか、実家にじっとしておくのがもったいないので、帰省時の定番になっている「世界遺産めぐり」を今回も企画しました。昨年は宗像大社中津宮に行きましたが、今年は熊本の宇城市の「三角西港(みすみにしこう)」に行きました。明治時代の産業遺産です。

 博多駅から九州新幹線に乗っていざ熊本へ。帰省ラッシュで指定席がどの便も満席だったので、博多発各停の「つばめ」に乗車。切符は九州新幹線の自由席が乗れる往復切符(2枚きっぷ)を購入。7,640円也。熊本2枚きっぷ_190811 50分程で熊本着。いつも感じますが、JR在来線や高速バスよりも速く、大変便利ですね。熊本駅からJR三角線に乗り換えて1時間弱で三角駅に到着。小学生の頃、駅スタンプを収集していた時に、三角駅を訪れたことがありましたが、それ以来です。35年ぶり?ぐらいでしょうか?駅舎は大変おしゃれで綺麗な外観に変身していました。三角駅_19811 三角駅から「三角西港」までは公共のバスで移動するつもりでしたが、乗るバスが良く分からない間にバスが出てしまいました。車で5分程度なので、タクシーに乗るまでもないなと思ったのが、大間違い。片道2km強を炎天下、汗だくで往復しました。休日でお盆ダイヤのせいか、公共バスの本数も1時間に1本あるかないかという状況でした。
 気持ちと裏腹に言うことないほどの良い天気でした。海も空も真っ青です!遠目に雲仙普賢岳も良く見えました。三角から雲仙普賢岳_190811 歩くこと30分で目的地の「三角西港」に着きました。三角西港_190811 熊本県の宇土半島先端に位置する、日本で3番目に築かれた近代港で1887年に埠頭(写真)が完成。三角西港埠頭_190811道路や水路なども整備され港町として繁栄したとのこと。下の写真はラフカディオ・ハーン(小泉八雲)が、明治26年7月22日、長崎からの帰途に立ち寄り「夏の日の夢」と題した紀行文の舞台となった旅館、浦島屋(今は休息スペース)です。三角西港浦島屋_190811一箇所にこじんまりとまとまっていたので、見学もそこそこに三角駅に戻りました。

 予定よりも見学が早く終わったので、熊本に戻り、熊本城の姿を見て帰ることにしました。熊本城_190811石垣の修復はまだこれからの部分もありましたが、天守が2年前に比べると修復が進んでいることが分かりました。姫路城みたいに白くなっているようですが、気のせいでしょうか?

 熊本城が着実に復興していることに安心し、菅乃屋で「馬刺し」のお土産を買って、帰路につきました。帰りの「つばめ」はミッキー車両でした。ミッキー新幹線1_190811ミッキー新幹線2_190811ミッキーマウスのスクリーンデビュー90周年を記念したものとのこと。小さな子供も乗車しており、大興奮でしたね。おっさんは汗だくで歩き疲れ切っていましたが・・。何はともあれ、疲れましたが密度の濃い旅でした。来年はどこに行こうかな?

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: