【Python】Prophet(ver0.5)がinstall出来ない問題の対処

【Python】Prophet(ver0.5)がinstall出来ない問題の対処


# python # 機械学習

2020年3月4日に、v0.6が公開されています。 v0.6では、holidaysのインストールが不要になっていたり、Pandas関連のバグも直っているのでv.0.5は使用しないようにしましょう。

諸々の事情でv.0.5を使用しないと行けない方々もいらっしゃると思うので、記事はこのまま残しておきます。 (ていうかなんでv.0.5.1とか作らずにv.0.6なんだ)

エラー内容

恐らく2020年になってから問題が発生しているようです。

どうやらライブラリの依存関係が一部壊れている模様。Facebookでもこういうことあるとちょっとほっこりしますね(ぇ

from fbprophet import Prophet


ImportError Traceback (most recent call last) in ----> 1 from fbprophet import Prophet

~\Anaconda3\lib\site-packages\fbprophet\__init__.py in 6 # of patent rights can be found in the PATENTS file in the same directory. 7 ----> 8 from fbprophet.forecaster import Prophet 9 10 __version__ = ‘0.5’

~\Anaconda3\lib\site-packages\fbprophet\forecaster.py in 18 19 from fbprophet.diagnostics import prophet_copy ---> 20 from fbprophet.make_holidays import get_holiday_names, make_holidays_df 21 from fbprophet.models import prophet_stan_model 22 from fbprophet.plot import (plot, plot_components, plot_forecast_component,

~\Anaconda3\lib\site-packages\fbprophet\make_holidays.py in 14 import pandas as pd 15 ---> 16 import fbprophet.hdays as hdays_part2 17 import holidays as hdays_part1 18

~\Anaconda3\lib\site-packages\fbprophet\hdays.py in 14 15 from convertdate.islamic import from_gregorian, to_gregorian ---> 16 from holidays import WEEKEND, HolidayBase, easter, rd 17 from lunardate import LunarDate 18

ImportError: cannot import name ‘easter’ from ‘holidays’ (C:\Users\me\Anaconda3\lib\site-packages\holidays\__init__.py)

 

GitHubにもissueとして報告されていて、近いうちに修正されるとは書いてありますが、待っていられない人に。

https://github.com/facebook/prophet/issues/1293

対処方法

ライブラリをインストール

pip install holidays==0.9.12

or

conda install holidays==0.9.11 (Anaconda等の場合は0.9.12がない)

ソース書き換え(非推奨)

私は試してはいませんが、Prophet内のソースを直接書き換える事でも対処可能なようです。 参考)https://stackoverflow.com/questions/60145006/cannot-import-name-easter-from-holidays

とはいえ、どこがどう壊れるか分かったもんじゃないので基本的には避けるべき手法ですが、どうしてもの時には…。

fbprophet/hdays.py の16行目を書き換えればよいらしいですね。

# befor from holidays import WEEKEND, HolidayBase, easter, rd

after

from holidays import WEEKEND, HolidayBase from dateutil.easter import easter from dateutil.relativedelta import relativedelta as rd

 

実行

import fbprophet
# INFO:matplotlib.font_manager:generated new fontManager
# ERROR:fbprophet:Importing plotly failed. Interactive plots will not work.

model = fbprophet.Prophet()
# Done!

 

GitHubというかオープンソースはこういうのもすぐ対処が見つかって素晴らしい。