如何对导入的数据进行分类和计数

2024-04-26 07:21:43 发布

您现在位置:Python中文网/ 问答频道 /正文

假设有一个传感器可以记录每次激活的日期和时间。我将这些数据以列表形式存储在.json文件中,格式为“2000-01-01T00:30:15+00:00”。在

现在,我要做的是在python中导入这个文件,并使用NumPy/Mathplotlib绘制这个传感器每天被激活的次数。在

我的问题是,使用这些数据,我不知道如何编写一个算法来计算传感器每天被激活的次数。(这应该很简单,但是由于Python知识有限,我陷入了困境)。假设有一种方法可以将这个列表按日期(例如“2000-01-01”)拆分,然后对该日期的记录进行计数。在

你如何计算传感器被激活的次数?(然后绘制一个显示每天激活次数的图?)在


Tags: 文件数据numpy算法json列表格式记录
2条回答

如果您的json文件加载一个列表,如:

j_list = [('2000-01-01T00:30:15+00:00', 'xx'),
          ('2000-01-01T00:30:15+00:00', 'yyy'),
          ('2000-01-02T00:30:15+00:00', 'zzz')]

注意:这假设json文件返回一个列表列表,其中时间戳作为第一个元素。相应调整。在

在dateutil和datetime中有解析器来解析时间戳。 如果数数真的是你所做的一切,那就太过分了。你可以:

^{pr2}$

首先需要加载JSON文件:

import json
with open("logfile.json", "r") as logfile:
    records = json.load(logfile)

记录将是包含您的记录的列表或字典。在

假设您的日志文件如下所示:

^{pr2}$

记录将是字符串的列表。所以分析日期只是:

import datetime
for record in records:
    datepart, _ = record.split("T")
    date = datetime.datetime.strptime(datepart, "%Y-%m-%d")

希望这足够清楚。使用“字符串”。拆分和日期时间.strptime应该能做到这一点,虽然你不必把它解析成一个date对象来存储它,但它可能会使以后的事情变得更简单。在

最后,使用列表字典进行binning应该非常简单。启动 根据上面的内容,让我们添加binning:

import collections
import datetime
date_bins = collections.defaultdict(list)
for record in records:
    datepart, _ = record.split("T")
    date = datetime.datetime.strptime(datepart, "%Y-%m-%d")
    date_bins[date].append(record)

这会给你一个字典,其中每个键都是日期,每个值是当天记录的记录列表。在

您可能需要按日期对其进行排序(尽管您可以使用集合.OrderedDict如果数据已经整理好)。在

每天计算激活次数可以是:

for date in date_bins:
    print "activations on %s: %s"%(date, len(date_bins[date]))

当然,将这些信息转换成matplotlib需要的格式需要更多的工作,但是从这里开始应该不会太糟糕。在

相关问题 更多 >