六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

如何用時序數(shù)據(jù)庫 TDengine 預(yù)測 “未來”?

TDengine? 是一種開源的云原生時序數(shù)據(jù)庫(Time Series Database,TSDB),專為物聯(lián)網(wǎng)(IoT)、連接汽車和工業(yè)物聯(lián)網(wǎng)進行了優(yōu)化。它能夠高效地實時攝取、處理和監(jiān)控一天內(nèi)由數(shù)十億個傳感器和數(shù)據(jù)收集器產(chǎn)生的PB級別的數(shù)據(jù)。

許多用戶將由物聯(lián)網(wǎng)設(shè)備、汽車或 IT 基礎(chǔ)設(shè)施生成的海量數(shù)據(jù)實時存儲到 TDengine 中,并使用標準的 SQL 命令從 TDengine 中查詢數(shù)據(jù)。TDengine 支持過濾、分組、窗口、連接和許多聚合函數(shù)以查詢數(shù)據(jù),幫助用戶根據(jù)其目的查詢數(shù)據(jù)。

許多用戶也希望更深入地了解現(xiàn)有數(shù)據(jù)。例如,根據(jù)當前趨勢,未來將會發(fā)生什么情況?隨著 AI 時代的到來,最近出現(xiàn)了許多新技術(shù)或方法,例如新的機器學(xué)習(xí)和深度學(xué)習(xí)算法。那么如何使用機器學(xué)習(xí)和深度學(xué)習(xí)算法針對存儲在 TDengine 的數(shù)據(jù)預(yù)測未來趨勢呢?

幸運的是,TDengine 支持多種流行的編程語言連接器,如 Java、Python、Go、Rust、C#、NodeJS 等,用戶可以使用他們喜歡的語言連接器訪問 TDengine。這些連接器提供符合規(guī)范的接口,使連接器易于與其他軟件或框架集成。

本文介紹如何使用存儲在 TDengine 中的現(xiàn)有數(shù)據(jù)來預(yù)測未來數(shù)據(jù)。我們將模擬一些測試數(shù)據(jù)以反映真實的電力系統(tǒng),并演示如何使用 TDengine 和一些 Python 庫來預(yù)測未來一年的數(shù)據(jù)。

假設(shè)用戶是一個電力系統(tǒng)公司,用戶每天從電站儀表收集用電量數(shù)據(jù),并將其存儲在 TDengine 集群中?,F(xiàn)在用戶想要預(yù)測電力消耗將會如何發(fā)展,并購買更多設(shè)備來支持它。

隨著經(jīng)濟增長,每年用電成一定比例上漲。另外考慮到季節(jié)變化,電力消耗量會有所不同。這個城市位于北半球,所以許多家庭在夏天會使用更多的電力。我們模擬數(shù)據(jù)來反映這些假定。

源代碼托管在 https://github.com/sangshuduo/td-forecasting。

演示

步驟 1:部署 TDengine 并在您的系統(tǒng)上并運行

請參閱官方文檔了解詳細說明。

步驟 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:模擬一些數(shù)據(jù)

python3 mockdata.py

步驟 5:預(yù)測明年的數(shù)據(jù)

python3 forecast.py

輸出結(jié)果

如何用時序數(shù)據(jù)庫 TDengine 預(yù)測 “未來”? - TDengine Database 時序數(shù)據(jù)庫

工作原理介紹

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

這個文件的核心功能是模擬隨機數(shù)據(jù),并進行一些調(diào)整以實現(xiàn)假設(shè)。

forecast.py

這個文件實現(xiàn)了預(yù)測功能,以下為實現(xiàn)過程詳解:

步驟 1:導(dǎo)入預(yù)測需要的 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 算法,它是一個使用基于樹的學(xué)習(xí)算法的梯度提升框架。
  • Matplotlib 是最流行的 Python 模塊之一,用于可視化。
  • Mlforecast 是一個框架,用于使用機器學(xué)習(xí)模型執(zhí)行時間序列預(yù)測。
  • Pandas 是支持數(shù)據(jù)操作的最流行的模塊。
  • Sklearn 是一個支持流行的數(shù)據(jù)科學(xué)/機器學(xué)習(xí)算法的模塊。
  • SQLAlchemy 是 Python SQL 工具包和對象關(guān)系映射器,它為應(yīng)用程序開發(fā)人員提供了完整的 SQL 功能和靈活性。

步驟 2:連接到 TDengine 并查詢數(shù)據(jù)

...
    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 數(shù)據(jù)庫 API 規(guī)范 v2.0(PEP 249)的接口。DBAPI 是“Python 數(shù)據(jù)庫 API 規(guī)范”的縮寫。這是 Python 中廣泛使用的規(guī)范,用于定義所有數(shù)據(jù)庫連接包的常用用法模式。DBAPI 是一個“低級別”API,通常是 Python 應(yīng)用程序中用于與數(shù)據(jù)庫交互的最低級別系統(tǒng)。SQLAlchemy 的方言系統(tǒng)是圍繞DBAPI 的操作構(gòu)建的,提供適用于特定數(shù)據(jù)庫引擎的特定 DBAPI 的各個方言類。

我們可以使用 SQLAlchemy 連接 TDengine 集群,并使用 Pandas 將數(shù)據(jù)查詢轉(zhuǎn)換成數(shù)據(jù)幀格式。

在這里,我們假設(shè)用戶關(guān)心的是周平均用電量,而不是每天的用電量,以減少異常值。我們可以使用 AVG() 函數(shù)和 INTERVAL(1w)子句命令從 TDengine 集群中查詢數(shù)據(jù)。

稍后我們將以數(shù)據(jù)幀格式操縱數(shù)據(jù)。

步驟 3:預(yù)測

...
    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 模塊的特性,我們可以設(shè)定一些參數(shù)進行預(yù)測。在這里,我們使用線性回歸算法和 LightGBM 算法來進行預(yù)測并在同一圖中顯示它們的結(jié)果,以便可視化不同算法的效果。

步驟 4:Show up or dump to file

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

Python 代碼提供了一個參數(shù)”–dump”,讓用戶可以決定將結(jié)果轉(zhuǎn)儲到圖片中進行后續(xù)處理,或者立即在屏幕上顯示結(jié)果。以上步驟在 Ubuntu 20.04、Ubuntu 22.04、Windows 10 和 macOS 環(huán)境經(jīng)過驗證。

總結(jié)

這樣一來,我們現(xiàn)在就擁有了一個非常簡單的程序,演示了如何使用存儲在 TDengine 中的電力系統(tǒng)歷史數(shù)據(jù)的電表數(shù)值來預(yù)測未來的電力消耗數(shù)值。