按月和年分组数据

时间:2014-06-23 19:17:40

标签: python

我有一个包含大量文章的.json文件,每篇文章的格式都是这样的:

{
"source": "....",
"title": ".......",
"original_time": "ora: 20:03, 06 dec 2006",
"datetime": "2006-12-06T20:03:00+00:00",
"views": 398,
"comments": 1,
"content": "..."
"id": "13",
}

现在我必须总结每个月和每年所有文章的观看次数并绘制结果...但我不知道如何做到这一点,因为我是python的新手......就是我所做的:

import json
#from pprint import pprint
import csv
import time
import datetime

views = []
time = []
art_timpul = 0
unimedia = 0
total_articles = 0
json_data=open('all.json')
data = json.load(json_data)
#pprint(data)
json_data.close()

for i in data:
    if i["source"] == 'unimedia':
        art_unimedia += 1
        x = i["views"]
        views.append(int(x))
        y = i["original_time"]
        time.append(y)
    if i["source"] == 'timpul':
        art_timpul += 1
    total_articles += 1

myfile = open('output.csv', 'wb')
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
wr.writerow(views)

print time
#print views
print "Articles from Unimedia", art_unimedia
print "Articles from Timpul", art_timpul        
print "Total articles", total_articles

编辑:我必须按月和按年对数据进行分组,我必须总结那些月份和年份的文章中的nr个视图...并将它们导出到文件中

1 个答案:

答案 0 :(得分:0)

您的问题并不完全清楚,但我会假设您在阅读和编写文件时没有问题,但只能解析日期字符串并对数据进行分组。

首先,解析日期。在这里你可以使用例如dateutil.parser.parsetime.strptimedateutil.parser似乎期望默认格式与您的日期格式相同,因此我们将strptime用{}代替configuring the format

接下来,分组:最简单的方法是使用多个dictionaries映射月份或年份来查看。您也可以使用不同来源的字典,而不是现在拥有的那两个变量。只需使用月份或年份作为字典的键,并相应地更新值。为了让生活更轻松,我们可以使用collections.defaultdict,因此我们不必检查该密钥是否已经存在。

按月分组的示例(类似于同一循环中的年份和来源等):

import collections, dateutil.parser
views_by_month = collections.defaultdict(int)
for item in data:
    views = item["views"]
    date = dateutil.parser.parse(item["datetime"])
    views_by_month[date.month] += views
print views_by_month