背景:新住房政策頒布闰非,影響了成都房屋銷售市場膘格。需要了解近期二手房市場的熱門房屋信息,以調(diào)整貸款產(chǎn)品财松。
數(shù)據(jù):爬取二手房交易網(wǎng)站近期數(shù)據(jù)瘪贱,成都各個區(qū)域交易熱度較高的房屋信息。
目標:分析成都各區(qū)域二手房市場走勢辆毡,了解各區(qū)域交易情況菜秦,通過SPSS為房屋處置提供數(shù)據(jù)支持,做出可視化報告舶掖。
潛在風險:貸款項目受房價行情影響較大球昨,存在房價波動、變現(xiàn)難等風險眨攘。目前二次抵押在所有住宅抵押項目中占比例較多主慰。(二次抵押:房屋剩余價值進行抵押借款。二抵無法享受優(yōu)先受償權(quán)期犬,因此風險較一抵稍大)
制定目標——獲取數(shù)據(jù)——挖掘&分析——撰寫報告
針對成都二手房市場河哑,近期的變動做出分析與預(yù)測。
【一】 爬取數(shù)據(jù)
選擇的是目前成都最大的二手房屋交易網(wǎng)站貝殼網(wǎng)龟虎,以熱度為標準璃谨,爬取相關(guān)房屋信息。
import requests
from lxml import etree
import pandas as pd
import re
IO='https://cd.ke.com/ershoufang/?utm_source=baidu&utm_medium=ppc&utm_term=%E8%B4%9D%E5%A3%B3&utm_content=%E5%93%81%E7%89%8C_%E5%93%81%E7%89%8C&utm_campaign=%E6%88%90%E9%83%BD_%E5%93%81%E7%89%8C_%E7%B2%BE%E7%A1%AE'
r=requests.get(IO)
data=etree.HTML(r.text)
area=data.xpath('/html/body/div[3]/div[1]/dl[2]/dd/div[1]/div/a/text()')
link=data.xpath('/html/body/div[3]/div[1]/dl[2]/dd/div[1]/div[1]/a/@href')
#爬取房屋名(每個區(qū)域帶看次數(shù)最多的前90戶)
def Name(link):
NAME=[]
for i in link:
A=[]
url='https://cd.ke.com'+'{}'.format(i)
for j in range(1,4):
if j== 1:
url1=url +'/co52/'
else:
url1=url +'/pg%dco52/' %j
r=requests.get(url1,timeout=5)
data=etree.HTML(r.text)
name=data.xpath('''//div[4]/div[1]/ul/li/div[1]/div[1]//a[@class='CLICKDATA']/text()''')
A=A+name
NAME=NAME+A
NAME=pd.DataFrame(pd.Series(NAME),columns=['名字'])
return (NAME)
#爬取房屋總價
def All(link):
ALL=[]
for i in link:
A=[]
url='https://cd.ke.com'+'{}'.format(i)
for j in range(1,4):
if j== 1:
url1=url +'/co52/'
else:
url1=url +'/pg%dco52/' %j
r=requests.get(url1,timeout=5)
data=etree.HTML(r.text)
all=data.xpath('//div[4]/div[1]/ul/li/div[1]/div[6]/div[1]/span/text()')
A=A+all
ALL=ALL+A
ALL=pd.DataFrame(pd.Series(ALL),columns=['總價(萬元)'])
return (ALL)
#爬取房屋單價
def Price(link):
PRICE=[]
for i in link:
A=[]
url='https://cd.ke.com'+'{}'.format(i)
for j in range(1,4):
if j== 1:
url1=url +'/co52/'
else:
url1=url +'/pg%dco52/' %j
r=requests.get(url1,timeout=5)
data=etree.HTML(r.text)
price=data.xpath('//div[4]/div[1]/ul/li/div[1]/div[6]/div[2]/span/text()')
a=[]
for i in price:
b=re.sub("\D", "",(i.split('/')[0]))
a.append(b)
A=A+a
PRICE=PRICE+A
PRICE=pd.DataFrame(pd.Series(PRICE),columns=['均價(¥/m^2)'])
return(RICE)
#爬取房屋查看人數(shù)
def Number(link):
NUMBER_1=[]
NUMBER_2=[]
for i in link:
A=[]
B=[]
url='https://cd.ke.com'+'{}'.format(i)
for j in range(1,4):
if j== 1:
url1=url +'/co52/'
else:
url1=url +'/pg%dco52/' %j
r=requests.get(url1,timeout=5)
data=etree.HTML(r.text)
number=data.xpath('//div[4]/div[1]/ul/li/div[1]/div[4]/text()')
number1=[]
number2=[]
for i in number:
a=re.sub("\D", "",(i.split('/')[0]))
b=re.sub("\D", "",(i.split('/')[1]))
number1.append(a)
number2.append(b)
A=A+number1
B=B+number2
NUMBER_1=NUMBER_1+A
NUMBER_2=NUMBER_2+B
NUMBER_1=pd.DataFrame(pd.Series(NUMBER_1),columns=['關(guān)注人數(shù)'])
NUMBER_2=pd.DataFrame(pd.Series(NUMBER_2),columns=['帶看人數(shù)'])
return (NUMBER_1,NUMBER_2)
#房間布局,面積
def Style(link):
STYLE=[]
SIZE=[]
for i in link:
A=[]
B=[]
url='https://cd.ke.com'+'{}'.format(i)
for j in range(1,4):
if j== 1:
url1=url +'/co52/'
else:
url1=url +'/pg%dco52/' %j
r=requests.get(url1,timeout=5)
data=etree.HTML(r.text)
s=data.xpath('//div[4]/div[1]/ul/li/div[1]/div[2]/div/text()')
style=[]
size=[]
for i in s:
style.append(i.split('|')[1])
size.append(i.split('|')[2])
A=A+style
B=B+size
STYLE=STYLE+A
SIZE=SIZE+B
STYLE=pd.DataFrame(pd.Series(STYLE),columns=['布局'])
SIZE=pd.DataFrame(pd.Series(SIZE),columns=['面積(m^2)'])
return( STYLE,SIZE)
#所在小區(qū)
def Street(link):
NAME_2=[]
for i in link:
A=[]
url='https://cd.ke.com'+'{}'.format(i)
for j in range(1,4):
if j== 1:
url1=url +'/co52/'
else:
url1=url +'/pg%dco52/' %j
r=requests.get(url1,timeout=5)
data=etree.HTML(r.text)
where=data.xpath('//div[4]/div[1]/ul/li/div[1]/div[2]/div/a/text()')
A=A+where
NAME_2=NAME_2+A
NAME_2=pd.DataFrame(pd.Series(NAME_2),columns=['小區(qū)'])
return(NAME_2)
#位置
def Location(link):
WHERE=[]
for i in link:
A=[]
url='https://cd.ke.com'+'{}'.format(i)
for j in range(1,4):
if j== 1:
url1=url +'/co52/'
else:
url1=url +'/pg%dco52/' %j
r=requests.get(url1,timeout=5)
data=etree.HTML(r.text)
where=data.xpath('//div[4]/div[1]/ul/li/div[1]/div[3]/div/a/text()')
A=A+where
WHERE=WHERE+A
WHERE=pd.DataFrame(pd.Series(WHERE),columns=['具體方位'])
return (WHERE)
#建筑時間
def Age(link):
AGE=[]
for i in link:
A=[]
url='https://cd.ke.com'+'{}'.format(i)
for j in range(1,4):
if j== 1:
url1=url +'/co52/'
else:
url1=url +'/pg%dco52/' %j
r=requests.get(url1,timeout=5)
data=etree.HTML(r.text)
s=data.xpath('//div[4]/div[1]/ul/li/div[1]/div[3]/div/text()')
age=[]
for i in s:
a=re.sub("\D", "",i)
if len(a)<4:
age.append('NAN')
else:
age.append(a[-4:])
A=A+age
AGE=AGE+A
AGE=pd.DataFrame(pd.Series(AGE),columns=['建筑時間'])
return (AGE)
#匯總表格
if __name__ == '__main__':
NAME = Name(link)
NAME_2 = Street(link)
WHERE = Location(link)
STYLE,SIZE = Style(link)
ALL = All(link)
PRICE = Price(link)
NUMBER_1,NUMBER_2 = Number(link)
AGE = Age(link)
_房屋信息=pd.concat([NAME,NAME_2,WHERE,STYLE,SIZE,ALL,PRICE,NUMBER_1,NUMBER_2,AGE],axis=1)
return (_房屋信息)
爬取完成后導(dǎo)入Excel文件
【二】 數(shù)據(jù)清洗
根據(jù)業(yè)務(wù)經(jīng)驗選擇出影響因素較大的特征維度進行分析鲤妥。
文本數(shù)值化:因為房屋具體位置在分析中所占有的比例較高佳吞,因此帶如SPSS操作時進行二次處理。
eg: 錦江區(qū)—東大路 替換為 1001
缺失值填充:若缺失值超過80%放棄此維度棉安,有連續(xù)規(guī)律的進行計算后填充底扳,無規(guī)律空值使用pd.NAN進行填充。
將數(shù)據(jù)簡易清洗后得到額外兩張表格
【三】 圖表分析
通過Spss分析清洗后的數(shù)據(jù)贡耽,做出可視化分析報告衷模。
目前成都各區(qū)域房價主要分層4個檔位鹊汛。
一下選擇各個區(qū)域的熱門房屋進行分析。
可以知區(qū)域和布局在二手房市場中影響比例最大阱冶,貸款業(yè)務(wù)中應(yīng)當主要考慮這兩個維度刁憋。