4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

kaggleのビットコインの1分足データからN分足データを生成

Last updated at Posted at 2020-09-22

#お気持ち
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分足とかで機械学習した方が結果出るんじゃないかと思ってる

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?