特征工程——数据清洗——字符串中数值特征提取(2)

本文介绍了如何从字符串中提取数值或类别型特征,涉及数据清洗、正则表达式、缺失值处理等多个步骤。针对type_house、years_house、decoration_house和elevator_house等特征进行了详细处理,最后进行数据的数值化和one-hot编码。特征工程实践中,作者意识到存在特征选取不足、缺失值处理简单、未进行模型验证等问题,期望通过学习和交流改进。
摘要由CSDN通过智能技术生成

在(1)的基础上,继续。

在本次练习中,由于数据特征主要存在文本中,表现为:数值型和类别型特征都存于字符串中。一边要进行数据清洗也要进行特征抽取。

对于字符串中提取数值或类别型特征,由(1)的尝试,主要是使用正则表达式(也尝试过进行切片,但该数据噪点较多,字符串也很不规范,不能建立统一的切片形式),通过循环语句不断去倒腾这些数据。因此,我们的目的就是从字符串中提取数值或类别型特征,写的程序主要实现此功能。

本次主要从变量特征为direction_house、 decoration_house、 elevator_house 、type_house、 years_house、 area_house进行提取。

首先是type_house,原始特征为 :底层(共2层), 2层, 中楼层(共6层),底层(共2层)···,房子类型主要为底,中,高,但有些行中如为2层,明显的缺失,此处抽取低中高顶的特征。主要思路:首先将带有低中高顶的特征抽取出来,如果没有,假设用1进行填充,得到列表type_house1,接下来需要的是从该列表中提取相应的低中高顶特征,则根据索引位提取,得到列表type_house2,并查看各特征所占的比例,发现1占的还比较多,用其他替代,并且将 高 和顶进行特征合并(可能不妥,房子的高层和顶层还是有区别),再加入原数据中,代码如下。

type_house1 = []
for tp1 in bj_data['type_house']:
    if re.match(r"[底中高顶]", tp1):
        type_house1.append(tp1)
    else:
        type_house1.append(1)
结果·········
['底层(共2层)', 1, '中楼层(共6层)', '底层(共2层)', '底层(共2层)'····]

type_house2 = []
for tp2 in type_house1:
    if tp2 == 1:
       type_house2.append(tp2)
    else:
       type_house2.append(tp2[0])
结果·········
['底', 1, '中', '底', '底', '高', '高', '高', '底', 1, 1, '顶'···]
中    15199
1    11482
高     9456
顶     7307
底     4880

type_house3 = [ '其他'if x==1  else x for x in type_house2]
type_house4 = ['高' if x=='顶'  else x for x in type_house3]
bj_data.insert(2,'type_house4',type_house4)
bj_data.drop('type_house',axis=1, inplace=True)

接下来是years_house,原始数据信息主要体现了房子时间和楼类型(板楼、塔楼、板塔结合),因此需要从中提取两个特征,并对房子时间转为类型特征,定义2000年前的为老楼,2000-2010之间为中年楼,2010年后为年轻楼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值