ビットコイン(Bitcoin)をはじめとした暗号通貨の分析 [データの取得編01]
今回からはいよいよ分析に入りたいと思います。
ただ、よくあるirisなどの分析からはじめても、ありきたりすぎるので、
みんな大好きビットコイン(Bitcoin)の分析をして興味を持ってもらおうと思います。
今回のゴールはデータの取得までですが、アウトプットイメージは以下のような感じです。
前提として、
・以下pythonコードで書いていきます。pythonの基本的な使い方やAnaconda, Jupyter Notebook, PyCharmの使い方などは他のサイトをご参照ください。
(↑一応リンクは貼っています。)
・万が一コードの意味がわからなくても、コピー&ペーストで進めましょう。「できた!」感をまずは優先して、不明点については個別調査。
・使用するデータは海外の取引所のデータ(ドルベース)を使用します。(海外の方が取り扱うコインが多く、今後の展開を考えて)
■ビットコインデータの取得
1ビットコインの価格が11月に入ってから80万円を超え、ますますビットコインの注目が高まっています。
まずはビットコインの時系列データを引っ張ってくることにします。
最初にデータを引っ張ってくるための準備をします。
今回、ビットコインのデータは、様々な金融データがあるQuandlから持ってきます。
また、グラフ描写のために、Plotlyを使います。
そしていよいよ、Quandlからビットコインのデータを引っ張ってきます。
表データの確認が終わったら、今度はグラフにプロットしてみましょう。
グラフの中に一部、データが欠落している箇所が見られます。
他の取引所のデータはどうでしょうか。COINBASE, BITSTAMP, ITBITという取引所のデータもあわせて見てみます。
他の取引所から得たデータを1つのデータフレームに統合します。
ここまでくると、以下のような結果が得られます。
各取引所のデータの平均をとって整理します。
以上までで、分析する対象としてのビットコインデータの取得はおわりです。
しかしながら、ビットコイン以外にも面白い値動きをしている暗号通貨(アルトコイン)はたくさんあります。
次はビットコインの他に、暗号通貨取引所のCoincheckで取引されている以下の暗号通貨の時系列データを引っ張って来たいと思います。
・イーサリウム (ETH)
・イーサリウムクラシック (ETC)
・リップル (XRP)
・ネム (XEM)
・ライトコイン (LTC)
・ダッシュ (DASH)
・モネロ (XMR)
(実際に自分も暗号通貨を買っていますが、身銭を切ると学習の密度が高くなっている感覚がします。)
ただ、少し文章が長くなってしまったので、アルトコインのデータ取得は次のページに移行します。
次のページ
ただ、よくあるirisなどの分析からはじめても、ありきたりすぎるので、
みんな大好きビットコイン(Bitcoin)の分析をして興味を持ってもらおうと思います。
今回のゴールはデータの取得までですが、アウトプットイメージは以下のような感じです。
前提として、
・以下pythonコードで書いていきます。pythonの基本的な使い方やAnaconda, Jupyter Notebook, PyCharmの使い方などは他のサイトをご参照ください。
(↑一応リンクは貼っています。)
・万が一コードの意味がわからなくても、コピー&ペーストで進めましょう。「できた!」感をまずは優先して、不明点については個別調査。
・使用するデータは海外の取引所のデータ(ドルベース)を使用します。(海外の方が取り扱うコインが多く、今後の展開を考えて)
■ビットコインデータの取得
1ビットコインの価格が11月に入ってから80万円を超え、ますますビットコインの注目が高まっています。
まずはビットコインの時系列データを引っ張ってくることにします。
最初にデータを引っ張ってくるための準備をします。
今回、ビットコインのデータは、様々な金融データがあるQuandlから持ってきます。
import os
import numpy as np
import pandas as pd
import pickle
import quandl
from datetime import datetime
また、グラフ描写のために、Plotlyを使います。
import plotly.offline as py
import plotly.graph_objs as go
import plotly.figure_factory as ff
py.init_notebook_mode(connected=True)
そしていよいよ、Quandlからビットコインのデータを引っ張ってきます。
def get_quandl_data(quandl_id):
'''Download and cache Quandl dataseries'''
cache_path = '{}.pkl'.format(quandl_id).replace('/','-')
try:
f = open(cache_path, 'rb')
df = pickle.load(f)
print('Loaded {} from cache'.format(quandl_id))
except (OSError, IOError) as e:
print('Downloading {} from Quandl'.format(quandl_id))
df = quandl.get(quandl_id, returns="pandas")
df.to_pickle(cache_path)
print('Cached {} at {}'.format(quandl_id, cache_path))
return df
次に、KRAKENという取引所のビットコインのデータを持ってきて、表データを表示してみましょう。btc_usd_price_kraken = get_quandl_data('BCHARTS/KRAKENUSD')
btc_usd_price_kraken.head()
表データの確認が終わったら、今度はグラフにプロットしてみましょう。
btc_trace = go.Scatter(x=btc_usd_price_kraken.index, y=btc_usd_price_kraken['Weighted Price'])
py.iplot([btc_trace])
グラフの中に一部、データが欠落している箇所が見られます。
他の取引所のデータはどうでしょうか。COINBASE, BITSTAMP, ITBITという取引所のデータもあわせて見てみます。
exchanges = ['COINBASE','BITSTAMP','ITBIT']
exchange_data = {}
exchange_data['KRAKEN'] = btc_usd_price_kraken
for exchange in exchanges:
exchange_code = 'BCHARTS/{}USD'.format(exchange)
btc_exchange_df = get_quandl_data(exchange_code)
exchange_data[exchange] = btc_exchange_df
def merge_dfs_on_column(dataframes, labels, col):
'''Merge a single column of each dataframe into a new combined dataframe'''
series_dict = {}
for index in range(len(dataframes)):
series_dict[labels[index]] = dataframes[index][col]
return pd.DataFrame(series_dict)
他の取引所から得たデータを1つのデータフレームに統合します。
btc_usd_datasets = merge_dfs_on_column(list(exchange_data.values()), list(exchange_data.keys()), 'Weighted Price')
def df_scatter(df, title, seperate_y_axis=False, y_axis_label='', scale='linear', initial_hide=False):
'''Generate a scatter plot of the entire dataframe'''
label_arr = list(df)
series_arr = list(map(lambda col: df[col], label_arr))
layout = go.Layout(
title=title,
legend=dict(orientation="h"),
xaxis=dict(type='date'),
yaxis=dict(
title=y_axis_label,
showticklabels= not seperate_y_axis,
type=scale
)
)
y_axis_config = dict(
overlaying='y',
showticklabels=False,
type=scale )
visibility = 'visible'
if initial_hide:
visibility = 'legendonly'
# Form Trace For Each Series
trace_arr = []
for index, series in enumerate(series_arr):
trace = go.Scatter(
x=series.index,
y=series,
name=label_arr[index],
visible=visibility
)
# Add seperate axis for the series
if seperate_y_axis:
trace['yaxis'] = 'y{}'.format(index + 1)
layout['yaxis{}'.format(index + 1)] = y_axis_config
trace_arr.append(trace)
fig = go.Figure(data=trace_arr, layout=layout)
py.iplot(fig)
btc_usd_datasets.replace(0, np.nan, inplace=True)
df_scatter(btc_usd_datasets, 'Bitcoin Price (USD) By Exchange')
ここまでくると、以下のような結果が得られます。
各取引所のデータの平均をとって整理します。
btc_usd_datasets['avg_btc_price_usd'] = btc_usd_datasets.mean(axis=1)
btc_trace = go.Scatter(x=btc_usd_datasets.index, y=btc_usd_datasets['avg_btc_price_usd'])
py.iplot([btc_trace])
以上までで、分析する対象としてのビットコインデータの取得はおわりです。
しかしながら、ビットコイン以外にも面白い値動きをしている暗号通貨(アルトコイン)はたくさんあります。
次はビットコインの他に、暗号通貨取引所のCoincheckで取引されている以下の暗号通貨の時系列データを引っ張って来たいと思います。
・イーサリウム (ETH)
・イーサリウムクラシック (ETC)
・リップル (XRP)
・ネム (XEM)
・ライトコイン (LTC)
・ダッシュ (DASH)
・モネロ (XMR)
(実際に自分も暗号通貨を買っていますが、身銭を切ると学習の密度が高くなっている感覚がします。)
ただ、少し文章が長くなってしまったので、アルトコインのデータ取得は次のページに移行します。
次のページ