#はじめに
Pythonを使うなら、pandasとmatplotlib、numpy(今回は使わない)等のライブラリも使いこなせないとー
と思い、まだまだ初見ながら一応簡単に試してみました。
ちなみに、pandas-datareaderとpandasは別物のライブラリです。
元々はpandas.io
というPandas
の一部だったらしいですが、Pandas
の0.19.0からサポートされなくなったっぽく、pandas-datareader
が独立したそうです。
#手順
- 必要ライブラリのインストール
- APIキー取得
- 実行&出力
#必要ライブラリのインストール
$ pip install pandas # 1.2.4
$ pip install pandas_datareader # 0.9.0
$ pip install matplotlib # 3.4.2
$ pip install numpy # 1.20.3 今回使わないけどとりあえず入れたw
※2021/6/3現在のバージョン記載
pipコマンドのインストールはこちら、参考までに〜
##各ライブラリの用途
名前 | 用途 |
---|---|
pandas | データ読込や並べ替え、欠損値の補完などを行える。データ分析の前処理で使われることが多い |
pandas_datareader | Web上の様々なソースにアクセスできるPythonライブラリの1つ ※対応サイト後述 |
NumPy | 数値計算や行列演算を行える。複数の数値を配列としてまとめて扱ったり、行列演算を行ったりするのが得意 |
Matplotlib | Pythonで代表的なグラフ描画ライブラリ。2D/3Dなど多種のグラフ描画ができる |
#データアクセス用のAPIキーを取得
今回は株価を取得するために、Alpha VantageからAPIキーを取得します。
Claim your Free API Key - Alpha Vantage
にアクセスして、各情報を入れるとAPIキーを無料で発行できます。
###※重要:GET FREE API KEY
をクリックして発行されたAPI KEY
をメモしておきましょう!
※API Call制限:5 API requests / minute, 500 requests / day
詳しくはこちらまで=>Alpha Vantage Support
ちなみに、pandas_datareader 0.9.0
でデータ取得できるそれぞれのウェブサイトは下記です。(2021/6/3現在)
Tiingo, IEX, Alpha Vantage, Enigma, Quandl, St.Louis FED (FRED),
Kenneth French’s data library, World Bank, OECD, Eurostat,
Thrift Savings Plan, Nasdaq Trader symbol definitions, Stooq, MOEX, Naver Finance
#実行と出力
##アプリのディレクトリ構成
.
├── config.py # .envから値をセット
├── main.py # mainの実行ファイル
└── seed # 将来的にcsv保存・出力用のディレクトリ
##プログラムコード
###.env
ALPHA_VANTAGE_API_KEY=xxxxxxxxxxxxxxxx
###config.py
# coding: UTF-8
import os
from os.path import join, dirname
from dotenv import load_dotenv
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)
# Alpha Vantage
ALPHA_VANTAGE_API_KEY = os.environ.get("ALPHA_VANTAGE_API_KEY")
###main.py
import pandas as pd
from pandas_datareader import data as web
from matplotlib import pyplot as plt
import datetime as dt
import config as cfg
def main():
startdate = dt.date(2021,5,27) # 開始日
enddate = dt.date(2021,6,1) # 終了日
apikey = cfg.ALPHA_VANTAGE_API_KEY # API Keyをセット
# Apple, Microsoft, Facebookの株価をそれぞれ取得
df_appl = web.DataReader('AAPL', 'av-daily', startdate, enddate, api_key=apikey)
df_msft = web.DataReader('MSFT', 'av-daily', startdate, enddate, api_key=apikey)
df_fb = web.DataReader('FB', 'av-daily', startdate, enddate, api_key=apikey)
print(df_appl.head()['close'])
print(df_msft.head()['close'])
print(df_fb.head()['close'])
#各株価をミックスしたDataframeを作成、終値(closeのカラム)をセット
df_mix = pd.DataFrame({'Apple': df_appl['close'],'Microsoft': df_msft['close'], 'Facebook': df_fb['close']})
# グラフの設定と出力
df_mix.plot(figsize=(8,6),fontsize=18)
plt.legend(bbox_to_anchor=(0, 1), loc='upper left', borderaxespad=1, fontsize=18)
plt.grid(True)
plt.show()
if __name__ == "__main__":
main()
####カラムを絞らずに出力するとこんな感じのデータフレーム
# web.DataReader('AAPL', 'av-daily', startdate, enddate, api_key=apikey)のレスポンス
open high low close volume
2021-05-27 126.44 127.64 125.08 125.28 94625601
2021-05-28 125.57 125.80 124.55 124.61 71311109
2021-06-01 125.08 125.35 123.94 124.28 67637118
####ちなみに、yahoo
だったら、各社の株価を一括取得できるみたいだったから、こっちの方が便利っぽいなあ〜
df_mix = web.DataReader(['AAPL', 'MSFT', 'FB'], 'yahoo', start, end)
今度試してみよ・・・orz (API KEY取得後に気づいた)
##出力結果
###コンソール
$ python main.py
2021-05-27 125.28
2021-05-28 124.61
2021-06-01 124.28
Name: close, dtype: float64
2021-05-27 249.31
2021-05-28 249.68
2021-06-01 247.40
Name: close, dtype: float64
2021-05-27 332.75
2021-05-28 328.73
2021-06-01 329.13
Name: close, dtype: float64
ちゃんと2021/5/27~2021/6/1までの3社の株価がグラフ出力できました!
ちなみに、米国市場休場日なので、以下三日間のデータはありません。
- 5/29:土曜日
- 5/30:日曜日
- 5/31:戦没者追悼記念日
#ハマったポイント
- DataReaderで複数社のデータ一括取得を試したが、
Alpha Vantage
の場合、どうやってやるかわからなかった- 他の記事とか見たところみんな
yahoo
とかで一括取得していた。 - 多分、
Alpha Vantage
が用意しているAPI的な問題なんだろうか〜
- 他の記事とか見たところみんな
- グラフ出力中は、プログラムが終了せずずっと実行中となるので、若干盲点だった。
- 出力したら終わりみたいにしたいから、今度は
png
ファイルとかにして出力させるのがいいんじゃないかとか思う。
- 出力したら終わりみたいにしたいから、今度は
#まとめと感想
ウェブマーケや広告運用やっていたときは、取得したcsvデータをExcelに展開して、手動やマクロでガシガシ加工したり、
TableauなんかのBIツールでデータを可視化して、分析なんかやったりしてましたが、
Pythonでここまでライブラリが揃っていると、わざわざExcelとかじゃなくても色々できそうだと思いました。
Tensorflowなんかを使って、機械学習のモデルに、データを食わせて分析すればめちゃくちゃ面白い分析と予測等ができるんじゃないかと
ワクワクしています。
また、Herokuなんかを使えば、株価の取得を自動化して、気になる銘柄だけ確認するTwitterBotやアプリを作れたりすると思うので、
アイデア次第では、応用の幅がぐんと広がるんじゃないかと思います。
2時間くらいで、本質が理解できたんで、本格的に何かのプロダクトに活かしてまいりたいと思います。
以上、ありがとうございました!