判断时序数据的周期性
思路:
- 取最近两个周期的数据分别做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天
思考:如何计算出一条曲线的周期呢?
参见:计算时序数据的周期性
作者:Standby — 一生热爱名山大川、草原沙漠,还有我们小郭宝贝!
出处:http://www.cnblogs.com/standby/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/standby/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。