Pythonで無尽蔵から株価データをダウンロード
株価を自分で分析したいけど株価データを無料で取得できるサイトって少ないですよね。
今回は汲めども尽きない 無尽蔵さんから日足データをダウンロードするスクリプトを書いたので記事にします。
汲めども尽きない 無尽蔵 のURLは以下。ありがとうございます。
http://www.mujinzou.jp/
※python2で書いてます。
日足データのダウンロード
#! /usr/bin/env python # coding: utf-8 import os import codecs import zipfile import requests class Mujinzou(object): '''無尽蔵のクラス''' def __init__(self): '''初期化メソッド''' pass @classmethod def dl(cls, savePath='./', date_str='2015-01-05'): '''日足データの保存''' if not os.path.isdir(savePath): os.makedirs(savePath) year, month, day = date_str.split('-') fileName = 'T{0}{1}{2}.zip'.format(year[-2:], month, day) filePath = os.path.join(savePath, fileName) url = 'http://souba-data.com/d_data/{0}d/{1}_{2}d/{3}'.format(year, year[-2:], month, 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 @classmethod def load(cls, path='./', date_str='2015-01-05'): '''戻り値{code: [open, high, low, close, volume]}''' dic = {} year, month, day = date_str.split('-') fileName = 'T{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(',') dic[row[1]] = row[4:9] return dic def main(): pass if __name__ == '__main__': main()
無駄にクラス化してあるけど気にしない。
dl() メソッドで日足データ(ZIP)のダウンロード。savePath は保存先のディレクトリ、date_str は yyyy-mm-dd の形の文字列。
load() メソッドはダウンロードしたZIPファイルを一時解凍して辞書型 {銘柄コード: [始値, 高値, 安値, 終値, 出来高]} で返すようにした(自分用)。
試しに2019年1月7日の日経225を表示してみる。main 関数の定義内の pass を以下に変更して実行する。
Mujinzou.dl('./data', '2019-01-07')
data = Mujinzou.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))
こんな感じに表示される。保存先のディレクトリが存在しなかった場合でもディレクトリを作成して保存されていたので問題なさそう。
おわりに
日足データ一つじゃ分析もなにもないので、日足データを複数ダウンロードして銘柄ごとに一つのファイルに結合するのが妥当なのかな。
当日株価データ と 過去株価データがあるけど...
あまり気にしていなかったけど、「当日株価データ」と「過去株価データ」があるんですね。過去株価データは更新が18時頃で当日株価データを修正したものらしい。
当日株価データの方をダウンロードするように書いちゃった。。。
url = 'http://souba-data.com/d_data/{0}d/{1}_{2}d/{3}'.format(year, year[-2:], month, fileName)
を
url = 'http://souba-data.com/k_data/{0}/{1}_{2}/{3}'.format(year, year[-2:], month, fileName)
にすれば良さそう。
低レベルな記事だけど、何かの参考になれば幸いです。
株価データ倉庫からも記事にしたので良かったら見てください。