百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

用于数据挖掘的化整为零策略(Split-Apply-Combine)

off999 2024-10-13 04:14 24 浏览 0 评论

在典型的探索性数据分析中,我们通过在某个粒度级别上划分数据集,然后在该粒度上聚合数据,以了解集中趋势,从而解决这个问题。同样,Hadley Wickham撰写的著名(必读)论文将Split-Apply-Combine策略概述为数据分析中最常见的策略之一。无论是营销细分还是任何行为研究,我们在分析过程中都会使用这种技术。

本文试图说明Split-Apply-Combine策略,其中我们将一个大问题分解为小的可管理部分(Split),独立操作每个部分(Apply)然后将所有部分重新组合在一起(Combine)。通过在SQL和Python中使用GroupBy函数,在Tableau中使用LOD,以及在R中使用plyr函数,许多现有工具都可以使用Split-Apply-Combine。在本文中,我们将不仅仅讨论这种策略的实现,还将看到这种策略在机器学习特征工程中的一些相关应用。

在Python中,我们使用GroupBy执行此操作,它涉及Split-Apply-Combine策略的三个步骤中的一个或多个步骤。让我们从定义以下三个步骤开始:

  1. Split:根据某些条件将数据拆分为组,从而创建GroupBy对象。(我们可以使用列或列的组合将数据拆分成组)
  2. Apply:分别对每个组应用一个函数。(在此步骤中聚合、transform或过滤数据)
  3. Combine:将结果组合成数据结构(Pandas系列,Pandas DataFrame)

示例数据

为了更深入,让我们创建一个虚拟数据作为示例。

以具有键值对的字典形式创建示例数据集。

为了总结整个数据,我们将使用seaborn库来创建可视化。

在创建和汇总数据之后,作为第一步,我们将继续进行Split-Apply-Combine的第一部分。

Split :

在此步骤中,我们将通过基于“颜色”列进行分组,从dataframe “data_sales”创建组。

一旦我们在dataframe上应用groupby()函数,它就会创建groupby对象。我们可以将这个对象看作是每个组的一个单独的dataframe。每个组都是基于分组列中的类别创建的(在我们的例子中,从dataframe的“colour”列中创建4个组,分别是 ‘Black’, ‘Blue’, ‘Red’, ’Yellow’ )。

GroupBy对象以键值对的形式存储各个组的数据,如dictionary中所示。要知道组名,我们可以使用attribute ' keys '或使用GroupBy对象的' groups '属性。

为了进一步明确组及其内容,我们可以运行循环并打印键值对。

通过上面的例子,我希望我们已经对GroupBy对象以及它的一些属性和方法进行了一些清晰的说明。有了这个,现在让我们继续前进到下一个阶段,即APPLY。

Apply:

Apply步骤可以通过三种方式执行:聚合,transform和过滤。

聚合:

在由多列创建的组中聚合:

通过选择多列来创建组,我们可以增加聚合的粒度。例如,在Split时,我们根据“colour”列创建了4个组,其中有4个颜色类别,因此我们有4个组。现在,如果包含'product'列,有2个类别('type A'和'type B'),以及'colour'列,那么我们将有8个类别(例如'type A-Blue', 'A-Black'..总共(4 x 2)。从下面提到的代码中可以更清楚地看出这一点。

上面的代码使用sum(),因此我们得到销售和事务的总和到由'product'和'color'列组合定义的粒度级别。

需要注意的是,我们使用了参数'as_index = True',因此我们可以看到'product'和'color'列作为索引。相反,如果我们采用与False相同的参数,那么在我们的输出中,我们不会将'product'和'color'列作为索引而是作为列。

在上面的例子中,我们只对所有列使用了单一类型的聚合函数; 但是,如果我们想要聚合具有不同聚合函数的不同列,那么我们可以使用聚合函数的自定义聚合函数。为此,我们可以将字典传递给聚合函数,将列名称称为“键”,将函数名称称为“值”。有趣的是,我们也可以将多个聚合函数传递给列。让我们看一下下面的示例代码,以便更清晰。

真实世界的聚合函数应用:

在这个例子中,我们试图找到“哪一种产品及其颜色组合的变异最小”。我们已经这样做了,根据乘积和颜色列对dataframe进行分组,然后计算每组的变异系数。下面的Python代码将使它更清晰。

transform:

变换函数在机器学习的特征工程中具有很高的潜在效用。它是与GroupBy对象一起使用的函数/方法。如果有人使用了Tableau LOD(固定)函数,那么他们将更容易理解变换函数。下图说明了使用变换函数的Split-Apply-Combine。

聚合过程中我们看到的形状输入dataframe得到减少(减少)的行数;但是,需要注意的是,在使用transform方法时,产生的输出dataframe在输出中的行数与在输入中的行数相同。输出保留了dataframe的长度,它分两个阶段进行。首先,在Apply阶段,应用了变换函数(sum();如图所示),并且在此阶段减少了行数。其次,在combine阶段,将Apply阶段的结果广播到原始粒度级别,从而产生具有与输入阶段中的dataframe的长度相同的长度的dataframe。

为了更清楚,我们可以使用我们在本文中使用的相同虚构数据集的示例代码。

从现在开始我们对转换函数有了一些了解,现在让我们谈谈它在机器学习数据清理和机器学习特征工程中的实用性。

我们可以定义一个自定义函数并使用它来转换列。例如,我们可以通过变换函数使用基于组类别的列标准化的常见示例。需要注意的是,此标准化不是直接应用于整个列,而是基于组应用于列(平均值是组平均值,std dev是组的std dev)。下面的例子将更多地阐述这个概念。

在上面的代码中,我们使用了lambda函数,在lambda函数中,我们在dataframe的每一行使用了两个方法mean和standard deviation(std)。这里可能会产生一种混淆,即“当它意图进行分组计算时,变换函数如何进行行计算?”。看下Python的示例代码。

我希望从上面的代码中可以清楚地看到转换操作。我们现在应该转到Apply部分的Filter操作。

过滤:

从名称本身可以看出,它用于从dataframe中过滤组。下面提到的Python代码说明了操作。

过滤很容易理解操作,SPLIT-APPLY-COMBINE的 APPLY部分即将结束。现在,我们将转到最后一部分,即COMBINE。

COMBINE:

在上述讨论中,联合部分已经涵盖; 但是,有一点很重要,我想分享一下。

聚合并不总是导致dataframe的创建。它主要取决于参数'as_index',如果此参数的值为'True',则它取决于我们应用聚合函数的列数。

我希望这些代码和相关讨论不仅可以帮助读者更好地直观地理解Split-Apply-Combine策略,还可以帮助读者在数据挖掘中应用这种技术。

相关推荐

第九章:Python文件操作与输入输出

9.1文件的基本操作9.1.1打开文件理论知识:在Python中,使用open()函数来打开文件。open()函数接受两个主要参数:文件名和打开模式。打开模式决定了文件如何被使用,常见的模式有:&...

Python的文件处理

一、文件处理的流程1.打开文件,得到文件句柄并赋值给一个变量2.通过句柄对文件进行操作3.关闭文件示例:d=open('abc')data1=d.read()pri...

Python处理文本的25个经典操作

Python处理文本的优势主要体现在其简洁性、功能强大和灵活性。具体来说,Python提供了丰富的库和工具,使得对文件的读写、处理变得轻而易举。简洁的文件操作接口Python通过内置的open()函数...

Python学不会来打我(84)python复制文件操作总结

上一篇文章我们分享了python读写文件的操作,主要用到了open()、read()、write()等方法。这一次是在文件读写的基础之上,我们分享文件的复制。#python##python自学##...

python 文件操作

1.检查目录/文件使用exists()方法来检查是否存在特定路径。如果存在,返回True;如果不存在,则返回False。此功能在os和pathlib模块中均可用,各自的用法如下。#os模块中e...

《文件操作(读写文件)》

一、文件操作基础1.open()函数核心语法file=open("filename.txt",mode="r",encoding="utf-8"...

栋察宇宙(二十一):Python 文件操作全解析

分享乐趣,传播快乐,增长见识,留下美好。亲爱的您,这里是LearingYard学苑!今天小编为大家带来“Python文件操作全解析”欢迎您的访问!Sharethefun,spreadthe...

值得学习练手的70个Python项目(附代码),太实用了

Python丰富的开发生态是它的一大优势,各种第三方库、框架和代码,都是前人造好的“轮子”,能够完成很多操作,让你的开发事半功倍。下面就给大家介绍70个通过Python构建的项目,以此来学习Pytho...

python图形化编程:猜数字的游戏

importrandomnum=random.randint(1,500)running=Truetimes=0##总的次数fromtkinterimport*##导入所有tki...

一文讲清Python Flask的Web编程知识

刚入坑Python做Web开发的新手,还在被配置臃肿、启动繁琐折磨?Flask这轻量级框架最近又火出圈,凭5行代码启动Web服务的极致简洁,让90后程序员小张直呼真香——毕竟他刚用这招把部署时间从半小...

用python 编写一个hello,world

第一种:交互式运行一个hello,world程序:这是写python的第一步,也是学习各类语言的第一步,就是用这种语言写一个hello,world程序.第一步,打开命令行窗口,输入python,第二步...

python编程:如何使用python代码绘制出哪些常见的机器学习图像?

专栏推荐绘图的变量单变量查看单变量最方便的无疑是displot()函数,默认绘制一个直方图,并你核密度估计(KDE)sns.set(color_codes=True)np.random.seed(su...

如何编写快速且更惯用的 Python 代码

Python因其可读性而受到称赞。这使它成为一种很好的第一语言,也是脚本和原型设计的流行选择。在这篇文章中,我们将研究一些可以使您的Python代码更具可读性和惯用性的技术。我不仅仅是pyt...

Python函数式编程的详细分析(代码示例)

本篇文章给大家带来的内容是关于Python函数式编程的详细分析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。FunctionalProgramming,函数式编程。Py...

编程小白学做题:Python 的经典编程题及详解,附代码和注释(七)

适合Python3+的6道编程练习题(附详解)1.检查字符串是否以指定子串开头题目描述:判断字符串是否以给定子串开头(如"helloworld"以"hello&...

取消回复欢迎 发表评论: