数据清洗及特征处理 —— 泰坦尼克任务

2023-10-20 20:50

本文主要是介绍数据清洗及特征处理 —— 泰坦尼克任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第二章:数据清洗及特征处理

熟悉的开始~

# 导入numpy和pandas
import pandas as pd
import numpy as np#加载数据train.csv
df = pd.read_csv('train.csv')
df

2.1 缺失值观察与处理

2.1.1 任务一:缺失值观察

(1) 请查看每个特征缺失值个数

# 查看数据内缺失值字段
df.info()
# 查看每个特征缺失值个数
df.isnull().sum()

info()用于打印DataFrame的简要摘要,显示有关DataFrame的信息,包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存使用情况。

info()方法最后输出的是每列不为空的数量。也就是说如果有某列数据的数量比实际的索引数量要少,说明该列存在缺少值。

注意info()和describe()的区别:
describe()函数用于生成描述性统计信息。 描述性统计数据:数值类型的包括均值,标准差,最大值,最小值,分位数等;类别的包括个数,类别的数目,最高数量的类别及出现次数等;输出将根据提供的内容而有所不同。

(2) 请查看Age, Cabin, Embarked列的数据

# 查看Age, Cabin, Embarked列的数据 
df[['Age','Cabin','Embarked']] #  ['Age','Cabin','Embarked'] 作为索引标签

2.1.2 任务二:对缺失值进行处理

(1)处理缺失值一般有几种思路

  • 直接使用含有缺失值的特征
  • 删除含有缺失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的时候)
  • 缺失值补全

(2) 请尝试对Age列的数据的缺失值进行处理

  • 均值插补
  • 同类均值插补
  • 建模预测
  • 高维映射
  • 多重插补
  • 极大似然估计
  • 压缩感知和矩阵补全

(3) 请尝试使用不同的方法直接对整张表的缺失值进行处理

处理缺失值的一般思路:

  1. 删除
  2. 插补(重点)
  3. 不处理缺失值
    缺失值处理 —— 传送门
# 缺失值处理(方法一)
df[df['Age']==None]=0  # 空值部分未用“0”填充
# Age这一列的哪一行是空,就在Age那一列给它补上0
df

效果如下:

# 缺失值处理(方法二)
df = pd.read_csv('train.csv')
df[df['Age'].isnull()] = 0 # 可行操作  空值部分用“0”来填充
df

效果如下:
在这里插入图片描述

# 缺失值处理(方法三)
df = pd.read_csv('train.csv')
df[df['Age'] == np.nan] = 0  # 空值部分未用“0”填充
df

效果如下:
在这里插入图片描述

# 缺失值处理(方法四)
df = pd.read_csv('train.csv')
df[df['Age'].isna()] = 0 # 可行操作  空值部分用“0”来填充
df

效果如下:
在这里插入图片描述

# 丢弃含空值的行、列
df.dropna()
# 用0来填充缺失值
df = pd.read_csv('train.csv')
df.fillna(0)

【思考1】dropna和fillna有哪些参数,分别如何使用呢?
【思考1回答】

dropna()方法-丢弃含空值的行、列
函数形式:dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
参数:
axis:轴。0或’index’,表示按行删除;1或’columns’,表示按列删除。
how:筛选方式。‘any’,表示该行/列只要有一个以上的空值,就删除该行/列;‘all’,表示该行/列全部都为空值,就删除该行/列。
thresh:非空元素最低数量。int型,默认为None。如果该行/列中,非空元素数量小于这个值,就删除该行/列。
subset:子集。列表,元素为行或者列的索引。如果axis=0或者‘index’,subset中元素为列的索引;如果axis=1或者‘column’,subset中元素为行的索引。由subset限制的子区域,是判断是否删除该行/列的条件判断区域。
inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。

fillna()方法-填充空值
函数形式:fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
参数:
value:用于填充的空值的值。
method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None。定义了填充空值的方法, pad / ffill表示用前面行/列的值,填充当前行/列的空值, backfill / bfill表示用后面行/列的值,填充当前行/列的空值。
axis:轴。0或’index’,表示按行删除;1或’columns’,表示按列删除。
inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。
limit:int, default None。如果method被指定,对于连续的空值,这段连续区域,最多填充前 limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果method未被指定, 在该axis下,最多填充前 limit 个空值(不论空值连续区间是否间断)
downcast:dict, default is None,字典中的项为,为类型向下转换规则。或者为字符串“infer”,此时会在合适的等价类型之间进行向下转换,比如float64 to int64 if possible。
注:fillna(0) 用0来填充缺失值

【思考】检索空缺值用np.nan,None以及.isnull()哪个更好,这是为什么?如果其中某个方式无法找到缺失值,原因又是为什么?
【思考回答】Pandas 主要用 np.nan 表示缺失数据。 计算时,默认不包含空值。数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到。

2.2 重复值观察与处理

2.2.1 任务一:请查看数据中的重复值

# 查看数据中的重复值
df[df.duplicated()]

2.2.2 任务二:对重复值进行处理

# 对整个行有重复值的清理的方法
df = df.drop_duplicates()
df.head()

2.2.3 任务三:将前面清洗的数据保存为csv格式

# 将前面清洗的数据保存为csv格式
df.to_csv('test_clear.csv')

2.3 特征观察与处理

我们对特征进行一下观察,可以把特征大概分为两大类:
数值型特征:Survived ,Pclass, Age ,SibSp, Parch, Fare,其中Survived, Pclass为离散型数值特征,Age,SibSp, Parch, Fare为连续型数值特征。
文本型特征:Name, Sex, Cabin,Embarked, Ticket,其中Sex, Cabin, Embarked, Ticket为类别型文本特征,数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。文本型特征往往需要转换成数值型特征才能用于建模分析。

2.3.1 任务一:对年龄进行分箱(离散化)处理

(1) 分箱操作是什么?

分箱操作就是将连续数据转换为分类对应物的过程。简单点说就是将不同的东西,按照特定的条件放到一个指定容器里,比如分水果,把绿色的放一个篮子里,红色一个篮子等等,这个篮子就是箱,而水果就是数据, 其中颜色就是条件
分箱操作分为等距分箱和等频分箱。
分箱操作也叫⾯元划分或者离散化。

(2) 将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示

#将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
df.head()
df.to_csv('test_ave.csv')

(3) 将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示

#将连续变量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('test_cut.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],right = False)
df.head()

(4) 将连续变量Age按10% 30% 50% 70% 90%五个年龄段,并用分类变量12345表示

#将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])
df.head()
df.to_csv('test_pr.csv')

2.3.2 任务二:对文本变量进行转换

(1) 查看文本变量名及种类

# 查看类别文本变量名及种类
# 方法一: value_counts
df['Sex'].value_counts() # 查看'Sex'列中的变量及种类
df['Cabin'].value_counts() # 查看'Cabin'列中的变量及种类
df['Embarked'].value_counts() # 查看'Embarked'列中的变量及种类#方法二: unique
df['Sex'].unique()
df['Sex'].nunique()

value_counts常用于数据表的计数及排序,它可以用来查看数据表中,指定列里有多少个不同的数据值,并计算每个不同值有在该列中的个数,同时还能根据需要进行排序.
unique 函数 统计list中的不同值
nunique 函数 可直接统计dataframe中每列的不同值的个数

(2) 将文本变量Sex, Cabin ,Embarked用数值变量12345表示

# 将文本变量Sex, Cabin ,Embarked用数值变量12345表示
#方法一: replace
df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2],inplace = True)
df.head()#方法二: map
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
df.head()#方法三 (文本变量转换成数组变量)
from sklearn.preprocessing import LabelEncoder
df['Cabin'] = LabelEncoder().fit_transform(df['Cabin'])
df['Embarked'] = LabelEncoder().fit_transform(df['Embarked'])
df.head()#方法四: 使用sklearn.preprocessing的LabelEncoder(了解)
from sklearn.preprocessing import LabelEncoder
for feat in ['Cabin', 'Ticket']:lbl = LabelEncoder()  label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique())))df[feat + "_labelEncode"] = df[feat].map(label_dict)df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))df.head()

replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串)
map()函数会将指定的函数依次作用于某个序列的每个元素,并返回一个迭代器对象

(3) 将文本变量Sex, Cabin, Embarked用one-hot编码表示

for column in ['Cabin', 'Embarked']:
x = pd.get_dummies(df[column], prefix=[column]) # one-hot编码表示
df = pd.concat([df,x],axis = 1) # 按列拼接
df.head()
# 将文本变量Sex, Cabin, Embarked用one-hot编码表示
#方法: OneHotEncoder
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)df = pd.concat([df, x], axis=1)#df[feat] = pd.get_dummies(df[feat], prefix=feat)df.head()

2.3.3 任务三:从纯文本Name特征里提取出Titles的特征(所谓的Titles就是Mr,Miss,Mrs等)

# 从纯文本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')

总结

本节课学习掌握了对于存在缺失值、重复值、异常值数据的处理及所谓的数据清洗,同时了解如何对特征进行观察与处理,通常可以采取分箱(离散化)处理、将文本型特征转换成数值型特征或对文本字段特征进行提取等等操作。

这篇关于数据清洗及特征处理 —— 泰坦尼克任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/249633

相关文章

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +