米中貿易戦争にも関わらずNYダウは史上最高値を更新しまくっており、えらい盛り上がっているんやなということで、最近米国株にも興味が出てきました。
調べてみると米国株のデータはpythonを使うと割と簡単に株価データを取得できることがわかったので、取得方法を書いておきたいと思います。
pandas_datareaderとは
米国株の株価はpandas-datareaderというモジュールを使うことで取得することができます。
このpandas_datareaderというのは、米国株だけでなく、原油価格や為替のデータなどを、以下に示すインターネット上の様々なデータソースから取得できるようになっており、めちゃくちゃ便利なモジュールです。
日本株と違ってどこかのサイトからスクレイピングする必要がないので、すごくありがたいですね。海外ってこうゆうデータがオープンになっていて羨ましいです。
- 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
詳細はpandas_datareaderの公式documentに詳しく書いていますので、こちらも参照しください。※pdf版もあります。
pandas-datareaderのインストール
インストール方法は例のごとく、以下のpip installコマンドで簡単にインストールできます。
pip installがよくわからない方はこちらを御覧ください。
Pythonの始め方④ pipとは?Pythonを便利に利用するためのpipの理解
$ pip install pandas-datareader
モジュールのインポート
pandas_datareaderがインストールできたので、実際に使っていきたいと思います。
今回使用するモジュールは、データソース先にアクセスするためのpandas_datareader.dataとNASDAQの銘柄記号を取得するためのget_nasdaq_symbosというものをインポートします。
pandas_datareader.dataはwebという名前にしています。
後、必須ではないですが進捗状況をみるためのtqdmもインポートしておきましょう。
import pandas_datareader.data as web
from pandas_datareader.nasdaq_trader import get_nasdaq_symbols
from tqdm import tqdm
Googleの株価を取得
では、例としてGoogleの株価を取得したいと思います。
銘柄記号の取得
まずはGoogleの銘柄記号が必要となるので、銘柄記号を取得したいと思います。
以下のコードになります。
symbols = get_nasdaq_symbols()
symbols.head()
上記を実行すると以下のようなデータフレームが得られていると思います。

indexになっているSymbolの列が必要な銘柄記号になります。
Googleの銘柄記号はSecurity Nameの列が「Alphabet Inc. – Class A Common Stock」と書かれているものになるので、「GOOGL」になります。

※一旦for分でSecurity Nameを全部書きだしてから検索するといいかと思います。
株価データの取得
銘柄記号がわかったので、実際に株価を取得したいと思います。株価取得コードも簡単で以下のコマンド取得可能です。データソースはYahooにしています。
datum = web.DataReader("GOOGL","yahoo","2019/11/1","2019/11/15")
web.DataReaderの使い方は、引数に銘柄記号、データソース、取得開始日付、取得終了日付を入れる形です。以下のようなデータが得られていると思います。

米国の時間のせいなのか開始日が一日ずれる感じになるようですね。このあたりは調整してください。
NASDAQ全銘柄の株価データの取得
上記はGoogleの株価データの取得でしたが、全銘柄のデータを取得する場合は以下のようにかけばよいかと思います。
data = {} #データ辞書の作成
error_symbols = [] #エラーが出た場合はその銘柄記号をリストに保管する
for s in tqdm(symbols.index):
try:
data[s] = web.DataReader(s,"yahoo","2019/1/1")
except:
error_symbols.append(s)
dataという辞書に各銘柄2019年1月1日〜現在までのデータフレームを格納していきます。
途中でエラーが発生した時のためにエラー処理を入れています。エラーが発生したときはその銘柄記号をerror_symbolsリストに格納する感じです。
上記を実行すればよいのですが、symbolsに含まれる銘柄は全部で8910銘柄もあるため、上記を実行するとダウンロードするのにかなり時間がかかるので気をつけてください。
まとめコード
最後にまとめコードを示しておきます。シンプルでいいですね。
import pandas_datareader.data as web
from pandas_datareader.nasdaq_trader import get_nasdaq_symbols
from tqdm import tqdm
symbols = get_nasdaq_symbols()
data = {}
error_symbols = []
for s in tqdm(symbols.index):
try:
data[s] = web.DataReader(s,"yahoo","2019/1/1")
except:
error_symbols.append(s)