用Python對2019年二手房價格進行數據分析
本篇文章利用爬到數據的進行數據分析。
在這篇文章中,用到pandas、seaborn、Matplotlib等工具,分析工具用到提琴圖、箱型圖、散點圖等。
描述性分析
首先導入各種需要的庫方便后續一切操作,并讀取數據表,直接描述一下看看情況
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- import seaborn as sns
- import warnings
- # 這部分是超參數提前設置sns.set(style='darkgrid')
- plt.rcParams['font.family']='Arial Unicode MS'
- plt.rcParams['axes.unicode_minus']=False
- warnings.filterwarnings('ignore')
- data =pd.read_csv('鏈家新房100個.csv')
- data.describe()

最貴和最便宜
從上面輸出表格可以看到初步結論如下:
這些二手房最小面積9.6平米,最大718平米,最便宜的56萬,最貴的5200萬。面積大概集中在59-102平,價格大概集中在325-630萬,初步信息看完了有個印象,下邊進行詳細分析。
首先我對這個9.6平的房子很感興趣,提取出來看看,但是運行下邊代碼看到,CBD核心區,別墅,9.64平,56W,估計是從廁所拆出來賣的。。
作罷。跳過他繼續分析
- data.min()

而最貴的呢在鼓樓大街(二環邊上)聯排別墅,售價5200萬。emmm
- data.max()

價格分布&面積分布粗看
現在我想直觀的看一下售價分布,從下圖可以看到,售價主要集中在1000萬之內
- sns.distplot(data['錢'].dropna())

同樣的思路看一下面積,可以看到這些二手房源面積主要集中在100平米左右
- sns.distplot(data['面積'].dropna())

此處其實也可以兩張圖一塊看,代碼如下:(都有點右偏)
- fig, ax =plt.subplots(1,2) #2個子區域
- sns.distplot(data['錢'],ax=ax[0])
- sns.distplot(data['面積'],ax=ax[1])
- plt.show()

售價精看
對售價做一個箱型圖看看,很明顯的1000萬那條橫線以上的點兒,都是合理數據外的數據。
- sns.boxplot(data=data['錢'])

那么合理的數據分別是什么呢?可以參考以下代碼
- mean, std = data['錢'].mean() , data['錢'].std()
- # 得到上下限
- lower , upper =mean -3*std , mean+3*std
- print('均值',mean)
- print('標準差',std)
- print('下限',lower)
- print('上限',upper)
打印結果可以看到的是標準差集中在358萬,合理上限是1613萬。對現實的指導就是:如果有358萬,買一套房子就夠了,1613萬以上的房買起來就是坑爹了。
均值 538.44
標準差 358.47
下限 -536.9763753150206
上限 1613.8755022458467
價格最低的20套
通過這段代碼可以看一下這些房子分布在哪里。
結論見代碼下截圖,如果你對北京熟悉,可以看到,這些房子主要分布在5環外,部分在順義、昌平、門頭溝等地。
- t=data[['小區','地區','錢']].sort_values('錢')
- display(t.iloc[:20])


面積精看
同樣的方式,可以把”錢"列換為“面積”列看一下,面積均值89平,標準差50平,合理上限240平
均值 89.8874210879787
標準差 50.36697951495447
下限 -61.21351745688473
上限 240.9883596328421
面積最小的部分信息如下

朝向和裝修程度
通過對戶型方向進行分組展示可以看到在北京,主要還是南北向的,東西朝向的低很多
- posit=data['方向'].value_counts()[:10]
- display(posit)

裝修程度有四類:精裝、簡裝、毛坯、其他。
建筑形式有:板樓、塔樓、板樓塔樓結合、別墅等,
這兩個維度與價格有啥關系呢?
來分析分析,做三個圖先:
圖一:裝修狀態和價格關系

圖二:裝修狀態&建筑形式與售價關系

圖三:建筑形式連同裝修狀態與價格關系

圖四:建筑形式箱型圖

通過對裝修狀態做價格分布圖可以看到,精裝修的集中在400±100萬左右,簡裝稍微便宜一丟丟,毛坯房二手很少,其他形式的很多,價格集中在300-500萬左右
對裝修狀態進行樓房形式的拆解后做箱型圖如上,得到結論是板樓、塔樓、板樓塔樓結合是最多的,不論是精裝簡裝還是其他信息不明的裝修狀態的。
對建筑形式連同裝修狀態和價格關系可以看到,不論什么類型的建筑形式,都存在精裝修、簡裝修、毛坯。板樓價格橫跨100萬-1000萬之間,集中在300-600萬之間,板樓塔樓結合的價格集中在350萬-700萬之間,塔樓集中在380-700萬之間。
初步結論,如果能搞到300萬以上,精裝修的板樓或塔樓隨便選。
但若沒這么多錢,也可以有50-300萬之間的選擇,只是選項少一些,但并不是沒有選擇。
在這個初步結論基礎上提問:我有xxx萬,那么我能買到多少平的房子呢?
價格面積分析
先將面積分組,分組函數如下
- def value_to_level(area):
- if area >= 0 and area <=40:
- return '40內'
- elif area >= 41 and area <=60:
- return '41-60'
- elif area >= 61 and area <=80:
- return '61-80'
- elif area >= 81 and area <=130:
- return '81-110'
- elif area >= 81 and area <=130:
- return '111-130'
- elif area >= 131 and area <=180:
- return '131-180'
- elif area >= 181 and area <=250:
- return '181-250'
- else :
- return '250以上'
- level= data['面積'].apply(value_to_level)
- display(level.value_counts())
- sns.countplot(x=level , order=['40內','41-60','61-80','81-110','111-130','131-180','181-250','250以上'])
分組后作圖如下:
面積主要集中在40-110平之間。

做一張散點圖,表明價格、面積的分布,限定橫坐標50-500萬之間,縱坐標40-120平之間
- sns.scatterplot(data['錢'], data['面積'])
- plt.xlim(50,500)
- plt.ylim(40,120)
- plt.show()
所以,到這里,有大概多少錢,能買多少平的房子,一目了然。
其實可以看到:180萬以上就有很多選擇了。
如果只是想先買一套100萬左右也有滿足的情況
今天的分析就到這里。
希望對您帶來幫助。