基于python的房屋信息数据分析

2019-02-06 05:23
探索科学(学术版) 2019年3期
关键词:链家楼层单价

李 红

大连理工大学城市学院工程实践中心 辽宁 大连 116101

一、准备工作

beautif ulsoup4是一个python库,能够将ht ml或者x ml文档解析为树结构,方便我们查找和抓取数据,因此我们需要手动安装pip install

beautif ulsoup。

抓取到的数据通常都会用到pandas进行处理,它具有功能强大的函数来帮助我们进行数据的分析和存储。故我们需要手动安装pip install pandas。

为了直观显示数据分析结果,需要将房屋信息进行可视化展示,我们需要强大的pyechart,所以继续手动安装pip install pyecharts。

手动安装好所需python库之后,在lj Spider.py文件最开始导入相关库:

i mport requests

fro m bs4 i mport Beautif ul Soup

i mport re

i mport pandas as pd

i mport os

i mport l x ml

二、数据爬取

1.分析目标网页ht ml结构。以链家为例,使用googlechrome或者火狐浏览器打开链家网站,我们发现该网站每页显示30条房屋记录,这部分房屋信息在列表ul中,选择其中一条房屋信息,右键-->检查,即可发现该条房屋信息在class="inf o clear"的div标签中,找出标题、详细信息、楼层、价格等信息所在的标签。

2.抓取数据。找到数据之后,我们可以使用requests进行网页抓取,在使用requests进行网页抓取时,容易被目标网站发现而进行反爬,比如IP被限制的情况,此时我们一般可以添加user-agent、Referer、cookie等进行伪装,以便顺利获得目标网页信息。使用beautif ulsoup4进行格式转化。设计house_item(url),进行单个房屋信息抓起并存储,主要使用soup的find函数进行标签定位爬取数据,房屋信息中标题和小区在div标签中的内嵌a标签中,使用ite m['area Na me']=soup.find("div",attrs={"class":"area Na me"}).find("a").text,比较容易获得数据,也可以用正则获取。如果感觉列表页面提供的房屋信息不够用,则可以去详细页面进行数据抓取。只是那样的话,抓取的速度会很慢,我们要考虑清楚再行动。

接下来在主程序中,利用for循环,按页码进行数据抓取,每页的30条房屋信息用字典list进行存储,使用pandas的DataFrame将list保存成二维表结构。并使用t o_csv函数同时将每页房屋信息存储到文本文件house_inf o.csv中,对应的列为“标题”“房屋信息”“总价”“单价”“楼层”“朝向”“装修”……。注意,如果不是第一次导入数据,则存储数据时要采用追加形式,即设置mode='a',否则会出现数据被覆盖的现象。同时header=False,index=False,即不再添加表头和索引。

3.数据清理。房屋总价爬取到的数据为XX万,单价XXXX平/米,面积XX平米,楼层信息中我们只关注楼层信息,但是却获得到了完整的楼层信息以及建筑时间等。此时我们就需要进行数据的清理。简单的我们可以直接用str的函数index、split、strip等进行处理,例如data['area']=data['eara_mainInf o'].str.split('平米').str[0],floor_inf o.text[:floor_info.text.index(')')+1],soup0.find('div',attrs={'class':'total Price'}).text[:-1]。复杂些的可以使用正则表达式进行处理,例如re.findall('d+',soup.find('div',{'class':'unit Price'}).text)

三、可视化数据分析

先将大连地区所有行政分区的数据分批次导入到house_info.csv中(样本数据总计9271条记录,按各个分区平均抓取),接下来进行分析数据时,从csv文件中读取出来生成表结构data,利用mean函数求平均值,max函数求最大值,min函数求最小值。按行政分区进行房价平均值计算,直观的体现城市资源高配所在行政区,首先按各个区使用data的groupby函数进行分组并统计各个区的房源总数gp=data.groupby(['fenqu'],as_index=False)['tit'].count(),计算各个区的面积单价平均值然后使用sort_values函数排序。使用pyecharts.Line来绘制折线图,并标记房价最高、最低值。类似思路,先按小区进行分组,算出小区平均单价,然后用pyecharts.Bar来绘制柱状图展示排名top10的小区,方便购房者看出整个城市的房价最高(即黄金地段)小区排名。由于篇幅有限,其他图不在此展示。

四、总结

本文以房价数据分析为研究目标,利用链家网站收集数据资源作为参考,在研究了网站页面结构基础上,采用pyt hon语言的request、Beautif ulsoup、pandas等库,设计了爬虫ljspider进行数据爬取,并采用pyecharts进行生成图表,直观展示数据,可供在该地区购买房屋者作为参考。笔者通过该程序的设计与实现,发现不足并正在努力专研技术为后续改进努力。

猜你喜欢
链家楼层单价
利用楼层废水势能的发电装置
如何求单价
嘟嘟熊家的百货商店(二十四)——单价是多少
浅谈自动扶梯和人行道出入口盖板结构强度计算
链家,莫拿“个案”当说辞
算单价
电梯的升与降
“巨怪”链家牺牲毛利率疯狂扩张 万科30亿买张合作券是否值得
2014年中考数学命题大预测试题