pandas-datareaderがインストールできない→pandasだけで株価を取得する方法【Python】

プログラミングによるテクニカル分析には,株価データなどを取得(用意)することが必須です.

おそらく,テクニカル分析ではPythonライブラリ「pandas-datareader」を用いてデータを取得するのが一般的だと思います.

以下の記事では,「pandas-datareader」を用いて株価データを取得する方法を紹介しています.

pandas-datareaderはpipで簡単にインストールできますが,中にはインストールがなぜかうまくいかないというPython初心者の方もいるかもしれません.

そこで今回は,pandas-datareaderのようなデータ取得ライブラリをインストールせずに,ほどんどの人が既にインストールしているであろうpandasだけで株価を取得したいと思います.

pandasのインストール

既にインストールしてある人も多いと思いますが,一応pandasのインストール方法を紹介しておきます.

pandasはpipでインストールできます.

pip install pandas

pandasによる株価データ取得

データの取得方法としては,stooq(Yahoo!financeのようなAPI)のCSVファイルの設置しているURL,つまりネットから直接pandasで呼び出します.

例えば,https://stooq.com/q/d/l/?s=6758.jp&d1=20190620&d2=20200625&i=dのようにこのURLにCSVファイルが存在しています.

このCSVファイルをpandasで読み込むコードは以下の通りです.

import pandas as pd

code = '6758.jp'
start = '20190620'
end = '20200625'

df = pd.read_csv(f'https://stooq.com/q/d/l/?s={code}&d1={start}&d2={end}&i=d',index_col=0)
df.index = pd.to_datetime(df.index).tz_localize('Asia/Tokyo')

print(df)

実行結果

                              Open     High      Low    Close   Volume
Date
2019-06-20 00:00:00+09:00  5686.88  5817.98  5684.89  5738.53  7681480
2019-06-21 00:00:00+09:00  5733.56  5785.20  5603.46  5609.41  8159043
2019-06-24 00:00:00+09:00  5670.99  5722.64  5649.14  5712.71  6472721
2019-06-25 00:00:00+09:00  5669.00  5676.95  5578.63  5592.53  6771060
2019-06-26 00:00:00+09:00  5591.54  5650.13  5583.59  5594.52  5556361
...                            ...      ...      ...      ...      ...
2020-06-19 00:00:00+09:00  7671.00  7684.00  7589.00  7612.00  4930500
2020-06-22 00:00:00+09:00  7670.00  7705.00  7602.00  7607.00  4118500
2020-06-23 00:00:00+09:00  7653.00  7664.00  7526.00  7640.00  4876400
2020-06-24 00:00:00+09:00  7652.00  7705.00  7625.00  7650.00  4630100
2020-06-25 00:00:00+09:00  7590.00  7652.00  7554.00  7555.00  4216700

コード解説

stooqのURLの構造を見てみると,

https://stooq.com/q/d/l/?s={code}&d1={start}&d2={end}&i=d

という形になっているので,code(銘柄コード),start(データ取得開始日),end(データ取得終了日)を指定して呼び出せばよいことが分かります.これらを,

code = '6758.jp'
start = '20190620'
end = '20200625'

と決めています.ちなみに,6758はソニーの証券コードです.

あとは,csvファイルをDataFarameとして取得することができるpd.read_csvで呼び出せばOKです.

最後の

df.index = pd.to_datetime(df.index).tz_localize('Asia/Tokyo')

は,indexを東京の時刻データとして扱えるように変換しています.これはおまけなので,書かなくても大丈夫です.