提交 62237c96 编写于 作者: W wizardforcel

2020-07-10 20:19:55

上级 d7690d13
......@@ -22,7 +22,7 @@ Python 之所以成为数据科学首选语言的原因之一是,它是一种
不幸的是,Stack Overflow 发挥了其巨大的作用,使错误信息永久存在,并且是大量写得不好的 Pandas 的来源。 这实际上不是 Stack Overflow 或其社区的错。 Pandas 是一个开放源代码项目,即使在最近,它也进行了许多重大更改,因为它在 2018 年已接近成立十年。然而,开放源代码的优点在于,新功能一直在不断增加。
本书中的食谱是根据我作为数据科学家工作,建立和托管数周的数据探索训练营,回答关于 Stack Overflow 的数百个问题以及为我的本地聚会小组创建教程而制定的。 这些食谱不仅为常见数据问题提供惯用的解决方案,而且还带您穿越许多真实世界的数据集,在这些数据集中经常发现令人惊讶的见解。 这些食谱还将帮助您掌握 Pandas 库,从而极大地提高生产力。 仅对 Pandas 有粗略了解的人与对 Pandas 有所了解的人之间存在巨大差异。 有很多有趣而有趣的技巧来解决您的数据问题,这些技巧只有在您真正了解库内外的情况下才会显现出来。 就个人而言,我发现 Pandas 是一种用于分析数据的令人愉悦且有趣的工具,希望您和我一起享受旅途。 如有疑问,请随时在 Twitter 上与我联系:`@TedPetrou`
本书中的食谱是根据我作为数据科学家工作,建立和托管数周的数据探索训练营,回答关于 Stack Overflow 的数百个问题以及为我的本地聚会小组创建教程而制定的。 这些食谱不仅为常见数据问题提供惯用的解决方案,而且还带您穿越许多真实世界的数据集,在这些数据集中经常发现令人惊讶的见解。 这些食谱还将帮助您掌握 Pandas 库,从而极大地提高生产力。 仅对 Pandas 有粗略了解的人与对 Pandas 有所了解的人之间存在巨大差异。 有很多有趣而有趣的技巧来解决您的数据问题,这些技巧只有在您真正了解库内外的情况下才会显现出来。 就个人而言,我发现 Pandas 是一种用于分析数据的令人愉悦且有趣的工具,希望您和我一起享受旅途。 如有疑问,请随时在 Twitter 上与我联系:`@TedPetrou`
# 本书涵盖的内容
......@@ -95,7 +95,7 @@ Anaconda Navigator 是基于 GUI 的工具,可让您轻松查找 Anaconda 提
本书包含近 100 种食谱,从非常简单到高级。 所有食谱都力求以清晰,简洁,现代的惯用 Pandas 代码编写。 *的工作原理...* 部分包含对食谱每个步骤的复杂性的非常详细的描述。 通常,在*中还有更多...* 部分,您将获得似乎是一个全新的食谱。 这本书密密麻麻地包装着大量的 Pandas 代码。
概括地说,与后五章相比,前六章中的食谱更简单,更侧重于 Pandas 的基本和基本操作,后五章中的重点是更高级的操作并且更受项目驱动。 由于复杂性范围很广,因此这本书对于新手和日常用户都非常有用。 根据我的经验,即使定期使用大 Pandas 的人也不会在没有惯用的大 Pandas 密码的情况下掌握它。 Pandas 提供的宽度在一定程度上促进了这一点。 几乎总是有多种方法可以完成相同的操作,这些方法可以使用户以非常低效的方式获得所需的结果。 在同一问题的两组 Pandas 解决方案之间看到一个数量级或更多个性能差异并不少见。
概括地说,与后五章相比,前六章中的食谱更简单,更侧重于 Pandas 的基本和基本操作,后五章中的重点是更高级的操作并且更受项目驱动。 由于复杂性范围很广,因此这本书对于新手和日常用户都非常有用。 根据我的经验,即使定期使用 Pandas 的人也不会在没有惯用的 Pandas 密码的情况下掌握它。 Pandas 提供的宽度在一定程度上促进了这一点。 几乎总是有多种方法可以完成相同的操作,这些方法可以使用户以非常低效的方式获得所需的结果。 在同一问题的两组 Pandas 解决方案之间看到一个数量级或更多个性能差异并不少见。
本书唯一真正的先决条件是 Python 的基础知识。 假定读者熟悉 Python 中所有常见的内置数据容器,例如列表,集合,字典和元组。
......@@ -112,7 +112,7 @@ Anaconda Navigator 是基于 GUI 的工具,可让您轻松查找 Anaconda 提
>>> max_dept_salary = employee.groupby('DEPARTMENT')['BASE_SALARY'].max()
```
在笔记本中输出时,pandas Series 和 DataFrames 的样式不同。 Pandas 系列没有特殊的格式,只是原始文本。 它们将直接出现在代码块本身中创建它们的代码行的前面,如下所示:
在笔记本中输出时,pandas Series 和 DataFrames 的样式不同。 Pandas 系列没有特殊的格式,只是原始文本。 它们将直接出现在代码块本身中创建它们的代码行的前面,如下所示:
```py
>>> max_dept_salary.head()
......
......@@ -23,7 +23,7 @@ Series 和数据帧的 Index 组件是将 Pandas 与其他大多数数据分析
# 剖析数据帧的结构
在深入研究 Pandas 之前,值得了解数据帧的组件。 在视觉上,Pandas DataFrame 的输出显示(在 Jupyter Notebook 中)似乎只不过是由行和列组成的普通数据表。 隐藏在表面下方的是三个组成部分-您必须具备的**索引****列****数据**(也称为**值**)。 请注意,以便最大化数据帧的全部潜力。
在深入研究 Pandas 之前,值得了解数据帧的组件。 在视觉上,Pandas DataFrame 的输出显示(在 Jupyter Notebook 中)似乎只不过是由行和列组成的普通数据表。 隐藏在表面下方的是三个组成部分-您必须具备的**索引****列****数据**(也称为**值**)。 请注意,以便最大化数据帧的全部潜力。
# 做好准备
......@@ -958,7 +958,7 @@ DataFrame 上最基本,最常见的操作之一是重命名行或列的名称
movie['director_facebook_likes'])
```
3. 从本章的*调用系列方法*配方中,我们知道此数据集包含缺失值。 当像上一步那样将数字列彼此相加时,pandas 将缺失值默认为零。 但是,如果缺少特定行的所有值,则 Pandas 也会将总数也保留为丢失。 让我们检查新列中是否缺少值,并用 0 填充它们:
3. 从本章的*调用系列方法*配方中,我们知道此数据集包含缺失值。 当像上一步那样将数字列彼此相加时,pandas 将缺失值默认为零。 但是,如果缺少特定行的所有值,则 Pandas 也会将总数也保留为丢失。 让我们检查新列中是否缺少值,并用 0 填充它们:
```py
>>> movie['actor_director_facebook_likes'].isnull().sum()
......
......@@ -360,7 +360,7 @@ Length: 16, dtype: float64
In this context, silently means that no error was raised and no warning thrown. This is a bit dangerous and requires users to have a good familiarity with pandas.
数字列也缺少值,但返回了结果。 默认情况下,pandas 通过跳过数值列来处理缺失值。 通过将`skipna`参数设置为`False`可以更改此行为。 如果存在至少一个缺失值,这将导致所有这些聚合方法的 Pandas 返回`NaN`
数字列也缺少值,但返回了结果。 默认情况下,pandas 通过跳过数值列来处理缺失值。 通过将`skipna`参数设置为`False`可以更改此行为。 如果存在至少一个缺失值,这将导致所有这些聚合方法的 Pandas 返回`NaN`
`describe`方法可一次显示所有主要摘要,并且可以通过将 0 到 1 之间的数字列表传递给`percentiles`参数来扩展其摘要以包含更多分位数。 默认情况下,仅在数字列上显示信息。 有关`describe`方法的更多信息,请参见*开发数据分析例程*配方。
......@@ -450,7 +450,7 @@ dtype: int64
Series([], dtype: float64)
```
为了迫使 Pandas 为每一列返回值,我们必须填写缺失值。 在这里,我们选择一个空字符串:
为了迫使 Pandas 为每一列返回值,我们必须填写缺失值。 在这里,我们选择一个空字符串:
```py
>>> movie.select_dtypes(['object']).fillna('').min()
......@@ -793,7 +793,7 @@ UGDS_UNKN 0.01430
# How it works...
操作的方向是 Pandas 中比较混乱的方面之一,互联网上到处都有讨论它的解释的线程。 许多新手 Pandas 用户很难记住`axis`参数的含义。 幸运的是,在 Pandas 中,一项操作可以完成两个潜在的方向。 一种可能的方法是尝试双向尝试直到获得所需结果的简单蛮力解决方案。 我记得`axis`参数的含义,认为 1 看起来像一列,对`axis=1`的任何操作都会返回一个新的数据列(与该列具有相同数量的项)。
操作的方向是 Pandas 中比较混乱的方面之一,互联网上到处都有讨论它的解释的线程。 许多新手 Pandas 用户很难记住`axis`参数的含义。 幸运的是,在 Pandas 中,一项操作可以完成两个潜在的方向。 一种可能的方法是尝试双向尝试直到获得所需结果的简单蛮力解决方案。 我记得`axis`参数的含义,认为 1 看起来像一列,对`axis=1`的任何操作都会返回一个新的数据列(与该列具有相同数量的项)。
这在第 3 步中得到确认,在第 3 步中,结果(没有`head`方法)将返回新的数据列,并且可以根据需要轻松地将其作为列附加到数据帧中。 `axis`等于 1 / index 的其他步骤将返回新的数据行。
......
......@@ -121,7 +121,7 @@ Pandas 并未将数据大致分为连续数据或分类数据,但对许多不
# Getting ready
此配方将大学数据集中的对象列之一的数据类型更改为特殊的 Pandas 分类数据类型,以大大减少其内存使用量。
此配方将大学数据集中的对象列之一的数据类型更改为特殊的 Pandas 分类数据类型,以大大减少其内存使用量。
# How to do it...
......@@ -489,7 +489,7 @@ The equivalence of a string and the outright pandas or NumPy object occurs elsew
# There's more...
如果查看`nlargest`文档,则会看到`keep` 参数具有三个可能的值,`first``last``False`。 据我对其他 Pandas 方法的了解,`keep=False`应该允许所有纽带保留在结果中。 不幸的是,Pandas 在尝试执行此操作时会引发错误。 我在 GitHub 上与 pandas 开发团队创建了一个问题,以进行此增强( [http://bit.ly/2fGrCMa](https://github.com/pandas-dev/pandas/issues/16818) )。
如果查看`nlargest`文档,则会看到`keep` 参数具有三个可能的值,`first``last``False`。 据我对其他 Pandas 方法的了解,`keep=False`应该允许所有纽带保留在结果中。 不幸的是,Pandas 在尝试执行此操作时会引发错误。 我在 GitHub 上与 pandas 开发团队创建了一个问题,以进行此增强( [http://bit.ly/2fGrCMa](https://github.com/pandas-dev/pandas/issues/16818) )。
# 计算追踪止损单价格
......
......@@ -686,7 +686,7 @@ Name: BASE_SALARY, dtype: int64
# There's more...
对于许多操作,Pandas 有多种方法来做同一件事。 在前面的配方中,薪水标准使用两个单独的布尔表达式。 与 SQL 相似,序列具有`between`方法,其工资标准等效编写如下:
对于许多操作,Pandas 有多种方法来做同一件事。 在前面的配方中,薪水标准使用两个单独的布尔表达式。 与 SQL 相似,序列具有`between`方法,其工资标准等效编写如下:
```py
>>> criteria_sal = employee.BASE_SALARY.between(80000, 120000)
......
......@@ -113,7 +113,7 @@ used for its implementation, and object access becomes much slower.
# 生产笛卡尔积
每当两个序列或数据帧与另一个序列或数据帧一起操作时,每个对象的索引(行索引和列索引)都首先对齐,然后再开始任何操作。 这种索引对齐方式是无声的,对于那些刚接触 Pandas 的人来说可能是非常令人惊讶的。 除非索引相同,否则这种对齐方式总是在索引之间创建笛卡尔乘积。
每当两个序列或数据帧与另一个序列或数据帧一起操作时,每个对象的索引(行索引和列索引)都首先对齐,然后再开始任何操作。 这种索引对齐方式是无声的,对于那些刚接触 Pandas 的人来说可能是非常令人惊讶的。 除非索引相同,否则这种对齐方式总是在索引之间创建笛卡尔乘积。
A Cartesian product is a mathematical term that usually appears in set theory. A Cartesian product between two sets is all the combinations of pairs of both sets. For example, the 52 cards in a standard playing card deck represent a Cartesian product between the 13 ranks (A, 2, 3,..., Q, K) and the four suits.
......@@ -210,7 +210,7 @@ b 5
dtype: int64
```
有趣的是,Pandas 在同一项操作中有两个截然不同的结果。 如果笛卡尔积是 Pandas 的唯一选择,那么将数据帧列加在一起这样的简单操作将使返回的元素数量激增。
有趣的是,Pandas 在同一项操作中有两个截然不同的结果。 如果笛卡尔积是 Pandas 的唯一选择,那么将数据帧列加在一起这样的简单操作将使返回的元素数量激增。
在此配方中,每个系列具有不同数量的元素。 通常,当操作维中不包含相同数量的元素时,Python 和其他语言中的类似数组的数据结构将不允许进行操作。 Pandas 可以通过在完成操作之前先对齐索引来实现此目的。
......@@ -935,7 +935,7 @@ True
5.35 ms ± 55.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
```
不幸的是,我们的工作速度是内置`idxmax`Pandas 方法的五倍,但是不管其性能如何下降,许多创新且实用的解决方案都使用`cumsum`和布尔系列的累积方法来查找条纹或特定模式 一个轴。
不幸的是,我们的工作速度是内置`idxmax`Pandas 方法的五倍,但是不管其性能如何下降,许多创新且实用的解决方案都使用`cumsum`和布尔系列的累积方法来查找条纹或特定模式 一个轴。
# 寻找最常见的最大值
......
......@@ -326,7 +326,7 @@ Name: UGDS, dtype: float64
# How it works...
不存在预定义的 Pandas 函数来计算偏离均值的最大标准偏差数。 我们被迫在步骤 2 中构造一个自定义函数。请注意,此自定义函数`max_deviation`接受单个参数`s`。 展望第 3 步,您会注意到函数名称位于`agg`方法内,而没有直接调用。 参数 `s` 没有明确传递给 `max_deviation` 的地方。 相反,Pandas 将, `UGDS` 列 作为系列隐式传递给 `max_deviation`
不存在预定义的 Pandas 函数来计算偏离均值的最大标准偏差数。 我们被迫在步骤 2 中构造一个自定义函数。请注意,此自定义函数`max_deviation`接受单个参数`s`。 展望第 3 步,您会注意到函数名称位于`agg`方法内,而没有直接调用。 参数 `s` 没有明确传递给 `max_deviation` 的地方。 相反,Pandas 将, `UGDS` 列 作为系列隐式传递给 `max_deviation`
每个组都会调用一次`max_deviation`功能。 由于`s`是系列,因此所有常规的系列方法均可用。 在称为**标准化**的过程中,从组中的每个值中减去该特定组的平均值,然后再除以标准差。
......@@ -1179,7 +1179,7 @@ IndexingError: Too many indexers
您可能想知道为什么我们不能使用更简单的`sort_values` Series 方法。 此方法不是独立进行排序,而是将行或列保留为单个记录,就像在进行数据分析时所期望的那样。 步骤 3 是非常昂贵的操作,需要几秒钟才能完成。 只有大约 60,000 行,因此该解决方案无法很好地扩展到更大的数据。 呼叫
步骤 3 是非常昂贵的操作,需要几秒钟才能完成。 只有大约 60,000 行,因此该解决方案无法很好地扩展到更大的数据。 在所有 Pandas 中,用`axis=1`调用`apply`方法是性能最低的操作之一。 在内部,Pandas 在每行上循环,不会因 NumPy 提供任何速度提升。 如果可能,请避免将`apply``axis=1`一起使用。
步骤 3 是非常昂贵的操作,需要几秒钟才能完成。 只有大约 60,000 行,因此该解决方案无法很好地扩展到更大的数据。 在所有 Pandas 中,用`axis=1`调用`apply`方法是性能最低的操作之一。 在内部,Pandas 在每行上循环,不会因 NumPy 提供任何速度提升。 如果可能,请避免将`apply``axis=1`一起使用。
使用 NumPy `sort`函数可以大大提高速度。 让我们继续使用此功能并分析其输出。 默认情况下,它将对每一行进行独立排序:
......
......@@ -14,7 +14,7 @@
# 介绍
Pandas 的根源在于分析金融时间序列数据。 作者 Wes McKinney 当时对可用的 Python 工具并不满意,因此决定在他工作的对冲基金中建立 Pandas 来满足自己的需求。 从广义上讲,时间序列只是随时间推移收集的数据点。 最典型地,时间在每个数据点之间平均间隔。 Pandas 在处理日期,在不同时间段内进行汇总,对不同时间段进行采样等方面具有出色的功能。
Pandas 的根源在于分析金融时间序列数据。 作者 Wes McKinney 当时对可用的 Python 工具并不满意,因此决定在他工作的对冲基金中建立 Pandas 来满足自己的需求。 从广义上讲,时间序列只是随时间推移收集的数据点。 最典型地,时间在每个数据点之间平均间隔。 Pandas 在处理日期,在不同时间段内进行汇总,对不同时间段进行采样等方面具有出色的功能。
# 了解 Python 和 Pandas 日期工具之间的区别
......
......@@ -7,7 +7,7 @@
* 用 Pandas 绘制基础知识
* 可视化航班数据集
* 堆叠面积图以发现新兴趋势
* 了解大 Pandas 与大 Pandas 的区别
* 了解 Pandas 与 Pandas 的区别
* 使用 Seaborn 网格进行多元分析
* 在 Seaborn 钻石数据集中发现辛普森悖论
......@@ -536,7 +536,7 @@ Pandas 仅能生成 matplotlib 可用的一小部分图,例如线图,条形
# Getting ready
了解 Pandas 绘图的关键之一就是要知道绘图方法是否需要一个或两个变量来进行绘图。 例如,线图和散点图需要两个变量来绘制每个点。 对于条形图也是如此,后者需要一些 x 坐标来定位条形,并需要另一个变量来设置条形的高度。 箱线图,直方图和 KDE 仅使用一个变量进行绘制。
了解 Pandas 绘图的关键之一就是要知道绘图方法是否需要一个或两个变量来进行绘图。 例如,线图和散点图需要两个变量来绘制每个点。 对于条形图也是如此,后者需要一些 x 坐标来定位条形,并需要另一个变量来设置条形的高度。 箱线图,直方图和 KDE 仅使用一个变量进行绘制。
默认情况下,两变量线图和散点图使用索引作为 *x* 轴,将列的值用作 *y* 轴。 单变量图忽略索引,并对每个变量应用转换或聚合以制作其图。 在本食谱中,我们将考察 Pandas 中两变量和一变量地块之间的差异。
......@@ -597,13 +597,13 @@ Pandas 仅能生成 matplotlib 可用的一小部分图,例如线图,条形
# How it works...
第 1 步创建了一个小的样本数据帧,它将帮助我们说明使用 Pandas 进行的两个变量绘制和一变量绘制之间的差异。 默认情况下,Pandas 将使用数据帧的每个数字列制作一组新的条形,线形,KDE,盒形图或直方图,并在将其作为两变量图时将索引用作 x 值。 散点图是例外之一,必须明确为 x 和 y 值指定一列。
第 1 步创建了一个小的样本数据帧,它将帮助我们说明使用 Pandas 进行的两个变量绘制和一变量绘制之间的差异。 默认情况下,Pandas 将使用数据帧的每个数字列制作一组新的条形,线形,KDE,盒形图或直方图,并在将其作为两变量图时将索引用作 x 值。 散点图是例外之一,必须明确为 x 和 y 值指定一列。
pandas `plot`方法非常通用,并具有大量参数,可让您根据自己的喜好自定义结果。 例如,您可以设置图形大小,打开和关闭网格线,设置 *x**y* 轴的范围,为图形着色,旋转刻度线,等等 更多。
您还可以使用特定 matplotlib 绘图方法可用的任何参数。 多余的参数将由`plot`方法的`**kwds`参数收集,并正确传递给基础的 matplotlib 函数。 例如,在第 2 步中,我们创建一个条形图。 这意味着我们可以使用 matplotlib `bar`函数中可用的所有参数,以及 Pandas`plot`方法中可用的参数( [http://bit.ly/2z2l3rJ](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html) )。
在第 3 步中,我们创建一个单变量 KDE 图,该图将为数据帧中的每个数字列创建一个密度估计。 步骤 4 将所有两个变量图放置在同一图中。 同样,第 5 步将所有一变量图放置在一起。 第 4 步和第 5 步中的每个步骤都会创建一个具有三个轴对象的图形。 命令`plt.subplots(1, 3)`创建一个图形,该图形具有分布在一行和三列上的三个轴。 它返回一个由图和包含轴的一维 NumPy 数组组成的两元组。 元组的第一项被解包到变量`fig`中。 元组的第二个项目被解包为另外三个变量,每个变量一个。 Pandas`plot`方法方便地带有`ax`参数,使我们可以将绘图结果放入图中的特定轴中。
在第 3 步中,我们创建一个单变量 KDE 图,该图将为数据帧中的每个数字列创建一个密度估计。 步骤 4 将所有两个变量图放置在同一图中。 同样,第 5 步将所有一变量图放置在一起。 第 4 步和第 5 步中的每个步骤都会创建一个具有三个轴对象的图形。 命令`plt.subplots(1, 3)`创建一个图形,该图形具有分布在一行和三列上的三个轴。 它返回一个由图和包含轴的一维 NumPy 数组组成的两元组。 元组的第一项被解包到变量`fig`中。 元组的第二个项目被解包为另外三个变量,每个变量一个。 Pandas`plot`方法方便地带有`ax`参数,使我们可以将绘图结果放入图中的特定轴中。
# There's more...
......@@ -958,9 +958,9 @@ dtype: int64
我们的目标是确定休斯敦随时间推移在五个最大的数据科学聚会小组中的成员分布。 为此,我们需要找到自每个小组开始以来的每个时间点的成员总数。 我们有每个人加入每个小组的确切日期和时间。 在第 2 步中,我们按每周分组(偏移别名`W`)和见面组,并使用`size`方法返回该周的签约数量。
所得的系列不适合与 Pandas 作田。 每个见面组都需要自己的列,因此我们将`group`索引级别重塑为列。 我们将`fill_value`选项设置为零,以便在特定星期内没有成员资格的组不会缺少任何值。
所得的系列不适合与 Pandas 作田。 每个见面组都需要自己的列,因此我们将`group`索引级别重塑为列。 我们将`fill_value`选项设置为零,以便在特定星期内没有成员资格的组不会缺少任何值。
我们每周需要会员总数。 步骤 4 中的`cumsum`方法为我们提供了此功能。 我们可以在此步骤之后直接创建堆积面积图,这将是可视化原始总成员资格的好方法。 在第 5 步中,通过将每个值除以其行总数,可以找到每个组在所有组中占总数的百分比。 默认情况下,Pandas 会自动按对象的列对齐对象,因此我们不能使用除法运算符。 相反,我们必须使用`div`方法将对齐轴更改为索引
我们每周需要会员总数。 步骤 4 中的`cumsum`方法为我们提供了此功能。 我们可以在此步骤之后直接创建堆积面积图,这将是可视化原始总成员资格的好方法。 在第 5 步中,通过将每个值除以其行总数,可以找到每个组在所有组中占总数的百分比。 默认情况下,Pandas 会自动按对象的列对齐对象,因此我们不能使用除法运算符。 相反,我们必须使用`div`方法将对齐轴更改为索引
现在,该数据非常适合我们在步骤 6 中创建的堆积面积图。请注意,pandas 允许您使用日期时间字符串设置轴限制。 如果使用`ax.set_xlim`方法直接在 matplotlib 中完成此操作将不起作用。 该地块的开始日期提前了几年,因为 Houston R Users 组的成立要早于其他任何组。
......@@ -997,7 +997,7 @@ dtype: int64
![](img/00342.jpeg)
# 了解大 Pandas 与大 Pandas 的区别
# 了解 Pandas 与 Pandas 的区别
在 Pandas 之外,海上库是 Python 数据科学社区中创建可视化效果最广泛的库之一。 像 Pandas 一样,它本身不会进行任何实际的绘制,并且完全依赖于 matplotlib 进行繁重的工作。 Seaborn 绘图功能直接与 pandas DataFrames 配合使用,以创建美观的可视化效果。
......@@ -1033,7 +1033,7 @@ dtype: int64
![](img/00344.jpeg)
4. 要使用 Pandas 重现该地块,我们需要预先汇总数据:
4. 要使用 Pandas 重现该地块,我们需要预先汇总数据:
```py
>>> employee['DEPARTMENT'].value_counts().plot('barh')
......@@ -1072,7 +1072,7 @@ dtype: int64
![](img/00348.jpeg)
8. 对于 Pandas,我们将必须按种族和性别进行分组,然后将性别作为列名称拆开:
8. 对于 Pandas,我们将必须按种族和性别进行分组,然后将性别作为列名称拆开:
```py
>>> employee.groupby(['RACE', 'GENDER'], sort=False) \
......@@ -1083,7 +1083,7 @@ dtype: int64
![](img/00349.jpeg)
9. 箱形图是海豹和 Pandas 共同的另一种图。 让我们创建一个按种族,性别和 Seaborn 划分的薪金箱形图:
9. 箱形图是海豹和 Pandas 共同的另一种图。 让我们创建一个按种族,性别和 Seaborn 划分的薪金箱形图:
```py
>>> sns.boxplot(x='GENDER', y='BASE_SALARY', data=employee,
......@@ -1110,13 +1110,13 @@ dtype: int64
# How it works...
在步骤 2 中导入 seaborn 会更改 matplotlib 的许多默认属性。 在类似字典的对象`plt.rcParams`中可以访问大约 300 个默认绘图参数。 要恢复 matplotlib 的默认设置,请不带任何参数调用`plt.rcdefaults`函数。 进口 seaborn 时,Pandas 地块的样式也会受到影响。 我们的员工数据集满足了整洁数据的要求,因此非常适合用于几乎所有 Seaborn 的绘图功能。
在步骤 2 中导入 seaborn 会更改 matplotlib 的许多默认属性。 在类似字典的对象`plt.rcParams`中可以访问大约 300 个默认绘图参数。 要恢复 matplotlib 的默认设置,请不带任何参数调用`plt.rcdefaults`函数。 进口 seaborn 时,Pandas 地块的样式也会受到影响。 我们的员工数据集满足了整洁数据的要求,因此非常适合用于几乎所有 Seaborn 的绘图功能。
Seaborn 将进行所有汇总; 您只需将数据帧提供给,,`data`,参数,并使用其字符串名称引用这些列。 例如,在步骤 3 中,`countplot`函数毫不费力地对`DEPARTMENT`的每次出现进行计数,以创建条形图。 所有海上绘图功能均具有`x``y`参数。 我们可以使用`x`而不是`y`绘制垂直条形图。 Pandas 会迫使您做更多的工作来获得相同的情节。 在第 4 步中,我们必须使用`value_counts`方法预先计算垃圾箱的高度。
Seaborn 可以使用`barplot`功能进行更复杂的聚合,如步骤 5 和 7 所示。 `hue`参数进一步在 *x* 轴上拆分每个组。 通过在步骤 6 和 8 中对 x 和 hue 变量进行分组,Pandas 能够几乎复制这些图。
箱形图可在海生和大 Pandas 中使用,并且可以直接用整洁的数据绘制,而无需任何汇总。 即使没有必要进行聚合,seaborn 仍然具有优势,因为它可以使用`hue`参数将数据整齐地拆分为单独的组。 如步骤 10 所示,Pandas 无法轻松地从海洋中复制此功能。每个组都需要使用`query`方法进行拆分,并绘制在其自己的轴上。 实际上,大 Pandas 可能会拆分多个变量,从而将列表传递给`by`参数,但结果却不尽人意:
箱形图可在海生和 Pandas 中使用,并且可以直接用整洁的数据绘制,而无需任何汇总。 即使没有必要进行聚合,seaborn 仍然具有优势,因为它可以使用`hue`参数将数据整齐地拆分为单独的组。 如步骤 10 所示,Pandas 无法轻松地从海洋中复制此功能。每个组都需要使用`query`方法进行拆分,并绘制在其自己的轴上。 实际上,Pandas 可能会拆分多个变量,从而将列表传递给`by`参数,但结果却不尽人意:
```py
>>> ax = employee.boxplot(by=['GENDER', 'RACE'],
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册