安居客python二手房数据预处理
题记:
继上篇对安居客二手房数据进行爬取之后,接下来是对安居客进行数据预处理。
一:
观察上述数据可以发现爬取的数据比较杂乱无章,这时需要我们对数据进行处理,比如把一些无效数据清除掉,还有一些机器无法识别的数据,方便后期运用集群对数据进行获取与观察。
清洗的数据包括:房屋编号,元/㎡,月供,房产等
二:
1.
对数据进行处理需要用到以下函数:
import shutilimport pandas as pd
import re
import os
尤其是pandas函数,可以帮助我们很方便的对数据进行处理(pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法)
2.
接下来具体对数据进行处理
(1)先获取处理前的文件
需要用到shutil函数对文件进行移动。对文件进行了一个获取
代码如下:
#移动文件
def dealData():if os.path.exists("./安居客_处理前.txt"):os.remove("./安居客_处理前.txt")if os.path.exists("./安居客_处理后.txt"):os.remove("./安居客_处理后.txt")srcfile = "../数据采集/安居客.txt"dstfile = "./安居客_处理前.txt"shutil.copy(srcfile, dstfile) # 移动文件print("移动文件 %s -> %s" % (srcfile, dstfile))transformData()
(2)打开文件后这时需要用到上面所提到pandas函数,通过对上述数据的观察,可以发现每列数据的开头都有房屋编号,这时我们可以看成一个列函数,用columns对数据进行一个排序,对每一个数据赋一个元素,方便我们接下来对数据进行处理。
代码如下:
data.columns = ['编号', '区县', '片区', '小区名称', '房屋单价', '房屋总价','户型', '楼层', '面积', '朝向', '装修','建设时间','房屋属性','用途','产权','产权时间','唯一住房', '房贷','中介公司','挂牌时间']print(data.head())
(3)
data = data[data['编号'].str.contains('房屋编码')]
把房屋编号替换成编号,这时就可以对数据进行处理了。(同时把无效数据进行处理掉)
处理方法有三种等
data["编号"] = data.apply(lambda x: formatHouseNumber(x), axis=1)
'''
格式化房屋编号
'''
def formatHouseNumber(colunm):return colunm["编号"].replace("房屋编码:","")
用函数方法对数据进行处理,把“房屋编号”替换成编号
data["房屋单价"] = data.apply(lambda x: x["房屋单价"].replace("元/㎡", ""), axis=1)
直接在data中进行直接处理,对房屋单价进行处理
'''
首付
'''
def formatHouseFirstPay(colunm):partten = "首付(\d+)万.+月供(\d+.\d+)元"return int(re.search(partten,colunm["房贷"]).group(1)) * 10000
用re正则表达式获取相应的数据
其他的数据处理方法诸如此类
(4)
1.需要注意的是
data["楼层位置"] = data.apply(lambda x: x["楼层"].split("(")[0], axis=1)data["楼层数"] = data.apply(lambda x: re.search("\d+",x["楼层"]).group(), axis=1)data.drop(['楼层'], axis=1, inplace=True) #楼层数据处理完,不再需要
对楼层进行处理时,需要楼层位置和楼层数,把楼层进行了两部分的拆分,所以最后我们要把楼层删除掉(房贷处理也是如此)
2.需要注意的是,数据在pandas中数据类型为float型,要用数据类型处理时需要判断是否是浮点型
'''
建设产权时间
'''
def formatHouseRightTime(colunm):return "未知" if type(colunm["产权时间"]) == float else colunm["产权时间"]
最后处理文档如下:
写入文件:data.to_csv("./安居客_处理后.txt", sep=";", index=False)
对安居客的数据处理就完成了
源代码如下:
import shutilimport pandas as pd
import re
import os'''
格式化房屋编号
'''
def formatHouseNumber(colunm):return colunm["编号"].replace("房屋编码:","")'''
格式化房屋总价
'''
def formatHouseTotal(colunm):return int(re.search("\d+",colunm["房屋总价"].replace("房屋编码:","")).group())*10000'''
建设时间
'''
def formatHouseBuildTime(colunm):return re.search("\d+", colunm["建设时间"]).group() if re.search("\d+", colunm["建设时间"]) != None else "未知"'''
建设产权
'''
def formatHouseRight(colunm):return re.search("\d+", colunm["产权"]).group() if re.search("\d+", colunm["产权"]) != None else "未知"'''
建设产权时间
'''
def formatHouseRightTime(colunm):return "未知" if type(colunm["产权时间"]) == float else colunm["产权时间"]'''
唯一住房
'''
def formatHouseOnly(colunm):return "否" if type(colunm["唯一住房"]) == float else colunm["唯一住房"]'''
首付
'''
def formatHouseFirstPay(colunm):partten = "首付(\d+)万.+月供(\d+.\d+)元"return int(re.search(partten,colunm["房贷"]).group(1)) * 10000'''
月供
'''
def formatHouseMonthPay(colunm):partten = "首付(\d+)万.+月供(\d+.\d+)元"return re.search(partten, colunm["房贷"]).group(2)'''
预处理数据
'''
def transformData():data = pd.read_csv("./安居客_处理前.txt", header=None, sep=";", encoding="utf-8")#数据实例(5列换行):#房屋编码:1906158650072067;双流华府;中铁骑士府邸;20465.0元/㎡;185 万 ;#4室2厅2卫;低层(共28层);90.4㎡ ;南北;精装修;#2016年竣工/普通住宅 ;商品房住宅;普通住宅;70年产权;满二年;#是;首付55万,月供6872.91元;九业房产;2021-3-14data.columns = ['编号', '区县', '片区', '小区名称', '房屋单价', '房屋总价','户型', '楼层', '面积', '朝向', '装修','建设时间','房屋属性','用途','产权','产权时间','唯一住房', '房贷','中介公司','挂牌时间']print(data.head())#删除乱码对应的行,只保留包含“房屋编码”的数据data = data[data['编号'].str.contains('房屋编码')]data["编号"] = data.apply(lambda x: formatHouseNumber(x), axis=1)data["房屋单价"] = data.apply(lambda x: x["房屋单价"].replace("元/㎡", ""), axis=1)data["房屋总价"] = data.apply(lambda x: formatHouseTotal(x), axis=1)data["楼层位置"] = data.apply(lambda x: x["楼层"].split("(")[0], axis=1)data["楼层数"] = data.apply(lambda x: re.search("\d+",x["楼层"]).group(), axis=1)data.drop(['楼层'], axis=1, inplace=True) #楼层数据处理完,不再需要data["面积"] = data.apply(lambda x: x["面积"].replace("㎡ ", ""), axis=1)data["建设时间"] = data.apply(lambda x: formatHouseBuildTime(x), axis=1)data["产权"] = data.apply(lambda x: formatHouseRight(x), axis=1)data["产权时间"] = data.apply(lambda x: formatHouseRightTime(x), axis=1)data["唯一住房"] = data.apply(lambda x: formatHouseOnly(x), axis=1)data["首付"] = data.apply(lambda x: formatHouseFirstPay(x), axis=1)data["月供"] = data.apply(lambda x: formatHouseMonthPay(x), axis=1)data.drop(['房贷'], axis=1, inplace=True) # 房贷数据处理完,不再需要data.to_csv("./安居客_处理后.txt", sep=";", index=False)#data.to_csv("./安居客_处理前.txt",sep=";", columns=["编号","小区名称","房屋单价","房屋总价","户型","面积","房贷"],index=False)#编号;区县;片区;小区名称;房屋单价;房屋总价;户型;面积;朝向;装修;建设时间;房屋属性;用途;产权;产权时间;唯一住房;中介公司;挂牌时间;楼层位置;楼层数;首付;月供#可以通过header修改列的顺序#移动文件
def dealData():if os.path.exists("./安居客_处理前.txt"):os.remove("./安居客_处理前.txt")if os.path.exists("./安居客_处理后.txt"):os.remove("./安居客_处理后.txt")srcfile = "../数据采集/安居客.txt"dstfile = "./安居客_处理前.txt"shutil.copy(srcfile, dstfile) # 移动文件print("移动文件 %s -> %s" % (srcfile, dstfile))transformData()if __name__ == "__main__":dealData()
安居客python二手房数据预处理相关推荐
- Python3 爬虫实战 — 安居客武汉二手房【requests、Beautiful Soup、CSV】
爬取时间:2019-10-09 爬取难度:★★☆☆☆☆ 请求链接:https://wuhan.anjuke.com/sale/ 爬取目标:爬取武汉二手房每一条售房信息,包含地理位置.价格.面积等,保存 ...
- scrapy爬虫实战:安居客深圳二手房
温馨提示:想要本次爬虫源代码的同学 请关注公众号:python小咖 回复 ' 安居客爬虫 ' 获取源码 --------------------------------- 接下来进入正题 本次爬虫实现 ...
- 安居客无锡二手房数据获取
安居客无锡二手房 用selenium模拟浏览器抓取 使用requests抓取网页,用bs4解析网页 使用lxml解析网页 (xpath) 网址: https://wuxi.anjuke.com/sal ...
- 安居客广州二手房定价分析
数据 数据爬虫所得,为安居客广州二手房信息,由于数据量不大,所有分析只是针对这个二手房网站上发布的二手房信息所进行的一些简单分析,不能避免偶然性.本人对房价分析亦没什么了解,以下均只是当作数据分析的练 ...
- python图片保存和图片展示顺序_【IT专家】【 python 】 —— 数据预处理:(1) 读取与显示图片 + 图像通道顺序变换...
本文由我司收集整编,推荐下载,如有疑问,请与我司联系 [ python ] -- 数据预处理: (1) 读取与显示图片 + 图像通道顺 序变换 2018/05/31 29 # ---- 用 OPENC ...
- Python数据分析数据预处理特征值独热编码
[小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python数据分析 数据预处理 特征值独热编码 独热编码,是一种将分类变量转换为若干二进制 ...
- python文本数据处理_从 App 描述介绍文字中发掘 Python 文本数据预处理实例
本文为 AI 研习社编译的技术博客,原标题 What App Descriptions Tell Us: Text Data Preprocessing in Python,作者为 Finn Qiao ...
- Python商品数据预处理与K-Means聚类可视化分析
数据提取 在我之前的文章Scrapy自动爬取商品数据爬虫里实现了爬虫爬取商品网站搜索关键词为python的书籍商品,爬取到了60多页网页的1260本python书籍商品的书名,价格,评论数和商品链接, ...
- python3 beautiful爬取安居客的二手房信息
今天有一位同学找我爬取安居客的信息,安居客网站有反爬虫机制,所以不能简单用requests来做,这里用selenium来模拟获取url网页. 环境 mac, python3.7 beautifulso ...
最新文章
- 剑指offer:左旋转字符串
- “Survey of machine learning techniques for malware analysis ”
- 基于linux智能家居系统设计,基于Linux的智能家居的设计(2)
- centos6.5 搭建NFS 服务
- 数据结构上机实验之顺序查找
- mysql数据库innodb恢复命令_MySQL 如何对InnoDB使用Undrop来恢复InnoDB数据
- vue脚手架搭建项目的兼容性配置
- ubuntu / xubuntu conda/pyenv need permission, but sudo conda :command not found
- android 锁屏壁纸时钟,桌面锁屏时钟下载-桌面锁屏时钟app安卓版v2.8.0-七度网
- Amazon EC2最新最全使用教程!!!
- python:实现恩尼格玛密码机算法(附完整源码)
- GPT生成情人节表白情话,AI撩骚情人卡很搞笑!
- H12-723题库-个人整理笔记
- EditPlus字体放大方法
- win10 桌面(Windows 资源管理器)卡死的根本解决办法
- js闭包是什么?对js闭包的理解
- 深圳APP开发婚恋社交App
- Java打印完整的堆栈信息
- 计算机学生英语面试自我介绍ppt,【英语自我介绍ppt】_大学生英语自我介绍ppt...
- 签名验签服务器的作用,卫士通签名验证服务器
热门文章
- 「信息架构」EA874:信息架构基本组件
- 数字旅游解决方案_曼斯特科技提供智慧文旅主题展馆解决方案
- Apple Watch苹果手机系统升级后安装的第三方APP打开闪退,解决方案如下
- 服务器 mac系统安装教程,mac os sierra安装教程
- FLIN(2018 ISCA)
- Bowtie2去除污染的使用方法
- java 集合之 Collections.UnmodifiableXXX 与 Collections.synchronizedXXX
- 如何成为高级架构师?
- 并查集详解(一个有爱的江湖故事)
- 深度学习---算法岗面试题