【python】ビットコインの価格データを時系列分析する方法

スポンサーリンク

時系列データ分析の概要

今回は時系列データの分析をビットコインの価格データを使って行っていきたいと思います。普通のデータ分析が身長体重のようなことなる2つの変数の関係性を分析するのに対して、時系列データ分析は現在のデータが過去のデータとどう関係があるのかを分析します。

今回のビットコインの価格データを分析する場合ならn日目のビットコインの価格はn-1日・n-2日目のデータとどう関係があるのかを分析するといった感じです。

ビットコインの価格データを入手する

分析においてまず大切なのはデータ集めです。ビットコインの価格データの入手方法については以下の記事で取り上げたのでそちらを参考にしてやります。

これで分析のもとになる価格データは入手できたので本題の時系列データ分析に移ります。

##ビットコインの価格データを取得する
##ライブラリのインストール
import pandas as pd
import time
import matplotlib.pyplot as plt
import datetime
import requests
import json
import numpy as np
import talib
%matplotlib inline

#ビットコインの価格を取得する関数
def get_bitcoinprice():
url=('https://api.coingecko.com/api/v3/coins/')+str('bitcoin')+('/market_chart?vs_currency=jpy&days=max')
r=requests.get(url)
r=json.loads(r.text)
bitcoin=r['prices']
data=[]
date=[]
for i in bitcoin:
data.append(i[1])
date.append(i[0])
bitcoin=pd.DataFrame({"date":date,"price":data})
price=bitcoin['price']
a=price.pct_change()
bitcoin=pd.DataFrame({"date":date,"price":data,"change":a})
return bitcoin

pricedata=get_bitcoinprice()
price = pd.Series(pricedata['price'])
price.head()

↓みたいなデータが返ってくれば成功です。今回はこのpriceという変数に価格データを格納しているので、ここから紹介する関数を自身の作った価格データが入った変数に対して実行する場合はpriceの部分は任意の変数名に変更して実行してください。

0 13203.1967
1 14108.4087
2 13629.7741
3 11364.3607
4 10350.6908
Name: price, dtype: float64

そして、先頭部分だけでなくデータの全体構造も把握しておきましょう。データフレームの構造は.shapeで確認できます。

#データの構造を確認する
price.shape()
変数名.shape()

今回は(2075,)と返ってきました。これは縦1列・横2075列の要素を持つデータ構造であることが分かります。ビットコインの価格データは毎日増えていくので、執筆時点では2075ですが、今実行すると縦1列なのは変わりませんが、横列の要素の数は2075より大きくなっていると思います。

価格データをMatplotlibで視覚化する

まずは取得した価格データの大まかな特徴を把握するために視覚化します。データを視覚化する方法はdf.plot()とplt.plot()の2パターンがありますが、ただ視覚化するだけならどちらでも構いません。

#ビットコインの価格データを可視化する
ax=pd.Series(price).plot()
ax.set_title('Price Changes Of Bitcoin')
plt.show()

こんな感じで視覚化できました。にしてもすごい値動きですね。

差分と変化率を計算する

時系列データ分析において大事なのは当日と前日の価格差です。つまりn日の価格はn-1日と比較してどれだけ変化したかという差分と変化率を考えることが重要になってきます。

Pythonにおける差分の計算は.diff()、変化率の計算はpandasに用意されているpct_change()で簡単に行うことが可能です。

##差分を計算する
price.diff()


※実行結果

0                NaN
1         905.212000
2        -478.634600
3       -2265.413400
4       -1013.669900
5        -747.927400
6        1525.365800
7         342.366400

また後ろに.plot()を付けるとそのまま視覚化もできます。

#差分を計算して結果をプロットする
price.diff().plot()

差分をざっと取っても大きな価格変動が起こっているのが伺えますね。一応変化率も計算して、同じようにプロットしてみます。

#価格データの変化率を計算する
price.pct_change()

※実行結果
0            NaN
1       0.068560
2      -0.033925
3      -0.166211
4      -0.089197
5      -0.072259
6       0.158847
7       0.030766

#変化率を計算して結果をプロットする
price.pct_change().plot()

変化率でみても、日次で最大40%もの変動が起きており、株式市場なんかと比べると半端じゃないボラティリティがあることがグラフで視覚化すると一目瞭然で分かります。そして、通常のデータ分析と時系列分析の少し違う点はまずこの差分と変化率の計算するという点でしょう。

また今回のように変化の幅が大きい場合は対数変化率にして計算することもあります。また株価や為替などの金融データの場合は変化率を収益率と呼ぶこともあります。

基本統計量を計算する

データ分析において大切なのは基本統計量です。普通のデータ分析では平均や分散・標準偏差が基本統計量でしたが、時系列データ分析はデータ分析の概念自体が普通のデータ分析とは若干違うため、調べる基本統計量も少し違ってきます。

python

プログラミングを挫折せず最短で習得する方法


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上にあたってはもはや出来て当たり前のスキルとなりつつあります。こういう話はテレビや雑誌でも最近増えてきたので、知らない人はいないでしょう。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して侍エンジニアのwebサービスコースに申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解できました。


侍エンジニアでは様々なコースが用意されており、PHPなどを使ってWebサイトやWebアプリを作ってみたい人からPythonでデータサイエンティストやAIエンジニアになりたい人にもおすすめです。(ちなみに現在、侍エンジニアに申し込むと25歳以下の学生の方であれば、受講料が20%offなるので超お得です。)







巷でいわれるように侍エンジニアのようなマンツーマンのプログラミングスクールは値段が少し高いのは事実ですが、その分やる気さえあれば間違いなくプログラミングスキルが身に付くので、僕はいいと思います。プログラミングは大勢で授業を受けるよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶより絶対にモノになります。


最近はオンラインで無料でプログラミングが学べるというようなサイトも確かにありますが、自分のお金を払って勉強した方が、払った分の元を取ろうと必死になれるのでプログラミングの学習効率は絶対に上がります。エンジニアの間では、プログラミングは好きなやつが独学で勉強するものだという風潮がありますが、もうそういうのは時代遅れだと思います。僕の意見としてはプログラミングはプログラミングスクールに通って勉強するべきです。


スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする