海量時序資料分析預測難?來試試 TDengine+Seeq 這一組合

TDengine發表於2023-11-13

作為一款製造業和工業網際網路(IIOT)高/級分析軟體,Seeq 支援在工藝製造組織中使用機器學習創新的新功能。這些功能使組織能夠將自己或第三方機器學習演算法部署到前線流程工程師和主題專家使用的高/級分析應用程式,從而使單個資料科學家的努力擴充套件到許多前線員工。透過 TDengine Java connector,Seeq 可以輕鬆支援查詢 TDengine 提供的時序資料,並提供資料展現、分析、預測等功能。本文將對此進行介紹。

如何配置 Seeq 訪問 TDengine

1. 檢視 data 儲存位置

sudo seeq config get Folders/Data

2. 從 maven.org 下載 TDengine Java connector 包,目前最新版本為 3.2.7。並複製至 data 儲存位置的  plugins\lib 中。

3. 重新啟動 seeq server

sudo seeq restart

4. 輸入 License

瀏覽器訪問 ip:34216 並按照說明輸入 license。

使用 Seeq 分析 TDengine 時序資料

下文將為大家演示如何使用 Seeq 軟體配合 TDengine 進行時序資料分析。

場景介紹

示例場景為一個電力系統,使用者每天從電站儀表收集用電量資料,並將其儲存在 TDengine 叢集中。現在使用者想要預測電力消耗將會如何發展,併購買更多裝置來支援它。使用者電力消耗隨著每月訂單變化而不同,另外考慮到季節變化,電力消耗量會有所不同。這個城市位於北半球,所以在夏天會使用更多的電力。我們模擬資料來反映這些假定。

資料 Schema

CREATE STABLE meters (ts TIMESTAMP, num INT, temperature FLOAT, goods INT) TAGS (device NCHAR(20));
create table goods (ts1 timestamp, ts2 timestamp, goods float);

構造資料方法

python mockdata.py
taos -s "insert into power.goods select _wstart, _wstart + 10d, avg(goods) from power.meters interval(10d);"

原始碼託管在 GitHub sangshuduo。

使用 Seeq 進行資料分析

配置資料來源(Data Source)

使用 Seeq 管理員角色的帳號登入,並新建資料來源。

  • Power
{
    "QueryDefinitions": [
        {
            "Name": "PowerNum",
            "Type": "SIGNAL",
            "Sql": "SELECT  ts, num FROM meters",
            "Enabled": true,
            "TestMode": false,
            "TestQueriesDuringSync": true,
            "InProgressCapsulesEnabled": false,
            "Variables": null,
            "Properties": [
                {
                    "Name": "Name",
                    "Value": "Num",
                    "Sql": null,
                    "Uom": "string"
                },
                {
                    "Name": "Interpolation Method",
                    "Value": "linear",
                    "Sql": null,
                    "Uom": "string"
                },
                {
                    "Name": "Maximum Interpolation",
                    "Value": "2day",
                    "Sql": null,
                    "Uom": "string"
                }
            ],
            "CapsuleProperties": null
        }
    ],
    "Type": "GENERIC",
    "Hostname": null,
    "Port": 0,
    "DatabaseName": null,
    "Username": "root",
    "Password": "taosdata",
    "InitialSql": null,
    "TimeZone": null,
    "PrintRows": false,
    "UseWindowsAuth": false,
    "SqlFetchBatchSize": 100000,
    "UseSSL": false,
    "JdbcProperties": null,
    "GenericDatabaseConfig": {
        "DatabaseJdbcUrl": "jdbc:TAOS-RS://127.0.0.1:6041/power?user=root&password=taosdata",
        "SqlDriverClassName": "com.taosdata.jdbc.rs.RestfulDriver",
        "ResolutionInNanoseconds": 1000,
        "ZonedColumnTypes": []
    }
}

  • Goods
{
    "QueryDefinitions": [
        {
            "Name": "PowerGoods",
            "Type": "CONDITION",
            "Sql": "SELECT ts1, ts2, goods FROM power.goods",
            "Enabled": true,
            "TestMode": false,
            "TestQueriesDuringSync": true,
            "InProgressCapsulesEnabled": false,
            "Variables": null,
            "Properties": [
                {
                    "Name": "Name",
                    "Value": "Goods",
                    "Sql": null,
                    "Uom": "string"
                },
                {
                    "Name": "Maximum Duration",
                    "Value": "10days",
                    "Sql": null,
                    "Uom": "string"
                }
            ],
            "CapsuleProperties": [
                {
                    "Name": "goods",
                    "Value": "${columnResult}",
                    "Column": "goods",
                    "Uom": "string"
                }
            ]
        }
    ],
    "Type": "GENERIC",
    "Hostname": null,
    "Port": 0,
    "DatabaseName": null,
    "Username": "root",
    "Password": "taosdata",
    "InitialSql": null,
    "TimeZone": null,
    "PrintRows": false,
    "UseWindowsAuth": false,
    "SqlFetchBatchSize": 100000,
    "UseSSL": false,
    "JdbcProperties": null,
    "GenericDatabaseConfig": {
        "DatabaseJdbcUrl": "jdbc:TAOS-RS://127.0.0.1:6041/power?user=root&password=taosdata",
        "SqlDriverClassName": "com.taosdata.jdbc.rs.RestfulDriver",
        "ResolutionInNanoseconds": 1000,
        "ZonedColumnTypes": []
    }
}

  • Temperature

{
    "QueryDefinitions": [
        {
            "Name": "PowerNum",
            "Type": "SIGNAL",
            "Sql": "SELECT  ts, temperature FROM meters",
            "Enabled": true,
            "TestMode": false,
            "TestQueriesDuringSync": true,
            "InProgressCapsulesEnabled": false,
            "Variables": null,
            "Properties": [
                {
                    "Name": "Name",
                    "Value": "Temperature",
                    "Sql": null,
                    "Uom": "string"
                },
                {
                    "Name": "Interpolation Method",
                    "Value": "linear",
                    "Sql": null,
                    "Uom": "string"
                },
                {
                    "Name": "Maximum Interpolation",
                    "Value": "2day",
                    "Sql": null,
                    "Uom": "string"
                }
            ],
            "CapsuleProperties": null
        }
    ],
    "Type": "GENERIC",
    "Hostname": null,
    "Port": 0,
    "DatabaseName": null,
    "Username": "root",
    "Password": "taosdata",
    "InitialSql": null,
    "TimeZone": null,
    "PrintRows": false,
    "UseWindowsAuth": false,
    "SqlFetchBatchSize": 100000,
    "UseSSL": false,
    "JdbcProperties": null,
    "GenericDatabaseConfig": {
        "DatabaseJdbcUrl": "jdbc:TAOS-RS://127.0.0.1:6041/power?user=root&password=taosdata",
        "SqlDriverClassName": "com.taosdata.jdbc.rs.RestfulDriver",
        "ResolutionInNanoseconds": 1000,
        "ZonedColumnTypes": []
    }
}


使用 Seeq Workbench

登入 Seeq 服務頁面並新建 Seeq Workbench,透過選擇資料來源搜尋結果和根據需要選擇不同的工具,可以進行資料展現或預測,詳細使用方法參見官方知識庫。

使用 Seeq Data Lab Server 進行進一步的資料分析

登入 Seeq 服務頁面並新建 Seeq Data Lab,可以進一步使用 Python 程式設計或其他機器學習工具進行更復雜的資料探勘功能。

from seeq import spy
spy.options.compatibility = 189
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import mlforecast
import lightgbm as lgb
from mlforecast.target_transforms import Differences
from sklearn.linear_model import LinearRegression
ds = spy.search({'ID': "8C91A9C7-B6C2-4E18-AAAF-XXXXXXXXX"})
print(ds)
sig = ds.loc[ds['Name'].isin(['Num'])]
print(sig)
data = spy.pull(sig, start='2015-01-01', end='2022-12-31', grid=None)
print("data.info()")
data.info()
print(data)
#data.plot()
print("data[Num].info()")
data['Num'].info()
da = data['Num'].index.tolist()
#print(da)
li = data['Num'].tolist()
#print(li)
data2 = pd.DataFrame()
data2['ds'] = da
print('1st data2 ds info()')
data2['ds'].info()
#data2['ds'] = pd.to_datetime(data2['ds']).to_timestamp()
data2['ds'] = pd.to_datetime(data2['ds']).astype('int64')
data2['y'] = li
print('2nd data2 ds info()')
data2['ds'].info()
print(data2)
data2.insert(0, column = "unique_id", value="unique_id")
print("Forecasting ...")
forecast = mlforecast.MLForecast(
    models = lgb.LGBMRegressor(),
    freq = 1,
    lags=[365],
    target_transforms=[Differences([365])],
)
forecast.fit(data2)
predicts = forecast.predict(365)
pd.concat([data2, predicts]).set_index("ds").plot(title = "current data with forecast")
plt.show()

執行程式輸出結果:

寫在最後

透過整合 Seeq 和 TDengine,使用者能夠充分利用到 TDengine 高效能的時序資料儲存和檢索,確保資料的高效處理;同時也將受益於 Seeq 提供的強大資料視覺化和分析功能,如資料視覺化、異常檢測、相關性分析和預測建模,方便使用者獲得有價值的資料洞察並基於此進行決策。

未來 Seeq 和 TDengine 將共同為製造業、工業物聯網和電力系統等各行各業的時序資料分析提供綜合解決方案,將高效資料儲存和先進資料分析相結合,賦予企業深入挖掘時序資料潛力的能力,推動業務發展與改進。如果你想要了解 Seeq 的更全面設定、Seeq 與全託管的雲服務平臺 TDengine Cloud 的具體連線詳情,請移步官方文件進行查閱。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014783/viewspace-2995067/,如需轉載,請註明出處,否則將追究法律責任。

相關文章