到目前为止,Pandas 一直在数据预处理阶段帮助我们。 虽然,在一个例子中,在创建直方图时,我们还使用了 Pandas 的另一个模块—— plotting
.
到目前为止,我们有意避免了,因为更早地介绍它会引发比它回答的问题更多的问题。 即,熊猫 和 Matplotlib 是如此普遍,无处不在,以至于 Pandas 已经开始集成 Matplotlib 的功能。 它 严重 依赖 Matplotlib 进行任何实际绘图,您会发现源代码中包含许多 Matplotlib 函数。 或者,您可以使用其他后端进行绘图,例如 Plotly 和 背景虚化.
但是,Pandas 还向我们介绍了一些情节 并不 Matplotlib 标准绘图类型的一部分,例如 关键DE, 安德鲁斯曲线, 引导图 和 散点矩阵.
plot()
熊猫的功能 DataFrame
使用指定的后端 plotting.backend
,并取决于 kind
参数——使用给定的库生成一个图。 由于其中有很多重叠 - 没有必要涵盖情节类型,例如 line
, bar
, hist
和 scatter
. 他们将使用与我们迄今为止使用 Matplotlib 所做的相同的代码生成大致相同的图。
我们只会简要地看一下 plot()
功能,因为到目前为止已经探索了潜在的机制。 相反,让我们关注一些我们 不能 已经很容易使用 Matplotlib。
这将是一个非常短的章节,因为与 Matplotlib 相比,Pandas 的绘图和可视化功能显得苍白无力——但了解其中的一些功能以及了解从中绘图的能力仍然很有用 DataFrame
s 直接。
数据框.plot() 功能
plot()
函数接受 x
和 y
功能,以及 kind
争论。 或者,为了避免 kind
参数,你也可以调用 DataFrame.plot.kind()
相反,并传入 x
和 y
功能。
的可接受值 kind
论据是: line
, bar
, barh
(单杠), hist
, box
, kde
, density
(同义词 kde
), area
, pie
, scatter
和 hexbin
(类似于热图)。
import pandas as pd
from matplotlib import pyplot as plt df = pd.read_csv('gdp_csv.csv')
df_eu = df.loc[df['Country Name'] == 'European Union'] df_eu.plot.bar(x = 'Year', y = 'Value')
df_eu.plot.line(x = 'Year', y = 'Value')
df_eu.plot.box(x='Value') plt.show()
而不是提供 Series
像我们为 Matplotlib 所做的那样的实例——它足以提供 列名,并且由于您正在调用 plot()
功能上 DataFrame
您正在可视化,Pandas 很容易将这些字符串值映射到适当的列名。
这些调用中的每一个都会产生一个新的 Figure
实例并在其上绘制适当的值:
在同一个坐标轴上绘制多个坐标轴 Figure
,你可以做一个 Figure
和一个或多个 Axes
通过 plt.subplots()
并分配适当的 Axes
到 ax
每个的参数 plot.plot_type()
拨打:
import pandas as pd
from matplotlib import pyplot as plt df = pd.read_csv('gdp_csv.csv')
df_eu = df.loc[df['Country Name'] == 'European Union'] fig, ax = plt.subplots(3, 1) df_eu.plot.box(x='Value', ax = ax[0])
df_eu.plot.line(x = 'Year', y = 'Value', ax = ax[1])
df_eu.plot.bar(x = 'Year', y = 'Value', rot = 45, ax = ax[2]) plt.show()
一些标准参数,例如 rotation
争论实际上是不同的 plot()
电话。 例如, rotation
缩短为 rot
. 这使得它有点棘手 只是切换 在 Matplotlib 和 Pandas 之间,因为你很可能最终会进入文档页面,只是检查哪些参数可以应用,哪些不能应用。
现在,而不是创建一个新的 Figure
or Axes
例如,这些地块中的每一个都将驻扎在适当的 Axes
我们为他们提供的实例:
一般来说,使用 Pandas 绘图既方便又快捷——但即便如此,要绘制条形图、线图和箱线图,您可能还是希望使用 Matplotlib。 它既是 Pandas 不可避免地使用的底层引擎,也有更多的自定义选项,你不必记住一组可以与 Pandas 绘图一起使用的新参数。
话虽如此,对于某些情节,您可能更喜欢 熊猫,因为它们必须在 Matplotlib 中手动制作,而且其中一些制作起来非常麻烦,不值得付出努力,例如 KDE 行。
熊猫的 绘制 模块
什么是 DataFrame
就可视化而言,我们必须提供的服务对我们来说并不陌生。 但是,他们调用的底层模块, pandas.plotting
做。 的 plotting
模块有几个我们可以使用的函数,比如 autocorrelation_plot()
, bootstrap_plot()
及 scatter_matrix()
.
这些中的每一个都接受一个 Series
或者 DataFrame
,这取决于他们生成的可视化类型,以及用于绘图规范和样式目的的某些参数。
自助图
引导 是随机抽样(有放回)数据集并计算准确度度量的过程,例如 偏见, 方差 和 置信区间 对于随机样本。 “with replacement”,在实际意义上,意味着可以再次选择每个随机选择的元素。 无需更换 意味着在每个随机选择的元素之后,它会从下一个样本的池中移除。
A 自助图,由 Pandas 创建,基于样本引导数据集的均值、中值和中值统计 size
,之后该图随后显示为 plt.show()
. 默认参数为 size
和 samples
,那恭喜你, 50
和 500
。
这意味着对于一个特征,我们采样 50
值。 然后,为这 50 个值生成 50 个元素的子样本(合成数据),并为它们计算汇总统计量(均值/中值/中值)。 重复这个过程 500
次,所以最后,我们得到了 500 个汇总统计数据:
import pandas as pd
from matplotlib import pyplot as plt df = pd.read_csv('./datasets/gdp_csv.csv')
df_eu = df.loc[df['Country Name'] == 'European Union'] pd.plotting.bootstrap_plot(df_eu['Value']) plt.show()
自相关图
自相关图 用于检查时间序列数据的数据随机性。 多种的 自相关 是针对不同的时间戳计算的,如果数据是真正随机的——相关性将接近于零。 如果不是——相关性将大于零。
让我们绘制两个自相关图——一个用我们的 值 功能,一个与 Series
填充随机值:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt df = pd.read_csv('gdp_csv.csv')
# Filter DataFrame for the EU
df_eu = df.loc[df['Country Name'] == 'European Union']
# Generate 50 random integers between 0 and 100, and turn into a Series
random_series = pd.Series(np.random.randint(0, 100, size=50)) # Plot Autocorrelation Plot for the *Value* feature
pd.plotting.autocorrelation_plot(df_eu['Value'])
# Plot Autocorrelation Plot for the *random_series*
pd.plotting.autocorrelation_plot(random_series) plt.show()
的自相关图 random_series
应该围绕 0
,因为它是随机数据,而图 Value
功能不会:
值得注意的是,自相关测量一个 申请 随机性,因为不相关,但非随机数据确实存在。 如果它是非随机的,但没有任何显着的相关性——自相关图将表明数据是随机的。
散点矩阵
散点矩阵 绘制一个 格 所有特征对所有特征的散点图。 由于这不可避免地会将每个特征与其自身进行比较—— 对角线 发生这种情况的地方通常被替换为 直方图 该功能,而不是散点图。 散点矩阵 也被称为 对图,而 Seaborn 提供了一个 pairplot()
功能只是为了这个。
scatter_matrix()
函数接受一个 DataFrame
并为其所有数值特征生成一个散点矩阵,并返回一个二维数组 Axes
构成散点矩阵的实例。 要对它们进行任何调整,您需要遍历它们:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt df = pd.read_csv('worldHappiness2019.csv') axes = pd.plotting.scatter_matrix(df, diagonal='hist') for ax in axes.flatten(): # Rotate back to 0 degrees since they're automatically rotated by 90 ax.yaxis.label.set_rotation(0) # As to not overlap with the Axes instances, set the ticklabel # alignment to 'right' ax.yaxis.label.set_ha('right') plt.show()
这导致所有特征相对于所有其他特征的相当大的散点矩阵:
你也可以传入 diagonal
参数,它接受 'hist'
or 'kde'
指定你想在对角线上绘制什么类型的分布图,以及 alpha
, 指定散点图中标记的半透明度。