以泰坦尼克号数据集为例,探讨数据清洗及修复的流程手段
发布于 作者:苏南大叔 来源:程序如此灵动~

话题回到泰坦尼克数据集,本文以该数据集为例,探讨对数据进行清洗处理的几种方式。对于数据清洗这件事情来说,本文的内容并不是很完整,但是具有代表性。同时,需要注意的是:泰坦尼克数据集也是有很多个版本的,缺失值的情况并不完全一致。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验文章。测试环境:python@3.12.3
,pandas@2.2.2
,numpy@1.26.4
,xlrd@2.0.1
,openpyxl@3.1.2
。
加载数据集
数据集不同版本的选择,和后面的代码的编写是很紧密相关的。下面的链接可以对泰坦尼克数据集做较详细的描述。
- https://newsn.net/say/titanic.html
- https://newsn.net/say/sklearn-fetch_openml.html
- https://newsn.net/say/pandas-excel.html
对于na
空值,实际上是本文讨论的重点内容。什么样的数据可以被认为是na
,pandas
是有着自己的标准的。但是,这个标准可以被自定义。比如一些不合理的数据,也可以在读取excel
文件的时候,通过定义na_values
参数,就被自动转化为NA
值。
去掉重复值
是否需要去掉重复值,这个就不一定了,看数据集的具体情况而定。对于本文的泰坦尼克数据集来说,这个操作就是不必要的。不过执行一下,也无伤大雅。
dataframe
去重的问题,可以参考文章:
- https://newsn.net/say/dataframe-column-duplicates.html
- https://newsn.net/say/dataframe-drop-duplicates.html
删除不合理值
假如,存在着一些明显不合理的数据,也是可以直接删除的。使用dataframe
的条件筛选功能,就可以找到这些数据。
条件筛选的方式写法很多,更多的dataframe
的条件筛选问题,待后续文章讨论。
还可以选择删除掉有缺陷的数据,比如某条数据存在着空值,那么这条数据就可以视为有缺陷的数据。当然,缺陷数据可以弥补修复,也可以被删除掉。
更多参数,可以参考文章:
观察数据集
观察的数据目标,主要包括:一共有多少列数据,各个字段中每个字段都有多少NA
值。这些NA
值就是本文要重点处理的字段。
值得注意的是:read_excel()
的时候,是可以通过定义na_values
谁是NA
,来刻意改变空值的范围的。
输出:
根据输出,可以得出结论:数据条数少于计数值1309
的字段,都是存在缺失值的。
参考文章:
筛选目标字段
比如name
字段,对于泰坦尼克数据集的生存率计算来说,并不重要,就可以对它进行删除。参考文章:
如果想明确的保留哪些字段的时候,也可以这么操作:
填充空值na
对于存在空值的字段,首先要对其进行统计,获得平均值或者中位数值。平均值mean
,填充中位数Median
,或者某个经验值。
这里对年龄字段填充中位数值。参考代码:
可以通过代码df.count()
,观察age
字段的非空值的变化。非空值从1046
变成了1309
。
文字变数字
操作的主要例子就是sex
性别字段,male
变1
,female
变0
。
输出:
数字范围变文字
这个操作的主要例子是age
字段,不同的age
有着不同的年龄段范围,并且这个范围又是可定义的。参考文章:
通过打印df
,可以看到age
和age2
之间存在着一一对应的关系。
数字范围变成文字后,通常又接连着groupby
分组操作。不过,这就属于数据分析的范畴了,而不是数据清洗修复。留作后续文章讨论。参考文章:
查看dataframe
所有数据的方式,可以参考:
小数点问题
这里的age
字段有个小数点的问题,可以使用round()
方法解决。比如:
输出:
枚举变布尔/哑变量/独热码
经过这么多次的文章总结,大家应该也意识到了:单纯的文字是无法完成机器学习的重任的。必须变成数字或者布尔类型,才能参与后续的机器学习计算。所以,对于一些(伪)枚举类型的字段,也可以变成布尔型。使用的方法就是变成“哑变量”。
输出:
在pd.get_dummies()
中,
columns
指的就是要转变的字段。drop_first
指的是:被转变完的字段要删除掉第一个。(其实就是减少数据的冗余性)
更多内容,请参考文章:
总结
更多苏南大叔使用python
进行数据清洗的内容,请参考:


