##はじめに
皆さん、こんにちは。@Raphael_de_murlです。今回の記事は理論的な情報共有よりはエラーメッセージの対応についてご紹介させて頂きたいと思います。
##どんなエラーなのか?
記事のタイトル通りPandasに関するエラー対応になります。機械学習を勉強している方なら一度はやる株価データの解析です。その中でPandasをインポートする際発生するエラーです。
froma pandas.io.data import DataReader
このモジュールをインポートするとこういうエラーが出て来ます。
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-8-ddc8504c263b> in <module>
----> 1 from pandas.io.data import DataReader
ModuleNotFoundError: No module named 'pandas.io.data'
##エラーの原因
じゃあ、そもそも何が原因でこういうエラーが発生したのかを見てみましょう。
pandas-datareaderドキュメント
Starting in 0.19.0, pandas no longer supports pandas.io.data or pandas.io.wb, so you must replace your imports from pandas.io with those from pandas_datareader:
なるほど...以前まではpandas.ioの名前でサポートしたんですが、pandasの0.19.0以降のバージョンではサポートが終了したんですね。その代わりにpandas_datareaderというライブラリーをインストールすることで解決できるらしいです。やってみましょう。
##対応
エラーの原因が把握できたところで残りはそれの対応ですね。公式ドキュメントを見ながら対応して行きます。まず、pandas_datareaderのライブラリをインストールします。
pip install pandas-datareader
#こちらはgithubからの最新バージョンのインストールです。
pip install git+https://github.com/pydata/pandas-datareader.git
インストールを完了したらインポートします。
from pandas_datareader import DataReader
するとエラーは解決されたはずです。
##確認
エラーが出ないから問題が解決されたとは言い切れません。ちゃんとインポートされて使いたいライブラリーがちゃんと動くのかまで確認することがエンジニアの基本です。一つの例としていくつかの企業の情報を取得して行きたいと思います。ちなみにテスト環境はjupyter NoteBookです。
import pandas as pd
import numpy as np
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
%matplotlib inline
from pandas_datareader import DataReader
from datetime import datetime
tech_list = ['AAPL', 'GOOG', 'MSFT', 'AMZN']
end = datetime.now()
start = datetime(end.year - 1, end.month, end.day)
for stock in tech_list:
globals()[stock] = DataReader(stock, 'yahoo', start, end)
AAPL.describe()
ここまで入力して確認したら
こういう風にデータがちゃんと見えたら成功です。
##まとめに
エンジニアがエラーの解決がめんどくさいとかやりたくないというのはダメです。ちゃんと見て原因を把握して解決するのがかっこいいです!そうじゃないでしょうか?筆者はそう思います(笑)
↓筆者が運用しているツイッターでございます。興味ある方はぜひぜひフォロワーお願い致します。
AI/機械学習のお兄ちゃんのツイッター