跳转到主要内容

`timeseries` 是一组 django 应用程序工具,旨在简化时间序列数据的整理和维护。

项目描述

Build Status

Coverage Status

timeseries 是一组 django 应用程序工具,旨在简化时间序列数据的整理和维护。

要求

支持 Django 版本 1.8+,适用于在 PostgreSQL 上运行的项目。

安装

pip install django-timeseries

用法

from datetime import timedelta
from django.db import models
from timeseries.utils import TimeSeriesModel, TimeSeriesManager


class Ad(models.Model):

    objects = TimeSeriesManager()


class RawAdData(TimeSeriesModel):

    TIMESERIES_INTERVAL = timedelta(days=1)  # update daily N.B integers in seconds also work

    NOT_AVAILABLE = -1

    ad = models.ForeignKey(Ad, related_name='rawdata')

    views = models.BigIntegerField(default=NOT_AVAILABLE)
    clicks = models.BigIntegerField(default=NOT_AVAILABLE)


class MonthlyAdReport(TimeSeriesModel):

    TIMESERIES_INTERVAL = timedelta(days=28)

    ad = models.ForeignKey(Ad, related_name='monthlyreports')

    avg_view_growth = models.FloatField()
    avg_click_growth = models.FloatField()


def ad_data_collector(queryset):
    """
        should return an iterable that yields dictionaries of data
        needed to successfully create a RawAdData instance
    """
    return ...


def report_data_collector(queryset):
    """
        should return an iterable that yields dictionaries of data
        needed to successfully create a MonthlyAdReport instance
    """
    return ...


# in a shell
>>> Ad.objects.update_timeseries('rawdata', ad_data_collector)
# this return the results of a bulk_create call from the RawAdData manager
# for ads that hadn't been updated in the last day

>>> Ad.objects.update_timeseries('monthlyreports', report_data_collector)
# this return the results of a bulk_create call from the MonthlyAdReport
# manager for ads that hadn't had a report generated in the last 28 days

>>> ad = Ad.objects.prefetch_latest('rawdata', 'monthlyreports').first()
>>> print ad.latest_rawaddata, ad.latest_monthlyreports

TimeSeries QuerySet 方法

timeseries.utils.TimeSeriesQuerySet

向 Django QuerySet API 添加了 4 个主要方法,可用于更新和维护时间序列数据。这些方法包括

  • prefetch_latest

  • filter_outdated

  • last_updated

  • update_timeseries

update_timeseries

输入: related_name, collector, 可选 force

输出: 实例化的相关模型列表。

使用“collector”可调用对象更新查询集的相关模型表(由 related_name 给出)。

“collector”必须接受一个引用模型的查询集作为其唯一参数。它还必须返回一个字典的可迭代对象,这些字典可以用于构造和保存相关模型的实例。

注意:除非显式使用“force”关键字参数强制,否则只有具有过时数据的实例将被更新。

filter_outdated

输入: *related_names

输出: 查询集

返回一个查询集,该查询集将生成与通过指定的 related_name 给出的反向相关模型关联的“过时”数据的相关模型实例。

last_updated

输入: *related_names

输出: 查询集

将最新相关实例的创建时间戳注释为反向关系的 related_name。

用法

ad = Ad.objects.last_updated('rawdata').first()
# assuming there's data related to ad
print ad.rawdata_last_updated
# this will print the timestamp of when the associated data was
# last updated

prefetch_latest

输入: *related_names

输出: 查询集

公开最新的关联反向关系。

用法

ad = Ad.objects.prefetch_latest('rawdata', 'monthlyreports').first()
print ad.latest_rawaddata, ad.latest_monthlyreports
# this will print the reprs of the latest associated data
# instances

其他实用工具

LatestQ

timeseries.utils

输入: related_name, **kwargs

返回值:django.db.models.Q 实例

构建一个 django.db.models.Q 实例,允许查询针对最新关联的反向关系。

注意:此方法旨在与 timeseries.utils.TimeSeriesQuerySet.last_updated 一起使用。

用法

Ad.objects.last_updated('rawdata').filter(
    LatestQ('rawdata', views__gt=1000)
)

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分布

django-timeseries-1.0.2.tar.gz (5.9 kB 查看哈希值)

上传时间 源代码

由以下机构支持