使用Pandas和Python從時間序列資料中提取有意義的特徵,包括移動平均,自相關和傅立葉變換。
時間序列分析是理解和預測各行業(如金融、經濟、醫療保健等)趨勢的強大工具。特徵提取是此過程中的關鍵步驟,它涉及將原始資料轉換為有意義的特徵,可用於訓練模型進行預測和分析。在本文中,我們將探索使用Python和Pandas的時間序列特徵提取技術。
在深入研究特徵提取之前,讓我們先簡單回顧一下時間序列資料。時間序列資料是按時間順序索引的資料點序列。時間序列資料的例子包括股票價格、溫度測量和交通資料。時間序列資料可以是單變量,也可以是多變量。單變量時間序列資料只有一個變量,而多變量時間序列資料有多個變量。
有各種各樣的特徵擷取技術可以用於時間序列分析。在本文中,我們將介紹以下技術:
Resampling 重採樣主要是改變時間序列資料的頻率。這對於平滑雜訊或將資料取樣到較低的頻率很有用。 Pandas提供了resample()方法對時間序列資料進行重新取樣。 resample()方法可用於對資料進行上採樣或下採樣。以下是一個如何將時間序列降採樣到每日頻率的範例:
import pandas as pd # create a time series with minute frequency ts = pd.Series([1, 2, 3, 4, 5], index=pd.date_range('2022-01-01', periods=5, freq='T')) # downsample to daily frequency daily_ts = ts.resample('D').sum() print(daily_ts)
在上面的範例中,我們建立了一個以分鐘為頻率的時間序列,然後使用resample()方法將其取樣到每天的頻率。
Moving Average 移動平均是一種透過在滾動視窗上求平均值來平滑時間序列資料的技術。可以幫助去除雜訊並得到數據的趨勢。 Pandas提供了rolling()方法來計算時間序列的平均值。下面是一個如何計算時間序列的平均值的範例:
import pandas as pd # create a time series ts = pd.Series([1, 2, 3, 4, 5]) # calculate the rolling mean with a window size of 3 rolling_mean = ts.rolling(window=3).mean() print(rolling_mean)
我們建立了一個時間序列,然後使用rolling()方法計算視窗大小為3的移動平均值。
可以看到前兩個值因為沒有到達移動平均的最小數量3,所以會產生NAN,如果需要的話可以再使用fillna方法進行填充。
Exponential Smoothing 指數平滑是一種透過賦予最近值更多權重來平滑時間序列資料的技術。它可以幫助去除雜訊獲得資料的趨勢。 Pandas提供了計算指數移動平均的ewm()方法。
import pandas as pd ts = pd.Series([1, 2, 3, 4, 5]) ts.ewm( alpha =0.5).mean()
在上面的範例中,我們建立了一個時間序列,然後使用ewm()方法計算平滑因子為0.5的指數移動平均。
ewm有很多的參數,這裡我們介紹幾個主要的。
com:根據質心指定衰減
#span 根據範圍指定衰減
halflife 根據半衰期指定衰減
#alpha 指定平滑係數α
以上4個參數都是指定平滑係數α,只是前三個是根據條件計算出來的,最後一個是手動指定,所以至少要有一個,例如上面的例子我們就直接手動設定了0.5
min_periods 視窗中具有值的最小觀察數,預設為0。
adjust 是否進行誤差修正 預設True。
adjust =Ture时公式如下:
adjust =False
Autocorrelation 自相关是一种用于测量时间序列与其滞后版本之间相关性的技术。可以识别数据中重复的模式。Pandas提供了autocorr()方法来计算自相关性。
import pandas as pd # create a time series ts = pd.Series([1, 2, 3, 4, 5]) # calculate the autocorrelation with a lag of 1 autocorr = ts.autocorr(lag=1) print(autocorr)
Fourier Transform 傅里叶变换是一种将时间序列数据从时域变换到频域的技术。可以识别数据中的周期性模式。我们可以使用numpy的fft()方法来计算时间序列的快速傅里叶变换。
import pandas as pd import numpy as np # create a time series ts = pd.Series([1, 2, 3, 4, 5]) # calculate the Fourier transform fft = pd.Series(np.fft.fft(ts).real) print(fft)
这里我们只显示了实数的部分。
在本文中,我们介绍了几种使用Python和Pandas的时间序列特征提取技术。这些技术可以帮助将原始时间序列数据转换为可用于分析和预测的有意义的特征,在训练机器学习模型时,这些特征都可以当作额外的数据输入到模型中,可以增加模型的预测能力。
以上是時間序列特徵提取的Python和Pandas程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!