influxDBからDataFrameの形にする方法

ちょっと苦戦したのでメモ。
このブログを参考にinfluxDBにBitcoinの値段のデータを入れていたんですが、
pythonで分析する際にDataFrameの形にするところでなかなか苦労したのでそのメモです。
このブログのそのまんまでユーザー名、パスワード、DB名を同じにして1分間隔でデータをinfluxdbに入れています。

・環境
InfluxDB v1.2.0

from influxdb import InfluxDBClient
import pandas as pd

user = 'root'
password = 'root'
dbname = 'bitcoin'
client = InfluxDBClient("localhost", "8086", user, password, dbname)
data = client.query("select ltp from bf_ticker ORDER by time desc limit 10")
data
Out[4]: ResultSet({'('bf_ticker', None)': [{'ltp': 535685, 'time': '2017-09-03T11:20:03.729596451Z'}, {'ltp': 536500, 'time': '2017-09-03T11:19:03.838744087Z'}, {'ltp': 535564, 'time': '2017-09-03T11:18:03.777224574Z'}, {'ltp': 536000, 'time': '2017-09-03T11:17:02.890717927Z'}, {'ltp': 536097, 'time': '2017-09-03T11:16:02.978708976Z'}, {'ltp': 537645, 'time': '2017-09-03T11:15:02.938443121Z'}, {'ltp': 537965, 'time': '2017-09-03T11:14:03.073302088Z'}, {'ltp': 538000, 'time': '2017-09-03T11:13:03.165078998Z'}, {'ltp': 538036, 'time': '2017-09-03T11:12:03.27361028Z'}, {'ltp': 538671, 'time': '2017-09-03T11:11:05.372535397Z'}]})
print(type(data))

ここまででinfluxDBにアクセスしてクエリで値を取ってこれました。
たくさんデータを取ってきても面倒なんで一旦10分前のデータまで取ってきています。
取ってきたデータのクラスはinfluxdb.resultset.ResultSetになっているので、リスト型にします。

data2 = list(data.get_points(measurement='bf_ticker'))
data2
Out[6]: 
[{'ltp': 513680, 'time': '2017-09-03T12:10:03.466149944Z'},
 {'ltp': 513700, 'time': '2017-09-03T12:09:03.506010242Z'},
 {'ltp': 515009, 'time': '2017-09-03T12:08:03.010294321Z'},
 {'ltp': 515400, 'time': '2017-09-03T12:07:03.539533328Z'},
 {'ltp': 515603, 'time': '2017-09-03T12:06:03.418459741Z'},
 {'ltp': 515867, 'time': '2017-09-03T12:05:03.477731213Z'},
 {'ltp': 516300, 'time': '2017-09-03T12:04:03.188820794Z'},
 {'ltp': 516559, 'time': '2017-09-03T12:03:03.270773099Z'},
 {'ltp': 517374, 'time': '2017-09-03T12:02:03.40096094Z'},
 {'ltp': 516400, 'time': '2017-09-03T12:01:03.409848199Z'}]

print(type(data2))

これでリスト型になりました。

df = pd.DataFrame(data2)
Out[9]: 
      ltp                            time
0  513680  2017-09-03T12:10:03.466149944Z
1  513700  2017-09-03T12:09:03.506010242Z
2  515009  2017-09-03T12:08:03.010294321Z
3  515400  2017-09-03T12:07:03.539533328Z
4  515603  2017-09-03T12:06:03.418459741Z
5  515867  2017-09-03T12:05:03.477731213Z
6  516300  2017-09-03T12:04:03.188820794Z
7  516559  2017-09-03T12:03:03.270773099Z
8  517374   2017-09-03T12:02:03.40096094Z
9  516400  2017-09-03T12:01:03.409848199Z

無事データフレームの形にできました。
この後はtimeを使いやすいフォーマットに変更すれば良いかと思います。

========================================

bitFlyerのticker情報をInfluxDBに入れてGrafanaで可視化する
http://wolfin.hatenablog.com/entry/2016/09/26/155754

API Documentation
http://influxdb-python.readthedocs.io/en/latest/api-documentation.html

Query response object: ResultSet
http://influxdb-python.readthedocs.io/en/latest/resultset.html

InfluxDB Python Examples
http://influxdb-python.readthedocs.io/en/latest/examples.html#tutorials-pandas

関連する投稿:

コメントを残す