【数据处理】北京市租房案例实战(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