こんにちは!スタビジ編集部です!
この記事ではデータサイエンスの実践として”仮想通貨“を使った分析を解説していきます!
せっかくだし勉強してみよう!
今回は実際に手を動かしつつ「仮想通貨データの取得」~「仮想通貨のデータの分析」までの一連の流れをマスターしましょう!
目次
仮想通貨データの取得
まずは仮想通貨のデータを取得していきましょう!
データの取得にはAPIを利用します!
APIとはアプリケーションプログラミングインターフェースの略であり、ソフトウェアを通して機能などをつなげることのできる仕組みです!
APIについて詳しく知りたい方は以下の記事をチェックしてみてください!
仮想通貨を扱う仮想通貨取引所の多くでは2種類のAPIを用意しています
- “Public API“:認証が不要、取引所の注文状況や公開されている取引の履歴、板情報を参照出来ます
- “Private API“:APIキーによる認証が必要、取引所での新規注文やそのキャンセル、自分の残高などを確認出来ます
今回は仮想通貨取引所「Coincheck」で用意されているAPIを利用して、ビットコインの最新情報を取得します!
Public APIを利用するので、Coincheckへの会員登録などは不要です
import requests
from pprint import pprint
endpoint = 'https://coincheck.com'
path = '/api/ticker'
url =endpoint + path
pair = {
'pair': 'btc_jpy'
}
r = requests.get(url, params = pair)
pprint(r.json())
CoincheckではベースのURL「https://coincheck.com」に各APIのURL「/api/~」を組み合わせたものにアクセスすることで各種APIを利用できます!
最新情報を取得する場合「ティッカー」というAPIを利用するので、リクエスト先は「https://coincheck.com」+「/api/ticker」となります
また、パラメーターで取得したいコインの種類を指定することも出来ます
{'ask': 5458579.0,
'bid': 5457080.0,
'high': 5482155.0,
'last': 5457510.0,
'low': 5391070.0,
'timestamp': 1648365754,
'volume': 936.2452743}
実行結果を見てみると、データが収集出来ているのがわかりますね!
- ask:現在の売り注文の最安価格
- bid:現在の買い注文の最高価格
- high:24時間での最高取引価格
- last:最後の取引の価格
- low:24時間での最安取引価格
- volume:24時間での取引量
- timestamp:現在の時刻
Private APIを使うと実際に注文したりビットコインを送信したりできるので是非公式ページを見てみてください!
また、取引所のAPIによって取得できる通貨の種類や情報が異なるので、ぜひ試してみてください!
仮想通貨データをPythonで分析!
次は実際に取得した仮想通貨データの値を用いて「買う」or「売る」を判別するアルゴリズムを実装していきたいと思います!
今回は自動仮想通貨Botでよく用いられる”ボリンジャーバンド“という指標を使っていきます!
“ボリンジャーバンド“とは、一定期間の価格データの平均(移動平均線)を中心として、値動きの振れ幅を標準偏差として表示するテクニカル指標の一つです
$$ ±nσ=移動平均(ma_i)±標準偏差(s)×n$$
ボリンジャーバンドを可視化するとこんな感じです
plt.figure(figsize=(15,5))
plt.plot(df.index, df["Close"], label="Close", color='black', linestyle='solid', linewidth = 5.0)
plt.plot(df.index, df["sma"], label="sma")
plt.plot(df.index, df["-1σ"], label="-1σ", color='red')
plt.plot(df.index, df["+1σ"], label="+1σ", color='red')
plt.plot(df.index, df["-2σ"], label="-2σ", color='green')
plt.plot(df.index, df["+2σ"], label="+2σ", color='green')
plt.plot(df.index, df["-3σ"], label="-3σ", color='purple')
plt.plot(df.index, df["+3σ"], label="+3σ", color='purple')
plt.legend()
仮想通貨のデータだとデータ量が少ないので、説明のため「株データ」を用いています
統計学的に相場が正規分布に従う場合、価格は以下の確率でボリンジャーバンド内に収まることになります
- n=1の時、ボリンジャーバンド内に収まる確率⇒約68.3%
- n=2の時、ボリンジャーバンド内に収まる確率⇒約95.4%
- n=3の時、ボリンジャーバンド内に収まる確率⇒約99.7%
上の図では赤線の範囲内が±1σ、緑線の範囲内が±2σ、紫線の範囲内が±3σとなります
こう見ると±2σはだいぶ幅が広く、超えることはなかなかなさそうなのが直感で分かりますね
ボリンジャーバンドの見方は様々ありますが、今回は単純に取得した値が±1σをはみ出したら売買のタイミングとします!
では「仮想通貨の情報を取得して売買の判定」をする実装を見ていきましょう
import time
import pandas as pd
#1分間に一回情報を取得する
interval = 60
#移動平均期間
duration = 5
df = pd.DataFrame()
while True:
time.sleep(interval)
df = df.append(
{'price': r.json()['last']}, ignore_index=True
)
if len(df) < duration:
continue
df['SMA'] = df['price'].rolling(window=duration).mean()
df['std'] = df['price'].rolling(window=duration).std()
df['-1σ'] = df['SMA'] - df['std']*1
df['+1σ'] = df['SMA'] + df['std']*1
print(df)
# 取引価格が-1σを下回ったら買いを入れる
if df['price'].iloc[-1] < df['-1σ'].iloc[-1]:
print('購入する!')
# 取引価格が+1σを超えたら売りを入れる
if df['+1σ'].iloc[-1] < df['price'].iloc[-1]:
print('売却する!')
rは先ほどの取得した最新情報(r = requests.get(url, params = pair))です
- 取得した最新の情報から取引情報(last)を取り出してデータフレームに”price”として格納します
- データが集まったら、移動平均と標準偏差を算出し、ボリンジャーバンドの計算を行います
- 取引価格がボリンジャーバンド内に収まるか否かを判定します!
やっていることは「データを取得」⇒「計算」⇒「判定」とめちゃくちゃ複雑ではないな~と実感できたかと思います!
実際の自動売買Botでは売買の部分にPrivate APIを用いて仮想通貨の売り買いを実現しています!
売買のロジックを考えるのは大変だけど、ぜひいろんな手法を試してみよう!
ちなみに今回は取引所のAPIを利用しましたが、集計して色んな軸で分析するだけなら、Dune Analyticsなどの分析ツールを利用してSQLで取得するのも一つの手です。
以下の記事で詳しく解説しているので是非チェックしてみてください!
Python×仮想通貨を勉強する方法
最後にPythonを使って仮想通貨を分析できるようになる勉強法について見ていきましょう。
勉強にはUdemyというプラットフォームがオススメです!
Udemyの講座についていくつか取り上げていきましょう。
【初学者向け】データ分析コンペで楽しみながら学べるPython×データ分析講座
【オススメ度】 | |
---|---|
【講師】 | ウマたん |
【時間】 | 4時間 |
【レベル】 | 初級~中級 |
手前味噌ですが、データ分析用のコースを私自身が展開しているので是非見てみてください!
分析についてはこのコースを一通り学べば身につけられるようになっています。
現役シリコンバレーエンジニアが教えるPythonで始めるスクラッチからのブロックチェーン開発入門
【オススメ度】 | |
---|---|
【講師】 | シリコンバレーのSplunkで働く現役エンジニア |
【時間】 | 4.5時間 |
【レベル】 | 中級~上級 |
仮想通貨の基盤技術であるブロックチェーン×Pythonのコースです。
ブロックチェーンのシステムをPythonを使ってスクラッチで開発していきます。
最前線で働く現役エンジニア酒井さんだからこその内容です。
酒井さんの説明は非常に分かりやすく、本当にオススメです!
ブロックチェーンに少しでも興味のある方はぜひ受講してみましょうー!
Pythonで仮想通貨データの分析まとめ
今回は仮想通貨取引所のAPIを利用して、Pythonで「仮想通貨データの取得」から「仮想通貨データの分析」まで学んでいきました!
今回はBotの作成まではいきませんでしたが、手を動かしながら仮想通貨を売買する仕組みに触れられたので、自動売買Botへの難しそうというハードルは下がったかなと思います!
ぜひ、いろんな統計手法を試しながら、自分だけの売買アルゴリズムを作っていきましょう!
もっと踏み込んでデータ分析の方法について詳しく学びたい方は当メディアが運営するAIデータサイエンス特化スクールの「スタアカ(スタビジアカデミー)」をチェックしてみてください!
公式サイト:https://toukei-lab.com/achademy/
【価格】 | ライトプラン:1280円/月 プレミアムプラン:149,800円 |
---|---|
【オススメ度】 | |
【サポート体制】 | |
【受講形式】 | オンライン形式 |
【Pythonの学習範囲】 | データサイエンスを網羅的に学ぶ 実践的なビジネスフレームワークを学ぶ 実際に実データを使った様々なワークを行う |
データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!
当メディアが運営するスクールです。
24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!
カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!
他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。
そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解などもあわせて学べるボリューム満点のコースになっています!
ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったりする盛りだくさんの内容になってます!
・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
Pythonを幅広く学びたい方は以下の記事を参考にしてみてください!