美文网首页
3-2homework

3-2homework

作者: OldSix1987 | 来源:发表于2016-08-19 16:37 被阅读28次

    结果


    结果统计1.png 结果统计2.png

    代码


    
    # coding: utf-8
    
    
    import pymongo
    import charts
    
    client = pymongo.MongoClient('localhost', 27017)
    ganji = client['ganji']
    item_info = ganji['item_info']
    
    for i in item_info.find().limit(300):
        # print(i['cate'][0])
        pass
    
    cates = []
    for i in item_info.find():
        cates.append(i['cate'][0])
    cates_sets = list(set(cates))
    # print(cates_sets)
    
    
    post_times = []
    for index in cates_sets:
        post_times.append(cates.count(index))
    # print(post_times)
    
    def data_gen(type):
        for cate, times in zip(cates_sets, post_times):
            data = {
                'name': cate,
                'data':[times],
                'type':type
            }
            yield data
    
    series = [data for data in data_gen('column')]
    charts.plot(series, show='inline', options=dict(title=dict(text='各分类发帖量对比汇总')))
    
    

    总结

    1. 思路

    由于原始代码的爬取逻辑问题,爬取到cates并不是大分类中的cates。

    cates.png

    所以只能根据item_info中的cates,取出第一个元素(主分类),来大致看出分类发帖量情况。

    2. set 、count 进阶用法

    cates_sets = list(set(cates)) // 重复数组 变成 无重复数组
    
    // 查看各cate在重复数组中的重复次数
    
    for index in cates_sets:
        print( cates.count(index) )
    
    

    3. yield

    先看一个简单的例子:
    
    def count(n): 
        print ("cunting" )
        while n > 0: 
            # print ('before yield') 
            yield n   #生成值:n 
            n -= 1 
            # print ('after yield' )
    
    for x in count(5):
        print(x)
    
    

    这算是py语言中, 比较诡异的一种.
    for in 中可以 直接取 count(5)中的值, 说明函数返回值是一个list, 否则无法取值.
    其实可以先想想在oc中是如何实现的, 肯定是在定义count函数最后, return一个数组.
    但是py中追求极简的语法表达方式, 使用 yield 语法会生成一个迭代对象, 可以理解为就是存到了一个list中,
    并且循环会接着往下进行.

    // 本例中的使用
    def data_gen(type):
        for cate, times in zip(cates_sets, post_times):
            data = {
                'name': cate,
                'data':[times],
                'type':type
            }
            yield data
    
    // 这里的意思就是,调用这个函数后,会return一个含有多个格式化好的data数组
    // 所以下面才可以这样调用:
    
    series = [data for data in data_gen('column')]
    

    4. 结果数据分析

    • 数据分析表
    分类 帖子数量
    QQ号码 2878
    笔记本电脑 1485
    手表 1709
    电脑包 955
    家畜/家禽 1262
    钢琴 1184
    虚拟物品 1099
    农用机械 1074
    家具转让 1550
    手机 1881
    苗木 1644

    有了大数据作支撑,二手卖家该卖什么就知道了吧~

    相关文章

      网友评论

          本文标题:3-2homework

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