Pandas 数据可视化(手把手讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 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"
指定图表类型,x
和 y
参数直接对应 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 数据可视化的核心价值在于:
- 高效整合:Pandas 的数据处理能力与可视化工具的结合,减少了代码冗余。
- 灵活性:支持从基础图表到复杂分析的多样化需求。
- 可解释性:通过直观的图表,将数据转化为可操作的洞察。
下一步学习方向:
- 探索 Plotly 库,生成交互式图表。
- 学习 Pandas 的
melt()
和pivot()
函数,实现复杂数据重塑。 - 结合机器学习模型,分析可视化数据中的隐藏规律。
掌握这些技能后,无论是商业分析、学术研究,还是个人项目,都能通过数据可视化快速传递价值。
(全文约 1800 字)