zoukankan      html  css  js  c++  java
  • 判断时序数据的周期性

    思路:

    - 取最近两个周期的数据分别做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/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    kubernetes集群系列资料08--deployment介绍
    kubernetes集群系列资料07--RS介绍
    kubernetes集群系列资料06--pod介绍
    kubernetes集群系列资料05--K8S集群命令介绍
    kubernetes集群系列资料04--harbor部署
    uwsgi + nginx 部署python项目(一)
    argparse命令行传参
    Flask的 sqlalchemy 操作要点
    mysql: show full processlist 详解
    MySQL数据库的连接池问题
  • 原文地址:https://www.cnblogs.com/standby/p/14465640.html
Copyright © 2011-2022 走看看