Python3でビットコインの回帰線を描いてみる

現在のビットコインの値段の推移はどうなっているのか調べてみました。

%matplotlib inline
import datetime as dt
import pandas_datareader.data as pdr
import pandas as pd
import matplotlib.pyplot as plt
btc = pd.read_csv("https://api.blockchain.info/charts/market-price?format=csv×pan=2years", names=['Date', 'Value'])
tmd = pd.to_datetime(btc['Date'])
btc.index = tmd
btc.plot(color='darkblue')
plt.ylabel('BITCOIN')

ついでにビットコインの対数の回帰線も調べてみます。

import statsmodels.api as sm
import numpy as np

lnnbtc=np.log(btc['Value'].dropna()) 
y=lnnbtc
x=range(len(lnnbtc)) #lnnbtcと同じ長さに設定
x=sm.add_constant(x) #線形回帰の切片のために列(要素)を作成
model=sm.OLS(y,x)    #線形回帰分析を設定modelとして保存
results=model.fit()
print(results.summary())

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                  Value   R-squared:                       0.914
Model:                            OLS   Adj. R-squared:                  0.914
Method:                 Least Squares   F-statistic:                     7707.
Date:                Sat, 11 Feb 2017   Prob (F-statistic):               0.00
Time:                        20:26:09   Log-Likelihood:                 438.28
No. Observations:                 730   AIC:                            -872.6
Df Residuals:                     728   BIC:                            -863.4
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
const          5.2796      0.010    537.106      0.000         5.260     5.299
x1             0.0020   2.33e-05     87.790      0.000         0.002     0.002
==============================================================================
Omnibus:                        2.417   Durbin-Watson:                   0.045
Prob(Omnibus):                  0.299   Jarque-Bera (JB):                2.273
Skew:                           0.131   Prob(JB):                        0.321
Kurtosis:                       3.076   Cond. No.                         841.
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

R-squared(決定係数):0.914となっているのでイイ感じなんじゃないでしょうか。

plt.plot(y,label='Value',color="darkgray")
results.fittedvalues.plot(label='prediction',style='--')
plt.ylabel('log(BTC)')
plt.legend(loc='upper left')

「生産」と「在庫」の関係から景況感を判断

日経新聞の経済指標から景況感を判断する方法のメモ
鉱工業指数の「生産」と「在庫」の関係から景況感を判断する方法があるようです。

■鉱工業指数
鉱業と工業の生産高や出荷数量、在庫の状況を表す数字。
鉱業:金、銀、銅、鉄といった金属や、ガラス、セメントの原料、原油、天然ガスなどのエネルギーを採掘する企業
工業:機械や電子部品、繊維、薬品、食品など、様々なモノを生産している企業

「在庫」が増えるときは「良い在庫の増え方」と「悪い在庫の増え方」がある。
良い在庫→景気が良さそうだからといって生産を増やすこと。
悪い在庫→景気が悪くなってモノが売れなくなり在庫が増えてしまうこと。

■生産指数
 鉱工業製品の生産量を基準年の2010年を100として指数化した数字

■製品在庫率指数
 鉱工業製品の在庫量を基準年の2010年を100として指数化した数字

■稼働率指数 製造工業
 設備の稼働率を基準年の2010年を100として指数化した数字
稼働率指数は景気が底入れして回復に向かい、企業の生産活動が活発になる局面で上昇しはじめるみたいです

それぞれのグラフ

「生産指数」と「稼働率指数」は大体同じような動きになっていますね。
参考にしている本の著者の小宮先生は『「稼働率指数」のほうが実際の生産状況がどうなっているかがつかみやすい感じがしている』とのことです。先生がそう言うのなら「稼働率指数」をみるべきでしょうね。

%pylab
import matplotlib.pyplot as plt 
import pandas as pd
from datetime import datetime
import numpy as np
#生産指数
df1 = pd.read_csv("https://vdata-stats-data.s3.amazonaws.com/csv/NA31M.csv",skiprows=1, names=['Month', 'Seisan' ,'Sokuho'])
#製品在庫率指数
df2 = pd.read_csv("https://vdata-stats-data.s3.amazonaws.com/csv/NA38M.csv",skiprows=1, names=['Month', 'Zaiko' ,'Sokuho'])
#稼働率指数 製造工業
df3 = pd.read_csv("https://vdata-stats-data.s3.amazonaws.com/csv/NB01M.csv",skiprows=1, names=['Month', 'Kadou' ,'Sokuho'])
Data = pd.merge(df1,df2,on='Month')
Data = pd.merge(Data,df3,on='Month')
dates = pd.DatetimeIndex(Data.Month)
Data.index = dates

from matplotlib.font_manager import FontProperties
fp = FontProperties(fname='C:\Windows\Fonts\HGRGM.TTC')
fig = plt.figure(figsize=(12,10))
ax1 = fig.add_subplot(3,1,1)
plt.ylabel(u'生産指数',fontproperties=fp)
ax2 = fig.add_subplot(3,1,2)
plt.ylabel(u'製品在庫率指数',fontproperties=fp)
ax3 = fig.add_subplot(3,1,3)
plt.ylabel(u'稼働率指数 製造工業',fontproperties=fp)
y1 = Data['Seisan']
y2 = Data['Zaiko']
y3 = Data['Kadou']

ax1.plot(y1,label=u'生産指数',color="darkgray")
ax2.plot(y2,label=u'製品在庫率指数',color="darkgray")
ax3.plot(y3,label=u'稼働率指数 製造工業',color="darkgray")
ax1.grid()
ax2.grid()
ax3.grid()
ax1.axhline(y=100, color='blue')
ax2.axhline(y=100, color='blue')
ax3.axhline(y=100, color='blue')
ax1.legend(prop=fp,loc='upper left')
ax2.legend(prop=fp,loc='upper left')
ax3.legend(prop=fp,loc='upper left')

GDPを支える要素のメモとグラフ

GDPを支える要素は大きく3つに分けられるようです。

GDP=民需+貿易収支+政府支出

日経新聞の経済指標でそれぞれがどんなものなのかメモ。

■民需
法人企業統計
 資本金1000万円以上の企業で、金融機関や保険会社の数字は除かれる。
 設備投資・・・企業が機会や工場などの有形固定資産へ投資した金額
 企業の設備投資はGDPの15%程度を占める。

機械受注
 企業が設備投資のための機械を発注する段階をとらえるので、実際の設備投資の先行きを占う指標(先行指標)とされている。
 数字は産業用の機械メーカー280社の受注額を集計したもの。
 造船会社や電力会社からの受注は規模が大きく振れが激しいので数字から除外される。

消費者支出2人以上世帯
 家計の支出の動向を表している
 前年比の増減率(%)がならんでいて、マイナスになっていると家計の支出がどんどん経ているということになる。

■貿易収支(外需)
貿易・通関
 財務省が通関時の価格をベースに算出している輸出入の総額。
 速報は翌月20日前後、確報は翌月近くに発表される。

■政府支出
公共工事請負金額
 国や地方自治体などの公共機関が発注する公共工事の前払い金の保証契約をした金額が対象となっている。政府の建設投資額の75%をカバーしているといわれている。

これらのグラフにしやすいものをグラフにするとこうなりますね。

以下はコードです。

%pylab
import matplotlib.pyplot as plt 
import pandas as pd
from datetime import datetime
import numpy as np
#機械受注
df1 = pd.read_csv("https://vdata-stats-data.s3.amazonaws.com/csv/NB31M.csv",skiprows=1, names=['Month', 'Machine' ,'Sokuho'])
#消費支出
df2 = pd.read_csv("https://vdata-stats-data.s3.amazonaws.com/csv/NC11M.csv",skiprows=1, names=['Month', 'CP' ,'Sokuho'])
#輸出
df3 = pd.read_csv("https://vdata-stats-data.s3.amazonaws.com/csv/ND71M.csv",skiprows=1, names=['Month', 'EX' ,'Sokuho'])
#輸入
df4 = pd.read_csv("https://vdata-stats-data.s3.amazonaws.com/csv/ND72M.csv",skiprows=1, names=['Month', 'IN' ,'Sokuho'])
#公共工事請負金額
df5 = pd.read_csv("https://vdata-stats-data.s3.amazonaws.com/csv/NB75M.csv",skiprows=1, names=['Month', 'PUB' ,'Sokuho'])
Data = pd.merge(df1,df2,on='Month')
Data = pd.merge(Data,df3,on='Month')
Data = pd.merge(Data,df4,on='Month')
Data = pd.merge(Data,df5,on='Month')
dates = pd.DatetimeIndex(Data.Month)
Data.index = dates
Data['EX-IN'] = Data['EX']-Data['IN']

from matplotlib.font_manager import FontProperties
fp = FontProperties(fname='C:\Windows\Fonts\HGRGM.TTC')
fig = plt.figure(figsize=(12,10))
ax1 = fig.add_subplot(4,1,1)
plt.ylabel(u'機械受注(前年比)',fontproperties=fp)
ax2 = fig.add_subplot(4,1,2)
plt.ylabel(u'消費支出(前年比)',fontproperties=fp)
ax3 = fig.add_subplot(4,1,3)
plt.ylabel(u'輸出-輸入(億円)',fontproperties=fp)
ax4 = fig.add_subplot(4,1,4)
plt.ylabel(u'公共工事請負金額(前年比)',fontproperties=fp)
y1 = Data['Machine']
y2 = Data['CP']
y3 = Data['EX-IN']
y4 = Data['PUB']

ax1.plot(y1,label=u'機械受注',color="darkgray")
ax2.plot(y2,label=u'消費支出',color="darkgray")
ax3.plot(y3,label=u'輸出-輸入',color="darkgray")
ax4.plot(y4,label=u'公共工事請負金額',color="darkgray")
ax1.grid()
ax2.grid()
ax3.grid()
ax4.grid()
ax1.axhline(y=0, color='blue')
ax2.axhline(y=0, color='blue')
ax3.axhline(y=0, color='blue')
ax4.axhline(y=0, color='blue')
ax1.legend(prop=fp,loc='upper left')
ax2.legend(prop=fp,loc='upper left')
ax3.legend(prop=fp,loc='upper left')
ax4.legend(prop=fp,loc='upper left')

return top