Python时间序列分析库介绍:statsmodels、tslearn、tssearch、tsfresh

时间序列分析在金融和医疗保健等领域至关重要,在这些领域,理解随时间变化的数据模式至关重要。在本文中,我们将介绍四个主要的Python库——statmodels、tslearn、tssearch和tsfresh——每个库都针对时间序列分析的不同方面进行了定制。这些库为从预测到模式识别的任务提供了强大的工具,使它们成为各种应用程序的宝贵资源。

我们使用来自Kaggle的数据集,通过加速度计数为各种身体活动进行分析。这些活动被分为12个不同的类别,每个类别对应一个特定的身体动作,如站立、坐着、行走,或从事更有活力的活动,如慢跑和骑自行车。每个活动都记录了一分钟的持续时间,提供了丰富的时间序列数据源。

用于此分析的库有:

  1. # statsmodels
  2. from statsmodels.tsa.seasonal import seasonal_decompose
  3. from statsmodels.tsa.stattools import adfuller
  4. from statsmodels.graphics.tsaplots import plot_acf
  5. #tslearn
  6. from tslearn.barycenters import dtw_barycenter_averaging
  7. # tssearch
  8. from tssearch import get_distance_dict, time_series_segmentation, time_series_search, plot_search_distance_result
  9. # tsfresh
  10. from tsfresh import extract_features
  11. from tsfresh.feature_selection.relevance import calculate_relevance_table
  12. from tsfresh.feature_extraction import EfficientFCParameters
  13. from tsfresh.utilities.dataframe_functions import impute

Statsmodels

从statmodels库中,两个基本函数在理解从x, y和z方向收集的加速度数据的特征方面起着关键作用。

adfuller函数是确定时间序列信号平稳性的有力工具。通过对我们的数据进行Augmented Dickey-Fuller检验,可以确定加速度信号是否表现出平稳的行为,这是许多时间序列分析技术的基本要求。这个测试帮助我们评估数据是否随时间而变化。

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

seasonal_decomposition函数提供了对时间序列数据结构的宝贵见解。它将时间序列分解为三个不同的组成部分:趋势、季节性和残差。这种分解使我们能够可视化和理解加速度数据中的潜在模式和异常。

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

https://avoid.overfit.cn/post/ce023e947e0246c09a10a3d71f0181c5

posted @ 2023-10-28 09:53  deephub  阅读(151)  评论(0编辑  收藏  举报