介绍
TDengine™ 是一种开源的云原生时序数据库(Time Series Database,TSDB),专为物联网(IoT)、连贯汽车和工业物联网进行了优化。它可能高效地实时摄取、解决和监控一天内由数十亿个传感器和数据收集器产生的 PB 级别的数据。
许多用户将由物联网设施、汽车或 IT 基础设施生成的海量数据实时存储到 TDengine 中,并应用规范的 SQL 命令从 TDengine 中查问数据。TDengine 反对过滤、分组、窗口、连贯和许多聚合函数以查问数据,帮忙用户依据其目标查问数据。
许多用户也心愿更深刻地理解现有数据。例如,依据以后趋势,将来将会产生什么状况?随着 AI 时代的到来,最近呈现了许多新技术或办法,例如新的机器学习和深度学习算法。那么如何应用机器学习和深度学习算法针对存储在 TDengine 的数据预测将来趋势呢?
侥幸的是,TDengine 反对多种风行的编程语言连接器,如 Java、Python、Go、Rust、C#、NodeJS 等,用户能够应用他们喜爱的语言连接器拜访 TDengine。这些连接器提供符合规范的接口,使连接器易于与其他软件或框架集成。
本文介绍如何应用存储在 TDengine 中的现有数据来预测将来数据。咱们将模仿一些测试数据以反映实在的电力系统,并演示如何应用 TDengine 和一些 Python 库来预测将来一年的数据。
假如用户是一个电力系统公司,用户每天从电站仪表收集用电量数据,并将其存储在 TDengine 集群中。当初用户想要预测电力耗费将会如何倒退,并购买更多设施来反对它。
随着经济增长,每年用电成肯定比例上涨。另外思考到节令变动,电力消耗量会有所不同。这个城市位于北半球,所以许多家庭在夏天会应用更多的电力。咱们模仿数据来反映这些假设。
源代码托管在 https://github.com/sangshuduo/td-forecasting。
演示
步骤 1:部署 TDengine 并在您的零碎上运行 TDengine 服务器。
请参阅官网文档 https://docs.tdengine.com/get-started/ 理解具体阐明。
步骤 2:克隆源代码
git clone https://github.com/sangshuduo/td-forecasting
步骤 3:装置所需的 Python 软件包
# if you are using Ubuntu 20.04 Linux
sudo apt install python3-pyqt5
# 如果 PyQT5 运行失败,可能须要装置
sudo apt-get install libxcb-xinerama0
python3 -m pip install -r requirements.txt
请留神,Python 的最小版本为 3.8。
步骤 4:模仿一些数据
python3 mockdata.py
步骤 5:预测明年的数据
python3 forecast.py
输入后果
如果一切顺利,图像将显示如下。
工作原理介绍
mockdata.py
...
def insert_rec_per_month(conn, db_name, table_name, year, month):
increment = (year - 2014) * 1.1
base = int(10 * increment)
if month < 10 and month > 5:
factor = 10
else:
factor = 8
for day in range(1, monthrange(year, month)[1] + 1):
num = base * randint(5, factor) + randint(0, factor)
sql = f"INSERT INTO {db_name}.{table_name} VALUES ('{year}-{month}-{day} 00:00:00.000', {num})"
try:
conn.execute(sql)
except Exception as e:
print(f"command: {sql}")
print(e)
...
这个文件的外围性能是模仿随机数据,并进行一些调整以实现假如。
forecast.py
这个文件实现了预测性能,以下为实现过程详解:
步骤 1:导入预测须要的 Python 模块
import argparse
import lightgbm as lgb
import matplotlib.pyplot as plt
import mlforecast
import pandas as pd
from mlforecast.target_transforms import Differences
from sklearn.linear_model import LinearRegression
from sqlalchemy import create_engine, text
...
上面咱们解释一下它们是什么,以及它们的作用:
• Lightgbm 是一个 Python 模块,反对 LightGBM 算法,它是一个应用基于树的学习算法的梯度晋升框架。
• Matplotlib 是最风行的 Python 模块之一,用于可视化。
• Mlforecast 是一个框架,用于应用机器学习模型执行工夫序列预测。
• Pandas 是反对数据操作的最风行的模块。
• Sklearn 是一个反对风行的数据迷信 / 机器学习算法的模块。
• SQLAlchemy 是 Python SQL 工具包和对象关系映射器,它为应用程序开发人员提供了残缺的 SQL 性能和灵活性。
步骤 2:连贯到 TDengine 并查问数据
...
engine = create_engine("taos://root:taosdata@localhost:6030/power")
conn = engine.connect()
print("Connected to the TDengine ...")
df = pd.read_sql(text("select _wstart as ds, avg(num) as y from power.meters interval(1w)"), conn
)
conn.close()
...
TDengine Python 连接器提供合乎 Python 数据库 API 标准 v2.0(PEP 249)的接口。DBAPI 是“Python 数据库 API 标准”的缩写。这是 Python 中宽泛应用的标准,用于定义所有数据库连贯包的罕用用法模式。DBAPI 是一个“低级别”API,通常是 Python 应用程序中用于与数据库交互的最低级别零碎。SQLAlchemy 的方言零碎是围绕 DBAPI 的操作构建的,提供实用于特定数据库引擎的特定 DBAPI 的各个方言类。
咱们能够应用 SQLAlchemy 连贯 TDengine 集群,并应用 Pandas 将数据查问转换成数据帧格局。
在这里,咱们假如用户关怀的是周均匀用电量,而不是每天的用电量,以缩小异样值。咱们能够应用 AVG() 函数和 INTERVAL(1w)子句命令从 TDengine 集群中查问数据。
稍后咱们将以数据帧格局操纵数据。
步骤 3:预测
...
df.insert(0, column="unique_id", value="unique_id")
print("Forecasting ...")
forecast = mlforecast.MLForecast(models=[LinearRegression(), lgb.LGBMRegressor()],
freq="W",
lags=[52],
target_transforms=[Differences([52])],
)
forecast.fit(df)
predicts = forecast.predict(52)
pd.concat([df, predicts]).set_index("ds").plot(figsize=(12, 8))
...
通过 mlforecast 模块的个性,咱们能够设定一些参数进行预测。在这里,咱们应用线性回归算法和 LightGBM 算法来进行预测并在同一图中显示它们的后果,以便可视化不同算法的成果。
步骤 4: Show up or dump to file
...
if args.dump:
plt.savefig(args.dump)
else:
plt.show()
Python 代码提供了一个参数 ”–dump”,让用户能够决定将后果转储到图片中进行后续解决,或者立刻在屏幕上显示后果。
以上步骤在 Ubuntu 20.04、Ubuntu 22.04、Windows 10 和 macOS 环境通过验证。
总结
这样一来,咱们当初就领有了一个非常简单的程序,演示了如何应用存储在 TDengine 中的电力系统历史数据的电表数值来预测将来的电力耗费数值。