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を東京の時刻データとして扱えるように変換しています.これはおまけなので,書かなくても大丈夫です.
ディスカッション
コメント一覧
まだ、コメントがありません