はじめまして。nisshiy(にっしー)です。
突然ですが、私は仮想通貨については素人です。詳しいことはよくわかっておりません。
一方、職業柄、Pythonを使ったデータ分析については、以前から学習を進めています。
ということで、Pythonを使ったデータ分析を通して、仮想通貨について勉強していきたいと思います。
今回やりたいことは以下の通りです。
1.仮想通貨の過去データ取得
2.取得したデータよりチャートの描画
本当は、取得したデータから、時系列予測やディープラーニングとかで将来予測までしたいところですが、まあ、初っ端としてはこれくらいからはじめたいと思います。
まず、私の環境は以下の通りです。
・OS:Windows 10 pro
・プログラミング言語:Python 3.6.3
・実行環境:Jupyter lab
ちなみに、PythonはAnacondaでインストールしています。
それでは、実装していきます。
今回はCryptowatchというサービスのAPIを使用していきたいと思います。
ちなみに、このCryptowatch、とても便利そうですね。チャート分析をするだけならこれだけでいけるんじゃないか、というレベルですね。
まず、コードを示します。
import requests
import json
import datetime as dt
import pandas as pd
import numpy as np
#データ取得期間を指定
startDate = dt.datetime.strptime('2018-4-1 0:00:00', '%Y-%m-%d %H:%M:%S')
endDate = dt.datetime.strptime('2018-4-30 23:59:59', '%Y-%m-%d %H:%M:%S')
startTimestamp = startDate.timestamp()
endTimestamp = endDate.timestamp()
#Cryptowatch APIを使用してbitflyerのbitcoinのデータ取得
query = {"periods": "3600", "after": str(int(startTimestamp)), "before": str(int(endTimestamp))}
res = json.loads(requests.get("https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc", params=query).text)["result"]["3600"]
res = np.array(res)
#時間と各時間における終値のみを抽出
time_stamp = res[:, 0].reshape(len(res), )
time_stamp = np.vectorize(lambda x:dt.datetime.fromtimestamp(x))(time_stamp)
close_price = res[:, 4].reshape(len(res), )
#pandasのデータフレーム化
data = pd.DataFrame({'date':time_stamp,'close_price':close_price})
data = data[['date','close_price']]
このコードで、2018/4/1 0:00:00 ~ 2018/4/30 23:59:59までのbitcoinの終値を1時間ごとに抽出できます。
実行結果
あとは、これをグラフ化するだけです。
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
fig,ax = plt.subplots(figsize=(12,4))
ax.plot(data['date'],data['close_price'])
ax.set_xlabel('日付')
ax.set_ylabel('日本円')
実行結果
1ヶ月間で40万も変動があるんですね。
寡聞にして、これが通常なのか異常なのか、判断がつきませんが。
それは、おいおい勉強していきたいと思います。
今回はAPIを使用してbitcoinのデータを取得することができました。
今後は、取得したデータを使って、時系列予測やディープラーニングによる将来価格予測とかができたらいいな、と考えております。
(参考)
Prophetを用いた時系列解析によるビットコイン価格予測 - Qiita











