今回はPandasを使って米国株情報を取得してみます。
scrapyなどを使ったスクレイピングを覚悟していましたが、色々と調べた結果、pandasの拡張であるpandas_datareaderというもので、お手軽に株価データを収集できるようです。
スポンサーリンク
Yahoo Finance! からの株価データ収集
以下の7行で指定した期間の株価データが取得できます。簡単ですね。
他にもGoogle Financeなどからも同様のデータが取得できるようです。
1 2 3 4 5 6 7 8 9 10 11 |
# yahoo financeからのデータの収集 # NVDA の株価 import pandas as pd import datetime as dt import numpy as np import pandas_datareader.data as web start = dt.date(2017,1,1) end = dt.date(2017,9,16) df= web.DataReader('NVDA',"yahoo",start,end) |
1 |
df.head(5) # 最初5行だけ表示 |
Open | High | Low | Close | Adj Close | Volume | |
---|---|---|---|---|---|---|
Date | ||||||
2017-01-03 | 104.400002 | 106.370003 | 99.379997 | 102.010002 | 101.684715 | 37549900 |
2017-01-04 | 103.400002 | 105.500000 | 101.529999 | 104.389999 | 104.057121 | 29980500 |
2017-01-05 | 104.529999 | 105.820000 | 101.050003 | 101.739998 | 101.415565 | 24607400 |
2017-01-06 | 102.849998 | 104.250000 | 101.199997 | 103.099998 | 102.771233 | 20571400 |
2017-01-09 | 103.500000 | 108.000000 | 103.500000 | 107.279999 | 106.937904 | 22857700 |
続いて、配当実績も取得してみます。 yahoo-dividendsに変えるだけ。
1 2 |
# 配当実績を取得 web.DataReader('NVDA', 'yahoo-dividends', start, end) |
Date | Dividends |
---|---|
2017-02-22 | 0.14 |
2017-05-19 | 0.14 |
2017-08-22 | 0.14 |
最後に、quoteデータも収集します。
1 2 |
#quoteデータの収集 NVDA = web.get_quote_yahoo('NVDA') NVDA |
PE | change_pct | last | short_ratio | time | |
---|---|---|---|---|---|
NVDA | 51.8 | +6.32% | 180.11 | 0.87 | 4:00pm |
PERと空売り比率が取得できました。 他の指標を取得するためには、やはりスクレイピングなどが必要なようです。
取得したデータの可視化
最後に、今回取得したデータを可視化します。 株価なのでローソク足を作ってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#matplot financeのインポート import matplotlib.finance as mpf fig = plt.figure(figsize=(12,6)) ax = plt.subplot(1, 1, 1) mpf.candlestick2_ohlc(ax, df["Open"], df["High"], df["Low"], df["Adj Close"], width=0.9, colorup="b", colordown="r") ax.set_xticklabels([(df.index[int(x)].strftime("%Y/%m/%d") if x <= df.shape[0] else x) for x in ax.get_xticks()], rotation=30) ax.set_xlim([0, df.shape[0]]) # 横軸の範囲はデータの個数(df.shape[0]個)までに変更しておく ax.set_ylabel("Price") bottom, top = ax.get_ylim() ax.set_ylim(bottom - (top - bottom) / 4, top) # 出来高のチャートをプロット ax2 = ax.twinx() volume_overlay(ax2, df["Open"], df["Adj Close"], df["Volume"], width=1, colorup="g", colordown="g") ax2.set_xlim([0, df.shape[0]]) # 出来高チャートは下側25%に収める ax2.set_ylim([0, df["Volume"].max() * 4]) ax2.set_ylabel("Volume") plt.show() |
本記事の発展記事