Day5打卡 独热编码

题目:离散特征的独热编码

应该先填补缺失值,再独热编码。【如果顺序颠倒的话,用众数补全,比如北京上海深圳001,有可能三个数的众数都是0,就会变成000。】

#读取数据
import pandas as pd  
data = pd.read_csv('data.csv')  #此时data是一个DataFrame对象
 
# day4的课提到了 查看dataframe对象的列名,可以使用data.columns属性。
data.columns 

# 打印所有的离散变量名
for discrete_features in data.columns:
    if data[discrete_features].dtype == 'object':
        print(discrete_features)#打印离散变量名
[在python中对于变量名常常用英文含义和下划线来命名,而不借助拼音,这是便于他人阅读和理解代码的一种习惯。连续的英文是continuous,离散的英文是discrete]

# 以Home Ownership为例,打印观察下
data['Home Ownership']
# 需要进行编码,打印这个变量的值
# vakue_counts()方法用于统计每个类别的个数,并返回一个Series对象。这个方法可以帮助我们快速了解数据集中每个类别的分布情况。【判断是否具备顺序关系】
data['Home Ownership'].value_counts()

 
# 对离散变量【Home Ownership列】进行独热编码[不具备顺序关系]
# 这里的drop_first=True表示删除第一个特征,避免出现共线性
# 这里的data是一个DataFrame对象,columns是一个列表,存放离散变量名
data = pd.get_dummies(data, columns=['Home Ownership'])
data.columns
 
[data.head()]
# 独热编码后的数据是bool类型,试着转换为int类型,因为后续可能有的函数计算不支持bool值
# 学习类型转换的方法
data['Home Ownership_Have Mortgage'] =data ['Home Ownership_Have Mortgage'].astype(int)
data['Home Ownership_Have Mortgage']

到此为止,已经掌握了对离散变量做独热编码的所有方法

1. 找到离散变量

2. 独热编码映射

3. 转换独热编码到int类型

4. 填补每一列的缺失值

# 现在尝试结合之前的代码一次性对所有离散特征独热编码
# 重新读取数据
data = pd.read_csv("data.csv")
# 找到离散变量
discrete_lists = [] # 新建一个空列表,用于存放离散变量名
for discrete_features in data.columns:
    if data[discrete_features].dtype == 'object':
        discrete_lists.append(discrete_features)
 
# 离散变量独热编码
data = pd.get_dummies(data, columns=discrete_lists, drop_first=True) 

data.columns
#如何找到所有独热编码后的新特征名
# 对比独热编码前后的列名 即可
data2 = pd.read_csv("data.csv")
list_final = [] # 新建一个空列表,用于存放独热编码后新增的特征名
for i in data.columns:
    if i not in data2.columns:
       list_final.append(i) # 这里打印出来的就是独热编码后的特征名
list_final
 
# 其实还可以通过data.columns.difference()方法来实现
import pandas as pd
# 假设data是原始数据框
original_columns = data.columns
# 进行独热编码
data_encoded = pd.get_dummies(data)
# 获取新增的特征名
new_features = data_encoded.columns.difference(original_columns)
print("独热编码后的新特征名:")
print(new_features.tolist())
# 可以看到 想要实现一个结果有很多不同方法
 
# 接着之前的,对bool特征进行类型转换
for i in list_final:
    data[i] = data[i].astype(int) # 这里的i就是独热编码后的特征名
data.head()
 
# 填补每一列的缺失值
data.dtypes
data.isnull().sum() # 统计每一列的缺失值个数
 
# 用均值填补
# 循环遍历这个列表中的每一列
for i in data.columns:
    if data[i].isnull().sum() > 0: # 找到存在缺失值的列
        #计算该列的均值
        mean_value = data[i].mean()
        #用均值填充缺失值
        data[i].fillna(mean_value, inplace=True)
 
data.isnull().sum()

在py文件中 一次性处理data数据中所有的连续变量和离散变量

1. 读取data数据

2. 找到所有离散特征,对一个离散变量进行one-hot编码

3. 对独热编码后的变量转化为int类型

4. 对所有缺失值进行填充

注意是py文件中,所以每一步的输出是否正确需要你来使用debugger功能来逐步查看

注意此时你可以借助下面的调试控制台 来进行值的查看

注意:这里区分离散变量仅仅通过object类型,实际中还需要结合对数据的认识,这里为了方便没有考虑现实意义。

[可以鼠标悬停来查看每个函数的参数,这里采用了类型注解写法,可以看到每个参数的要求类型,同时可以看到参数的默认值,如果没有默认值就是必填参数。]

@浙大疏锦行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值