【数据处理】北京市租房案例实战(5)

1,701 阅读3分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第10篇文章,点击查看活动详情

1. 引言

1.1 任务描述:

本节,我们继续完善北京市租房数据处理实战,数据集基本处理请参考本系列文章:【数据处理】北京市租房案例实战(1) - 掘金 (juejin.cn)

  • 数据集是有关于租房信息的公开数据。
  • 具体特征包括所属区域、小区名称、房屋、价格、房屋面积、户型等等。

本节主要任务是来分析一下各地区目前平均租金情况,并进行数据可视化。简单概括如下:

  • 计算总房子面积
  • 计算总价格
  • 使用 总价格/总房子面积=平均每平米租金
  • 合并表
  • 可视化

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

2. 代码演示

为了进一步剖析房屋的情况,接下来,我们来分析一下各地区目前平均租金情况。

  • 首先创建一个DataFrame
  • 用于后续对其进行填充
  • 将原表中的区域去重填入这个新的DataFrame
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():计算每组的总和
sum_price = file_data["价格(元/月)"].groupby([file_data["区域"]]).sum()
sum_area = file_data["面积(㎡)"].groupby([file_data["区域"]]).sum()

为DataFrame赋值:

df_all["房租总金额"] = sum_price.values
df_all["总面积"] = sum_area.values
df_all

运行结果如下图所示:

image.png

计算每个区域的平均房租:

  • 总价格/总房子面积=平均每平米租金
  • round()是会将数字保留有效个位数并趋向于最近的偶数
# 计算各个区域每平方米的房租
df_all["每平米租金(元)"] = round(df_all["房租总金额"] / df_all["总面积"], 2) # 保留两位小数
df_all

运行结果如下图所示:

image.png

合并两列表:

  • 使用merge进行合并列表
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:该函数用于将多个可迭代对象作为参数,依次将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。
# 图形可视化
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