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