基于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]:软件源码某部分的圈复杂度就是这部分代码中线性无关路径的数量。对于此处分析,考虑到学生均为初学者,可将此参量理解为代码中的判断分支数量,这方面看来,此参量不一定是越小越好。
三、结论
从数据分析上来看,主要表现在以下几点:
-
学生背景差异显著:
- 报告指出,超过一半的学生在进入大学前很少有机会接触计算机,不到10%的学生有过编程经历。这表明学生在入学时对计算机和编程的了解存在显著差异。
-
学习习惯和环境影响学习效果:
- 学习C语言编程的学生中,大多数用时在2-10小时之间,且学习地点主要集中在寝室。这可能意味着学生缺乏有效的学习环境和资源,依赖于他人的成果,这可能影响了他们的学习效果和编程原理的理解。
-
学习方式需改进:
- 报告中通过词云图分析发现,大多数学生对当前的教学方式表示认同,但也有小部分人提出需要老师讲解习题,以及反映编程难度较大。这表明教学方式仍有改进的空间,以更好地满足学生的学习需求。
-
学生学习投入与成绩正相关:
- 报告分析了编程题提交次数与成绩的关系,发现多次提交的学生在学习过程中投入更多时间,研究问题更为透彻,这与最终成绩的提高正相关。
-
作业抄袭现象存在:
- 通过分析提交次数与通过率的关系,报告指出存在一部分学生通过率很高但提交次数很少,这可能表明有抄袭作业的现象。
-
编程做题时长与成绩相关:
- 报告中提到,编程做题时长与提交次数类似,但存在不理想的值,如长时间未关闭答题界面的情况。在合理的时间范围内,编程用时与成绩存在一定的相关性。
-
测试成绩与期末成绩相关:
- 第一次和第二次测试成绩与期末成绩的相关度较高,表明平时成绩较好的学生期末成绩也倾向于较好,这可能是因为这些测试都是在独立完成的情况下进行的,排除了作弊和抄袭的影响。
-
圈复杂度与学生思维慎密性相关:
- 报告分析了圈复杂度与成绩的关系,发现圈复杂度较高的学生往往成绩较好,这可能是因为他们对题目的各种情况考虑得更为全面。
综上所述,报告通过对学生的学习过程数据和问卷数据的分析,揭示了学生的学习背景、学习习惯、作业提交行为和测试成绩等多个方面与最终成绩的关系,为教学改进提供了数据支持。
同时,报告也指出了教学过程中存在的问题,如学生学习环境的不足、作业抄袭现象等,这些问题需要通过教学改革和支持措施来解决。
希望你喜欢这个项目,并在构建过程中找到乐趣!如果你有任何问题或需要帮助,欢迎在评论区交流。
作者:Svan.
注意:本博文为不得在未经本人同意进行转载或者二次创作,违者必究!!!
相关文章:

基于python的《C语言程序设计》课程成绩分析
作者:Svan.声明:未经本人允许,不得对本文中的任何内容、数据进行转载,本人(作者)已经对本文内容申请撰写了论文,随意转载使用本文任何内容的,要追究其法律责任!!…...
@Component 和 @Bean 的区别与联系
相同点: Component 和 Bean 是两种使用注解来定义bean的方式。 Component和Bean的目的是一样的,都是注册bean到Spring容器中。 两者都可以通过Autowired装配 不同点: Component 和 它的子类型(Controller, Service and Reposit…...

高手炒现货黄金短线的方法
现货黄金短线交易的精髓在于“计划你的交易”。短线交易不是临时起意的赌博,也不是盘口随意的追涨杀跌,而是所有因素分析以后的结果。新手进行短线操作容易流为频繁的随意操作,导致成功率不高。但当投资者有了准备,短线交易就再也…...

后端:唯一ID有哪些生成方式
文章目录 在后端开发中的ID生成策略1. 数字型 ID特点:优点:缺点:例子:常见用法: 2. UUID(通用唯一标识符)特点:优点:缺点:例子:常见用法ÿ…...

LabVIEW提高开发效率技巧----高精度延时
在LabVIEW开发中,时间控制是许多应用中的关键环节,尤其是高精度应用中,时钟漂移会严重影响程序的准确性。为此,使用Wait Until Next ms Multiple来代替简单的Wait (ms),可以显著减少时钟漂移,确保高精度延时…...
<Link><Link> 和 <a> </a>标签的区别
1. Link (React Router): 作用: Link 是 react-router-dom 提供的组件,用于在 React 应用中创建前端路由跳转。它不会导致页面重新加载。优点: 无刷新跳转: 使用 Link 进行导航时,React 的路由器会捕获并处理链接,避免浏览器的全…...

靶场战神为何会陨落?
我从第一个SQL注入漏洞原理学起,从sql-libas到DVWA,到pikachu再到breach系列,DC系列靶场,再到实战挖洞,发现靶场与实战的区别是极其大的。 我个人觉得在这种web环境下,难的不是怎么测一个漏洞点,而是怎么找一个漏洞点。靶场与实战最大的区别在于你不知道这个地方到底有没有漏洞…...

rpm 命令
rpm(Red Hat Package Manager)是 Red Hat Linux 及其衍生发行版(如 CentOS、Fedora)中用于管理软件包的系统。它允许用户安装、卸载、升级、查询和验证软件包。 一、安装软件包 (1)安装一个 RPM 软件包&a…...

录微课专用提词器,不会被录进视频中的提词器,还能显示PPT中备注的内容
不坑提词器,全称:不坑隐形提词器。是一款能够在截图、录屏、直播过程中隐藏界面的提词器软件。 系统要求:Win10 1024 以上(特别提醒:Win7状态下不可隐身) ⏬下载 提词器默认放在不坑盒子的安装目录下&…...

Ansible概述
目录 一、ansible简介 二、absible的特点 三、ansible的工作原理以及流程 四、ansible环境安装部署 五、ansible命令行模块 六、inventory 主机清单 一、ansible简介 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。…...

NTC 温度电阻计算方式
100K温度值列表 https://wenku.baidu.com/view/59565cba1a37f111f1855b38?aggId989bc39968d97f192279168884868762cbaebb44&frcatalogMain_text_ernie_recall_feed_index%3Awk_recommend_main1&wkts1729568234531&bdQuery100K%E6%B8%A9%E5%BA%A6%E7%94%B5%E9%98%B…...
Qt中自定义qDebug打印信息的宏(文件名,行数,函数名,日期,时间等前缀)并取消打印
使用qDebug()打印信息时,默认打印"<<"符号后面的信息。 通过自定义宏,可以额外打印文件名,行数,函数,日期、时间等前缀,方便快速定位调式信息的位置。 同时,可以定义宏取消打…...

【基于docker的深度学习训练环境】关键步骤记录
最近给公司搭建了一个小型的深度学习环境,实现了多人通过SSH对GPU资源的利用,下面对一些关键架构和易用性部分进行记录。 一、整体软硬件框架 1、硬件配置,采用的双GPU的方案,两块消费级显卡。 2、应用层架构 宿主机系统为ubunt…...
管理、情商、格局-冯唐讲资质通鉴-笔记
一、CEO职责 制定制度、维护制度,制度即礼,礼崩乐坏,万万不能制定战略找钱、找人 二、汇报线 不能向上越级汇报不能向上越级管理 三、领导 领导出错的情况,依然要服从领导的安排,领导的错轮不到我们来处理干预&am…...

摇人摇人, JD内推岗位(社招+校招)
摇人摇人, 有找工作的家人们看过来啊~ 虚位以待, 快到碗里来 算法开发工程师岗 京东云 北京|T7, 5-10年 岗位职责: 参与基于RAG知识库平台和ChatBI产品打造和商业化落地,进行相关技术:包括OCR、文档拆分、意图理解、多轮对话、NL2SQL、Embed…...

振弦式传感器在高边坡监测中发挥哪些优势?
振弦式传感器在高边坡监测中发挥哪些优势?在工程建设与地质灾害防治领域,高边坡监测至关重要。高边坡的稳定性直接关系到工程的安全以及周边环境和人员的生命财产安全。为了实现对高边坡的有效监测,各种先进的传感器技术被广泛应用,其中振弦…...

计算机网络基础进阶
三次握手四次挥手 三次握手 1------建立连接----------------------2 ACK1,seq0 2------传输数据,建立连接---------1 1------传输数据,建立连接---------2 三次握手用于建立TCP连接,确保通信双方都准备好进行数据传输。整个…...
什么是“钻石继承问题”
钻石继承问题(Diamond Inheritance Problem) 主要是指在多重继承中,由于继承关系的复杂性,子类可能通过多个路径继承到相同的基类,从而导致成员的多份副本或者方法调用的二义性。 C 通过 虚拟继承 来解决这个问题&…...

iOS 回到主线程刷新UI
在iOS 里面,项目打开就会运行一个主线程,所有的UI都在主线程里进行.其他网络请求或者耗时操作理论上也可以在主线程运行,但是如果太耗时,那么就会影响主线程其他UI.所以需要开字线程来进行耗时操作,子线程进行完耗时操作之后,如果项目需求有需要刷新UI,或者改变UI,一定得回到主…...
Spring Data 技术详解与最佳实践
引言 Spring Data 是 Spring 框架的一个模块,旨在简化数据访问层的开发。它提供了一种通用的方法来访问各种数据存储,包括关系型数据库、NoSQL 数据库、搜索引擎等。Spring Data 不仅简化了数据访问代码的编写,还提供了一系列强大的特性&…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...