#お気持ち
Kaggleにビットコインの約定データが挙げられてました
https://www.kaggle.com/mczielinski/bitcoin-historical-data
ビットコインの大規模な過去約定データは今としては結構貴重なような気がします
(bitflyerは1ヶ月前までしか取得できなくなったんだっけ)
機械学習なら1分足で十分かもですが、個人的に1分足以外のデータを見たいのでN分足に直せるプログラムを作りました
#コード
甘えと妥協の産物
rosoku.py
import pandas as pd
import numpy as np
import datetime
#N分足のデータに加工
N=15
#任意の日付以降を加工する
date_from=int(datetime.datetime(2016, 1, 2, 0, 0, 0).timestamp())
df=pd.read_csv("bitstampUSD_1-min_data_2012-01-01_to_2020-09-14.csv")
df=df[2000000:]
#↑これより前はデータが欠損してると思う Timestampの数字とlen(df)のつじつまが合わない
#まあ昔すぎてあっても意味ないと思う
df=df.iloc[(date_from-df.iloc[0,0])//60:]
#nan埋め nanの原因はおそらくその1分間に取引がなかったため
def remove_nan(df):
#dfにappendするんじゃなくて、listを作ってからdfにする方が速かった
temp=[[] for i in range(len(df.columns))]
for i in range(len(df)):
if np.isnan(df.iloc[i,1]):
temp[0].append(df.iloc[i,0])
temp[1].append(temp_price)
temp[2].append(temp_price)
temp[3].append(temp_price)
temp[4].append(temp_price)
temp[5].append(0)
temp[6].append(0)
temp[7].append(temp_wprice)
else:
temp_price=df.iloc[i,4]#欠損値を埋める用のデータ取得
temp_wprice=df.iloc[i,7]#こっちも
for c in range(len(df.columns)):
temp[c].append(df.iloc[i,c])
data={}
for col_name,col_value in zip(df.columns,temp):
data[col_name]=col_value
tempdf=pd.DataFrame(data,columns=df.columns)
return tempdf
#N分足にする
def rosoku_N(df):
newdf=pd.DataFrame(columns=df.columns)
temp=[[] for i in range(len(df.columns))]
for i in range(len(df)//N):
temp[0].append(df.iloc[i*N,0])
temp[1].append(df.iloc[i*N,1])
temp[2].append(max(df.iloc[i*N:i*N+N,2]))
temp[3].append(min(df.iloc[i*N:i*N+N,3]))
temp[4].append(df.iloc[i*N+N,4])
temp[5].append(sum(df.iloc[i*N:i*N+N,5]))
temp[6].append(sum(df.iloc[i*N:i*N+N,6]))
temp[7].append(sum(df.iloc[i*N:i*N+N,7])/N)
data={}
for col_name,col_value in zip(df.columns,temp):
data[col_name]=col_value
newdf=pd.DataFrame(data,columns=df.columns)
newdf["Timestamp"]=newdf["Timestamp"].astype(int)
return newdf
df=rosoku_N(remove_nan(df))
df.to_csv("BTC_N="+str(N)+"_rosoku.csv")
↑のコードの処理は数分くらいで終わると思う
pandasよくわからない まだ高速化できるかな
でも最初は3日かかる勢いだったから短くできてよかった
素人考えだけど1分足より15分足とかで機械学習した方が結果出るんじゃないかと思ってる