精华内容
下载资源
问答
  • 有X个机组以15分钟为步长的长系列(年月日时分)出力的数据,想处理成每个机组的,以“年月日”为索引值,每行显示1天96个点出力的形式。先利用df.head()把dataframe按96切割成Y份,然后将Y份的第x列(x号机组的出力...

    有X个机组以15分钟为步长的长系列(年月日时分)出力的数据,想处理成每个机组的,以“年月日”为索引值,每行显示1天96个点出力的形式。

    先利用df.head()把dataframe按96切割成Y份,然后将Y份的第x列(x号机组的出力)提取出来,放到list里,再利用concat将list合并为新的dataframe,将该dataframe的列名更改为长系列(年月日),再转置,就可以得到想要的格式。

    1. 已知某元素索引位置,选取该元素

    dataframe 如下,记为df


    输入 df.loc['索引名称‘’,‘列名称’] 即可,例如


    若没有index或列名称,则使用df.iloc[]在对应位置输入索引位置即可。


    2. 删除多行/多列

    使用的前提是,dataframe的index和columns用的是数字,利用了drop()和range()函数。

    DataFrame.drop(labels=Noneaxis=0index=Nonecolumns=Nonelevel=Noneinplace=Falseerrors='raise')

    axis = 0,表示删除行; axis = 1 表示删除列。

    想删除多行/列,用range即可,比如要删除前3行,drop(range(0,3),axis = 0(默认为零,可不写))即可。


    用dataframe.drop()可以删除,默认inplace = false, 即默认只是删除视图,如果要真的删除数,输入inplace=True.

    【注意】inplace=True 删除后index也变了。

    这个是cookbook对drop的解释:

    https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop.html

    3. 多个dataframe中选取列,合并为1个新的dataframe


    用到了

    1)删除dataframe索引,重新赋予从0开始的索引;

        df.reset_index(drop=True,inplace = True), drop = True表示会删除原来的旧索引,否则默认会在原dataframe新增一列;

    2)利用concat将一系列dataframe合并,参考了 https://zhuanlan.zhihu.com/p/27577410

        pd.concat(listhere,axis=1,join_axes = [listhere[0].index]), listhere指要被合并的dataframe们,axis = 1表示按列合并,

       join_axes 设定了合并的起始点,所以要注意保证每个dataframe的索引值一致,否则会按设定的join_axes合并,其他dataframe如果没有这个索引值,就会赋值NAN。

    3)更改dataframe列的名称,利用df.columns = list 。

    4. 控制输出为年-月-日的格式

    5. 数据缺漏的插补

    数据格式是以一分钟为步长的长系列负荷,从数据库读入excel后存在缺漏情况,即并不是每一天的数据都有1440个点。需要把数据处理成15分钟间隔,即1天有96个点。

    Step1. 在excel中,新建一张sheet,第一列索引用excel自动填充,处理成目标范围以1分钟为步长的时间序列,作为index。然后使用vlookup在原始数据中比对index,这样缺漏行会自动返回#NAN值。【由于本身计算精度问题,可能出现两张表上同一个日期转为数值后存在百亿分之一的误差,可先采用rounddown()处理一下,取小数点后8位数字就可以了】

    这一步也可以利用dataframe的merge来操作,没研究暂且不写。

    Step2. 利用pandas.interpolate(inplace=True)进行线性插补缺漏值。

    6. Dataframe 行选择和列选择

    参考了http://blog.csdn.net/u013045749/article/details/48370007 和 http://www.cnblogs.com/kylinlin/p/5231404.html

    在不知道列名的情况下,用索引位置选择列,用df[[列索引]];

    df.iloc[行索引],选取第X行,也可以用df.iloc[0:2]选取第0、1行,df[0:2]也是选取第0、1行。



    展开全文
  • 通常一组时间序列的时间间隔为一恒定值(如1秒,5分钟,12小时,7天,1年),因此时间序列可以作为离散时间数据进行分析处理。 例如:某监控系统的折线图表,显示了请求次数和响应时间随时间的变化趋势 2 Pandas...

    Python教程网www.python88.cn

    1 什么是时间序列

    时间序列是一组按照时间发生先后顺序进行排列的数据点序列。通常一组时间序列的时间间隔为一恒定值(如1秒,5分钟,12小时,7天,1年),因此时间序列可以作为离散时间数据进行分析处理。

    例如:某监控系统的折线图表,显示了请求次数和响应时间随时间的变化趋势

    时间序列图

    2 Pandas的时间类型

    • pd.to_datetime():转换成pandas的时间类型 Timestamp('2018-03-02 00:00:00')
    # pd将时间数据转换成pandas时间类型
    # 1、填入时间的字符串,格式有几种, "2018-01-01" ,”01/02/2018“
    pd.to_datetime("01/02/2017")
    

    如果我们传入的是多个时间点,那么会是什么样的?

    3 Pandas的时间序列类型

    • 1 转换时间序列类型
    from datetime import datetime
    # 传入时间的列表
    date1 = ["2017-01-01", "2017-02-01", "2017-03-01"]
    pd.to_datetime(date1)
    
    # 或者
    date2 = [datetime(2018, 3, 1), datetime(2018, 3, 2), datetime(2018, 3, 3), datetime(2018, 3, 4), datetime(2018, 3, 5)]
    date2 = pd.to_datetime(date2)
    
    # 如果其中有空值
    date3 = [datetime(2018, 3, 1), datetime(2018, 3, 2), np.nan, datetime(2018, 3, 4), datetime(2018, 3, 5)]
    date3 = pd.to_datetime(date3)
    # 结果会变成NaT类型
    DatetimeIndex(['2018-03-01', '2018-03-02', 'NaT', '2018-03-04', '2018-03-05'], dtype='datetime64[ns]', freq=None)
    
    • 2 Pandas的时间序列类型:DatetimeIndex
    # DateTimeIndex
    pd.to_datetime(date1)
    DatetimeIndex(['2018-03-01', '2018-03-02', '2018-03-03', '2018-03-04',
                   '2018-03-05'],
                  dtype='datetime64[ns]', freq=None)
    
    pd.to_datetime(date1).values
    
    array(['2018-03-01T00:00:00.000000000', '2018-03-02T00:00:00.000000000',
           '2018-03-03T00:00:00.000000000', '2018-03-04T00:00:00.000000000',
           '2018-03-05T00:00:00.000000000'], dtype='datetime64[ns]')
    

    我们也可以通过DatetimeIndex来转换

    • 3 通过pd.DatetimeIndex进行转换
    pd.DatetimeIndex(date1)
    

    知道了时间序列类型,我们就可以用这个当做索引,获取数据

    4 Pandas的基础时间序列结构

    # 最基础的pandas的时间序列结构,以时间为索引的Series序列结构
    >>>series_date = pd.Series(3.0, index=date1)
    返回:
    2017-01-01    3.0
    2017-02-01    3.0
    2017-03-01    3.0
    dtype: float64
    
    >>>pd.to_datetime(series_date)
    2017-01-01   1970-01-01 00:00:00.000000003
    2017-02-01   1970-01-01 00:00:00.000000003
    2017-03-01   1970-01-01 00:00:00.000000003
    dtype: datetime64[ns]
    
    >>>pd.DatetimeIndex(series_date)
    DatetimeIndex(['1970-01-01 00:00:00.000000003',
                   '1970-01-01 00:00:00.000000003',
                   '1970-01-01 00:00:00.000000003'],
                  dtype='datetime64[ns]', freq=None)
    

    pandas时间序列series的index必须是DatetimeIndex

    • DatetimeIndex的属性
      • year,month,weekday,day,hour….
    time.year
    time.month
    time.weekday
    

    5 Pandas生成指定频率的时间序列

    • pandas.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)
      • Returna fixed frequency DatetimeIndex, with day (calendar) as the default frequency
      • start:开始时间
      • end:结束时间
      • periods:产生多长的序列
      • freq:频率 D,H,Q等
      • tz:时区
    参数含义
    D每日
    B每工作日
    H、T或者min、S时、分、秒
    M每月最后一天
    BM每月最后一个工作日
    WOM-1MON, WOM-3FRI每月第几周的星期几
    # 生成指定的时间序列
    # 1、生成2017-01-02~2017-12-30,生成频率为1天, 不跳过周六周日
    pd.date_range("2017-01-02", "2017-12-30", freq="D")
    
    # 2、生成2017-01-02~2017-12-30,生成频率为1天, 跳过周六周日, 能够用在金融的数据,日线的数据
    pd.date_range("2017-01-02", "2017-12-30", freq="B")
    
    # 3、只知道开始时间日期,我也知道总共天数多少,生成序列, 从"2016-01-01", 共504天,跳过周末
    pd.date_range("2016-01-01", periods=504, freq="B")
    
    # 4、生成按照小时排列的时间序列数据
    pd.date_range("2017-01-02", "2017-12-30", freq='H')
    
    # 5、按照3H去进行生成
    pd.date_range("2017-01-02", "2017-12-30", freq='3H')
    
    # 6、按照1H30分钟去进行生成时间序列
    pd.date_range("2017-01-02", "2017-12-30", freq='1H30min')
    
    # 7、按照每月最后一天
    pd.date_range("2017-01-02", "2017-12-30", freq='BM')
    
    # 8、按照每个月的第几个星期几
    pd.date_range("2017-01-02", "2017-12-30", freq='WOM-3FRI')
    

    6 什么是时间序列分析

    对于时间序列类型,有特有的分析方法。同样股票本身也是一种时间序列类型,我们就以股票的数据来进行时间序列的分析

    时间序列分析( time series analysis)方法,强调的是通过对一个区域进行一定时间段内的连续观察计算,提取相关特征,并分析其变化过程。

    时间序列分析主要有确定性变化分析

    • 确定性变化分析:移动平均法, 移动方差和标准差、移动相关系数

    7 移动平均法

    1 移动窗口

    主要用在时间序列的数组变换, 不同作用的函数将它们统称为移动窗口函数

    移动窗口

    2 移动平均线

    那么会有各种观察窗口的方法,其中最常用的就是移动平均法

    • 移动平均线(Moving Average)简称均线, 将某一段时间的收盘价之和除以该周期

    移动平均方法

    3 移动平均线的分类

    • 移动平均线依计算周期分为短期(5天)、中期(20天)和长期(60天、120天),移动平均线没有固定的界限
    • 移动平均线依据算法分为算数、加权法和指数移动平均线

    注:不同的移动平均线方法不一样

    1)简单移动平均线

    简单移动平均线(SMA),又称“算数移动平均线”,是指特定期间的收盘价进行平均化。

    比如说,5日的均线SMA=(C1+ C2 + C3 + C4 + C5) / 5

    公式

    例子:

    简单移动平均例子

    • 案例:对股票数据进行移动平均计算

    简单移动平均线效果

    拿到股票数据,画出K线图

    # 拿到股票K线数据
    stock_day = pd.read_csv("./stock_day/stock_day.csv")
    stock_day = stock_day.sort_index()
    stock_day.index = pd.to_datetime(stock_day.index)
    stock_day['date'] = date2num(stock_day.index)
    arr = stock_day[['date', 'open', 'close', 'high', 'low']]
    values = arr.values[:200]
    # 画出K线图
    fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(20, 8), dpi=80)
    candlestick_ochl(axes, values, width=0.2, colorup='r', colordown='g')
    axes.xaxis_date()
    plt.show()
    

    2)计算移动平均线

    • pandas.rolling_mean(arg, window, min_periods=None, freq=None, center=False, how=None, **kwargs) Moving mean.

      Parameters:

      • arg : Series, DataFrame
      • window : 计算周期
    # 直接对每天的收盘价进行求平均值, 简单移动平局线(SMA)
    # 分别加上短期、中期、长期局均线
    pd.rolling_mean(stock_day["close"][:200], window=5).plot()
    pd.rolling_mean(stock_day["close"][:200], window=10).plot()
    pd.rolling_mean(stock_day["close"][:200], window=20).plot()
    pd.rolling_mean(stock_day["close"][:200], window=30).plot()
    pd.rolling_mean(stock_day["close"][:200], window=60).plot()
    pd.rolling_mean(stock_day["close"][:200], window=120).plot()
    

    3)加权移动平均线 (WMA)

    加权移动平均线 (WMA)将过去某特定时间内的价格取其平均值,它的比重以平均线的长度设定,愈近期的收市价,对市况影响愈重要。

    加权移动平均公式

    正因加权移动平均线强调将愈近期的价格比重提升,故此当市况倒退时,加权移动平均线比起其它平均线更容易预测价格波动。但是我们还是不会轻易使用加权,应为他的比重过大!!!!

    4)指数平滑移动平均线(EWMA)

    是因应移动平均线被视为落后指标的缺失而发展出来的,为解决一旦价格已脱离均线差值扩大,而平均线未能立即反应,EWMA可以减少类似缺点。

    指数平滑移动平均线公式

    总结:

    指数平均线公式总结

    • pd.ewma(com=None, span=one)
      • 指数平均线
      • span:时间间隔
    # 画出指数平滑移动平均线
    pd.ewma(stock_day['close'][:200], span=10).plot()
    pd.ewma(stock_day['close'][:200], span=30).plot()
    pd.ewma(stock_day['close'][:200], span=60).plot()
    

    8 移动方差和标准差

    • 方差和标准差:反应某一时期的序列的稳定性

    移动方差图

    # 求出指定窗口大小的收盘价标准差和方差
    pd.rolling_var(stock_day['close'][:200], window=10).plot()
    pd.rolling_std(stock_day['close'][:200], window=10).plot()
    

    9 各项指标数据两两关联散点图

    • pd.scatter_matrix(frame, figsize=None)
      • frame:DataFrame
    frame = stock_day[['open','volume', 'ma20', 'p_change', 'turnover']]
    pd.scatter_matrix(frame, figsize=(20, 8))
    

    指标离散关系图

    从中我们可以简单看到成交量(volume)和换手率(turnover)有非常明显的线性关系,因为换手率的定义就是:成交量除以发行总股数。

    通过一些图或者相关性分析可以找到强相关的一些指标,在机器学习、量化中会详细介绍

    相关系数:后面会介绍,目前我们只需知道他是反应两个序列之间的关系即可

    10 案例:移动平均线数据本地保存

    ma_list = [5, 20 ,60]
    for ma in ma_list:
        stock_day['MA' + str(ma)] = pd.rolling_mean(stock_day.close, window=ma)
    for ma in ma_list:
        stock_day['EMA' + str(ma)] = pd.ewma(stock_day.close, span=ma)
    
    data.to_csv("EWMA.csv")
    

    11 移动平均线的作用

    移动平均线经常会作为技术分析的基础理论,从中衍生出各种技术指标策略。后面将会介绍简单的基于均线的策略。

     

    Python爬虫人工智能大数据公众号

    展开全文
  • 时间序列数据特征提取TsFresh

    时间序列数据特征提取 TsFresh

    简介

    Tsfresh(TimeSeries Fresh)是一个Python第三方工具包。 它自动计算大量的时间序列数据的特征。此外,该包包含评估这些特征对于回归或分类任务的解释能力和重要性的方法。无论是基于时序数据的分类还是预测,作为特征提取的工具,tsfresh将会是一个不错的选择。

    安装

    使用pip安装即可。

    pip install tsfresh
    

    简单使用

    数据集

    该包提供了一个机器人故障的数据集,可以加载用于尝试使用。(这个数据集不大)点击链接下载后放置到该包配置的data文件夹下(user文件夹中,实在找不到数据集可以私戳我)。

    编辑环境

    我这里使用Jupyter Notebook,其实什么环境都是可以的。

    教程步骤

    导入数据集

    import tsfresh
    from tsfresh.examples.robot_execution_failures import download_robot_execution_failures, load_robot_execution_failures
    download_robot_execution_failures()
    timeseries, y = load_robot_execution_failures()
    

    数据探索

    • 训练数据
      对于特征集,id是不同的机器人标识,F_x到T_z是时序数据标识,也就是说,对于F_x这个特征,id为1的机器人有15个数据记录,按照time列的大小排序,其余F_y等也是如此。(注意:有时候时序数据不会这么友好,而是在一条记录中给出的
    • 测试数据
      对于标签集,利用id标识某个机器人是否故障。
      特征工程
      通过如下代码提取时间特征。
    from tsfresh import extract_features
    extraced_features = extract_features(timeseries, column_id='id', column_sort='time')
    extraced_features.head()
    

    提取过程会实时显示进度,应该是使用tqdm模块。

    提取结果如下图所示。

    可以看到提取特征之后id相同的特征序列合一了,但是每一个id的数据列数非常大,这些就是提取得到的特征。如id=1的数据关于F_x有15个数据,现在对着15个数据做统计学处理得到15个数据的平均值、方差等,每个值都是一列,其他F_y等也是如此,所以维度会很大。

    简单过滤
    不是所有统计值都有意义的,观察特征提取的数据集可以发现有很多无意义的控制,可以删除。(根据y集将相关性低的去除),代码如下。

    from tsfresh import select_features
    from tsfresh.utilities.dataframe_functions import impute
    impute(extraced_features)
    filtered_features = select_features(extraced_features, y)
    filtered_features.head()
    

    上述代码的结果为从4764列减少到了631列,这个降维还是比较有效的。

    直接提取加过滤
    可以使用如下代码。

    from tsfresh import extract_relevant_features
    directed_features = extract_relevant_features(timeseries, y, column_id='id', column_sort='time')
    directed_features.head()
    

    结果和上面是一致的,现在你可以使用特征提取的数据集去训练模型了。

    补充说明

    只是按照官方文档说明了tsfresh最浅显的功能,事实上,这个包特征提取能力要强大太多了。更详细的内容可以查看官方教程(英文版,可以使用Chrome自带的翻译)。

    展开全文
  • 时间序列数据处理

    万次阅读 2018-05-30 16:11:15
    摘要: 随着云计算和IoT的发展,时间序列数据的数据量急剧膨胀,高效的分析时间序列数据,使之产生业务价值成为一个热门话题。阿里巴巴数据库事业部的HiTSDB团队为您分享时间序列数据的计算分析的一般方法以及优化...

    摘要: 随着云计算和IoT的发展,时间序列数据的数据量急剧膨胀,高效的分析时间序列数据,使之产生业务价值成为一个热门话题。阿里巴巴数据库事业部的HiTSDB团队为您分享时间序列数据的计算分析的一般方法以及优化手段。

    演讲嘉宾简介:钟宇(悠你) 阿里巴巴 数据库高级专家,时间序列数据库HiTSDB的研发负责人。在数据库、操作系统、函数式编程等方面有丰富的经验。

    本次直播视频PPT,戳这里!

    本次分享主要分为以下几个方面:

    1.     时序数据库的应用场景

    2.     面向分析的时序数据存储

    3.     时序数据库的时序计算

    4.     时序数据库的计算引擎

    5.     时序数据库展望


    一,时序数据库的应用场景

    时序数据就是在时间上分布的一系列数值。生活中常见的时序数据包括,股票价格、广告数据、气温变化、网站的PV/UV、个人健康数据、工业传感器数据、服务器系统监控数据(比如CPU和内存占用率)、车联网等。

    下面介绍IoT领域中的时间序列数据案例。IoT给时序数据处理带来了很大的挑战。这是由于IoT领域带来了海量的时间序列数据:

     1. 成千上万的设备
     2. 数以百万计的传感器
     3. 每秒产生百万条数据
     4. 24×7全年无休(区别于电商数据,电商数据存在高峰和低谷,因此可以利用低谷的时间段进行数据库维护,数据备份等工作)
     5. 多维度查询/聚合
     6. 最新数据实时可查

    IoT中的时间序列数据处理主要包括以下四步:

     1. 采样

     2. 传输

     3. 存储

     4. 分析

    二,面向分析的时序数据存储

    下面介绍时间序列数据的一个例子。这是一个新能源风力发电机的例子。每个风力发电机上有两个传感器,一个是功率,一个是风速,并定时进行采样。三个设备,一共会产生六个时间序列。每个发电机都有多种标签,这就会产生多个数据维度。比如,基于生产厂商这个维度,对功率做聚合。或基于风场,对风速做聚合等。现在的时序数据库底层存储一般用的是单值模型。因为多值模型也可以一对一的映射到单值模型,但这个过程可能会导致性能损失。但是,在对外提供服务时,单值模型和多值模型都有应用。比如,OpenTSDB就是用单值模型对外提供服务的,而influxDB则是多值模型。但这两种数据库的底层存储用的都是单值模型。


    现实中的应用案例事实上会更复杂。像风力发电机这样的案例,它的设备和传感器的数量,我们可以认为是稳中有增的,不会发生特别剧烈的改变。它的数据采样的周期也是严格的定期采样。下图是一个工业案例,以滴滴这样的运营商为例。由于其业务特性,其车辆数量的增长和下降会出现暴涨暴跌。


    总体而言,现实世界的复杂之处在于:

    1. 未必是总是定时采样。

    2. 时间线可能是高度发散。以互联网广告为例,在对广告进行采样时,新广告的增长和老广告的下线速度很快,时间线就很有可能时高度发散的。

    3. 主键和schema修改。前面例子中提到的Tag,可以对应数据库的schema,在实际业务中可能会频繁改动。现在一般的时序数据库中,主键是会默认生成的,即所有tag的组合。因此,在新增tag时,主键就会改变,则变为了另一个对象。

    4. 分布式系统和片键。由于数据量很大,因此需要对数据进行分片,片键的选择也是一个难以抉择的问题。

    5. 数据类型。以刚才提到的单值模型为例。假设有一个三维的加速度传感器,同一时间点上会产生三个关联的数据,这时的数据类型就应该是一个维度为3的矢量,即一个新的数据类型。

    6. 需要对每个数据点的值做过滤。假设每辆车上都装有GPS传感器,假设要统计某一时间段内,一公里内,出现了哪些车辆,分别由哪些厂商生产。此时需要对地理位置进行过滤。

    下图是过去提出利用HiTSDB对时序问题的解决方案。在这种方案中,未解决发散问题,较高维数据和值过滤问题。用倒排索引来存储设备信息,并把时间点上的数据存在高压缩比缓存中。这两者结合,实际上将逻辑上的一个表分成了两个表,用以解决多维度查询和聚合的问题。但使用这种方案依然有很多问题无法解决。


    下面是HiTSDB的一些优势和不足:

    1. 优势:

    倒排索引可以很方便的筛选设备;

    高压缩比缓存具有很高的写入和读取能力

    方便的时间切片

    无schema,灵活方便支持各种数据模型

    2.   不足:

    在非定时采样场景下可能导致数据稀疏

    值没有索引,因此值过滤只能线性过滤

    Schema改动导致时间线变动

    广播查限制了QPS

    在此基础上,进行了演进,如下图。


    1. 引入了Adaptive schema,即如果未指定一个数据表的schema,则认为写入的第一条数据中包含的TagKV即是片键也是主键,用以确定唯一性以及数据会被分片到哪一个节点上。

    2. 压缩块也不再是按固定的时间切片了,引入了meta index,用以查询每个数据块的开始和结束时间。在一个时间段内攒够了足够的数据后,把整个数据块进行压缩。

    3. 参考列存的思路,值索引到压缩块。值索引不再像传统数据库那样索引到行。

    4. 多值索引和空间切分。

    三,时序数据库的时序算法

    上面所述的存储结构主要是为了方便进行时序数据的加工和分析。时序有一些特殊算法。

    1.     降采样和插值:传感器采样出的点可能特别密集,在分析趋势时,会希望进行过滤。通过降采样可以利用一段时间内的最小值/最大值/平均值来替代。

    降采样算法:min/max/avg。

    插值算法:补零/线性/贝塞尔曲线

    2.     聚合计算:由于采样是精确到每个传感器的,但有时需要的数据并不仅是精确到某个传感器的。比如,希望比较两个不同厂商的发电机,哪个在风场中产生了更多的电。那么就需要对传感器数据进行聚合。

    逻辑聚合:min/max

    算术聚合:sum/count/avg

    统计:histogram/percentile/Standard Deviation

    3.     时间轴计算

    变化率:rate

    对时序数据进行加工的分析的重要目的是发现异常。下面介绍在异常检测中如何定义问题。从异常检测的角度来看时间序列数据,分为三个维度:time, object, metric。

    1.     固定两个维度,只考虑一个维度的数据。

    ·T: only consider time dim,单一对象单一metric即单个时间序列):spikes & dips、趋势变化、范围变化。

    ·M: only consider metric,找出不符合metric之间相互关系的数据。

    ·O: only consider object,找出与众不同的对象。

    2.     固定一个维度,只考虑两个维度的数据。

    ·MT:固定对象,考虑多个时间序列(每个对应一个metric),并找出其相互变化方式不同的作为异常。

    ·MO:不考虑时间特性,考虑多个对象且每个对象都可以用多个metric表示,如何从中找出不同的对象。

    ·TO:多个对象单一metric,找出变化趋势不同的对象。

    在异常检测中,面向问题有如下计算方法:

    1.     内置函数

    ·高压缩比缓存直接作为窗口缓存

    ·对于满足数据局部性的问题,直接在高压缩比缓存上运行

    ·结果直接写回

    ·定时调度 vs 数据触发

    2.     外置计算

    ·定时查询 vs 流式读取

    ·使用同样的查询语言执行查询或定义数据源

    ·数据库内置时间窗口

    ·数据流的触发机制

    针对时序数据,又可以将计算分为预计算和后计算。


    预计算:事先将结果计算完并存储。这是流计算中常用的方式。其特点如下:

    ·数据存储量低

    ·查询性能高

    ·需要手工编写计算过程

    ·新的计算无法立即查看结果

    ·灵活性差

    ·不保存原始数据

    后计算:先存数据,需要时进行计算。这是数据库中常用的方式。其特点如下:

    ·数据存储量大

    ·查询/聚合性能瓶颈

    ·任何查询都可以随时获得结果

    ·使用DSL进行查询

    ·灵活性好

    ·保存原始数据

    四,时序数据库的计算引擎

    基于两种计算的特点,在时序数据处理中,我们使用的是一种混合架构。有数据进来时,有预聚合规则,如果符合规则就进行预聚合,把数据写入数据库中。在查询时,如果符合预聚合规则,就可以很快得到结果。对于不满足预聚合规则的数据,会将其从数据库中读出,进行后聚合。中间的聚合引擎是一种类似流式计算的架构,数据库或者数据源都可以作为数据源。数据源的来源对于引擎是不可见的,它的功能是接收数据,计算并产生结果。因此,预计算和后计算都可以利用这一种逻辑进行,并放在同一个运行环境中。


    在逻辑上,上图是可行的。但实际上,如果要用这种方式进行流计算,由于数据源可能出现乱序等问题,就必须要利用窗口函数,将数据放入时间窗口中整理好,但这种缓存的效率其实并不高,实际情况下,是按照下图这种逻辑进行的。数据会被写进数据库,由于数据库有高压缩比缓存,是专门针对时序数据的。当一个时间窗口结束时,利用持续查询来进行预计算。它会将高压缩比缓存中的数据拿一部分出来做预聚合再写回数据库中。这样,这个缓存机制就替代了原来的时间窗口,节省了很多内存,降低了很多计算开销。


    使用类似于流的架构的好处是可以将其很快的接入异构计算的环境中。正如大家熟知的,流计算可以转化为一个DAG。结合前面提到的降采样和聚合的例子。以一个加法为例,可以把数据切成三片放入不同的工作节点上计算,计算完后再进行一次聚合输出数据。工作节点既可能是CPU也可能是GPU。接入异构计算的环境中,可以加速数据的计算。


    五,时序数据库展望

    下图是对未来架构的展望。


    1.     存储层

    ·类似lambda架构,基于一系列不可修改的文件

    ·针对不同的场景提供不同的存储格式

    2.     计算层

    ·流式架构,基于内存的异构计算,自动填充热数据

    ·数据分片,支持高QPS读取

    3.     索引

    ·全局的索引 vs 文件局部索引

    4.     大数据

    ·可以直接在大量的文件上跑MR,也可以通过高压缩比缓存以流的方式订阅数据

    未来,这个数据库将会演化成时序数据平台。它可以兼容SQL生态,一系列大数据平台,以及融合边缘计算。在部署时可以在云和边缘部署一整套的管理架构,同时把用SQL描述的规则下放到云板和边缘板上,形成一整套数据处理方案。


    POLARDB:https://www.aliyun.com/product/polardb?spm=5176.8142029.388261.347.62136d3etcPz5x
    HBASE: https://www.aliyun.com/product/hbase?spm=5176.155538.765261.355.57227e0dLAlXGl

    云数据库RDS PPAS 版 :https://www.aliyun.com/product/rds/ppas?spm=5176.54432.765261.351.6e1e28f5UFqADw

    原文链接

    展开全文
  • R语言处理时间序列数据

    千次阅读 2020-07-20 11:54:25
    R语言处理时间序列数据
  • 时间序列数据的常见处理处理

    千次阅读 2020-05-04 15:07:52
    “”" 时间序列数据处理 “”" 平稳性:即要求经由样本时间序列所得到的拟合曲线,在未来的某一段时期内仍能顺着现有的形态惯性的延续下去。 date_range:可以指定时间和周期 H、D、M 例: rng = pd.date_range(...
  • 特征工程之处理时间序列数据

    千次阅读 2020-09-05 09:40:25
    特征工程的一个简单但普遍的处理对象是时间序列数据。特征工程在这个领域的重要性是因为(原始)时间序列数据通常只包含一个表示时间属性的列,即日期时间(或时间戳)。 对于日期时间数据,特征工程可以看作是从...
  • 时间序列是按照一定的时间间隔排列的一组数据,其时间间隔可以是任意的时间单位,如小时、日、周月等。比如,每天某产品的用户数量,每个月的销售额,这些数据形成了以一定时间间隔的数据。 通过对这些时间序列的...
  • 时间序列数据有许多...​ 在这篇文章中,我将列出20个要点,帮助你全面理解如何用Pandas处理时间序列数据。 1.不同形式的时间序列数据时间序列数据可以是特定日期、持续时间或固定的自定义间隔的形式。 ​ .
  • 时间序列数据在数据科学项目中很常见。 通常,可能会对将时序数据重新采样到要分析数据的频率或从数据中汲取更多见解的频率感兴趣。 在本文中,我们将介绍一些使用Pandas resample()函数对时间序列数据进行重采样...
  • 文章目录时间序列一.日期和时间数据类型及工具1.1字符串与datetime互相转换二.时间序列基础 时间序列 时间序列(time series)数据是一种重要的结构化数据形式,应用于多...时间序列数据的意义取决于具体的应用场景,主
  • Spark处理时间序列数据

    千次阅读 2018-01-15 17:45:51
    整个逻辑为: 设备端毫秒级生成数据以文本...问题2:使用SPARK进行HBASE插入的时候,使用RddPartitionForeach,然后给每条记录生成时间戳,并插入到HBASE,发现即使是微妙级别,在foreach的时候仍然会出现时间相同的
  • 时间序列数据的特征提取

    千次阅读 2020-04-03 15:56:17
    当你想对时间序列数据做分类时,有两种选择,一个是用时间序列特定的方法,比如说说LSTM模型。另外一种方法就是来从时间序列中提取特征从而将这些特征用在有监督的模型上。在这篇文章中,我们来看下如何使用tsfresh...
  • 时间序列数据挖掘综述

    千次阅读 2013-10-31 22:15:21
    时间序列数据挖掘综述 一、引言  时间序列是指按时间顺序...大量时间序列数据真实地记录了系统在各个时刻的所有重要信息,若能改进某种高效的数据处理方法,发现其中各时间序列之间的相互关系,必将大大提高人们
  • LSTM处理时间序列数据

    千次阅读 2019-12-02 15:29:56
    处理数据格式如图所示,主要是对blktrace抓取的磁盘信息进行处理。 0.001742812,30893,G,R,1180470464,16,[mapkeeper_rocks],1 0.001927242,30893,G,WS,800359816,16,[mapkeeper_rocks],4 0.002208006,30893,G,...
  • Python pandas,转换与处理时间序列数据

    千次阅读 2019-05-10 16:24:27
    pandas库继承了NumPy库的datetime64以及timedelta64模块,能够快速实现时间字符串的转换、信息提取和时间运算。...绝大多数时间数据都是Timestamp形式 Timedelta 表示不同单位的时间,例如1d、1.5h、3min、4...
  • pandas 转换与处理时间序列数据

    千次阅读 2019-07-18 20:54:14
    在多数情况下,对时间类型数据进行分析的前提就是将原本为字符串的时间转换为标准 时间类型。 pandas 继承了 NumPy 库和 datetime 库的时间相关模块,提供了 6 种时间相关的类。 Timestamp 类型: 其中 Timestamp ...
  • 时间序列数据的多元回归No matter what kind of data science project one is assigned to, making sense of the dataset and cleaning it always critical for success. The first step is to understand the data ...
  • ——协整检验单整、协整(cointegration)协整检验总结——时间序列数据的一般处理流程 为什么要把时间序列变成平稳的?——平稳性的意义 凭以推测经济系统(或其相关变量)在未来可能出现的状况,亦即预测经济系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 490,857
精华内容 196,342
关键字:

时间序列数据处理