楼主: 数据洞见
6048 33

[原创博文] 从 Python 3.4 到 Python 3.9 的提升提升情况的总结 [推广有奖]

21
数据洞见 发表于 2022-1-16 08:49:11
Similar functions for similar tasks
The seaborn namespace is flat; all of the functionality is accessible at the top level. But the code itself is hierarchically structured, with modules of functions that achieve similar visualization goals through different means. Most of the docs are structured around these modules: you’ll encounter names like “relational”, “distributional”, and “categorical”.

For example, the distributions module defines functions that specialize in representing the distribution of datapoints. This includes familiar methods like the histogram:

penguins = sns.load_dataset("penguins")
sns.histplot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")
../_images/function_overview_3_0.png
Along with similar, but perhaps less familiar, options such as kernel density estimation:

sns.kdeplot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")
../_images/function_overview_5_0.png
Functions within a module share a lot of underlying code and offer similar features that may not be present in other components of the library (such as multiple="stack" in the examples above). They are designed to facilitate switching between different visual representations as you explore a dataset, because different representations often have complementary strengths and weaknesses.

Figure-level vs. axes-level functions
In addition to the different modules, there is a cross-cutting classification of seaborn functions as “axes-level” or “figure-level”. The examples above are axes-level functions. They plot data onto a single matplotlib.pyplot.Axes object, which is the return value of the function.

In contrast, figure-level functions interface with matplotlib through a seaborn object, usually a FacetGrid, that manages the figure. Each module has a single figure-level function, which offers a unitary interface to its various axes-level functions. The organization looks a bit like this:

../_images/function_overview_8_0.png
For example, displot() is the figure-level function for the distributions module. Its default behavior is to draw a histogram, using the same code as histplot() behind the scenes:

sns.displot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")

22
数据洞见 发表于 2022-1-16 08:49:42
可视化统计关系

统计分析是了解数据集中的变量如何相互关联以及这些关系如何依赖于其他变量的过程。可视化是此过程的核心组件,这是因为当数据被恰当地可视化时,人的视觉系统可以看到指示关系的趋势和模式。

我们将在本教程中讨论三个 seaborn 函数。我们最常用的是relplot()。这是一个figure-level的函数,可以用散点图和线图两种通用的方法来可视化统计关系。relplot()将FacetGrid 与两个axes-level函数组合在一起:

scatterplot() (kind="scatter"; 默认值)
lineplot()(kind="line")
正如我们将要看到的,这些函数可能非常有启发性,因为他们使用简单且易于理解的数据表示形式,且仍然能够表示复杂的数据集结构。之所以可以这样,是因为它们可以通过色调、大小和样式的语义映射最多三个额外的变量来增强绘制的二维图形。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="darkgrid")
复制ErrorOK!
用散点图关联变量
散点图是数据可视化的支柱,它通过点云描绘了两个变量的联合分布,其中每个点代表数据集中的一个观测值。这种描述能够使我们通过视觉推断出许多信息,他们之间是否存在任何有意义的关系。

在 seaborn 中有多种方式绘制散点图。当两个变量的是数值型时,最基本的是函数scatterplot()。在 类别可视化,我们将会看到使用散点图来显示类别数据的专用工具。scatterplot()是relplot()中kind的默认类型(也可以通过kind="scatter"来设置):

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", data=tips);

23
数据洞见 发表于 2022-1-16 08:50:13
线性关系可视化


许多数据集包含多定量变量,并且分析的目的通常是将这些变量联系起来。我们之前讨论可以通过显示两个变量相关性的来实现此目的的函数。但是,使用统计模型来估计两组噪声观察量之间的简单关系可能会非常有效。本章讨论的函数将通过线性回归的通用框架实现。

本着图凯(Tukey)精神,seaborn 中的回归图主要用于添加视觉指南,以助于在探索性数据分析中强调存在于数据集的模式。换而言之,seaborn 本身不是为统计分析而生。要获得与回归模型拟合相关定量度量,你应当使用 statsmodels. 然而,seaborn 的目标是通过可视化快速简便地 3 探索数据集,因为这样做,如果说不上更,是与通过统计表探索数据集一样重要。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
复制ErrorOK!
sns.set(color_codes=True)
复制ErrorOK!
tips = sns.load_dataset("tips")
复制ErrorOK!
绘制线性回归模型的函数
seaborn 中两个主要函数主要用于显示回归确定的线性关系。这些函数,regplot() 和 lmplot(), 之间密切关联,并且共享核心功能。但是,了解它们的不同之处非常重要,这样你就可以快速为特定工作选择正确的工具。

在最简单的调用中,两个函数都绘制了两个变量,x和y,然后拟合回归模型y~x并绘制得到回归线和该回归的 95%置信区间:

sns.regplot(x="total_bill", y="tip", data=tips)

24
数据洞见 发表于 2022-1-16 08:50:38
拟合不同模型
上面使用的简单线性回归模型非常容易拟合,但是它不适合某些类型的数据集。Anscombe 的四重奏数据集展示了一些实例,其中简单线性回归提供了相同的关系估计,然而简单的视觉检查清楚地显示了差异。例如,在第一种情况下,线性回归是一个很好的模型:

anscombe = sns.load_dataset("anscombe")
复制ErrorOK!
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),
           ci=None, scatter_kws={"s": 80});

25
数据洞见 发表于 2022-1-16 08:51:49
构建结构化多图网格


在探索中等维度数据时,经常需要在数据集的不同子集上绘制同一类型图的多个实例。这种技术有时被称为“网格”或“格子”绘图,它与“多重小图”的概念有关。这种技术使查看者从复杂数据中快速提取大量信息。 Matplotlib 为绘制这种多轴图提供了很好的支持; seaborn 构建于此之上,可直接将绘图结构和数据集结构关系起来。

要使用网格图功能,数据必须在 Pandas 数据框中,并且必须采用 Hadley Whickam 所谓的 “整洁”数据的形式。简言之,用来画图的数据框应该构造成每列一个变量,每一行一个观察的形式。

至于高级用法,可以直接使用本教程中讨论的对象,以提供最大的灵活性。一些 seaborn 函数(例如lmplot(),catplot()和pairplot())也在后台使用它们。与其他在没有操纵图形的情况下绘制到特定的(可能已经存在的)matplotlib Axes上的“Axes-level” seaborn 函数不同,这些更高级别的函数在调用时会创建一个图形,并且通常对图形的设置方式更加严格。在某些情况下,这些函数或它们所依赖的类构造函数的参数将提供不同的接口属性,如lmplot()中的图形大小,你可以设置每个子图的高和宽高比。但是,使用这些对象的函数在绘图后都会返回它,并且这些对象大多都有方便简单的方法来改变图的绘制方式。

import seaborn as sns
import matplotlib.pyplot as plt

sns.set(style="ticks")

基于一定条件的多重小图
当你想在数据集的不同子集中分别可视化变量分布或多个变量之间的关系时,FacetGrid类非常有用。 FacetGrid最多有三个维:row,col和hue。前两个与轴(axes)阵列有明显的对应关系;将色调变量hue视为沿深度轴的第三个维度,不同的级别用不同的颜色绘制。

首先,使用数据框初始化FacetGrid对象并指定将形成网格的行,列或色调维度的变量名称。这些变量应是离散的,然后对应于变量的不同取值的数据将用于沿该轴的不同小平面的绘制。例如,假设我们想要在tips数据集中检查午餐和晚餐小费分布的差异。

此外,relplot(),catplot()和lmplot()都在内部使用此对象,并且它们在完成时返回该对象,以便进一步调整。

tips = sns.load_dataset("tips")

g = sns.FacetGrid(tips, col="time")

26
数据洞见 发表于 2022-1-16 08:52:25
控制图像的美学样式(aesthetics)


绘制有吸引力的图像很十分重要的。当你在探索一个数据集并为你自己做图的时候,制作一些让人看了心情愉悦的图像是很好的。可视化对向观众传达量化的简介也是很重要的,在这种情况下制作能够抓住查看者的注意力并牢牢吸引住他们的图像就更有必要了。

Matplotlib 是高度可定制的,但是很难知道要如何设置图像才能使得图像更加吸引人。Seaborn 提供了许多定制好的主题和高级的接口,用于控制 Matplotlib 所做图像的外观。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
复制ErrorOK!
让我们定义一个简单的函数来绘制一些偏移正弦波,这将帮助我们看到我们可以调整的能够影响图像风格的不同参数。

def sinplot(flip=1):
    x = np.linspace(0, 14, 100)
    for i in range(1, 7):
        plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
复制ErrorOK!
这是 Matplotlib 默认情况下的绘图外观:

sinplot()

27
宽客老丁 发表于 2022-1-16 08:53:30
(注意,在 0.8 之前的 seaborn 版本中, set() 已经在使用 impory 语句导入的时候就被调用了。但在以后的版本中,必须要显式调用它)。

Seaborn 将 matplotlib 参数分成两个独立的组。第一组设置了图像的美术风格,第二组则对图像中不同的元素进行了控制,使得图像可以很容易地融入不同的环境中。

操作这些参数的接口是两对函数。要控制样式,请使用 axes_style() 和 set_style() 函数。要对图像中元素的样式进行修改,请使用 plotting_context() 和 set_context() 函数。在这两种情况下(控制图像样式与修改元素样式),第一个函数会返回一个参数字典,第二个函数设置 matplotlib 中相关参数的默认值。

28
宽客老丁 发表于 2022-1-16 08:53:52
可视化数据集的分布


在处理一组数据时,您通常想做的第一件事就是了解变量的分布情况。本教程的这一章将简要介绍 seaborn 中用于检查单变量和双变量分布的一些工具。 您可能还需要查看[categorical.html](categorical.html #categical-tutorial)章节中的函数示例,这些函数可以轻松地比较变量在其他变量级别上的分布。

29
宽客老丁 发表于 2022-1-16 08:54:38
3.6 新版功能.
exception IndexError
当序列抽取超出范围时将被引发。(切片索引会被静默截短到允许的范围;如果指定索引不是整数
则TypeError 会被引发。)
exception KeyError
当在现有键集合中找不到指定的映射(字典)键时将被引发。
exception KeyboardInterrupt
当用户按下中断键 (通常为 Control-C 或 Delete) 时将被引发。在执行期间,会定期检测中断信
号。该异常继承自BaseException 以确保不会被处理Exception 的代码意外捕获,这样可以避
免退出解释器。

30
宽客老丁 发表于 2022-1-16 08:55:08


台湾大牛导师李御玺,数十个商业案例实操,带您玩转数据挖掘

学数据分析,实现高薪就业捷径
你想学习数据分析吗?

strerror
操作系统所提供的相应错误信息。它在 POSIX 平台中由 C 函数 perror() 来格式化,在
Windows 中则是由 FormatMessage()。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 20:37