DW动手学数据分析Task2:数据清洗及特征处理

news2024/11/17 22:44:54

文章目录

  • 一 数据清洗
    • 1 缺失值观察与处理
      • 1.1 缺失值观察
      • 1.2 缺失值处理
    • 2 重复值观察与处理
  • 二 特征处理
    • 1 分箱(离散化)处理
    • 2 对文本变量进行转换
    • 3 从纯文本Name特征里提取出Titles的特征
  • 3 参考文章

一 数据清洗

  • 数据清洗:我们拿到的数据通常是不干净的,所谓的不干净,就是数据中有缺失值,有一些异常点等,需要经过一定的处理才能继续做后面的分析或建模,所以拿到数据的第一步是进行数据清洗

1 缺失值观察与处理

1.1 缺失值观察

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

  • df.isnull().sum()
    请添加图片描述

  • df.info()
    请添加图片描述
    (2)查看指定列的数据

  • df[['Age','Cabin','Embarked']].head()请添加图片描述

  • df.iloc[:,[6,10,11]].head(3)

  • df.loc[:,['Age','Cabin','Embarked']].head(3)

1.2 缺失值处理

(1)处理缺失值的几种思路

  • 删除缺失值样本
  • 可能值插补缺失值

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

令Age列数据的缺失值为0

  • 判断是否为None
df[df['Age']==None]=0
df.head(3)

请添加图片描述

  • 判断是否为np.nan
df[df['Age'] == np.nan] = 0
df.head(3)

请添加图片描述

  • .isnull()
df[df['Age'].isnull()] = 0
df.head(3)

请添加图片描述
思考: 检索空缺值用np.nan,None以及 .isnull() 哪个更好,这是为什么?如果其中某个方式无法找到缺失值,原因又是为什么?

回答:检索空缺值用np.nan要比用None好,因为数值列读取数据后,空缺值的数据类型为float64所以用None一般索引不到,比较的时候最好用np.nan
(3)直接对整张表的缺失值进行处理

  • 删除含缺失值的列:
df.dropna().head(3)

请添加图片描述

  • 用0填充缺失值:
df.fillna(0).head(3)

请添加图片描述
思考: dropna和fillna有哪些参数,分别如何使用呢?
回答:

  • dropna函数:将带有缺失值的数据使用dropna函数删除
    DataFrame.dropna(axis=0,how=’any’,thresh=None,subset=None,inplace=False)
参数名称说明
axisaxis=0删除行,axis=1删除列,默认为0
how‘any’,和‘all’, 默认 ‘any’,any表示行或列中只要有一个缺失值就清除,all表示要整行都是缺失值才清除
threshthresh参数接受一个int值,表示保留有n个非空值的行或列
subsetsubset参数接受一个集合作为值,可以是列表、元组、数组等,表示哪些列或行必须不能有空值,处于这些列或行的空值所处的行或列将被清除
inplaceinplace参数接受一个bool的值,表示是否在原数组上操作,如果值为True,那么返回None,并且直接对原数组进行缺失值的清理,否则就只返回一个copy
  • fillna函数:当缺失值所在的数据比较重要的时候,可能不适合删除,可以使用填充缺失值的方法
参数名称说明
axis接收0或1.表示轴向选择,默认为1
value表示用来替换缺失值的值
method取值为“backfill”或“bfill”时表示使用下一个非缺失值来填补缺失值。取值为“pad”或“ffill”是表示使用上一个非缺失值来填补缺失值
limit接收一个int。表示(每行或每列)填补缺失值个数上限,超过这个上限不再继续填补
inplace是否在原表上进行操作

参考链接:1 2


2 重复值观察与处理

(1)查看数据中的重复值

df[df.duplicated()]
  • 观察重复值函数:duplicated()

    • 作用:查找并显示数据表中的重复值
  • 用法1: 查询重复值的位置

    # 查看Age列的重复值位置
    df['Age'].duplicated()
    

    请添加图片描述
    用法2: 检查有多少重复值

    # 查看Age列的重复值位置
    df.duplicated().sum()
    # 176
    

(2)重复值处理

  • 重复值有哪些处理方式呢?

    • 重复值一般采取删除法来处理,但有些重复值不能删除,例如订单明细数据或交易明细数据等
  • 清除重复值:默认保留重复值的第一行

    df = df.drop_duplicates()
    
  • 清除重复值函数:drop_duplicates()

    • 格式:DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
    • 参数:
      • subset: 列名,默认所有的列
      • keep: 是否保留{‘first’, ‘last’, False}。
        • 【默认】keep= ‘first’ 表示去重时每组重复数据保留第一条数据,其余数据丢弃;
        • keep=‘last’ 表示去重时每组重复数据保留最后一条数据,其余数据丢弃;
        • keep=False 表示去重时每组重复数据全部丢弃,不保留
      • inplace: 是否替换{False, True},【默认】inplace=False表示去重之后不覆盖原表格数据,inplace=True表示去重之后原表格数据被覆盖
    # 示例
    df.drop_duplicates(keep='last') # 保留最后一行
    df.drop_duplicates(keep=False) # 全部删除不保留
    # 可以指定哪些字段重复视为重复值
    df3.drop_duplicates(subset=['Age', 'Sex']) 
    

(3)将清洗的数据保存为csv格式

df.to_csv('test_clear.csv')

二 特征处理

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

1 分箱(离散化)处理

(1)分箱操作是什么?
数据分箱处理, 即把一段连续的值切分成若干段,每一段的值看成一个分类。通常把连续值转换成离散值的过程,我们称之为分箱处理。

  • 具体解释:
    简单点说就是将不同的东西,按照特定的条件放到一个指定容器里。
    比如水果,把绿色的放一个篮子里,红色一个篮子等等,这个篮子就是箱,而水果就是数据,颜色就是条件

(2)为什么要分箱操作
在建模中,需要对连续变量离散化,特征离散化后,模型会更稳定,降低了模型过拟合的风险

(3)分箱操作

  • 分箱类别:
    • 有监督:就是个人确定范围区间
      • 方法:python 中主要使用cut方法
    • 无监督:让代码自己划分组
      • 方法:使用的是qcut方法
  • cut()函数
    • 格式:pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
    • 常用参数:
      • x:类array对象,且必须为一维,待切割的原形式
      • bins: 整数、序列尺度、或间隔索引。如果bins是一个整数,它定义了x宽度范围内的等宽面元数量。如果bin是序列,它定义了允许非均匀in宽度的bin边缘
      • right:布尔值。是否是左开右闭区间
      • labels:用作结果箱的标签。必须与结果箱相同长度。如果FALSE,只返回整数指标面元
        参考详细文章

(4)分箱操作实例
将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示,并保存为csv格式:

df['AgeBand'] = pd.cut(df['Age'], 5,labels = [1,2,3,4,5])
df.to_csv('test_ave.csv')

将连续变量Age划分为(0,5] (5,15] (15,30] (30,50] (50,80]五个年龄段,并分别用类别变量12345表示,并保存为csv格式:

df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = [1,2,3,4,5])
df.to_csv('test_cut.csv')

将连续变量Age按10% 30% 50% 70% 90%五个年龄段,并用分类变量12345表示,并保存为csv格式:

df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = [1,2,3,4,5])
df.to_csv('test_pr.csv')

2 对文本变量进行转换

(1)查看文本变量名及种类
方法一:value_counts

df['Sex'].value_counts()

在这里插入图片描述

方法二: unique

df['Sex'].unique()

在这里插入图片描述

df['Sex'].nunique()
# 3

(2)用数值变量表示文本变量
【将类别文本转换为12345】
方法一: replace

df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
df.head()

请添加图片描述

方法二: map

df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})
df.head()

请添加图片描述

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

for feat in ["Age", "Embarked"]:
    x = pd.get_dummies(df[feat], prefix=feat)
    df = pd.concat([df, x], axis=1)

3 从纯文本Name特征里提取出Titles的特征

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

请添加图片描述

3 参考文章

关于链式赋值和这个警告可以看看这篇文章,讲的还挺清晰的~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树的知识概括锦囊(一)

作者:爱塔居 专栏:数据结构 作者简介:大三学生,希望跟大家一起进步! 文章目录 目录 文章目录 一、树形结构 二、树的基础知识 三、二叉树 3.1 概念 3.2 特殊的二叉树 ​编辑 3.3 二叉树的性质 四、习题挑战 一、树形结…

手把手教你学51单片机-如何学习单片机

大多数大学生之所以最后变的平庸,不是因为脑子多么笨,也不是全怪自己贪玩不上进,只是没有一个好的领路人,许多学校可能挂着导师的名头,但是多数是挂羊头卖狗肉或者是干脆不管。最后等大学生毕业之后,那些所谓的老师就会说学生很差或者学习很差,反正就是跟自己没啥关系。…

OSPF综合实验(华为)

题目: 思路: 首先配置每个区域的路由和环回地址,其次,根据题目要求打通每个网络的连接,区域0用MGRE打通网络,区域4需要重发布,其次再考虑优化的问题。ip地址的规划是为了更好的路由汇总&#x…

《 Unity Shader 入门精要》第5章 开始 Unity Shader 学习之旅

第5章 开始 Unity Shader 学习之旅 5.2 一个最简单的顶点/片元着色器 顶点/片元着色器的基本结构 // Upgrade NOTE: replaced mul(UNITY_MATRIX_MVP,*) with UnityObjectToClipPos(*)// 定义 shader 的名字 Shader "Chapter 5/Simple Shader" {SubShader{Pass {//…

自动驾驶控制算法之车辆横向控制(project)

本文为深蓝学院-自动驾驶控制与规划-第三章作业 目录 1 projection introduction 2 思路提示 2.1 ComputeControlCmd 2.2 ComputeLateralErrors 3 Corer Case 3.1 Low speed operation 3.2 Extra damping on heading 3.3 Steer into constant radius curve 4 ROSLGSV…

FFmpeg-4.2.4的filter: drawbox源码分析

1. vf_drawbox.c功能 有两个功能 ,添加方框,和添加网格; 1.1 添加方框效果 1.2 添加网格效果

c++数据结构-树(详细总结附代码,一看就懂)

树的定义一棵树是由n(n>0)个元素组成的有限集合,其中:(1)每个元素称为结点(node)(2)有一个特定的结点,称为根结点或树根(root&…

上海亚商投顾:双创指数低开高走,数字经济继续活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪三大指数今日低开高走,创业板指午后涨超1%,科创50指数涨超1.6%。数字经济概念继续爆发&#…

算法基础(一):时间复杂度和空间复杂度

算法基础(一):时间复杂度和空间复杂度时间复杂度 O(1)O(1)O(1) O(N)O(N)O(N) O(logN)O(log N)O(logN) O(MN)O(MN)O(MN) O(NlogN)O(Nlog N)O(NlogN)、O(MlogN)O(Mlog N)O(MlogN) O(N2)O(N^2)O(N2)空间复杂度一些算法基础知识点和leetcode题解&…

【网络通信】【电信运营商实战工程师】思科设备篇-思科设备企业网实战

电信运营商实战工程师系列文章. 思科设备篇-思科设备企业网实战. 文章目录1. 思科设备基本开局配置2. ARP协议、交换机工作原理及广播风暴问题3. 思科设备 VLAN 及单臂路由实战4. 思科三层交换机实现 VLAN 间路由实战5. 思科设备静态默认及浮动路由实战6. 思科设备NAT实战全集1…

YOLO_V8训练自己的数据集

YOLO_V8在2023年开年横空出世,在春节前还得卷一下。由于YOLO_V8和YOLO_V5是同一个作者,所以很多操作都是一样的,下面主要描述一下如何用自己的数据集进行训练和测试(非命令行的方式)。1、训练数据和模型的目录结构这里…

设计模式学习(九):Abstract Factory抽象工厂模式

目录 一、什么是Abstract Factory模式 二、Abstract Factory示例代码 2.1 类之间的关系 2.2 抽象的零件:ltem类 2.3 抽象的零件:Link类 2.4 抽象的零件:Tray类 2.5 抽象的产品: Page类 2.6 抽象的工厂:Factory类 2.7 使用工厂将零件组装称为产品:Main类 2.8 具体的工厂…

linux三剑客之AWK

目录 AWK是什么 AWK基本结构 a.txt的文本实例 AWK内置变量 a.txt的文本实例 AWK自定义变量 a.txt的文本实例 AWK内置函数 a.txt的文本实例 awk高级输出 a.txt的文本实例 排序输出 a.txt的文本实例 条件选择输出 a.txt的文本实例 控制语句 a.txt的文本实例 AWK是什…

Java SE 继承和多态

继承和多态 1. 继承 1.1 为什么需要继承 Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是 现实世界错综复杂,事物之间可能会存在一些关联,那在设计程序是就需…

Elasticsearch7.8.0版本高级查询—— 指定查询字段查询文档

目录一、初始化文档数据二、指定查询字段查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中,向 ES 服务器发 POST 请求 :http://localhost:9200/user/_doc/1,请求体内容为: {"name":"张三","…

Git知识学习

主要内容:熟练掌握Git、GitHub、GitLab、Gitee码云的使用 文章目录1.Git概述1.1版本控制1.2版本控制工具1.3Git和代码托管中心2.Git常用命令2.1设置用户签名2.2初始化本地库2.3查看本地库状态2.3.1首次查看2.3.2新增文件2.3.3再次查看2.4添加暂存区2.4.1将工作区文件…

! LaTeX Error: File xxx.sty not found-统一解决办法

在使用一些模板时常见这个错,其实就是缺宏包!解决方案如下! 第一步:在网站 https://ctan.org/pkg 找到你缺失的宏包,下载zip文件。 第二步:将解压后的文件夹复制到安装路径下: 如&#xff…

aws ecs 理解任务和容器的资源分配

参考资料 如何在 Amazon ECS 中为任务分配内存? 关于 Amazon ECS 中的 CPU 分配,我需要了解哪些信息? Amazon ECS CloudWatch 指标 任务定义参数 在ecs中可以指定资源的分配逻辑,其实就是cpu和内存分配。 下面这张图对ecs任…

搜索本地文件

李国春 处理大量的数据集时将文件整理到一起也是一个重要的工作。本文介绍一个将本地计算机目标文件的绝对路径汇集到一个文本文件的中的脚本。以方便后续批量处理这些文件。 启动RSD,在脚本编辑窗口输入图1中的代码。点击工具条上的小三角开始运行,提…

计网必会:电子邮件、SMTP协议

文章目录SMTP概念SMTP的操作过程——发送邮件-接收邮件细品:发送邮件与HTTP的对比邮件报文格式和MIME邮件访问协议SMTP概念 SMTP是电子邮件中的主要协议,它能使用TCP可靠数据传输服务,从发送方的服务器向接收方发送邮件, SMTP&am…