用python對2019年二手房價格進行數據分析

  • 2019 年 12 月 24 日
  • 筆記

本文為讀者投稿,作者:董匯標MINUS 知乎:https://zhuanlan.zhihu.com/p/97243470

最近和朋友聊到買房問題,所以對某二手房價格資訊進行了爬取,爬蟲見本公眾號另一篇文章。

本篇文章利用爬到數據的進行數據分析。

在這篇文章中,用到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()

Tags: