利用pandas对在链家网爬取的租房数据进行清洗

爬虫代码可以参考这篇文章,全是干货,在此不再赘述。

爬下来的数据就可以进行数据清洗啦!首先确定需要处理的字段。因为后续准备做回归,所以我的变量设置是这样的:

清洗前的数据如下所示:

 

结合模型的变量、数据的字段,可以总结出数据清洗阶段需要完成的任务:

  1. house_address中的区级行政区、街道和小区通过连字符连接,需要将其拆分
  2. house_rental_area中的面积是字符串格式,需要删掉面积符号再将其转换为数字格式
  3. house_layout包含了三个变量,需要将其切片
  4. house_floor中的变量分为地下室、低楼层、中楼层、高楼层,需要将其转换为定序变量
  5. house_rental_price中的价格是字符串格式,需要删掉单位再将其转换为数字格式
  6. house_tag中只需要提取出是否精装、是否临近地铁两个定性变量
  7. house_elevator、house_heating、house_electricity同属定性变量,需要将其分类为0和1。house_water与house_electricity都是反映房屋是否商用,故只保留house_electricity

需要注意的是:

  1. house_layout字段中存在“x室x厅x卫”和“x房间x卫”两种表述方式,分析发现“x房间x卫”意味着没有living room,所以处理时现将“房间”换为“'室0厅”,以便后续切片
  2. 有些变量中存在“暂无数据”字段,需要将这列数据删除
  3. 爬下来的数据是有中文字符的,需要注意encoding的方式!总之utf_8_sig或者gbk都可以试试

需要用到的函数主要有:

  1. df1['house_tag'].str.contains('精装')注意该函数返回的是布尔值
  2. df1['room_num'] = df1['house_ayout'].str[0:1] 统计房间数量
  3. df1['house_heating']=df1['house_heating'].repace(['自采暖','集中供暖'],[0,1])将‘自采暖’repace0int);‘集中采暖’换成1
  4. df1 = pd.concat([df,df['house_address'].str.spit('-',expand=True)],axis=1).drop('house_address',axis=1)按照‘-’分割得到三列再弃掉['house_address']
  5. df1.rename(coumns={0: 'house_district', 1: 'house_street',2: 'house_apartment_compexes'}, inpace=True)分割字符串得到的新的三列重命名
  6. df1.drop(df1[df1["house_water"]=='暂无数据'].index,inpace = True)删除无效数据

 代码如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(pd.read_excel("D:\filename.xlsx"))
df.shape
df.info()
df.describe()

df1 = pd.concat([df,df['house_address'].str.split('-',expand=True)],axis=1).drop('house_address',axis=1) #按照’-‘切割
df1.rename(columns={0: 'house_district', 1: 'house_street',2: 'house_apartment_complexes'}, inplace=True) #重命名
df1['house_layout']=df1['house_layout'].str.replace('房间', '室0厅')
print('--------')
#print(df1['house_layout'].str[2:4])
df1.drop(df1[df1["house_water"]=='暂无数据'].index,inplace = True) #删除无效数据
df1.drop(df1[df1["house_electricity"]=='暂无数据'].index,inplace = True)
df1.drop(df1[df1["house_heating"]=='暂无数据'].index,inplace = True)
df1['room_num'] = df1['house_layout'].str[0:1]    #只需要统计房间、客厅、卫生间数量
df1['living_room_num'] = df1['house_layout'].str[2:3]
df1['bath_room_num'] = df1['house_layout'].str[4:5]
df1['subway'] = df1['house_tag'].str.contains('近地铁') #若house_tag中含有'近地铁'的描述,则新增的subway列中填上布尔值true
df1['refine'] = df1['house_tag'].str.contains('精装')
df1['house_heating']=df1['house_heating'].replace(['自采暖','集中供暖'],[0,1])
df1['house_gas']=df1['house_gas'].replace(['无','有'],[0,1])
df1['house_electricity'] = df1['house_electricity'].replace(['商电','民电'],[0,1])
df1['house_rental_area']=df1['house_rental_area'].str.rstrip('㎡')
df1['house_rental_price']=df1['house_rental_price'].str.rstrip('元/月')
df1['house_rental_area']= pd.to_numeric(df1['house_rental_area']) #字符串转换为数字
df1['house_rental_price']= pd.to_numeric(df1['house_rental_price'])
df1['house_floor1'] = df1['house_floor'].str[0:1] #只需要切第一个字就可以完成分类
df1['house_floor1'] = df1['house_floor1'].replace(['地','低','中','高'],[0,1,2,3])
#print("Datatype of Cost column after type conversion:")
#print(df1['house_rental_area'].dtypes)
df1=df1.replace([True,False],[1,0])  #将前面的布尔值换成0、1以便回归
df1.to_csv("D:\filename.csv",encoding="utf_8_sig")



清洗后的数据的部分字段如下所示:
 

总之数据清洗要结合手上的数据进行具体的字段、数据类型的分析,然后多翻阅一下pandas手册就可以啦!


 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 安居客出租房(武汉为例)爬虫+数据分析+可视化 这个爬虫是我前段时间在淘宝上做单子的时候遇见的一个客户需求。本来以为就是一个简单的爬虫项目。但后面客户加了数据清洗数据分析的要求。而后又加了要详细代码解释的需求等等。直到最后客户坦白说这是他们大专的毕设.......但是这个单子坐下来只有200左右,我想了一下,感觉好亏啊。在淘宝上随便找一个做毕设的都要好多钱的,而且客户本身的代码能力、数学、逻辑能力都很差,导致我每行都给注释以及看不懂,在我交付代码后又纠缠了我一个多礼拜。反正总体做下来的感觉就是烦躁。头一次感觉到了客户需求变更带来的巨大麻烦。 总之这是一次不是很愉快的爬虫经历。但是作为我写爬虫以来注释最详细的一次,以及第一次真正使用像matplotlib这种数据分析库的代码,我认为还是有必要分享出来给大家当个参考的(PS:大佬轻拍~)。爬虫本身几乎没有什么难度,写的也比较乱,敬请见谅。 **功能** 爬取安居客上的出租房信息(武汉地区的),并通过爬取数据进行数据清洗以及数据分析。给出四个不同层面的可视化图。最终结果如下图所示: ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/1.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/2.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/3.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/4.png) **环境** 1. Windows 10 2. python3.7 **使用方法** 首先声明该爬虫由于是特定情况下写的,所以本身的通用性特别差,仅可以对安居客站上的武汉的出租房信息进行爬取,且需要自己手动更新cookie。同时在对数据进行分析及可视化的时候由于也是特别针对武汉出租房进行的,所以针对性也比较强。如果别的需求需要自己进行更改。 1. 访问[安居客址](https://wuhan.anjuke.com/),获取cookie。 > tip:获取cookie的方法可根据[此链接](https://jingyan.baidu.com/article/5d368d1ea6c6e33f60c057ef.html) 2. 在项目中找到`spider.py`的文件,将第12行的cookie换成你自己的cookie。 3. 运行`spider.py`,获取房源信息。运行后应会产生一个`武汉出租房源情况.csv`的文件。此文件为我们从安居客上爬取的房源信息,其中包含`房屋租住链接、房屋描述、房屋地址、房屋详情(户型)以及经纪人、房屋价格`五个属性。 4. 在获取了数据之后我们运行`matplotlib.py`文件。进行数据清洗,分析,可视化。运行后即可获得**功能**中展示四个图片。 **技术栈** 1. request 2. parsel 3. pandas 4. matplotlib **进步(相比之前)** 此次爬虫相比之前的技术上可以说有减无增。但其中注释相当详细,可谓是每行代码都有注释。所以对于初学者应该有一些用处。同时使用matplotlib进行数据分析可视化等。对于数据处理的代码的注释也是几乎每行都有注释的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值