こんにちは。カルークです。
前回はpandas datarederを使って、任意の銘柄の株価情報(daily)を取得する方法について書きました。
今回はその応用編として、pandas datareaderを用いて東証(東京証券取引所)に上場している全ての銘柄の株価情報(daily)を収集する方法について纏めたいと思います。
東証上場銘柄一覧の入手
前回の記事で紹介したpandas datareaderでは、証券コードを引数として株価情報を引っ張ってくるものでした。そのため、対象となる証券コードを東京証券取引所のホームページから取得したいと思います。
東京証券取引所のホームページにアクセスし、東証上場銘柄一覧から”data_j.xls”というエクセルファイルをダウンロードし、任意のフォルダに保存しておきます。
必要なパッケージのインポート
ここからはpythonでの作業となります。まずは必要なライブラリであるpandas datareaderのインポートを行います。他にも、さきほどダウンロードした東証全銘柄のエクセル読み込みを行う為にpandasのインポートや、日時指定のためのdatetimeのインポートもここで行っておきます。
import pandas as pd
import datetime
import pandas_datareader.data as web
東証全銘柄リストをロード
続いて、さきほど東京証券取引所のホームページからダウンロードしたエクセルファイルをロードしておきます。フォルダ構成は各自の環境に合わせて頂きたいですが、ここでは実行ファイル(.ipynb)と同じ階層に”data”というフォルダを作成し、その直下にエクセルファイルを配置してあります。
df_data_j = pd.read_excel("./data/data_j.xls")
データの確認をしてみると、ちゃんと読み込まれているのがわかります。個別・ETF含めて全部で4133個もの銘柄がありますね。「コード」というのが証券コードの事で、後にpandas datareaderの引数に入れる値になります。
エクセルファイルのロードが出来なかった場合
エクセルのファイルロードでエラーが出てしまう場合、pythonでエクセルファイルを読み込むためのライブラリがインストールされていない可能性があります。その場合、以下のコマンドでxlrdのインストールを行った後、もう一度実行するとうまくいく場合があります。
pip install xlrd
東証の全銘柄の株価データを取得する
それでは東証の全銘柄の株価データ(日毎)を取得してみましょう。方法としては、上でロードしたエクセルの「コード」列をforループで回しながら、pandas datareaderで「コード」を指定し株価を取得、それをcsvに保存(1銘柄1ファイル)するようにしたいと思います。取得する期間については任意で指定できますが、以下の実装サンプルでは2010/01/01~本日までのデータを収集しています。
以下がその実装内容になります。
※ 実行前にcsvの保存用の”./data/stock_price_data”というフォルダを作成しておく必要があります。
start = datetime.date(2010,1,1)
end = datetime.date.today()
for index, row in df_data_j.iterrows():
try:
df = web.DataReader(f'{row["コード"]}.T', 'yahoo', start, end)
except:
print("error")
df.to_csv("./data/stocks_price_data/stock_price_data_{}.csv".format(row["コード"]))
実行時間は通信環境や取得期間にも依存しますが、私の環境だと寝る前に仕掛けて朝起きたら収集が終わっていました。
結果出力のフォルダを見ると、こんな感じで約4000銘柄のcsvファイルが保存されています。
適当に1ファイル(銘柄コード:1472)を開いてみましたが、こんな感じでDate, High, Low, Open, Close, Volume, Adj Closeのデータが入っているのが確認できます。ちなみに、上記実装では2010/01/01から今日までのデータを取得したはずですが、このファイルを見ると2015/08/20からのデータとなっています。これは、この銘柄が上場されたのが2015/08/20からであり、それ以前のデータが無いためと思われます。(銘柄コード:1472は個別株ではなく、ETFでした)
まとめ
今回は、pandas datareaderを使った株価情報取得の応用編として、東証全銘柄の株価情報を収集する方法についてまとめました。将来的にはpythonスクリプト化しバッチで収集するなどし、日毎のトレンド分析や株価予測などに活用出来たらいいなと思います。(時間がある時に、その記事を書きたいと思います)
ちなみに、株価以外に企業のファンダメンタルズ情報(財務諸表など)の取得方法に関する記事も書いているので、良かったら合わせてご覧頂けたらと思います。