美文网首页
第三周/第二节练习项目: 绘制各类目对比柱状图

第三周/第二节练习项目: 绘制各类目对比柱状图

作者: uvscjh | 来源:发表于2016-07-29 13:53 被阅读80次

    1. 引言

    统计赶集网-上海-二手市场16个大类目的发帖量, 并在jupyter-notebook中绘制出各区域发帖量对比的柱状图

    2. 分析

    • 筛选重复的分类使之唯一
    • 分别统计分类出现的次数
    • 生成合乎charts要求格式的字典列表

    3. 实现

    In [1] :
    from pymongo import MongoClient
    from string import punctuation
    import charts
    

    Server running in the folder /home/wjh at 127.0.0.1:53200


    In [2] :
    client = MongoClient('10.66.17.17', 27017)
    database = client['ganji']
    item_info_collection = database['sh_ershou_itemY']
    

    In [3] :
    # 包含所有分类的列表
    cate_list = [i['cate'][1] for i in item_info_collection.find()]
    # 区域名字是唯一的集合
    cate_set = set(cate_list)
    # 输出看下是什么结果
    print(len(cate_set), cate_set)
    

    16 {'xuniwupin', 'meironghuazhuang', 'jiaju', 'diannao', 'fushixiaobaxuemao', 'ershoubijibendiannao', 'shuma', 'laonianyongpin', 'xianzhilipin', 'ruanjiantushu', 'yingyouyunfu', 'nongyongpin', 'jiadian', 'bangong', 'rirongbaihuo', 'shouji'}


    In [4] :
    # 统计分类出现次数的列表, 如下看到有16个分类
    cate_times = [cate_list.count(index) for index in cate_set]
    # 输出看下是什么结果
    print(len(cate_times), cate_times)
    

    16 [759, 2815, 4040, 4043, 4041, 2302, 3935, 1210, 3757, 3144, 4045, 321, 4041, 3751, 2287, 3335]


    In [5] :
    # 定义生成图表数据的函数
    def cate_data_gen(types):
        length = 0
        # 循环次数为区域集合长度
        if length <= len(area_set):
            for name, time in zip(cate_set, cate_times):
                data = {
                    'name': name,
                    'data': [time],
                    'type': types,
                }
                # 遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行, 所以循环执行就有一个字典列表了
                yield data
    # 输出看下是什么结果
    [i for i in cate_data_gen('column')]
    
    Out [5] :
    [{'data': [759], 'name': 'xuniwupin', 'type': 'column'},
     {'data': [2815], 'name': 'meironghuazhuang', 'type': 'column'},
     {'data': [4040], 'name': 'jiaju', 'type': 'column'},
     {'data': [4043], 'name': 'diannao', 'type': 'column'},
     {'data': [4041], 'name': 'fushixiaobaxuemao', 'type': 'column'},
     {'data': [2302], 'name': 'ershoubijibendiannao', 'type': 'column'},
     {'data': [3935], 'name': 'shuma', 'type': 'column'},
     {'data': [1210], 'name': 'laonianyongpin', 'type': 'column'},
     {'data': [3757], 'name': 'xianzhilipin', 'type': 'column'},
     {'data': [3144], 'name': 'ruanjiantushu', 'type': 'column'},
     {'data': [4045], 'name': 'yingyouyunfu', 'type': 'column'},
     {'data': [321], 'name': 'nongyongpin', 'type': 'column'},
     {'data': [4041], 'name': 'jiadian', 'type': 'column'},
     {'data': [3751], 'name': 'bangong', 'type': 'column'},
     {'data': [2287], 'name': 'rirongbaihuo', 'type': 'column'},
     {'data': [3335], 'name': 'shouji', 'type': 'column'}
    

    In [6] :
    # 生成数据
    serises = [i for i in cate_data_gen('column')]
    # 传入参数并绘制图表
    charts.plot(serises, show='inline', options=dict(title=dict(text='某些时候上海城区二手物品类别分布量')))
    
    Out [6] :
    Paste_Image.png

    4. 总结

    • highcharts:
      Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图、曲线图、面积图、柱状图、饼图、散点图等多达18种不同类型的图表,可以满足你对Web图表的任何需求 !

    相关文章

      网友评论

          本文标题:第三周/第二节练习项目: 绘制各类目对比柱状图

          本文链接:https://www.haomeiwen.com/subject/ziuljttx.html