当前位置:   article > 正文

高中教学分析系统数据可视化探索【可视化实战案例】_对高中教学系统进行可视化分析,

对高中教学系统进行可视化分析,

目录

前言

导入库


前言

教育行业中大数据分析的主要目的包括改善学生成绩、服务教务设计、优化学生服务等。而学生成绩中有一系列重要的信息往往被我们常规研究所忽视。通过大数据分析和可视化展示,挖掘重要信息,改善 学生服务,对于教学改进意义重大。美国教育部门构建“学习分析系统”,旨在向教育工作者提供了解学生到底是在怎样学习的更好、更好、更精确信息。利用大数据的分析学习能够向教育工作者提供有用的信息,从而帮助其回答众多不易回答的现实问题。未来学生的学习行为画像、考试分数、发展潜力方向等所有重要信息的数据价值将会持续被显现出来,大数据将帮助我们革新学生的学习、教师的教学、教育政策制定的方式与方法等。

比赛官网链接:“数智教育”数据可视化创新大赛

本案例数据来源于天池大数据竞赛中宁波教育局提供的“数智教育”数据可视化创新大赛数据集,数据集共7个CSV文件,所含数据字段如下:

  •  1_teacher.csv:包含了近五年各班各学科的教师信息
字段名字段含义
term学期
cla_id班级ID
cla_Name班级名
gra_Name年级名
sub_id学科ID
sub_Name学科名
bas_id教师id
bas_Name教师名
  • 2_studentinfo.csv:包含了当前在校学生详细信息 
字段名字段含义字段名字段含义
bf_StudentID学生IDBf_ResidenceType家庭类型
bf_Name学生姓名bf_policy政治面貌
bf_sex性别cla_id班级ID
bf_nation民族cla_term班级学期
bf_BornDate出生日期(年)bf_zhusu是否住校
cla_Name班级名(与teacher.csv的cla_name对应)bf_leaveSchool是否退学
bf_NativePlace家庭住址(省市或省)bf_qinshihao宿舍号 
  • 3_kaoqin.csv: 包含学生考勤信息
字段名字段含义字段名字段含义
kaoqin_id考勤IDcontrol_task_order_id对应考勤类型表里的control_task_order_id
qj_term学期bf_studentID学生ID,对应学生信息表
DataDateTime时间和日期bf_Name学生姓名
ControllerID对应考勤类型表里的ControllerIDcla_Name班级名
controler_name考勤名称bf_classid班级ID
  • 4_kaoqintype.csv:考勤类型
字段名字段含义
controler_id考勤类型id
controler_name考勤类型名称
control_task_order_id考勤事件id
control_task_name考勤事件名
  • 5_chengji.csv:学生成绩
字段名字段含义exam_type考试类型(对应考试类型表)
mes_TestID考试idexam_sdate考试开始时间
exam_number考试编码mes_StudentID学生id
exam_numname考试编码名称mes_Score考试成绩(-1为作弊,-2为缺考,-3为免考)
mes_sub_id考试学科idmes_Z_Score换算成Z-score(Z-score、T-score、等第 是一种学生成绩评价方式,可以参考网络百科)
mes_sub_name考试学科名mes_T_Score换算成T-score
exam_term考试学期mes_dengdi换算成等第
  • 6_exam_type.csv:考试类型
字段名字段含义
EXAM_KIND_ID考试类型id
EXAM_KIND_NAME考试类型名称
  • 7_consumption.csv:本学年学生消费信息 
字段名字段含义
 DealTime消费时间
MonDeal消费金额
bf_studentID对应学生信息表studentid

AccName

PerSex

姓名

性别

特别说明:

  1. 1.由于人为登记等不可避免原因,某些字段可能存在缺失或者异常值
  2. 2.从班级名可以看出,从2017年开始学校陆续启用了新校区,2018年新校区统一命名为型为“白-高二(01)”和“东-高二(01)”的班级名
  3. 3.考勤类型中的“校服[移动考勤]”指的是没穿校服3.考勤类型中的“校服[移动考勤]”指的是没穿校服 

导入库

  1. import pandas as pd
  2. import numpy as np
  3. import os
  4. import pyecharts
  5. from pyecharts import options as opts
  6. from pyecharts.charts import *
  7. import seaborn as sns
  8. import matplotlib.pyplot as plt
  9. from pyecharts import *
  10. from pyecharts.faker import Faker
  11. sns.set(font='SimHei', style='white', ) # 解决Seaborn中文显示问题
  12. import warnings
  13. warnings.filterwarnings('ignore')

读取数据 (path为文件目录地址

  1. teacher = pd.read_csv(path+"/1_teacher.csv")
  2. student = pd.read_csv(path+"/2_student_info.csv")
  3. kaoqin =pd.read_csv(path+"/3_kaoqin.csv")
  4. kaoqintype = pd.read_csv(path+"/4_kaoqintype.csv")
  5. chengji = pd.read_csv(path+"/5_chengji.csv")
  6. exam_type = pd.read_csv(path+"6_exam_type.csv")
  7. consumption = pd.read_csv(path+"/7_consumption.csv")

概况信息分析

本案例首先对学校数据进行基础的概况描述,通过可视化图形来对原始数据进行直观的表达,利用基础图形如柱状图、饼状图、旭日图、水滴图等对各年级的人数分布,住宿情况、生源地、政治面貌、家庭类型等进行数据可视化。

1)各年级人数统计分析

首先,通过绘制条形图对学校各年级人数进行统计分析,如图14-42所示,可以看到该学校高一人数最多为702人,高二人数和高三人数为555和508,高三人数最少。

  1. #统计高一高二高三的人数
  2. list1 = ['高一','高二','高三']
  3. list2 = [702,555,508]
  4. s = sns.barplot(x = list2,y = list1)
  5. for container in s.containers:
  6. s.bar_label(container)

 其次通过绘制环形图可以更加清晰地表现出各年级人数占比情况。可以看到高一占比为40%,为全校人数最多的年级,高二和高三占比相似,各占30%左右。可以看出该学校处于扩招状态。

  1. c = (
  2. Pie(init_opts=opts.InitOpts(width="800px", height="500px")) # 图形的大小设置
  3. .add(
  4. series_name="学校人数分布",
  5. data_pair=[list(z) for z in zip(list1, list2)],
  6. radius=["30%", "50%"], # 饼图内圈和外圈的大小比例
  7. center=["30%", "40%"], # 饼图的位置:左边距和上边距
  8. label_opts=opts.LabelOpts(is_show=True), # 显示数据和百分比
  9. )
  10. .set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical")) # 图例在左边和垂直显示
  11. .set_series_opts(label_opts=opts.LabelOpts(position="outside",formatter="{b}:{c}({d}%)"),
  12. tooltip_opts=opts.TooltipOpts(
  13. trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
  14. ),
  15. )
  16. )
  17. c.render_notebook()

 进一步绘制各班级占全校人数之比的饼图,可以看到饼图每个部分都较为均匀,说明每个班级的人数差不多都在40左右,可能不存在尖子班。

  1. attr = student['cla_Name'].value_counts().index.tolist()
  2. v1 = student['cla_Name'].value_counts().values.tolist()
  3. c = (
  4. Pie()
  5. .add("", [list(z) for z in zip(attr,v1)],center=["40%","50%"]) # zip函数两个部分组合在一起list(zip(x,y))-----> [(x,y)]
  6. .set_global_opts(title_opts=opts.TitleOpts(title="各班级占全校人数之比的饼图"),legend_opts=opts.LegendOpts(type_="scroll",pos_left="80%",orient="vertical")) # 标题
  7. .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 数据标签设置
  8. )
  9. c.render_notebook()

 2)住宿生统计分析

通过旭日图和圆环图可以看到,高一住校生占比最大,为63%,高二住校生占比第二,为33%,高三住校生相对较少,仅占年级人数的17%。结合各年级人数分析得到的扩招结论,推测出高一扩招的学生大部分为住校生。

  1. data = [
  2. opts.SunburstItem(
  3. name="高一",
  4. children=[
  5. opts.SunburstItem(name="是", value=442),
  6. opts.SunburstItem(name="否", value=260)
  7. ]
  8. ),
  9. opts.SunburstItem(
  10. name="高二",
  11. children=[
  12. opts.SunburstItem(name="是", value=374),
  13. opts.SunburstItem(name="否", value=181)
  14. ]
  15. ),
  16. opts.SunburstItem(
  17. name="高三",
  18. children=[
  19. opts.SunburstItem(name="是", value=85),
  20. opts.SunburstItem(name="否", value=423)
  21. ]
  22. )]
  23. c = (
  24. Sunburst(init_opts=opts.InitOpts(page_title="住宿生分布旭日图"))
  25. .add(
  26. "人数",
  27. data,
  28. radius=["20%", "85%"],label_opts=opts.LabelOpts(is_show=False, position="center")
  29. )
  30. .set_global_opts(title_opts=opts.TitleOpts(title="住宿生分布旭日图", pos_left="center"))
  31. .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
  32. )
  33. c.render_notebook()

  1. from pyecharts import options as opts
  2. from pyecharts.charts import Pie
  3. from pyecharts.commons.utils import JsCode
  4. c = (
  5. Pie()
  6. .add(
  7. "",
  8. [list(z) for z in zip(["高三走读", "高三住校"], [423.83,85.17])],
  9. center=["20%", "70%"],
  10. radius=[60, 40],
  11. )
  12. .add(
  13. "",
  14. [list(z) for z in zip(["高二走读", "高二住校"], [181.33, 260.37])],
  15. center=["50%", "70%"],
  16. radius=[60, 40],
  17. )
  18. .add(
  19. "",
  20. [list(z) for z in zip(["高一走读", "高一住校"], [260.37, 442.63])],
  21. center=["78%", "70%"],
  22. radius=[60, 40],
  23. )
  24. .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: ({c}%)"), pos_left="40%")
  25. .set_global_opts(
  26. title_opts=opts.TitleOpts(title="住校情况组合圆环图"),
  27. legend_opts=opts.LegendOpts(
  28. type_="scroll", pos_top="20%", pos_left="80%", orient="vertical"
  29. ),
  30. )
  31. )
  32. c.render_notebook()

 3)学生政治面貌分布

通过政治面貌分布可以看到,大约90%的学生都是共青团员,还未 入团的少先队员占8%,还有极少部分的党员和民主党派占2%。

  1. c = (
  2. Pie(init_opts=opts.InitOpts(width="800px", height="500px")) # 图形的大小设置
  3. .add(
  4. series_name="学校人数分布",
  5. data_pair=[list(z) for z in zip(df_student['bf_policy'].value_counts().index.tolist(),df_student['bf_policy'].value_counts().values.tolist())],
  6. radius=["30%", "50%"], # 饼图内圈和外圈的大小比例
  7. center=["50%", "60%"], # 饼图的位置:左边距和上边距
  8. label_opts=opts.LabelOpts(is_show=True), # 显示数据和百分比
  9. )
  10. .set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical")) # 图例在左边和垂直显示
  11. .set_series_opts(label_opts=opts.LabelOpts(position="outside",formatter="{b}:{c}({d}%)"),
  12. tooltip_opts=opts.TooltipOpts(
  13. trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
  14. ),
  15. )
  16. )
  17. c.render_notebook()

 4)学生家庭类型分布

通过学生家庭类型分布图可以看到所有学生家庭类型都是城镇,没有来自农村家庭的学生。

  1. c = (
  2. Pie(init_opts=opts.InitOpts(width="800px", height="500px")) # 图形的大小设置
  3. .add(
  4. series_name="学校人数分布",
  5. data_pair=[list(z) for z in zip(['城市','农村'],[1765,0])],
  6. radius=["30%", "50%"], # 饼图内圈和外圈的大小比例
  7. center=["50%", "60%"], # 饼图的位置:左边距和上边距
  8. label_opts=opts.LabelOpts(is_show=True), # 显示数据和百分比
  9. )
  10. .set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical")) # 图例在左边和垂直显示
  11. .set_series_opts(label_opts=opts.LabelOpts(position="outside",formatter="{b}:{c}({d}%)"),
  12. tooltip_opts=opts.TooltipOpts(
  13. trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
  14. ),
  15. )
  16. )
  17. c.render_notebook()

  1. from pyecharts import options as opts
  2. from pyecharts.charts import Liquid
  3. from pyecharts.globals import SymbolType
  4. c = (
  5. Liquid()
  6. .add("lq", [1,0 ], is_outline_show=False, shape=SymbolType.RECT)
  7. .set_global_opts(title_opts=opts.TitleOpts(title="学生家庭类型分布水滴图"))
  8. )
  9. c.render_notebook()

 3.2食堂人流可视化分析

通过对食堂打卡记录数据分析绘制带时间滑杆的时间序列图,可以通过滑动时间轴来找到需要观察的时间点,从而观察 到每天食堂的高峰期,制定计划来进行食堂分流。通过图可以看到,每天食堂人流量在6:30——7:00是早饭高峰期,12:00左右是午饭高峰期,其次上午的大课间食堂也有两个小高峰,说明学生会在这两个时间段去食堂购买小吃。

3.3学业成绩分析

1)全校考试成绩分布

通过箱线图对各科成绩分布进行可视化分析。1。体育、美术、音乐、信息技术、通用技术等的箱线图长度较短,说明这几个科目的成绩稳定均匀,与之有关的影响较少,在于学生的个人选择及天赋,可不必投入较多资源。2.该学校的数学、英语、语文平均成绩明显较其他科目成绩好,说明该校的主要的教师资源,人力资源主要集中在三大学科上。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/154843
推荐阅读
相关标签
  

闽ICP备14008679号