推薦4個優秀的 Python 時間序列分析庫

時間序列分析在金融和醫療保健等領域至關重要,在這些領域,理解隨時間變化的數據模式至關重要。在本文中,我們將介紹四個主要的Python庫——statmodels、tslearn、tssearch和tsfresh——每個庫都針對時間序列分析的不同方面進行了定制。這些庫為從預測到模式識別的任務提供了強大的工具,使它們成為各種應用程序的寶貴資源。

我們使用來自Kaggle的數據集,通過加速度計數為各種身體活動進行分析。這些活動被分為12個不同的類別,每個類別對應一個特定的身體動作,如站立、坐著、行走,或從事更有活力的活動,如慢跑和騎自行車。每個活動都記錄了一分鐘的持續時間,提供了豐富的時間序列數據源。

用于此分析的庫有:

 # statsmodelsfrom statsmodels.tsa.seasonal import seasonal_decomposefrom statsmodels.tsa.stattools import adfullerfrom statsmodels.graphics.tsaplots import plot_acf#tslearnfrom tslearn.barycenters import dtw_barycenter_averaging# tssearchfrom tssearch import get_distance_dict, time_series_segmentation, time_series_search, plot_search_distance_result# tsfreshfrom tsfresh import extract_featuresfrom tsfresh.feature_selection.relevance import calculate_relevance_tablefrom tsfresh.feature_extraction import EfficientFCParametersfrom tsfresh.utilities.dataframe_functions import impute

技術交流與源碼獲取

技術要學會交流、分享,不建議閉門造車。一個人可以走的很快、一堆人可以走的更遠。

好的文章離不開粉絲的分享、推薦,資料干貨、資料分享、數據、技術交流提升,均可加交流群獲取,群友已超過2000人,添加時最好的備注方式為:來源+興趣方向,方便找到志同道合的朋友。

技術交流、代碼、數據獲取方式如下

方式①、添加微信號:dkl88194,備注:來自CSDN + 技術交流
方式②、微信搜索公眾號:Python學習與數據挖掘,后臺回復:技術交流

資料1
在這里插入圖片描述
資料2

我們打造了《100個超強算法模型》,特點:從0到1輕松學習,原理、代碼、案例應有盡有,所有的算法模型都是按照這樣的節奏進行表述,所以是一套完完整整的案例庫。

很多初學者是有這么一個痛點,就是案例,案例的完整性直接影響同學的興致。因此,我整理了 100個最常見的算法模型,在你的學習路上助推一把!

在這里插入圖片描述

1、Statsmodels

從statmodels庫中,兩個基本函數在理解從x, y和z方向收集的加速度數據的特征方面起著關鍵作用。

adfuller函數是確定時間序列信號平穩性的有力工具。通過對我們的數據進行Augmented Dickey-Fuller檢驗,可以確定加速度信號是否表現出平穩的行為,這是許多時間序列分析技術的基本要求。這個測試幫助我們評估數據是否隨時間而變化。

 def activity_stationary_test(dataframe, sensor, activity):dataframe.reset_index(drop=True)adft = adfuller(dataframe[(dataframe['Activity'] == activity)][sensor], autolag='AIC')output_df = pd.DataFrame({'Values':[adft[0], adft[1], adft[4]['1%']], 'Metric':['Test Statistics', 'p-value', 'critical value (1%)']})print('Statistics of {} sensor:\n'.format(sensor), output_df)print()if (adft[1] < 0.05) & (adft[0] < adft[4]['1%']):print('The signal is stationary')else:print('The signal is non-stationary')

seasonal_decomposition函數提供了對時間序列數據結構的寶貴見解。它將時間序列分解為三個不同的組成部分:趨勢、季節性和殘差。這種分解使我們能夠可視化和理解加速度數據中的潛在模式和異常。

  def activity_decomposition(dataframe, sensor, activity):dataframe.reset_index(drop=True)data = dataframe[(dataframe['Activity'] == activity)][sensor]decompose = seasonal_decompose(data, model='additive', extrapolate_trend='freq', period=50)fig = decompose.plot()fig.set_size_inches((12, 7))fig.axes[0].set_title('Seasonal Decomposition Plot')fig.axes[3].set_xlabel('Indices')plt.show()

在這里插入圖片描述

2、Tslearn

如果使用tslearn庫進行時間序列分析。可以采用分割方法,將連續的加速信號分解成特定長度的離散段或窗口(例如,150個數據點)。這些片段提供了行走過程中運動的顆粒視圖,并成為進一步分析的基礎。重要的是,我們在相鄰部分之間使用了50個數據點的重疊,從而可以更全面地覆蓋潛在的動態。

 template_length = 150overlap = 50 # Adjust the overlap value as neededsegments = [signal[i:i + template_length] for i in range(0, len(signal) - template_length + 1, overlap)]

在這里插入圖片描述

為了從這些片段中獲得一個封裝行走典型特征的代表性模板,我們使用了dtw_barycenter_averaging函數。該方法采用動態時間規整(Dynamic Time Warping, DTW)對分割的時間序列進行對齊和平均,有效地創建了一個捕捉步行運動中心趨勢的模板。

  template_signal = dtw_barycenter_averaging(segments)template_signal = template_signal.flatten()

生成的模板為后續的分類和比較任務提供了有價值的參考,有助于基于x軸加速度的步行活動識別和分析。

在這里插入圖片描述

3、Tssearch

對于tssearch庫使用time_series_segmentation函數,通過動態時間規整(DTW)或其他相似性度量來識別輸入時間序列中與所提供的模板信號最相似的片段。

該函數的主要目標是定位和提取與模板信號密切匹配的輸入時間序列片段。通過將模板信號與輸入時間序列進行比較,可以找到這些片段,該函數返回輸入時間序列中這些片段開始的位置或索引。

segment_distance = get_distance_dict(["Dynamic Time Warping"])segment_results = time_series_segmentation(segment_distance, template_signal, signal_np)for k in segment_results:plt.figure(figsize=(15, 3))plt.plot(signal_np, color='gray')plt.vlines(segment_results[k], np.min(signal_np)-1, np.max(signal_np) + 1, 'C1')plt.xlabel('Indices')plt.ylabel('Amplitude')plt.title(k)

tssearch庫中還有另一個用于發現時間序列數據中的相似性和差異性的方法。首先,我們配置了一個字典dict_distances來指定搜索的距離度量。定義了兩種不同的方法。第一個,標記為“elastic”,采用動態時間規整(DTW)作為相似性度量。使用特定的參數定制DTW,例如dtw_type設置為“sub-dtw”,alpha設置為0.5,允許靈活的時間序列對齊和比較。然后是“lockstep”,它利用歐幾里得距離以一種更嚴格的方式來衡量相似性。有了這些距離配置,就可以使用time_series_search函數執行時間序列搜索,將模板信號與目標信號(signal_np)進行比較,并指定前30個匹配項的輸出。

dict_distances = {"elastic": {"Dynamic Time Warping": {"function": "dtw","parameters": {"dtw_type": "sub-dtw", "alpha": 0.5},}},"lockstep": {"Euclidean Distance": {"function": "euclidean_distance","parameters": "",}}}result = time_series_search(dict_distances, template_signal, signal_np, output=("number", 30))plot_search_distance_result(result, signal_np)

在這里插入圖片描述

在這里插入圖片描述

這是一種時間序列聚類的簡單的方法,并且可解釋性很強。

4、Tsfresh

tsfresh庫則是一個很好的自動化特征提取過程的工具。effentfcparameters()定義了一組提取設置,它指定了特征提取參數和配置。這些設置可以控制在提取過程中計算哪些特征。然后就可以使用extract_features函數應用進行特征的提取。這里應該將“Activity”列作為標識符列,并提供了特征提取參數。重要的是,該庫可以對缺失值(NaN)的特征進行自動刪除,結果保存在x_extract中,是從時間序列數據中提取的大量特征集合。Tsfresh簡化了通常復雜且耗時的特征工程過程,為時間序列分析提供了寶貴的資源。

 extraction_settings = EfficientFCParameters()X_extracted = extract_features(final_df, column_id='Activity',default_fc_parameters=extraction_settings,# we impute = remove all NaN features automaticallyimpute_function=impute, show_warnings=False)X_extracted= pd.DataFrame(X_extracted, index=X_extracted.index, columns=X_extracted.columns)values = list(range(1, 13))y = pd.Series(values, index=range(1, 13))relevance_table_clf = calculate_relevance_table(X_extracted, y)relevance_table_clf.sort_values("p_value", inplace=True)relevance_table_clf.head(10)

在這里插入圖片描述

 top_features = relevance_table_clf["feature"].head(10)x_features = X_extracted[top_features]

在這里插入圖片描述

總結

本文向您介紹了時間序列分析的四個基本Python庫:statmodels、tslearn、tssearch和tsfresh。時間序列分析是金融和醫療保健等各個領域的重要工具,在這些領域,我們需要了解數據隨時間的變化趨勢,以便做出明智的決策和預測。

每個庫都專注于時間序列分析的不同方面,選擇哪個庫取決于具體問題。通過結合使用這些庫,可以處理各種與時間相關的挑戰,從預測財務趨勢到對醫療保健中的活動進行分類。當要開始自己的時間序列分析項目時,請記住這些庫,結合著使用它們可以幫助你解決很多的實際問題。

kaggle數據集:https://www.kaggle.com/datasets/gaurav2022/mobile-health/discussion/375938

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213503.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213503.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213503.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最長子字符串的長度 (一) - 華為OD統一考試(C卷)

OD統一考試&#xff08;C卷&#xff09; 分值&#xff1a; 100分 題解&#xff1a; Java / Python / C 題目描述 給你一個字符串 s&#xff0c;字符串s首尾相連成一個環形&#xff0c;請你在環中找出字符出現了偶數次最長子字符串的長度。 輸入描述 輸入是一串小寫字母組成的…

VS2015編譯GDAL3.2.0+opencl+C#

參考借鑒https://www.cnblogs.com/litou/p/15004877.html 參考借鑒https://www.cnblogs.com/xiaowangba/p/6313903.html 參考借鑒gdal、proj、geos、sqlite等在VS2015下編譯和配置_vs2015編譯sqlite3-CSDN博客 參考借鑒Windows下GDAL3.1.2編譯 (VS2015)_gdal windows編譯-CS…

字符串String

字符串字面量 let s "hello";變量s屬于字符串字面量&#xff0c;它們屬于硬編碼進程序的字符串值&#xff0c;屬于不可變的類型。但并不是所有字符串的值都能夠在編寫代碼時確定。 String類型 String類型會在堆上分配到自己需要的存儲空間&#xff0c;所以它能夠…

Nacos簡介

1.Nacos簡介 1.1.為什么叫Nacos&#xff1f; 前四個字母分別為Naming和Configuration的前兩個字母&#xff0c;最后的s為service。 1.2.Nacos是什么&#xff1f; nacos是第二代微服務SpringCloudAlibaba開源的一款注冊中心和分布式配置中心組件&#xff0c;其功能上為第一代微…

聲明式數據建模、定義簡單易懂:下一代 ORM 助你效率倍增 | 開源日報 No.102

prisma/prisma Stars: 34.0k License: Apache-2.0 Prisma 是一個下一代 ORM&#xff0c;包括以下工具&#xff1a; Prisma Client&#xff1a;為 Node.js 和 TypeScript 自動生成的類型安全查詢構建器Prisma Migrate&#xff1a;聲明式數據建模和遷移系統Prisma Studio&#…

山人求道篇:五、交易中的大道至簡與奧卡姆剃刀

量化的剃刀不是減去因子、減去代碼&#xff0c;而是減去冗余信息量 市面上有的策略對各品種設置了不同參數&#xff0c;每個品種進場不一樣就算了&#xff0c;出場參數還不一樣&#xff0c;那你說他到底賺的是什么利潤呢&#xff1f; 他自己也不知道&#xff0c;主要目的是為…

鴻蒙應用開發(二)環境搭建

開發流程 IDE下載 首先下載HUAWEI DevEco Studio&#xff0c;介紹首次啟動DevEco Studio的配置向導&#xff1a; 運行已安裝的DevEco Studio&#xff0c;首次使用&#xff0c;請選擇Do not import settings&#xff0c;單擊OK。安裝Node.js與ohpm。node.js 是基于 V8 引擎構…

JavaScript常用技巧專題二

文章目錄 一、前言二、生成隨機字符串三、轉義HTML特殊字符四、單詞首字母大寫五、將字符串轉換為小駝峰六、刪除數組中的重復值七、移除數組中的假值八、獲取兩個數字之間的隨機數九、將數字截斷到固定的小數點十、日期10.1、計算兩個日期之間天數10.2、從日期中獲取是一年中的…

【Java編程實現 9 * 9 乘法表格打印四種形態,七種打法】

Java編程實現 9 * 9 乘法表格打印四種形態&#xff0c;七種方法打印 廢話篇打印 9 * 9 乘法表格嵌套for循環實現左下角打印嵌套for循環實現左上角打印嵌套for循環實現右上角打印嵌套for循環實現右下角打印 使用while循環打印 9 * 9 乘法表格&#xff08;一&#xff09;使用whil…

1003 我要通過!

“答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬于 PAT 的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件&#xff0c;系統就輸出“答案正確”&#xff0c;否則輸出“答案錯誤”。 得到“答案正確”的條件是&#xff1a; 字符串中必須僅有 P、 A、 T這三種…

詳解Keras3.0 Layers API: Core layers

1、Input keras.Input(shapeNone,batch_sizeNone,dtypeNone,sparseNone,batch_shapeNone,nameNone,tensorNone, ) 參數說明 shape: 輸入張量的形狀。如果為None&#xff0c;則可以動態地指定形狀。batch_size: 批處理大小。如果為None&#xff0c;則可以動態地指定批處理大小…

基于SpringBoot+Vue前后端分離的景點數據分析平臺(Java畢業設計)

大家好&#xff0c;我是DeBug&#xff0c;很高興你能來閱讀&#xff01;作為一名熱愛編程的程序員&#xff0c;我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里&#xff0c;我將會結合實際項目經驗&#xff0c;分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

awt中文亂碼-Intellij IDEA

亂碼的根本原因在于秦始皇嘎太早了&#xff08;bushi 解決方法&#xff1a;肉眼可見的編碼設置統一為GBK 1.打開設置找到文件編碼 2.肉眼可見的編碼統統改成GBK 有人該問了&#xff0c;為什么不改成utf-8&#xff0c;因為awt的編碼由操作系統決定&#xff0c;我的是win家庭中…

Nextui使用

安裝和使用 https://nextui.org/docs/frameworks/nextjs 自定義主題 https://nextui.org/docs/customization/customize-theme // tailwind.config.js const {nextui} require("nextui-org/react");/** type {import(tailwindcss).Config} */ module.exports {…

deepstream docker安裝

介紹 deepstream為dGPU和Jetson平臺提供dockers containers&#xff0c;這些鏡像可以方便開發者很快地部署deepstream應用。deepstream的docker images可以在NGC web中得到。 安裝Docker Docker 是一個開源的容器化平臺&#xff0c;它允許你構建&#xff0c;測試&#xff0c…

29. 如何在Spring所有BeanDefinition注冊完后做擴展?

如何在Spring所有BeanDefinition注冊完后做擴展? 通常可以使用beanFactoryPostProcessor 對已注冊的BeanDefinition進行修改或者通過它的子接口BeanDefinitionRegistryPostProcessor 再進行注冊額外擴展 BeanDefinitionRegistryPostProcessor 1、概述 public interface Bea…

0基礎學java-day18-( 坦克大戰【2】)

課件資源放在文末 1.線程-應用到坦克大戰 1.1 坦克大戰 0.3 【坦克類&#xff1a;包括坦克的基本屬性&#xff0c;以及坦克的移動方法】 package com.hspedu.tankgame03;/*** author 韓順平* version 1.0*/ public class Tank {private int x;//坦克的橫坐標private int y;…

XMemcached network layout exception java.nio.channels.ClosedChannelException

java.nio.channels.ClosedChannelException 表示嘗試在已關閉的通道上進行 I/O 操作&#xff0c;通常發生在網絡連接意外關閉后嘗試在關閉的通道上執行讀取或寫入操作。 XMemcached network layout exception 可能是由于 XMemcached 客戶端在嘗試與 Memcached 服務器通信時發生…

一些AG10K FPGA 調試的建議-Douglas

PLL AGM FPGA 在配置成功時&#xff0c;PLL 已經完成鎖定&#xff0c;lock 信號已經變高&#xff1b;如果原設計中用 lock 信號輸出實現系統 reset 的復位功能&#xff0c;就不能正確完成上電復位&#xff1b;同時&#xff0c;為了保證 PLL 相移的穩定&#xff0c;我們需要在 P…

C++筆記之重載和重寫辨別

C筆記之重載和重寫辨別 code review! 文章目錄 C筆記之重載和重寫辨別重載&#xff08;overloading&#xff09;重寫&#xff08;Overriding&#xff09; 在C中&#xff0c;重載&#xff08;overloading&#xff09;和重寫&#xff08;overriding&#xff09;是面向對象編程中…