【資料處理】北京市租房案例實戰(5)

語言: CN / TW / HK

我報名參加金石計劃1期挑戰——瓜分10萬獎池,這是我的第10篇文章,點選檢視活動詳情

1. 引言

1.1 任務描述:

本節,我們繼續完善北京市租房資料處理實戰,資料集基本處理請參考本系列文章:【資料處理】北京市租房案例實戰(1) - 掘金 (juejin.cn)。 - 資料集是有關於租房資訊的公開資料。 - 具體特徵包括所屬區域、小區名稱、房屋、價格、房屋面積、戶型等等。

本節主要任務是來分析一下各地區目前平均租金情況,並進行資料視覺化。簡單概括如下: - 計算總房子面積 - 計算總價格 - 使用 總價格/總房子面積=平均每平米租金 - 合併表 - 視覺化

注意:本案例使用 Jupyter Notebook 進行案例演示

2. 程式碼演示

為了進一步剖析房屋的情況,接下來,我們來分析一下各地區目前平均租金情況。 - 首先建立一個DataFrame - 用於後續對其進行填充 - 將原表中的區域去重填入這個新的DataFrame

python df_all = pd.DataFrame({"區域": file_data["區域"].unique(), "房租總金額": [0]*13, "總面積": [0]*13}) df_all 執行結果部分展示如下所示:

image.png

接下來,計算出總價格與總面積 - 使用分組聚合的方法 - groupby([file_data["區域"]]):以區域進行分組 - file_data["價格(元/月)"].groupby([file_data["區域"]]):對file_data中"價格(元/月)"這列以區域進行分組 - .sum():計算每組的總和

python sum_price = file_data["價格(元/月)"].groupby([file_data["區域"]]).sum() sum_area = file_data["面積(㎡)"].groupby([file_data["區域"]]).sum() 為DataFrame賦值:

python df_all["房租總金額"] = sum_price.values df_all["總面積"] = sum_area.values df_all 執行結果如下圖所示:

image.png

計算每個區域的平均房租: - 總價格/總房子面積=平均每平米租金 - round()是會將數字保留有效個位數並趨向於最近的偶數 ```python

計算各個區域每平方米的房租

df_all["每平米租金(元)"] = round(df_all["房租總金額"] / df_all["總面積"], 2) # 保留兩位小數 df_all ``` 執行結果如下圖所示:

image.png

合併兩列表: - 使用merge進行合併列表

python df_merge = pd.merge(new_df, df_all) df_merge 執行結果如下圖所示:

image.png

2.2 平均租金視覺化

  • add_subplot(111):一行一列的畫布中的第一張圖
  • enumerate多用於在for迴圈中得到計數,利用它可以同時獲得索引和值,即需要index和value值的時候可以使用enumerate
  • zip(l, price:該函式用於將多個可迭代物件作為引數,依次將物件中對應的元素打包成一個個元組,然後返回由這些元組組成的物件。

```python

圖形視覺化

num = df_merge["數量"] price = df_merge["每平米租金(元)"] ls = df_merge["區域"] l = [i for i in range(13)] # 長度

fig = plt.figure(figsize=(18, 8), dpi=100)

顯示折線圖

ax1 = fig.add_subplot(111) ax1.plot(l, price, "or-", label='價格')

for i, (_x, _y) in enumerate(zip(l, price)): print( i, (_x, _y)) plt.text(_x+0.2, _y, price[i]) ax1.set_ylim([0,160]) # y座標軸範圍 ax1.set_ylabel("價格") # y軸標籤 plt.legend(loc="upper") # 圖例位置

顯示條形圖

ax2 = ax1.twinx() plt.bar(l, num, label='數量',alpha=0.2, color="green") # alpha=0.2透明度 ax2.set_ylabel("數量") plt.legend(loc="upper left") plt.xticks(l,ls) # 修改x軸

plt.show() ``` 執行結果如下圖所示:

image.png