FX・シストレ Python

ビットコインと主要なアルトコインの価格に相関関係があるのかを検証する

この記事は約7分で読めます。

 

 

# ライブラリのインストール
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日が比較対象になるようにデータをずらしているだけです。

 

そして回帰分析した結果は以下のようになりました。

 

 

 

うーんあんまり相関関係はなさそう・・・。

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. […] ミナピピンの研究室ビットコインと主要なアルトコインの価格に相関関係があるのかを検証するhttps://tkstock.site/2018/11/16/post-1207/  # ライブラリのインストールimport requestsimport pandas […]

タイトルとURLをコピーしました