前言
大家好,我是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