Bitcoinchartsでbitcoinの過去の取引履歴を取得し可視化する
今回はbitcoinの取引所での取引履歴のデータを取得してみます。
前回bitFlyer LightningのAPIを使えるパッケージを作った時のように、各取引所が公開しているデータや提供しているAPI等がありますが、今回はBitcoinchartsから取得してみます。Bitcoinchartsは各取引所の各通貨のデータを収集、可視化しているウェブサイトで、そこで利用しているデータも公開しています。
データ取得
WebAPIから取得する
1つ目の方法として、URLを叩いてWebAPIから取得する方法があります。データを取得するには、以下のURLにアクセスするだけです。SYMBOL
の所には取得したい取引所&通貨の情報を指定します。取得対象とするデータの開始日をあわらすstart=UNIXTIME
は必須ではありません。
- http://api.bitcoincharts.com/v1/trades.csv?symbol=SYMBOL[&start=UNIXTIME]
例えば、coinckeckのBTC/JPYの場合はcoincheckJPY
なので、http://api.bitcoincharts.com/v1/trades.csv?symbol=coincheckJPY にアクセスすればいいわけです。すると、以下のように生のcsv形式でデータが表示されるので、ブラウザのダウンロード等を利用して保存することができます。
もちろん、次のようにcURLやwgetのようにコマンドラインからURLを指定してダウンロードすることもできます。
$ wget "http://api.bitcoincharts.com/v1/trades.csv?symbol=coincheckJPY"
最新の情報のみを取得したい時などは、WebAPI形式での取得が簡単です。
csv形式で直にデータを取得する
2つ目の方法として、Bitcoinchartsが所有するすべてのデータを一度に取得する方法もあります。以下のURLにアクセスすると、様々な取引所と通貨の取引履歴がリストアップされており、データを選択して保存、ローカルで解凍することで簡単にデータを手に入れることができます。なかにはそもそもデータの無いものやMt.Goxのように取引所が閉鎖され更新が止まっているものなどもありますので、データの最終更新日やファイルサイズを確認した上で、データを利用したほうが良さそうです。
btc/jpyに関しては以下の5つがあります。
- anxhkJPY.csv.gz
- ANX INTERNATIONAL
- 最終取引履歴日:2015/10/10
- btcexJPY.csv.gz
- BTCex - Bitcoin Wiki
- 最終取引履歴日:2011/03/06
- coincheckJPY.csv.gz
- Coincheck(コインチェック)
- 最終取引履歴日:2016/09/04(データ取得日)
- mtgoxJPY.csv.gz
- マウントゴックス - Wikipedia
- 最終取引履歴日:2014/02/25
- ruxumJPY.csv.gz
- Ruxum - Bitcoin Wiki
- 最終取引履歴日:2011/10/19
- thJPY.csv.gz
- ?
- データ無し
これを見ると、正常にデータ取得ができていて継続的に利用できるのはcoincheckのみのようですね。
データ形式
さて、実際に中身を見てみましょう。
1472948762,62163.000000000000,0.251085070000
データはcsv形式で保存されており、各カラムは以下の情報を表しています。
- 1カラム目:時刻 (unixtime)
- 2カラム目:価格 (price)
- 3カラム目:取引量 (amount)
なので、この取引は2016/09/04 09:26:02に0.251085070000 btcを62163 btc/jpyで取引されたということを表しています。
取引値を可視化
さて、最後に取得したデータを可視化してみましょう。今回は、WebAPI形式で取得したデータを可視化してみます。可視化にはPythonのpandas&matplotlibを使用し、データはWebAPI経由での過去5日分のデータを使用しています。
import pandas as pd from datetime import datetime df = pd.read_csv("http://api.bitcoincharts.com/v1/trades.csv?symbol=coincheckJPY", header=None, parse_dates=True, date_parser=lambda x: datetime.fromtimestamp(float(x)), index_col='datetime', names=['datetime', 'price', 'amount']) df["price"].plot()
すると、以下のような取引値の変動を可視化することができます。2016/9/4午前に起きた価格高騰の様子がよく分かりますね……。
なお、上記コードをJupyter notebookで動かしたものをgistでも公開していますので、参考下さい。