XJTUSE-python综合训练实验

完整报告已上传至GitHub上:

chuoer47/pythonTrain (github.com)

一、实验内容

1.实验简介

利用 python 综合训练学习到的部分知识尝试多种简易的西安二手房估价模 型。

主要内容如下:

1.利用爬虫爬取西安二手房数据,爬取网站为

https://xa.lianjia.com/ershoufang/pg2co32/

2.利用办公自动化清洗数据,对定类数据进行编码,方便下一步模型建立 分析。

3.利用办公自动化生成相关词云,利用可视化生成各种图表,直观简单地 展示数据特点。

4.利用科学计算相关知识,尝试建立多种简易较为有效的西安二手房估价 模型。

5.对建立的模型进行分析,给出优点缺点。

2.爬取数据

西安二手房数据爬取

2.1 网站的确立

一个好的网站不仅数据全面,而且利于 python 进行爬取。

该任务为爬取西安二手房价数据,首先确定需要爬取的网站和数据,这是 十分重要的。 经过筛选,选取了链家网站的数据,搜索结果如下(部分截图):

该网站有如下优点:

1.该网站涵盖的数据量巨大,一共含有 111774 个数据,尽管爬取部分数据, 其全面可靠也足够满足建模分析。

2.该网站对于房子的各个特征归纳总结到位,便于分析。

3.该网站便于数据爬取。

2.2 爬取方式的确定

该网站已经整理完毕,并且分类完毕,因此可以选取部分所需数据爬取。

1.进行网站构成分析: 一共有 100 页数据,其中网页链接构成如下:

https://xa.lianjia.com/ershoufang/pg2co32/

构成十分有规律,当进行翻页时,pg 后面的数字加 1 即可,十分利于爬取, 利用一个变量表示页数即可,细节不再赘述。 2.对网页构成分析:发现包含数据的网页不是动态网页,而是静态网页, 直接调用 request 库即可进行访问就可以得到所有所需数据了。

3.对数据包含分析:调用 F12 查看元素可以发现:

所需的数据主要包含在div.info.clear中,可以确定以下几种爬取方式:

1.使用 re 正则匹配式进行查找匹配。该方法直接有效但是容易爬取错误。

2.对于 html 语法树进行匹配,找到对应容器,提取文字即可。该方法不仅 简单有效,而且由于该网站十分规范,不会出现爬取错误数据。

2.3 实战

综上所述,采取了使用lxml包中html语法树进行匹配爬取数据的方式。

核心代码如下:

不再赘述,核心思想就是找到容器,爬取文本。

2.4 爬取的改进

1.加入线程池加速爬取速度 可以知道,如果我们要爬取 100 页,一页一页爬取速度会很慢,因此使用 线程池可以大大加速爬取过程,核心代码如下:

加入线程池后,爬取速度大幅加快,不过出现了 ip 被网站标记,禁止登陆 爬取的问题,最后只爬取到了不到 200 条数据。

2.想办法绕过 ip 封锁 不过这肯定难不倒我,解决办法如下: 访问网页加入 header。 使用time.sleep()缓解了一下我和网页的关系。 代码不再给出,详情可见附录。

2.5 爬取结果及展示

最后通过优化,爬取到了足足 1500 条以上的数据,下面展示部分数据:

3 可视化实验

3.1 词云

词云有助于我们对文字形成直观清晰的认知,一方面有利于我们进行定量 转换,另一方面有助于我们进行判断数据好坏程度。

3.1.1 数据的选择

理论上所有数据都可以生成词云,但是我选择了二手房地址数据生成词云, 原因如下:

1.地址不好定量转换,最先讨论较好。

2.地址是纯文字,生成词云效果更佳。

3.1.2 代码编写 代码与课堂教学并无过多出入,不再展示,可见附录。

3.1.3 词云展示

可以看到,重点分布在住宅区得多,下面是部分统计分析。

不难得出结论:房子地址也是一个需要考虑的要素,不同地址房子数量分 布不同,进而导致房价波动。

3.2 可视化表格

干巴巴的数字是没有生命力的,但是如果利用各种表格,比如柱状图,折 线图,不仅可以让使用者对数据有清楚的认知,还可以快速找到需要数据的范 围。因此我展开了该实验。

3.2.1 确定图像

想要初步直观观察各个数据的关系,柱状图是比较好的选择。

.2.2 绘图

与课件代码类似,详情见附录,图像如下:

.

3.2.3 图像分析

通过观察图像可以得到以下结论:

1.大部分房子的面积分布在 50~100 平米之间。

2.90 平左右的房子单价高于附近面积的房子

4 数据清洗及编码

4.1 数据清洗

利用 python 办公自动化,进行了如下情况清洗:

1.装修为“其他”

2.版型为“暂无数据”

3.楼层为“空”

4.单价为“空”

5.其它不符合标准的数据 代码机械重复性工作较多,不再给出,附录也不再给出。

4.2 清洗结果

无法全部展示,但是通过 excel 自带工具可以看到全为有效数据。

4.3 数据编码

进行了如下编码:

1.对装修情况进行编码,编码为 1,2,3… 2.对房型进行编码,编码为 1,2,3… 3.对版型进行编码,编码为 1,2,3… 4.对楼型进行三分位数编码,编码为 1,2,3… 5.对地址进行编码,编码为 1,2,3… 6.对朝向进行编码,编码为 1,2,3… 得到数据部分展示:

4.4 编码优点及缺点

几乎是不假思索的对所有定量进行了数值化编码,带来了建立模型和分析 方便的好处,但是没有更进一步地思索数据的内在关联,甚至只是粗暴地通过 整数定义。希望未来学习完数学建模可以更进一步地进行改善。

5 基于线性回归模型_尝试 1

5.1 模型的简述

把每个变量都是为线性影响房价,然后根据最小二乘拟合法可以建立起来 一个简单的线性模型。代码主要是根据上课所学。

5.2 符号,公式说明

由于地址变量还是不好量化,暂且不考虑。 定义各个变量:

5.3 代码

与 PPT 上的相差无几,就是多录入几个变量。核心代码如下:

得到的参数如下:

5.4 分析及评估

由初始值和最终参数可知,前四个变量即楼型,版型,楼层,装修提升了 数量级,而面积是负相关,朝向的影响微乎其微。 得到以下结论:

1.房价对楼型,版型,楼层,装修敏感。

2.房价对朝向不敏感

3.房价与面积呈现反相关。

优点:

1.模型简单有效地评估西安二手房价与其它几个变量之间的线性关系。

2.可以反映房价的平均值。

缺点:

1.现实是房价与几个变量不一定呈现线性关系,因此模型并不适用房价。

2.模型与我的编码有极大关系,比如朝向通过编码无法体现线性关系。

3.模型还未考虑地址问题。 4.存在多重共线性问题

6 基于 adaboost 回归模型_尝试 2

6.1 模型简述

我在网上寻找了其它有效的好用的房价预测模型,发现了机器回归模型中 的𝑎𝑑𝑎𝑏𝑜𝑜𝑠𝑡回归模型。 关于模型的介绍不再赘述,因为我也尚未完全掌握。不过,利用该模型我 可以进行定量和定性的分析。

6.2 模型结果

得到的结果如下:

1.特征值重要性

2.模型评估结果  

3.预测图

6.3 模型分析

通过上述分析,可以得到以下结论:

1.模型在训练集中表现较好,但测试集中,预测房价的精准度有待提高。

2.影响房价较大的因素表现为房型,地址,面积和楼层。这里可以看到, 地址的作用体现出来了。而在线性模型中较为重要的装修,版型在该模型中不 再被“重视”。

3.在图中可以看到,虽然预测存在误差,但总体趋势保持一致,与线性模型相比算是巨大进步。

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值