班级学生数据分析案例

🧩 一、项目背景

在信息化时代背景下,班级管理逐步数字化,如何从原始的学生信息中提取有价值的信息,为班级管理、数据归档、学生发展提供可视化参考,是一个非常具有实践意义的课题。

因此,我使用 Python 开发了一个面向班级学生信息的分析系统,通过数据可视化手段展示学生性别比例、城市与省份分布、签名词云、成绩走势以及宿舍关系图等信息。


🎯 二、系统设计思想

本系统以 Excel 表格为数据源,围绕六个维度展开分析:

  1. 性别结构分析

  2. 城市、省份地域分布

  3. 签名文化分析

  4. 学习成绩趋势

  5. 宿舍关系网络图谱

  6. 头像识别与未来扩展(预留腾讯云人脸识别)

开发采用模块化结构,每个可视化功能均为一个独立函数,便于维护与扩展。


🛠 三、功能模块实现

1. 性别饼状图

通过 matplotlib 绘制性别比例饼图,展示班级男女分布直观情况。

2. 城市柱状图

调用 seaborn 显示前10生源城市,观察地域集中度。

3. 省份地图分布

利用 pyecharts 绘制中国地图,反映各省份生源数量,地图文件保存为 省份地图.html

4. 个性签名词云

使用 jieba 分词+wordcloud 库生成签名词云,呈现出班级文化倾向与常用词汇。

5. 成绩分布折线图

统计并绘制大一到大三各学期的平均名次折线,观察整体学习成绩变化。

6. 宿舍关系网络图

利用 networkx 构建宿舍内部连线图,分析宿舍关系和成员组成。


🧬 四、核心源码展示


import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import networkx as nx
from wordcloud import WordCloud
import jieba
from pyecharts.charts import Map
from pyecharts import options as opts

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 读取数据
file_path = "D:\Desktop\软件222学生详细名单.xlsx"
df = pd.read_excel(file_path)

# 1. 性别饼状图
def plot_gender_pie():
    gender_counts = df['性别'].value_counts()
    plt.figure(figsize=(6, 6))
    plt.pie(gender_counts, labels=gender_counts.index, autopct='%1.1f%%', colors=['lightblue', 'pink'])
    plt.title('班级性别比例')
    plt.show()

# 2. 城市柱状图(前10)
def plot_city_bar():
    city_counts = df['生源城市'].value_counts().head(10)
    plt.figure(figsize=(8, 6))
    sns.barplot(x=city_counts.values, y=city_counts.index, palette='Blues_d')
    plt.title("前十城市分布")
    plt.xlabel("人数")
    plt.ylabel("城市")
    plt.show()

# 3. 省份中国地图分布(使用 pyecharts)
def plot_province_map():
    province_counts = df['生源省份'].value_counts().to_dict()
    map_chart = Map()
    map_chart.add("生源地", [list(z) for z in province_counts.items()], "china")
    map_chart.set_global_opts(title_opts=opts.TitleOpts(title="学生省份分布"))
    map_chart.render("省份地图.html")
    print("中国省份分布图已生成:省份地图.html")

# 4. 人生格言词云
def plot_signature_wordcloud():
    text = ' '.join(df['人生格言'].dropna().astype(str).tolist())
    cut_text = ' '.join(jieba.cut(text))
    wc = WordCloud(font_path='msyh.ttc', background_color='white', width=800, height=600).generate(cut_text)
    plt.figure(figsize=(10, 6))
    plt.imshow(wc, interpolation='bilinear')
    plt.axis('off')
    plt.title('签名词云')
    plt.show()

# 5. 成绩折线图(平均名次)
def plot_score_trend():
    score_cols = ['大一上学期名次', '大一下学期名次', '大二上学期名次', '大二下学期名次', '大三上学期名次']
    df_score = df[score_cols].dropna()
    avg_ranks = df_score.mean(axis=1)
    plt.figure(figsize=(10, 5))
    plt.plot(avg_ranks.values, marker='o')
    plt.title("成绩分布折线图(平均名次)")
    plt.xlabel("学生编号")
    plt.ylabel("平均名次")
    plt.grid(True)
    plt.show()

# 6. 宿舍分布关系图
def plot_dorm_network():
    G = nx.Graph()
    for dorm, group in df.groupby('寝室号'):
        members = group['姓名'].tolist()
        for i in range(len(members)):
            for j in range(i + 1, len(members)):
                G.add_edge(members[i], members[j], dorm=dorm)
    plt.figure(figsize=(10, 10))
    nx.draw(G, with_labels=True, node_color='skyblue', edge_color='gray', node_size=800, font_size=10)
    plt.title("宿舍关系图")
    plt.show()

# 调用全部函数
def run_all():
    plot_gender_pie()
    plot_city_bar()
    plot_province_map()
    plot_signature_wordcloud()
    plot_score_trend()
    plot_dorm_network()

if __name__ == '__main__':
    run_all()

✅ 五、运行效果截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值