学生成绩与多项特征相关性分析

1.数据集来源地址:https://www.kaggle.com/datasets/jakwagarba/xapiedudatacsv/data

archive.zip


2.数据集名称:xAPI-Edu-Data.csv,共 17个字段,480条数据,本篇文章旨在研究

大数据对在线教育的意义,故忽略数据集数据量本身较小的问题。 

其中数据集各字段意义如下: 

gender ——性别 

Nationality——国籍 

Placeofbirth——出生地

StageID——教育阶段 

GradeID——年级 

SectionID——班级 

Topic—— 课程主题 

Semester—— 学期 

Relation——谁对学生负责 

raisedhands——学生举手次数 

VisiTedResources- 学生访问课程次数 

AnnouncementsViewing——学生查看通知次数 

Discussion——学生参加讨论组的次数 

ParentAnsweringSurvey——家长回答是否由学校提供的调查 

ParentschoolSatisfaction  —— 家长对学校的满意程度 

Student Absence Days——学生缺席的天数 

class——成绩 

3.

该项目研究主要使用python进行数据分析, 开发环境为anaconda3, conda –version

版本号显示为23.1.0,主要代码编写工具为 Jupyter Notebook。 

该项目代码使用的主要模块版本号如下: 

pandas                                                1.5.3 

matplotlib                                        3.7.0 

seaborn                                              0.12.2 

读者若要使该项目代码能正常运行,可在安装模块时,指定以上版本号进行模块

安装。安装方式如下: 

pip install pandas==1.5.3 

pip install matplotlib==3.7.0 

pip install seaborn==0.12.2

4.

import pandas as pd
import matplotlib.pyplot as plt
sp = pd.read_csv("xAPI-Edu-Data.csv")  # 导入数据
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'
fig1 = plt.figure(facecolor='white', figsize=(20, 40))
ax1 = plt.subplot(6, 3, 1)
plt.pie(sp['gender'].value_counts(), labels=['M', "F"], autopct='%1.1f%%', startangle=0)
plt.axis('equal')
plt.title('性别分布情况')
 
ax1 = plt.subplot(6, 3, 2)
plt.pie(sp['PlaceofBirth'].value_counts(), labels=list(set(sp['PlaceofBirth'].values.T.tolist()[:])), autopct='%1.1f%%',
        startangle=0)
plt.axis('equal')
plt.title('出生地分布情况')
 
ax1 = plt.subplot(6, 3, 3)
plt.pie(sp['StageID'].value_counts(), labels=list(set(sp['StageID'].values.T.tolist()[:])), autopct='%1.1f%%',
        startangle=0)
plt.axis('equal')
plt.title('教育阶段分布情况')
 
ax1 = plt.subplot(6, 3, 4)
plt.pie(sp['GradeID'].value_counts(), labels=list(set(sp['GradeID'].values.T.tolist()[:])), autopct='%1.1f%%',
        startangle=0)
plt.axis('equal')
plt.title('年级分布情况')
 
ax1 = plt.subplot(6, 3, 5)
plt.pie(sp['Relation'].value_counts(), labels=list(set(sp['Relation'].values.T.tolist()[:])), autopct='%1.1f%%',
        startangle=0)
plt.axis('equal')
plt.title('对学生负责情况')
 
ax1 = plt.subplot(6, 3, 6)
plt.pie(sp['raisedhands'].value_counts(), labels=list(set(sp['raisedhands'].values.T.tolist()[:])), autopct='%1.1f%%',
        startangle=0)
plt.axis('equal')
plt.title('学生举手次数情况')
 
ax1 = plt.subplot(6, 3, 7)
plt.pie(sp['SectionID'].value_counts(), labels=list(set(sp['SectionID'].values.T.tolist()[:])), autopct='%1.1f%%',
        startangle=0)
plt.axis('equal')
plt.title('班级分布情况')
 
ax1 = plt.subplot(6, 3, 8)
plt.pie(sp['Topic'].value_counts(), labels=list(set(sp['Topic'].values.T.tolist()[:])), autopct='%1.1f%%', startangle=0)
plt.axis('equal')
plt.title('课程主题情况')
 
ax1 = plt.subplot(6, 3, 9)
plt.pie(sp['Semester'].value_counts(), labels=list(set(sp['Semester'].values.T.tolist()[:])), autopct='%1.1f%%',
        startangle=0)
plt.axis('equal')
plt.title('学期分布情况')

下载.png


由上图分析出:学生中女生数量多于男生,学生的国籍、出生 70%是埃及或叙利亚。学生来自高中最多,小学次之,初中最少。学生年级大多是 4,、7、10年级,班级中A班和C 班较多;学科方面:学 IT 的学生人数最多,其次是法语,人数最少的是历史,学 IT的人数几乎是学历史的 5 倍左右;学生负责人是妈妈比较多;有 60%的学生缺席次数不超过七天,学生成绩等级达到优秀的最多,中等次之。 

import seaborn as sns
plt.rcParams['font.sans-serif']='SimHei'
fig,axes=plt.subplots(2,2)
fig.set_size_inches(20,10)
sns.histplot(sp['raisedhands'],ax=axes[0,0])
sns.histplot(sp['VisITedResources'],ax=axes[0,1])
sns.histplot(sp['AnnouncementsView'],ax=axes[1,0])
sns.histplot(sp['Discussion'],ax=axes[1,1])
axes[0,0].set(xlabel='raisedhands')
axes[0,1].set(xlabel='VisITedResources')
axes[1,0].set(xlabel='AnnouncementsView')
axes[1,1].set(xlabel='Discussion')

下载 (1).png

学生举手次数和访问课程次数比较平均,有学生举手次数或访问课程次数达到100%,也存在学生从不举手或访问课程。大部分学生查看通知和参加讨论的次数较少。 

sns.set(rc={'figure.figsize':(20,7)})
sns.countplot(x='SectionID',hue='Class',hue_order=['L','M','H'],data=sp)
#班级和成绩的关系

下载 (2).png

sns.set(rc={'figure.figsize':(20,7)})
sns.countplot(x='Topic',hue='Class',hue_order=['L','M','H'],data=sp) 
#学科和成绩的相关性

下载 (3).png

sns.set(rc={'figure.figsize':(20,7)})
sns.countplot(x='Relation',hue='Class',hue_order=['L','M','H'],data=sp)
#学生负责人和学生成绩的相关性

下载 (4).png

sns.set(rc={'figure.figsize':(20,7)})
sns.countplot(x='gender',hue='Class',order=['M','F'],hue_order=['L','M','H'],data=sp) 
#性别和成绩的相关性分析

下载 (5).png

由图可以看出班级和成绩分布符合客观规律,每个班级都是中等成绩的数最多;对于12个学科,有 11 个学科都存在着部分同学处于不及格的状态,只有地质学这门课程学生全部达到中等及以上;对于 IT 这门课程,虽然学习的人数最多,但是大部分同学获得的成绩在中等及中等以下,只有少部分学生的成绩达到优秀,说明学生对于这门课程的掌握程度还有待于提升;学习历史的人数最少,但是成绩中等的学生最多,成绩优秀和成绩较差的学生相对较少。学生负责人是母亲的学生学习成绩中优秀的多,中等次之,不及格少,而负责人是父亲的则相反。 


打赏

0 评论

发表评论