先进行charts饼状图的小测,如下,结果为正常饼状图
import charts
options = {
'chart' : {'zoomType':'xy'},
'title' : {'text': '发帖量统计'},
'subtitle': {'text': '可视化统计图表'},
}
series = [{
'type': 'pie',
'name': 'Browser share',
'data':[
['北京二手家电', 8836],
['北京二手文体/户外/乐器', 5337],
['北京二手数码产品', 4405],
['北京二手服装/鞋帽/箱包', 4074],
['北京二手母婴/儿童用品', 3124],
['北京二手台式机/配件', 2863],
['北京二手图书/音像/软件', 2777],
['北京二手办公用品/设备', 2496],
['北京二手家具', 1903],
['北京二手美容/保健', 1838],
['北京二手手机', 1603],
['北京二手笔记本', 1174],
['北京二手设备', 1004],
['北京其他二手物品', 761],
['北京二手平板电脑', 724]
]
}]
charts.plot(series,show = 'inline',options = options)
绘制前面数据库中的数据来找某一天交易的各类目物品的饼状图
- 使用了pymongo的pipeline模型,和aggregate函数
pipeline = [
{'$match':{'$and':[{'pub_date':'2015.12.24'},{'time':3}]}},#匹配,用了and方法
{'$group':{'_id':'$price','counts':{'$sum':1}}}, #分组,并计数
{'$sort' :{'counts':-1}}, #排序
{'$limit':10} #限制展示个数
]
- pymongo的数据可选择展示
for i in item_info.find({},{'_id':0,'cates':1}).limit(300):
print(i) # 只展示cates的数据
- charts中的pie类型,见上
- 把json格式导入数据库,了解导入命令
C:\Users\10201>mongoimport -d tongcheng -c sample F:\BaiduYunDownload\课程源码及作业参考答案\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} #限制输出个数
]
for i in sample.aggregate(pipeline): #使用aggregate的管道来格式化输出数据
print(i)
'''
'''
pipeline = [
{'$match':{'$and':[{'pub_date':'2016.01.11'},{'look':'-'}]}}, #look纯属没事找事,只是试一下 $and的用法
{'$group':{'_id':{'$slice':['$cates',2,1]},'counts':{'$sum':1}}}, #使用切片分组,选取cates的跳过前两个,选择后一个,计数,注意各用法
{'$sort' :{'counts':-1}}
]
for i in sample.aggregate(pipeline):
print(i)
'''
def gen_data(date): #生成器,产生某一天的的各项数据
pipeline = [
{'$match':{'$and':[{'pub_date':date},{'look':'-'}]}}, #look纯属没事找事,只是试一下 $and的用法
{'$group':{'_id':{'$slice':['$cates',2,1]},'counts':{'$sum':1}}}, #使用切片分组,选取cates的跳过前两个,选择后一个,计数,注意各用法
{'$sort' :{'counts':-1}}
]
for i in sample.aggregate(pipeline):
yield [i['_id'][0],i['counts']] #产生所需的数据类型,data中的各个列表
#for i in gen_data('2016.01.10'):
# print(i)
options = {
'chart' : {'zoomType':'xy'},
'title' : {'text': '发帖量统计'},
'subtitle': {'text': '2016.01.10二手物品在随后7天内,交易时长为1天的类目分布占比'},
}
series = {
'type':'pie',
'name':'pie charts',
'data':[data for data in gen_data('2016.01.10')] #列表的列表哈哈
}
charts.plot(series,show = 'inline',options = options)
结果: