python大資料-統計北京各區二手市場活躍度

weixin_34107955發表於2017-10-31

目標

統計北京各區二手市場活躍度

工作流程

清洗資料;更新資料,整理思路;視覺化資料

具體方法

import charts
import pymongo
client = pymongo.MongoClient('localhost', 27017)
ceshi = client['ceshi']
item_info = ceshi['item_infoS']
# 資料庫內的資料是這個樣子的
for i in item_info.find().limit(300):
    print(i)

下面為列印結果:
{'pub_date': '2016.01.12', 'time': 0, '_id': ObjectId('5698f524a98063dbe9e91ca8'), 'price': 450, 'url': 'http://bj.58.com/jiadian/24541664530488x.shtml', 'look': '-', 'cates': ['北京58同城', '北京二手市場', '北京二手家電', '北京二手冰櫃'], 'title': '【圖】95成新小冰櫃轉讓 - 朝陽高碑店二手家電 - 北京58同城', 'area': ['朝陽', '高碑店']} {'pub_date': '2016.01.14', 'time': 2, '_id': ObjectId('5698f525a98063dbe4e91ca8'), 'price': 1500, 'url': 'http://bj.58.com/jiadian/24349380911041x.shtml', 'look': '-', 'cates': ['北京58同城', '北京二手市場', '北京二手家電', '北京二手洗衣機'], 'title': '【圖】洗衣機,小冰箱,小冰櫃,冷飲機 - 朝陽定福莊二手家電 - 北京58同城', 'area': ['朝陽', '定福莊']}

pipeline = [
    {'$match':{'$and':[{'pub_date':{'$in':['2015.12.25','2015.12.27']}},{'time':1}]}},     #  篩選函式,這裡篩選條件是pub_date和time
    {'$group':{'_id':{'$slice':['$area',1]},'counts':{'$sum':1}}},    # group接收2個引數,_id表示你以什麼作為分組,counts為命名,後來跟函式表示你要做什麼,sum表示發現一個加1,即計數作用。 主要用於資料的組團計算的,$price區別其他的$,它是表示呼叫原來的price
    {'$sort' :{'counts':-1}},    # 1表示從小到大正序排列,-1反之
    #{'$limit':3}   # 篩選出出現頻率最高三組數
]
# {'pub_date':'2015.12.24'}
for i in item_info.aggregate(pipeline):
    print(i)

列印結果如下:

{'_id': ['朝陽'], 'counts': 60}    # 列印結果,非程式
{'_id': ['不明'], 'counts': 59}
{'_id': ['海淀'], 'counts': 38}
{'_id': ['豐臺'], 'counts': 26}
{'_id': ['昌平'], 'counts': 18}
def data_gen(date,time):   # 定義成函式
    pipeline = [
        {'$match':{'$and':[{'pub_date':{'$in':date}},{'time':time}]}},
        {'$group':{'_id':{'$slice':['$area',1]},'counts':{'$sum':1}}},
        {'$sort' :{'counts':-1}},
    ]
    for i in item_info.aggregate(pipeline):
        yield [i['_id'][0],i['counts']]
for i in data_gen(['2015.12.25','2015.12.27'],1):
    print(i)

列印出的結果如下:

['朝陽', 60]   # 列印結果,這種格式正式圖示化所需要的
['不明', 59]
['海淀', 38]
['豐臺', 26]
['昌平', 18]
['通州', 13]
['大興', 13]
['房山', 9]
['西城', 7]

圖示化結果:

options = {          #  這些都是套路,在highchart 的js程式碼裡找到
    'chart'   : {'zoomType':'xy'},
    'title'   : {'text': '餅圖'},
    'subtitle': {'text': '城區交易量分佈'},
    }


series =  [{
    'type': 'pie',
    'name': 'pie charts',
    'data':[i for i in data_gen(['2015.12.25','2015.12.27'],1)]

        }]
charts.plot(series,options=options,show='inline')
4265870-b5f4df64c94122c7.png
圖示

相關文章