判斷時序數據的周期性


思路:

- 取最近兩個周期的數據分別做z-score標准化,然后對結果做差,最后在對結果求標准差。

- 比較標准差和1,小於1則是周期性數據。

原始數據

假設周期性是1天,有一條曲線,包含最近兩天的時序數據。

import numpy as np
import pandas as pd
import matplotlib.ticker as mticker
from matplotlib import pyplot as plt

from datetime import datetime
def ts2date(ts):
        ts = int(ts)
        date_str = datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
        return date_str

# 原始數據 series
now = series[-1][0]
lst1 = [ item[1] for item in series if item[0]>now-86400*2 and item[0]<=now-86400 ]
lst2 = [ item[1] for item in series if item[0]>now-86400 ]
plt.figure(figsize=(16,6))
plt.title('raw timeseries')
plt.plot(x,lst1,label='yesterday')
plt.plot(x,lst2,label='today')
plt.grid(True, which='major', c='gray', ls='-', lw=1, alpha=0.2)
plt.legend()
# plt.gca().yaxis.set_major_formatter(mticker.FormatStrFormatter('%.2f mbps'))
plt.show()

z-score標准化

對原始數據做z-score標准化((X−μ)/δ),經過處理的數據符合標准正態分布,即均值為0,標准差為1。

差分然后求方差

diff = arr2-arr1
np.var(diff)     # 0.2019325098269433 < 1 所以是周期性曲線,周期性是1天

 

思考:如何計算出一條曲線的周期呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM