欢迎来到雲闪世界。当 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)