Help us understand the problem. What is going on with this article?

ビットコインのヒストリカルデータ(1分毎)の取得

More than 1 year has passed since last update.

はじめに

 今更ながらですが、ビットコインの価格をディープラーニングを用いて予測しようと思います。また、対象にビットコインを選択したのは以下の理由です。

  • マーケットデータが安価に手に入ること(例えば、株価を予測しようとすると、株価だけではなく他の情報も必要となります。その情報はBloombergなどの情報ベンダから買う必要があります)
  • ファンダメンタルズ等の価格以外の情報が少ないこと(センチメントなどの情報は必要だと思いますが、一応今回の予測では対象に含めない予定です)
  • 話題性があること(いい意味でも、悪い意味でも)

この投稿ではまずはデータの取得から始めたいと思います。

目次

  1. ティックデータの取得
  2. ティックデータの1分毎の終値への変換

1.ティックデータの取得

 JPYBTCのヒストリカルデータ(1分毎)は簡単に手に入るだろうと思っていましたが、そう簡単にはいきませんでした。そもそも過去の情報を提供していなかったり、過去の情報が取得できるAPIを提供している取引所でも、実際に取得できるのは日次などの間隔が大きい場合がほとんどです。
 また、cryptowatchは1分毎のデータが実際に取得できるのですが、チャートに見えている以上過去のデータは取得できないらしく、1週間前のものは取得できません。
 データが1週間もないとなるとかなり問題で、オーバーフィッティングしてしまう可能性もありますし、そもそものデータの信頼性の問題もあります。
 そこで、以下のサイトで過去からの膨大なティックデータを発見したので、それを処理して1分毎のデータに変換することを考えます。

https://api.bitcoincharts.com/v1/csv/

2. ティックデータの1分毎の終値への変換

 以下のコードによりティックデータから1分毎の終値のデータを生成します。期間を2月からとしているのは、2月以前はかなり不安定な動きをしていたので、とりあえずは省いています。

import pandas as pd
from datetime import datetime, timedelta

filename = 'bitflyerJPY.csv'
header = ['timestamp', 'price', 'volume']
df = pd.read_csv(filename, names = header)
df = df.drop(['volume'], axis=1)
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
df_2 = pd.DataFrame()
start_date = datetime(2018, 2, 1)
n_date = 30

for i in (start_date + timedelta(minutes = x) for x in range(60 * 24 * n_date)):
    df_2 = df_2.append(df.loc[(df['timestamp'] > i).idxmax()], ignore_index=True)
    df_2.iat[-1, 1] = i

df_2 = df_2.set_index('timestamp')
df_2.to_csv('bitflyerJPY_2.csv', index=True)

上記のプログラムを実行後、4時間くらいで(もっと効率の良い書き方があれば教えてください)
以下のように1分ごとの終値を取得することができました。
キャプチャ.PNG

以上です。

Hir0fumi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした