Pythonで株価データ倉庫から株価データをダウンロード
前回は「汲めども尽きない 無尽蔵」から株価データを入手するスクリプトを記事にしましたが、今回は「株価データ倉庫」から取得したいと思います。
株価データ倉庫 のURLは以下。ありがとうございます。
http://stock-databox.net/data.html
※python2で書いてます。
日足データのダウンロード
stock_databox.py
#! /usr/bin/env python # coding: utf-8 import os import codecs import zipfile import requests def dl(savePath='./', dateStr='2015-01-05'): '''日足データの保存''' if not os.path.isdir(savePath): os.makedirs(savePath) year, month, day = dateStr.split('-') fileName = 'y{0}{1}{2}.zip'.format(year[-2:], month, day) filePath = os.path.join(savePath, fileName) url = 'http://stock-databox.net/{0}'.format(fileName) response = requests.get(url) if response.status_code != 200: raise with codecs.open(filePath, 'w', encoding=None) as f: f.write(response.content) return filePath def load(path='./', dateStr='2015-01-05'): '''ZIPファイルの読み込み。戻り値{code: [open, high, low, close, volume]}''' dic = {} year, month, day = dateStr.split('-') fileName = 'y{0}{1}{2}.zip'.format(year[-2:], month, day) with zipfile.ZipFile(os.path.join(path, fileName), 'r') as zf: for row in zf.open(zf.namelist()[0]): row = row.split('\t') row[-1] = float(row[-1]) * 1000 dic[row[0]] = map(float, row[2:]) return dic def main(): pass if __name__ == '__main__': main()
操作方法は無尽蔵のときとほぼ変わらない。今回クラス化はやめました。
dl() 関数で日足データ(ZIP)のダウンロード。savePath は保存先のディレクトリ、dateStr は yyyy-mm-dd の形の文字列。
load() 関数はダウンロードしたZIPファイルを一時解凍して辞書型 {銘柄コード: [始値, 高値, 安値, 終値, 出来高]} で返すようにした(自分用)。
試しに2019年1月7日の日経225を表示してみる。main 関数の定義内の pass を以下に変更して実行する。
dl('./data', '2019-01-07')
data = load('./data', '2019-01-07')
code = 1001
nikkei225 = data[str(code)]
print('銘柄コード: {0}\n始値: {1[0]}\t高値: {1[1]}\t安値: {1[2]}\t終値: {1[3]}\t出来高: {1[4]}'.format(code, nikkei225))
こんな感じに表示される。終値と出来高の値が、無尽蔵のデータと若干違う。。。
とりあえず動作は問題なさそうです。
おわりに
無尽蔵の方ではダウンロードしたデータを読み込むときに値(価格)を str型 にしてたけど、float型 にしておいた方が今後楽そうなので変更した。
株価データ倉庫のファイルは拡張子が txt だけど中身は tsv になっているので split() メソッドの引数で \t を指定すればほぼ無尽蔵の日足データと同様の処理でいけた。
出来高は 1/1,000 で記入されてるっぽいので、1,000倍してる。
何かの参考になれば幸いです。