3.3 数据清洗与合并

数据预处理包含了数据清洗 (data cleansing) 与特征工程 (feature engineering) ,本节主要介绍的是数据清洗部份,主要目的是将原始数据转换成整洁的、组织合理的形式以供后续的特征工程使用。而数据清洗的工作内容很多,举例来说:

  • 基础运算 (basic) - 选择、过滤、删除重复项。
  • 取样 (Sampling) - 基于绝对、相对或是概率。
  • 数据划分 (Data Partitioning) - 将数据集划分为训练、验证、测试数据集。
  • 装箱 (Binning) - 这是用于减少微小观测误差影响的技术,常见的应用如直方图 (Histograms)。
  • 转换 (Transformations) - 如标准化,标准化,缩放,旋转。
  • 数据替换 (Data Replacement) - 剪切、拆分、合并。
  • 插补 (Imputation) - 使用统计算法替换缺失的观察值。
  • 加权 (Weighting) - 属性加权。

本节将会介绍基础运算中的过滤、找出缺失值、删除重复项以及数据替换中的剪切、拆分、合并。

3.3.1 泰坦尼克号竞赛 - 数据过滤

以 Kaggle 上著名的泰坦尼克号竞赛的中所提供的数据集来练习,这是一个数据科学有名的竞赛网站,而这个泰坦尼克号竞赛是透过网站所提供的数据来预测,哪些人的生存几率高。透过 info() 函数可以得知这个数据集有 891 笔数据,共有 12 个栏位。

titanic 数据集说明

栏位 说明
survival 是否存活
pclass 船票等级
sex 性别
Age 年龄
sibsp 船上兄弟姐妹的人数
parch 船上父母、儿女的人数
ticket 票号
fare 船运票价
cabin 船舱号码
embarked 上船的港口
import pandas as pd
import numpy as npdataDir = './data/titanicTrain.csv'
df = pd.read_csv(dataDir)
df.info()输出结果为:<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):#   Column       Non-Null Count  Dtype
---  ------       --------------  -----  0   PassengerId  891 non-null    int64  1   Survived     891 non-null    int64  2   Pclass       891 non-null    int64  3   Name         891 non-null    object 4   Sex          891 non-null    object 5   Age          714 non-null    float646   SibSp        891 non-null    int64  7   Parch        891 non-null    int64  8   Ticket       891 non-null    object 9   Fare         891 non-null    float6410  Cabin        204 non-null    object 11  Embarked     889 non-null    object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB

接着过滤男性,且年龄在20岁以下的乘客,过滤结果共有 102 位。

df[(df['Age']<=20) & (df['Sex']=='male')]输出结果为:
PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked
7   8   0   3   Palsson, Master. Gosta Leonard  male    2.0 3   1   349909  21.0750 NaN S
12  13  0   3   Saundercock, Mr. William Henry  male    20.0    0   0   A/5. 2151   8.0500  NaN S
16  17  0   3   Rice, Master. Eugene    male    2.0 4   1   382652  29.1250 NaN Q
27  28  0   1   Fortune, Mr. Charles Alexander  male    19.0    3   2   19950   263.0000    C23 C25 C27 S
50  51  0   3   Panula, Master. Juha Niilo  male    7.0 4   1   3101295 39.6875 NaN S
... ... ... ... ... ... ... ... ... ... ... ... ...
844 845 0   3   Culumovic, Mr. Jeso male    17.0    0   0   315090  8.6625  NaN S
850 851 0   3   Andersson, Master. Sigvard Harald Elias male    4.0 4   2   347082  31.2750 NaN S
869 870 1   3   Johnson, Master. Harold Theodor male    4.0 1   1   347742  11.1333 NaN S
876 877 0   3   Gustafsson, Mr. Alfred Ossian   male    20.0    0   0   7534    9.8458  NaN S
877 878 0   3   Petroff, Mr. Nedelio    male    19.0    0   0   349212  7.8958  NaN S
102 rows × 12 columns

在上述的数据中,可以发现舱位 (Cabin) 栏位很多是没有填写的 (NaN),如果分析者认为这个栏位对于在灾难发生时是没有影响的,可以选择删除,但如果这个栏位是有影响的,那在清洗过程,必须让所有的值是有意义的,所以我们必须先找出缺失值,然后替换成有意义的值。首先我们先找出在所有数据中有几个舱位,利用 Pandas 的聚合函数 groupby() 可以找出所有的数据并排序,发现共有 147 个舱位

# 依序列出所有数据
df[['Cabin']].groupby(['Cabin'],sort=True).count()输出结果为:
Cabin
A10
A14
A16
A19
A20
...
F33
F38
F4
G6
T
147 rows × 0 columns

我们可以用 duplicated() 来找出重复行,第一次出现的为 False,如果再出现一次就视为重复,所以就设定为 True,以下以 ‘Sex’ 栏位来进行重复行检验,可以发现它的重复次数为 889,因为第一次出现的 0 与 1 并不会被记录

len(df[df['Sex'].duplicated()])输出结果为:
889

Python数据处理-文章目录

3-03-1 泰坦尼克号竞赛 - 数据过滤相关推荐

  1. 2 机器学习入门——逻辑回归之kaggle泰坦尼克号竞赛

    前面几篇逻辑回归的例子有些是人造出来的,有些是比较正规的,但数据都比较完整,没有缺失的属性.虽然我们在很多数据上取到的非常好的效果,但总感觉好像不够味,不像实战. 所有的数据下载地址:https:// ...

  2. 数据过滤(MySQL)

    数据过滤 数据过滤用在WHERE表达式里,常用的有基本查询过滤.条件查询过滤.模糊查询过滤.字段查询过滤以及正则表达式查询过滤. 一.基本查询过滤 基本查询过滤可以查询所有字段数据或指定一个字段或者多 ...

  3. R行数据过滤基于dplyr包filter函数

    R行数据过滤基于dplyr包filter函数 目录 R行数据过滤基于dplyr包filter函数 筛选等于某个值的行 使用与操作筛选行

  4. python与R行列数据过滤(row column filtering):dplyr、 isnull、isna、drop、select、iloc、loc、isin、filter

    python与R行列数据过滤(row column filtering):dplyr. isnull.isna.drop.select.iloc.loc.isin.filter 很多工程师可能刚开始的 ...

  5. Pandas常见的数据过滤方法、通过列条件筛选行数据

    Pandas常见的数据过滤方法.通过列条件筛选行数据 不废话了,直接看代码吧: 一般情况下,前面5种就覆盖了绝大多数需求 import pandas as pd import numpy as npd ...

  6. SSAS系列——【03】多维数据(多维数据集对象)

    原文:SSAS系列--[03]多维数据(多维数据集对象) 1.什么是Cube? 简单 Cube 对象由基本信息.维度和度量值组组成. 基本信息包括多维数据集的名称.多维数据集的默认度量值.数据源和存储 ...

  7. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( JNI 传递 Bitmap | 获取位图信息 | 获取图像数据 | 图像数据过滤 | 释放资源 )

    文章目录 一.Bitmap 图像数据处理 二.Java 层 Bitmap 对象转为 JNI 层 bitmap 对象 三.获取 bitmap 中的图像数据 四.过滤 bitmap 中的图像数据 ( 获取 ...

  8. 如何利用大数据做金融风控? 原创 2016年11月24日 17:42:03 标签: 大数据 / 金融 / 风控 1594 导语:如何通过海量数据与欺诈风险进行博弈? 随着金融科技、科技金融等概念的

    如何利用大数据做金融风控? 原创 2016年11月24日 17:42:03 标签: 大数据 / 金融 / 风控 1594 导语:如何通过海量数据与欺诈风险进行博弈? 随着金融科技.科技金融等概念的热起 ...

  9. 从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/12

    从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/1293 ...

最新文章

  1. Linux I2C(一)之常用的几种实例化(i2c_client ) 【转】
  2. VLC搭建RTSP服务器的过程 -测试通过
  3. java 字符串去掉换行_java第一个程序quot;helloworldquot;
  4. 浅谈 FTP、FTPS 与 SFTP
  5. Tensorflow安装笔记
  6. gbrl参数_grbl-0.9运行参数配置说明
  7. ❤️程序员国企太安逸想辞职,又嫌私企大厂压力大996我该如何选择?(高级全栈自动化之路)
  8. (转)关于电子书格式比较
  9. 点分十进制表示的字符串转换为 unsigned int 整型数值
  10. Mac精品应用推荐:专业的后期特效制作软件
  11. android fd泄露分析,文件描述符(fd)泄漏排查一篇就够了
  12. QQ在线客服设置-QQ开启临时会话教程
  13. 粒子系统-烟花效果的实现
  14. 薇诺娜如何以创新战略在新消费浪潮中屹立不倒
  15. 三八节买什么数码好物?三八女神节实用不吃灰的数码好物推荐
  16. RealSense相机在ros2环境的安装
  17. 2.STC89C52RC芯片之流水灯程序
  18. omnet结果分析anf文件
  19. 移动端background 照片不铺满的处理
  20. 【沧海拾昧】C# .Net SplitContainer(分割器)控件的使用笔记

热门文章

  1. 20年后的iphoneXXXX手机长这样
  2. 在创建maven项目中出现src/main/java 和src/maim/java 报错解决方法
  3. vue3 vscode创建过程及element组件使用
  4. [生存志] 第121节 十二经络生气通天
  5. 基于SSM的物业管理系统
  6. 戴文的linux内核专题 24,戴文的Linux内核专题:26 配置内核 (22)
  7. 前端实现tab栏切换,这么常见的案例你学会了吗?
  8. 英语口语进阶:让你的疲劳与口渴表达更地道
  9. 使用Java导入excel时警告:A part name shall not have a forward slash as the last character
  10. html src href 路径,src跟href,url的区别