# ライブラリのインストール import requests import pandas as pd import json # ビットコイン&アルトコインの価格を取得する url = 'https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=jpy&days=max' r = requests.get(url) r2= json.loads(r.text) btc = r2['prices'] url2 = 'https://api.coingecko.com/api/v3/coins/ripple/market_chart?vs_currency=jpy&days=max' r3 = requests.get(url2) r4 = json.loads(r3.text) ripple = r4['prices'] url3=('https://api.coingecko.com/api/v3/coins/')+str('ethereum')+('/market_chart?vs_currency=jpy&days=max') r5=requests.get(url3) r6=json.loads(r5.text) eth=r6['prices'] url4=('https://api.coingecko.com/api/v3/coins/')+str('bitcoin-cash')+('/market_chart?vs_currency=jpy&days=max') r7=requests.get(url4) r8=json.loads(r7.text) bch=r8['prices']
今回価格の取得に使ったのはCoingeckoという仮想通貨価格サイトです。APIの使い方については以下の記事で解説しています。
これで、BTC・BCH・ETH・XRPにそれぞれに変数に対応する通貨の日次データが格納されているはずです。一応中身を確認すると以下のようになっているかと思います。
ただこのままだとデータの始め日がコインごとに違うので、揃える必要があります。基本的にビットコインが一番長いので、アルトコイン側の開始日に合わせるようにデータを整理します。
とりあえずリップルの例で行くと、まず2次元配列になっているリストから日付と価格を一次元の変数に再格納します。
##リップルの日付と価格を分離抽出 ripple_date=[] ripple_price=[] for i in ripple: ripple_date.append(i[0]) ripple_price.append(i[1]) len(ripple_date)
これでripple_dateとripple‗priceに日付と価格のデータが格納されます。
##bitcoinの価格データからrippleの稼働日と同じ日のデータを抽出する bitcoin_dataforxrp=[] bitcoin_price=[] bitcoin_date=[] #ビットコインの価格から比較対象となるXRPのデータがある日のデータを抽出する for i in btc: if i[0] in ripple_date: bitcoin_dateforxrp.append(i) #その中から(ビットコインの)価格データだけを抽出 for i in bitcoin_dateforxrp: bitcoin_price.append(i[1]) bitcoin_date.append(i[0]) len(bitcoin_date)
最後のlenでのデータの長さが一致していればXRPに対応するBTCのデータが抽出できたということになります。しかし誤差がでているので今度がこのビットコイン価格データに対応しているXRPの価格データを抽出します。
#ビットコインの価格データを参照して #それに対応するXRPの価格データだけ抽出する ripple_dateforbtc=[] ripple_price=[] for i in ripple: if i[0] in bitcoin_date: ripple_dateforbtc.append(i) for i in ripple_dateforbtc: ripple_price.append(i[1]) len(ripple_price)
これで両者のlen()の長さが合致したので、pandasの関数が使えるデータフレームにまとめます。ここで使うのは変化率で価格は要らないのでpct.change()で変化率に計算しなおしたものをデータフレームに格納します。
##データフレームの作成 df = pd.DataFrame({ 'btc' : bitcoin_price, 'ripple':ripple_price, }) df #CSVを出力する df.to_csv("btcxrp.csv")
##変化率を計算する btc_change=df['btc'].pct_change() ripple_change=df['ripple'].pct_change()
#データフレームを作成する df = pd.DataFrame({ 'btc' : btc_change, 'ripple':ripple_change, }) df
#データフレームの中身をCSVに出力する df.to_csv("bitcxrpchange.csv")
これで分析に使うデータは揃ったので実際に分析していきます。
#ライブラリの読み込み import numpy as np import seaborn as sns %matplotlib inline #CSVの読み込み a = pd.read_csv("bitcxrpchange.csv",index_col=0) #欠損地の削除 b=a.dropna()
#データフレームをずらす btcprice=b['btc'][0:1915] xrpprice=b['ripple'][1:1916] #numpy配列に変換 btcprice=btcprice.values xrpprice = xrpprice.values #データフレームを結合 df2 = pd.DataFrame({ 'btc' : btcprice, 'ripple':xrpprice, }) df2 #回帰分析の結果をプロットする sns.pairplot(df2)
[0:1915] [1:1916]の部分は要はビットコインのn日目のデータとリップルのn+1日が比較対象になるようにデータをずらしているだけです。
そして回帰分析した結果は以下のようになりました。
うーんあんまり相関関係はなさそう・・・。
コメント
[…] ミナピピンの研究室ビットコインと主要なアルトコインの価格に相関関係があるのかを検証するhttps://tkstock.site/2018/11/16/post-1207/ # ライブラリのインストールimport requestsimport pandas […]