針對抓取到的南京市鏈家網的房源數據進行一次簡單的數據可視化
首先導入必要的庫。
importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportseabornassns%matplotlib inlineplt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] =False
讀取鏈家網房源數據的csv文件。
df= pd.read_csv('lianjia.csv', encoding='utf-8')del df['href']df.head()
原文件中有每一個房源的鏈接信息,在這里我們不需要,所以就可以直接刪除。
上面表格中的列分別是南京市的行政區劃,房源名稱,房屋設置,面積,朝向,裝修情況的描述,電梯與否,樓層高度,建造時間,在網站上眠的注冊時間,總價(萬),單價(元),地鐵情況。
學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入學習交流群:【923414804】,我們一起學Python。
首先來看一下基本我們獲得的信息的基本情況。
df.info()
可以看到,數據一共是11170條,包括了每個字段的數據類型。
針對以上的數據,我們首先來看一下每個區劃房源的平均價格,需要按照行政區劃進行分組,在對單價單價進行平均。
mean_price_per_region = df.groupby(df.region)
fig = plt.figure(figsize=(12,7))
ax = fig.add_subplot(111)
ax.set_title('南京各區域二手房平均價格')
mean_price_per_region.unit_price.mean().plot.bar()
plt.savefig('mean_price.jpg')
plt.show()
鼓樓區作為南京市的核心地帶,擁有眾多的購物廣場,其均價相對較高。
在來看一下南京市個行政區劃房源的平均面積,首選需要將area字段的格式進行一下簡單的轉換。
df.area = df.area.apply(lambdax:x.replace('平米',''))df.area = df.area.astype(np.float)fig = plt.figure(figsize=(12,7))ax = fig.add_subplot(111)df.groupby('region').area.mean().plot.bar()
同樣的,鼓樓區的平均面積也是最小的。
下面,我們看一下房屋的建造時間,同樣的,先要對數據進行格式轉換,將對象格式轉換成數值類型,我們使用正則表達式,將房屋價格中的數字保留下來,將其余的漢字刪除掉。
下面的代碼中,我們使用了pandas庫里面非常好用并且常用的一個方法apply()來對某一列進行全部應用,并且將將其圖形化,由于建造時間五花八門,因此我們只是去其中出現次數最多的前20個進行畫圖。
importredefnumber(x):a = re.findall('\d+', x)iflen(a) ==0:returnNoneelse:returna[0]df['year'] = df.build_year.apply(number)fig = plt.figure(figsize=(8,8))ax = fig.add_subplot(111)ax.set_title('南京地區二手房建造時間分布情況')df.year.value_counts()[:20].plot.pie(cmap=plt.cm.rainbow)plt.savefig('建造時間分布餅圖.jpg')
從以上的結果可以看出,占據絕對數量的建造時間依然是上個世紀九十年代,新建房屋相對偏少。
下面是以上數據直方圖的分布情況。
df.year.fillna(df.year.median(), inplace=True)df.year= df.year.astype(np.int)fig = plt.figure(figsize=(12,7))ax = fig.add_subplot(111)ax.set_title('南京地區二手房建造時間分布直方圖')df.year.plot.hist(bins=8)plt.xlim((1950,2020))plt.savefig('建造時間直方圖.jpg')
下面是建造時間的一個分布情況。
df.year.fillna(df.year.median(), inplace=True)df.year= df.year.astype(np.int)fig = plt.figure(figsize=(12,7))ax = fig.add_subplot(111)ax.set_title('南京地區二手房建造時間分布直方圖')df.year.plot.hist(bins=8)plt.xlim((1950,2020))plt.savefig('建造時間直方圖.jpg')
下面是對房屋建造類型的一個描述,我們首先使用正則表達式將數字等信息刪除,目的是保留房屋的結構類型,比如是樓板房還是平房這樣的信息。
defclean_build(x):x = re.sub('\d+','', x)? ? a = x.replace('年','').replace('建','')returna df['build_type'] = df.build_year.apply(clean_build)build_type = df.build_type.value_counts()delbuild_type['無']fig = plt.figure(figsize=(6,6))ax = fig.add_subplot(111)build_type.plot.pie()
板樓類型的房屋是最多的,這也和建造時間有關,畢竟建造時間整體偏向于上個世紀。
下面看一下裝修情況。
defstrip(x):returnx.strip()df.decoration = df.decoration.apply(strip)df.decoration.unique()decoration = df.decoration.value_counts()deldecoration['其他']plt.figure(figsize=(10,6))decoration.plot.bar()plt.title('南京地區二手房裝修情況')plt.savefig('裝修.jpg')
下面看一下哪幾個街區的均價是最高的,先對數據做一些預處理。
df.unit_price = df.unit_price.astype(np.int)unit_price = df.sort_values(by='unit_price', ascending=False)[:10]unit_price.set_index(unit_price.name, inplace=True)defclean__(x):returnx.replace('平米','')unit_price.area = unit_price.area.apply(clean__)unit_price.area = unit_price.area.astype(np.float)area_price = unit_price['unit_price']area_priceplt.figure(figsize=(12,7))area_price.plot.bar()plt.title('單價最高Top10')plt.savefig('單價最高前十.jpg')plt.show()
接下來在看一下,房屋整體結構的占比情況。
fig = plt.figure(figsize=(8,8))ax = fig.add_subplot(111)df['style'].value_counts()[:6].plot.pie(cmap=plt.cm.rainbow)plt.title('房屋整體結構占比情況')
兩室一廳作為標準配置,占比接近一半。
最后再來看一下房源朝向分布情況。
fig = plt.figure(figsize=(12,7))ax = fig.add_subplot(111)df.orientation.value_counts()[:10].plot.bar()plt.title('房源朝向分布情況')