【Python数据分析】数据分析与可视化

目录

    • 前言
    • [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. 小结 & 下一步

  1. 本文覆盖了「清洗 → 统计 → 静/动可视化」完整闭环。
  2. 把 sns.load_dataset("tips") 换成 pd.read_csv("你的文件.csv") 即可迁移到真实业务。
  3. 想继续深入:
    • 学 scikit-learn 做预测(回归/分类)
    • 用 Streamlit 把图表打包成 Web 应用
    • 用 JupyterLab 交互式报告一键分享

Enjoy Coding & Happy Analyzing!

结尾

希望对初学者有帮助;致力于办公自动化的小小程序员一枚
希望能得到大家的【❤️一个免费关注❤️】感谢!
求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏
相关推荐
云和数据.ChenGuang9 分钟前
Python 闭包详解:从原理到实战
linux·开发语言·人工智能·python·kubernetes
揣一尾游鱼yu17 分钟前
内部类和Object笔记
java·开发语言·object·内部类
小鱼仙官36 分钟前
Qt 主界面弹出分界面
开发语言·qt
你怎么知道我是队长1 小时前
C++零基础第3周:if/else、switch、for/while/do-while 控制流完全指南(附20段可运行代码+避坑清单)
java·开发语言·c++
冻柠檬飞冰走茶1 小时前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法
damoluomu1 小时前
Node 的 Headless 出厂没有前台,Java 的 Headless 是从门户里长出来的
java·开发语言·node.js
我命由我123451 小时前
Python 实用操作 - 文件操作(打开与关闭文件、读取文件、文件写入)
java·开发语言·前端·javascript·数据库·python·java-ee
青少儿编程课堂2 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析
c++·python·算法·bfs·信息学竞赛
冻柠檬飞冰走茶2 小时前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法
SelectDB2 小时前
Apache Doris 与 SelectDB 是什么关系?从开源技术到面向 Agent 的极速分析数据库
大数据·数据库·数据分析