数据科学项目中的可视化技巧

在任何数据科学项目中,数据可视化是一个至关重要的步骤。它有助于捕捉数据集的趋势,进而帮助采取必要的预处理和模型训练步骤。有许多绘图库可以用来绘制Pandas数据框,包括但不限于Matplotlib、Plotly、Seaborn、Bokeh等。Pandas有自己的绘图API,它在底层使用Matplotlib。这个API提供了许多绘图选项,并支持几乎所有类型的图表。在本文中,将探讨如何使用Pandas绘图API进行绘图,以及如何自定义这些图表以获得更好的外观和解释。

初始化绘图对象

Pandas中,可以通过使用“.plot()”函数来进行绘图。这个函数直接为数据集创建图表。这个函数也可以以两种方式使用。首先,来做准备工作。

import numpy as np import pandas as pd

导入Pandas和Numpy库,以便生成随机数据,稍后用于绘图。

df = pd.DataFrame()

现在,有两种方式使用绘图函数:

  • 使用Plot函数的kind参数:可以通过传递“kind”参数到“plot”函数来指定要渲染的图表类型。“kind”参数接受图表的名称。
  • 直接从plot函数调用图表类型:可以通过将plot函数与图表名称链式调用来直接调用图表类型。

例如,对于折线图,df.plot(kind='line')与df.plot.line()是相同的。

图表类型

Pandas绘图函数提供了许多类型的图表。在Jupyter笔记本中,键入df.plot.后按键盘上的Tab键,将得到所有可用图表的列表。

在本文的其余部分,将直接从plot函数调用图表类型,而不使用“kind”参数访问器。让看看每种图表的实现。

最基本的绘图形式是折线图。在这里,使用数据框的值作为坐标绘制一条线。以下是使用Pandas绘图函数绘制基本折线图的实现。

# 默认情况下,绘图函数的值是折线图,因此可以直接使用绘图函数进行折线图绘制。 # 直接调用函数将为数据集的所有变量/特征/列生成折线图,这可能会生成一个看起来奇怪的图表, # 因此,可以显式定义图表的x和y值。 # 在plot函数生成的任何图表上方,将得到类似“”的文本。为了避免这种文本, # 在绘图代码的最后一行末尾添加分号“;”,这将迫使Python抑制任何文本输出。

以下是一些需要注意的事项:

  • 默认情况下,绘图函数的值是折线图,因此可以直接使用绘图函数进行折线图绘制。
  • 直接调用函数将为数据集的所有变量/特征/列生成折线图,这可能会生成一个看起来奇怪的图表,因此,可以显式定义图表的x和y值。
  • 在plot函数生成的任何图表上方,将得到类似“”的文本。为了避免这种文本,在绘图代码的最后一行末尾添加分号“;”,这将迫使Python抑制任何文本输出。

这是折线图的扩展版本。在面积图中,不是让图表连接数据点,而是用颜色填充线下的区域。这在想展示特定值所捕获的比例时很有帮助。由于可以绘制多个变量,这可以给提供关于变量何时重叠的洞察。

df = pd.DataFrame(np.random.rand(20, 4), columns=['A', 'B', 'C', 'D']) df.plot.area();

也可以通过在area函数中传递“stacked=False”来生成非堆叠图。

条形图用于表示由分类值表示的值。这可能包括特定类别的计数、任何统计数据或其他定义的值。当想要比较一个类别与其他类别时,这些图表很有用。

df = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"]) df.sum().plot.bar();

Barh允许交换轴。因此,将有y轴作为标签/类别,x轴将表示值。

df = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"]) df.sum().plot.barh();

这种图表可视化了连续随机变量的概率密度函数。这并不直接告诉随机变量取值的概率。实际上,对于连续随机变量,任何值的概率都是零,只关心一系列值的概率。它只给出了可能存在于特定值周围的数据点数量。

df = pd.Series(np.random.randn(200)) df.plot.kde();

直方图用于表示数值变量的频率。这些是条形图的变体,变化在于在直方图中,谈论的是数值数据。没有类别,但是数值数据被划分为称为bin的小桶。这些桶接收落在桶范围内的值的数量。直方图也被称为频率多边形,当条形被连接条形中点的线替换时。

df = pd.DataFrame({ "a": np.sqrt(np.random.randn(1000) + 1), "b": np.random.randn(1000), }, columns=["a", "b", "c"]) df.plot.hist(alpha=0.5);

在这里,“alpha”参数定义了直方图颜色的透明度。

这些图表类似于折线图,但在这里每个点的坐标由两个数据框列定义。通常的表示是一个填充的圆圈。这些圆圈不像折线图中那样通过线连接在一起。这有助于理解两个变量之间的相关性。

df = pd.DataFrame(np.random.rand(100, 2), columns=['a', 'b']) df.plot.scatter(x='a', y='b');

箱线图是非常重要的图表。这些图表有助于理解数据集特征的整体趋势和分布。对于数值数据,它表示50%的数据在哪里,数据的中位数在哪里,它还以须的形式指定边界条件。

df = pd.DataFrame(np.random.rand(50, 3), columns=["A", "B", "C"]) df.plot.box();

当数据非常密集时,这些图表可以作为散点图的替代品。它们以蜂窝的形式表示数据,即图表中的六边形。它也被称为六边形分箱图,因为它将直方图中的箱功能以六边形的形式结合起来。每个六边形的颜色定义了该范围内的点数。

df = pd.DataFrame(np.random.randn(1000, 2), columns=["a", "b"]) df["b"] = df["b"] + np.arange(1000) df.plot.hexbin(x="a", y="b", gridsize=25);

在这里,网格大小控制x方向上的六边形数量。默认情况下,它是100。

饼图用于表示一个值与其他值相比在整个部分中所占的比例。它们表示一个值对圆形区域的贡献百分比,并用颜色填充。它们在每个项目中都被广泛使用,同时也被劝阻!因为要表示一个数值部分,分配了大量的空间,并且用颜色填充了区域。相反,环形图被高度鼓励,因为它们需要较少的颜色量,而且它们可以被制作为嵌套饼图,这比常规饼图传达了更多的信息。

series = pd.Series(3 * np.random.rand(4), index=["a", "b", "c", "d"], name="Pie plot") series.plot.pie(figsize=(6, 6));

“figsize”参数用于控制生成的图表的大小。

自定义图表

由Pandas API生成的图表并不是最好看的,需要快速改造以改善通过它们传达的信息。尽管这些图表可以快速创建,但有一些调整可以让让它们看起来更有吸引力:

  • 改变绘图风格。例如,在折线图中,可以使线条成为“*”或其他特殊字符线。
  • 控制图表的图例,将其放置在不隐藏图表细节的位置。
  • 更改轴标签的默认名称。
  • 根据生成的图表控制轴的比例。
  • 旋转轴的刻度,以获得更好的观看体验,并且它可以更容易地容纳较长的标签。
  • 用误差条绘制条形图,以增加提供的信息。
  • 使用好的色图来区分图表的不同特征。
  • LinkedIn –
  • Twitter –
  • GitHub –
  • Medium –
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485