数据分析_爬取37491条上海二手房数据,我感觉我又行了!
本文数据来源于链家网,搜集时间为2020年7月23日。本次项目使用Scrapy-Redis分布式爬取链家网数据,请自备代理ip。完整代码我已经放文末链接中,本文不再赘述爬虫细节,源码中我都有详细注释。
仪表板展示
项目背景
去面试的时候被问上海二手房的一些情况,作为一个土著,我只知道上海这个区挺贵的那个区大概这个价,但是具体数值却说不上来。所以,就有了本文。
从政策上来看,自从2016年国家喊出“房住不炒”的口号之后中国的房价就出现了明显的降温。2019年国家为了“救市”又宣布了几条政策:
- 政府不再垄断住房供应,缓解了开发商的资金压力,新房销售价格降低,导致新房市场火热而二手房市场冷清。
- 调整公积金贷款利率,提高了二房的房贷利率,打击市场投机需求。
- 鼓励租售并举,鼓励以住房租赁为主营业务的企业买房。
- 居住证降低申请门槛新政,让落户买房更加容易。
- 农民购房有补助,帮助农民工朋友们省去一部分买房成本。
从经济上来看,2020年上半年上海人均可支配收入以36577元笑傲全国,同比增长3.64%。看似美丽的数值背后,隐藏着多少被平均的普通老百姓。
从社会上来看,2019年我国人口出生率创下1949年以来的最低值,即使在2016年开放二胎政策以来,人口出生率也没有大幅提高。
从技术上来看,中国造楼能力世界第一!“基建狂魔”岂是浪得虚名!
分析目的
- 2020年上半年上海二手房整体挂牌量及均价走势如何?
- 目前上海二手房价位、房源有何特点?
- 上海各区县的挂牌情况,找出抛压最大的区域
数据清洗
首先我们看一下爬取的数据。维度不是太多,但是有些列我们可以拆分,例如地区、所在楼层、抵押信息等。
在对数据进行清洗前我们可以使用pandas_profiling进行快速的统计分析。
import pandas_profiling
pandas_profiling.ProfileReport(data).to_file("./report/html")
根据报告内容我们可以看到本次数据总共有37491行,20列,存在7行重复,重复占比小于0.1%,报告继续下拉可以看到每一列的统计情况。
我们需要清洗的几点:
- 去除重复行
- 替换None值
- 将地区、房屋户型、所在楼层、抵押信息进行切分合并
- 转换数据类型
- 删除多余字符
- 由于爬取时出现的错误,对价格列进行重新赋值
- 剔除异常数据
# 如果有重复值,则保留第一个
data.drop_duplicates(keep='first', inplace=True)# 替换None
data = data.applymap(lambda x: '暂无数据' if x == 'None' else x)# 切分地区、房屋户型、所在楼层、抵押信息后删除原列,将拆分出的新列合并至原data
data = pd.concat([data, data['地区'].str.extract(pat='(?P<区>.*?)\s(?P<镇>.*?)\s(?P<环>.*)'),data['房屋户型'].str.extract(pat='(?P<室>\d+)室(?P<厅>\d+)厅(?P<厨>\d+)厨(?P<卫>\d+)卫'),data['所在楼层'].str.extract(pat='(?P<所处楼层>.+)\(共(?P<总层数>\d+)层\)'),data['抵押信息'].map(lambda x:x.strip()).str.extract(pat='(?P<有无抵押>.{1})抵押(?P<抵押情况>.*)?')], axis=1)data.drop(['地区', '所在楼层', '抵押信息'], axis=1, inplace=True)
data['区'] = data['区']+'区'
# 去除建筑面积后面的平米单位,并转为float
data['建筑面积'] = data['建筑面积'].map(lambda x: float(x[:-1]))
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
