统计赶集网某段时间内,北京各个城区发帖数量的 top3 类目
效果是这样的:
我的代码:
from pymongo import MongoClient
import charts
client=MongoClient('localhost',27017)
ganjiDB=client['ganjiDB']
detail_info=ganjiDB['detail_info']
def get_gen(date1,date2,area,limit):
pipeline1 = [
{'$match':{'$and':[{'pub_date':{'$gte':date1,'$lte':date2}},{'area':{'$all':area}}]}},
{'$group':{'_id':{'$slice':['$cates',2,1]},'counts':{'$sum':1}}},调用已有类目cates注意前面添加$,sum前不要丢$
{'$limit':limit},
{'$sort':{'counts':-1}}#倒序排列,注意前面冒号不要丢
]
for i in detail_info.aggregate(pipeline1):
data={
'name':i['_id'][0],
'data':[i['counts']],#注意是列表结构,注意字典调用key时不要忘记引号i['counts']''
'type':'column'
}
yield data
series=[data for data in get_gen('2015.12.24','2015.12.27',['海淀'],3)]
options = {
'chart' : {'zoomType':'xy'},
'title' : {'text': '某段时间内,北京各个城区发帖数量的 top3 类目'},
'subtitle': {'text': '数据图表'},
'yAxis' : {'title': {'text': '数量'}}
}
charts.plot(series,options=options,show='inline')
总结:
- MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*);
- $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $limit:用来限制MongoDB聚合管道返回的文档数。