关于数据清洗:机器学习建模高级用法构建企业级AI建模流水线-⛵

作者:韩信子@ShowMeAI 机器学习实战系列: https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/article-detail/287 申明:版权所有,转载请分割平台与作者并注明出处 珍藏ShowMeAI查看更多精彩内容机器学习与流水线(pipeline)简介咱们晓得机器学习利用过程蕴含很多步骤,如图所示『规范机器学习利用流程』,有数据预处理、特色工程、模型训练、模型迭代优化、部署预估等环节。 在简略剖析与建模时,能够对每个板块进行独自的构建和利用。但在企业级利用中,咱们更心愿机器学习我的项目中的不同环节有序地构建成工作流(pipeline),这样不同流程步骤更易于了解、可重现、也能够避免数据透露等问题。 罕用的机器学习建模工具,比方 Scikit-Learn,它的高级性能就笼罩了 pipeline,蕴含转换器、模型和其余模块等。 对于 Scikit-Learn 的利用办法能够参考ShowMeAI 机器学习实战教程 中的文章 SKLearn最全利用指南,也能够返回 Scikit-Learn 速查表 获取高密度的知识点清单。然而,SKLearn 的繁难用法下,如果咱们把内部工具库,比方解决数据样本不平衡的 imblearn合并到 pipeline 中,却可能呈现不兼容问题,比方有如下报错: TypeError: All intermediate steps should be transformers and implement fit and transform or be the string ‘passthrough’ ‘SMOTE()’ (type <class ‘imblearn.over_sampling._smote.base.SMOTE’>) doesn’t本文以『客户散失』为例,解说如何构建 SKLearn 流水线,具体地说蕴含: 构建一个流水线(pipeline) ,会笼罩到 Scikit-Learn、 imblearn 和 feature-engine 工具的利用在编码步骤(例如 one-hot 编码)之后提取特色构建特色重要度图最终解决方案如下图所示:在一个管道中组合来自不同包的多个模块。 咱们上面的计划流程,笼罩了上述的不同环节: 步骤 ①:数据预处理:数据荡涤步骤 ②:特色工程:数值型和类别型特色解决步骤 ③:样本解决:类别非均衡解决步骤 ④:逻辑回归、xgboost、随机森林 及 投票集成步骤 ⑤:超参数调优与特色重要度剖析 ...

August 9, 2022 · 4 min · jiezi

关于数据清洗:思迈特软件Smartbi数据清洗我们到底要洗掉什么

数据荡涤对数据进行从新审查和校验的过程,目标在于删除反复信息、纠正存在的谬误,并提供数据一致性,是企业在做数据分析时必不可少的步骤。 那么,数据荡涤咱们须要“洗”的数据有哪些呢? 1、谬误数据 这一类谬误产生的起因是业务零碎不够健全,在接管输出后没有进行判断间接写入后盾数据库造成的,比方数值数据输成全角数字字符、字符串数据前面有一个回车操作、日期格局不正确、日期越界等。这一类数据也要分类,对于相似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的形式找进去,而后要求客户在业务零碎修改之后抽取。日期格局不正确的或者是日期越界的这一类谬误会导致ETL运行失败,这一类谬误须要去业务零碎数据库用SQL的形式挑出来,交给业务主管部门要求限期修改,修改之后再抽取。 2、完好数据 这一类数据次要是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务零碎中主表与明细表不能匹配等。对于这一类数据过滤出来,按缺失的内容别离写入不同Excel文件向客户提交,要求在规定的工夫内补全。补全后才写入数据仓库。 3、反复数据 数据荡涤是一个重复的过程,不可能在几天内实现,只有一直的发现问题,解决问题。对于是否过滤,是否修改个别要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期能够每天向业务单位发送过滤数据的邮件,促使他们尽快地修改谬误,同时也能够做为未来验证数据的根据。数据荡涤须要留神的是不要将有用的数据过滤掉,对于每个过滤规定认真进行验证,并要用户确认。 对于呈现的这种状况,数据荡涤罕用办法有以下4个: 1、抛弃 这种办法简单明了,间接删除带有缺失值的行记录或者列字段,缩小趋势数据记录对总体数据的影响。但失落意味着会消减数据特色,以下场景都不宜采纳抛弃的办法:数据集总体存在大量的数据记录不残缺状况;带有缺失值的数据记录大量存在着显著的数据分布规定或特色。 2、补全 绝对于抛弃而言,补全是更加罕用的缺失值解决形式,通过肯定的办法将缺失的数据补上,从而造成残缺的数据记录对于后续的数据处理、剖析和建模直观重要。 3、不解决 在数据预处理阶段,对于具备缺失值的数据记录不做任何解决,也是一种思路。这种思路次要看前期的数据分析和建模利用,很多模型对于缺失值有容忍度或灵便的解决办法,因而在预处理阶段能够不做解决。 4、真值转换法 抵赖缺失值的存在,并且把数据缺失也作为数据分布法则的一部分,这将变量的理论值和缺失都作为输出维度参加后续数据处理和模型计算。然而变量的理论值能够作为变量值参加模型计算,而缺失值通常无奈参加运算,因而须要对缺失值进行真值转换。 以上就是思迈特软件明天分享的数据荡涤相干信息。感谢您的浏览,更多常识,请持续关注咱们,下期再见!思迈特软件Smartbi是国家认定的“高新技术企业”,专一于商业智能(BI)与大数据分析软件产品和服务。咱们在BI畛域具备15年以上产品研发教训,提供残缺的大数据分析软件产品、解决方案、以及配套的征询、施行、培训及保护服务。

June 2, 2021 · 1 min · jiezi

利用 Pandas 将数据集中的某列文本拆分为多行

背景手头的项目要求用 Tableau 创建一个 story,数据集是摩拜上海城区用户使用数据。其中有一个维度的数据处理起来有点棘手。数据格式注意 track 这个维度的数据,它表示的是在订单时间内的行车轨迹,里面包含了大量坐标点。按照 tidydata 的要求:Each variable forms a column.Each observation forms a row.Each type of observational unit forms a table.我需要将 track 的坐标拆分为多行。神来之笔Google 了问题的解决方式,代码是mobike.drop(“track”,axis = 1).join(mobike[“track”].str.split("#",expand = True).stack().reset_index(level = 1,drop = True).rename(“track”))工作原理解决问题不能光知其然,不知其所以然。所以我将这行代码逐语句进行了拆分,一探代码内部的工作原理。最外层代码是:mobike.join({dataset})这里调用了 dataframe 的 join 方法,很基础。{dataset} 这部分做的工作比较多,首先是 split 方法。Python 的 split 方法可以将字符串按照指定的字符进行分割,这个例子中指定的字符是「#」。如果不加参数 expand = True,split()会返回拆分后的字符串数组。mobike[“track”].str.split("#")# [“121.372,31.118”,“121.372,31.119”,“121.373,31.117”,“1…]# [“121.419,31.200”,“121.419,31.201”,“121.420,31.199”,“1…]# …加了 expand = True 会将数组拆开,数组中的每一个元素都会单独保存。mobike[“track”].str.split(”#",expand = True)# “121.372,31.118” “121.372,31.119” “121.373,31.117” “1… # “121.419,31.200” “121.419,31.201” “121.420,31.199” “1…# …到这里相当于将列中所有文本拆成了一个巨大的表,表中每个单元格有一个值。有些行拆分后的元素比较少,没有值可以填充的单元格补充 Nonestack() 会把整个表逐行堆叠成一列。这样就成功的将一列中的所有文本拆分成了多行,而且它是一个 dataframe 。不过到这里还没有结束,我们还需要将拆出来的这个 dataframe 与原数据集合并。注意到拆分出来的 dataframe 是多重索引的,需要用 reset_index() 将多重索引重置掉。在 split() 的时候,我们引入了超级多的 None。这时候就可以通过 reset_index(…, drop =True)将值为 None 的行删除。与原数据集通过 join() 合并的时候,A.join(B),A、B两个 DataFrame 都需要有名字,因此需要 rename(“track”)。至此,我们的任务算做完了。彩蛋我在列拆分为多行的基础上,还将 track 拆分成了两个变量——track_x,track_y。这里用到了 pandas 的函数映射进行数据转换。mobike[“track” = mobike[“track”].split(”,")mobike[“track_x”] = mobike[“track”].map(lambda x:x[0])mobike[“track_y”] = mobike[“track”].map(lambda x:x[1])通过 map 进行列的扩展速度非常非常快。本文用到的摩拜数据及演示 notebook 均可在 DataWranglingMethod下载。 ...

February 12, 2019 · 1 min · jiezi

机器学习-数据清洗

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由brzhang发表数据清洗首先,为何需要对数据进行清洗数据清洗的工作绝壁是非常枯燥的,做数据研究的的人绝对无法避开这个环节,其根本原因是因为我们从各种渠道拿到的数据可能会出现:1、不合理的数据,你比如,样本中有些人的年龄超过了120岁,楼层的高度达到了1000层,以及其他的一些非常不合理的场景。2、错误的类型,你比如,样例中,几乎所有的数据都是整形,然而,有一些是字符串类型,如果不进行处理,将这些数据直接喂给算法,一般情况下是要崩溃的。3、计算机对于处理字符串类型比较吃力,有时候,需要我们将他转化为数字类型,这样就设计到一个映射关系,比如,样例性别,【男,女】,我们可以转化为1,2,房屋的类型【单间,一房一厅,二房一厅,三房一厅,商铺】可以对应的枚举出来,比如我在处理房屋朝向上的示例#提取房屋的朝向def parse_orientation(row): if ‘朝西南’ in row: return 1 elif ‘朝东北’ in row: return 2 elif ‘朝东’ in row: return 3 elif ‘朝南’ in row: return 4 elif ‘朝西北’ in row: return 5 elif ‘朝北’ in row: return 6 elif ‘朝东南’ in row: return 7 elif ‘朝南北’ in row: return 8 elif ‘朝西’ in row: return 9 else: return 10等等等等,我想说的是绝对还有很多你意想不到的场景,需要你耐心的打磨数据,将搜集到的原始数据,清洗成为可用的数据。数据清洗需要掌握哪些黑科技通常我们拿到的数据数据都可以简化为表格模型,无用你是xsl也好,csv亦或json数组也好,都可以利用pandas来读取,读取之后,接下来的工作基本上就是借助在pandas的一些api来做数据清洗工作了,如下,我读取了一份房价信息的数据表,这份数据当然是我自己根据上一篇文章,利用scrapy做了一个爬虫爬取的咯。jupyter笔记为了让我们能够更好的玩数据清洗,我也不吝啬的贡献出了一份非常全面的pandas的操作Cheatsheet一份,以及后面你一定会用到一个万能的CheatSheet。来来,简单的了解一下pandas的一些常用的api了,举例就用:示例数据一行1、取子集常用操作取子集其中,loc是支持按照列名字符串的方式来取子集,iloc支持的是使用数组索引(从0开始)的方式来取子集,通常,逗号前面是行相关的一些条件限制,逗号右边则是列相关的限制。比如,我取得我就取前两列2、处理空白数据行处理空白数据这种就很简单愉快了,一个api就可以删除或者填充有空白数据的样本了。这个就不演示了,因为我是爬虫爬取数据,所以在爬取的过程中,我已经对数据进行了一些基础的处理,程序控制不可能出现空白数据了,所以,我也是建议,自己写爬虫去获取数据,这些减轻数据清洗环节的压力。3、apply系列apply其实有比较多兄弟,比如applymap,map,他们的能力各有不同,总的来说就是apply()是一种让函数作用于列或者行操作,applymap()是一种让函数作用于DataFrame每一个元素的操作,而map是一种让函数作用于Series每一个元素的操作,如下所示,我这里对ege列进行处理了一了,将数字和文本归一化为数字。apply示例实际上,这个操作完全可用map来做:df[’ege’] = df[’ege’].map(parse_house_age)df.head(5)结果完全一样,因为我们只取了一列。数据清洗比较高级的方式,使用各种图表1、使用散点图房屋总面积对应总价图2、房价热力值图:房价区间热力图图描述了房间分布区间,可以清洗看出一些问题。3、频率直方图帮助我们迅速找到一些特例独行的猪,因为他出现的次数少嘛,不得不让人怀疑这种数据的真实性。利用直方图快速找出毛刺点ok,总的来说,这个过程需要开动自己的脑经,把你拿到的原始数据,慢慢慢慢的,变成可以给你下面算法需要的数据。相关阅读【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识此文已由作者授权腾讯云+社区发布,更多原文请点击搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

November 23, 2018 · 1 min · jiezi