目录
-
- 前言
- [1. 写在前面](#1. 写在前面)
- [2. 环境一键安装](#2. 环境一键安装)
- [3. 核心库 5 行速览](#3. 核心库 5 行速览)
- [4. 数据载入 & 初探](#4. 数据载入 & 初探)
- [5. 数据清洗 + 特征工程](#5. 数据清洗 + 特征工程)
- [6. 描述性统计:分组洞察](#6. 描述性统计:分组洞察)
- [7. 可视化:静动结合](#7. 可视化:静动结合)
-
- [7.1 静态图(matplotlib / seaborn)](#7.1 静态图(matplotlib / seaborn))
- [7.2 交互图(plotly)](#7.2 交互图(plotly))
- [8. 时间序列(扩展)](#8. 时间序列(扩展))
- [9. 一键运行完整脚本](#9. 一键运行完整脚本)
- [10. 小结 & 下一步](#10. 小结 & 下一步)
专栏导读
🌸 欢迎来到Python办公自动化专栏---Python处理办公问题,解放您的双手
🏳️🌈 个人博客主页:请点击------> 个人的博客主页 求收藏
🏳️🌈 Github主页:请点击------> Github主页 求Star⭐
🏳️🌈 知乎主页:请点击------> 知乎主页 求关注
🏳️🌈 CSDN博客主页:请点击------> CSDN的博客主页 求关注
👍 该系列文章专栏:请点击------>Python办公自动化专栏 求订阅
🕷 此外还有爬虫专栏:请点击------>Python爬虫基础专栏 求订阅
📕 此外还有python基础专栏:请点击------>Python基础学习专栏 求订阅
文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
❤️ 欢迎各位佬关注! ❤️
前言
日期:2025-11-12
关键词:pandas、seaborn、plotly、数据分析、可视化
1. 写在前面
数据分析 ≠ 写代码,它是一套「获取 → 清洗 → 探索 → 可视化 → 洞察」的流水线。
本文用一份「餐厅小费」公开数据集,带你 15 分钟跑通整条流水线,代码全部可复现。
2. 环境一键安装
bash
# 建议使用 Python 3.9+
pip install pandas==2.1 numpy==1.26 seaborn==0.12 matplotlib==3.8 plotly==5.18
3. 核心库 5 行速览
| 库 | 用途 | 本文关键函数 |
|---|---|---|
| pandas | 表格数据神器 | read_csv / groupby / merge |
| numpy | 向量化计算 | np.where / np.mean |
| seaborn | 高颜值静态图 | sns.boxplot / sns.heatmap |
| matplotlib | 基础绘图 & 微调 | plt.tight_layout / plt.show |
| plotly | 交互式图表,鼠标悬停 | px.scatter / px.bar |
4. 数据载入 & 初探
python
import pandas as pd, numpy as np, seaborn as sns, matplotlib.pyplot as plt, plotly.express as px
# seaborn 自带「餐厅小费」数据集,直接加载
df = sns.load_dataset("tips")
print("维度:", df.shape) # (244, 7)
print(df.head())
print(df.info()) # 无缺失,无中文
5. 数据清洗 + 特征工程
python
# 1) 缺失值------本文数据集已干净,无需处理
# 2) 构造新字段
df["tip_pct"] = df["tip"] / df["total_bill"] # 小费率
df["is_weekend"] = df["day"].isin(["Sat", "Sun"]) # 是否周末
print(df[["total_bill", "tip", "tip_pct"]].describe())
6. 描述性统计:分组洞察
python
# 按「星期」看平均小费率
week_stats = df.groupby("day")["tip_pct"].agg(["mean", "std"]).round(3)
print(week_stats)
# 透视表:性别 × 抽烟 的账单均值
pivot = df.pivot_table(values="total_bill", index="sex", columns="smoker", aggfunc="mean")
print(pivot)
7. 可视化:静动结合
7.1 静态图(matplotlib / seaborn)
python
# 1) 小费占比分布
plt.figure(figsize=(5, 3))
sns.histplot(df["tip_pct"], bins=20, kde=True)
plt.title("Distribution of Tip Percentage")
plt.tight_layout(); plt.show()
# 2) 性别 vs 小费箱线图
plt.figure(figsize=(4, 4))
sns.boxplot(x="sex", y="tip_pct", data=df)
plt.title("Tip % by Gender")
plt.tight_layout(); plt.show()
# 3) 相关性热力图
corr = df[["total_bill", "tip", "size", "tip_pct"]].corr(method="pearson")
plt.figure(figsize=(4, 3))
sns.heatmap(corr, annot=True, fmt=".2f", cmap="coolwarm", vmin=-1, vmax=1)
plt.title("Correlation Matrix")
plt.tight_layout(); plt.show()
7.2 交互图(plotly)
python
# 散点:账单 vs 小费,颜色=星期,大小=用餐人数
fig = px.scatter(df, x="total_bill", y="tip", color="day",
size="size", hover_data=["sex", "smoker"],
title="Interactive: Bill vs Tip")
fig.update_layout(width=600, height=400)
fig.show()
8. 时间序列(扩展)
tips 本身没有时间戳,我们可以伪造一个日期字段做演示:
python
# 假设数据从 2024-01-01 开始,每日递增
df["date"] = pd.date_range("2024-01-01", periods=len(df), freq="D")
ts = df.set_index("date").resample("W")["total_bill"].sum()
ts.plot(figsize=(6, 3), title="Weekly Total Bill")
plt.tight_layout(); plt.show()
9. 一键运行完整脚本
把下面内容保存为 analysis.py,python analysis.py 即可出图。
python
# analysis.py
import pandas as pd, numpy as np, seaborn as sns, matplotlib.pyplot as plt, plotly.express as px
def main():
df = sns.load_dataset("tips")
df["tip_pct"] = df["tip"] / df["total_bill"]
df["is_weekend"] = df["day"].isin(["Sat", "Sun"])
print("Grouped by day:")
print(df.groupby("day")["tip_pct"].mean().round(3))
plt.figure(figsize=(5, 3))
sns.histplot(df["tip_pct"], bins=20, kde=True)
plt.title("Tip % Distribution")
plt.tight_layout()
plt.savefig("tip_pct_dist.png", dpi=300)
fig = px.scatter(df, x="total_bill", y="tip", color="day",
size="size", hover_data=["sex", "smoker"])
fig.write_html("interactive_scatter.html")
print("Done! 已生成 tip_pct_dist.png 与 interactive_scatter.html")
if __name__ == "__main__":
main()
10. 小结 & 下一步
- 本文覆盖了「清洗 → 统计 → 静/动可视化」完整闭环。
- 把
sns.load_dataset("tips")换成pd.read_csv("你的文件.csv")即可迁移到真实业务。 - 想继续深入:
- 学
scikit-learn做预测(回归/分类) - 用
Streamlit把图表打包成 Web 应用 - 用
JupyterLab交互式报告一键分享
- 学
Enjoy Coding & Happy Analyzing!
结尾
希望对初学者有帮助;致力于办公自动化的小小程序员一枚
希望能得到大家的【❤️一个免费关注❤️】感谢!
求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏