どうも、月見(@Suzuka14144156)です。
今回は、ビットコインの価格とハッシュレート、アクティブアドレス、トランザクション時間などの関係を分析します。
- ハッシュレートって結局ビットコインの価格に影響しているの?
- 結局ビットコインの価格に影響のある指数って何なの?
ビットコインと影響のありそうな指数(仮説)
この記事では、以下7つの指標がビットコインの価格と関係があるかを分析することとします。
- 以下二つの指標はビットコインの価格と連動することが想定されますよね。
なぜなら、そもそもビットコインの価格で算出される値だからです。
ハッシュレートとビットコインの価格の関係
一般的には、ビットコインの価格とハッシュレートは比例関係があると言われることもあります。
例えば、以下の記事です。
- これって本当なの?
と疑うことが大切です。
そこで本当に比例関係があるか調べてみましょう。
分析結果と結論
先に分析結果と結論を述べます。
分析結果
以下二つは、仮説通り、強い正の相関(0.7以上)があることが分かった。
以下の4つは、弱い正の相関(0.5以上0.7未満)があることが分かった。
以下は、相関なし(0.5未満)であることが分かった。
- ATRCT:トランザクション確認時間
結論
以下4つは、ビットコインの価格を分析する上で注視する必要がパラメートであると判断します。
以下二つは、ビットコインの価格との因果関係が明確であり、ビットコインの価格が上がると上昇するパラメータであると言える。
つまり、トランザクションあたりのビットコインのコストが高くなるからビットコインの価格が高くなるわけではない。
なので、そこまで注視する必要がないパラメータと言えるだろう。
ビットコインの価格とCPTRA(トランザクションあたりのビットコインのコスト)の関係
- 縦軸:Adj Close(ビットコインの価格)
- 横軸:CPTRA(トランザクションあたりのビットコインのコスト)
- ビットコインの価格とCPTRA(トランザクションあたりのビットコインのコスト)には、正の相関があると言える
ビットコインの価格とMIREV(マイナーの収益)の関係
- 縦軸:Adj Close(ビットコインの価格)
- 横軸:MIREV(マイナーの収益)
- ビットコインの価格とMIREV(マイナーの収益)には、正の相関があると言える
- ここまでは想定通り
ビットコインの価格とVolume(取引量)の関係
- 縦軸:Adj Close(ビットコインの価格)
- 横軸:Volume(取引量)
- ビットコインの価格とVolume(取引量)には、弱い正の相関があると言える
ビットコインの価格とDIFF(ブロック探索難易度)の関係
- 縦軸:Adj Close(ビットコインの価格)
- 横軸:DIFF(ブロック探索難易度)
- ビットコインの価格とDIFF(ブロック探索難易度)には、弱い正の相関があると言える
ビットコインの価格とHRATE(ハッシュレート)の関係
- 縦軸:Adj Close(ビットコインの価格)
- 横軸:HRATE(ハッシュレート)
- ビットコインの価格とHRATE(ハッシュレート)には、弱い正の相関があると言える
ビットコインの価格とNADDU(使用済のユニークビットコイン アドレスの数)の関係
- 縦軸:Adj Close(ビットコインの価格)
- 横軸:NADDU(使用済のユニークビットコイン アドレスの数)
- ビットコインの価格とNADDU(使用済のユニークビットコイン アドレスの数)には、弱い正の相関があると言える
ビットコインの価格とATRCT(トランザクション確認時間)の関係
- ビットコインの価格とATRCT(トランザクション確認時間)には、相関がないと言える
相関係数
相関係数の結果は、以下です。
今回の目的変数であるAdj Closeとの相関は、以下赤枠を見ます。
- Adj Closeは、ATRCT(トランザクション確認時間)以外とは、相関があることが分かります。
一応ピアソンの相関係数も見ておきます。
各特性値とピアソンの相関係数は、まとめると以下です。
- 赤字:強い相関
- 緑字:弱い相関
- 青字:相関なし
では、以下にこれらの結果を得るための分析方法の詳細を解説します。
ビットコインの価格とハッシュレート、アクティブアドレス、トランザクション時間などの分析方法
プログラミング言語Pythonで分析します。
分析環境
Anacondaをインストールし、必要なライブラリをインストールします。
Anacondaのインストール方法
Anacondaのインストール方法は、以下の記事を参考にしてみてください。
Python Anacondaとは?|インストール〜Jupyter Notebookの立ち上げ
JupyterLabの起動
コマンドプロンプトから、以下のコードを入力ください。
jupyter lab
以下赤枠のアイコンをクリック。
これで起動します。
ライブラリのインストール
- pandas:データ処理
- pandas-profiling:EDA(探索的データ分析)
- pandas_data:仮想通貨のデータ取得
- yfinance:Yahoo Financeからデータを取得
pandas-profilingのインストール
コマンドプロンプトから、以下のコードを入力ください。
pip install pandas-profiling
pandas_dataのインストール
コマンドプロンプトから、以下のコードを入力ください。
pip install pandas_datareader
yfinanceのインストール
コマンドプロンプトから、以下のコードを入力ください。
pip install yfinance
データ
以下のサイトからダウンロード。
- 使用データの期間:2018年1月1日~2022年11月16日
約5年分のデータを用います。
ビットコインのチャート形状は、以下です。
githubからのクローン
必要なデータなどは、githubから取得ください。
私の方でアップしておきました。
git clone https://github.com/tsukimitech-blog/btc_anarysis_notebook
ディレクトリ構造
- anarysisnote_btc.ipynb:メインのコード
- BCHAIN-ATRCT.csvBCHAIN-CPTRA.csv:データ
- BCHAIN-DIFF.csv:データ
- BCHAIN-HRATE.csv:データ
- BCHAIN-MIREV.csv:データ
- BCHAIN-NADDU.csv:データ
コード
csvデータの読み込み
データの読み込み
import pandas as pd
import glob
#データフレームの作成
btc_data = pd.DataFrame()
#CSVの読み込み
for i in glob.glob('*.csv'):
tmp = pd.read_csv(i, index_col=0)
#カラム名をファイル名にして余計な文字は消去
tmp.columns = [i.replace('.csv', '').replace('BCHAIN-', '')]
#連結
btc_data = pd.concat([btc_data, tmp],axis = 1)
btc_data
実行結果は、以下です。
後ほどデータの欠損処理をするタイミングで消去するのでいったん保留。
ビットコインの価格を取得
import pandas as pd
from pandas_datareader import data as pdr
import datetime
import yfinance as yf
#BTCのチャートを取得
tickers = ['BTC-USD']
#取得開始日を入力
start = "2018-01-01"
#取得終了日を入力
end = datetime.date.today()
#Yahoofinanceから取得するように設定
yf.pdr_override()
#データの取得を実行
crypto_data = pdr.get_data_yahoo(tickers, start, end)
crypto_data
実行結果は以下です。
連結し、欠損値を処理する
btc_data.index = pd.to_datetime(btc_data.index)
crypto_data_con = pd.concat([crypto_data,btc_data],axis=1)
crypto_data_con = crypto_data_con.dropna()
crypto_data_con
Open、High、Low、Closeを消す
以下のデータは不要なので、消去します。
- Open:始値
- High:高値
- Low:安値
- Close:終値
crypto_data_con = crypto_data_con.drop(columns=['Open','High', 'Low', 'Close'])
crypto_data_con
- 今回は、「Adj Close」のデータを目的変数とします
EDA(探索的データ分析)
EDAの詳細は、以下の記事を参考にしてみてください。
【Python】探索的データ解析(EDA)の基礎について初心者向けに解説
EDAの時短テクニックとして、pandas_profilingというライブラリがあります。
これを使うことで、だれでも簡単に必要なEDAをわずか1行のコードで実行可能です。
pandas_profilingの詳細は、以下を参考にしてみてください。
pandas_profilingのインストールから使い方までを解説
import pandas_profiling as pdp
report = pdp.ProfileReport(crypto_data_con)
report
するとこういったレポートが出力されます。
今後の展開
対数収益率を用いた分析
今後は、ビットコインの価格を目的変数に取るのではなく、対数収益率など前日からの差を目的変数として分析する必要があるかも。
ハッシュレートなどの値も前日との差を説明変数にすることで、より明確に説明できる可能性があるかもなので、調査する必要があると言えるでしょう。
より長期間データを用いる
今回は、データが揃っている2018年~のデータを用いました。
2018年より前のデータを用いることができるデータがあれば、それを用いて分析する必要があると思います。
例えば、以下は、Adj Close(ビットコインの価格)とハッシュレートとボリューム(外れ値を除去)したもののペアプロットです。
このペアプロットの表示方法は以下の記事を参考にしてみてください。
【Python】二銘柄間の年毎に色を変えた散布図(ペアプロット)の表示方法(株、仮想通貨)
相関係数は、以下です。
2015年~2022年のデータを用いた場合の相関係数
- Volume:0.74
- HRATE:0.75
より強い相関があることが分かります。
なので、短期的(2018~2022)でビットコインの価格とHRATE(ハッシュレート)やVolumeは、相関関係が崩れだしたということが分かります。
Pythonでファイナンスのデータ分析の勉強方法
本
私は、以下の本で勉強しました。
かなり詳しく書かれており、とてもオススメの本です。
Udemy
Udemyはオンライン口座です。
一度購入すれば、ずっと閲覧できるのでオススメです。
私の記事
私のブログでも解説していますので参考にしてみてください。
【Python x 仮想通貨】分析方法のまとめ(テクニカル分析など)
まとめ
今回は、ビットコインの価格とハッシュレート、アクティブアドレス、トランザクション時間などの関係を分析しました。
以下二つは、仮説通り、強い正の相関があることが分かった。
以下の4つは、弱い正の相関があることが分かった。
以下は、相関なしであることが分かった。
- ATRCT:トランザクション確認時間
私のブログではほかにも、仮想通貨の自動トレードの方法などを解説しているのでぜひ参考にしてみてください。
無料で閲覧可能で、コードをコピペして動かすことができます。
【Python|cctx】ビットコイン自動取引ツールの作成方法まとめ
コメント