利用神经网络预测链家网上海租房价格(Python)

代码详见:Predict-house-rent-with-neutral-network

简介

本项目利用Pythonscrapy框架爬取链家网的上海市租房信息,利用pandasnumpymatplotlibseabornfoliumwordcloud 等库进行数据分析和可视化,通过one-hot编码和文本特征提取出120个训练特征,搭建3层神经网络对上海市租房价格进行预测。

模块介绍

爬虫

爬虫框架如下:

定义爬取字段
定义存储方式
爬虫相关设置
爬虫主体
定义爬虫
lianjia
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
spiders
spyder.py

items.py

爬取的字段如下表所示

字段名字段中文数据类型
title标题str
location地点str
house_type房屋类型str
house_code房源编号str
price价格float
tags房源标签str
lease租赁方式str
area面积str
orientation朝向str
floor楼层int
elevator电梯str
stall车位str
water用水str
electricity用电str
fuel_gas燃气str
heating采暖str
facility配套设施str
description房源描述str

settings.py

这里有一些需要注意的一些设置:

  • 定义编码,防止中文乱码
	FEED_EXPORT_ENCODING = 'gbk'
  • 定义日志文件。爬取过程会输出相当多的文字,定义日志可以保存输出结果,同时可以检查爬取过程
LOG_FILE = 'lianjia.log'
  • 忽略url重复。因为在爬取过程中,若严格忽略掉重复url,则只能爬到将近4000条数据 (不知道为什么) 而忽略掉url重复,即所有url都爬,确实会爬到重复数据(可能是因为每次进入页面的租房信息是随机出现的),但可以爬全,只需在数据预处理时通过房源编号进行筛选即可
DUPEFILTER_CLASS = 'scrapy.dupefilters.BaseDupeFilter'
  • 定义自己的user_agent。若不定义,而去使用scrapy默认的字段,很容易就会被网站当成机器,无法继续爬取
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
  • 不遵守机器爬取协议,以应对反爬措施
ROBOTSTXT_OBEY = False
  • 设置每次爬取的时间间隔,这个时间间隔通过多次实验得来,设置得再小一点就会被反爬,因此这是最小的时间间隔了……
DOWNLOAD_DELAY = 2

spyders/spyder.py

这里采用3层爬取结构,爬虫的结构如下所示

进入链家网主页
遍历各区租房信息得所有页
在当前页爬取房屋概况信息
进入每条信息详情页进一步爬取
LianjiaSpider
parse
parse_region
parse_overview
parse_info

这里需要注意,以为链家网默认只显示100页,每页包含30条信息,但显示上海有17000+条租房信息,若直接遍历所有页进行爬取,则只能爬到最多3000条数据。而通过进一步进入各区的界面下后,最多也是显示100页,但累加起来后接近总的租房信息数量,因此在parse中要取得各区页面的url

房租预测

特征提取

利用神经网络构建模型,就需要进行特征提取,这里分别对3种类型数据进行处理和特征提取

变量类型处理方式
数值型标准化
分类型one_hot标签
文本TF-IDF特征提取

最终可以提取出120个特征

模型效果

MAE 在 0.08 ~ 0.09,即平均预测误差在800~900元
在这里插入图片描述

预测效果
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值