運(yùn)用python將前一節(jié)爬取的趕集網(wǎng)數(shù)據(jù)進(jìn)行分析了解北京城區(qū)二手物品發(fā)帖量
效果是這樣的:
我的代碼:
from pymongo import MongoClient
from string import punctuation
import charts
client=MongoClient('localhost',27017)#鏈接數(shù)據(jù)庫
ganjiDB=client['ganjiDB']
detail_info=ganjiDB['detail_info']
以下為過程調(diào)試查看信息护奈,非代碼部分
'''
print(detail_info.find().count())#查看collection有多少條document
-----------------------------------------------------------------------------------------------
輸出信息:
86850
-----------------------------------------------------------------------------------------------
for i in detail_info.find().limit(1): #過程查看
print(i)
-----------------------------------------------------------------------------------------------
輸出信息:
{'area': ['朝陽', '-', '高碑店'], '_id': ObjectId('5698f524a98063dbe9e91ca8'), 'look': '-', 'url': 'http://bj.58.com/jiadian/24541664530488x.shtml', 'price': '450 元', 'pub_date': '2016.01.12', 'cates': ['北京58同城', '北京二手市場', '北京二手家電', '北京二手冰柜'], 'title': '【圖】95成新小冰柜轉(zhuǎn)讓 - 朝陽高碑店二手家電 - 北京58同城'}
-----------------------------------------------------------------------------------------------
for i in detail_info.find().limit(7):#過程查看
print(i['area'])
-----------------------------------------------------------------------------------------------
輸出信息:
['朝陽', '-', '高碑店']
['朝陽', '-', '定福莊']
['西城', '-', '西單']
['朝陽', '-', '望京']
['豐臺']
['朝陽', '-', '定福莊']
None
-----------------------------------------------------------------------------------------------
for i in detail_info.find().limit(7):#過程處理,將區(qū)域中的標(biāo)點(diǎn)符號刪除
if i['area']:
area=[i for i in i['area'] if i not in punctuation]#去除標(biāo)點(diǎn)符號
else:
area=['不明']#將地區(qū)為‘None’調(diào)整為‘不明’
print(area)
-----------------------------------------------------------------------------------------------
輸出信息:
['朝陽', '高碑店']
['朝陽', '定福莊']
['西城', '西單']
['朝陽', '望京']
['豐臺']
['朝陽', '定福莊']
['不明']
-----------------------------------------------------------------------------------------------
'''
調(diào)試查看完畢秽荤,繼續(xù)代碼
for i in detail_info.find():
if i['area']:
area=[i for i in i['area'] if i not in punctuation]#去除標(biāo)點(diǎn)符號
else:
area=['不明']#將地區(qū)為‘None’調(diào)整為‘不明’
detail_info.update_one({'_id':i['_id']},{'$set':{'area':area}})
#將修改的條目更新到collection,注意此之前做好原collection的備份db.collection.copyTo('newcollection')
area_list=[]#通過find條目信息查看逗旁,每個(gè)發(fā)帖條目都關(guān)聯(lián)一個(gè)區(qū)域下翎,那么可統(tǒng)一區(qū)域的數(shù)量進(jìn)而推算當(dāng)前區(qū)域的發(fā)帖量
for i in detail_info.find():
area_list.append(i['area'][0])
area_index=list(set(area_list))#將區(qū)域列表轉(zhuǎn)換為集合剔除重復(fù)區(qū)域,運(yùn)用集合的特點(diǎn):無重復(fù)元素
#print(area_index,len(area_index))
post_times=[]
for index in area_index:
post_times.append(area_list.count(index))#以index為索引驶社,查找每個(gè)index在原始區(qū)域表area_list中出現(xiàn)過多少次
#print(post_times)
def get_gen(types):#建議函數(shù)举畸,運(yùn)用生成器每次生成一條表象
length=0
if length<=len(area_index):
for area,times in zip(area_index,post_times):
info={
'name':area,
'data':[times],
'type':types
}
yield info
length+=1
series=[data for data in get_gen('column')]#生成圖標(biāo)所需參數(shù)
#print(series)
charts.plot(series, show='inline', options=dict(title=dict(text='七日內(nèi)北京城區(qū)二手物品')))#圖標(biāo)生成
總結(jié):
- 數(shù)據(jù)分析為了更好的圖形化展示這里使用jupyter notebook;
- 圖標(biāo)分析查看使用charts模塊;
- 引入string模塊中的punctuation方法去除目標(biāo)元素的標(biāo)點(diǎn)符號和簸;
- 函數(shù)中引入生成器,此函數(shù)需通過for循環(huán)依次迭代輸出滞谢,或是next()方法究孕;
- 集合與列表的靈活運(yùn)用,借助列表元素的不重復(fù)性清理列表內(nèi)容爹凹,使其作為列表索引厨诸;
- charts模塊數(shù)據(jù)格式需遵循標(biāo)準(zhǔn)嚴(yán)格執(zhí)行,‘data’:[times]禾酱。
- 數(shù)據(jù)庫update方法的使用微酬,db.collection.update({條件},{更新信息})