charts3

先进行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)

绘制前面数据库中的数据来找某一天交易的各类目物品的饼状图

  1. 使用了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}  #限制展示个数
]
  1. pymongo的数据可选择展示
     for i in item_info.find({},{'_id':0,'cates':1}).limit(300):
           print(i)  # 只展示cates的数据
  1. charts中的pie类型,见上
  2. 把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)

结果:

charts3_第1张图片
图片.png

你可能感兴趣的:(charts3)