Pandas 数据可视化(手把手讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

引言:为什么选择 Pandas 进行数据可视化?

在数据分析领域,Pandas 数据可视化已成为连接数据与洞察力的重要桥梁。Pandas 作为 Python 中最强大的数据处理库,不仅擅长数据清洗与整理,还能与 Matplotlib、Seaborn 等可视化工具无缝协作。对于编程初学者和中级开发者而言,掌握这一技能组合,能够快速将原始数据转化为直观的图表,从而提升决策效率。

本文将通过循序渐进的讲解,从数据准备、基础图表绘制到高级定制技巧,结合实际案例,帮助读者构建完整的数据可视化工作流。


数据准备:Pandas 的核心角色

1. 数据加载与初步探索

在进行可视化之前,数据必须经过加载和初步检查。Pandas 的 read_csv()read_excel() 等函数能轻松读取多种格式的数据。例如:

import pandas as pd  

df = pd.read_csv("sales_data.csv")  

print(df.head())  

print(df.info())  

比喻解释
可以将数据集想象为一个仓库,每一行代表一个“货架”,每一列代表货架上的不同商品。head() 是快速浏览仓库入口处的陈列,而 info() 则是查看仓库的库存清单,了解每种商品的数量和状态。

2. 数据清洗:为可视化铺平道路

数据中常见的问题包括缺失值、重复条目或格式错误。例如,使用以下代码处理缺失值:

df_cleaned = df.dropna()  

df["sales"].fillna(df["sales"].mean(), inplace=True)  

技巧提示
对于时间序列数据,可先用 pd.to_datetime() 统一日期格式,避免后续图表显示混乱。


基础图表:用 Pandas 快速生成可视化

1. 折线图:展示时间趋势

折线图适合观察数据随时间的变化。结合 Pandas 的 plot() 方法,代码简洁高效:

import matplotlib.pyplot as plt  

df.plot(x="date", y="sales", kind="line", title="Monthly Sales Trend")  
plt.show()  

关键点解释
kind="line" 指定图表类型,xy 参数直接对应 DataFrame 的列名。

2. 柱状图:比较不同类别

若需比较不同产品的销售额,柱状图是理想选择:

category_sales = df.groupby("product").sum()["sales"]  

category_sales.plot(kind="bar", color="skyblue")  
plt.xlabel("Product")  
plt.ylabel("Total Sales")  
plt.show()  

比喻扩展
groupby() 类似于将数据按不同“颜色的分类盒”整理,再统计每个盒子里的总数量。

3. 散点图:探索变量关系

散点图能直观显示两个变量间的相关性:

df.plot(x="ad_spend", y="sales", kind="scatter",  
        title="广告投入与销售额关系")  
plt.xlabel("广告预算(万元)")  
plt.ylabel("销售额(万元)")  
plt.show()  

高级技巧:让图表更专业

1. 使用 Seaborn 增强可视化效果

Seaborn 是基于 Matplotlib 的高级接口,提供更美观的默认样式。例如,绘制带回归线的散点图:

import seaborn as sns  

sns.lmplot(x="ad_spend", y="sales", data=df,  
           height=5, aspect=1.5,  
           line_kws={"color": "red"})  
plt.title("广告投入与销售额的线性关系")  
plt.show()  

技巧对比
Seaborn 的 lmplot() 自动添加回归线,而 Matplotlib 需手动计算并绘制。

2. 自定义图表细节

通过调整颜色、标签和图例,提升可读性:

plt.style.use("ggplot")  

df.plot(kind="bar", stacked=True,  
        y=["online_sales", "offline_sales"],  
        color=["#FF9999", "#66B2FF"])  
plt.title("线上与线下销售额对比")  
plt.ylabel("销售额(万元)")  
plt.legend(title="销售渠道", bbox_to_anchor=(1.05, 1))  

关键参数解释

  • stacked=True 实现堆叠效果。
  • bbox_to_anchor 调整图例位置,避免遮挡图表主体。

案例实战:分析用户行为数据

场景描述

假设我们有一份电商平台的用户行为数据,包含以下字段:
| 列名 | 含义 |
|---------------|--------------------|
| user_id | 用户唯一标识 |
| session_time | 单次访问时长(秒) |
| pages_viewed | 访问页面数 |
| purchase | 是否完成购买(0/1)|
| device_type | 设备类型(手机/电脑)|

分析步骤

1. 探索用户活跃度

绘制不同设备类型的平均访问时长:

device_avg = df.groupby("device_type")["session_time"].mean()  

device_avg.plot(kind="bar", color=["#FF6B6B", "#4ECDC4"])  
plt.title("不同设备的平均访问时长对比")  
plt.ylabel("平均时长(秒)")  
plt.xticks(rotation=0)  # 防止标签重叠  
plt.show()  

2. 分析购买转化率

比较不同页面访问量的转化率:

df["page_bin"] = pd.cut(df["pages_viewed"],  
                        bins=[0, 5, 10, 15],  
                        labels=["1-5页", "6-10页", "11-15页"])  

conversion = df.groupby("page_bin")["purchase"].mean() * 100  

conversion.plot(kind="line", marker="o", markersize=8)  
plt.title("访问页面数与购买转化率关系")  
plt.ylabel("转化率(%)")  
plt.grid(axis="y", linestyle="--", alpha=0.7)  

3. 综合图表:热力图分析

使用热力图展示设备类型与页面访问量的交互影响:

cross_table = pd.crosstab(df["device_type"],  
                         pd.cut(df["pages_viewed"], bins=3))  

sns.heatmap(cross_table, annot=True, fmt="d", cmap="YlGnBu")  
plt.title("设备类型与页面访问量分布")  
plt.xlabel("访问页面区间")  
plt.ylabel("设备类型")  
plt.show()  

结论与扩展建议

通过本文的讲解,读者已掌握从数据加载到高级可视化的完整流程。Pandas 数据可视化的核心价值在于:

  1. 高效整合:Pandas 的数据处理能力与可视化工具的结合,减少了代码冗余。
  2. 灵活性:支持从基础图表到复杂分析的多样化需求。
  3. 可解释性:通过直观的图表,将数据转化为可操作的洞察。

下一步学习方向

  • 探索 Plotly 库,生成交互式图表。
  • 学习 Pandas 的 melt()pivot() 函数,实现复杂数据重塑。
  • 结合机器学习模型,分析可视化数据中的隐藏规律。

掌握这些技能后,无论是商业分析、学术研究,还是个人项目,都能通过数据可视化快速传递价值。


(全文约 1800 字)

最新发布