如何用 TDengine 预测 “未来”

news2024/11/27 22:23:17

介绍

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 中的电力系统历史数据的电表数值来预测未来的电力消耗数值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/720018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美女小姐姐是你得菜吗~PYTHON采集西瓜小姐姐

目录标题 前言第三方模块&#xff1a;环境介绍:基本流程:代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 第三方模块&#xff1a; requests >>> pip install requests 第三方模块安装: win R 输入cmd 输入安装命令 pip install 模块名 (如果你觉…

Matlab|改进的粒子群算法优化支持向量机(多分类)

作者在前面的文章中介绍了粒子群算法的原理及其2种改进算法&#xff0c;本文将基于这三种优化方法&#xff0c;应用于支持向量机进行分类&#xff0c;并对比改进算法与标准粒子群算法的分类性能&#xff0c;结果显示改进后的方法能够得到更佳的分类效果。&#xff08;在对PSO-S…

小程序实现自定义分享微信好友

首先在全局page.json中添加"shareAppMessage": true {"path": "pages/brandCoupon/brandCoupon","style": {"navigationBarTitleText": "霸王餐","navigationStyle": "custom","enable…

3D建模软件、Creo 3D 、Creo8安装、下载教程

PTC Creo 8.0 是一款三维 CAD 软件&#xff0c;适用于多个行业和应用场景&#xff0c;包括机械设计、工业设计、电子设计等等。以下是 PTC Creo 8.0 的功能介绍和安装条件&#xff1a; 功能介绍&#xff1a; 三维建模&#xff1a;可以使用多种工具进行三维建模&#xff0c;包…

【python】生成时间戳+读取csv最后一列+生成一组随机数

1.按照间隔生成时间戳,并保存为csv文件 ##### 按照间隔生成时间戳,并保存为csv文件 import pandas as pd from datetime import datetime, time, timedelta times [] ts datetime(2023, 6, 17, 9, 10, 0) while ts < datetime(2023, 6, 17, 9, 26, 40):# times.append(t…

Leetcode 75算法题( 上)(使用C++实现)

目录 数组 / 字符串 1768.交替合并字符串 1071、字符串中的最大公因子 1431. 拥有最多糖果的孩子 605. 种花问题 345. 反转字符串中的元音字母 151. 反转字符串中的单词 238. 除自身以外数组的乘积 334. 递增的三元子序列 443. 压缩字符串 双指针 283. 移动零 392. 判断…

【狂神】MySQL - 连表查询 Join On 详解

1. 连表查询详解 市面上有 7 种连表查询, 总共归为三大类 : 左查询 LEFT JOIN -- 以左表为基准右查询 RIGHT JOIN -- 以右表为基准交叉查询 INNER JOIN -- 查询两表都有的数据 操作描述inner join如果表中至少有一个匹配, 就返回行left join会从左表中返回所有的值…

基于django的数据可视化展现

今天给大家简单分享一下一个基于python的django的框架写的一个数据可视化的项目。 主要涉及技术&#xff1a;django基础&#xff0c;python基础&#xff0c;前端&#xff08;html&#xff0c;echars&#xff09;基础。 这个项目自然而然是基于python逻辑语言处理的&#xff0…

好选客干货分享:化纤长丝找外贸客户

化纤长丝概述 化纤长丝是将聚合物材料&#xff08;如&#xff1a;聚酯、聚酰胺、聚酰胺酯等&#xff09;通过化学反应和纺丝工艺转化制成的连续的细长纤维&#xff0c;具有低成本、高强度、高弹性的优点&#xff0c;与天然纤维相比&#xff0c;其抗皱性和耐磨性也更胜一筹&…

隐秘的角落——proxychains代理工具

互联网只因你太美&#xff0c;自千禧年之后影响了数十年&#xff0c;无数的弄潮儿和狂热者为你痴迷&#xff0c;也有不尽的黑子们就安全问题而争议。直到现在&#xff0c;HTTPS、SSH、SOCKS、VPN、IPsec等技术逐渐为大众所接受&#xff0c;无法割舍。而这次&#xff0c;我将介绍…

防止网络断联,双机热备这么部署就对了

你们好&#xff0c;我的网工朋友。 防火墙的基本功能、配置案例、怎么提升网络的可靠性&#xff0c;给你说过不少。 但有小友留言说&#xff0c;双机热备的知识点&#xff0c;好像没有系统讲过&#xff0c;我去翻了翻&#xff0c;还真是。 为了保证网络的不间断传输&#xf…

浅谈有源电力滤波器及配电能效平台在污水处理厂中的应用

【摘要】为减少污水处理设备产生的各次谐波&#xff0c;通过确定主要谐波源&#xff0c;检测和计算谐波分量&#xff0c;采用有源电力滤波器进行谐波治理&#xff0c;大幅降低了电力系统中的三相电流畸变率&#xff0c;提高了电能质量&#xff1b;抑制了谐波分量&#xff0c;减…

顺序表与链表

思维导图&#xff1a; 顺序表与链表都是两种线性表&#xff0c;但是两者之间又有着许多的不同。顺序表是一种连续的空间&#xff0c;实际上就是数组。链表是不连续的空间&#xff0c;链表的空间是一块一块的开辟出来的。 两者的优点与缺点&#xff1a; 顺序表&#xff1a; 优点…

86、基于STM32的电动车 小车蓄电池锂电池充电桩系统设计(程序+原理图+PCB源文件+硬件资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

云计算——虚拟化层架构

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 前言 本章将会讲解云计算的虚拟化层架构&#xff0c;了解云计算虚拟化层都有哪些架构模式…

23. 销售额完成任务指标的商品

文章目录 题目需求存在的疑问实现一题目来源 题目需求 商家要求每个商品每个月需要售卖出一定的销售总额 假设1号商品销售总额大于21000&#xff0c;2号商品销售总额大于10000&#xff0c;其余商品没有要求 请写出SQL从订单详情表中&#xff08;order_detail&#xff09;查询连…

多元分类预测 | Matlab基于深度置信网络DBN的分类预测,多特征输入模型,DBN分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述

MySQL的match函数在sp中使用的BUG解析

一、问题发现 在一次开发中在sp中使用MySQL PREPARE以后&#xff0c;使用match AGAINST语句作为prepare stmt的参数后&#xff0c;发现执行第二遍call会导致数据库crash&#xff0c;于是开始动手调查问题发生的原因。 注&#xff1a;本次使用的 MySQL 数据库版本为最新的debug…

文件改名神器!简体中文一键翻译为繁体中文并智能保存到指定文件夹!

在这个简繁转换教程中&#xff0c;您将学习如何使用简单的方法将简体中文文件快速翻译为繁体中文&#xff0c;并将其保存至指定的文件夹中。无需复杂的翻译软件或多步操作&#xff0c;只需跟随以下步骤&#xff0c;您就能实现简繁转换的便捷保存。 首先第一步&#xff0c;我们…

机器学习一:线性回归

1 知识预警 1.1 线性代数 ( A T ) T A (A^\mathrm{T})^\mathrm{T}A (AT)TA$ ( A B ) T A T B T (AB)^\mathrm{T}A^\mathrm{T}B^\mathrm{T} (AB)TATBT ( λ A ) T λ A T (\lambda A)^\mathrm{T}\lambda A^\mathrm{T} (λA)TλAT ( A B ) T B T A T (AB)^\mathrm{T}B^…