來自:Python數(shù)據(jù)科學(xué)(微信號:Python _蜘蛛俠)
北京二手房價格分析與預(yù)測
目的:本文介紹了一個數(shù)據(jù)分析的初步項(xiàng)目,旨在了解如何使用Python進(jìn)行簡單的數(shù)據(jù)分析。
數(shù)據(jù)來源:博主通過爬蟲收集的全鏈家網(wǎng)北京二手房數(shù)據(jù)(后臺回復(fù)0022即可獲得)。
數(shù)據(jù)的初步研究
一開始是導(dǎo)入科學(xué)計算包numpy,熊貓,visual matplotlib,seaborn,機(jī)器學(xué)習(xí)包sklearn。
進(jìn)口熊貓aspd
importnumpy asnp
importseaborn assns
importmatplotlib asmpl
importmatplotlib.pyplot asplt
from ipython . display import display
PLT . style . use(" five 30 yeah ")
SNS . set _ style({ ' font . sans-serif ':[' sim hei ',' Arial']})
%matplotlib內(nèi)聯(lián)
#檢查Python版本
fromsys importversion_info
ifversion_info.major!= 3:
RaiseException('請使用Python 3完成此項(xiàng)目')
然后導(dǎo)入數(shù)據(jù),進(jìn)行初步觀察,包括了解缺失值、異常值和數(shù)據(jù)特征的近似描述性統(tǒng)計。
#導(dǎo)入鏈家二手房數(shù)據(jù)
賈立安_df = pd.read_csv('lianjia.csv ')
顯示器(賈立安_df.head(n=2))
初步觀察有11個特征變量,價格是我們這里的目標(biāo)變量,然后我們繼續(xù)深入觀察。
#檢查缺失值
賈立安_df.info()
找到了一個公共數(shù)據(jù)集
23677
數(shù)據(jù),其中
升降機(jī)
特征有明顯的缺失值。
賈立安_ df . description()
上述結(jié)果給出了特征值為數(shù)值的一些統(tǒng)計值,包括均值、標(biāo)準(zhǔn)差、中值、最小值、最大值、25%分位數(shù)和75%分位數(shù)。這些統(tǒng)計結(jié)果簡單直接,對于一個特征的初步理解非常有用。比如我們觀察到Size特征的最大值是1019平方米,最小值是2平方米,那么我們就要思考這個在實(shí)際中是否存在。如果不存在,那么這個數(shù)據(jù)就是一個離群值,會嚴(yán)重影響模型的性能。
當(dāng)然,這只是初步觀察。未來,我們將使用數(shù)據(jù)可視化來清晰地顯示和確認(rèn)我們的猜測。
#增加新功能平均房價
df=賈立安_df.copy()
df['PerPrice'] =賈立安_ df[' Price ']/賈立安_df['Size']
#重新定位列
欄目= ['地區(qū)','小區(qū)','花園','布局','樓層','年份','大小','電梯','方向','改造','價格',]
df = pd。數(shù)據(jù)幀(df,列=列)
#重新檢查數(shù)據(jù)集
顯示器(df.head(n=2))
我們發(fā)現(xiàn)Id特性沒有實(shí)際意義,就去掉了。由于房子的單價很容易分析,并且可以簡單地通過使用總價/面積來獲得,所以增加了一個新的特征PerPrice(僅用于分析,不用于預(yù)測)。另外,功能的順序也做了調(diào)整,看起來很舒服。
數(shù)據(jù)可視化分析
區(qū)域特征分析
至于地域特點(diǎn),可以分析不同地區(qū)房價和數(shù)量的對比。
#將二手房面積分組,對比二手房數(shù)量和每平方米價格
df _ house _ count = df . group by(' Region ')[' Price ']。計數(shù)()。sort_values(升序=False)。to_frame()。reset_index()
df _ house _ mean = df . group by(' Region ')[' Perprice ']。平均值()。sort_values(升序=False)。to_frame()。reset_index()
f,[ax1,ax2,ax3]= PLT . subtracts(3,1,figsize=(20,15))
sns.barplot(x='Region ',y='PerPrice ',palette="Blues_d ",data=df_house_mean,ax=ax1)
Ax1.set_title('北京不同地區(qū)二手房每平方米單價對比',fontsize=15)
Ax1.set_xlabel ('zone ')
Ax1.set_ylabel('每平方米單價')
sns.barplot(x='Region ',y='Price ',palette="Greens_d ",data=df_house_count,ax=ax2)
Ax2.set_title('北京不同地區(qū)二手房數(shù)量對比',fontsize=15)
Ax2.set_xlabel ('zone ')
Ax2.set_ylabel('數(shù)量')
sns.boxplot(x='Region ',y='Price ',data=df,ax=ax3)
Ax3.set_title('北京各地區(qū)二手房總價',fontsize=15)
Ax3.set_xlabel ('zone ')
Ax3.set_ylabel('總房價')
plt.show()
熊貓的網(wǎng)絡(luò)透視功能是用來分組排序的。區(qū)域特征可視化直接由seaborn完成,使用調(diào)色板調(diào)色板參數(shù),顏色逐漸變化。描述越輕,解釋越少,越反。
可以觀察到:
二手房均價:西城區(qū)的房價最貴均價大約11萬/平,因?yàn)槲鞒窃诙h(huán)以里,且是熱門學(xué)區(qū)房的聚集地。其次是東城大約10萬/平,然后是海淀大約8.5萬/平,其它均低于8萬/平。二手房房數(shù)量:從數(shù)量統(tǒng)計上來看,目前二手房市場上比較火熱的區(qū)域。海淀區(qū)和朝陽區(qū)二手房數(shù)量最多,差不多都接近3000套,畢竟大區(qū),需求量也大。然后是豐臺區(qū),近幾年正在改造建設(shè),有趕超之勢。二手房總價:通過箱型圖看到,各大區(qū)域房屋總價中位數(shù)都都在1000萬以下,且房屋總價離散值較高,西城最高達(dá)到了6000萬,說明房屋價格特征不是理想的正太分布。尺寸特征分析
f,[ax1,ax2] = plt .支線劇情(1,2,figsize=(15,5))
#建筑時間分布
sns.distplot(df['Size'],bins = 20,ax=ax1,color='r ')
sns.kdeplot(df['Size'],shade=True,ax=ax1)
#建造時間和銷售價格之間的關(guān)系
sns.regplot(x='Size ',y='Price ',data=df,ax=ax2)
plt.show()
Size 分布: 通過 distplot 和 kdeplot 繪制柱狀圖觀察 Size 特征的分布情況,屬于長尾類型的分布,這說明了有很多面積很大且超出正常范圍的二手房。Size 與 Price 的關(guān)系: 通過 regplot 繪制了 Size 和 Price 之間的散點(diǎn)圖,發(fā)現(xiàn) Size 特征基本與Price呈現(xiàn)線性關(guān)系,符合基本常識,面積越大,價格越高。但是有兩組明顯的異常點(diǎn):1. 面積不到10平米,但是價格超出10000萬;2. 一個點(diǎn)面積超過了1000平米,價格很低,需要查看是什么情況。df . loc[df[' Size ']& lt;10]
查了一下,發(fā)現(xiàn)這組數(shù)據(jù)是別墅,異常原因是別墅結(jié)構(gòu)特殊(無朝向,無電梯),場地定義與二手商品房不同,導(dǎo)致爬行數(shù)據(jù)錯位。別墅型二手房不在我們考慮范圍內(nèi),去掉再觀察尺寸分布與價格的關(guān)系。
df.loc[df['Size']>1000]
經(jīng)過觀察,這個不正常點(diǎn)不是普通的民用二手房,很可能是商品房,所以只有一室零廳,面積1000多平米,所以我們選擇在這里拆遷。
df= df[(df[ 'Layout']!= '重疊別墅')&;(df[' Size ']& lt;1000)]
目測發(fā)現(xiàn)后沒有明顯異常。
布局特征分析
f,ax1 = PLT . subtracts(fig size =(20,20))
sns.countplot(y='Layout ',data=df,ax=ax1)
Ax1.set_title('房屋類型',fontsize=15)
Ax1.set_xlabel('數(shù)量')
Ax1.set_ylabel('公寓類型')
plt.show()
這個特點(diǎn)真的不為人知。有9室3廳4室0廳等奇怪的結(jié)構(gòu)。其中兩室一廳占絕大多數(shù),其次是三室一廳、兩室兩廳。但仔細(xì)觀察特征分類,有很多不規(guī)則的名字,如兩室一廳、兩室一衛(wèi)、別墅等,卻沒有統(tǒng)一的名字。此類特征不能作為機(jī)器學(xué)習(xí)模型的數(shù)據(jù)輸入,應(yīng)采用特征工程進(jìn)行相應(yīng)處理。
翻新特征分析
df['翻新']。value_counts()
精裝11345 Lite 8497其他3239空白576
南北20
名稱:翻新,數(shù)據(jù)類型:int64
發(fā)現(xiàn)裝修特征有南北兩種,屬于朝向型。可能是因?yàn)榕老x進(jìn)程中的一些信息位置是空,導(dǎo)致此處出現(xiàn)“方向”定向特征,需要清除或替換。
#去掉錯誤的數(shù)據(jù)“南北”,因?yàn)榕老x進(jìn)程中的一些信息位置是空,導(dǎo)致此處出現(xiàn)“方向”的特征,需要清除或替換
df['翻新'] = df.loc[(df['翻新']!= '南北'),'改造']
#框架設(shè)置
f,[ax1,ax2,ax3]= PLT . subtracts(1,3,figsize=(20,5))
sns.countplot(df['翻新'],ax=ax1)
sns.barplot(x= '翻新',y= '價格',數(shù)據(jù)=df,ax=ax2)
sns.boxplot(x= '翻新',y= '價格',數(shù)據(jù)=df,ax=ax3)
plt.show()
據(jù)觀察,精裝修的二手房數(shù)量最多,其次是簡單裝修,這在我們的日常生活中也很常見。至于價格,空白型最高,精裝修次之。
電梯特征分析
當(dāng)我們探索數(shù)據(jù)時,我們發(fā)現(xiàn)電梯特性中有很多缺失的值,這對我們非常不利。首先,讓我們看看有多少缺失值:
misn = len(df.loc[(df['電梯'])。isnull()),‘電梯’])
打印(缺少“電梯是:+str(misn)”值的數(shù)量)
缺失電梯值的數(shù)量為:8237
那么多缺失值怎么辦?這個需要根據(jù)實(shí)際情況來考慮。常用的方法有均值/中值填充法、直接剔除法或根據(jù)其他特征建模預(yù)測法。
這里考慮填充方式,但是有沒有電梯不是數(shù)值,沒有平均值,也沒有中位數(shù)。怎么才能填滿?這里我們提供一種思路:根據(jù)樓層判斷是否有電梯。一般6層以上有電梯,6層以下沒有電梯。有了這個標(biāo)準(zhǔn),剩下的就簡單了。
#因?yàn)橛袀€別類型的錯誤,比如平裝和精裝,特征值放錯了,需要去掉
DF ['電梯'] = DF.loc [(DF ['電梯'] = = '帶電梯')|(df['電梯'] == '不帶電梯'),'電梯']
#填寫電梯缺失值
df.loc[(df['Floor']>;6)和amp(df ['電梯']。isnull()),'電梯'] = '有電梯'
df . loc[(df[' Floor ']& lt;=6)和amp(df ['電梯']。isnull()),'電梯'] = '無電梯'
f,[ax1,ax2] = plt .支線劇情(1,2,figsize=(20,10))
sns.countplot(df['電梯'],ax=ax1)
Ax1.set_title('比較帶電梯和不帶電梯的電梯數(shù)量',fontsize=15)
Ax1.set_xlabel('有電梯嗎')
Ax1.set_ylabel('數(shù)量')
sns.barplot(x= '電梯',y= '價格',數(shù)據(jù)=df,ax=ax2)
Ax2.set_title('有或沒有電梯的價格比較',fontsize=15)
Ax2.set_xlabel('有電梯嗎')
Ax2.set_ylabel('總價')
plt.show()
結(jié)果表明,有電梯的二手房數(shù)量大多是有的。畢竟高層土地利用率比較高,適合北京龐大的人群,高層需要電梯。相應(yīng)的,有電梯的二手房價格更高,因?yàn)榘穗娞莸那捌诎惭b和后期維護(hù)費(fèi)用(但這個價格對比只是一個平均概念,比如6層無電梯的豪華住宅小區(qū)價格肯定更高)。
年份特征分析
grid= sns。FacetGrid(df,row= '電梯',col= '翻新',調(diào)色板= '抗震',size=4)
網(wǎng)格.地圖(點(diǎn)散布,“年”,“價格”)
grid.add_legend()
在裝修和電梯的分類條件下,利用FaceGrid分析年份特征,觀測結(jié)果如下:
整個二手房房價趨勢是隨著時間增長而增長的;2000年以后建造的二手房房價相較于2000年以前有很明顯的價格上漲;1980年之前幾乎不存在有電梯二手房數(shù)據(jù),說明1980年之前還沒有大面積安裝電梯;1980年之前無電梯二手房中,簡裝二手房占絕大多數(shù),精裝反而很少;樓層特征分析
f,ax1 = PLT . subtracts(fig size =(20,5))
sns.countplot(x='Floor ',data=df,ax=ax1)
Ax1.set_title('房屋類型',fontsize=15)
Ax1.set_xlabel('數(shù)量')
Ax1.set_ylabel('公寓類型')
plt.show()
可以看出,6樓二手房數(shù)量最多,但個別樓層的特點(diǎn)沒有意義,因?yàn)槊總€小區(qū)的總樓層數(shù)是不一樣的,所以需要了解樓層的相對含義。此外,樓層和文化之間有一個非常重要的聯(lián)系。比如中國文化優(yōu)于別人,七層可能比較受歡迎,房價也比較貴,但是一般不會有四層或者十八層。當(dāng)然,一般情況下,中樓層受歡迎,價格高,底層和頂層受歡迎程度低,價格相對低。所以樓層是一個很復(fù)雜的特征,對房價影響很大。
總結(jié)
這個分享的目的是讓大家知道如何用Python做一個簡單的數(shù)據(jù)分析,對于剛接觸數(shù)據(jù)分析的朋友來說,無疑是一個很好的練習(xí)。然而,這一分析仍有許多問題有待解決,如:
解決爬蟲獲取的數(shù)據(jù)源準(zhǔn)確度問題;需要爬取或者尋找更多好的售房特征;需要做更多地特征工程工作,比如數(shù)據(jù)清洗,特征選擇和篩選;使用統(tǒng)計模型建立回歸模型進(jìn)行價格預(yù)測;●數(shù)字509,直接輸入該條的數(shù)字
1.《北京二手房價格 數(shù)據(jù)分析實(shí)戰(zhàn)—北京二手房房價分析》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《北京二手房價格 數(shù)據(jù)分析實(shí)戰(zhàn)—北京二手房房價分析》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/yule/808508.html