数据可视化在数据工作中是必不可少的,因为它帮助人们理解我们的数据发生了什么。直接以原始形式摄取数据信息是困难的,但是可视化可以激发人们的兴趣和参与度。这就是为什么学习数据可视化对于在数据领域取得成功是重要的。
Matplotlib是Python最流行的数据可视化库之一,因为它非常灵活,可以从头开始可视化几乎所有东西。您可以使用此包控制可视化的许多方面。
另一方面,Seaborn是一个建立在Matplotlib之上的Python数据可视化包。它提供了更简单的高级代码,并且包内置了各种主题。如果您想要一个快速且外观漂亮的数据可视化,这个包非常好用。
在本文中,我们将探索这两个包,并学习如何使用这些包可视化您的数据。让我们开始吧。
使用Matplotlib进行可视化
如上所述,Matplotlib是一个多功能的Python包,我们可以控制可视化的各个方面。该包基于Matlab编程语言,但我们在Python中应用它。
Matplotlib库通常已经在您的环境中可用,特别是如果您使用Anaconda。如果没有,您可以使用以下代码安装它们。
pip install matplotlib
安装后,我们将使用以下代码导入Matplotlib包进行可视化。
import matplotlib.pyplot as plt
让我们从Matplotlib的基本绘图开始。首先,我会创建样本数据。
import numpy as np
x = np.linspace(0,5,21)
y = x**2
有了这些数据,我们将使用Matplotlib包创建一个折线图。
plt.plot(x, y, 'b')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('示例绘图')
In the code above, we pass the data into the matplotlib function (x and y) to create a simple line plot with a blue line. Additionally, we control the axis label and title with the code above.
让我们尝试使用subplot函数创建多个matplotlib图。
plt.subplot(1,2,1)
plt.plot(x, y, 'b--')
plt.title('子图1')
plt.subplot(1,2,2)
plt.plot(x, y, 'r')
plt.title('子图2')
在上面的代码中,我们创建了两个并排的图。subplot函数控制图的位置;例如,plt.subplot(1,2,1)表示我们将在一行中有两个图(第一个参数)和两列(第二个参数)。第三个参数用于控制我们正在引用的图。因此,plt.subplot(1,2,1)表示单行和双列图的第一个图。
这是Matplotlib函数的基础,但是如果我们想对Matplotlib可视化有更多控制,我们需要使用面向对象方法(OOM)。使用OOM,我们将直接从图形对象生成可视化,并从指定对象调用任何属性。
让我给您一个使用Matplotlib OOM进行可视化的示例。
#创建图形实例(画布)
fig = plt.figure()
#将坐标轴添加到画布上
ax = fig.add_axes([0.1, 0.1, 0.7, 0.7]) #left, bottom, width, height(范围从0到1)
#将图添加到坐标轴上
ax.plot(x, y, 'b')
ax.set_xlabel('X标签')
ax.set_ylabel('Y标签')
ax.set_title('使用OOM绘图')
结果与我们创建的图形相似,但代码更复杂。起初,似乎是逆向的,但使用OOM允许我们几乎可以通过可视化来控制一切。例如,在上面的图中,我们可以控制坐标轴在画布中的位置。
为了看到使用OOM与正常绘图函数相比的差异,让我们将两个具有重叠轴的图形放在一起。
#创建图像实例(画布)
fig = plt.figure()
#将两个轴添加到画布中
ax1 = fig.add_axes([0.1, 0.1, 0.7, 0.7])
ax2 = fig.add_axes([0.2, 0.35, 0.2, 0.4])
#将图形添加到画布中的各个轴中
ax1.plot(x, y, 'b')
ax1.set_xlabel('X轴标签 Ax 1')
ax1.set_ylabel('Y轴标签 Ax 1')
ax1.set_title('使用OOM的图形 Ax 1')
ax2.plot(x, y, 'r--')
ax2.set_xlabel('X轴标签 Ax 2')
ax2.set_ylabel('Y轴标签 Ax 2')
ax2.set_title('使用OOM的图形 Ax 2')
在上面的代码中,我们使用plt.figure函数指定了一个画布对象,并从该figure对象生成了所有这些图形。我们可以在一个画布中产生尽可能多的轴,并在轴中放置可视化图形。
还可以使用subplot函数自动创建图像和轴对象。
fig, ax = plt.subplots(nrows = 1, ncols =2)
ax[0].plot(x, y, 'b--')
ax[0].set_xlabel('X轴标签')
ax[0].set_ylabel('Y轴标签')
ax[0].set_title('使用OOM的子图 1')
使用subplots函数,我们创建了图像和轴对象的列表。在上面的函数中,我们指定了绘图的数量以及一个行中的两个列绘图的位置。
对于轴对象,它是我们可以访问的所有绘图的轴的列表。在上面的代码中,我们访问列表中的第一个对象来创建绘图。结果是两个绘图,一个填充了线条绘图,而另一个只有轴。
由于subplots生成轴对象的列表,您可以类似于下面的代码对它们进行迭代。
fig, axes = plt.subplots(nrows = 1, ncols =2)
for ax in axes:
ax.plot(x, y, 'b--')
ax.set_xlabel('X轴标签')
ax.set_ylabel('Y轴标签')
ax.set_title('使用OOM的图形')
plt.tight_layout()
您可以使用代码来生成所需的绘图。另外,我们使用tight_layout函数,因为存在绘图重叠的可能性。
让我们尝试一些基本的参数,以控制我们的Matplotlib绘图。首先,让我们尝试更改画布和像素大小。
fig = plt.figure(figsize = (8,4), dpi =100)
参数figsize接受一个包含两个数字(宽度、高度)的元组,结果与上面的绘图类似。
接下来,让我们尝试向绘图添加图例。
fig = plt.figure(figsize = (8,4), dpi =100)
ax = fig.add_axes([0.1, 0.1, 0.7, 0.7])
ax.plot(x, y, 'b', label = '第一条线')
ax.plot(x, y/2, 'r', label = '第二条线')
ax.set_xlabel('X轴标签')
ax.set_ylabel('Y轴标签')
ax.set_title('使用OOM和图例的图形')
plt.legend()
通过将标签参数分配给绘图,并使用图例函数,我们可以将标签显示为图例。
最后,我们可以使用以下代码保存我们的绘图。
fig.savefig('visualization.jpg')
除了上面显示的线图之外,还有许多特殊的绘图。我们可以使用这些功能访问这些绘图。让我们尝试一些可能有助于您的工作的绘图。
散点图
我们可以创建一个散点图来可视化特征关系,使用以下代码。
plt.scatter(x,y)
直方图
直方图可视化以柱状图表示的数据分布。
plt.hist(y, bins = 5)
箱线图
箱线图是一种表示数据分布到四分位数的可视化技术。
plt.boxplot(x)
饼图
饼图是一种圆形的绘图,表示分类绘图中的数值比例,例如数据中的分类值的频率。
freq = [2,4,1,3]
fruit = ['Apple', 'Banana', 'Grape', 'Pear']
plt.pie(freq, labels = fruit)
Matplotlib库中还有许多其他特殊绘图,您可以在此处查看。
使用Seaborn进行可视化
Seaborn是一个建立在Matplotlib之上的用于统计可视化的Python包。Seaborn的独特之处在于它简化了使用出色样式创建可视化的过程。该包还与Matplotlib一起使用,因为许多Seaborn API与Matplotlib相关联。
让我们试用一下Seaborn包。如果您尚未安装该包,可以使用以下代码进行安装。
pip install seaborn
Seaborn具有内置的API,可以获取示例数据集,我们可以用这些数据集来测试该包。我们将使用此数据集来创建各种使用Seaborn的可视化。
import seaborn as sns
tips = sns.load_dataset('tips')
tips.head()
使用上述数据,我们将探索Seaborn绘图,包括分布、分类、关系和矩阵绘图。
分布绘图
我们将首先尝试使用Seaborn的分布绘图来可视化数值特征分布。我们可以使用以下代码来实现。
sns.displot(data = tips, x = 'tip')
默认情况下,displot函数将生成一个直方图。如果我们想要平滑绘图,可以使用KDE参数。
sns.displot(data = tips, x = 'tip', kind = 'kde')
分布图还可以根据数据框中的分类值使用hue参数进行分割。
sns.displot(data = tips, x = 'tip', kind = 'kde', hue = 'smoker')
我们甚至可以使用row或col参数进一步分割图表。使用这个参数,我们可以产生多个由分类值组合分割的图表。
sns.displot(data = tips, x = 'tip', kind = 'kde', hue = 'smoker', row = 'time', col = 'sex')
另一种显示数据分布的方法是使用箱线图。Seaborn可以通过以下代码轻松实现可视化。
sns.boxplot(data = tips, x = 'time', y = 'tip')
使用小提琴图,我们可以结合箱线图和KDE显示数据分布。
最后,我们可以通过结合小提琴图和散点图将数据点显示在图表上。
sns.violinplot(data = tips, x = 'time', y = 'tip')
sns.swarmplot(data = tips, x = 'time', y = 'tip', palette = 'Set1')
分类图
分类图是一种适用于生成分类数据可视化的各种Seaborn API。让我们探索一些可用的图表。
首先,我们将尝试创建一个计数图。
sns.countplot(data = tips, x = 'time')
计数图将显示具有分类值频率的条形图。如果我们想在图表中显示计数数字,我们需要将Matplotlib函数与Seaborn API结合起来。
p = sns.countplot(data = tips, x = 'time')
p.bar_label(p.containers[0])
我们可以通过hue参数进一步扩展图表,并使用以下代码显示频率值。
p = sns.countplot(data = tips, x = 'time', hue = 'sex')
for container in p.containers:
ax.bar_label(container)
接下来,我们将尝试开发一个条形图。条形图是一种使用误差棒显示数据聚合的分类图。
sns.barplot(data = tips, x = 'time', y = 'tip')
条形图使用分类和数值特征的组合来提供聚合统计。默认情况下,条形图使用平均聚合函数和置信区间95%的误差棒。
如果我们想要更改聚合函数,可以将函数传递给估计器参数。
import numpy as np
sns.barplot(data = tips, x = 'time', y = 'tip', estimator = np.median)
关系图
关系图是一种可视化技术,用于显示特征之间的关系。主要用于识别数据集中存在的任何模式。
首先,我们将使用散点图来显示某些数值特征之间的关系。
sns.scatterplot(data = tips, x = 'tip', y = 'total_bill')
我们可以使用联合图将散点图与分布图结合起来。
sns.jointplot(data = tips, x = 'tip', y = 'total_bill')
最后,我们可以使用pairplot自动绘制DataFrame中特征之间的成对关系。
sns.pairplot(data = tips)
矩阵图
矩阵图用于将数据可视化为编码颜色的矩阵。它用于查看特征之间的关系或帮助识别数据中的聚类。
例如,我们从数据集中获得了一个相关性数据矩阵。
tips.corr()
如果我们将其以编码颜色的方式表示出来,我们就可以更好地理解上面的数据集。这就是为什么我们要使用热图。
sns.heatmap(tips.corr(), annot = True)
矩阵图还可以生成一个分层聚类图,根据现有的相似性推断数据集中的值并将其聚类。
sns.clustermap(tips.pivot_table(values = 'tip', index = 'size', columns = 'day').fillna(0))
结论
数据可视化是数据世界中至关重要的一部分,它帮助观众快速了解我们的数据发生了什么。用于数据可视化的标准Python包是Matplotlib和Seaborn。在本文中,我们学习了这些包的基本用法以及介绍了几种可以帮助我们工作的可视化方法。 Cornellius Yudha Wijaya是一名数据科学助理经理和数据作家。在全职工作于Allianz Indonesia期间,他喜欢通过社交媒体和写作媒体分享Python和数据技巧。