在MySQL里無(wú)意中看到去年利用scrapy爬取的天津是二手房信息,由于當(dāng)時(shí)還不到了解pandas和matplotlib的用法,爬得的數(shù)據(jù)并沒有利用上。既然今天看見了,就拿來(lái)嘗試著進(jìn)行一下簡(jiǎn)單的分析吧~
首先當(dāng)然是導(dǎo)模塊
import pandas as pd
import matplotlib.pyplot as plt
from pymysql import connect
import seaborn as sns
%matplotlib inline
sns.set()
- 查看數(shù)據(jù)
db = connect('localhost','root','666666','fangtianxia')
df = pd.read_sql('select * from ershou',con=db, index_col='id')
df.head()
首先通過(guò)read_sql函數(shù)讀取MySQL中的叫做‘ershou’的表格
查看表格的前五行如下

咳咳,英文不好,這些字段都是我當(dāng)時(shí)隨意起的,知道嘛意思就行拉~
df.info()

可以看到并沒有缺失字段,這說(shuō)明我當(dāng)時(shí)爬取的很完美,嘿嘿。但是數(shù)據(jù)量就有點(diǎn)少了,879條。
df.describe()

describe()函數(shù)返回?cái)?shù)據(jù)集的一些基本統(tǒng)計(jì)值。從上面一些統(tǒng)計(jì)值分別表示數(shù)據(jù)條數(shù)、平均數(shù)、標(biāo)準(zhǔn)差、最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)、最大值。從這些統(tǒng)計(jì)結(jié)果我們可以得出一些結(jié)論,最大的房屋面積為900平米,最小的為17平米。最便宜的房子單價(jià)為5116平/米,最貴的房子單價(jià)為95960平/米。平均房屋面積水平為98平,平均單價(jià)為22084平/米(若想追上天津平均水品,本人表示亞歷山大。。)
- 單價(jià)分析
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(16,6))
df.groupby('address')['price'].mean().sort_values(ascending=False).plot(kind='bar')

可以看出,和平區(qū)的房?jī)r(jià)水平遙遙領(lǐng)先于其他區(qū)。不出意外,市內(nèi)六區(qū)的房?jī)r(jià)排名前六。開發(fā)區(qū)(也就是濱海新區(qū))和西青區(qū)房?jī)r(jià)緊跟市內(nèi)六區(qū)。另外,數(shù)據(jù)中并沒有薊州區(qū)的房?jī)r(jià)信息。
plt.figure(figsize=(16,6))
sns.boxplot(x='address', y='price', data=df)

從箱線圖上可以看到,最貴單價(jià)房子位于和平區(qū)。我對(duì)這個(gè)房子還是比較好奇的,這到底是一個(gè)什么樣的房子價(jià)格如此優(yōu)秀~
df[df['price'] > 90000]

經(jīng)過(guò)查找發(fā)現(xiàn),單價(jià)超過(guò)9w的房屋只有這么一個(gè),屬于所謂的獨(dú)單,39平380萬(wàn)!經(jīng)過(guò)初步了解忠厚里是一個(gè)非常老的小區(qū),得益于它的地理位置,臨近濱江道、實(shí)驗(yàn)小學(xué)、耀華中學(xué)、天津一中,占盡資源優(yōu)勢(shì),不貴沒才沒天理呀。。。另外,這是去年年底抓取的數(shù)據(jù),現(xiàn)在這小區(qū)已經(jīng)破10w了。
- 戶型分析
df['mode'].value_counts()

發(fā)現(xiàn)戶型中有叫‘暫無(wú)’的戶型,總數(shù)不多,只有8條,可以考慮直接刪掉。
df = df[df['mode'] != '暫無(wú)']
df['mode'].value_counts(ascending=True).plot(kind='barh', figsize=(6,15))

大多數(shù)都屬于常見戶型,其中兩室戶型是絕對(duì)的主力。當(dāng)然一室是很多剛畢業(yè)的年輕人首選戶型,三室也是那些有些經(jīng)濟(jì)實(shí)力的,或者有首套房子,考慮換個(gè)空間寬裕的家庭的選擇。這里看到有六室和八室的戶型,這是什么樣的房子呢,我又有些好奇了。
df[df['mode'].isin(['8室4廳5衛(wèi)', '6室2廳4衛(wèi)'])]

通過(guò)篩查發(fā)現(xiàn),原來(lái)這兩個(gè)是別墅。好吧,果然貧窮限制了我的想象。
- 面積分析
f, [ax1, ax2] = plt.subplots(1, 2, figsize=(16,6))
sns.distplot(df['area'], bins=30, ax=ax1, color='g')
sns.kdeplot(df['area'], shade=True, ax=ax1)
sns.regplot(x='area', y='total_price', data=df, ax=ax2)

通過(guò)左圖可以知道面積的分布情況,屬于右偏分布,說(shuō)明有不少超出正常房屋面積范圍的二手房。右圖描繪了房屋面積和總價(jià)之間的關(guān)系,可以看到兩者呈正相關(guān)性,即面積大,價(jià)格也會(huì)相應(yīng)高些,符合大家的認(rèn)知。
- 樓層分析
df['floor'].value_counts().plot(kind='bar')

可以看到中層二手房數(shù)量較多,但是三種類型的數(shù)量相差不大。單獨(dú)的比較樓層數(shù)量意義并不大,我們關(guān)心的是,各類型的樓層是否對(duì)房?jī)r(jià)有影響?這里簡(jiǎn)單的比較一下各類型樓層二手房的平均房?jī)r(jià)。
df.groupby('floor')['total_price'].mean().plot(kind='bar')

通過(guò)比較發(fā)現(xiàn),低層的二手房均價(jià)較高,中高層價(jià)格相差無(wú)幾。這與我的常識(shí)有些相悖。。。
- 總結(jié)
本次只是練習(xí)了一下Python常用的數(shù)據(jù)分析模塊,為了分析而分析,并沒有什么目的性。不過(guò)也能大概了解一下天津二手房的一些行情。比如哪個(gè)區(qū)的房子最貴,哪個(gè)區(qū)最便宜。戶型和面積都是怎么樣的,分布如何。也見識(shí)到了市中心那一騎絕塵的老學(xué)區(qū)房?jī)r(jià)格。這些單純看躺在數(shù)據(jù)庫(kù)中的數(shù)據(jù),是不可能看到的。
本次簡(jiǎn)單的進(jìn)行了一次描述性分析,接下來(lái)我會(huì)嘗試建立一個(gè)回歸模型(如線性回歸,KNN,決策樹等)來(lái)進(jìn)行一次預(yù)測(cè)性分析。