用python对学生成绩进行预测
一、提出问题
1.影响学生考试成绩的因素都有哪些?
二、理解数据
0. 采集数据
采集到的数据文件为:xAPI-Edu-Data.csv
-
数据说明
gender ——性别 Nationality——国籍 Placeofbirth——出生地 StageID——教育阶段 GradeID——年级 SectionID——班级 Topic—— 课程主题 Semester- 学期 Relation——谁对学生负责 raisedhands——学生举手次数 VisiTedResources- 学生访问课程次数 AnnouncementsViewing——学生查看通知次数 Discussion——学生参加讨论组的次数 ParentAnsweringSurvey——家长回答是否由学校提供的调查 ParentschoolSatisfaction —— 家长对学校的满意程度 Student Absence Days——学生缺席的天数 class——成绩
1. 导入数据
-
代码
# 1.导入数据 import pandas as pd sp=pd.read_csv("xAPI-Edu-Data.csv") #导入数据
2.查看数据集信息
2.1 查看数据集大小
-
代码
print("数据集大小",sp.shape)
-
结果
数据集大小 (480, 17)
2.2 查看各字段数据类型,缺失值
-
代码
# 2.2 查看各字段数据类型,缺失值 print(sp.info())
-
结果
RangeIndex: 480 entries, 0 to 479 Data columns (total 17 columns): gender 480 non-null object NationalITy 480 non-null object PlaceofBirth 480 non-null object StageID 480 non-null object GradeID 480 non-null object SectionID 480 non-null object Topic 480 non-null object Semester 480 non-null object Relation 480 non-null object raisedhands 480 non-null int64 VisITedResources 480 non-null int64 AnnouncementsView 480 non-null int64 Discussion 480 non-null int64 ParentAnsweringSurvey 480 non-null object ParentschoolSatisfaction 480 non-null object StudentAbsenceDays 480 non-null object Class 480 non-null object dtypes: int64(4), object(13) memory usage: 63.8+ KB None
2.3 观察数据统计描述
-
代码
# 2.3 观察数据统计描述 sp.describe() #仅对数值型数据进行统计
-
结果
raisedhands VisITedResources AnnouncementsView Discussion count 480.000000 480.000000 480.000000 480.000000 mean 46.775000 54.797917 37.918750 43.283333 std 30.779223 33.080007 26.611244 27.637735 min 0.000000 0.000000 0.000000 1.000000 25% 15.750000 20.000000 14.000000 20.000000 50% 50.000000 65.000000 33.000000 39.000000 75% 75.000000 84.000000 58.000000 70.000000 max 100.000000 99.000000 98.000000 99.000000 -
分析
<1> 整体数据不存在缺失值。
<2> 类别型变量较多。
<3> 数字型变量不存在较明显异常值。
3.数据预处理(有无缺失值,有无异常值)
4.相关性分析
4.1 单变量分析
4.1.1 类别型变量分析
-
代码
# 4.1.1 类别型变量分析 import matplotlib.pyplot as plt %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['NationalITy'].value_counts(),labels=list(set(sp['NationalITy'].values.T.tolist()[:])),autopct='%1.1f%%',startangle=0) plt.axis('equal') plt.title('国籍分布情况') ax1=plt.subplot(6,3,3) 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,4) 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,5) 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,6) 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,7) 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,8) 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,9) 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,10) plt.pie(sp['Semester'].value_counts(),labels=list(set(sp['Semester'].values.T.tolist()[:])),autopct='%1.1f%%',startangle=0) plt.axis('equal') plt.title('学期分布情况') ax1=plt.subplot(6,3,11) plt.pie(sp['ParentAnsweringSurvey'].value_counts(),labels=list(set(sp['ParentAnsweringSurvey'].values.T.tolist()[:])),autopct='%1.1f%%',startangle=0) plt.axis('equal') plt.title('家长回答是否由学校提供的调查情况') ax1=plt.subplot(6,3,12) plt.pie(sp['ParentschoolSatisfaction'].value_counts(),labels=list(set(sp['ParentschoolSatisfaction'].values.T.tolist()[:])),autopct='%1.1f%%',startangle=0) plt.axis('equal') plt.title('家长对学校的满意程度情况')
-
结果
-
分析
<1> 学生中女生数量多于男生,学生的国籍、出生70%是埃及或叙利亚。学生来自高中最多,小学次之,初中最少。学生年级大多是4,、7、10年级,班级中A班和C班较多。
<2> 学科方面:学IT的学生人数最多,其次是法语,人数最少的是历史,学it的人数几乎是学历史的5倍左右。
<3> 学生负责人是妈妈比较多,超过60%的家长对学校满意。
<4> 有60%的学生缺席次数不超过七天,学生成绩等级达到优秀的最多,中等次之。
4.1.2 数值型变量分析
-
代码
# 4.1.2 数值型变量分析 import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline plt.rcParams['font.sans-serif']='SimHei'# 设置全局字体,会被局部字体顶替 fig,axes=plt.subplots(2,2) fig.set_size_inches(20,10) sns.distplot(sp['raisedhands'],ax=axes[0,0]) sns.distplot(sp['VisITedResources'],ax=axes[0,1]) sns.distplot(sp['AnnouncementsView'],ax=axes[1,0]) sns.distplot(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> 学生举手次数和访问课程次数比较平均,有学生举手次数或访问课程次数达到100%,也存在学生从不举手或访问课程。
<2> 大部分学生查看通知和参加讨论的次数较少。
4.2 多变量分析
4.2.1 家长回答是否由学校提供的调查和成绩的相关性分析
-
代码
# 4.2.1 家长回答是否由学校提供的调查和成绩的相关性分析 sns.set(rc={'figure.figsize':(20,7)}) sns.countplot(x='ParentAnsweringSurvey',hue='Class',hue_order=['L','M','H'],data=sp)
-
结果
4.2.2 学科和成绩的相关性分析
-
代码
# 4.2.2 学科和成绩的相关性分析 sns.set(rc={'figure.figsize':(20,7)}) sns.countplot(x='Topic',hue='Class',hue_order=['L','M','H'],data=sp)
-
结果
-
分析
<1> 对于12个学科,有11个学科都存在着部分同学处于不及格的状态,只有地质学这门课程学生全部达到中等及以上。
<2> 对于IT这门课程,虽然学习的人数最多,但是大部分同学获得的成绩在中等及中等以下,只有少部分学生的成绩达到优秀,说明学生对于这门课程的掌握程度还有待于提升;
<3> 学习历史的人数最少,但是成绩中等的学生最多,成绩优秀和成绩较差的学生相对较少。
4.2.3 班级和成绩的相关性分析
-
代码
# 4.2.3 班级和成绩的相关性分析(SectionID:班级) sns.set(rc={'figure.figsize':(20,7)}) sns.countplot(x='SectionID',hue='Class',hue_order=['L','M','H'],data=sp)
-
结果
-
分析
<1> 班级和成绩分布符合客观规律,每个班级都是中等成绩的人数最多。
4.2.4 学生负责人和学生成绩的相关性
-
代码
# 4.2.4 学生负责人和学生成绩的相关性 sns.set(rc={'figure.figsize':(20,7)}) sns.countplot(x='Relation',hue='Class',hue_order=['L','M','H'],data=sp)
-
结果
-
分析
<1> 学生负责人是母亲的学生学习成绩中优秀的多,中等次之,不及格少,而负责人是父亲的则相反。
4.2.5 性别和成绩的相关性分析
-
代码
# 4.2.5 性别和成绩的相关性分析 sns.set(rc={'figure.figsize':(20,7)}) sns.countplot(x='gender',hue='Class',order=['M','F'],hue_order=['L','M','H'],data=sp)
-
结果
-
分析
<1> 男生中取得中等成绩的最多,其次是不及格的人数,成绩优秀的占比较小。而女生中大部分人取得中等及其以上,只有小部分人不及格,整体水平较好。
4.2.6 学生举手次数和成绩的相关性分析
-
代码
# 4.2.6 学生举手次数和成绩的相关性分析 sns.set(rc={'figure.figsize':(20,7)}) sns.countplot(x='raisedhands',hue='Class',hue_order=['L','M','H'],data=sp)
-
结果
三、建立决策树模型
0.算法思想:
决策树( decision tree )是一个树结构其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。决策树模型核心是下面几部分:
- 结点和有向边组成
- 结点有内部结点和叶结点俩种类型
- 内部结点表示一个特征,叶节点表示一个类.
1.特征选择和查看相关系数
1.1 计算各个特征的相关系数
-
代码
# 1.1 计算各个特征的相关系数 s=pd.get_dummies(sp)#把所有的非数值型变量转化为数值型 corrDf = s.corr() #计算各个特征的相关系数 corrDf
-
结果
raisedhands VisITedResources AnnouncementsView Discussion gender_F gender_M NationalITy_Egypt NationalITy_Iran NationalITy_Iraq NationalITy_Jordan … Relation_Mum ParentAnsweringSurvey_No ParentAnsweringSurvey_Yes ParentschoolSatisfaction_Bad ParentschoolSatisfaction_Good StudentAbsenceDays_Above-7 StudentAbsenceDays_Under-7 Class_H Class_L Class_M raisedhands 1.000000 0.691572 0.643918 0.339386 0.149978 -0.149978 -0.024964 -0.094925 0.192443 0.050686 … 0.364237 -3.165704e-01 3.165704e-01 -0.297015 0.297015 -0.463882 0.463882 0.495681 -0.582997 0.062315 VisITedResources 0.691572 1.000000 0.594500 0.243292 0.210932 -0.210932 0.005028 -0.081024 0.192773 0.191266 … 0.360240 -3.824715e-01 3.824715e-01 -0.363835 0.363835 -0.499030 0.499030 0.469735 -0.662061 0.156442 AnnouncementsView 0.643918 0.594500 1.000000 0.417290 0.052139 -0.052139 0.031622 -0.051854 0.154318 0.126169 … 0.339505 -3.963565e-01 3.963565e-01 -0.298744 0.298744 -0.312134 0.312134 0.376987 -0.504153 0.101392 Discussion 0.339386 0.243292 0.417290 1.000000 0.124703 -0.124703 0.010264 -0.003192 0.055484 -0.006725 … 0.026720 -2.321965e-01 2.321965e-01 -0.061104 0.061104 -0.218778 0.218778 0.243656 -0.270451 0.016300 gender_F 0.149978 0.210932 0.052139 0.124703 1.000000 -1.000000 -0.040886 -0.046264 -0.041827 0.147061 … 0.195142 -2.235860e-02 2.235860e-02 -0.093478 0.093478 -0.209011 0.209011 0.220294 -0.218841 -0.008085 gender_M -0.149978 -0.210932 -0.052139 -0.124703 -1.000000 1.000000 0.040886 0.046264 0.041827 -0.147061 … -0.195142 2.235860e-02 -2.235860e-02 0.093478 -0.093478 0.209011 -0.209011 -0.220294 0.218841 0.008085 NationalITy_Egypt -0.024964 0.005028 0.031622 0.010264 -0.040886 0.040886 1.000000 -0.015552 -0.030296 -0.103300 … 0.072009 3.289629e-02 -3.289629e-02 -0.047985 0.047985 0.044519 -0.044519 -0.022294 0.021544 0.001354 NationalITy_Iran -0.094925 -0.081024 -0.051854 -0.003192 -0.046264 0.046264 -0.015552 1.000000 -0.024658 -0.084077 … 0.058609 1.417478e-02 -1.417478e-02 0.024970 -0.024970 0.061775 -0.061775 -0.072924 0.017535 0.051475 NationalITy_Iraq 0.192443 0.192773 0.154318 0.055484 -0.041827 0.041827 -0.030296 -0.024658 1.000000 -0.163782 … -0.020843 -1.129609e-01 1.129609e-01 -0.175860 0.175860 -0.056056 0.056056 0.163521 -0.131460 -0.033536 NationalITy_Jordan 0.050686 0.191266 0.126169 -0.006725 0.147061 -0.147061 -0.103300 -0.084077 -0.163782 1.000000 … 0.197918 4.160100e-02 -4.160100e-02 -0.012164 0.012164 0.040462 -0.040462 0.020149 -0.083802 0.055950 NationalITy_KW -0.258474 -0.332290 -0.321603 0.019081 -0.100790 0.100790 -0.106599 -0.086762 -0.169014 -0.576278 … -0.293083 4.939254e-02 -4.939254e-02 0.175563 -0.175563 0.077216 -0.077216 -0.160031 0.201578 -0.031989 NationalITy_Lybia -0.122978 -0.165005 -0.123098 -0.160083 -0.007305 0.007305 -0.015552 -0.012658 -0.024658 -0.084077 … 0.134849 1.275730e-01 -1.275730e-01 -0.090276 0.090276 0.138394 -0.138394 -0.072924 0.187574 -0.099644 NationalITy_Morocco 0.034212 0.007496 0.083903 0.018151 -0.021823 0.021823 -0.012672 -0.010314 -0.020091 -0.068504 … 0.063283 5.774658e-02 -5.774658e-02 0.067295 -0.067295 -0.027703 0.027703 -0.009205 -0.003031 0.011159 NationalITy_Palestine 0.281380 0.160496 0.203729 0.087273 -0.040784 0.040784 -0.034405 -0.028002 -0.054549 -0.185994 … 0.045326 -7.615359e-02 7.615359e-02 -0.199709 0.199709 -0.166017 0.166017 0.072384 -0.149288 0.066115 NationalITy_SaudiArabia 0.044137 0.010627 0.071171 0.062471 -0.000301 0.000301 -0.021170 -0.017230 -0.033565 -0.114446 … -0.099473 -5.086803e-02 5.086803e-02 0.076773 -0.076773 -0.010726 0.010726 0.083759 -0.060297 -0.023434 NationalITy_Syria -0.029632 -0.006093 0.001026 0.005046 -0.019934 0.019934 -0.016816 -0.013687 -0.026662 -0.090909 … 0.004490 -3.722194e-02 3.722194e-02 -0.026406 0.026406 0.007619 -0.007619 -0.002697 0.005828 -0.002699 NationalITy_Tunis -0.012716 0.038533 0.020066 -0.118607 -0.093569 0.093569 -0.022135 -0.018016 -0.035095 -0.119662 … -0.025092 -6.724750e-03 6.724750e-03 0.062876 -0.062876 -0.021128 0.021128 -0.016080 0.024957 -0.007393 NationalITy_USA -0.018082 -0.009526 -0.014469 -0.039189 0.070613 -0.070613 -0.015552 -0.012658 -0.024658 -0.084077 … 0.020489 -6.142403e-02 6.142403e-02 -0.051861 0.051861 -0.053155 0.053155 0.050328 -0.024974 -0.024085 NationalITy_lebanon 0.095616 0.048584 0.041714 -0.069329 0.112457 -0.112457 -0.026488 -0.021559 -0.041996 -0.143193 … 0.092181 -3.266199e-02 3.266199e-02 0.007890 -0.007890 -0.109720 0.109720 0.098063 -0.063829 -0.033449 NationalITy_venzuela 0.049373 0.048673 0.055141 0.060764 -0.034610 0.034610 -0.006316 -0.005141 -0.010014 -0.034145 … 0.054764 -4.029582e-02 4.029582e-02 -0.036662 0.036662 -0.037145 0.037145 0.070493 -0.027406 -0.040467 PlaceofBirth_Egypt 0.018995 0.032916 0.064555 0.034742 -0.008975 0.008975 0.886766 -0.015552 -0.030296 -0.071269 … 0.103233 3.289629e-02 -3.289629e-02 -0.047985 0.047985 0.013140 -0.013140 0.011357 0.021544 -0.029591 PlaceofBirth_Iran -0.094925 -0.081024 -0.051854 -0.003192 -0.046264 0.046264 -0.015552 1.000000 -0.024658 -0.084077 … 0.058609 1.417478e-02 -1.417478e-02 0.024970 -0.024970 0.061775 -0.061775 -0.072924 0.017535 0.051475 PlaceofBirth_Iraq 0.192443 0.192773 0.154318 0.055484 -0.041827 0.041827 -0.030296 -0.024658 1.000000 -0.163782 … -0.020843 -1.129609e-01 1.129609e-01 -0.175860 0.175860 -0.056056 0.056056 0.163521 -0.131460 -0.033536 PlaceofBirth_Jordan 0.105820 0.203116 0.140071 -0.046486 0.115271 -0.115271 -0.105179 -0.085606 -0.166762 0.801813 … 0.182511 -1.509355e-16 1.509355e-16 -0.114548 0.114548 0.008538 -0.008538 0.008841 -0.123163 0.101329 PlaceofBirth_KuwaIT -0.265991 -0.339184 -0.330456 0.005455 -0.112877 0.112877 -0.075349 -0.087149 -0.169767 -0.569874 … -0.313841 5.421667e-02 -5.421667e-02 0.180729 -0.180729 0.091215 -0.091215 -0.172070 0.208527 -0.027094 PlaceofBirth_Lybia -0.122978 -0.165005 -0.123098 -0.160083 -0.007305 0.007305 -0.015552 -0.012658 -0.024658 -0.084077 … 0.134849 1.275730e-01 -1.275730e-01 -0.090276 0.090276 0.138394 -0.138394 -0.072924 0.187574 -0.099644 PlaceofBirth_Morocco 0.034212 0.007496 0.083903 0.018151 -0.021823 0.021823 -0.012672 -0.010314 -0.020091 -0.068504 … 0.063283 5.774658e-02 -5.774658e-02 0.067295 -0.067295 -0.027703 0.027703 -0.009205 -0.003031 0.011159 PlaceofBirth_Palestine 0.156197 0.136845 0.188103 0.159642 0.010733 -0.010733 -0.020163 -0.016411 -0.031969 0.012675 … 0.056217 -1.286408e-01 1.286408e-01 -0.117041 0.117041 -0.118582 0.118582 0.097208 -0.087491 -0.011633 PlaceofBirth_SaudiArabia 0.024384 -0.014318 -0.012530 0.018692 -0.068320 0.068320 -0.025669 -0.020892 -0.040699 0.079066 … -0.060557 4.679083e-02 -4.679083e-02 0.088766 -0.088766 -0.008694 0.008694 0.057638 -0.006139 -0.047546 PlaceofBirth_Syria -0.008934 0.020549 0.013041 0.021258 -0.007305 0.007305 -0.015552 -0.012658 -0.024658 -0.084077 … 0.020489 -2.362463e-02 2.362463e-02 -0.013445 0.013445 -0.014845 0.014845 0.009244 -0.024974 0.013695 … … … … … … … … … … … … … … … … … … … … … … GradeID_G-11 0.062581 0.037916 0.090792 0.074989 0.006944 -0.006944 -0.023063 -0.018772 -0.036567 -0.124682 … -0.034842 -1.778657e-02 1.778657e-02 0.023883 -0.023883 -0.030755 0.030755 0.060574 -0.041885 -0.018478 GradeID_G-12 -0.046877 -0.063946 -0.073901 0.064488 0.115403 -0.115403 -0.021170 -0.017230 -0.033565 -0.114446 … 0.013739 3.332733e-02 -3.332733e-02 0.019728 -0.019728 0.017718 -0.017718 0.022751 0.034390 -0.051484 SectionID_A 0.138111 0.057826 0.129205 0.078512 0.042438 -0.042438 -0.040786 -0.058609 0.020843 0.146543 … -0.018493 -6.936602e-03 6.936602e-03 -0.068038 0.068038 0.020676 -0.020676 0.002590 -0.037225 0.030701 SectionID_B -0.100492 -0.015519 -0.080693 -0.030468 -0.017134 0.017134 0.060260 -0.003445 0.007233 -0.080650 … 0.030769 -9.368029e-03 9.368029e-03 0.050105 -0.050105 0.004896 -0.004896 0.034459 0.037824 -0.065303 SectionID_C -0.082925 -0.086973 -0.103785 -0.099599 -0.052527 0.052527 -0.035692 0.125882 -0.056589 -0.139103 … -0.022964 3.253000e-02 -3.253000e-02 0.039672 -0.039672 -0.051652 0.051652 -0.073071 0.001219 0.066110 Topic_Arabic -0.039771 -0.019984 0.019045 0.019829 -0.072642 0.072642 -0.051748 -0.042118 0.099999 -0.001875 … 0.010131 -1.039216e-02 1.039216e-02 0.076585 -0.076585 -0.006184 0.006184 0.021490 0.019988 -0.037526 Topic_Biology 0.173198 0.169828 0.131911 0.035070 -0.016764 0.016764 -0.035692 -0.029050 0.108034 0.094231 … 0.029525 -1.951800e-02 1.951800e-02 -0.101385 0.101385 -0.069236 0.069236 0.134356 -0.076826 -0.055272 Topic_Chemistry 0.080645 0.085290 0.051402 -0.035592 0.064546 -0.064546 -0.031713 -0.025811 0.041139 0.267127 … 0.041780 -8.671100e-02 8.671100e-02 -0.066583 0.066583 0.047847 -0.047847 0.060736 0.035756 -0.087629 Topic_English 0.040244 -0.053836 0.005016 0.009384 0.038517 -0.038517 0.008233 -0.036187 -0.002136 0.013042 … 0.094899 9.094948e-02 -9.094948e-02 0.020134 -0.020134 0.015971 -0.015971 0.057746 -0.030887 -0.025651 Topic_French -0.079481 0.081832 -0.061776 -0.240691 0.079722 -0.079722 0.035069 0.065077 -0.028508 0.123272 … 0.226793 1.050920e-01 -1.050920e-01 -0.068085 0.068085 -0.060512 0.060512 0.010283 -0.016535 0.005239 Topic_Geology 0.205623 0.186245 0.197393 0.079355 0.024825 -0.024825 -0.031713 -0.025811 0.041139 0.227258 … 0.041780 -8.671100e-02 8.671100e-02 -0.066583 0.066583 -0.069329 0.069329 -0.023038 -0.137606 0.143480 Topic_History 0.069250 0.086280 0.164612 0.160461 0.023818 -0.023818 -0.028063 -0.022841 0.057694 0.026554 … -0.039053 -7.134743e-02 7.134743e-02 -0.075338 0.075338 0.031426 -0.031426 -0.037945 -0.049102 0.078531 Topic_IT -0.254687 -0.290641 -0.361976 -0.015514 -0.028631 0.028631 -0.030117 0.038239 -0.108870 -0.327592 … -0.276263 4.611430e-03 -4.611430e-03 0.072754 -0.072754 0.076894 -0.076894 -0.150126 0.152495 0.002524 Topic_Math -0.063363 -0.128456 -0.077126 -0.009205 -0.056212 0.056212 0.045525 -0.024065 -0.046879 -0.159842 … -0.095636 -2.438189e-02 2.438189e-02 0.037038 -0.037038 0.034205 -0.034205 -0.004742 0.033337 -0.025267 Topic_Quran 0.055713 0.070980 0.044516 0.007854 0.020267 -0.020267 0.043149 -0.024658 -0.048035 -0.059904 … -0.020843 7.530727e-03 -7.530727e-03 0.069051 -0.069051 -0.035703 0.035703 0.032559 0.004046 -0.033536 Topic_Science 0.064968 0.025636 0.163816 0.168116 0.061891 -0.061891 0.101865 -0.038792 -0.010911 0.080717 … 0.028432 -1.788691e-02 1.788691e-02 -0.027354 0.027354 0.037379 -0.037379 0.013516 -0.053546 0.035159 Topic_Spanish -0.029389 -0.015874 -0.020799 -0.097155 -0.158075 0.158075 -0.032402 0.142411 -0.051374 -0.136060 … -0.004964 2.008181e-02 -2.008181e-02 0.080836 -0.080836 -0.037314 0.037314 -0.049218 0.029448 0.019087 Semester_F -0.178358 -0.173219 -0.287066 -0.019083 0.049156 -0.049156 -0.079693 -0.039856 -0.004567 -0.041646 … -0.148705 2.362791e-02 -2.362791e-02 -0.025258 0.025258 0.072462 -0.072462 -0.095686 0.115048 -0.014257 Semester_S 0.178358 0.173219 0.287066 0.019083 -0.049156 0.049156 0.079693 0.039856 0.004567 0.041646 … 0.148705 -2.362791e-02 2.362791e-02 0.025258 -0.025258 -0.072462 0.072462 0.095686 -0.115048 0.014257 Relation_Father -0.364237 -0.360240 -0.339505 -0.026720 -0.195142 0.195142 -0.072009 -0.058609 0.020843 -0.197918 … -1.000000 1.638105e-01 -1.638105e-01 0.287698 -0.287698 0.219687 -0.219687 -0.387138 0.279615 0.107497 Relation_Mum 0.364237 0.360240 0.339505 0.026720 0.195142 -0.195142 0.072009 0.058609 -0.020843 0.197918 … 1.000000 -1.638105e-01 1.638105e-01 -0.287698 0.287698 -0.219687 0.219687 0.387138 -0.279615 -0.107497 ParentAnsweringSurvey_No -0.316570 -0.382472 -0.396357 -0.232197 -0.022359 0.022359 0.032896 0.014175 -0.112961 0.041601 … -0.163811 1.000000e+00 -1.000000e+00 0.539875 -0.539875 0.261152 -0.261152 -0.313993 0.413547 -0.078795 ParentAnsweringSurvey_Yes 0.316570 0.382472 0.396357 0.232197 0.022359 -0.022359 -0.032896 -0.014175 0.112961 -0.041601 … 0.163811 -1.000000e+00 1.000000e+00 -0.539875 0.539875 -0.261152 0.261152 0.313993 -0.413547 0.078795 ParentschoolSatisfaction_Bad -0.297015 -0.363835 -0.298744 -0.061104 -0.093478 0.093478 -0.047985 0.024970 -0.175860 -0.012164 … -0.287698 5.398748e-01 -5.398748e-01 1.000000 -1.000000 0.228385 -0.228385 -0.295654 0.331473 -0.022716 ParentschoolSatisfaction_Good 0.297015 0.363835 0.298744 0.061104 0.093478 -0.093478 0.047985 -0.024970 0.175860 0.012164 … 0.287698 -5.398748e-01 5.398748e-01 -1.000000 1.000000 -0.228385 0.228385 0.295654 -0.331473 0.022716 StudentAbsenceDays_Above-7 -0.463882 -0.499030 -0.312134 -0.218778 -0.209011 0.209011 0.044519 0.061775 -0.056056 0.040462 … -0.219687 2.611518e-01 -2.611518e-01 0.228385 -0.228385 1.000000 -1.000000 -0.489629 0.631674 -0.111142 StudentAbsenceDays_Under-7 0.463882 0.499030 0.312134 0.218778 0.209011 -0.209011 -0.044519 -0.061775 0.056056 -0.040462 … 0.219687 -2.611518e-01 2.611518e-01 -0.228385 0.228385 -1.000000 1.000000 0.489629 -0.631674 0.111142 Class_H 0.495681 0.469735 0.376987 0.243656 0.220294 -0.220294 -0.022294 -0.072924 0.163521 0.020149 … 0.387138 -3.139929e-01 3.139929e-01 -0.295654 0.295654 -0.489629 0.489629 1.000000 -0.388777 -0.574052 Class_L -0.582997 -0.662061 -0.504153 -0.270451 -0.218841 0.218841 0.021544 0.017535 -0.131460 -0.083802 … -0.279615 4.135474e-01 -4.135474e-01 0.331473 -0.331473 0.631674 -0.631674 -0.388777 1.000000 -0.531226 Class_M 0.062315 0.156442 0.101392 0.016300 -0.008085 0.008085 0.001354 0.051475 -0.033536 0.055950 … -0.107497 -7.879499e-02 7.879499e-02 -0.022716 0.022716 -0.111142 0.111142 -0.574052 -0.531226 1.000000 75 rows × 75 columns
1.2 查看各个特征与优秀成绩(‘Class_H’)的相关系数
-
代码
# 1.2 查看各个特征与优秀成绩('Class_H')的相关系数, # ascending=False表示按降序排列 corrDf['Class_H'].sort_values(ascending =False)
-
结果
Class_H 1.000000 raisedhands 0.495681 StudentAbsenceDays_Under-7 0.489629 VisITedResources 0.469735 Relation_Mum 0.387138 AnnouncementsView 0.376987 ParentAnsweringSurvey_Yes 0.313993 ParentschoolSatisfaction_Good 0.295654 Discussion 0.243656 gender_F 0.220294 NationalITy_Iraq 0.163521 PlaceofBirth_Iraq 0.163521 Topic_Biology 0.134356 PlaceofBirth_lebanon 0.125929 NationalITy_lebanon 0.098063 PlaceofBirth_Palestine 0.097208 Semester_S 0.095686 NationalITy_SaudiArabia 0.083759 GradeID_G-06 0.082955 NationalITy_Palestine 0.072384 NationalITy_venzuela 0.070493 PlaceofBirth_venzuela 0.070493 Topic_Chemistry 0.060736 GradeID_G-11 0.060574 Topic_English 0.057746 PlaceofBirth_SaudiArabia 0.057638 NationalITy_USA 0.050328 SectionID_B 0.034459 Topic_Quran 0.032559 PlaceofBirth_USA 0.032209 ... PlaceofBirth_Morocco -0.009205 NationalITy_Morocco -0.009205 GradeID_G-10 -0.009205 GradeID_G-07 -0.009845 GradeID_G-08 -0.014039 NationalITy_Tunis -0.016080 NationalITy_Egypt -0.022294 Topic_Geology -0.023038 GradeID_G-02 -0.024633 StageID_lowerlevel -0.035864 Topic_History -0.037945 Topic_Spanish -0.049218 GradeID_G-05 -0.051403 GradeID_G-09 -0.066500 PlaceofBirth_Lybia -0.072924 NationalITy_Lybia -0.072924 PlaceofBirth_Iran -0.072924 NationalITy_Iran -0.072924 SectionID_C -0.073071 Semester_F -0.095686 Topic_IT -0.150126 NationalITy_KW -0.160031 PlaceofBirth_KuwaIT -0.172070 gender_M -0.220294 ParentschoolSatisfaction_Bad -0.295654 ParentAnsweringSurvey_No -0.313993 Relation_Father -0.387138 Class_L -0.388777 StudentAbsenceDays_Above-7 -0.489629 Class_M -0.574052 Name: Class_H, Length: 75, dtype: float64
-
分析
根据各个特征与优秀成绩(Class_H)的相关系数大小,我们可以看出除了变量GreadID,StageID,Semester,SectionID,PlaceofBirth等,大部分变量和优秀成绩之间有强烈的相关性,所以我们选择除去GreadID,StageID,Semester,SectionID,PlaceofBirth之外的变量,做为模型的特征输入。
1.3 除去没有太大关系的变量 作为模型的特征输入
-
代码
# 1.3 除去没有太大关系的变量 作为模型的特征输入 x=sp.drop(['Class','StageID','GradeID','Semester','SectionID','PlaceofBirth'],axis=1) y=sp['Class'] x=pd.get_dummies(x)#把所有的非数值型变量转化为数值型 x.head()
-
结果
raisedhands VisITedResources AnnouncementsView Discussion gender_F gender_M NationalITy_Egypt NationalITy_Iran NationalITy_Iraq NationalITy_Jordan … Topic_Science Topic_Spanish Relation_Father Relation_Mum ParentAnsweringSurvey_No ParentAnsweringSurvey_Yes ParentschoolSatisfaction_Bad ParentschoolSatisfaction_Good StudentAbsenceDays_Above-7 StudentAbsenceDays_Under-7 0 15 16 2 20 0 1 0 0 0 0 … 0 0 1 0 0 1 0 1 0 1 1 20 20 3 25 0 1 0 0 0 0 … 0 0 1 0 0 1 0 1 0 1 2 10 7 0 30 0 1 0 0 0 0 … 0 0 1 0 1 0 1 0 1 0 3 30 25 5 35 0 1 0 0 0 0 … 0 0 1 0 1 0 1 0 1 0 4 40 50 12 50 0 1 0 0 0 0 … 0 0 1 0 1 0 1 0 1 0 5 rows × 40 columns
四、预测成绩
1.选择测试数据集和训练数据集
-
代码
# 1.选择测试数据集和训练数据集 from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import LabelEncoder from sklearn.metrics import accuracy_score x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=10)
2.训练模型并检验准确率
-
代码
# 2.训练模型并检验准确率 lr=LogisticRegression(max_iter=10000) lr.fit(x_train,y_train) predict_y=lr.predict(x_test) print('predict',predict_y) score=accuracy_score(y_test,predict_y) score
-
结果
predict ['H' 'M' 'M' 'L' 'H' 'H' 'H' 'H' 'M' 'L' 'M' 'M' 'H' 'M' 'M' 'H' 'L' 'H' 'M' 'M' 'L' 'M' 'M' 'M' 'M' 'L' 'H' 'M' 'M' 'H' 'M' 'H' 'L' 'M' 'M' 'L' 'M' 'M' 'L' 'H' 'M' 'L' 'H' 'L' 'M' 'M' 'H' 'M' 'M' 'H' 'M' 'L' 'H' 'M' 'M' 'M' 'H' 'L' 'M' 'H' 'H' 'L' 'H' 'M' 'M' 'M' 'M' 'H' 'L' 'H' 'M' 'L' 'M' 'H' 'M' 'H' 'M' 'L' 'M' 'H' 'L' 'H' 'L' 'L' 'M' 'H' 'L' 'H' 'H' 'M' 'M' 'L' 'M' 'M' 'H' 'M']
0.7395833333333334