【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.pypython 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基础学习专栏
相关推荐
草莓火锅3 小时前
用c++使输入的数字各个位上数字反转得到一个新数
开发语言·c++·算法
j_xxx404_3 小时前
C++ STL:阅读list源码|list类模拟|优化构造|优化const迭代器|优化迭代器模板|附源码
开发语言·c++
DreamNotOver3 小时前
批量转换论文正文引用为上标
开发语言·论文上标
散峰而望3 小时前
C/C++输入输出初级(一) (算法竞赛)
c语言·开发语言·c++·算法·github
fie88894 小时前
基于MATLAB的狼群算法实现
开发语言·算法·matlab
gihigo19984 小时前
MATLAB中生成混淆矩阵
开发语言·matlab·矩阵
dreams_dream4 小时前
Flask
后端·python·flask
曾几何时`4 小时前
C++——this指针
开发语言·c++
小冯的编程学习之路4 小时前
【C++】: C++基于微服务的即时通讯系统(1)
开发语言·c++·微服务