#coding=utf-8
import re
from datetime import date
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
ganji = client['ganji_market']
goods = ganji['sampledata']
def gen_data_by_district(start,end,district,limit):
'''指定城区,获取某时间段内二手物品数量'''
pipeline = [
{'$match': {'pub_date':{'$gte':start,'$lte':end},'area': {'$all': [district]}}},
{'$limit' : limit},
{'$group':
{'_id': {'district': {'$slice': ['$area', 1]}, 'cate': {'$slice': ['$cates', 2, 1]}},
'count': {'$sum': 1}}},
{'$sort': {'count':-1}},
{'$project' : {'cate' : '$_id.cate','count' : 1,'_id' : 0}}
]
for data in goods.aggregate(pipeline):
fmt_data = {
'name' : data['cate'][0],
'data' : [data['count']],
'type' : 'column'
}
yield fmt_data
district = '海淀'
start = '2015.01.01'
end = '2015.12.30'
datas = gen_data_by_district(start,end,district,20000)
series = [item for item in datas]
options = {
'chart' : {'zoomType':'xy'},
'title' : {'text': district + '区二手物品发帖量'},
'subtitle': {'text': start + '至' + end},
'xAxis' : {'title': {'text': '二手物品类目'}},
'yAxis' : {'title': {'text': '发帖量'}}
}
charts.plot(series,options=options,show='inline')
Adjust chart settings
def gen_data_by_look(start,end,cate,limit):
'''指定类目,获取某时间段内所有城区二手物品平均数'''
# pipeline = [
# {'$match': {'pub_date':{'$gte':start,'$lte':end},'cates': {'$all': [cate]}, 'look' : {'$nin' : ['-']}}},
# {'$limit' : limit},
# {'$group':{'_id': '$look','avg': {'$avg': '$price'}}},
# {'$sort': {'_id':1}},
# ]
pipeline = [
{'$match' : {'pub_date':{'$gte':start,'$lte':end},'cates' : {'$all' : [cate]},'look' : {'$nin' : ['-']}}},
{'$project' : {'price' : 1,'look' : 1, '_id' : 0}},
{'$limit': limit},
{'$group' : {'_id' : '$look','avg' : {'$avg' : '$price'}}},
{'$sort': {'_id':1}},
]
categories = []
data = []
for item in goods.aggregate(pipeline):
categories.append(item['_id'])
data.append(round(item['avg'],2))
return(categories,data)
cate = '北京二手手机'
start = '2015.01.01'
end = '2015.12.30'
datas = gen_data_by_look(start, end, cate, 20000)
series = {
'name' : cate,
'data' : datas[1]
}
print(datas[1])
print(datas[0])
options = {
'chart' : {'zoomType':'xy'},
'title' : {'text': cate + '平均价格走势'},
'subtitle': {'text': start + '至' + end},
'xAxis' : {'title': {'text': '二手物品类目'},
'categories' :datas[0]},
'yAxis' : {'title': {'text': '发帖量'}}
}
charts.plot(series,options=options,show='inline')
[175.0, 497.86, 2802.46, 1657.75, 975.26, 2294.28, 450.0]
['7成新及以下', '8成新', '95成新', '99成新', '9成新', '全新', '报废机/尸体']
Adjust chart settings