一簡介
我們在《python爬蟲之urllib庫鏈家二手房信息分析》文章裡介紹了如何從鏈家網站爬取房價信息,今天我們來分析下房價總價和其他幾個的關係。分析數據先安裝下相關分析數據的工具,圖一安裝了pandas,圖二安裝了xlrs。pandas是強大的數據分析工具,xlrs是用來讀取excel數據的。從鏈家爬取的數據有3000條,見圖3.從圖中可以看到有些髒數據,因此我們首先進行數據清洗,再進行數據分析。
本文用到的函數有:
pandas.read_excel(path):讀取path路徑下的excel文件
df['面積'].str.contains('平米').fillna(False):將某列是否包含關鍵字信息做標誌
df2= df[rows_with_pingmi]:做完標誌後進行篩選
df2['面積'].replace({r'[^\x00-\x7F]+':''}):正則表達式,將漢字替換為空
plt.subplot(2,2,3):同一張背景畫多個圖,2*2畫4張圖,位置在第三個
plt.scatter(x,y,color='blue',marker='+'):用+標誌x,y位置,列印一個一個點位置
plt.plot(x,y,color='blue',linewidth=2):用線表示,點點之間用線連接
df2.head():顯示df2的前面5行數據
df2.columns:從excel讀取出來的列,本案例是
Index(['網址', '總價', '簡介', '地址', '格局', '面積', '朝向', '裝修'], dtype='object')
二數據清洗
下圖紅色框框對應的行是髒數據,需要將這些行刪掉。
import pandas as pd
excel = "C:/Users/xzx/Desktop/linkHomeData.xlsx"
df= pd.read_excel(excel,sheet_name='Sheet1')
#刪除面積列裡不包含「平米」兩個字的行
rows_with_pingmi= df['面積'].str.contains('平米').fillna(False)
df2= df[rows_with_pingmi]
#刪除面積列「平米」兩個字
df2=df2['面積'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
上述執行後,我們得到如下的乾淨數據。
三數據分析
>>> import matplotlib.pyplot as plt
>>> plt.subplot(2,2,1)
<matplotlib.axes._subplots.AxesSubplot object at 0x000002D1EBB2D910>
>>> x=df2['地址']
>>> y=df2['總價']
>>> plt.scatter(x,y,color='blue',marker='+')
<matplotlib.collections.PathCollection object at 0x000002D1EBB5FA90>
>>> plt.xlabel('地址')
Text(0.5, 0, '地址')
>>> plt.ylabel('總價')
Text(0, 0.5, '總價')
>>> plt.subplot(2,2,2)
<matplotlib.axes._subplots.AxesSubplot object at 0x000002D1EBB5FEE0>
>>> x=df2['面積']
>>> plt.scatter(x,y,color='red',marker='*')
<matplotlib.collections.PathCollection object at 0x000002D1EBB93760>
>>> plt.xlabel('面積')
Text(0.5, 0, '面積')
>>> plt.subplot(2,2,3)
<matplotlib.axes._subplots.AxesSubplot object at 0x000002D1EBB939D0>
>>> x=df2['格局']
>>> plt.scatter(x,y,color='green',marker='#')
<matplotlib.collections.PathCollection object at 0x000002D1EBBC9430>
>>> plt.xlabel('格局')
Text(0.5, 0, '格局')
>>> plt.subplot(2,2,4)
<matplotlib.axes._subplots.AxesSubplot object at 0x000002D1EBBC96A0>
>>> x=df2['裝修']
>>> plt.scatter(x,y,color='yellow',marker='$')
<matplotlib.collections.PathCollection object at 0x000002D1EACCF8E0>
>>> plt.xlabel('裝修')
Text(0.5, 0, '裝修')
>>> plt.tight_layout()
>>> plt.show()
四總結
性質相近的會聚類在一起,比較特殊的是上邊那個點,四個圖都突出那個點,這種房子比較少,四室兩廳,精裝,地理位置在市政府附近,價格高昂。第一張圖,價格比較高的地理位置一般在廈門島內,價格低點的一般在島外。第二張圖是面積與總價的關係,第三張圖發現大部分房子格局都是2室2廳和2室1廳和3室2廳。第四張圖說明毛坯房比較少,大都是精裝。