简单的时序数据类型和字段。
项目描述
django-simple-timeseries
使用Django将小型简单时序序列化到数据库。提供用于操作时序的Timeseries
类和用于序列化的自定义字段类型TimeseriesField
。
状态:实验性。
示例
在模型上定义TimeseriesField
from django.db import models
from django_simple_timeseries import TimeseriesField
class Appliance(models.Model):
name = models.CharField(max_length=64)
temperature = TimeseriesField(
resolution_seconds=60 * 60,
max_points=24,
help_text='Last 24 hours of temperature data',
)
然后您可以访问其上的Timeseries
方法
>>> a = Appliance(name='fridge')
>>> a.temperature.add(23.2)
>>> a.save()
>>> # Wait some time.
>>> a.temperature.add(26.5)
>>> a.save()
>>> print(list(a.iter_points()))
[
(datetime(2020, 1, 1, 2, 30, 0, tzinfo=<UTC>), 23.2),
(datetime(2020, 1, 2, 2, 30, 0, tzinfo=<UTC>), 26.5),
]
需求
此软件包支持并针对以下Python的最新补丁版本进行测试
- Python 3.7, 3.8, 3.9
- Django 2.2, 3.0, 3.1
- MariaDB 10.2, 10.3, 10.4, 10.5
- MySQL 5.7, 8.0
- Oracle: 12.2+(仅针对12.2.0.1 SE进行测试)
- PostgreSQL 9.5, 10, 11, 12
- SQLite 3.9.0+
所有数据库后端都使用它们驱动程序的最新版本进行测试。SQLite还使用GitHub Actions的最新macOS和Windows虚拟环境进行了测试。
安装
pip install django_simple_timeseries
对于Django 3.1及更高版本,不需要额外的依赖项。对于早期版本,此项目需要django_jsonfield_backport
pip install django_jsonfield_backport
工作原理
时序
Timeseries
类实现了一个简单的向量样式的时序。时序数据始终是连续的。
内部,所有时序实例都有
.start_time
,对应于第一个数据点的datetime.datetime
;.data
,记录的数据点(或y值);以及.resolution
,一个timedelta,它描述了样本之间的固定间隔。
通过调用add()
方法添加样本。add()
方法通过以下策略确保连续性:
- 如果自上次样本以来少于
resolution
秒钟,则替换最新的样本。 - 如果自上次样本以来超过
resolution
秒钟,则通过适当数量的样本(time_delta % resolution - 1
)扩展向量,每个样本将被记录为具有值None
的间隔。 - 在所有情况下,将向量修剪为不超过
max_points
个样本。
时间序列字段
TimeseriesField
以 JSONField
的形式实现,并扩展它。时间序列的 to_object()
和 from_object()
方法将时间序列实例序列化为普通 Python 对象,该自定义字段类型透明地实现。
使用说明
此模块是实验性的,尚未经过彻底测试。它不适用于大型时间序列。使用风险自负!
项目详情
关闭
哈希 for django_simple_timeseries-0.2.0-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8917f63a506d8ba1fcdfe8a62a0e819325163ccadd1cad75880a01861b6149eb |
|
MD5 | 06387aef7c6f9691e0c1f581ddcd835b |
|
BLAKE2b-256 | b12586a778a5dc27be320ffdea76db0409893d13a021abdb233d739d298c0475 |