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

本文通过Python爬取并分析了北京蛋壳公寓6025条数据,进行了数据清洗、去重,然后利用数据可视化技术展示各行政区公寓数量、租金分布、户型等信息,揭示了蛋壳公寓在朝阳区和通州区的集中分布,以及租金和面积的相关性。

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理

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

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

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

数据获取

蛋壳公寓网页结构相对简单,数据结构统一,简单的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文件中:

数据处理

导入数据分析包

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

导入数据并合并

找到文件夹中的所有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()

数据去重

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

df = df.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值