动机
Pivoting和Grouping操作是每个典型的表格数据分析过程中的基本操作。pivot_table()
和groupby()
方法是Pandas中最常用的方法之一。
Grouping主要用于理解分类数据,它可以让你计算数据中各个组的统计信息。
Grouping的表示(图片来自作者)
另一方面,Pivot tables允许你对数据进行交叉制表分析。
Pivot Table的表示(图片来自作者)
首先,我很欣赏Pivot tables的重要性。但是,我发现在Pandas中,进行数据透视(具体来说)有些令人生畏。我相信你们中的许多人会有同感。
对于从提供流畅且直观的UI来生成Pivot tables的Excel转换到Pandas的人来说,这并不像他们预期的那样顺利。
此外,在许多数据分析任务中,通常不仅仅止步于对数据进行透视或分组。许多人还希望创建图表/图形以使它们更易于理解,这需要编写更多的代码。
如果我们在Pandas DataFrame上有一个适用于初学者且优雅的UI来执行这些操作,就像我们在Excel中一样,那岂不是很好?
介绍一下PivotTableJS 🚀!
PivotTableJS
正如其名称所示,PivotTableJS是一个用于创建透视表(和分组表)的Javascript库。
它的终极卖点是,它可以在Jupyter Notebook中使用(阅读更多),而无需编写任何代码。因此,你可以在需要的任何地方编写你的代码,修改数据并立即将其传递给PivotTableJS。
更重要的是,它的拖放功能和直观布局使得执行聚合、创建透视表和绘制交互式图表变得轻松快捷。
安装PivotTableJS
要使用pip
安装PivotTableJS,请在终端中输入以下命令。
或者,你也可以使用conda
:
入门
加载数据集
当然,第一步是使用Pandas加载数据集。
为了演示目的,我将使用一个dummy dataset,其中包含我使用Faker创建的假员工信息。
调用PivotUI
在将数据集作为Pandas DataFrame(df
)加载后,从pivottablejs
库导入pivot_ui
方法。
之后,将在Jupyter的输出面板中显示以下窗口。
列显示在界面的最左侧面板中。默认情况下,它在计算区域中显示记录数(1,000
这里)。
pivot_ui()方法的输出(图片来自作者)
你可以将列拖到两个空框中,以执行groupby
和pivot
操作,并从aggregations
下拉菜单中选择适当的聚合。
pivot_ui()方法的输出(图片来自作者)
最后,除了聚合下拉菜单之外,你还可以看到另一个下拉菜单(当前显示为Table
)。这用于选择输出格式:
更改输出格式(作者提供的Gif)
接下来,让我们了解一下如何使用此工具执行groupby
和pivot
。
使用PivotTableJS进行GroupBy
要对单个(或多个)列执行Grouping,请将它们拖到下面的聚合区域。
例如,考虑我们要在Employee_Status
列上进行分组。如下所示:
在PivotTableJS中进行Grouping(作者提供的Gif)
就是这么简单。
默认情况下,这里的默认聚合是组的大小(Count
)。你可以更改这个并使用所选聚合方法对任何列执行它。假设我们想要找到每个Employee_Status
列中每个值的平均Employee_Rating
。如下所示:
更改PivotTableJS中分组中的聚合(作者的Gif)
事情并不止于此。你还可以更改输出格式。
在上面的演示中,我们想要将按Employee_Status
列分组的平均Employee_Rating
显示为条形图。可以按以下方式完成:
在PivotTableJS中绘制分组结果(作者的Gif)
很酷,是吗?
想象一下,如果用代码完成相同的事情需要多长时间。这是快速而轻松的。
使用PivotTableJS制作数据透视表
与GroupBy类似,使用PivotTableJS生成数据透视表也相当简单。
只需要一个额外的步骤。在groupby示例中,我们只将列拖动到一个空面板中。
然而,由于数据透视表的行和列都来自表中的值,因此我们还应该拖动一个标题行。
例如,假设你想要显示Employee_Status
和Employee_City
列的数据透视表。可以按以下方式完成:
在PivotTableJS中创建数据透视表(作者的Gif)
你可能已经注意到,这次我们还将一列拖到了上面的面板中,这样就创建了一个数据透视表而不是一个分组。
其余的事情与上面讨论的部分相同。
你可以从“聚合”下拉列表中更改聚合,并选择另一列。
此外,你还可以以图表形式表示数据,以便更好地理解。
结论
通过本文,我们来到了结论。希望你学到了一些新知识。
我相信这个令人难以置信的工具将在执行一些典型的数据分析任务时节省大量时间。
感谢阅读!
评论(0)