django - 在数据库中定义时间段以进行分析
问题描述
我想将时间序列存储在数据库中。这些时间序列的值通常是针对某个时期定义的,例如:
- 2014年、2015年、2016年等国家人口
- 2014、2015、2016年全国房屋数量
我想结合这些变量的数据来做一些统计,比如住房与人口。这只有在我确保时间段完全相同的情况下才有可能。这些期间通常以每年/季度/月为基础。如何最好地存储这些值以便我以后可以比较它们?
我目前使用 start_date (datetime) 和 end_date (datetime),这显然有效,但需要一个好的 GUI 来防止一个人进入,例如:
start = 1-1-2016 & end = 31-12=2016
而另一个人会进入:
start = 1-1-2016 & end = 1-1=2017
我认为保持与用户定义时间段的自由是一个好主意,但帮助他们定义正确的事情。你会如何建议这样做?
顺便说一句:我使用 Django,所以我当前的模型有以下两个字段:
period_start = models.DateField(null=False)
period_end = models.DateField(null=False)
编辑 8-5-2018 10:32:添加了一些有关存储数据 的信息 一些额外信息以增加清晰度:我将数据存储在两个表中:(1)变量定义和(2)值。变量定义大致如下:
class VarDef(models.Model):
name = models.CharField(max_length=2000, null=False)
unit = models.CharField(max_length=20, null=False)
desc = models.CharField(max_length=2000, blank=True, null=True)
class VarValue(models.Model):
value = models.DecimalField(max_digits=60, decimal_places=20, null=False)
var = models.ForeignKey(VarDef, on_delete=models.CASCADE, null=False,
related_name='var_values')
period_start = models.DateField(null=False)
period_end = models.DateField(null=False)
解决方案
很难回答,因为我没有您的完整代码(模型、视图等)。但请记住,您可以像这样使用和查询 djangodatetime
字段:lt
gt
import datetime
# user input from your view, I hardcoded just for the sake of the example
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
house_data = HousesData.objects.filter(period_start__gt=start_date, period_end__lt=end_date)).all()
country_data = CountryData.objects.filter(period_start__gt=start_date, period_end__lt=end_date)).all()
# Do the rest of your calculation
推荐阅读
- python - 数据预处理:选择一种技术来填充数据集中的缺失数据
- python - 在 python/flask 项目中处理大型数据库的最佳方法
- python - ImproperlyConfigured Error loading psycopg2 module No module named psycopg2
- bash - Bash 脚本在参数中查找字符串以设置变量
- yosys - 通过 Verilog 后端添加到进程
- node.js - Command Cooldown 1 minute not working discord bot
- assembly - 如何从汇编程序实模式源代码转到可启动闪存驱动器和光盘?
- c - 使用 memcpy 移动数组中的元素是否安全?
- python - 将图像转换为灰度python
- python - AttributeError:“NoneType”对象没有属性“信念”