針對抓取到的南京市鏈家網的房源數據進行一次簡單的數據可視化正則表達式
首先導入必要的庫。app
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline plt.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()
原文件中有每個房源的連接信息,在這裏咱們不須要,因此就能夠直接刪除。ui
上面表格中的列分別是南京市的行政區劃,房源名稱,房屋設置,面積,朝向,裝修狀況的描述,電梯與否,樓層高度,建造時間,在網站上眠的註冊時間,總價(萬),單價(元),地鐵狀況。3d
首先來看一下基本咱們得到的信息的基本狀況。code
df.info()
能夠看到,數據一共是11170條,包括了每一個字段的數據類型。對象
針對以上的數據,咱們首先來看一下每一個區劃房源的平均價格,須要按照行政區劃進行分組,在對單價單價進行平均。blog
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()
鼓樓區做爲南京市的核心地帶,擁有衆多的購物廣場,其均價相對較高。ip
在來看一下南京市個行政區劃房源的平均面積,首選須要將area字段的格式進行一下簡單的轉換。utf-8
df.area = df.area.apply(lambda x: 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個進行畫圖。
import re def number(x): a = re.findall('\d+', x) if len(a) == 0: return None else: return a[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')
下面是對房屋建造類型的一個描述,咱們首先使用正則表達式將數字等信息刪除,目的是保留房屋的結構類型,好比是樓板房仍是平房這樣的信息。
def clean_build(x): x = re.sub('\d+', '', x) a = x.replace('年', '').replace('建', '') return a df['build_type'] = df.build_year.apply(clean_build) build_type = df.build_type.value_counts() del build_type['無'] fig = plt.figure(figsize=(6,6)) ax = fig.add_subplot(111) build_type.plot.pie()
板樓類型的房屋是最多的,這也和建造時間有關,畢竟建造時間總體偏向於上個世紀。
下面看一下裝修狀況。
def strip(x): return x.strip() df.decoration = df.decoration.apply(strip) df.decoration.unique() decoration = df.decoration.value_counts() del decoration['其餘'] 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) def clean__(x): return x.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_price plt.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('房源朝向分佈狀況')