当 Pandas 足以进行数据可视化时,您不需要 Matplotlib一行代码即可绘制数据,让常规 EDA 工作更加轻松

        欢迎来到 雲闪世界 。使用 Matplotlib、Seaborn 和 Plotly 等数据可视化库非常常见。然而,                       欢迎来到 雲闪世界 在日常的临时 EDA 分析中,我发现我们可能不必使用这些库。事实上,Pandas 库本身可能足以胜任这些工作。

在本文中,我将介绍如何使用 Pandas Plot 生成常见类型的图表,而无需 Matplotlib。实际上,Pandas Plot 在后台使用了 Matplotlib 对象。然而,方便之处在于,我们可以使用一行代码非常轻松地从数据框中绘图。

当然,如果只使用 Pandas Plot,会有很多限制。所以我建议只在足够的情况下使用它。在最后一节中,我还将给出一些 Pandas Plot 无法帮助的场景。希望本文对您有所帮助。

1. 样本数据集

       通常,我的文章都是从安装库开始的。但是,对于 Pandas,我们可以跳过它,因为它太常见了。此外,在大多数环境中,例如 Google Colab 或 Databricks,环境中已经有 Pandas 库。

让我们创建一个示例数据集,可用于本教程中的演示目的。

为了方便起见,我们可以使用 Numpy 来生成随机数。请注意,在实际的数据可视化用例中,我们甚至不需要 Numpy。

import pandas as pd
import numpy as np

# If you want to reproduce exactly the same results
np.random.seed(123)

# Generate sample data
data = {
    'Date': pd.date_range(start='1/1/2024', periods=100),
    'Product_A_Sales': np.random.randint(50, 200, 100),
    'Product_B_Sales': np.random.randint(30, 150, 100),
    'Temperature': np.round(np.random.normal(25, 5, 100), 2),
    'City': np.random.choice(['Sydney', 'Melbourne', 'Adelaide', 'Brisbane', 'Perth'], 100),
    'Revenue': np.random.randint(500, 1000, 100),
    'Profit': np.random.randint(50, 200, 100)
}

df = pd.DataFrame(data)

# Show sample
df.head()

seed(123)是可选的。但是,如果您想尝试本文中的所有示例并期望获得相同的结果,请使用相同的种子数。因此,我们将生成的随机数将是相同的。

因此,我们的数据集是一个模拟宽表,其中包含日期、产品销售统计数据和温度等其他特征。

2. 使用 Pandas 进行绘图及技巧

所有数据可视化教程都从折线图开始,因为它们是最基本的类型。让我们看看如何仅使用 Pandas 创建折线图。

假设我们想绘制产品 A 随时间变化的销售趋势。这很简单,如下所示。

df.plot(kind='line', x='Date', y='Product_A_Sales', title='Product A Sales Over Time');

当我们plot()从数据框调用该方法时,我们只需告诉它我们需要一个折线图kind='line',然后告诉它 x 轴和 y 轴是什么。没有太多例子。太简单了。

但是,你有没有注意到,输出结果很丑陋<Axes:...>?这是因为 Pandas 使用 Matplotlib 在后台生成图表。即使我们不必导入 Matplotlib 并调用它,该方法df.plot()仍然会生成Axes对象。这意味着,在 Jupyter Notebook 或类似 iPython 的环境中,如果我们不plt.show()从 Matplotlib 调用,输出结果将始终如此丑陋。

是真的吗?不完全是 :)

在 Jupyter Notebook 环境中,我们可以使用分号;来抑制单元格中对象的输出。例如,你一定知道我们可以直接输出对象值,如下所示。

但是,如果我们添加分号,对象就不会被输出。

类似地,我们也可以使用该技巧来抑制 Pandas 图的丑陋输出。

3.Pandas Plot 提供哪些功能?

除了上面演示的折线图之外,Pandas Plot 支持大多数常见的图表类型,如上图所示。我只会将代码和示例图表放在下面。

# 1-1 Grouped Bar Chart
df.groupby('City')[['Product_A_Sales', 'Product_B_Sales']].mean().plot(kind='bar', title='Average Sales by City', figsize=(10, 6));

# 1-2 Horizontal Bar Chart
df.groupby('City')['Revenue'].mean().plot(kind='barh', title='Average Revenue by City', figsize=(10, 6), color='skyblue');

# 2-1 Scatter Chart
df.plot(kind='scatter', x='Temperature', y='Product_A_Sales', title='Product A Sales vs Temperature', figsize=(10, 6));

# 2-2 Histogram
df['Temperature'].plot(kind='hist', bins=20, title='Temperature Distribution', figsize=(10, 6));

# 3-1 Stacked Area Chart
df[['Product_A_Sales', 'Product_B_Sales']].plot(kind='area', title='Product Sales Over Time', figsize=(10, 6), alpha=0.5);

# 3-2 Pie Chart
df['City'].value_counts().plot(kind='pie', title='Distribution by City', figsize=(8, 8), autopct='%1.1f%%', startangle=90);

您可能注意到我使用了 Matplotlib 的一些参数。同样,由于 Pandas Plot 在后台使用 Matplotlib,因此所有这些图表类型及其配置都与 Matplotlib 完全相同。

例如,figsize()可以帮助定义图形的大小,color可以帮助自定义颜色代码,并且autopct可以标准化饼图中百分比的小数。

Matplotlib 文档中提供了所有内容,因此我不会在本文中重复。

4. Pandas 在数据可视化方面的局限性

 

在正常的 EDA 活动中,我相信 Pandas Plot 函数足以应付大多数场景。但是,有些场景会达到它的极限。在以下情况下,我们可能必须使用 Matplotlib 或其他可视化库。

需要高级样式和格式

 

当我们需要更高级的样式和格式时,Pandas 图有时无法满足。假设我们想在图表中添加一些注释,例如在散点图中突出显示最高销售价值。

# Pandas Plot Scatter
df.plot(kind='scatter', x='Temperature', y='Product_A_Sales', title='Product A Sales vs Temperature');

# Matplotlib with Annotation
import matplotlib.pyplot as plt

ax = df.plot(kind='scatter', x='Temperature', y='Product_A_Sales', title='Product A Sales vs Temperature')
ax.annotate('Highest Sales', xy=(df['Temperature'].max(), df['Product_A_Sales'].max()), xytext=(30, 180),
            arrowprops=dict(facecolor='gold', shrink=0.05))
plt.show()

专业图表类型

图片由作者创建

当我们需要特殊类型的图表时,Pandas 图可能无法提供帮助,尽管它具有大多数常见类型。例如,Pandas 图可以生成箱线图来展示销售分布。然而,小提琴图可以更好地说明分布。后者可直接从 Seaborn 库中获得。

# Pandas Plot Box Plot
df.boxplot(column='Product_A_Sales', by='City', grid=False);

# Seaborn Violin Plot
import seaborn as sns
import matplotlib.pyplot as plt

sns.violinplot(x='City', y='Product_A_Sales', data=df)
plt.title('Violin Plot of Product A Sales by City')
plt.show()

交互性

 

Pandas 图表是静态的。这意味着,当我们希望可视化更具交互性时,我们必须寻找替代方案,例如鼠标悬停提示和平移手势。Plotly 是我最喜欢的用于生成交互式数据可视化的库之一。

import plotly.express as px

fig = px.scatter(df, x='Temperature', y='Product_A_Sales', title='Product A Sales vs Temperature', hover_data=['Date', 'City'])
fig.show()

结论

       总而言之,很高兴知道 Pandas 可以非常轻松地在任何数据框中绘制我们的数据。因此,在大多数情况下,我们可能不需要使用其他库,包括 Matplotlib。这将使我们的日常 EDA 工作变得更加轻松,因为即使一行代码就足够了。当然,Pandas Plot 无法实现很多功能,本文也对此进行了详细说明。我希望这篇文章会对您有所帮助。

感谢关注雲闪世界。(亚马逊aws谷歌GCP服务协助解决云计算及产业相关解决方案)

 订阅频道(https://t.me/awsgoogvps_Host)
 TG交流群(t.me/awsgoogvpsHost)

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 23:52:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 23:52:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 23:52:02       45 阅读
  4. Python语言-面向对象

    2024-07-22 23:52:02       55 阅读

热门阅读

  1. Discord机器人与Webhooks:构建实时交互

    2024-07-22 23:52:02       14 阅读
  2. 防火墙的经典体系结构及其具体结构

    2024-07-22 23:52:02       12 阅读
  3. ArcGIS Pro SDK (九)几何 8 线段

    2024-07-22 23:52:02       14 阅读
  4. 数据库之字符集

    2024-07-22 23:52:02       10 阅读
  5. WHAT - React Context 两层组件的优化机制

    2024-07-22 23:52:02       16 阅读
  6. Codeforces 923 div3 A-G

    2024-07-22 23:52:02       8 阅读
  7. go语言UTC时间转换为中国时间

    2024-07-22 23:52:02       11 阅读
  8. 《Nginx核心技术》第04章:生成缩略图

    2024-07-22 23:52:02       14 阅读
  9. 大模型日报 2024-07-22

    2024-07-22 23:52:02       15 阅读
  10. 超市111

    超市111

    2024-07-22 23:52:02      15 阅读
  11. PHP 快速入门:构建动态网站的基础

    2024-07-22 23:52:02       13 阅读