Python 数据分析与可视化 Day 5 - 数据可视化入门(Matplotlib & Seaborn)

🎯 今日目标

  • 掌握 Matplotlib 的基本绘图方法(折线图、柱状图、饼图)
  • 掌握 Seaborn 的高级绘图方法(分类图、分布图、箱线图)
  • 熟悉图像美化(标题、标签、颜色、风格)
  • 完成一组学生成绩数据的可视化展示

🧱 一、Matplotlib 基础绘图

python 复制代码
import matplotlib.pyplot as plt

# 示例数据
names = ["张三", "李四", "王五", "赵六"]
scores = [88, 92, 75, 60]

# 折线图
plt.plot(names, scores, marker="o")
plt.title("学生成绩折线图")
plt.xlabel("姓名")
plt.ylabel("成绩")
plt.grid(True)
plt.show()

✅ 常见图表类型

python 复制代码
# 柱状图
plt.bar(names, scores)

# 饼图
plt.pie(scores, labels=names, autopct="%.1f%%")

# 保存图像
plt.savefig("charts/score_chart.png")

🌈 二、Seaborn 入门(更美观 + 高级)

python 复制代码
import seaborn as sns
import pandas as pd

# 示例 DataFrame
df = pd.DataFrame({
    "姓名": names,
    "成绩": scores,
    "性别": ["男", "女", "男", "女"]
})

# 设置风格
sns.set_style("whitegrid")

# 分类柱状图
sns.barplot(data=df, x="姓名", y="成绩", hue="性别")
plt.title("学生成绩(按性别)")
plt.show()

🎨 三、其他 Seaborn 图示示例

python 复制代码
# 成绩分布直方图
sns.histplot(df["成绩"], bins=5)

# 箱线图:成绩分布(可识别异常值)
sns.boxplot(data=df, x="性别", y="成绩")

# 成绩与是否及格关系散点图(需添加字段)
sns.scatterplot(data=df, x="成绩", y="是否及格")

🧪 今日练习任务

使用 students_cleaned.csv (前两天清洗的表格数据)文件,完成以下图表:

  1. 所有学生成绩的折线图 & 柱状图

  2. 不同性别的平均成绩柱状图

  3. 所有学生成绩分布直方图

  4. 学生成绩箱线图(按性别分组)

  5. 将所有图像保存为 PNG 图片到 charts/ 文件夹

    python 复制代码
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    import os
    
    rc = {'font.sans-serif': 'Arial Unicode MS',
          'axes.unicode_minus': False}
    # 设置中文字体支持(如 matplotlib 出现乱码)
    plt.rcParams['font.family'] = 'Arial Unicode MS'  # Mac 用户可用
    # plt.rcParams['font.sans-serif'] = ['SimHei']   # Windows 用户用这行
    plt.rcParams['axes.unicode_minus'] = False
    
    # 路径设置
    input_path = "data/students_cleaned.csv"
    output_dir = "charts"
    os.makedirs(output_dir, exist_ok=True)
    
    # 加载数据
    df = pd.read_csv(input_path)
    print("✅ 已加载学生数据:")
    print(df.head())
    
    # -------- 图表 1:学生成绩折线图 --------
    plt.figure(figsize=(8, 5))
    plt.plot(df["姓名"], df["成绩"], marker='o')
    plt.title("学生成绩折线图")
    plt.xlabel("姓名")
    plt.ylabel("成绩")
    plt.grid(True)
    plt.tight_layout()
    plt.savefig(f"{output_dir}/成绩折线图.png")
    plt.close()
    
    # -------- 图表 2:学生成绩柱状图 --------
    plt.figure(figsize=(8, 5))
    plt.bar(df["姓名"], df["成绩"], color="skyblue")
    plt.title("学生成绩柱状图")
    plt.xlabel("姓名")
    plt.ylabel("成绩")
    plt.tight_layout()
    plt.savefig(f"{output_dir}/成绩柱状图.png")
    plt.close()
    
    # -------- 图表 3:不同性别的平均成绩柱状图 --------
    plt.figure(figsize=(6, 4))
    sns.set(style="whitegrid", rc=rc)
    avg_by_gender = df.groupby("性别")["成绩"].mean().reset_index()
    sns.barplot(data=avg_by_gender, x="性别", y="成绩", hue='性别', palette="Set2", legend=False)
    plt.title("不同性别的平均成绩")
    plt.tight_layout()
    plt.savefig(f"{output_dir}/性别平均成绩柱状图.png")
    plt.close()
    
    # -------- 图表 4:成绩分布直方图 --------
    plt.figure(figsize=(6, 4))
    sns.histplot(df["成绩"], bins=5, kde=True, color="orange")
    plt.title("成绩分布直方图")
    plt.xlabel("成绩")
    plt.tight_layout()
    plt.savefig(f"{output_dir}/成绩分布直方图.png")
    plt.close()
    
    # -------- 图表 5:成绩箱线图(按性别) --------
    plt.figure(figsize=(6, 4))
    sns.boxplot(data=df, x="性别", y="成绩", hue="性别", palette="Pastel1", legend=False)
    plt.title("成绩箱线图(按性别)")
    plt.tight_layout()
    plt.savefig(f"{output_dir}/成绩箱线图_按性别.png")
    plt.close()
    
    print(f"\n✅ 所有图表已生成并保存至:{output_dir}/")



✍️ 今日总结

  • 掌握了 Matplotlib 基本图形绘制技巧
  • 掌握了 Seaborn 的分类、分布图制作方法
  • 能基于清洗后的数据完成完整的图形展示
  • 理解了图表选择和美化对表达分析结论的重要性
相关推荐
笨鸟先飞,勤能补拙5 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能6 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂6 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study7 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境8 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境8 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1238 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102168 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb009 小时前
一个项目带你入门AI应用开发01
python
0566469 小时前
Python康复训练——常用标准库
开发语言·python·学习