Pythonで東証時系列データを自動取得
1. できるようになったこと
2. 学んだこと
2.1. request, zipfileモジュールの使い方
ネット上のzipファイルをDLして解凍する
2.2. globモジュールの使い方
ローカルフォルダに既にDL済みのファイル一覧を取得して、その中の最新日付ファイル名を取得。
2.3. datetimeモジュールの使い方
フォルダ内にあるファイルが"201902xx"の形式で日付を含むファイル名だったので、この形式のまま日付を扱っていたところ、8桁の数字として認識されてしまったため、繰り返し処理で2/28, 2/29, 2/30, 2/31 ...のデータを取得しようとしてErrorが出ていた。
対策としてdatetime形式に変換して扱うことにした。
2.4. try except構文
データがない日(休日)のデータを探しに行ったときのErrorで止まっていた。 try except構文を使ってError時は次の日付に移る仕様にした。
3. 完成形
datas = glob.glob("*.csv") newest_date = datetime(int(datas[-1][3:7]),int(datas[-1][7:9]),int(datas[-1][9:11])) today = datetime.today() while today > newest_date: newest_date = newest_date + timedelta(days=1) newest_date_str = newest_date.strftime("%Y%m%d") try: # オプション理論価格等情報 # 利用ガイド:http://www.jpx.co.jp/markets/derivatives/option-price/01.html # 一覧: http://www.jpx.co.jp/markets/derivatives/option-price/index.html url = "http://www.jpx.co.jp/markets/derivatives/option-price/data/%s.zip" file = "ose%stp"%newest_date_str r = requests.get(url%file) z = zipfile.ZipFile(io.BytesIO(r.content)) z.extractall() colName = ("CODE","TYPE","MATURITY","STRIKE", "RSV", "PUT_CODE", "PUT_PRICE", "PUT_RSV", "PUT_TPRICE", "PUT_VOLATILITY", "CALL_CODE","CALL_PRICE","CALL_RSV","CALL_TPRICE","CALL_VOLATILITY", "F225_PRICE", "Base_VOL") df_raw = pd.read_csv(file+".csv", names=colName, converters = {'CODE' : strip, 'TYPE' : strip}) except: continue print("Finish!!")