精华内容
下载资源
问答
  • 学生成绩数据集分析 FCC-BUAP数据集的基础数据分析。 优胜劣汰的案例研究,综合实绩研究,学生表现分析.pdf Nombre del数据集:学生成绩数据集 说明:此数据用于评估两所葡萄牙学校的中等学生的学习成绩。 数据...
  • 简单的学生成绩数据分析案例

    千次阅读 2021-06-23 16:30:08
    本程序从Excel文件读取学生成绩,统计各个分数段(90分以上,8089分,7079分,60~69分,60分以下)学生人数,并用柱状图(如图9-1)展示学生成绩分布,同时计算出最高分、最低分、平均成绩、各分数段人数等分析指标...

    题目要求

    学生成绩存储在Excel文件(如表9-1)中,本程序从Excel文件读取学生成绩,统计各个分数段(90分以上,8089分,7079分,60~69分,60分以下)学生人数,并用柱状图(如图9-1)展示学生成绩分布,同时计算出最高分、最低分、平均成绩、各分数段人数等分析指标。

    1. 建一个数据测试表

    随便建,最好各个分数区间都有,展示出来更直观,示例建表如下:
    在这里插入图片描述

    2. 编写程序

    程序可分为两部分编写,一部分用于读取表格数据,拿到分数数据再求其他相关量就好做了,第二部分就是拿到第一部分的成绩列表,再进行具体的数据分析需求。
    示例代码:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import xlrd
    import matplotlib.pyplot as plt
    
    
    wb = xlrd.open_workbook('mark.xlsx')
    sheet = wb.sheet_names()
    sh = wb.sheet_by_name('Sheet1')
    course_list = sh.row_values(0)
    print(course_list[2:])  # ['physics', 'Python', 'math', 'english']
    course = input('请输入需要展示的课程名:')
    m = course_list.index(course)
    col_list = sh.col_values(m)
    print(col_list)  # ['math', 95.0, 94.0, 93.0, 92.0]
    score_list = col_list[1:]
    print(score_list)
    print(sum(score_list))
    print('最高分:%s ' % max(score_list))
    print('最低分:%s' % min(score_list))
    print('平均分:%s' % (int(sum(score_list)) / len(score_list)))
    
    y = [0, 0, 0, 0, 0]
    for score in score_list:
        if score >= 90:
            y[0] += 1
        elif score >= 80:
            y[1] += 1
        elif score >= 70:
            y[2] += 1
        elif score >= 60:
            y[3] += 1
        else:
            y[4] += 1
    print('90分以上:',y[0])
    print('80-90分:',y[1])
    print('70-79分:',y[2])
    print('60-69分:',y[3])
    print('60分以下:',y[4])
    
    
    xl = ['90分以上', '80-90分', '70-79分', '60-69分', '60分以下']
    
    x = [1, 2, 3, 4, 5]
    plt.xlabel('分数段')
    plt.ylabel('人数')
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.xticks(x, xl)
    recs = plt.bar(x=x, height=y, color='green', width=0.5)
    plt.title(course + '成绩分析')
    for rec in recs:
        height = rec.get_height()
        plt.text(rec.get_x() + rec.get_width() / 2.0, 1.03 * height, '%s' % float(height))
    
    plt.show()
    
    

    3. 效果展示

    在这里插入图片描述

    展开全文
  • 学生成绩数据

    2019-05-26 23:19:41
    此数据集含有学生3门课程成绩数据学生个人信息、社交信息等信息。共计1000行,每行8种数据。在此分享出来供大家学习使用。
  • 中学学生成绩数据分析系统,输入成绩,系统自动按要求输出结果
  • 基于Python+Pandas+Matplotlib的学生成绩数据统计与图形输出实现.pdf
  • python数据分析-学生成绩分析python数据分析-学生成绩分析目标:分析学生成绩的影响因素1.导入原始数据,以及需要用到的库import pandas as pdimport numpy as npdf = pd.read_csv('StudentsPerformance.csv')(数据...

    python数据分析-学生成绩分析

    python数据分析-学生成绩分析

    目标:分析学生成绩的影响因素

    1.导入原始数据,以及需要用到的库

    import pandas as pd

    import numpy as np

    df = pd.read_csv('StudentsPerformance.csv')

    (数据来源于kaggle)

    2.查看文件

    从上面的信息可以看出这一千个学生的数据中是没有空值,而且可以看出各列数据的类型。

    还可以通过unique来查看某列数据都有哪些值,是否有无效数据。

    df['parental level of education'].unique()

    df['test preparation course'].unique()

    再来查看成绩是否为有效值(使用loc)

    df.loc[(df['math score']<0) | (df['math score']>100) | (df['reading score']<0) | (df['reading score']>100) | (df['writing score']<0) | (df['writing score']>100)]

    可以看出成绩中没有无效值

    3.数据处理

    根据目标,删除一些不需要的列(使用drop)

    df.drop(['gender','race/ethnicity'],axis=1)

    #参数axis默认值为0,指行,要删除列的话将axis设为1

    df_1 = df.drop(['gender','race/ethnicity'],axis=1)

    求学生成绩平均值

    df_1['average']= round((df_1['math score']+df_1['reading score']+df_1['writing score'])/3)

    #round()用来对数据四舍五入

    4.分析学生成绩影响因素

    df_1.groupby('parental level of education')['average'].agg([np.mean]).plot.bar()

    df_1.groupby('lunch')['average'].agg([np.mean]).plot.bar()

    df_1.groupby('test preparation course')['average'].agg([np.mean]).plot.bar()

    从上面三张图可以初步得出结论:

    1.父母学历越高,学生成绩越好

    2.午餐吃的好的同学成绩较高

    3.考试准备充分的同学成绩较高

    以下,用相关系数分析父母学历对哪科成绩影响最大

    先按照父母学历高低将表中数据替换为数值

    df_1.replace({'some high school':1, 'high school':2,'some college':3,"associate's degree":4,"bachelor's degree":5,"master's degree":6},inplace = True)

    #inplace = True是为了改变文档的源数据

    用corr求出相关系数(相关系数接近0,说明相关性小,越接近1,正相关性越强,越接近-1,负相关性越强)

    根据父母学历与学生数学、阅读、写作成绩的相关系数,可以看出,父母学历与三者都成正相关,其中与写作成绩相关性最强,而且各科之间相关性都很强,说明某一科成绩好的同学其他科成绩很可能也好。

    5.结论

    通过以上分析,可以初步得出以下的结论:

    1.父母学历越高,学生成绩越好(对写作成绩的影响最大)

    2.午餐吃的好的同学成绩较高

    3.考试准备充分的同学成绩较高

    4.某科成绩好的学生其他科成绩也较好(其中写作与阅读成绩相关性最强)

    python数据分析-学生成绩分析相关教程

    展开全文
  • 基于数据挖掘的学生成绩分析系统

    热门讨论 2012-07-05 14:00:40
    是本科毕业设计,用的是C4.5数据挖掘算法,分析前导课程与后续课程的关系和平时成绩对期末成绩的关系。
  •   本章将以初三年级的期中考试成绩为例,应用EXCEL中的数据透视表和数据分析中的描述统计功能,先对本次的成绩进行总体分析。   参考人数共652人,14个班,其中一名学生部分科目缺考,为了保证学生的私密,对...

    第1章 考试成绩表总体分析

    • 【 前 言 】 2
      • 第1章 考试成绩表总体分析 4
        • 1.1异常数据排查 4
        • 1.2利用“描述统计”对成绩进行总体分析 5
        • 实例1-2 5

      本章将以初三年级的期中考试成绩为例,应用EXCEL中的数据透视表和数据分析中的描述统计功能,先对本次的成绩进行总体分析。
      参考人数共652人,14个班,其中一名学生部分科目缺考,为了保证学生的私密,对学生的姓名作了修改,其结构如表1.01所示,并命名数据表名称为“总表”。
    表1.01 学生成绩总表

    1.1异常数据排查

      拿到了成绩数据后,首先是要检查数据的完整性,其次是对一些异常的数据进行排除。数据的完整性就是检查成绩数据是否缺漏,参考人数是否正确。异常的数据比如缺考的学生,得分为0的或成绩为空值的,采用什么方式进行排查呢?可以使用EXCEL中的筛选、排序等工具,对一些异常的数据进行隔离处理。对于不完整的数据信息,如果没有考试过程中的记录,还应该追查具体原因。在整理数据前,要注意做好原始数据的备份,以备对照检查。

    1.2利用“描述统计”对成绩进行总体分析

      “描述统计”是EXCEL的【数据分析】中自带的全面数据分析功能,利用此功能,可以非常快速地统计出数据的各项常见指标。

    实例1-2

    1、操作过程

      单击【数据】菜单,在最右边找到【数据分析】(如果没有,请先加载,步骤是单击【菜单】-【加载】,在弹出的窗口中选择“加载项”-“分析工具库”,单击【确定】),单击进入【数据分析】面板,选择“描述统计”,进入【描述统计】窗口,如图1.1.01所示,在“输入区域”中选择数据范围,这里是总分加上所有学科的数据区域,在输出区域中选择要输出的位置,勾选要统计的各个选项,单击【确定】,即得到本次考试的总体情况表,整理后如表1.1.01所示。增加了差异系数、难度和区分度三个指标,下面逐一解释各指标的意义和作用。
    图1.2.01 描述统计面板
    表1.2.01 成绩总体情况分析表

    2、统计指标
    (1)平均分

      在统计学上称为平均数,在成绩统计中,一般指简单算术平均数,是一个最基本的特征量数,指的是简单地把一批数据总和除以数据总次数所得的商数[1]。
       在EXCEL中,常用AVERAGE,AVERAGEIF,AVERAGEIFS三个函数来统计平均分。
      在本例中,总分平均分是504.7745,标准误差是5.2194,说明总分平均分在±5.2194之间的范围内取值是有效的。

    (2)中位数与众数

      中位数指一组数中按大小排序,位于中间的数[2],在EXCEL中,求中位数的是MEDIAN函数;众数是指总体中出现次数最多的标志值[3],在EXCEL中,函数MODE用于求众数。
       表里的中位数是531,说明中间哪个学生的分数是531分;众数是611,说明在611分这范围的人数最多。

    (3)标准差

      标准差是反映一个数据集的离散程度,指的是一组数据的离差平方和除以数据个数所得商的算术平均根[4]。在EXCEL中,可以通过函数STDEV(样本标准差)或STDEVP(总体标准差)求得,一般计算样本标准差即可。在这里可以简单理解为标准差小的全级学生的成绩跟平均值的距离比较小,反之则比较大。

    (4)峰度、偏度

      峰度和偏度是反映数据分布的参考值,峰度指数据分布平峰或尖峰的程度,也叫峰态[5],正态分布其参考值是3,低于3为平峰,在这里可以理解为各分数段的人数较分散,大于3则为尖峰,在这里可理解为某一分数段的人数较集中,偏度是反映不对称分布的偏态方向和程度的统计分析指标,也叫偏斜度,结合平均数、标准差,从另一角度描述了现象总体数据分布的特点[6],当偏度值大于0,表示正偏,这里可理解为低于平均分的人较多,偏度小于0,则为负偏,这里可理解为高于平均分的人较多。
    在EXCEL中,峰度可以用函数KURT计算,偏度则可以用函数SKEW计算。
    在这里插入图片描述

    (5)区域

      区域是最大值和最小值的差,表示分值范围。

    (6)最大值和最小值

       最大值是指一组数据中最大的数,在这里就是最高分,可用MAX函数计算。最小值是指一组数据中最小的数,就是最低分,在EXCEL用函数MIN可以求出。

    (7)观察数

      观察数实质就是参加考试的学生人数,对于缺考的学生不作统计,从表中可以看到语文的考试人数是652人,而数学的考试人数是651人,说明数学科有一个学生缺考。

    (8)差异系数

      差异系数是标准差和平均分的比值,是一种反映相对离散程度的系数,适合于不同性质数据的研究与比较[7]。本例中可看到数学的差异系数最大,可以理解为是拉开成绩距离最大的学科,而语文的差异系数最小,说明语文的成绩相对较接近,也可以说数学的离散程度比语文的高。

    (9)难度

      难度是反映被试完成题目或项目任务时所遇到的困难程度[8],可用计算得分率作为难度的指标。难度P的计算公式为:
      P=1-X/F
      其中X是该科平均分,F满分表示该科的总分。
      从表中可看到数学的难度最大,而化学的难度最小。

    (10)区分度

      区分度是题目区别初试水平的能力的量度[9],一般以字母D表示。计算方法为:
      D=(X高-X低)/F
      X高和X低分别表示高分组的平均分和低分组的平均分,其比例一般是各占总人数的27%,F是表示该题目的满分值。
      一般来说,区分度低于0.2,必须修改或淘汰,而高于0.4,则处于优良级别,从表中可看到数学的区分度最好,语文和化学的区分度则属于合格区间。从总体看,本次考试的区分度还是比较理想的,没有出现极端的现象。
    在这里插入图片描述

    (11)置信度(95%)

    是表示此统计的可信度为95%,也就是说存在有5%的误差。比如总分置信度(95%)的值是10.2488,说明其值的误差范围是在±10.2488之间。

    展开全文
  • 针对当前大学生成绩预测系统模型设计复杂、计算量大、预测准确性差、智能化程度低、受人为因素影响大等问题,提出了一种基于大数据决策树算法的学生成绩分析与预测模型。该模型将大学生成绩预测问题转换成大学生学习...
  • 学生成绩统计与分析,利用Excel制作,使用了数据透视表
  • 学生成绩查询分析系统,学生成绩查询分析系统是PHP+Mysql制作的用于中学成绩查询、分析的免费网络程序,B/S结构。和传统asp网络程序相比,最大优点是跨平台,Windows XP、Windows 2003、Win7、Gentoo、Centos、...
  •  针对课程设置与课程成绩之间的联系,通过比较分析可以发现学生成绩背后所...通过对学生成绩数据的挖掘,可以发现隐藏其中的关联规则,得出有实际价值的规则及结论,从而为教学管理人员优化课程设置提供决策支持。
  • 某家在线教育机构拥有自己开发的教育产品VLE,该教育机构提供了他们四个学期里,开展的七门课的数据,接下来我会根据这些数据,为该教育机构做一系列的数据分析,包括用户的RFM模型、用户分群特征、用户成绩分析等等...


    前言

    该文章为连载的第三篇:学生成绩分析

    某家在线教育机构拥有自己开发的教育产品VLE,该教育机构提供了他们四个学期里,开展的七门课的数据,接下来我会根据这些数据,为该教育机构做一系列的数据分析,包括用户的RFM模型、用户分群特征、用户成绩分析等等。

    该教育机构部分数据库结构如下

    在这里插入图片描述


    如下这三篇文章为:用户成绩分析

    做用户成绩分析,主要是把学生特征和学生使用产品习惯,与成绩结果做关联,所以会用到如下几个表:

    1. studentInfo 学生信息表 (总数据量三万多,记为stu)
    2. studentVle 学生产品交互行为表 (总数据量一千多万,记为vle)
    3. studentAssessment 学生成绩表 (总数据量十七余万,记为stu_ass)
    4. assessments 作业/考试表(总数据量两百多,记为ass)

    注意assessment意为作业,但涵盖Exam的考试信息,因为在国外,作业和考试都有一个权重分值,都会占最终成绩的一部分,并不是考试占最终成绩的100%。

    用户数据:学生编号,性别,学生居住区,最高学历,多重剥夺指数范围(衡量学生所在区的城市贫富等情况),年龄段,是否残疾,学生尝试该课程次数,当前课程的学分,最终成绩

    行为数据:学习时长,点击次数

    课程数据:课程编号,开课时间,使用产品的ip编码,作业/考试编号、日期等


    一、导入库

    import pandas as pd
    import numpy as np
    import datetime
    import time
    import matplotlib
    matplotlib.rcParams['font.sans-serif'] = ['Arial Unicode MS']
    matplotlib.rcParams['axes.unicode_minus']=False
    import matplotlib.pyplot as plt
    import seaborn as sns
    import sklearn
    from sklearn.preprocessing import LabelEncoder
    np.set_printoptions(suppress=True)
    pd.set_option('display.float_format', lambda x: '%.4f' % x)
    
    
    

    二、数据处理

    1、用户特征数据标签化

    用df.isna().sum()的方法,查看三个表的空缺值情况

    学生信息表里:
    只有多重剥夺指数范围有1111条空值(总数据量32593,空缺占比3.4%)

    学生成绩表里:
    只有分数有173条空缺值,总数据量173912,空缺占比极低,会用该学期该门课的平均值填补。

    考试或作业表:
    只有考试日期有11条空缺值,是因为部分考试/作业无日期限制。

    先看一下学生信息表大概长什么样子
    在这里插入图片描述
    把object类型的重要字段标签化

    #性别
    stu["gender"]=stu["gender"].map({"M":1,"F":2})
    
    #最高教育程度
    highest_education_dict={"No Formal quals":0,"Lower Than A Level":1,"A Level or Equivalent":2,"HE Qualification":3,"Post Graduate Qualification":4}
    stu["highest_edu_label"]=stu['highest_education'].map(highest_education_dict)
    
    
    #多重剥夺指数范围
    
    #先去中间值,把范围转成数值
    imd_band_dict={'0-10%':5,
    '10-20':15,
    '20-30%':25,
    '30-40%':35,
    '40-50%':45,
    '50-60%':55,
    '60-70%':65,
    '70-80%':75,
    '80-90%':85,
    '90-100%':95}
    stu["imd_band_label"]=stu['imd_band'].map(imd_band_dict)
    
    #平均数填补空值
    stu["imd_band_label"].fillna(stu["imd_band_label"].mean(),inplace=True)
    
    #年龄:
    age_encoder = LabelEncoder()
    age_encoder.fit(stu['age_band'].value_counts().sort_index().index.tolist())
    stu["age_band_label"]=age_encoder.transform(stu['age_band'])
    
    
    #是否残疾
    stu["disability"]=stu["disability"].map({"Y":1,"N":0})
    
    #最终成绩
    stu["final_result_label"]=stu["final_result"].map({'Withdrawn':0, 'Fail':1,'Pass':2, 'Distinction':3})
    

    在这里插入图片描述

    筛选所需要的数据:

    stu=stu[["code_module","code_presentation","id_student","gender","num_of_prev_attempts","studied_credits","disability","highest_edu_label","imd_band_label","age_band_label","final_result_label"]]
    
    

    2、用户特征数据与作业表合并

    合并考试作业表个学生成绩表

    stu_ass=pd.merge(stu_ass,ass,on="id_assessment")
    
    plt.figure(figsize=(8, 6))
    #sns.set_style('white')
    sns.boxplot(x="code_presentation", y="score", hue="code_module", data=stu_ass.sort_values("code_presentation"))
    plt.legend(loc=0,bbox_to_anchor=(1, 0.8),title="课程",frameon=False)#图示靠右显示
    plt.title("各学期各课程考试/作业分数分布")
    plt.xlabel("学期")
    plt.tight_layout()
    plt.show
    

    在这里插入图片描述
    每学期每门课程均有分数低的异常值,并且较多
    BBB和GGG课程的分数,在三个学期中都是大多数同学集中高分位置
    CCC和DDD课程的分数集中在较低分数

    看一下整体分数分布

    sns.distplot(stu_ass["score"],kde=False)
    plt.title("整体学生作业/考试分数分布")
    plt.show()
    

    在这里插入图片描述

    看整体的话异常值并不多,大多数分数都分布在60-100之间。0分、40分、60分、80分、100分都有相对于附近的分数值分布突然变集中。

    stu_ass["score"].value_counts().sort_index().head(30)
    
    

    但确实低分每个分数都有并且很集中

    在这里插入图片描述

    用盖帽法处理异常,考虑每学期每门课的难度或许不同,分数分布情况也会不同。这里每学期每门课的的低分异常值定义为:中位数-2倍标准差,

    只有

    
    stu_ass["score_chuli"]=stu_ass["score"]
    
    #定义一个方法
    def yichang(code_pre,code_module):
        score_list=stu_ass[(stu_ass["code_presentation"]==code_pre)&(stu_ass["code_module"]==code_module)]["score"]
        s_mean = score_list.mean()
        s_min = score_list.mean() - 2*score_list.std() 
        stu_ass.loc[(stu_ass["code_presentation"]==code_pre)&(stu_ass["code_module"]==code_module)&(stu_ass["score"] < s_min), 'score_chuli'] = s_min
        stu_ass.loc[(stu_ass["code_presentation"]==code_pre)&(stu_ass["code_module"]==code_module)&(stu_ass["score"].isna()), 'score_chuli'] = s_mean
    
    #每学期每门课
    for m in stu_ass["code_presentation"].unique().tolist():
        for n in stu_ass["code_module"].unique().tolist():
            yichang(m,n)
    

    修改后的各学期各门课程的分数分布:

    在这里插入图片描述

    3、计算附加其他信息

    加上交付时间与应交时间的间隔、和是否准时提交:

    stu_ass["day_gap"]=stu_ass["date_submitted"]-stu_ass["date"]
    
    stu_ass["submit_on_time"]=stu_ass["day_gap"].apply(lambda x:1 if x<=0 else 0)
    

    4、用户行为数据与作业表合并

    每个用户在每学期每门课使用产品用了多少天,总的点击次数是多少

    vle_df=vle.groupby(["code_presentation","code_module","id_student"]).agg({"date":pd.Series.nunique,"sum_click":"sum"}).reset_index().rename(columns={"date":"cnt_study_days"})
    
    vle_df["avg_click"]=vle_df["sum_click"]/vle_df["cnt_study_days"]
    
    stu_vle=pd.merge(stu,vle_df,on=["code_module","code_presentation","id_student"],how="left")
    
    stu_vle.isna().sum()
    

    聚合后发现有些用户并没有使用产品,导致该用户的cnt_study_days、sum_click和avg_click为nan,用fillna(0)填补

    5、用户特征行为数据、用户行为数据与作业/考试明细数据合并

    stu_ass_vle=pd.merge(stu_ass,stu_vle,on=["id_student","code_module","code_presentation"],how="left")
    

    得到一个173912行, 24列的数据集,每一行代表一个学生在一个学期里的一门课的作业/考试情况,以及对应的该学生的特征和使用产品情况。

    三、学生成绩数据分析

    1、变量之间相关性分析

    这里想分析学生的平时分数(作业/考试分数)和最终总分与其他特征会不会有什么相关性。这里用热力图表示。

    #筛选出带标签的变量,建模需要使用
    train_df=stu_ass_vle[["weight","day_gap","gender","num_of_prev_attempts","studied_credits","cnt_study_days","avg_click","highest_edu_label","imd_band_label","age_band_label","score_chuli","final_result_label"]]
    
    corr_data=train_df.drop("id_student",axis=1).corr().round(4)
    
    plt.figure(figsize=(12, 12))
    
    # np.zeros_like() 返回一个零数组,其形状和类型与给定的数组相同;
    mask = np.zeros_like(corr_data)
    
    #np.triu_indices_from(mask) 返回数组上三角形的索引。
    mask[np.triu_indices_from(mask)] = True
    sns.heatmap(corr_data, cmap='viridis',annot=True,fmt='g',mask=mask)
    #fmt='g'保持数据小数一致
    
    

    在这里插入图片描述

    这里看到很多特征两两之间都没有太多很强的相关性,最后一行的最终成绩可以看到:
    每天使用产品越多的学生最终成绩可能越高。
    最高学历越高的学生最终成绩可能越高。
    平时成绩越好的学生最终成绩可能越高。

    其余比较明显相关性的是:
    交付作业/考试的间隔时间越大,这个作业/考试的权重可能越高。
    重修课程的用户学分会更高。
    使用产品天数也多的用户,相对日均点击产品去学习也会越高。
    产品日均使用次数越高的,交作业会越早。
    女性日均使用产品比男性高

    2、数据建模

    我们选择使用以下几种模型进行建置,并比较模型的分类效能。

    首先在将训练集划分为训练集和验证集,其中训练集用于训练模型,验证集用于验证模型效果。首先导入建模库:

    
    from sklearn.linear_model import LogisticRegression
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import RandomForestClassifier
    
    
    # 预处理
    from sklearn.preprocessing import StandardScaler, MinMaxScaler
    
    # 模型评估
    from sklearn.model_selection import train_test_split, GridSearchCV
    from sklearn.metrics import confusion_matrix, classification_report, accuracy_score, f1_score, roc_auc_score
    
    

    凭经验、以及从上面跟最终成绩跟其他变量的相关性挑出一些重要的指标,并划分特征和标签,并采用分层抽样的方式划分训练集和验证集。

    train_df=train_df[["id_student","gender","num_of_prev_attempts","cnt_study_days","avg_click","highest_edu_label","imd_band_label","age_band_label","final_result_label"]]
    
    # 划分特征和标签
    X = train_df.drop(['id_student', 'final_result_label'], axis=1)
    y = train_df['final_result_label'] 
    
    
    # 划分训练集和验证集(分层抽样) 
    X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, stratify=y, random_state=0) 
    print(X_train.shape, X_val.shape, y_train.shape, y_val.shape) 
    #(139129, 7) (34783, 7) (139129,) (34783,)
    

    2.1 knn

    # 建立knn
    knn = KNeighborsClassifier(n_neighbors=4, n_jobs=-1)
    #ovo_knn=OneVsOneClassifier(knn)
    knn.fit(X_train, y_train)
    
    y_pred = knn.predict(X_val)
    
    #print('Simple KNeighborsClassifier accuracy:%.3f' % (ovo_knn.score(y_val, y_pred)))
    
    print('Simple KNeighborsClassifier accuracy:%.3f' % (accuracy_score(y_val, y_pred)))
    print('Simple KNeighborsClassifier f1_score: %.3f' % (f1_score(y_val, y_pred,average='macro')))  
    
    
    Simple KNeighborsClassifier accuracy:0.953
    Simple KNeighborsClassifier f1_score: 0.914
    

    2.2 Logistic回归

    lr = LogisticRegression(multi_class='multinomial')
    lr.fit(X_train, y_train)
    
    y_pred = lr.predict(X_val)
    
    print('Simple LogisticRegression accuracy:%.3f' % (accuracy_score(y_val, y_pred)))
    print('Simple LogisticRegression f1_score: %.3f' % (f1_score(y_val, y_pred,average='macro')))  
    
    Simple LogisticRegression accuracy:0.613
    Simple LogisticRegression f1_score: 0.203
    

    2.3 决策树

    dtc = DecisionTreeClassifier(max_depth=10, random_state=0) 
    dtc.fit(X_train, y_train)
    
    y_pred = dtc.predict(X_val) 
    
    print('Simple DecisionTreeClassifier accuracy:%.3f' % (accuracy_score(y_val, y_pred)))
    
    print('Simple DecisionTreeClassifier f1_score: %.3f' % (f1_score(y_val, y_pred,average='macro')))  
    
    
    Simple DecisionTreeClassifier accuracy:0.657
    Simple DecisionTreeClassifier f1_score: 0.394
    

    2.4 随机森林

    rfc = RandomForestClassifier(n_estimators=100, max_depth=10, n_jobs=-1)  
    rfc.fit(X_train, y_train)
    
    y_pred = rfc.predict(X_val) 
    
    print('Simple RandomForestClassifier accuracy:%.3f' % (accuracy_score(y_val, y_pred)))
    print('Simple RandomForestClassifier f1_score: %.3f' % (f1_score(y_val, y_pred,average='macro'))) 
    
    Simple RandomForestClassifier accuracy:0.658
    Simple RandomForestClassifier f1_score: 0.350
    

    综上,以f1-score作为评价标准的情况下,KNN算法有较好的分类效能,同时可以通过参数调整的方式来优化其他模型,通过调整预测的门槛值来增加预测效能等其他方式。


    展开全文
  • 学生成绩分析表 EXCEL 模板、学生成绩分析表 EXCEL 模板、
  • 学生考试数据集数据分析

    千次阅读 2020-09-07 11:40:21
    准备工作 数据集 字段 描述 gender 性别 race/ethnicity 种族 parental level of education ...数据分析 查看数据 查看各列信息,可以看到总共有1000行,每行八列数据 data.info() <class 'pandas.c
  • 关联分析学生成绩数据挖掘的应用.pdf
  •   在进行数据分析时,为了直观显示成绩分布规律,即是正态,正偏态和负偏态三种分布状态,可以画总分及各学科的正态分布图,其作用一是对学生进行比较,通过分布曲线,可以分析出学生成绩是不是存在两极分化(两头...
  • 数据挖掘方法分析学生成绩的影响因素.pdf
  • 学生成绩预测-数据

    2021-03-29 12:46:36
    学生成绩数据
  • 基于决策树的学生成绩分析
  • 该资源为学生成绩数据集,可用于预测学生的成绩等工作。数据集中分为7个属性, 原始数据集每列说明: GRE 成绩 (290 to 340) TOEFL 成绩(92 to 120) 学校等级 (1 to 5) 自身的意愿 (1 to 5) 推荐信的力度 (1 to...
  • 基于数据挖掘的高校学生成绩预测分析.pdf
  • 读取数据库的学生成绩信息,进行统计从而绘制该课程学生成绩直方图(注释:学生成绩分几段,统计每段分数的人数,选择分数段中间数据,以此数据与人数为横、纵坐标,绘制直方图)以及饼图(对各分数段进行统计,便于...
  • 基于C4.5决策树学生成绩数据挖掘方法.pdf
  • 学生成绩进行数据挖掘应用分析.pdf
  • 学生表现 使用数据挖掘和分类算法来预测学生的表现。 可在以下链接上找到用于该项目的数据集: :
  • 学生成绩问题分析

    2016-11-07 18:37:03
    数据结构课程设计的题目
  • 基于数据仓随着教育信息化进程的不断推进随着教育信息化进程的不断推进 高中学校内每年都会高中学校内每年都会产生很多有关学生产生很多有关学生 ...理决策奠定了基础理决策奠定了基础((库的高中学生成绩分析模型设计
  • 基于Matlab的学生成绩综合分析.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,366
精华内容 22,546
关键字:

学生成绩数据分析

友情链接: mymfc.rar