从InfluxDB和Pandas入门

导航至

InfluxData引以为豪的是始终将开发者满意度放在首位。维护开发者满意度的一个很大部分是提供客户端库,使用户能够通过他们选择的语言和库与数据库进行交互。数据分析是与Python用例最广泛相关的任务,占Python任务的58%,因此Pandas是Python用户第二受欢迎的库也就不足为奇了。Pandas是Python用户第二受欢迎的库。InfluxDB 2.0 Python客户端数据支持Pandas DataFrame,以便数据科学家能够轻松地使用InfluxDB

在本教程中,我们将学习如何查询我们的InfluxDB实例,并以DataFrame的形式返回数据。我们还将探索客户端仓库中存在的某些数据科学资源。有关如何开始使用InfluxDB Python客户端库的信息,请参阅这篇博客

Pandas InfluxDB

我正在热情地阅读Pandas和InfluxDB文档。图片由Sid Balachandran在Unsplash上提供。

数据科学资源

InfluxDB Python客户端仓库中包含各种数据科学资源,以帮助您充分利用客户端的Pandas功能。我鼓励您查看示例notebooks。它们是一组Jupyter Notebooks,提供各种时序数据科学和数据分析解决方案的示例,例如如何将Tensorflow和Keras集成进行预测。

从InfluxDB到DataFrame

导入客户端和Pandas

from influxdb_client import InfluxDBClient
import pandas as pd

提供认证参数

my_token = my-token
my_org = "my-org"
bucket = "system"

编写您的Flux查询

query= '''
from(bucket: "system")
|> range(start:-5m, stop: now())
|> filter(fn: (r) => r._measurement == "cpu")
|> filter(fn: (r) => r._field == "usage_user")
|> filter(fn: (r) => r.cpu == "cpu-total")'''

查询InfluxDB并返回DataFrame

client = InfluxDBClient(url="https://127.0.0.1:9999", token=my_token, org=my_org, debug=False)
system_stats = client.query_api().query_data_frame(org=my_org, query=query)
display(system_stats.head())

从DataFrame到InfluxDB

将DataFrame写入InfluxDB:

From DataFrame to InfluxDB

from influxdb_client import InfluxDBClient, Point, WriteOptions
from influxdb_client.client.write_api import SYNCHRONOUS
# Preparing Dataframe: 
system_stats.drop(columns=['result', 'table','start','stop'])
# DataFrame must have the timestamp column as an index for the client. 
system_stats.set_index("_time")
_write_client.write(bucket.name, record=system_stats, data_frame_measurement_name='cpu',
                    data_frame_tag_columns=['cpu'])

关闭客户端

_write_client.__del__()
client.__del__()

Pandas与InfluxDB的Flux互补

尽管Flux拥有与Pandas类似的数据转换能力,但InfluxDB重视开发者的时间。如果您处理的是较小的数据集,可能没有太大动力在服务器端执行这些转换或学习Flux。希望这种Pandas能力能帮助您更快地执行您的时序分析。一如既往,如果您遇到困难,请在我们的社区网站Slack频道上分享。我们非常希望得到您的反馈,并帮助您解决遇到的问题。