読者です 読者をやめる 読者になる 読者になる

Pychef's Diary

I consider myself an engineer, aren't I?

pandasをWinkdex APIで使って遊んでみる編

それでは先のリストの中からWinkdex APIを使って遊んでみましょう!WinkdexはBitcoinの価格指標の一種で最近サービスを開始しました。蛇足になりますが、Winkdexの創始者であるウィンクルヴォス兄弟は映画『ソーシャル・ネットワーク』のなかでザッカーバーグを訴えていたあのエリート双子兄弟のようです。では、まずはWinkdexの過去180日のプライスを取得してみます。

#encoding:utf-8
#http://docs.winkdex.com/

import pandas as pd
import requests as rq
import matplotlib.pyplot as plt

class Winkdex:

	def __init__(self):
		self.url = "https://winkdex.com/api/v0"
		self.hdrs = {"User-Agent":"my-winkdex-app"} #リファレンスにあるappnameを拝借してみます

	def timeseries(self,start,end): 
		par = {"start_time":start, "end_time":end} 
		res = rq.get(self.url + "/series", params=par,headers=self.hdrs)
		res = res.json()
		return res


winkdex = Winkdex()
varall = winkdex.timeseries("","")
timeprice = {}
tskeys = []
tsvalues = []

for series in varall["series"]:
	for results in series["results"]:
		timestamp = results["timestamp"]
		tskeys.append(timestamp[0:10]) #timestampの最初10文字だけ 
		tsvalues.append(results["price"]/100)

timeprice = pd.Series(timeprice)
ts = pd.Series(tsvalues, index=tskeys)
print(ts)

すると、こんなレスポンスが返ってくるはず。

2014-02-21    567
2014-02-22    601
2014-02-23    611
2014-02-24    547
2014-02-25    515
2014-02-26    581
2014-02-27    578
2014-02-28    564
2014-03-01    566
2014-03-02    556
2014-03-03    660
2014-03-04    662
2014-03-05    662
2014-03-06    653
2014-03-07    626
...
2014-08-05    580
2014-08-06    580
2014-08-07    588
2014-08-08    589
2014-08-09    585
2014-08-10    587
2014-08-11    576
2014-08-12    570
2014-08-13    545
2014-08-14    517
2014-08-15    493
2014-08-16    509
2014-08-17    492
2014-08-18    460
2014-08-19    487

つぎに、どれくらいボラっているのかを調べてみましょう。pandasのdescribeをつかえば簡単です。

print(ts.describe())
count    180.000000
mean     553.833333
std       75.190819
min      392.000000
25%      487.750000
50%      581.000000
75%      618.000000
max      666.000000

現在のプライスは特に特異なわけではなさそうです!では、matplotlibを使ってグラフを描画してみます。

ax = ts.plot()
ax.set_ylabel("WinkDex"); ax.set_xlabel("Time")
plt.show()

f:id:pychef:20140820221131p:plain