当前位置: 首页 > article >正文

基于python的《C语言程序设计》课程成绩分析

作者:Svan.声明:未经本人允许,不得对本文中的任何内容、数据进行转载,本人(作者)已经对本文内容申请撰写了论文,随意转载使用本文任何内容的,要追究其法律责任!!!

基于python的《C语言程序设计》课程成绩分析

  • 成绩分析报告
    • 一、数据来源
      • 1.1 问卷数据分析
        • 1.1.1数据读取
        • 1.1.2 matplotlib.pyplot画图
      • 1.2 创建词云
    • 二、过程数据分析
      • 2.1 数据读取
      • 2.2 数据存储
      • 2.3 平均值计算
      • 2.4异常值处理
      • 2.5 相关度作图分析
        • 2.5.1 圈复杂度
        • 2.5.2 编程题提交次数
        • 2.5.3 代码通过率
        • 2.5.4 编程做题时长
        • 2.5.5 两次测试成绩
    • 三、结论

成绩分析报告

一、数据来源

过程数据来源于两个班级(大约60人)《C语言程序设计》课程期间学习过程的真实记录,主要是对平时作业以及测验的收集;问卷数据来源于整个年级选该课程的同学(大约170人)的匿名回答,包括同学对该课程的看法以及学习该课程的一些建议。

1.1 问卷数据分析

1.1.1数据读取

创建数据读取的功能函数,通过对.csv文件相对路径的锁定读取对应检索栏名称的数据列表,并储存。返回提前创建好的字典里,每个栏目分别对应所需要的数据,下图为.csv文件的示例数据集:

在这里插入图片描述

1.1.2 matplotlib.pyplot画图

读取存入字典中对应键的数据,创建一个空的列表,将其存入新建的列表中,设置字体属性参数,通过计算画出每部分所占饼图的比例大小,使用label进行标注。如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过上图发现,进入大学前,有超过一半的人很少有机会接触计算机,只有不到10%的人有过编程的经历。对学习过编程的同学进行调查,发现学习C语言编程用时2-10小时的学生占主要部分,而学习地点主要集中在寝室,且大多借鉴别人的成果,这反映出目前的教育方式仍需改进,学生并没有学到真正的知识,没有理解编程原理,导致近一半的同学集中在考试前几天去复习,考的成绩以及整体及格率的下降。

1.2 创建词云

读取文本数据,读取“9.对于课程教学,您认为哪些地方需要改进”这一栏数据,存入新创建的字符串内,设置存入字符串的参数,设置词云展示的背景属性,将生成的词云图保存指定的路径下,最终展示词云。如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过词云图可以发现,大多数同学对目前的教学方式并没有任何建议,表示很认同当前的教学方式,有小部分人提出老师需要讲习题,还有人表示编程有难度。可以看出目前的教学方式仍有改进的地方。

二、过程数据分析

2.1 数据读取

2.2 数据存储

创建一个名为stu的学生类,可以存储学生如下数据:编程题通过率[0]、编程题平均用时、编程题平均提交次数[1]、代码的圈复杂度[2]、第一次测验成绩、第二次测验成绩、期末成绩。读取存储数据的csv文件,将收集的数据分别读入,以字典类型存储,字典的键为学生的名字,值为一个学生类,存储了该学生的相关数据。最后把所用到的数据存入到DataFrame类型的表格中,方便对其进行处理。

2.3 平均值计算

平均值的计算依靠在学生类中添加一个迭代次数的纪录,第一次记录该学生,则此次输入的值就为相应的值,第n次记录该学生(n>1),记第n次记录的平均值为avg(n),平均值可由如下算式得:
在这里插入图片描述

为了节省存储空间,不把每次的值都记录下来,只记录上一次的平均值和迭代的次数,可对式子做如下变化:
在这里插入图片描述

2.4异常值处理

异常值的来源主要是两个方面,第一个方面就是部分数据来源于问卷,此类数据的可信度不高,可能存在与主观不符的回答,因此在本次预测中,只会选取部分有意义的数据作为参考分析。另一方面是系统所收集的课堂记录以及平时作业的情况,会出现一些记录与事实明显不符的值,例如学生的答题时长,是否在此时间内答题,或是打开答题系统未答题但系统依然在计时,这样记录的时间并不是实际答题时间,通常数值会比较大,基于这一特点,我们将这类数据予以删除。

2.5 相关度作图分析

对于过程数据的各参量,分别研究其与期末成绩的相关性,相关度的图中,横坐标为成绩,分为五个等级(差[0-30]、不及格[30-60]、及格[60-70]、中等[70-80]、良好[80-90]、优秀[90-100])该分析会结合相关实际,对于各类因素详细说明:

2.5.1 圈复杂度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

圈复杂度可以用来衡量一个模块判定结构的复杂程度,其数量上表现为独立路径的条数,也可理解为覆盖所有的可能情况最少使用的测试用例个数。一般来讲,复杂度大于10的代码出错率很高。

圈复杂度代码状况可测性维护成本
1-10清晰
10-20复杂
20-30非常复杂
30不可读不可测非常高

在这里插入图片描述

观察图2,可以看出圈复杂度多数分布在3到5之间,对于初学者不会写出过于复杂的代码也吻合该结果。通过定义结合实际,该参量事实上是学生对题目的各种情况的综合考虑情况,比如对于这样一个题目:给定三角形的三条边,求出该三角形的面积(三边求面积公式:p=(a+b+c)/2 S=sqrt[p(p-a)(p-b)(p-c)](海伦公式))。因为测试的数据输入的三个数据是满足三角形的三条边构成定理的,因此不对输入做出相关判断,直接运算得出来的结果是与答案吻合的,但是对于部分编程和数学思维稍强的学生,可能就会加入对是否满足三角形构成的判断,或者输入是否为正的判断,加的这些判断就会使圈复杂度变大,对于初学者而言,更加慎密的思维无疑是好的,因此该参量值偏大的同学的最终成绩会偏好一些。看向图表1中的另一个极端,代码复杂度过低,很多学生的成绩都是很差的,不是因为优化好,而是对于代码不知如何构思,从而写出的代码量小,效果未完全达到。

2.5.2 编程题提交次数

在这里插入图片描述

该参量与成绩的相关度是比较好的,多次提交可以看出在学习过程中花更多时间,研究问题更为透彻。最终的成绩也与理想接近。

2.5.3 代码通过率

在这里插入图片描述

该参量可理解为编程题的满分率,数据来源是学生提交代码之后会系统自动批改的结果,可以看出多数成绩较差的同分布在通过率的两个极端,出现这种数据的原因是作业会有拷贝抄袭的情况出现,为了证实这一结论我会在下文做出解释,转过来看通过率在0.8到0.9这段区间的数据,就显得符合正常,通过率高成绩偏好,反之偏差。

接下来说明一下抄袭作业的情况:

在这里插入图片描述
在这里插入图片描述

这里选取了提交次数和通过率的关系图,两个参数结合分析,一般得到完全通过都会提交多次,除非是题目过于简单,排除这一占比较小的可能,对其分析,可以发现有一批学生的通过率很高的同时提交次数也只有2次及以下,这种情况极大可能就是代码拷贝的现象。

2.5.4 编程做题时长

在这里插入图片描述

这个参量与提交次数很类似,但有一点不同的是该参量有不理想的值,因为做题时长是打开答题界面的时间,因为平时题目不会有这方面的限制,那么就会出现打开界面忘记关闭而且没有做题的现象,或者是多人共同做题参看一个人的题目,也会影响该参量综合看来大于1500的数据可以作废。500-1500之间的数据有参考价值,小于500的部分,也可以进一步分析拷贝代码的情况,类似上文做出如下分析图:

在这里插入图片描述
在这里插入图片描述

可以看到图中有部分学生编程用时较短但却有较高的通过率,大概率即为拷贝。因此在教学活动的安排中应改进方案避免此现象。

2.5.5 两次测试成绩

在这里插入图片描述
在这里插入图片描述

两次测试放在一块分析,可以看出两次测试与最终成绩的相关度很相似,而且平时成绩较好期末成绩也会不错,因为两次平时测试与期末考试一样,都是独立完成,作弊与抄袭因素可忽略,拟合效果最佳,可综合前部分因素预测期末成绩。

  • [0]:编程题通过率,提交的代码在系统自动批改之后是否全对会给出是否通过的记录,通过为1,没通过为0,通过对所有记录的加和求平均值可以得出系统批改的编程题正确率。

  • [1]:编程题平均提交次数,做平时作业题过程中,提交之后系统会立马给出自动批改的结果,同学可以通过此结果评判后决定是否对代码进行改进而重复提交新的代码,每一题都会有该记录,把所有题的次数加起来平均就为该参量。

  • [2]:软件源码某部分的圈复杂度就是这部分代码中线性无关路径的数量。对于此处分析,考虑到学生均为初学者,可将此参量理解为代码中的判断分支数量,这方面看来,此参量不一定是越小越好。

三、结论

从数据分析上来看,主要表现在以下几点:

  1. 学生背景差异显著

    • 报告指出,超过一半的学生在进入大学前很少有机会接触计算机,不到10%的学生有过编程经历。这表明学生在入学时对计算机和编程的了解存在显著差异。
  2. 学习习惯和环境影响学习效果

    • 学习C语言编程的学生中,大多数用时在2-10小时之间,且学习地点主要集中在寝室。这可能意味着学生缺乏有效的学习环境和资源,依赖于他人的成果,这可能影响了他们的学习效果和编程原理的理解。
  3. 学习方式需改进

    • 报告中通过词云图分析发现,大多数学生对当前的教学方式表示认同,但也有小部分人提出需要老师讲解习题,以及反映编程难度较大。这表明教学方式仍有改进的空间,以更好地满足学生的学习需求。
  4. 学生学习投入与成绩正相关

    • 报告分析了编程题提交次数与成绩的关系,发现多次提交的学生在学习过程中投入更多时间,研究问题更为透彻,这与最终成绩的提高正相关。
  5. 作业抄袭现象存在

    • 通过分析提交次数与通过率的关系,报告指出存在一部分学生通过率很高但提交次数很少,这可能表明有抄袭作业的现象。
  6. 编程做题时长与成绩相关

    • 报告中提到,编程做题时长与提交次数类似,但存在不理想的值,如长时间未关闭答题界面的情况。在合理的时间范围内,编程用时与成绩存在一定的相关性。
  7. 测试成绩与期末成绩相关

    • 第一次和第二次测试成绩与期末成绩的相关度较高,表明平时成绩较好的学生期末成绩也倾向于较好,这可能是因为这些测试都是在独立完成的情况下进行的,排除了作弊和抄袭的影响。
  8. 圈复杂度与学生思维慎密性相关

    • 报告分析了圈复杂度与成绩的关系,发现圈复杂度较高的学生往往成绩较好,这可能是因为他们对题目的各种情况考虑得更为全面。

综上所述,报告通过对学生的学习过程数据和问卷数据的分析,揭示了学生的学习背景、学习习惯、作业提交行为和测试成绩等多个方面与最终成绩的关系,为教学改进提供了数据支持。

同时,报告也指出了教学过程中存在的问题,如学生学习环境的不足、作业抄袭现象等,这些问题需要通过教学改革和支持措施来解决。

希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。

作者:Svan.


注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!


http://www.kler.cn/news/360457.html

相关文章:

  • JSON 注入攻击 API
  • 【Linux】进程优先级进程切换
  • 【信息安全服务】常见服务高危端口排查(含内网)
  • Spring AOP 详解
  • 零售升级新引擎!云里物里电子价签助力连锁便利店提质增效
  • Linux基本使用和程序部署
  • 国际风能大会:8K风机叶片在线监测更高效
  • 2020前端面试 - JavaScript2.0篇
  • 递归之吃桃问题
  • 【MySQL】增删改查-进阶(二)
  • Unity 山水树木
  • 六西格玛绿带培训:哪些行业亟需这股“质量旋风”?
  • python长时间序列遥感数据植被物候提取与分析
  • 运行第一个go程序
  • Vim使用与进阶
  • “人工智能+中职”:VR虚拟仿真实训室的发展前景
  • uniapp展示本地pdf + 自定义标题
  • LeetCode 11.盛最多水的容器
  • 10月18日笔记(基于系统服务的权限提升)
  • 数据库相关操作