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

时间:2012-07-21 17:13:15

标签: python numpy

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

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

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

您如何计算传感器被激活的次数? (然后制作一个图表,显示每天的激活次数?)

2 个答案:

答案 0 :(得分:2)

首先,您需要加载JSON文件:

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

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

假设您的日志文件如下:

[u"2000-01-01T00:30:15+00:00",
 u"2000-01-01T00:30:16+00:00",
 ...
 ]

记录将是一个字符串列表。所以解析日期只是:

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

希望这很清楚。使用“string”.split和datetime.strptime应该可以解决这个问题,尽管您不必将其解析为日期对象,只是为了将其绑定,但以后可能会使事情变得更容易。

最后,使用列表字典进行分箱应该非常简单。开始 从我们上面的内容开始,我们将添加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)

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

您可能希望按日期对此进行排序(尽管您可以使用collections.OrderedDict,如果数据已按顺序排列)。

每天计算激活次数可能类似于:

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

当然,接受这些信息并将其按照matplotlib需要的格式进行更多工作还是要多得多,但从这里开始不应该太糟糕。

答案 1 :(得分:1)

如果您的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中有解析器来解析时间戳。 如果计算真的是你正在做的事情,即使这可能是矫枉过正。你可以:

>>> from itertools import groupby
>>> [(k,len(list(l))) for k,l in groupby(j_list,lambda x: x[0][:10])]
[('2000-01-01', 2), ('2000-01-02', 1)]