结果
结果统计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.png由于原始代码的爬取逻辑问题,爬取到cates并不是大分类中的cates。
所以只能根据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 |
有了大数据作支撑,二手卖家该卖什么就知道了吧~
网友评论