先進行charts餅狀圖的小測,如下嬉挡,結果為正常餅狀圖
import charts
options = {
'chart' : {'zoomType':'xy'},
'title' : {'text': '發(fā)帖量統(tǒng)計'},
'subtitle': {'text': '可視化統(tǒng)計圖表'},
}
series = [{
'type': 'pie',
'name': 'Browser share',
'data':[
['北京二手家電', 8836],
['北京二手文體/戶外/樂器', 5337],
['北京二手數(shù)碼產(chǎn)品', 4405],
['北京二手服裝/鞋帽/箱包', 4074],
['北京二手母嬰/兒童用品', 3124],
['北京二手臺式機/配件', 2863],
['北京二手圖書/音像/軟件', 2777],
['北京二手辦公用品/設備', 2496],
['北京二手家具', 1903],
['北京二手美容/保健', 1838],
['北京二手手機', 1603],
['北京二手筆記本', 1174],
['北京二手設備', 1004],
['北京其他二手物品', 761],
['北京二手平板電腦', 724]
]
}]
charts.plot(series,show = 'inline',options = options)
繪制前面數(shù)據(jù)庫中的數(shù)據(jù)來找某一天交易的各類目物品的餅狀圖
- 使用了pymongo的pipeline模型,和aggregate函數(shù)
pipeline = [
{'$match':{'$and':[{'pub_date':'2015.12.24'},{'time':3}]}},#匹配用狱,用了and方法
{'$group':{'_id':'$price','counts':{'$sum':1}}}, #分組译仗,并計數(shù)
{'$sort' :{'counts':-1}}, #排序
{'$limit':10} #限制展示個數(shù)
]
- pymongo的數(shù)據(jù)可選擇展示
for i in item_info.find({},{'_id':0,'cates':1}).limit(300):
print(i) # 只展示cates的數(shù)據(jù)
- charts中的pie類型略号,見上
- 把json格式導入數(shù)據(jù)庫刑峡,了解導入命令
C:\Users\10201>mongoimport -d tongcheng -c sample F:\BaiduYunDownload\課程源碼及作業(yè)參考答案\Plan-for-combating-master\week3\week3_homework\data_sample\sample.json
2017-05-07T09:38:10.120+0800 connected to: localhost
2017-05-07T09:38:13.094+0800 [####################....] tongcheng.sample 29.4MB/34.2MB (86.0%)
2017-05-07T09:38:13.549+0800 [########################] tongcheng.sample 34.2MB/34.2MB (100.0%)
2017-05-07T09:38:13.550+0800 imported 86850 documents
寫代碼的過程洋闽,帶注釋
import charts,pymongo
client = pymongo.MongoClient('localhost',27017)
tongcheng = client.tongcheng
sample = tongcheng.sample
'''
for i in sample.find({},{'_id':0,'cates':1}).limit(300): #按所需要的輸出,第一個表示查詢條件突梦,第二個表示展示項目
print(i)
pipeline = [
{'$match':{'$and':[{'pub_date':'2016-01-12'},{'look':'-'}]}}, #匹配
{'$group':{'_id':'$price','counts':{'$sum':1}}}, #分組喊递,按照price來分組,每有一個新的price就加1
{'$sort':{'counts':-1}}, #排序阳似,按照counts排序,-1表示逆序(從大到蓄戆椤)撮奏,1表示順序
{'$limit':3} #限制輸出個數(shù)
]
for i in sample.aggregate(pipeline): #使用aggregate的管道來格式化輸出數(shù)據(jù)
print(i)
'''
'''
pipeline = [
{'$match':{'$and':[{'pub_date':'2016.01.11'},{'look':'-'}]}}, #look純屬沒事找事,只是試一下 $and的用法
{'$group':{'_id':{'$slice':['$cates',2,1]},'counts':{'$sum':1}}}, #使用切片分組当宴,選取cates的跳過前兩個畜吊,選擇后一個,計數(shù),注意各用法
{'$sort' :{'counts':-1}}
]
for i in sample.aggregate(pipeline):
print(i)
'''
def gen_data(date): #生成器户矢,產(chǎn)生某一天的的各項數(shù)據(jù)
pipeline = [
{'$match':{'$and':[{'pub_date':date},{'look':'-'}]}}, #look純屬沒事找事玲献,只是試一下 $and的用法
{'$group':{'_id':{'$slice':['$cates',2,1]},'counts':{'$sum':1}}}, #使用切片分組,選取cates的跳過前兩個梯浪,選擇后一個捌年,計數(shù),注意各用法
{'$sort' :{'counts':-1}}
]
for i in sample.aggregate(pipeline):
yield [i['_id'][0],i['counts']] #產(chǎn)生所需的數(shù)據(jù)類型,data中的各個列表
#for i in gen_data('2016.01.10'):
# print(i)
options = {
'chart' : {'zoomType':'xy'},
'title' : {'text': '發(fā)帖量統(tǒng)計'},
'subtitle': {'text': '2016.01.10二手物品在隨后7天內(nèi)挂洛,交易時長為1天的類目分布占比'},
}
series = {
'type':'pie',
'name':'pie charts',
'data':[data for data in gen_data('2016.01.10')] #列表的列表哈哈
}
charts.plot(series,show = 'inline',options = options)
結果: