【第2回】無尽蔵から株価データの一括取得
December 11, 2020
株価サーバー python無一物中Project記事一覧
- 【第1回】株価サーバーの構築の概要
- 【第2回】無尽蔵から株価データの一括取得(本記事)
- 【第3回】無尽蔵株価データから銘柄毎の時系列データを生成
- 【第4回】無尽蔵から自動で株価データを取得し株価データベースを更新
- 【第5回】出来ず株価の補填と株式分割を自動調整してチャート表示
- 【第6回】mplfinanceを使用してテクニカルチャート表示
- 【第7回】テクニカル指標による銘柄スクリーニング
- 【第8回】株価チャート配信サーバー
- 【第9回】チャート形状の認識
はじめに
毎日の日本株の株価データを公開している無尽蔵というサイトがあります。ここには、1996年以降の株価データが置かれています。
本記事では、無尽蔵サイトから毎日株の価データを一括ダウンロードするpython3スクリプトを紹介します。
無尽蔵サイトの株価データ
無尽蔵サイトの株価データは、以下のような形式のcsvファイルです。
T201201.csv
2020/12/1,1001,11,1001 日経225,26624,26852,26618,26788,1331220000,東証1部
2020/12/1,1002,11,1002 TOPIX,1765,1772,1760,1768,1331220000,東証1部
2020/12/1,1301,11,1301 極洋,2824,2824,2780,2787,17900,東証1部
2020/12/1,1305,11,1305 ダイワTPX,1851,1862,1850,1857,575180,東証1部
2020/12/1,1306,11,1306 TOPIX投,1831,1840,1828,1835,2675730,東証1部
...
2020/12/1,1712,31,1712 ダイセキ環境,0,0,0,0,0,名古1部
2020/12/1,1712,11,1712 ダイセキ環境,686,689,682,688,35700,東証1部
...
2020/12/1,9996,91,9996 サトー商会,1440,1470,1424,1454,1700,JAQ
2020/12/1,9997,11,9997 ベルーナ,959,962,938,954,154000,東証1部
特徴を挙げると、次のようなかんじです。
- 4本値+出来高
- 「日経225」と「TOPIX」には独自の証券コードが割り振られている。
- 名証と東証に重複上場している銘柄は、両方の行がある。
- 出来なかった銘柄の株価は0
- 株式分割した際の調整株価のデータがない
- ときどきファイルに文字化けが発生している。
- 1996年以降のデータが置かれている。
株価データのurlの例
当日データー(2020年1月6日の例)
https://mujinzou.com/d_data/2020d/20_01d/T200106.zip
2019年以降の過去株価データー(2020年1月6日の例)
https://mujinzou.com/k_data/2020/20_01/T200106.zip
2018年以前のデータはNot Foundになり取得できないようです。
株価データの一括取得
とりあえず、以下のスクリプトで数年分取得してみます。
get_all_csv_zip_from_muzinzo.py
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 29 11:48:05 2020
[無尽蔵]から過去のTyymmdd.zipを取得する
"""
import urllib.request
import zipfile
import datetime
import os
import logging
import sys
def download_csv_zip(output_dir, year, month, day):
base_url = 'http://mujinzou.com/k_data/'+str(year)+'/'
subdir = '{0:02d}_{1:02d}/'.format(year-2000, month)
filename = 'T{0:02d}{1:02d}{2:02d}.zip'.format(year-2000, month, day)
url = base_url + subdir + filename
now = datetime.datetime.now()
try:
urllib.request.urlretrieve(url, filename)
with zipfile.ZipFile(filename, 'r')as zf:
zf.extractall(output_dir)
os.remove(filename)
logging.info(str(now)+' success to get file: '+filename)
except urllib.error.HTTPError:
logging.error(str(now)+' error')
def main():
args = sys.argv
if len(args)==2:
output_dir = args[1]
if output_dir[-1]!='/':
output_dir = output_dir + '/'
else:
output_dir = './'
logging.basicConfig(level=logging.INFO)
for yy in range(2019, 2021):
for mm in range(1, 13):
for dd in range(1, 32):
download_csv_zip(output_dir, yy, mm, dd)
if __name__ == '__main__':
main()
雑なコードなんで、必要に応じmain()の取得期間を書き換えてください。
以下のように実行すると、カレントディレクトリに取得したcsvファイルが生成されます。
$ python get_all_csv_zip_from_muzinzo.py
特定のディレクトリに取得したcsvファイルを置きたい場合は、以下のように第1引数にパスを指定します。
$ python get_all_csv_zip_from_muzinzo.py ./tmp
以上で無尽蔵サイトから一括で株価データを取得できました。 取得したファイルは日ごとのcsvファイルなので、これを銘柄ごとの時系列csvファイルに変換すれば、チャート表示等に使用することができるようになります。本サイトで、無尽蔵から取得した株価データから銘柄毎の時系列データを生成する方法を紹介しています。
まとめ
無一物中Project第2回では、無尽蔵サイトから一括で株価データを取得するpythonスクリプトを紹介しました。