背景介绍
应用实例
一、部署Etwin物联网平台并启动服务
二、克隆源代码
git clone https://github.com/sangshuduo/td-forecasting
三、安装所需的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。
四、模拟一些数据
python3 mockdata.py
五、预测明年的数据
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 功能和灵活性。
- 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”,让用户可以决定将结果转储到图片中进行后续处理,或者立即在屏幕上显示结果。