提交 acee1d7c 编写于 作者: W wizardforcel

2020-07-13 23:19:18

上级 5f5c8fe9
# 前言
在本书中,您将深入学习熊猫,这是一个 Python 库,用于处理,转换和分析数据。 这是用于探索性数据可视化的流行框架,这是一种基于数据集和数据管道的属性分析数据的方法。
这本书将是您使用熊猫探索数据集的实用指南。 您将首先设置 Python,pandas 和 Jupyter Notebook。 您将学习如何使用 Jupyter Notebook 运行 Python 代码。 然后,我们将向您展示如何将数据导入大熊猫并进行一些探索性分析。 您将学习如何使用 pandas 方法操作和重塑数据。 您还将学习如何处理数据集中缺失的数据,如何使用 pandas 和 Matplotlib 绘制图表和图,以及如何为受众创建有效的可视化效果。 最后,我们将教您如何从熊猫中获取数据并转换为多种流行的文件格式,从而总结您新获得的熊猫知识。
# 这本书是给谁的
本书适用于希望了解流行的 pandas 库的新兴数据科学家,或希望踏入数据分析领域的 Python 开发人员-如果您属于这两个类别,那么本书是您理想的参考资料 开始吧。
# 本书涵盖的内容
[第 1 章](../Text/1.html)*处理不同类型的数据集* 教您有关从 CSV 文件和 Excel 文件读取数据时使用高级选项的知识。
[第 2 章](../Text/2.html)*数据选择* ,介绍如何使用熊猫系列数据结构选择数据。 您还将学习如何从 pandas DataFrames 中排序和过滤数据,以及如何更改 pandas 系列中的数据类型。
[第 3 章](../Text/3.html)*操纵,转换和重塑数据* 探索如何修改熊猫 DataFrame。 您还将学习如何使用`GroupBy`方法,如何处理缺失值以及如何为 pandas DataFrames 中的方法建立索引。 本章还将教您如何使用日期和时间数据,以及如何将函数应用于 pandas 系列或 DataFrames。
[第 4 章](../Text/4.html)*像 Pro* 一样可视化数据,将向您展示如何控制的绘图美学,包括如何为绘图选择颜色。 您还将学习如何绘制分类数据并掌握数据感知网格的绘制方法。
# 充分利用这本书
一些 Python 编程经验可以帮助您充分利用本课程。
# 使用约定
本书中使用了许多文本约定。
`CodeInText`:表示文本中的词,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,伪 URL,用户输入和 Twitter 句柄。 这是一个示例:“ H 由于使用 `read_excel` 方法的高级选项。”
代码块设置如下:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1")
df.head()
```
任何命令行输入或输出的编写方式如下:
```py
conda install sqlite
```
**粗体**:表示您在屏幕上看到的新术语,重要单词或顺序。 例如,菜单或对话框中的单词会出现在这样的文本中。 这是一个示例:“从管理面板中选择系统信息。 ”
Warnings or important notes appear like this. Tips and tricks appear like this.
# 处理不同种类的数据集
在本章中,我们将学习如何在熊猫中使用不同种类的数据集格式。 我们将学习如何使用熊猫导入的 CSV 文件提供的高级选项。 我们还将研究如何在熊猫中使用 Excel 文件,以及如何使用`read_excel`方法的高级选项。 我们将探讨其他一些使用流行数据格式的熊猫方法,例如 HTML,JSON,PICKLE 文件,SQL 等。
# 从 CSV 文件读取数据时使用高级选项
在本部分中,我们将[CSV]和结合使用,并学习如何[熊猫] CSV 数据集以及 高级选项: `read_csv` 方法。
# 导入模块
首先,我们将使用以下命令导入`pandas`模块:
```py
import pandas as pd
```
要读取 CSV 文件,我们使用`read_csv`方法,如下所示:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1")
df.head()
```
为了执行基本导入,请将数据集的文件名传递给`read_csv`,并将结果 DataFrame 分配给变量。 在以下屏幕截图中,我们可以看到熊猫已将数据集转换为表格格式:
![](img/cfe3ed2e-29c2-480d-8033-c65564c39388.png)
# 高级阅读选项
在 Python 中,pandas 具有`read_csv`方法的许多高级选项,您可以在其中控制如何从 CSV 文件读取数据。
# 处理列,索引位置和名称
默认情况下,`read_csv`将 CSV 文件第一行中的条目视为列名。 我们可以通过将`header`设置为`None`来关闭此功能,如以下代码块所示:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1", header=None)
df.head()
```
输出如下:
![](img/e1f24ca1-344b-4700-bb36-38a6102167a3.png)
# 指定另一行作为标题
您还可以通过将行号传递给`header`选项,从而从其他行(而不是默认的第一行)设置列名,如下所示:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1", header=2)
df.head()
```
The output is as follows:
![](img/7bf7d1c8-8b22-4fe1-bdcf-82a45d868d85.png)
# 将列指定为索引
默认情况下,`read_csv`在读取数据时分配一个默认的数字索引,该索引从零开始。 但是,您可以通过将列名传递给索引列选项来更改此行为。 然后,熊猫会将索引设置为此列,如以下代码所示:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1", index_col='Title')
df.head()
```
在这里,我们传递了电影标题作为索引名称。 现在,索引名称为`Title`,而不是默认的数字索引,如以下屏幕截图所示:
![](img/478b7fde-0165-48fc-a2a6-9b8207751094.png)
# 选择要读取的列的子集
我们还可以选择读取 CSV 文件中特定列的子集。 为此,我们将列名作为列表传递,以使用 columns 选项,如下所示:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1", usecols=['Title', 'Genre1'])
df.head()
```
前面的代码段的输出如下:
![](img/0f20610e-b198-4572-9084-ab850b82c096.png)
# 处理缺失和不适用数据
接下来,我们将看到如何通过读取 CSV 文件来处理丢失的数据。 默认情况下,`read_csv`认为缺少以下值并将其标记为`NaN`
![](img/c330d7f5-b1c0-4fc8-8fb2-d4bf7a5eb8a7.png)
但是,您可以添加到此列表。 为此,只需将要视为`NaN`的值列表传递给,如以下代码所示:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1", na_values=[''])
```
# 选择是否跳过空白行
有时整行没有值; 因此,我们可以在读取数据时选择处理这些行。 默认情况下,`read_csv`会忽略空白行,但是我们可以通过将`skip_blank_lines`设置为`False`来关闭此行,如下所示:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1", skip_blank_lines=False)
```
# 数据解析选项
我们可以通过读取 CSV 文件来选择跳过哪些行。 我们可以将行号作为列表传递给`skiprows`选项。 第一行的索引为零,如下所示:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1", skiprows = [1,3,7])
df.head()
```
The output is as follows:
![](img/80076b18-0c73-4252-b86f-f088e6ed6dad.png)
# 从文件的页脚或结尾跳过行
要从页脚或文件末尾跳过行,请使用`skipfooter`选项并传递一个数字,该数字指定要跳过的行数。 在以下代码中,我们通过了`2`。 如我们所见,在跳过最后两行之后,我们创建的上一个 DataFrame 与我们创建的 DataFrame 之间存在差异:
```py
df.tail(2)
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1", skipfooter=2, engine='python')
df.tail(2)
```
以下屏幕截图显示了输出:
![](img/c874e464-2cf3-4677-9828-2202c05a536b.png)
# 读取文件的子集或一定数量的行
有时数据文件太大,我们只想看一下前几行。 我们可以通过将要导入的行数传递到`nrows`选项来做到这一点,如以下代码所示。 在这里,我们将`100`传递给`nrows`,然后`nrows`仅读取数据集中的前一百行:
```py
df = pd.read_csv('IMDB.csv', encoding = "ISO-8859-1", nrows=100)
df.shape
```
# 从 Excel 文件读取数据
在本节中,我们将学习如何使用大熊猫使用 Excel 数据来处理 ork,以及如何使用大熊猫的 `read_excel` 方法从 Excel 文件中读取数据。 我们将阅读并探索一个真实的 Excel 数据集,并使用 xplore 解析一些可用于解析 Excel 数据的高级选项。
pandas internally uses the Excel `rd` Python library to extract data from Excel files. We can install it by executing `conda install xlrd`.
首先,请确保命令行程序在安装前以 admin 模式运行,如以下屏幕截图所示:
![](img/aa1344e7-c572-4fdf-add1-89fc1e472e84.png)
以下屏幕截图显示了我们将使用熊猫阅读和探索的 Excel 数据集:
![](img/184c0d1e-e396-4c78-91af-0ba3ee54aaab.png)
上一个屏幕截图是电影分级的集合,可以在以下位置找到它: [https://github.com/saipranava/IMDB](https://github.com/saipranava/IMDB)
# 基本的 Excel 阅读
我们正在使用熊猫的`read_excel`方法读取此数据。 以最简单的格式,我们只是将想要的 Excel 数据集的文件名传递给`read_excel`方法。 pandas 将 Excel 文件中的数据转换为 pandas DataFrame 。 大熊猫内部为此使用 Excel `rd`库。 在这里,熊猫已读取数据并在内存中创建了表格数据对象,我们可以在我们的代码中访问,浏览和操作,如以下代码所示:
```py
df = pd.read_excel('IMDB.xlsx')
df.head()
```
前一个代码块的输出如下:
![](img/2815fd21-3be7-4ffa-829b-85e735677409.png)
pandas 有很多高级选项,我们可以使用它们来控制应如何读取数据。如以下屏幕截图所示:
![](img/5a286568-dfd0-4d26-8ce9-1805adc4690b.png)
# 指定应阅读的工作表
要指定应读取的纸张,请将值传递给`sheetname` 选项。 如下面的屏幕快照所示,我们只是传递`0`,它是 Excel 工作表中第一张工作表的索引值。 这非常方便,尤其是当我们不知道确切的工作表名称时:
```py
df = pd.read_excel('IMDB.xlsx', sheetname=0)
df.head()
```
The output is as follows:
![](img/821fc1c4-66e5-4d78-8833-5a18bd54d4dd.png)
# 从多张纸读取数据
Excel 数据集文件附带数据和多个工作表。 实际上,这是许多用户更喜欢 Excel 而不是 CSV 的主要原因之一。 幸运的是,熊猫支持从多张纸中读取数据。
# 找出工作表名称
要找出工作表的名称,请将 Excel 文件传递到`ExcelFile`类,然后在结果对象上调用`sheet_names`属性。 该类将 Excel 文件中的图纸名称打印为列表。 如果我们想从名为`data-movies`的工作表中读取数据,它将类似于以下代码片段:
```py
xls_file = pd.ExcelFile('IMDB.xlsx')
xls_file.sheet_names
```
接下来,我们在之前创建的 Excel 文件对象上调用`parse`方法,并传入我们想要读取的工作表名称。 然后我们将结果分配给两个单独的 DataFrame 对象,如下所示:
```py
df1 = xls_file.parse('movies')
df2 = xls_file.parse('by genre')
df1.head()
```
现在,我们从两个单独的 DataFrame ,中的两个工作表中获取数据,如以下屏幕截图所示:
![](img/51df758b-0331-47f7-9f5a-d53195e29b7f.png)
# 选择标题或列标签
默认情况下,pandas 会将列名称或标题设置为 Excel 文件中第一个非空白行的值。 但是,我们可以更改此行为。 在以下屏幕截图中,我们将值`3`传递给`header`选项,该选项告诉`read_excel`方法设置索引行`3`中的标题名称:
```py
df = pd.read_excel('IMDB.xlsx', sheetname=1, header=3)
df.head()
```
前面代码的输出如下:
![](img/12d7f628-5b08-4cfa-9919-306cca42da97.png)
# 没有标题
我们还可以告诉`read_excel`忽略标题并将所有行都视为记录。 只要 Excel 没有标题行,就很方便。 为此,我们将`header`设置为`None`和,如以下代码所示:
```py
df = pd.read_excel('IMDB.xlsx', sheetname=1, header=None)
df.head()
```
The output is as follows:
![](img/a1b88a66-420f-4bb6-ac46-103fd63509d4.png)
# 在开始时跳过行
要跳过文件开头的行,只需将`skiprows`设置为要跳过的行数,如以下代码所示:
```py
df = pd.read_excel('IMDB.xlsx', sheetname=1, skiprows=7)
```
# 在末尾跳过行
为此,我们使用`skip_footer`选项,如下所示:
```py
df = pd.read_excel('IMDB.xlsx', sheetname=1, ski_footer=10)
```
# 选择列
我们还可以选择只读取列的子集。 这是通过将`parse_cols`选项设置为数值来完成的,这将导致将列从`0`读取到我们设置解析列值的任何索引。 我们在这种情况下设置了`parse_cols=2`,它将读取 Excel 文件中的前三列,如以下代码片段所示:
```py
df = pd.read_excel('IMDB.xlsx', sheetname= 0, parse_cols=2)
df.head()
```
以下是输出:
![](img/cbc17e06-e0cb-4693-a19d-1d2e8101bc39.png)
# 列名
我们可以选择给列使用不同的名称,而不是标题行中提供的默认名称。 为此,我们将列名列表传递给`names`参数,如下所示:
```py
df = pd.read_excel('IMDB.xlsx', sheetname=0, parse_cols = 2, names=['X','Title',
'Rating'], )
df.head()
```
在下面的屏幕截图中,我们将列名设置为读取时传递的名称:
![](img/cb689dbe-dff6-448e-ad42-896429b363f3.png)
# 读取数据时设置索引
默认情况下,`read_excel`用数字索引标记零,从`0`开始。 我们可以将索引或行标签设置为更高的值或我们的选择。 为此,我们将数据集的列名传递给`index_col`选项。 在以下代码中,我们将索引设置为`Title` 列:
```py
df = pd.read_excel('IMDB.xlsx', sheetname=0, index_col='Title')
df.head()
```
The output is as follows:
![](img/75fb95a9-93d5-4196-aff7-d4bfa3c1541e.png)
# 读取时处理丢失的数据
`read_excel`方法有一个值列表,它将被视为丢失,然后将其设置为`NaN`。 我们可以在使用`na_values`参数传递值列表时添加此代码,如以下代码所示:
```py
df = pd.read_excel('IMDB.xlsx', sheetname= 0, na_values=[' '])
```
# 读取其他流行格式的数据
在本节中,我们将探索熊猫的功能,以读取和使用各种流行的数据格式。 我们还将学习 h 以便从 JSON 格式,HTML 文件和 PICKLE 数据集中读取数据,以及 h 可以从基于 SQL 的数据库中读取数据。
# 读取 JSON 文件
JSON 是用于结构化数据的最小可读格式。 它主要用于在服务器和 Web 应用程序之间传输数据,以替代 XML,如以下屏幕快照所示:
![](img/c67f9d24-a64c-43d4-9f07-d5eccf714d35.png)
# 将 JSON 数据读入熊猫
为了读取 JSON 数据,pandas 提供了一种名为`read_json`的方法,其中我们传递了要读取的 JSON 数据文件的文件名和位置。 文件位置可以是本地文件,甚至可以是具有有效 URL 方案的 Internet。 我们将结果 DataFrame 分配给变量`DF`
`read_json`方法读取 JSON 数据并将其转换为 pandas DataFrame 对象,即表格数据格式,如以下代码所示。 JSON 数据现在可以以 DataFrame 格式轻松访问,可以更轻松地进行操作和浏览:
```py
movies_json = pd.read_json('IMDB.json')
movies_json.head()
```
上一个代码块将产生以下输出:
![](img/4a1818ca-391b-48cb-9593-35960d5553bf.png)
# 读取 HTML 数据
pandas 内部使用`lxml` Python 模块读取 HTML 数据。 您可以通过执行`conda install lxml`,从命令行程序安装它,如以下屏幕截图所示:
![](img/7b60aa19-d51d-43a7-bd80-bd26473a7a62.png)
我们还可以从本地文件甚至直接从 Internet 导入 HTML 数据:
![](img/5ef932a6-3683-46dd-ac95-62d223a07840.png)
在这里,我们将 HTML 文件或 URL 的位置传递给`read_html`方法。 `read_html`从 HTML 提取表格数据,然后将其转换为熊猫 DataFrame 。 在以下代码中,我们以表格格式获取了从 HTML 文件提取的数据:
```py
pd.read_html('IMDB.html')
```
The output is as follows:
![](img/86a8b673-bec2-4b09-82aa-a733b9ab7cdc.png)
# 读取 PICKLE 文件
酸洗是将任何类型的 Python 对象(包括列表,字典等)转换为字符串的一种方式。 这个想法是,该字符串包含在另一个 Python 脚本中重构对象所需的所有信息。
我们使用`read_pickle`方法读取我们的 PICKLE 文件,如以下代码所示。 与其他数据格式一样,熊猫根据读取的数据创建 DataFrame :
```py
df = pd.read_pickle('IMDB.p')
df.head()
```
The output is as follows:
![](img/db67347d-5356-40ff-a4ec-38485abb9f6b.png)
# 读取 SQL 数据
在这里,我们将从流行的数据库浏览器 SQLite 中读取 SQL 数据,可以通过执行以下命令进行安装:
```py
conda install sqlite
```
然后,我们将导入 SQLite Python 模块,如下所示:
```py
import sqlite3
```
然后,创建与您要从中读取数据的 SQLite DB 的连接,如下所示:
```py
conn = sqlite3.connect("IMDB.sqlite")
df = pd.read_sql_query("SELECT * FROM IMDB;", conn)
df.head()
```
接下来,使用`read_sql_query`方法将您想要数据来自的 SQL 查询传递给熊猫。 该方法读取数据并创建一个 DataFrame 对象,如以下屏幕快照所示:
![](img/32c75475-e20d-444a-8ea0-6ecfa43181f7.png)
此演示使用了 SQLite 数据库,但您也可以从其他数据库读取数据。 为此,只需调用适当的 DB Python 模块即可。
# 从剪贴板读取数据
要从剪贴板读取数据,请先复制一些数据。 在以下示例中,我们从 movie 数据集中复制了一个表:
![](img/977c5f6c-2735-454e-8c8e-a9800074f7ed.png)
接下来,使用 pandas 的`read_clipboard`方法读取数据并创建一个 DataFrame ,如下所示:
```py
df = pd.read_clipboard()
df.head()
```
从网页复制的数据现在作为 DataFrame 存储在内存中,如以下屏幕截图所示。 在将数据快速导入大熊猫时,此方法非常方便:
![](img/90b4fbce-54bd-483c-909f-055ceb2efdd8.png)
# 摘要
在本章中,我们学习了如何在熊猫中使用不同种类的数据集格式。 我们学习了在导入 CSV 文件时如何使用熊猫提供的高级选项。 我们还看到了如何使用 Excel 数据集,并且探讨了可用于处理各种数据格式(例如 HTML,JSON,PICKLE 文件,SQL 等)的方法。
在下一章中,我们将学习如何在高级数据选择中使用熊猫技术。
\ No newline at end of file
此差异已折叠。
此差异已折叠。
# 像专业人士一样可视化数据
在本章中,我们将学习使用 seaborn 数据可视化库的数据可视化的高级技术。
特别是,我们将涵盖以下主题:
* 如何开始 Seaborn
* 海生的特征
* 绘制不同类型的地块
* 用 seaborn 绘制分类图
* 使用数据感知网格进行绘图
# 控制情节美学
在本节中,我们将学习如何使用 seaborn 绘图库来控制绘图美学。 我们将学习如何安装 seaborn 并开始使用 seaborn,以及我们需要导入的模型。 我们将探索一些海洋绘图方法来绘制几种不同类型的绘图。 我们还将看到如何使用各种 seaborn 方法和属性来控制和更改地块美观性。
在开始用 seaborn 创建地块之前,我们需要先安装它。 在本书中,我们一直在使用 Anaconda 来安装各种 Python 库,因此我们将继续进行下去。 要安装 seaborn,请执行以下命令:
```py
conda install seaborn
```
执行命令之前,请确保在管理员模式下运行命令行程序。 现在,我们需要导入本节所需的 Python 模块,如下所示:
```py
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns
```
我们需要导入熊猫的 Matplotlib 和 seaborn 模块。 我们正在使用 Matplotlib 的 inline magic 命令来确保我们的绘图连同代码一起正确显示在 Jupyter Notebook 中。
接下来,我们使用 pandas 和以下命令读取数据集:
```py
df = pd.read_csv('data-alcohol.csv')
df.head()
```
我们的数据集是 CSV 文件。 它由各个国家的酒精消费数据组成。 该数据可通过以下链接获得: [https://github.com/fivethirtyeight/data/tree/master/alcohol-consumption](https://github.com/fivethirtyeight/data/tree/master/alcohol-consumption)
# 我们与 seaborn 的第一个情节
在本节中,我们将仅使用一个变量来创建分布图,如下所示:
```py
sns.distplot(df.beer_servings)
```
在这里,`sns`指的是 seaborn,我们之前将其导入为`sns`。 现在我们需要将 seaborn 方法称为`distplot`,并从我们之前阅读的数据中传入列名。 如下面的屏幕快照所示,这应该可以使我们通过一行代码就能得到一个不错的分布图:
![](img/b0d2ef7c-aee8-49ea-9796-a0a088d6674e.png)
此单行显示了 seaborn 库的强大功能和简单性。
# 使用 set_style 更改绘图样式
现在是时候让 Seaborn 改变情节美学了。 在此过程中,我们还将探索许多不同的地块类型,可以使用 seaborn 进行绘制。
# 将绘图背景设置为白色网格
默认的打印样式是蓝色网格。 我们可以使用以下命令将其更改为`whitegrid`
```py
sns.set()
sns.set_style("whitegrid")
sns.lmplot(x='beer_servings', y='wine_servings', data=df);
```
Seaborn 提供了一种称为`set_style`的方法,我们将其称为`whitegrid`作为参数。 然后,我们调用绘图方法来绘制散点图。 我们正在使用 seaborn 的`lmplot`方法。 然后,我们从数据集中传递两个列名称为`x``y`,并将 data 参数设置为我们的 pandas DataFrame。 现在,我们应该有一个带有白色网格背景的散点图,如以下屏幕截图所示:
![](img/2be5dce7-fead-49cb-8a24-3b4d67d0e26f.png)
# 将情节背景设置为黑暗
现在我们将研究如何将绘图背景设置为`dark`并且没有网格。 为此,我们使用以下命令将样式设置为`dark`
```py
sns.set()
sns.set_style("dark")
sns.lmplot(x='beer_servings', y='wine_servings', data=df, fit_reg=False);
```
您可能已经注意到,我们在开始时还有另一行代码`sns.set()`。 通过调用此命令,我们在进行任何更改之前将情节美感重置为默认值。 我们这样做是为了确保我们之前所做的更改不会影响我们的总体规划,如下所示:
![](img/be86bd8c-0185-4aca-aecc-f8d634c11527.png)
# 将背景设置为白色
我们还可以使用以下代码将图的背景设置为实心`white`且没有网格。
```py
sns.set()
sns.set_style("white")
sns.swarmplot(x='country', y='wine_servings', data=df);
```
输出如下:
![](img/0e71d677-a461-4fed-9a30-e55a93f3040c.png)
# 添加刻度
我们可以通过将`style`设置为`ticks`来添加刻度线,如以下代码所示:
```py
sns.set()
sns.set_style("ticks")
sns.boxplot(data=df);
```
前面的代码应为我们提供以下输出:
![](img/6e4bce65-cb38-4b77-983d-595408f9ce57.png)
在这里,我们还演示了如何通过从 seaborn 调用`boxplot`方法来创建箱形图。
# 定制风格
在 seaborn 中,我们可以自定义预设样式,甚至比以前讨论的更多。 让我们向您展示我们可以做什么!
# 样式参数
首先让我们看一下这些样式组成的所有参数。 我们可以通过在 seaborn 上调用`axes_style`方法来获取参数,如下所示:
```py
sns.axes_style()
```
前面代码的输出如下:
![](img/b3f25f42-b193-4150-960f-89706c491673.png)
可以进一步自定义上述每个参数。 让我们尝试自定义其中之一,如以下代码片段所示:
```py
sns.set()
sns.set_style("ticks", {"axes.facecolor": ".1"})
sns.boxplot(data=df);
```
在前面的代码中,我们将`style`设置为`ticks`,背景为纯白色,但是我们可以通过分别设置`facecolor`来进一步自定义。 对于前面的代码,我们将获得以下输出:
![](img/2fb4ce29-9976-4776-a0cc-54fa85f0d18d.png)
请注意,我们可以向此字典添加更多参数,然后继续自定义绘图。
# 绘制上下文预设
Seaborn 还提供了一些预设样式上下文。 例如,到目前为止,我们一直在使用的默认样式上下文称为`notebook`。 但是,还有更多,包括一个叫做`paper`的。 使用称为`set_context`的方法设置此上下文,我们将`paper`作为参数传递,如下所示:
```py
sns.set()
sns.set_context("paper")
sns.lmplot(x='beer_servings', y='wine_servings', data=df);
```
先前代码的输出如下:
![](img/6300181e-ff24-41ef-b2c9-d37611f9b055.png)
还有更多可用的上下文。 例如,称为`talk`的一个。 我们可以使用`talk`设置该上下文,如下所示:
```py
sns.set()
sns.set_context("talk")
plt.figure(figsize=(8, 6))
sns.lmplot(x='beer_servings', y='wine_servings', data=df);
```
前面代码的输出如下:
![](img/5221647e-fd80-4d8d-a585-9eefd791c824.png)
我们可以使用的另一个上下文称为`poster`,它使用以下代码设置:
```py
sns.set()
sns.set_context("poster")
plt.figure(figsize=(8, 6))
sns.lmplot(x='beer_servings', y='wine_servings', data=df);
```
The output is as follows:
![](img/9d69bf21-08fc-49fd-a377-fd0d19f6afe4.png)
# 选择地块的颜色
在本节中,我们将学习使用调色板自定义 seaborn 中的地块颜色。 我们将探索 seaborn 和 Matplotlib 提供的一些调色板。 我们将学习如何通过设置不同的调色板来更改绘图的颜色,并且还将学习如何使用自定义颜色创建自己的调色板。
首先,使用以下代码导入 Jupyter Notebook 中所需的模块:
```py
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns
```
我们需要导入熊猫,Matplotlib 和 seaborn。 然后,我们需要读取 CSV 数据集; 我们使用`read_csv`方法执行此操作,如下所示:
```py
df = pd.read_csv('data-alcohol.csv')
df.head()
```
前面代码的输出如下:
![](img/98b18755-a40a-43ca-9624-8ecde7786e22.png)
现在我们需要使用 seaborn 来调用`color_palette`方法来获取当前的调色板,该调色板是默认设置的。 然后我们使用`palplot`方法显示这些颜色,如下所示:
```py
sns.palplot(sns.color_palette())
```
The output of the preceding code is as follows:
![](img/9d461c2b-6706-4a46-bfa7-a115da2b89e7.png)
现在让我们看一下该调色板在绘图中的外观:
```py
sns.set()
sns.boxplot(data=df);
```
前面代码的输出应类似于以下屏幕截图:
![](img/1dc4aba2-9a88-4b12-a479-5b51d0a3fccd.png)
在这里,我们在数据集上绘制了箱形图。 您可能会注意到,配色方案看上去与我们在打印默认调色板时看到的相似。
# 更改调色板
让我们继续并更改调色板,以了解它如何影响绘图的颜色。 以下代码将调色板设置为`bright`(seaborn 的预定义调色板之一):
```py
sns.set_palette("bright")
```
让我们看看如何使用以下命令来改变绘图的颜色:
```py
sns.boxplot(data=df);
```
现在,输出应类似于以下屏幕截图:
![](img/4ff23533-1998-4789-b9c9-0a94efe7a80d.png)
如您所见,由于我们设置了新的调色板,我们图的配色方案已经完全改变。 `bright`不是 seaborn 中唯一的预定义调色板; 还有其他一些,包括`deep``muted``pastel``bright``dark``colorblind`,如下所示:
```py
sns.palplot(sns.color_palette("deep", 7))
sns.palplot(sns.color_palette("muted", 7))
sns.palplot(sns.color_palette("pastel", 7))
sns.palplot(sns.color_palette("bright", 7))
sns.palplot(sns.color_palette("dark", 7))
sns.palplot(sns.color_palette("colorblind", 7))
```
每个调色板的输出如下:
![](img/5270c402-8780-4e51-b734-008f68522c1e.png)
Seaborn 还可以将 Matplotlib 的颜色图设置为调色板。 例如:
```py
sns.palplot(sns.color_palette("RdBu", 7))
sns.palplot(sns.color_palette("Blues_d", 7))
```
上一条命令的输出如下:
![](img/29fe0163-bde3-4693-8b4b-aeaca56a2678.png)
现在让我们使用 Matplotlib 颜色图之一作为调色板。 我们使用以下命令执行此操作:
```py
sns.set_palette("Blues_d")
```
在这里,我们将调色板设置为`Blues_d`,这是 Matplotlib 颜色图。 现在,让我们使用以下代码重绘图以查看其影响:
```py
sns.boxplot(data=df);
```
前面命令的输出应类似于以下屏幕截图:
![](img/7cc9c7ea-7c91-4ec4-9992-dbdc86dcc15d.png)
如您所见,我们的绘图现在具有来自蓝色色图的调色板。
# 建立自定义调色板
要构建自定义调色板,我们首先需要创建一个列表并为其分配所需的颜色,如下所示:
```py
my_palette = ['#4B0082', '#0000FF', '#00FF00', '#FFFF00', '#FF7F00',
'#FF0000']
sns.set_palette(my_palette)
sns.palplot(sns.color_palette())
```
The output is as follows:
![](img/f9d916a8-d1c6-41a2-b2b2-2fca38e86f57.png)
在前面的屏幕截图中,我们创建了一个名为`my_palette`的新调色板,具有七种颜色。 然后,我们将调色板设置为新创建的调色板,该调色板向我们展示颜色的外观。
让我们使用以下命令,通过新的自定义调色板查看绘图的外观:
```py
sns.boxplot(data=df);
```
前面命令的输出应类似于以下屏幕截图:
![](img/92e431d6-8ef1-4a05-9d70-66c442ca9b00.png)
# 绘制分类数据
在本节中,我们将了解 seaborn 支持的各种分类图以及如何绘制它们。 我们将演示如何绘制包括散点图,实线图,箱形图,条形图等的图。 我们还将学习如何绘制宽形的分类图。
让我们开始使用以下代码在 Jupyter Notebook 中导入我们的 pandas 模块:
```py
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns
```
除了熊猫,我们还需要导入 Matplotlib 和 Seaborn Python 库。 然后,我们读取 CSV 数据集,如下所示:
```py
df = pd.read_csv('data_simpsons_episodes.csv')
df.head()
```
本节中的数据集用于著名的动画电视连续剧*辛普森一家*
![](img/03f9d858-76e1-4341-826c-319fa7ffebe1.png)
前面的数据集包含每个*辛普森一家*情节的发行日期,收视率数字,评分以及一系列其他观察结果。
# 散点图
让我们从绘制散点图开始; 我们使用以下命令执行此操作:
```py
sns.stripplot(x="season", y="us_viewers_in_millions", data=df);
```
输出应如下所示:
![](img/2674856c-cac5-4a03-a251-4a593d215195.png)
在这里,我们使用了 Seaborn 的`stripplot`方法。 我们在 *x* 轴上绘制了季节编号,并在 *y* 轴上绘制了以百万计的美国观众。 我们还指定了使用的 DataFrame 的名称。
# 群图
现在让我们绘制`swarmplot`。 为此,我们使用 seaborn 的`swarmplot`方法:
```py
sns.swarmplot(x="season", y="us_viewers_in_millions", data=df);
```
The output is as follows:
![](img/4a6c8120-148d-4896-b712-258e29deab1e.png)
在这里,我们还通过了 *x* 轴上的季节编号,并在 *y* 轴上使用了数百万的观众。
# 箱形图
现在,我们使用相同的数据并使用`boxplot`方法创建箱形图,如下所示:
```py
sns.boxplot(x="season", y="us_viewers_in_millions", data=df);
```
上一条命令的输出如下:
![](img/184e947e-d097-4f38-bd17-ac28855b2b81.png)
# 小提琴情节
使用`violinplot()`方法创建小提琴图,如下所示:
```py
sns.violinplot(x="season", y="us_viewers_in_millions", data=df);
```
The output of the preceding code is as follows:
![](img/5f0100a2-ea47-491d-8af6-873fef4d1e3e.png)
# 条形图
要绘制条形图,我们使用以下`barplot`方法:
```py
sns.barplot(x="season", y="us_viewers_in_millions", data=df);
```
The output is as follows:
![](img/f790e027-d61f-435d-8ad3-7128816cd263.png)
请注意,还有另一种条形图可用,这些条形图是使用`countplot` 方法绘制的,如下所示:
```py
sns.countplot(x="season", data=df);
```
The output of the preceding code is as follows:
![](img/7ea2484a-7d1d-48c2-ac21-89d0fd6deda9.png)
当您要显示每个类别中的观察次数而不是计算第二个变量的状态时,可以使用这种样式的图。
# 宽形图
Seaborn 还支持宽格式的数据图。 让我们阅读以下数据集来演示一个:
```py
df = pd.read_csv('data-alcohol.csv')
df.head()
```
The output is as follows:
![](img/37b39dd4-7b5e-4af1-b22c-894456c56974.png)
我们可以使用以下命令创建宽形箱形图:
```py
sns.boxplot(data=df, orient="h");
```
The output of the preceding code is as follows:
![](img/994c67a1-d2e6-4d9b-98b1-d2c098e7b34d.png)
在这里,我们通过传入数据集并将方向作为`h`来创建宽幅箱形图。
# 使用数据感知网格进行绘图
在本节中,我们将学习在数据集的不同子集上绘制同一图的多个实例。 我们将学习使用 seaborn 的`FacetGrid`方法进行网格绘图。 我们还将探索 seaborn 的`PairGrid``PairPlot`方法进行网格绘图。
让我们从下面的代码在 Jupyter Notebook 中导入 Python 模块开始:
```py
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns
```
现在,我们需要使用以下代码读取第一个 CSV 数据集:
```py
df = pd.read_csv('data-titanic.csv')
df.head()
```
The output from the preceding command is as follows:
![](img/70f9e628-bf1d-40d4-9502-a4ae4a9e9915.png)
# 使用 FacetGrid()方法进行绘图
让我们开始研究如何使用`FacetGrid`方法绘制多维图,如以下代码所示:
```py
g = sns.FacetGrid(df, col="Sex", hue='Survived')
g.map(plt.hist, "Age");
g.add_legend();
```
前面代码的输出应类似于以下屏幕截图:
![](img/d8dd3a1e-bc48-44b1-bbd7-749484b4852e.png)
在这里,我们已经使用`FacetGrid`方法绘制了男性和女性乘客的两个并排直方图。 这种并排显示有助于我们比较按年龄划分的男女乘客的存活率。 为了进行绘制,我们首先使用`FacetGrid` 方法创建了一个网格。 然后,我们将数据集的 DataFrame 列传递为`Sex`,将`hue`传递为`Survived`**色相**代表情节的深度。 然后,这创建了带有两个分别用于男性和女性乘客的地块的网格。 然后我们在网格上调用`map`方法并传递了`plt.hist``Age`参数,它们绘制了我们的两个直方图。 最后,我们使用`add_legend`方法添加了图例。
# 使用 PairGrid()方法进行绘图
现在让我们看看如何使用`PairGrid`方法绘制可识别网格的图。 我们正在为此使用 MLB 播放器数据集,如以下代码所示:
```py
mlb = pd.read_csv('data-mlb-players.csv')
mlb.head()
```
The output is as follows:
![](img/ff10718c-542e-4f2b-9365-0441ab9e9775.png)
(Source: http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights)
让我们用以下代码创建一个图:
```py
g = sns.PairGrid(mlb, vars=["Height", "Weight"], hue="Position")
g.map(plt.scatter);
g.add_legend();
```
在这里,我们已经传递了 MLB 球员的数据集,并将`vars`设置为包含球员的`Height``Weight`的列表。 然后我们将`hue`设置为`Position`。 然后我们在此网格上使用`scatterplot`方法调用`map`。 最后,我们添加了图例,该图例提供了一个 2 x 2 网格,其中包括身高和体重曲线的所有组合,如以下屏幕截图所示:
![](img/71249b13-c74e-429e-b3a2-1e6e08dbbfeb.png)
这些位置的深度由玩家位置列提供。
# 使用 PairPlot()方法进行绘图
通过传递数据集可以直接调用`PairPlot`,如下所示。 深度由`hue``size`参数组成:
```py
sns.pairplot(mlb, hue="Position", size=2.5);
```
前面的命令为我们提供了 3 x 3 网格中的多图。 这是因为我们对每个位置都有三个观察值或列,如以下屏幕截图所示:
![](img/8a95ca98-79fa-4bc7-a54a-0f00a453ab12.png)
当前观察到的是`Height``Weight``Age`
# 摘要
在本章中,我们了解了使用 Seaborn 的数据可视化库进行数据可视化的高级技术。 我们学习了如何开始 seaborn,然后探索了其中的一些功能,包括如何控制情节的美感,如何选择情节的颜色等等。 我们学习了如何绘制几种不同类型的图,以及如何使用 seaborn 绘制分类数据。 最后,我们学习了如何使用数据感知网格来创建图。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册