自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python時(shí)間序列分析庫(kù)介紹:statsmodels、tslearn、tssearch、tsfresh

開(kāi)發(fā)
在本文中,我們將介紹四個(gè)主要的Python庫(kù)——statmodels、tslearn、tssearch和tsfresh——每個(gè)庫(kù)都針對(duì)時(shí)間序列分析的不同方面進(jìn)行了定制。這些庫(kù)為從預(yù)測(cè)到模式識(shí)別的任務(wù)提供了強(qiáng)大的工具,使它們成為各種應(yīng)用程序的寶貴資源。

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

我們使用來(lái)自Kaggle的數(shù)據(jù)集,通過(guò)加速度計(jì)數(shù)為各種身體活動(dòng)進(jìn)行分析。這些活動(dòng)被分為12個(gè)不同的類(lèi)別,每個(gè)類(lèi)別對(duì)應(yīng)一個(gè)特定的身體動(dòng)作,如站立、坐著、行走,或從事更有活力的活動(dòng),如慢跑和騎自行車(chē)。每個(gè)活動(dòng)都記錄了一分鐘的持續(xù)時(shí)間,提供了豐富的時(shí)間序列數(shù)據(jù)源。

用于此分析的庫(kù)有:

# statsmodels
 from statsmodels.tsa.seasonal import seasonal_decompose
 from statsmodels.tsa.stattools import adfuller
 from statsmodels.graphics.tsaplots import plot_acf
 
 #tslearn
 from tslearn.barycenters import dtw_barycenter_averaging
 
 # tssearch
 from tssearch import get_distance_dict, time_series_segmentation, time_series_search, plot_search_distance_result
 
 # tsfresh
 from tsfresh import extract_features
 from tsfresh.feature_selection.relevance import calculate_relevance_table
 from tsfresh.feature_extraction import EfficientFCParameters
 from tsfresh.utilities.dataframe_functions import impute

Statsmodels

從statmodels庫(kù)中,兩個(gè)基本函數(shù)在理解從x, y和z方向收集的加速度數(shù)據(jù)的特征方面起著關(guān)鍵作用。

adfuller函數(shù)是確定時(shí)間序列信號(hào)平穩(wěn)性的有力工具。通過(guò)對(duì)我們的數(shù)據(jù)進(jìn)行Augmented Dickey-Fuller檢驗(yàn),可以確定加速度信號(hào)是否表現(xiàn)出平穩(wěn)的行為,這是許多時(shí)間序列分析技術(shù)的基本要求。這個(gè)測(cè)試幫助我們?cè)u(píng)估數(shù)據(jù)是否隨時(shí)間而變化。

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函數(shù)提供了對(duì)時(shí)間序列數(shù)據(jù)結(jié)構(gòu)的寶貴見(jiàn)解。它將時(shí)間序列分解為三個(gè)不同的組成部分:趨勢(shì)、季節(jié)性和殘差。這種分解使我們能夠可視化和理解加速度數(shù)據(jù)中的潛在模式和異常。

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

Tslearn

如果使用tslearn庫(kù)進(jìn)行時(shí)間序列分析??梢圆捎梅指罘椒?,將連續(xù)的加速信號(hào)分解成特定長(zhǎng)度的離散段或窗口(例如,150個(gè)數(shù)據(jù)點(diǎn))。這些片段提供了行走過(guò)程中運(yùn)動(dòng)的顆粒視圖,并成為進(jìn)一步分析的基礎(chǔ)。重要的是,我們?cè)谙噜彶糠种g使用了50個(gè)數(shù)據(jù)點(diǎn)的重疊,從而可以更全面地覆蓋潛在的動(dòng)態(tài)。

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

為了從這些片段中獲得一個(gè)封裝行走典型特征的代表性模板,我們使用了dtw_barycenter_averaging函數(shù)。該方法采用動(dòng)態(tài)時(shí)間規(guī)整(Dynamic Time Warping, DTW)對(duì)分割的時(shí)間序列進(jìn)行對(duì)齊和平均,有效地創(chuàng)建了一個(gè)捕捉步行運(yùn)動(dòng)中心趨勢(shì)的模板。

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

生成的模板為后續(xù)的分類(lèi)和比較任務(wù)提供了有價(jià)值的參考,有助于基于x軸加速度的步行活動(dòng)識(shí)別和分析。

Tssearch

對(duì)于tssearch庫(kù)使用time_series_segmentation函數(shù),通過(guò)動(dòng)態(tài)時(shí)間規(guī)整(DTW)或其他相似性度量來(lái)識(shí)別輸入時(shí)間序列中與所提供的模板信號(hào)最相似的片段。

該函數(shù)的主要目標(biāo)是定位和提取與模板信號(hào)密切匹配的輸入時(shí)間序列片段。通過(guò)將模板信號(hào)與輸入時(shí)間序列進(jìn)行比較,可以找到這些片段,該函數(shù)返回輸入時(shí)間序列中這些片段開(kāi)始的位置或索引。

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庫(kù)中還有另一個(gè)用于發(fā)現(xiàn)時(shí)間序列數(shù)據(jù)中的相似性和差異性的方法。首先,我們配置了一個(gè)字典dict_distances來(lái)指定搜索的距離度量。定義了兩種不同的方法。第一個(gè),標(biāo)記為“elastic”,采用動(dòng)態(tài)時(shí)間規(guī)整(DTW)作為相似性度量。使用特定的參數(shù)定制DTW,例如dtw_type設(shè)置為“sub-dtw”,alpha設(shè)置為0.5,允許靈活的時(shí)間序列對(duì)齊和比較。然后是“l(fā)ockstep”,它利用歐幾里得距離以一種更嚴(yán)格的方式來(lái)衡量相似性。有了這些距離配置,就可以使用time_series_search函數(shù)執(zhí)行時(shí)間序列搜索,將模板信號(hào)與目標(biāo)信號(hào)(signal_np)進(jìn)行比較,并指定前30個(gè)匹配項(xiàng)的輸出。

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)

這是一種時(shí)間序列聚類(lèi)的簡(jiǎn)單的方法,并且可解釋性很強(qiáng)。

Tsfresh

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

extraction_settings = EfficientFCParameters()
 X_extracted = extract_features(final_df, column_id='Activity',
                      default_fc_parameters=extraction_settings,
                      # we impute = remove all NaN features automatically
                      impute_functinotallow=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]

總結(jié)

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

每個(gè)庫(kù)都專注于時(shí)間序列分析的不同方面,選擇哪個(gè)庫(kù)取決于具體問(wèn)題。通過(guò)結(jié)合使用這些庫(kù),可以處理各種與時(shí)間相關(guān)的挑戰(zhàn),從預(yù)測(cè)財(cái)務(wù)趨勢(shì)到對(duì)醫(yī)療保健中的活動(dòng)進(jìn)行分類(lèi)。當(dāng)要開(kāi)始自己的時(shí)間序列分析項(xiàng)目時(shí),請(qǐng)記住這些庫(kù),結(jié)合著使用它們可以幫助你解決很多的實(shí)際問(wèn)題。

kaggle數(shù)據(jù)集:https://www.kaggle.com/datasets/gaurav2022/mobile-health/discussion/375938


責(zé)任編輯:華軒 來(lái)源: DeepHub IMBA
相關(guān)推薦

2025-01-16 16:24:07

2021-08-05 13:49:39

Python工具開(kāi)發(fā)

2023-04-09 15:57:39

時(shí)間序列分析Python開(kāi)發(fā)

2024-09-09 14:57:31

2022-10-10 14:36:44

Python時(shí)間序列機(jī)器學(xué)習(xí)

2025-01-13 07:23:14

PythonAeon開(kāi)發(fā)

2024-02-27 17:32:30

時(shí)間序列分析庫(kù)PyTimeTK數(shù)據(jù)科學(xué)

2022-11-14 14:36:59

數(shù)據(jù)集Python自相關(guān)

2025-03-14 10:13:41

Python時(shí)間序列特征機(jī)器學(xué)習(xí)

2024-06-03 11:05:11

2021-03-31 11:20:57

PythonADTK異常檢測(cè)

2025-01-14 14:04:45

2010-01-14 15:46:27

C++標(biāo)準(zhǔn)庫(kù)

2023-09-20 11:42:52

2021-07-01 21:46:30

PythonHot-Winters數(shù)據(jù)

2021-07-02 10:05:45

PythonHot-winters指數(shù)平滑

2023-02-16 17:44:13

2022-03-22 09:00:00

數(shù)據(jù)庫(kù)SingleStor技術(shù)

2024-04-26 12:29:36

2024-01-18 09:39:00

Python折線圖時(shí)間序列分析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)