統(tǒng)計趕集網(wǎng)某段時間內(nèi),北京各個城區(qū)發(fā)帖數(shù)量的 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}}},調(diào)用已有類目cates注意前面添加$,sum前不要丟$
{'$limit':limit},
{'$sort':{'counts':-1}}#倒序排列,注意前面冒號不要丟
]
for i in detail_info.aggregate(pipeline1):
data={
'name':i['_id'][0],
'data':[i['counts']],#注意是列表結(jié)構(gòu),注意字典調(diào)用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': '某段時間內(nèi),北京各個城區(qū)發(fā)帖數(shù)量的 top3 類目'},
'subtitle': {'text': '數(shù)據(jù)圖表'},
'yAxis' : {'title': {'text': '數(shù)量'}}
}
charts.plot(series,options=options,show='inline')
總結(jié):
- MongoDB中聚合(aggregate)主要用于處理數(shù)據(jù)(諸如統(tǒng)計平均值,求和等),并返回計算后的數(shù)據(jù)結(jié)果。有點類似sql語句中的 count(*);
- $match:用于過濾數(shù)據(jù),只輸出符合條件的文檔。$match使用MongoDB的標準查詢操作。
- $group:將集合中的文檔分組,可用于統(tǒng)計結(jié)果。
- $sort:將輸入文檔排序后輸出。
- $limit:用來限制MongoDB聚合管道返回的文檔數(shù)。