用Python分析北京蛋壳公寓租房数据

本文通过Python爬取并分析北京蛋壳公寓的租房数据,包括数据获取、清洗、可视化分析等步骤。数据处理涉及数据去重、类型转换、地铁字段清洗等,可视化部分展示了各行政区公寓数量、租金分布、户型分布等,揭示了蛋壳公寓在北京的布局特点。
摘要由CSDN通过智能技术生成

前言

大家好,我是J哥。
近期,蛋壳公寓“爆雷”事件持续发酵,期间因拖欠房东房租与租客退款,蛋壳公寓陷入讨债风波,全国多地蛋壳公寓办公区域出现大规模解约事件,而作为蛋壳公寓总部所在地北京,自然首当其冲。

为了应对大规模的解约,北京在全市已经设立了100多个蛋壳公寓矛盾纠纷接待点,包含了蛋壳公寓涉及到的12个区,这些接待点下沉到了街道甚至社区,以方便涉及蛋壳公寓事件的房东和租客咨询和处理纠纷。

随着蛋壳及其租户之间的冲突不断累积,与蛋壳公寓建立了租赁贷款合作关系的微众银行也被推到了最前沿。继 12 月 2 日微众银行公告将给予蛋壳租户剩余贷款本金将免息延期至 2023 年 12 月 31 日之后,12 月 4 日,微众银行再次发出公告,并给出了一个新的解决方案,即租户预付租金可抵贷款。

长租公寓暴雷,不少年轻人不得不流离失所,构成疫情下的另一个经济写照,事态何去何从,值得关注。本文从数据角度出发,爬取了蛋壳公寓北京区域所有在租公寓信息,清洗数据,并进行可视化分析,为大家了解蛋壳公寓提供一个新的视角。后台回复「北京蛋壳」可获取本文数据分析代码和数据集。

数据获取

蛋壳公寓网页结构相对简单,数据结构统一,简单的url翻页构造即可。需要注意的是极少数网页会返回404,需要添加判断过滤掉。本文用request请求到数据,用xpath对返回的数据进行解析,最后以追加模式将数据存储为csv文件。爬虫核心代码如下:

def get_danke(href):
    time.sleep(random.uniform(0, 1))  #设置延时,避免对服务器产生压力
    response = requests.get(url=href, headers=headers)
    if response.status_code == 200:  #部分网页会跳转404,需要做判断
        res = response.content.decode('utf-8')
        div = etree.HTML(res)
        items = div.xpath("/html/body/div[3]/div[1]/div[2]/div[2]")
        for item in items:
            house_price=item.xpath("./div[3]/div[2]/div/span/div/text()")[0]
            house_area=item.xpath("./div[4]/div[1]/div[1]/label/text()")[0].replace('建筑面积:约','').replace('㎡(以现场勘察为准)','')
            house_id=item.xpath("./div[4]/div[1]/div[2]/label/text()")[0].replace('编号:','')
            house_type=item.xpath("./div[4]/div[1]/div[3]/label/text()")[0].replace('\n','').replace(' ','').replace('户型:','')
            house_floor=item.xpath("./div[4]/div[2]/div[3]/label/text()")[0].replace('楼层:','')
            house_postion_1=item.xpath("./div[4]/div[2]/div[4]/label/div/a[1]/text()")[0]
            house_postion_2=item.xpath("./div[4]/div[2]/div[4]/label/div/a[2]/text()")[0]
            house_postion_3=item.xpath("./div[4]/div[2]/div[4]/label/div/a[3]/text()")[0]
            house_subway=item.xpath("./div[4]/div[2]/div[5]/label/text()")[0]
    else:
        house_price = None
        house_area = None
        house_id = None
        house_type = None
        house_floor = None
        house_postion_1 = None
        house_postion_2 = None
        house_postion_3 = None
        house_subway = None
......

由于代码运行过程中中断了几次,最终将数据保存为以下几个csv文件中:

二、数据处理

1.导入数据分析包

import pandas as pd
import numpy as np
from pathlib import Path
import re

2.导入数据并合并

找到文件夹中的所有csv文件,遍历读取数据,最后用concat方法合并所有数据。

files = Path(r"D:\菜J学Python\数据分析\蛋壳公寓").glob("*.csv")
dfs = [pd.read_csv(f) for f in files]
df = pd.concat(dfs)
df.head()

在这里插入图片描述

3.数据去重

数据爬取过程中有中断,因此可能存在重复爬取的情况,需要去重处理。

df = df.drop_duplicates()

4.查看数据

用df.info()方法查看整体数据信息,结合预览的数据,我们可以很容易发现发现,价格和面积字段类型不是数字类型,需要转换处理。楼层字段可以提取出所在楼层和总楼层。

df.info()
    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 6026 entries, 0 to 710
    Data columns (total 9 columns):
     #   Column  Non-Null Count  Dtype 
    ---  ------  --------------  ----- 
     0   价格      6025 non-null   object
     1   面积      6025 non-null   object
     2   编号      6025 non-null   object
     3   户型      6025 non-null   object
     4   楼层      6025 non-null   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值