无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

如何用時序數據庫 TDengine 預測 “未來”?

Shuduo Sang

2023-06-27 / ,

TDengine? 是一種開源的云原生時序數據庫(Time Series Database,TSDB),專為(wei)物聯網(IoT)、連接汽車和(he)工業物聯網進行了優(you)化。它能夠高效地實時(shi)攝取、處理(li)和(he)監(jian)控一天內(nei)由(you)數十億(yi)個傳感器(qi)和(he)數據(ju)收(shou)集器(qi)產生的(de)PB級(ji)別的(de)數據(ju)。

許(xu)多用戶(hu)將(jiang)由物聯網設備(bei)、汽車或 IT 基礎設施生(sheng)成的(de)海量數(shu)據(ju)實時(shi)存儲到 TDengine 中,并使(shi)用標準的(de) SQL 命令從 TDengine 中查(cha)(cha)詢(xun)(xun)數(shu)據(ju)。TDengine 支持過濾、分組(zu)、窗口、連接和許(xu)多聚合函數(shu)以查(cha)(cha)詢(xun)(xun)數(shu)據(ju),幫助用戶(hu)根(gen)據(ju)其目(mu)的(de)查(cha)(cha)詢(xun)(xun)數(shu)據(ju)。

許多用戶也(ye)希望更深(shen)入地了解現有數(shu)據(ju)(ju)。例如,根據(ju)(ju)當前趨勢,未來將會發生(sheng)什么情況?隨著 AI 時(shi)代的(de)到來,最近(jin)出現了許多新技(ji)術(shu)或方法(fa),例如新的(de)機器學(xue)習和(he)深(shen)度學(xue)習算法(fa)。那么如何使用機器學(xue)習和(he)深(shen)度學(xue)習算法(fa)針對存(cun)儲在 TDengine 的(de)數(shu)據(ju)(ju)預測未來趨勢呢?

幸運(yun)的(de)(de)是,TDengine 支持多(duo)種流行的(de)(de)編程語言(yan)連(lian)接(jie)(jie)器(qi)(qi),如(ru) Java、Python、Go、Rust、C#、NodeJS 等,用戶可以(yi)使用他們(men)喜歡的(de)(de)語言(yan)連(lian)接(jie)(jie)器(qi)(qi)訪問 TDengine。這(zhe)些連(lian)接(jie)(jie)器(qi)(qi)提供符合(he)規范(fan)的(de)(de)接(jie)(jie)口(kou),使連(lian)接(jie)(jie)器(qi)(qi)易于與其他軟件或框架集(ji)成(cheng)。

本(ben)文(wen)介(jie)紹(shao)如何(he)使用存儲在 TDengine 中(zhong)的(de)(de)現有(you)數(shu)據(ju)(ju)來(lai)預測未來(lai)數(shu)據(ju)(ju)。我們將(jiang)模擬一些(xie)(xie)測試數(shu)據(ju)(ju)以反(fan)映真實的(de)(de)電(dian)力系統,并演示如何(he)使用 TDengine 和(he)一些(xie)(xie) Python 庫來(lai)預測未來(lai)一年(nian)的(de)(de)數(shu)據(ju)(ju)。

假(jia)設(she)用(yong)戶是一個(ge)電力(li)系統公司(si),用(yong)戶每天從電站(zhan)儀表收集用(yong)電量數據,并將其存儲(chu)在 TDengine 集群中。現在用(yong)戶想(xiang)要(yao)預測電力(li)消耗將會如何發展(zhan),并購買更多設(she)備來(lai)支持(chi)它。

隨著經濟增長(chang),每(mei)年(nian)用電成一定比(bi)例上漲。另外考慮到季節變化,電力消耗量會有所(suo)不同(tong)。這(zhe)個城市位于北(bei)半球(qiu),所(suo)以許多家庭在夏天(tian)會使用更多的電力。我們模擬數據來反(fan)映這(zhe)些假定。

源代碼托管在 。

演示

步驟 1:部署 TDengine 并在您的系統上并運行

請參閱了解(jie)詳細說明(ming)。

步驟 2:克隆源代碼

git clone //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

輸出結果

如何用時序數據庫 TDengine 預測 “未來”? - TDengine Database 時序數據庫

工作原理介紹

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)
 ...

這(zhe)個文(wen)件的核心功能(neng)是(shi)模擬隨(sui)機數據,并進行(xing)一(yi)些調整以實現(xian)假設(she)。

forecast.py

這個文件實現了預測功(gong)能,以(yi)下(xia)為實現過程詳解:

步驟 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
...

下(xia)面我們(men)(men)(men)解釋一下(xia)它們(men)(men)(men)是什(shen)么,以及它們(men)(men)(men)的(de)作用:

  • 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 連接(jie)器提供符合 Python 數(shu)據(ju)庫(ku) API 規(gui)范 v2.0(PEP 249)的(de)(de)(de)(de)接(jie)口(kou)。DBAPI 是“Python 數(shu)據(ju)庫(ku) API 規(gui)范”的(de)(de)(de)(de)縮(suo)寫。這是 Python 中廣(guang)泛使(shi)用(yong)的(de)(de)(de)(de)規(gui)范,用(yong)于(yu)定義所有數(shu)據(ju)庫(ku)連接(jie)包的(de)(de)(de)(de)常用(yong)用(yong)法模(mo)式。DBAPI 是一個“低級別”API,通常是 Python 應用(yong)程序中用(yong)于(yu)與數(shu)據(ju)庫(ku)交(jiao)互的(de)(de)(de)(de)最低級別系統。SQLAlchemy 的(de)(de)(de)(de)方言系統是圍繞DBAPI 的(de)(de)(de)(de)操(cao)作構(gou)建的(de)(de)(de)(de),提供適用(yong)于(yu)特定數(shu)據(ju)庫(ku)引(yin)擎的(de)(de)(de)(de)特定 DBAPI 的(de)(de)(de)(de)各個方言類(lei)。

我們可以使用 SQLAlchemy 連接 TDengine 集群,并使用 Pandas 將數據查詢轉(zhuan)換成數據幀格(ge)式(shi)。

在這里,我(wo)們假設用(yong)(yong)戶關心(xin)的(de)是周平均用(yong)(yong)電(dian)(dian)量,而不(bu)是每天的(de)用(yong)(yong)電(dian)(dian)量,以減少異常值。我(wo)們可以使用(yong)(yong) AVG() 函數和 INTERVAL(1w)子句命令從(cong) TDengine 集群中查詢數據。

稍后我們將以(yi)數據幀(zhen)格式操縱數據。

步驟 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 模塊的特性(xing),我們可以(yi)設定一(yi)(yi)些參數進行(xing)預測(ce)(ce)。在這里,我們使用線性(xing)回(hui)歸算(suan)法(fa)(fa)和(he) LightGBM 算(suan)法(fa)(fa)來進行(xing)預測(ce)(ce)并(bing)在同一(yi)(yi)圖中顯示(shi)它們的結果,以(yi)便可視化不同算(suan)法(fa)(fa)的效果。

步驟 4:Show up or dump to file

...
    if args.dump:
        plt.savefig(args.dump)
    else:
        plt.show()

Python 代碼提供了(le)一個參數”–dump”,讓用戶可(ke)以(yi)決定將結(jie)(jie)果(guo)轉儲到(dao)圖片中進行后(hou)續處理,或(huo)者立即在屏幕上顯(xian)示(shi)結(jie)(jie)果(guo)。以(yi)上步驟在 Ubuntu 20.04、Ubuntu 22.04、Windows 10 和 macOS 環境經過(guo)驗證。

總結

這樣一來(lai),我們現在就(jiu)擁有(you)了(le)一個非常簡單(dan)的程序,演示了(le)如何使(shi)用存儲在 TDengine 中的電力系統歷史數據的電表數值(zhi)來(lai)預測未來(lai)的電力消耗數值(zhi)。