数据分析——数据清洗及特征处理 真的好困开始已经十点了

(草草写文章的一天,因为实在太困了)

1. 导入库和数据

先导入numpy、pandas包和数据

import numpy as np
import pandas as pd

df=pd.read_csv('C:/Users/Administrator/LC python/datawhale/data analysis/unit 2/train.csv')
df.head(3)

2. 数据清洗

#对数据进行清洗,也就是对数据的缺失值和异常点、字符串和数据转换,将数据清洗成可以分析或建模的样子。

2.1 缺失值的观察与处理

缺失值观察

查看每个特征的缺失值个数;

  • 方法一:
df.info()

在这里插入图片描述根据下列数据可以看出,非891 non-null的数据都存在缺失值。

  • 方法二:
    对null的数据个数进行求和
df.isnull().sum() 

在这里插入图片描述
查看Age,Cabin,Embarked列的数据:

这种方法只是可以查看前五行数据,不能确定缺失值的个数。

df[['Age','Cabin','Embarked']].head(5)

在这里插入图片描述

缺失值处理

处理缺失值有几种思路,下面将对Age列的数据进行处理,也将对整张表的缺失值进行处理:

  • 方法一:
df.dropna().head(5)  #隐藏缺失值所在的行

在这里插入图片描述

  • 方法二:
df.fillna(0).head(5) #将缺失值补为0

在这里插入图片描述

dropna和fillna使用方法如下:
参考:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

2.2 重复值的观察与处理

查看重复值
df[df.duplicated()]
去掉重复项
df.drop_duplicates().head()

保存文件:

df.to_csv('C:/Users/Administrator/LC python/datawhale/data analysis/unit 2/test_clear.csv')

2.3 特征值处理

数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性和鲁棒性会对连续变量进行离散化处理。文本型特征往往需要转化成数值才能用于建模分析。

对年龄分箱(离散化)处理
#对年龄进行分箱(离散化)处理
df['AgeBand']=pd.cut(df['Age'],5,labels=['1','2','3','4','5'])
df.head()

在这里插入图片描述

df.to_csv('C:/Users/Administrator/LC python/datawhale/data analysis/unit 2/test_ave.csv')
#将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
df['AgeBand']=pd.cut(df['Age'],[0,5,15,30,50,80],labels=['1','2','3','4','5'])
df.head()

在这里插入图片描述

df.to_csv('C:/Users/Administrator/LC python/datawhale/data analysis/unit 2/test_cut.csv')

2.4 文本变量名编码

查看文本变量名及种类
  • 方法一:
df['Sex'].value_counts() #用于查看某列有多少不同值,并计算每个值有多少重复值

在这里插入图片描述

df['Cabin'].value_counts()

在这里插入图片描述

df['Embarked'].value_counts()

在这里插入图片描述

  • 方法二:
df['Sex'].unique() #统计不同值,返回的是array,但是不能统计每个值个数,https://www.cnblogs.com/jiaxinwei/p/11982192.html

array([‘male’, ‘female’], dtype=object)

df['Sex'].nunique() #统计不同值的个数

2

df.head()

在这里插入图片描述

将类别文本转化为编码
  • 方法一:
#df['Sex_num']=df['Sex'].replace('male',1).replace('famale',2)
df['Sex_num']=df['Sex'].replace(['male','female'],[1,2])
df.head()
#replace将旧字符串替换成新字符串

replace用法
在这里插入图片描述

  • 方法二:
    将类别文本转换为one-hot编码。很多机器学习任务中,特征并不总是连续值,有可能是分类值。如果将上述特征用数字表示,效率会高很多。
    但是,转化为数字表示后,这些有序的数据不能直接用在我们的分类器中(如上行代码)。因为,分类器往往默认数据数据是连续的,并且是有序的。但按上述表示的数字并不有序的,而是随机分配的。
    解决上述问题的一种方法是采用One-Hot Encoding。独热编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。
    自然状态码为:000,001,010,011,100,101
    独热编码为:000001,000010,000100,001000,010000,100000
    可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。
    这样做的好处主要有:1)解决了分类器不好处理属性数据的问题 2)在一定程度上也起到了扩充特征的作用。
for feat in ["Age","Embarked"]:
    #x=pd.get_dummies(df["Age"]//6)
    #x=pd.get_dummies(pd.cut(df['Age'],5))
    x=pd.get_dummies(df[feat],prefix=feat)  #prefix是转换后列名的前缀
    df=pd.concat([df,x],axis=1)
    #df[feat]=pd.get_dummies(df[feat],prefix=feat)
    
df.head()

上面采取了三种分类方式,第一种是除以6进行降维分类,第二种是分为五类,第三种是每个年龄作为一类。
每个年龄作为一类的输出,仅看表格有变动的部分:
在这里插入图片描述

2.5 特征提取

从纯文本Name特征里提取出Titles的特征(Titles就是Mr,Miss,Mrs等)

df['Title']=df.Name.str.extract('([A-Za-z]+)\.',expand=False)
df.head()

在这里插入图片描述

#保存上面的为最终结论
df.to_csv('test_fin.csv')

终于完成啦,明天继续决策树打卡!脱发时间结束!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值