python数据分析:某时间与城区内发帖数量 top3 类目

统计赶集网某段时间内,北京各个城区发帖数量的 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聚合管道返回的文档数。

你可能感兴趣的:(python数据分析:某时间与城区内发帖数量 top3 类目)