按月和年分组数据
我有一个.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
补充一下:我需要按月份和年份来整理数据,要把那个月和那年写的文章的浏览次数加起来……然后把这些结果导出到一个文件里。
1 个回答
0
你的问题不太清楚,但我猜你并不是在文件的读写上遇到问题,而是想处理日期字符串和对数据进行分组。
首先,我们来解析日期。你可以使用比如说 dateutil.parser.parse
或者 time.strptime
。dateutil.parser
默认就能处理你那种日期格式,所以我们可以直接用它,而不是去配置格式给 strptime
。
接下来是分组:最简单的方法是使用一些字典,把月份或年份和浏览量对应起来。你也可以用字典来表示不同的数据来源,而不是现在的那两个变量。只需把月份或年份当作字典的键,然后相应地更新值。为了让事情简单一点,我们可以使用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