gpt4 book ai didi

python - 获取过去一周每小时的计数

转载 作者:行者123 更新时间:2023-12-01 09:08:39 25 4
gpt4 key购买 nike

我有一个拍摄的照片模型。我正在用 Javascript 构建一个热图,显示过去 7 天的照片拍摄时间。我每小时展示一次。

我的照片模型有一个时间戳日期时间字段。我如何制作一个这样的列表,显示过去一周每天每小时的照片总数?

JavaScript 需要一个像这样的数组:

const heatmapDataSource = [
[0, 0, 3],
[6, 23, 3],
....
];

heatmapDataSource[0][0] is the day of the week (Today (Tuesday) 0, last week Wednesday (6) - Today is always 0

heatmapDataSource[0][1] is hour (0 == 24:00 and 23 == 23:00 etc)

heatmapDataSource[0][2] is the count value for that hour

希望这是有道理的!

到目前为止,我已经将这些放在一起作为开始计数的开始:

    Photo.objects.annotate(
hour=Trunc('timestamp', 'hour', output_field=DateTimeField())
).values('timestamp__hour', 'timestamp__day').annotate(photos=Count('id'))

输出:

<QuerySet [{'timestamp__hour': 10, 'timestamp__day': 10, 'photos': 8}, {'timestamp__hour': 12, 'timestamp__day': 13, 'photos': 1}]>

照片模型:

class Photo(models.Model):
camera = models.ForeignKey(Camera, null=True, on_delete=models.PROTECT)
image = models.ImageField()
timestamp = models.DateTimeField(auto_now=True)

UDPATE

这就是我到目前为止所拥有的,几乎已经完成了..

import datetime as DT
today = DT.date.today()
week_ago = today - DT.timedelta(days=7)
from django.db.models.functions import ExtractWeekDay


Photo.objects.filter(timestamp__gte=week_ago).annotate(weekday=ExtractWeekDay('timestamp')).annotate(hour=Trunc('timestamp', 'hour', output_field=DateTimeField())).values('timestamp__hour', 'weekday').annotate(photos=Count('id'))

最佳答案

首先,我们需要对查询本身进行一些修复:__day 的范围为 1-31,这可能不是我们想要的。我们想要工作日,所以:

from django.db.models import Count
from django.db.models.functions import ExtractHour, <b>ExtractWeekDay</b>

qs = Photo.objects.annotate(
hour=ExtractHour('timestamp'),
day=<b>ExtractWeekDay('timestamp')</b>
).values('hour', 'day').annotate(
photos=Count('id')
).order_by('hour', 'day')

接下来我们需要进行一些后期处理:

from datetime import date
dow = date.today().isoweekday() + 1

result = [
[(row['day'] - dow) % 7, row['hour'], row['photos']]
for row in qs
]

这将产生一个 n×3 列表,然后可以通过 JSON 等方式进行传输。

关于python - 获取过去一周每小时的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51842075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com