2021年2月時点 pandas-datareaderはエラーが起こるようです。
こんにちは、@Yoshimiです。
Pythonといえばデータ分析、機械学習、AI開発ですよね。入門として株価予測が人気のようなので私もやってみました。
Pythonモジュールとしてpandas-datareaderがあります。このpandas-datareaderは、経済データや金融商品の価格データが取ることができるようです。詳しくはhttps://pandas-datareader.readthedocs.io/en/latest/index.htmlをチェックしてください。データ取得先はNASDAQ、OECD、世界銀行など色々あります.
実装
私はgoogle colaboratoryを利用することが多いので、google colaboratoryで実装していきます。
モジュールのインストールをします。
import pandas as pd from pandas import Series, DataFrame import pandas_datareader.data as web import numpy as np import datetime import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline
google colaboratoryでは一通りのモジュールが利用できるので特にpandas_datareader
インストールも必要ないです。
インストールが必要であれば、
$sudo pip install pandas-datareader
を打ち込んでください。
start = datetime.datetime(2018, 1, 1) end = datetime.datetime(2019, 12, 31) pd_data = web.DataReader('GOOG', 'yahoo', start, end) pd_data.tail()
DataReader()の引数にnameにデータセット名(GOOG→googleなど)、data_sourceにデータソース名(yahooなど)、start
変数にデータ取得開始年月日、end
変数にデータ取得終了年月日が入ります。データソース一覧はpandas-datareaderをチェックしてください。
実行!
tail()を使って、最後尾から表示させています。
カラムの説明
- Date:日付
- High:高値
- Low:安値
- Open:始値
- Close:終値
- Volume:出来高
- Adj Close:調整後終値
では、表示されたデータがあっているかチェックしてみましょう!
yahoo!ファイナンス掲載、google(アルファベット)の株価です。カラムの順番は異なりますが、各データは一致しています。(すごい!)
googleの株価を折れ線グラフでplotしてみます。
GOOG['High'].plot(figsize=(10,4))
グラフで確認するとすごい上がり具合です。細かいデータ分析は後程・・・
複数の株価をまとめて表示してみます。と、ちょっと取得日付を少アレンジしてみます。
from datetime import datetime # stock_list = ['AAPL', 'GOOG', 'SNE'] end_ = datetime.now() start_ = datetime(end.year - 1, end.month, end.day) df_2 = web.DataReader(['AAPL', 'GOOG', 'SNE'], 'yahoo', start_, end_) print(type(df_2.index)) df_2.head()
AAPLはApple、GOOGはAlphabet(google)、SNEはSonyをセットします。datetime
で、プログラムを実行するdatetimeを取得し、start_ではそこから逆算して取得開始日・期間開始日を取得します。
ピボットで表示されています。
各種株価の終値だけを表示させます。
df_2['Close'].head()
データセットした3社の株価をチェックしてみます。
df_2['Close'].plot(title='AAPL vs GOOG vs SNE', grid=True)
株価の推移はチェックできますが、そもそもの価格が違うので比較がしにくいです。ですので、open、開始価格を揃えて比較してみます。
df_2['Close', 'AAPL'] /= df_2['Close'].loc[df_2.index[0], 'AAPL'] df_2['Close', 'GOOG'] /= df_2['Close'].loc[df_2.index[0], 'GOOG'] df_2['Close', 'SNE'] /= df_2['Close'].loc[df_2.index[0], 'SNE'] df_2['Close'].plot(title='AAPL vs GOOG vs SNE', grid=True)
AAPLの株価の伸びがやばいくらいです・・・こうなるのであれば少しでも購入しておけばよかったなと思います。アルファベットとSonyの株価が逆転してるなど何があったのでしょうか?各社の商材の動きまではチェックしていないのでわからないことだらけなのですが、このような動きが予測できるとお金に困らない人生が送れるのだろうなと思ったデータです。
最後に
今回は、Pythonのライブラリpandas-datareaderで株価を取得するがテーマだったので、まずは取得して表示できるところまでは達成できました。dataframeにも格納できるので、ここから統計分析や予測モデル(目標はアプリ)を作っていこうと思います。私は株よりFX派なのでそのデータの有効活用も行なっていきたいなと。データセットを眺めるだけでなく、やはり株で儲けられるくらいまでの予測精度を出せたら非常にうれしいですし、多分仕事しないです。