在Python中如何差分時間序列資料集
差分是一個廣泛用於時間序列的資料變換。在本教程中,你將發現如何使用Python將差分操作應用於時間序列資料。
完成本教程後,你將學到:
- 關於差分運算,包括延遲差分的配置和差分序列。
- 如何開發手動實現的差分運算。
- 如何使用內建的Pandas差分函式。
讓我們開始吧。
為什麼差分時間序列資料?
差分是一種變換時間序列資料集的方法。它可以用於消除序列對時間性的依賴性,即所謂的時間性依賴。這包含趨勢和週期性的結構。
不同的方法可以幫助穩定時間序列的均值,消除時間序列的變化,從而消除(或減少)趨勢和週期性。
– Forecasting: principles and practice215頁
通過從當前觀察中減去先前觀察值來實現差分。
difference(t)= observation(t)- observation(t-1)
這樣可以計算出序列差分。
延遲差分
將連續觀察值之間的差值稱為延遲-1差分。
可以調整延遲差分來適應特定的時間結構。
對於有周期性成分的時間序列,延遲可能是週期性的週期(寬度)。
差分序列
執行差分操作後,如非線性趨勢的情況下,時間結構可能仍然存在。
因此,差分過程可以一直重複,直到所有時間依賴性被消除。
執行差分的次數稱為差分序列。
洗髮水銷售資料集
該資料集描述了3年內洗髮水的月銷量。這些單位是銷售數量,有36個觀察值。原始資料集記為Makridakis,Wheelwright和Hyndman(1998)。
在這裡下載並瞭解有關資料集的更多資訊。下面的例子載入並建立了載入資料集的圖。
from pandasimport read_csv from pandasimport datetime from matplotlibimport pyplot def parser(x): return datetime.strptime('190'+x,'%Y-%m') series= read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser) series.plot() pyplot.show()
執行該示例將建立顯示資料中清晰的線性趨勢圖。
手動差分
我們可以手動差分資料集。這涉及開發一個建立差分資料集的新函式。該函式將通過你提供的序列迴圈,並以指定的間隔或延遲計算差分值。
我們用名為difference()的函式實現此過程。
# create a differenced series
def difference(dataset, interval=1):
diff= list()
for iin range(interval,len(dataset)):
value= dataset[i]- dataset[i- interval]
diff.append(value)
return Series(diff)
我們可以看到,在指定的時間間隔後,函式開始差分資料集,以確保實際上可以計算差分值。定義預設間隔或延遲的值為1。這是一個合理的預設值。另一個改進是能夠指定執行差分操作的時間順序或次數。
以下示例將手動difference()函式應用於洗髮水銷售資料集。
from pandasimport read_csv
from pandasimport datetime
from pandasimport Series
from matplotlibimport pyplot
def parser(x):
return datetime.strptime('190'+x,'%Y-%m')
# create a differenced series
def difference(dataset, interval=1):
diff= list()
for iin range(interval,len(dataset)):
value= dataset[i]- dataset[i- interval]
diff.append(value)
return Series(diff)
series= read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
X= series.values
diff= difference(X)
pyplot.plot(diff)
pyplot.show()
執行示例建立差分資料集並繪製結果。
自動差分
Pandas庫提供了一種自動計算差分資料集的功能。這個diff()函式是由Series和DataFrame物件提供。就像前一節中手動定義的差分函式一樣,它需要一個引數來指定間隔或延遲,在本例中稱為週期(periods)。
下面的例子演示瞭如何在Pandas Series物件上使用內建的差分函式。
from pandasimport read_csv
from pandasimport datetime
from matplotlibimport pyplot
def parser(x):
return datetime.strptime('190'+x,'%Y-%m')
series= read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
diff= series.diff()
pyplot.plot(diff)
pyplot.show()
如上一節所述,執行該示例繪製了差分資料集。
使用Pandas函式的好處需要的程式碼較少,並且它保留差分序列中時間和日期的資訊。
總結
在本教程中,你已經學會了在python中如何將差分操作應用於時間序列資料。
具體來說,你學到了:
- 關於差分運算,包括延遲差分的配置和差分序列。
- 如何開發手動實現的差分運算。
- 如何使用內建的Pandas差分函式。
原文:http://machinelearningmastery.com/difference-time-series-dataset-python/