pandas中size方法_如何使用pdpipe与Pandas构建管道?

24488a73ff494e81b8db423d4d224d17.png作者 | Tirthajyoti Sarkar译者 | 清儿爸编辑 | 夕颜来源 | AI科技大本营(ID: rgznai100)
【导读】Pandas 是 Python 生态系统中的一个了不起的库,用于数据分析和机器学习。它在 Excel/CSV 文件和 SQL 表所在的数据世界与 Scikit-learn 或 TensorFlow 施展魔力的建模世界之间架起了完美的桥梁。数据科学流通常是一系列的步骤:数据集必须经过清理、缩放和验证,之后才能被强大的机器学习算法使用。当然,这些任务可以通过 Pandas 等包提供的许多单步函数或方法来完成,但更为优雅的方式是使用管道。在几乎所有的情况下,通过自动执行重复性任务,管道可以减少出错的机会,并能够节省时间。
在数据科学领域中,具有管道特性的软件包有 R 语言的 dplyr 和 Python 生态系统中的 Scikit-learn。要了解它们在机器学习工作流中的应用,你可以读这篇很棒的文章:
https://www.kdnuggets.com/2017/12/managing-machine-learning-workflows-scikit-learn-pipelines-part-1.html
Pandas 还提供了 `.pipe` 方法,可用于类似的用户定义函数。但是,在本文中,我们将讨论的是非常棒的小库,叫 pdpipe,它专门解决了 Pandas DataFrame 的管道问题。

使用 Pandas 的流水线

Jupyter Notebook 的示例可以在我的 Github 仓库中找到:https://github.com/tirthajyoti/Machine-Learning-with-Python/blob/master/Pandas%20and%20Numpy/pdpipe-example.ipynb。让我们看看如果使用这个库来构建有用的管道。

数据集

为了演示,我将使用美国房价的数据集,可从 Kaggle 下载:https://www.kaggle.com/vedavyasv/usa-housing我们可以在 Pandas 中加载数据集,并显示其汇总的统计信息,如下所示:2bb54ebb9dded5f6bd7bc70123ebacf9.png但是,数据集中还有一个“Address”字段,其中包含了文本数据。944369a4cbd329122f740a1bef76cbbf.png

添加大小限定符列

在这个演示中,我们在数据集中添加了一个列来限定房屋的大小,代码如下所示:9674932167a9dc787be3d04d02d1518e.png经过此步骤之后,数据集如下所示:014f310ff52e5ef477d097d4ece1edf7.png

最简单的管道:一次操作

我们从最简单的管道开始,它只包含一次操作(不必担心,我们很快就会增加复杂性的)。让我们假设机器学习团队和领域专家说他们认为我们可以安全地忽略用于建模的数据 `Avg. Area House Age` 。因此,我们将从数据集中删除这一列。对于这个任务,我们使用 pdpipe 中的 `ColDrop` 来创建一个管道对象 `drop_age`,并将 DataFrame 传递给这个管道。
import pdpipe as pdpdrop_age = pdp.ColDrop(‘Avg. Area House Age’)df2 = drop_age(df)
正如预期的那样,生成的 DataFrame 如下所示:9cf7c607e0e2bb71f00e42ae77edef72.png

只需添加管道链级

只有当我们能够进行多个阶段时,管道才是有用和实用的。在 pdpipe 中有多种方法可以实现这一点。但是,最简单、最直观的方法是使用 + 运算符。这就像手工连接管道一样!比方说,除了删除 `age` 列之外,我们还希望对 `House size` 的列进行独热编码,以便可以轻松地在数据集上运行分类或回归算法。
pipeline = pdp.ColDrop(‘Avg. Area House Age’)pipeline+= pdp.OneHotEncode(‘House_size’)df3 = pipeline(df)
因此,我们首先使用 `ColDrop` 方法创建了一个管道对象来删除 `Avg. Area House Age` 列。此后,我们只需使用常用的 Python 的 `+=` 语法将 `OneHotEncode` 方法添加到这个管道对象中即可。生成的 DataFrame 如下所示。请注意,附加的指示列 `House_size_Medium` 和 `House_size_Small` 是由独热编码创建的。24632e8c93da499dd06177eb6eb1f989.png

根据行值删除某些行

接下来,我们可能希望根据行值来删除它们。具体来说,我们可能希望删除房价低于 25 万的所有数据。我们有 `ApplybyCol` 的方法来讲删除用户蒂尼的函数应用到 DataFrame,还有一个方法 `ValDrop` 根据特定值来删除某些行。我们可以轻松地将这些方法链接到管道,以便能够有选择地删除行(我们仍在向现有的管道对象中添加内容,该对象已经完成了列删除和独热编码的其他工作)。
def price_tag(x):    if x>250000:        return 'keep'    else:        return 'drop'pipeline+=pdp.ApplyByCols('Price',price_tag,'Price_tag',drop=False)pipeline+=pdp.ValDrop(['drop'],'Price_tag')pipeline+= pdp.ColDrop('Price_tag')
第一个方法是通过应用用户定义的函数 `price_tag()`,根据 `Price` 列中的值来对行进行标记。3f134b2a524af1c1a380e4cac733ab86.png第二种方法是,在  `Price_tag` 中查找字符串 `drop`,并删除那些匹配的行。最后,第三个方法就是删除 `Price_tag` 标签列,清理 DataFrame。毕竟,这个 `Price_tag`列只是临时需要的,用于标记特定的行,在达到目的后就应该将其删除。所有这些都是通过简单地链接同一管道上的各个阶段来完成的!现在,我们可以回顾一下,看看我们的管道从一开始对 DataFrame 都做了什么工作:
  • 删除特定的列。
  • 独热编码,用于建模的分类数据列。
  • 根据用户定义函数对数据进行标记。
  • 根据标记删除行。
  • 删除临时标记列。
所有这些,使用的是以下五行代码:
pipeline = pdp.ColDrop('Avg. Area House Age')pipeline+= pdp.OneHotEncode('House_size')pipeline+=pdp.ApplyByCols('Price',price_tag,'Price_tag',drop=False)pipeline+=pdp.ValDrop(['drop'],'Price_tag')pipeline+= pdp.ColDrop('Price_tag')df5 = pipeline(df)

最近版本更新:直接删除行!

我与包作者 Shay Palachy 进行了精彩的讨论,他告诉我,该包的最新版本可以用 lambda 函数,仅用一行代码即可完成行的删除(满足给定的条件),如下所示:
pdp.RowDrop({‘Price’: lambda x: x <= 250000})
 

Scikit-learn 与 NLTK

还有许多更有用、更直观的 DataFrame 操作方法可用于 DataFrame 操作。但是,我们只是想说明,即使是 Scikit-learn 和 NLTK 包中的一些操作,也包含在 pdpipe 中,用于创建非常出色的管道。

Scikit-learn 的缩放估算器

建立机器学习模型最常见的任务之一是数据的缩放。Scikit-learn 提供了集中不同类型的缩放,例如,最小最大缩放,或者基于标准化的缩放(其中,数据集的平均值被减去,然后除以标准差)。我们可以在管道中直接链接这些缩放操作。下面的代码段演示了这种用法:
pipeline_scale = pdp.Scale('StandardScaler',exclude_columns=['House_size_Medium','House_size_Small'])df6 = pipeline_scale(df5)
本文中,我们应用了 Scikit-learn 包中的 `StandardScaler` 估算器来转换数据以进行聚类或神经网络拟合。我们可以选择性地排除那些无需缩放的列,就像我们在本文中对指示列 `House_size_Medium` 和 `House_size_Small` 所做的那样。瞧!我们得到了缩放后的 DataFrame:05aa3799aed357180538e0f669c74b66.pngNLTK 的词法分析器我们注意到,DataFrame 中的 Address 字段现在几乎毫无用处。但是,如果我们可以从这些字符串中提取邮政编码或州名,它们可能对某种形式的可视化或机器学习任务有用。为此,我们可以使用 Word Tokenizer(单词标记器)来实现这一目的。NTLK 是一个流行而强大的 Python 库,用于文本挖掘和自然语言处理,并提供了一系列的标记器方法。在本文示例中,我们客户使用一个这样的标记器来拆分 Address 字段中的文本,并从中提取州名。我们注意到,州名就是地址字符串中的倒数第二个单词。因此,下面的链式管道就可以帮我们完成这项工作:
def extract_state(token):    return str(token[-2])pipeline_tokenize=pdp.TokenizeWords('Address')pipeline_state = pdp.ApplyByCols('Address',extract_state,result_columns='State')pipeline_state_extract = pipeline_tokenize + pipeline_statedf7 = pipeline_state_extract(df6
生成的 DataFrame 如下所示:5ecd6f7bff8b119074e1439a1a0e76fd.png

总结

如果我们对本文这个演示中显示的所有操作进行总结,则如下所示:44e7c930d84d2dcb251408a55f3319ef.png所有这些操作都可以在类似类型的数据集上频繁使用,并在数据集准备好进入下一级建模之前,能有一组简单的顺序代码块作为预处理操作来执行,将是非常棒的。流水线是实现统一的顺序代码块集的关键。Pandas 是机器学习和数据科学团队中用于这类数据预处理任务的最广泛使用的 Python 库,而 pdpipe 则提供了一种简单而强大的方法,可以使用 Pandas 类型操作构建管道,可以直接应用于 Pandas DataFrame 对象。你可以自己探索这个库,为你的特定数据科学任务构建更强大的管道。原文链接:https://towardsdatascience.com/https-medium-com-tirthajyoti-build-pipelines-with-pandas-using-pdpipe-cade6128cd31

【END】

热 文 推 荐 ☞你抢的不是春节红包而是云☞疫情肆虐下,程序员们都在哪里?☞云计算的 2020:云原生崛起,重新定义软件☞疫情严重,潜伏期也有传染性?科技公司在行动☞区块链 10 年低谷与荣光8bb92e1e8b2676bf36478d52ec36bb40.png用开发者的方式共克时艰!

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

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

相关文章

软件测试ipad电池,ipad2020电池有问题是真的吗

ipad2020电池有问题是真的吗&#xff1f;近期&#xff0c;ipad2020电池翻车事件传播的沸沸扬扬&#xff0c;很多人都想退货&#xff0c;也有人说是爱思助手没做适配的问题。如果你担心自己入手的ipad2020电池健康有问题&#xff0c;可以看看本站提供的介绍哦&#xff01;ipad20…

惯性制导精度是多少_航天装备的命中精度

1航天装备的精度航天装备的精度&#xff0c;即航天装备的命中精度&#xff0c;在打击固定目标时&#xff0c;航天装备命中精度用圆概率偏差(CEP)描述。设P为落点坐标落在以目标为原点R为半径的圆内的概率&#xff0c;当P50%时&#xff0c;R就是圆概率偏差CEP&#xff0c;即航天…

cass生成曲线要素文件_几种常见的CASS字体异常问题,教你如何解决

装了CASS所有字体&#xff0c;命令行还是报错&#xff1f;”“打开图形显示一堆&#xff1f;&#xff1f;&#xff1f;”“win10系统中细等线等字体显示叹号”与众多CASS初学者的交流中&#xff0c;发现他们最常提的问题之一就是 字体显示异常的问题&#xff01;SO&#xff0c;…

剑灵傲雪区最新服务器,12.8日势力优化具体内容 各大区服务器互通情况

想必各位剑灵玩家都已经知道了昨天(12.8)的维护更新是为了势力优化&#xff0c;其实也就是合服合区&#xff0c;相同服务器互通了&#xff0c;那么合服合区的具体情况是什么样的呢?一起来看看吧!剑灵迎来了三周年庆典过后的一次大规模合区&#xff0c;虽说是势力优化服务器互通…

cpu 被挂起和阻塞_迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章...

网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章&#xff0c;但是都没有达到我的心里预期&#xff0c;于是自己写一篇出来。常规的误区假设有一个展示用户详情的需求&#xff0c;分两步&#xff0c;先调用一个HTTP接口拿到详情数据&#xff0c;然后使用适合的视图展示详情…

计算机毕设-文献摘要,毕设摘要翻译,要人工翻译,不要电脑网站翻译的。

满意答案雅固jiajia2013.09.06采纳率&#xff1a;44% 等级&#xff1a;12已帮助&#xff1a;5657人Blueberry somaclone as experimental material, studied the different cutting substrates, concentration of IBA on the somaclone outside the bottle to take root and…

mongodb不等于某个值_MongoDB的安装以及基本增删改查命令

MongoDB 介绍mongodb 和大多数NoSQL 数据库(redis,memcached 等)一样&#xff0c;都是以 kv数据库(key/value) 存储数据不同的是mongodb 文档数据库,存储的是文档(Bson->json的二进制化).特点:内部执行引擎为JS解释器, 把文档存储成bson结构,在查询时,转换为JS对象,并可以通…

python创建nc文件_如何python写nc文件

今天试了一下用PyNIO写nc文件&#xff0c;难用的一腿算了&#xff0c;还是用netcdf模块写了。代码如下&#xff1a;# -*- coding: utf-8 -*-import numpy as npimport sysimport osfrom netCDF4 import Datasetdef creatspinc(value, filename):gridspi Dataset(filename, w, …

显示器接服务器后黑屏,笔记本外接显示器黑屏怎么修复_笔记本外接显示器后黑屏的处理方法...

笔记本外接显示器能够将笔记本屏幕上的内容投影到更大的显示器上&#xff0c;使用起来更加舒服。不过有的小伙伴在操作时&#xff0c;却碰到了笔记本外接显示器黑屏的问题&#xff0c;对此我们该怎么来修复呢&#xff1f;下面系统城小编就来为大家分享关于笔记本外接显示器后黑…

绿联怎么样_移动电源降价了,小米、京选、绿联充电宝怎么选,网友:都非常合适...

我是一个手机“电量恐惧症”患者&#xff0c;如果出门&#xff0c;只要手机电量不足60%就感到恐惧担心&#xff0c;如果在不可预知时间的外出时&#xff0c;移动电源成了我出门必备。市面上5000、10000、20000mAh产品琳琅满目&#xff0c;经过挑选&#xff0c;我锁定了10000mAh…

wlandns服务器未响应,新东方在线APP客户端常见问题及解决办法

苹果设备常见问题&#xff1a;1、苹果设备下载APP后&#xff0c;调整了音量&#xff0c;但仍无声音&#xff1f;静音状态下&#xff0c;课件播放就会无声音&#xff0c;同学可调整一下手机的侧拨键&#xff0c;一般可恢复正常。2、苹果设备全屏播放时不能180度旋转&#xff1f;…

react方法返回html_React全家桶之React基础(推荐新手必看)

学习目标安装create-react-app脚手架熟练React基础语法掌握JSX语法掌握setState掌握React生命周期掌握props传递参数掌握React组件通信资源reactcreate-react-app 起步上手npm i -g create-react-app 安装官方脚手架create-react-app 01_react 初始化react的api比较少,基本学习…

华为4g无线路由器虚拟服务器设置方法,华为4g2pro路由器虚拟服务器设置

华为4g2pro路由器虚拟服务器设置 内容精选换一换当前在部分区域中&#xff0c;路由表已从虚拟私有云中解耦&#xff0c;解耦后路由表拥有独立入口&#xff0c;支持路由表与子网关联功能&#xff0c;请以实际界面为准。未解耦&#xff1a;在虚拟私有云详情页的“路由表”页签&am…

echarts加载动画效果_入门ae教程:科技类的加载动画,非常酷炫的效果,附带教程...

效果图今天这个教程属于初学者的教程&#xff0c;很简单&#xff0c;但是科技类的加载动画&#xff0c;我个人觉得都是非常酷的(每天5分钟&#xff0c;充实一整天)教程1、首先打开我们的AE2、新建一个合成&#xff0c;1080*660px&#xff0c;持续时间10秒将我们的素材导入AE中&…

dell服务器T100无法进入系统,DELL服务器开机Alert!Cover was previously removed F1

服务器是戴尔的&#xff0c;dell poweredge T100。开机之后出现Alert&#xff01;Cover was previously removed.Strke F1 to retuy boot. F2 for setup utility.它的意思是“主机盖被移动了”。是机箱防盗监测机箱防盗监测器可以检测到机箱是否被打开。系统设置程序中的“Chas…

结果显示窗口如何缩小_Proe草绘时提示“截面再生失败。不合适的尺寸”如何处理?...

我们在Proe中草绘的时候一般都是先绘制出整个草绘的大致外形&#xff0c;然后再标注尺寸&#xff0c;由于起初没有把握好尺寸的大小&#xff0c;外形虽然大致相同&#xff0c;但是当前的草绘尺寸与目标草绘尺寸大小差别过大就会出现这样的一个情况&#xff1a;系统会在信息栏提…

把变量赋值给寄存器_散装 vs 批发谁效率高?变量访问被ARM架构安排的明明白白...

作为过来人&#xff0c;我发现很多程序猿新手&#xff0c;在编写代码的时候&#xff0c;特别喜欢定义很多独立的全局变量&#xff0c;而不是把这些变量封装到一个结构体中&#xff0c;主要原因是图方便&#xff0c;但是要知道&#xff0c;这其实是一个不好的习惯&#xff0c;而…

单元格自适应宽度_最详细的Excel模块Openpyxl教程(二)-单元格操作详解

在以前的推文中&#xff0c;我们介绍了操作Excel的模块openpyxl的入门知识&#xff0c;相关推文可以从本公众号的底部相关菜单获取。接下来的推文我们来学习一下openpyxl这个python模块中的其他知识&#xff0c;本次推文我们来学习一下单元格&#xff08;cell&#xff09;操作的…

动态参数 maven_使用Jenkins Git参数实现分支标签动态选择

1.1 为什么要使用GIT参数&#xff1f;我们为什么要使用 git参数呢&#xff1f; 每个项目代码库都会有不同的分支&#xff0c;(如果你没有用多分支流水线的情况下)对于普通的流水线项目我们可以 让一条流水线来支持多个分支的发布&#xff0c;其实有时候你会发现每个分支的集成步…

走线和交互式布线_画PCB时,一些非常好的布线技巧

画PCB时&#xff0c;一些非常好的布线技巧布线是PCB设计过程中技巧最细、限定最高的&#xff0c;即使布了十几年布线的工程师也往往觉得自己不会布线&#xff0c;因为看到了形形色色的问题&#xff0c;知道了这根线布了出去就会导致什么恶果&#xff0c;所以&#xff0c;就变的…