色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Tsmoothie:使用多種平滑技術平滑化時序數據

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-30 09:28 ? 次閱讀

在處理數據的時候,我們經常會遇到一些非連續的散點時間序列數據:

圖片

有些時候,這樣的散點數據是不利于我們進行數據的聚類和預測的。因此我們需要把它們平滑化,如下圖所示:

圖片

如果我們將散點及其范圍區間都去除,平滑后的效果如下:

圖片

這樣的時序數據是不是看起來舒服多了?此外,使用平滑后的時序數據去做聚類或預測或許有令人驚艷的效果,因為它去除了一些偏差值并細化了數據的分布范圍。

如果我們自己開發一個這樣的平滑工具,會耗費不少的時間。因為平滑的技術有很多種,你需要一個個地去研究,找到最合適的技術并編寫代碼,這是一個非常耗時的過程。平滑技術包括但不限于:

  • 指數平滑
  • 具有各種窗口類型(常數、漢寧、漢明、巴特利特、布萊克曼)的卷積平滑
  • 傅立葉變換的頻譜平滑
  • 多項式平滑
  • 各種樣條平滑(線性、三次、自然三次)
  • 高斯平滑
  • 二進制平滑

所幸,有大佬已經為我們實現好了時間序列的這些平滑技術,并在GitHub上開源了這份模塊的代碼——它就是 Tsmoothie 模塊。

1.準備

開始之前,你要確保Pythonpip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。

**(可選1) **如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.

**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優點:Python 編程的最好搭檔—VSCode 詳細指南

請選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環境 打開 Cmd (開始-運行-CMD)。
  2. MacOS 環境 打開 Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install tsmoothie

(PS) Tsmoothie 僅支持Python 3.6 及以上的版本。

2.Tsmoothie 基本使用

為了嘗試Tsmoothie的效果,我們需要生成隨機數據:

import numpy as np
import matplotlib.pyplot as plt
from tsmoothie.utils_func import sim_randomwalk
from tsmoothie.smoother import LowessSmoother

# 生成 3 個長度為200的隨機數據組
np.random.seed(123)
data = sim_randomwalk(n_series=3, timesteps=200,
                      process_noise=10, measure_noise=30)

然后使用Tsmoothie執行平滑化:

# 平滑
smoother = LowessSmoother(smooth_fraction=0.1, iterations=1)
smoother.smooth(data)

通過 smoother.smooth_data 你就可以獲取平滑后的數據:

print(smoother.smooth_data)
# [[ 5.21462928 3.07898076 0.93933646 -1.19847767 -3.32294934
# -5.40678762 -7.42425709 -9.36150892 -11.23591897 -13.05271523
# ....... ....... ....... ....... ....... ]]

繪制效果圖:

# 生成范圍區間
low, up = smoother.get_intervals('prediction_interval')

plt.figure(figsize=(18,5))

for i in range(3):
    
    plt.subplot(1,3,i+1)
    plt.plot(smoother.smooth_data[i], linewidth=3, color='blue')
    plt.plot(smoother.data[i], '.k')
    plt.title(f"timeseries {i+1}"); plt.xlabel('time')

    plt.fill_between(range(len(smoother.data[i])), low[i], up[i], alpha=0.3)

圖片

3.基于Tsmoothie的極端異常值檢測

事實上,基于smoother生成的范圍區域,我們可以進行異常值的檢測:

圖片

可以看到,在藍色范圍以外的點,都屬于異常值。我們可以輕易地將這些異常值標紅或記錄,以便后續的處理。

_low, _up = smoother.get_intervals('sigma_interval', n_sigma=2)
series['low'] = np.hstack([series['low'], _low[:,[-1]]])
series['up'] = np.hstack([series['up'], _up[:,[-1]]])
is_anomaly = np.logical_or(
    series['original'][:,-1] > series['up'][:,-1],
    series['original'][:,-1] < series['low'][:,-1]
).reshape(-1,1)

假設藍色范圍interval的最大值為up、最小值為low,如果存在 data > up 或 data < low 則表明此數據是異常點。

使用以下代碼通過滾動數據點進行平滑化和異常檢測,就能保存得到上方的GIF動圖。

上滑查看更多代碼

# Origin: https://github.com/cerlymarco/MEDIUM_NoteBook/blob/master/Anomaly_Detection_RealTime/Anomaly_Detection_RealTime.ipynb
import numpyas np
import matplotlib.pyplotas plt
from celluloidimport Camera
from collectionsimport defaultdict
from functoolsimport partial
from tqdmimport tqdm

from tsmoothie.utils_funcimport sim_randomwalk, sim_seasonal_data
from tsmoothie.smootherimport *


def plot_history(ax, i, is_anomaly, window_len, color='blue', **pltargs):

posrange = np.arange(0,i)

ax.fill_between(posrange[window_len:],
pltargs['low'][1:], pltargs['up'][1:],
color=color, alpha=0.2)
if is_anomaly:
ax.scatter(i-1, pltargs['original'][-1], c='red')
else:
ax.scatter(i-1, pltargs['original'][-1], c='black')
ax.scatter(i-1, pltargs['smooth'][-1], c=color)

ax.plot(posrange, pltargs['original'][1:],'.k')
ax.plot(posrange[window_len:],
pltargs['smooth'][1:], color=color, linewidth=3)

if 'ano_id' in pltargs.keys():
if pltargs['ano_id'].sum() >0:
not_zeros = pltargs['ano_id'][pltargs['ano_id']!=0]-1
ax.scatter(not_zeros, pltargs['original'][1:][not_zeros],
c='red', alpha=1.)

np.random.seed(42)

n_series, timesteps =3,200

data = sim_randomwalk(n_series=n_series, timesteps=timesteps,
process_noise=10, measure_noise=30)

window_len =20

fig = plt.figure(figsize=(18,10))
camera = Camera(fig)

axes = [plt.subplot(n_series,1,ax+1)for axin range(n_series)]
series = defaultdict(partial(np.ndarray, shape=(n_series,1), dtype='float32'))

for iin tqdm(range(timesteps+1), total=(timesteps+1)):

if i >window_len:

smoother = ConvolutionSmoother(window_len=window_len, window_type='ones')
smoother.smooth(series['original'][:,-window_len:])

series['smooth'] = np.hstack([series['smooth'], smoother.smooth_data[:,[-1]]])

_low, _up = smoother.get_intervals('sigma_interval', n_sigma=2)
series['low'] = np.hstack([series['low'], _low[:,[-1]]])
series['up'] = np.hstack([series['up'], _up[:,[-1]]])

is_anomaly = np.logical_or(
series['original'][:,-1] > series['up'][:,-1],
series['original'][:,-1] < series['low'][:,-1]
).reshape(-1,1)

if is_anomaly.any():
series['ano_id'] = np.hstack([series['ano_id'], is_anomaly*i]).astype(int)

for sin range(n_series):
pltargs = {k:v[s,:]for k,vin series.items()}
plot_history(axes[s], i, is_anomaly[s], window_len,
**pltargs)

camera.snap()

if i >=timesteps:
continue

series['original'] = np.hstack([series['original'], data[:,[i]]])


print('CREATING GIF...')# it may take a few seconds
camera._photos = [camera._photos[-1]] + camera._photos
animation = camera.animate()
animation.save('animation1.gif', codec="gif", writer='imagemagick')
plt.close(fig)
print('DONE')


注意,異常點并非都是負面作用,在不同的應用場景下,它們可能代表了不同的意義。

圖片

比如在股票中,它或許可以代表著震蕩行情中某種趨勢反轉的信號

或者在家庭用電量分析中,它可能代表著某個時刻的用電峰值,根據這個峰值我們可以此時此刻開啟了什么樣的電器。

所以異常點的作用需要根據不同應用場景進行不同的分析,才能找到它真正的價值。

圖片

總而言之,Tsmoothie 不僅可以使用多種平滑技術平滑化我們的時序數據,讓我們的模型訓練更加有效,還可以根據平滑結果找出數據中的離群點,是我們做數據分析和研究的一個好幫手,非常有價值。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2722

    瀏覽量

    47574
  • 數據
    +關注

    關注

    8

    文章

    7085

    瀏覽量

    89214
  • 代碼
    +關注

    關注

    30

    文章

    4803

    瀏覽量

    68754
  • 平滑
    +關注

    關注

    0

    文章

    2

    瀏覽量

    6340
收藏 人收藏

    評論

    相關推薦

    用于光譜色散平滑技術的雙通調制器實驗研究

    在慣性約束聚變中,輻照的均勻性直接影響到內爆實驗的效果,通常結合各種空間、時間平滑技術提高光束的均勻性。光譜色散平滑技術正是一種常用的時間平滑
    發表于 06-02 10:05

    基于FPGA的圖像平滑處理

    作為圖像識別的特征模式;另一個是為適應圖像處理的要求,消除圖像數字化時所混入的噪聲。而對濾波處理的要求也有兩條,一是不能損壞圖像的輪廓及邊緣等重要信息;二是使圖像清晰視覺效果好。平滑濾波是低頻增強的空間
    發表于 07-05 13:51

    關于時序數據庫的內容

    簡介: 這是一篇無法一口氣讀完的、文字過萬[正文字數14390]的長文,這是一個無法中途不上廁所就看完的、關于時序數據庫的視頻[時長111分鐘]分享的文字整理..大家好,很開心能夠和大家一起交流時序數據
    發表于 07-12 08:00

    什么是時序數據庫?

    本文根據演講視頻以及PPT整理而成。本文將主要圍繞以下四個方面進行分享:時序數據時序數據時序數據庫的演變時序數據庫對比總結一、時序數據
    發表于 07-12 08:35

    空時譜估計-空間平滑技術

    空時譜估計-3-空間平滑技術,有需要的下來看看
    發表于 08-05 17:32 ?0次下載

    一個新的保邊平滑函數

    為了彌補活動輪廓算法對自然圖像存在欠、過分割現象,根據圖像不同區域對分割貢獻各異,設計了一個新的保邊平滑函數。該函數對不同區域自適應選擇擴散方式;結合水平集建立了改進全變分保邊平滑分割模型,同時依
    發表于 01-16 18:37 ?0次下載
    一個新的保邊<b class='flag-5'>平滑</b>函數

    TableStore時序數據存儲 - 架構篇

    庫及同一套技術架構。?時序數據模型在定義時序數據模型之前,我們先對時序數據做一個抽象的表述。個體或群體(WHO):描述產生數據的物體,可以是
    發表于 08-08 16:17 ?594次閱讀
    TableStore<b class='flag-5'>時序數據</b>存儲 - 架構篇

    時序數據庫的前世今生

    ? 時序數據庫忽然火了起來。Facebook開源了beringei時序數據庫,基于PostgreSQL打造的時序數據庫TimeScaleDB也開源了。時序數據庫作為物聯網方向一個非常重
    的頭像 發表于 12-17 17:51 ?3626次閱讀

    別克平滑度測定儀的技術參數具體是怎樣的

    別克平滑度測定儀 紙張平滑度測定儀 產品用途及適用范圍:? 紙張平滑度測定儀(無汞)(以下簡稱平滑儀)的各項技術要求和檢測方法符合國際標準I
    發表于 06-03 15:43 ?761次閱讀

    華為時序數據庫為智慧健康養老行業貢獻應用之道

    隨著 IoT 技術的快速發展,物聯網設備產生的數據呈爆炸式增長。這些數據通常隨時間產生,稱之為時序數據。這樣的一種專門用于管理時序數據
    的頭像 發表于 11-07 15:10 ?5927次閱讀

    華為PB級時序數據庫Gauss DB,助力海量數據處理

    ??近年來,時序數據的應用更為廣泛,包括物聯網、金融領域、監控領域、醫學領域、農業生產領域等各方面,都在大量使用時序數據,通過數據來研究對象的趨勢性、規律性、異常性;并且在 5G 與人工智能的浪潮下
    的頭像 發表于 10-15 19:15 ?1149次閱讀
    華為PB級<b class='flag-5'>時序數據</b>庫Gauss DB,助力海量<b class='flag-5'>數據</b>處理

    物聯網場景海量時序數據存儲與處理的關鍵技術

    時序數據是隨時間不斷產生的一系列數據,例如持續監控的氣象變化數據、股市交易記錄、應用監控數據等,通常一個時序數據點可以由
    發表于 12-27 11:58 ?2385次閱讀

    涂鴉推出NekoDB時序數據庫,助力全球客戶實現低成本部署

    隨著IoT技術逐漸成熟,眾多設備產出的數據呈現指數級增長。企業亟需用行之有效的方式管理海量時序數據。由此,各類時序數據庫開始成為市場寵兒。與市場需求相悖的是,
    的頭像 發表于 07-24 10:08 ?2103次閱讀
    涂鴉推出NekoDB<b class='flag-5'>時序數據</b>庫,助力全球客戶實現低成本部署

    時序數據庫是什么?時序數據庫的特點

    時序數據庫是一種在處理時間序列數據方面具有高效和專門化能力的數據庫。它主要用于存儲和處理時間序列數據,比如傳感器數據、監控
    的頭像 發表于 04-26 16:02 ?675次閱讀

    PWM技術如何實現電機的平滑啟動和停止

    PWM(脈沖寬度調制)技術在電機控制中實現平滑啟動和停止的功能,主要通過精確調節電機輸入電壓或電流的波形來實現。這種技術能夠顯著減少電機在啟動和停止過程中的機械沖擊和振動,從而延長電機壽命并提高系統的穩定性。以下將詳細闡述PWM
    的頭像 發表于 08-12 17:53 ?1953次閱讀
    主站蜘蛛池模板: 国产精品成人无码免费视频| 中文字幕专区高清在线观看| 亚州笫一色惰网站| a视频免费在线| 精品久久99麻豆蜜桃666| 色综合久久中文色婷婷| 78m成人亚洲| 久久久国产精品免费A片蜜芽广| 天美麻豆成人AV精品| 99热这里只有精品9| 久久91精品国产91| 亚洲日本天堂在线| 国产片MV在线观看| 双腿打开揉弄高潮H苏安安秦慕深 双腿被绑成M型调教PLAY照片 | 午夜人妻理论片天堂影院| 欧美z000z猪| 在线 无码 中文 强 乱| 精品精品国产自在现拍| 亚洲成在人线视频| 国产欧美日韩视频怡春院| 色偷偷网址| 国产精品96久久久久久AV网址| 漂亮美女2018完整版| vr亚洲成年网址在线观看| 男人免费网站| WW.国产人妻人伦精品| 欧美乱妇15p图| xxx日本黄色| 青青娱乐网| 调教日本美女| 特级毛片内射WWW无码| 国产AV果冻传奇麻豆| 色欲人妻无码AV专区| 国产成人免费片在线视频观看| 少妇精品久久久一区二区三区| 国产成人精品视频频| 午夜想想爱午夜剧场| 精品一区二区三区AV天堂| 一区二区三区毛AAAA片特级| 久久足恋网| abp-146|