热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20210502_数据预处理(第二天)

二、数据预处理(第二天)–realpython小建议在最后文章目录二、数据预处理(第二天)来源1数据预处理及特征工程1.1缺失数据统计与处理1.1任务一:缺失值统计
二、数据预处理(第二天)

在这里插入图片描述

–real python

  • 小建议在最后

文章目录

  • 二、数据预处理(第二天)
    • 来源
    • 1 数据预处理及特征工程
      • 1.1 缺失数据统计与处理
        • 1.1 任务一:缺失值统计
        • 1.2 任务二:对缺失值进行处理
      • 1.2 重复值统计及处理
        • 1.2.1 重复值统计
        • 1.2.2 重复值处理
      • 1.3 特征工程
        • 1.3.1 数据分桶
        • 1.3.2 标签编码和独热编码
    • 2 数据重构
      • 2.1 数据合并
        • 2.1.1 横向合并
        • 2.1.2 纵向合并
      • 2.2 数据分组
    • 小建议


来源


  • 文章内容来源于Datewhale的hands-on-data-analysis项目
  • 地址:https://github.com/datawhalechina/hands-on-data-analysis
  • 作者:金娟娟,陈安东,杨佳达,老表,李玲,张文涛,高立业



  • 笔记目的: 借助五一复习一下pandas

1 数据预处理及特征工程


1.1 缺失数据统计与处理


1.1 任务一:缺失值统计

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

  • 可用 isnaisnull (两个函数没有区别)来查看每个单元格是否缺失, mean查看比例, sum查看数量

df.isnull().sum()

在这里插入图片描述

df.isnull().mean()

在这里插入图片描述

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

#写入代码
df[['Age','Cabin','Embarked']].head(3)

在这里插入图片描述



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


  • 处理方式: 删除dropna和填充fillall

  • deopha主要参数为轴方向 axis (默认为0,即删除行)、删除方式 how 、删除的非缺失值个数阈值 thresh ( 非缺失值 没有达到这个数量的相应维度会被删除)、备选的删除子集 subset ,其中 how 主要有 anyall 两种参数可以选择。

  • fillna 中有三个参数是常用的: value, method, limit 。其中, value 为填充值,可以是标量,也可以是索引到元素的字典映射; method 为填充方法,有用前面的元素填充 ffill 和用后面的元素填充 bfill 两种类型, limit 参数表示连续缺失值的最大填充次数。

df1 = df.dropna().head()
df1.reset_index(inplace=True)
df1

在这里插入图片描述

#0填充
df.fillna(0).head()

在这里插入图片描述



1.2 重复值统计及处理


1.2.1 重复值统计


  • duplicated()显示各行是否有重复行,没有重复行显示为FALSE,有重复行显示为TRUE;

df[df.duplicated()]

1.2.2 重复值处理


  • drop_duplicates方法用于返回一个移除了重复行的DataFrame

df.drop_duplicates().head()

在这里插入图片描述

1.3 特征工程


1.3.1 数据分桶


  • 数据分桶是一种数据预处理技术,用于减少次要观察误差的影响

为什么要进行数据分桶?

  1. 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
  2. 离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;
  3. LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;
  4. 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;
  5. 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化;
  6. 可以将缺失作为独立的一类带入模型;
  7. 将所有的变量变换到相似的尺度上。

  • 分桶方法分为无监督分桶和有监督分桶。
    (1)常用的无监督分桶方法有等频分桶、等距分桶和聚类分桶。
    (2) 有监督分桶主要有best-ks分桶和卡方分桶。
  • pd.cut( x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', )

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

在这里插入图片描述

#将连续变量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(3)

在这里插入图片描述

#将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
df = pd.read_csv('train.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.head()

在这里插入图片描述

1.3.2 标签编码和独热编码


  • 标签编码将文本变量Sex, Cabin ,Embarked用数值变量12345表示

df = pd.read_csv('test_clear.csv')
from sklearn.preprocessing import LabelEncoder
for feat in ['Cabin', 'Ticket','Sex']: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
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()



  • 独热编码将文本变量Sex, Cabin, Embarked用one-hot编码表示

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 数据重构


2.1 数据合并


  • 已知有 text-left-up.csv, text-right-up.csv, text-left-down, text-right-down四张表

  • concat 中,最常用的有三个参数,它们是 axis, join, keys ,分别表示拼接方向,连接形式,以及在新表中指示来自于哪一张旧表的名字.

  • join 函数除了必须的 onhow 之外,可以对重复的列指定左右后缀 lsuffixrsuffix 。其中,on 参数指索引名,单层索引时省略参数表示按照当前索引连接。

  • merge主要就是onhow ; left_on 左侧DataFarme中用作连接键的列
    right_on 右侧DataFarme中用作连接键的列


2.1.1 横向合并


  • concat利用 axis=1

result_up = pd.concat([text_left_up,text_right_up],axis=1)
result_down = pd.concat([text_left_down,text_right_down],axis=1)

  • join

resul_up = text_left_up.join(text_right_up)
result_down = text_left_down.join(text_right_down)

  • merge

result_up = pd.merge(text_left_up,text_right_up,left_index=True,right_index=True)
result_down = pd.merge(text_left_down,text_right_down,left_index=True,right_index=True)

2.1.2 纵向合并


  • concat

result = pd.concat([result_up,result_down])

  • append

result = result_up.append(result_down)

2.2 数据分组


  • df.groupby(分组依据)[数据来源].使用操作

  • 1.计算泰坦尼克号男性与女性的平均票价

text = pd.read_csv('result.csv')
text.head()
text.groupby('Sex')['Fare'].mean()

在这里插入图片描述



    1. 统计泰坦尼克号中男女的存活人数

text.groupby('Sex')['Survived'].sum()

3.计算客舱不同等级的存活人数

text.groupby('Pclass')['Survived'].sum()

  • agg()函数复现2和3

text.groupby(['Sex','Pclass'])['Survived'].agg({'Sex': [('sum_sex','sum')], 'Pclass': [('sum_pclass','sum')]})

在这里插入图片描述

小建议


  1. 第一节 2.3.1 任务一
    在这里插入图片描述
  2. 第二节 2.5.1

在这里插入图片描述3. 第二节2.5.1

在这里插入图片描述

  1. 第三节 2.4.4

在这里插入图片描述


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
author-avatar
瓜瓜哥哥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有