基于大数据的学生编程数据挖掘与分析

2023-04-29 06:09:52张倩
信息系统工程 2023年10期
关键词:数据挖掘大数据

摘要:在线教育迅速普及,现在已成为一个重要的学习方式,在线编程教育也十分火热。随着Python编程学习热度的不断高涨,如何帮助学生在学习编程时快速提升已经成为一个亟须解决的问题。通过对在线教育平台中学生历史编程数据的挖掘和分析,得到学生在学习编程时最容易出现的程序错误类型,并对学生容易出现这些错误的原因进行分析,为学生进行编程学习提供帮助,同时也为教师进行教学调整提供依据。

关键词:大数据;数据挖掘;编程错误;编程错误类型

一、前言

随着人工智能的兴起,Python语言也得到极大的应用,各大高校纷纷开设Python课程,幼儿Python编程也在逐渐普及。对于Python编程的新学者而言,无论是语法还是编程规则都有一定的难度,同时在学习的过程当中新学者也会产生很多错误。如何帮助新学者在学习Python编程的过程中快速解决这些错误,牢牢掌握编程知识便变得格外重要。学生编程数据挖掘是利用数据挖掘技术来发现、提取和分析学生历史编程数据中的有价值的信息和知识的过程。学生历史编程数据挖掘的目标是从大量的学生编程数据中挖掘出隐藏在其中的规律、趋势和关联性。采集学生在编程学习过程中的历史代码和程序报错信息,通过对这些数据进行采集、清洗、挖掘与分析,从中得出学生在编程过程中最容易产生错误的地方,由此得出在学习时学生需要重点学习的知识点。同时,教师也要对这些知识点进行重点讲解。通过对学生编程数据进行挖掘与分析,能够为学生进行编程学习提供帮助,快速解决学习中遇到的问题,也能为教师调整教学方案提供依据。

二、研究背景

随着网络课程与学习技术系统的发展,在线学习越来越多地发生在各种教育情境中,基于网络的学习能使学生凭自己的喜好进行自主、探究性的学习[1]。在传统教育中,学生聚集在一起由老师统一教学,这样可能会造成某些学生因为跟不上集体进度而学习落后,在线学习就很好地解决了这个问题。教育平台在网络上发布课程视频或者习题,学生如果没有学懂还可以反复观看学习,这样一对一的学习模式极大地帮助了学生,也辅助了老师的授课。由于这些原因,在线学习迅速受到了广泛的关注,各个学科在网上都能找到相应的学习课程。而随着IT在各行各业的应用越来越广泛,人们对编程技术的学习热情也越来越高涨,网络上陆续出现了很多编程教育课程。这些课程以文字或视频等形式进行编程教育,极大地帮助了学生的编程学习。但是,编程学习的最终目的在于编程,这个学科的实践性也暴露了这些课程最大的缺点:在学生编程时,如果程序出现错误,将无法帮助学生进行纠正错误的指导。

在程序开发中,程序错误是不可避免会产生的。程序错误的产生有许多原因,在程序编写的每一个阶段,处理不当都有可能产生错误。程序中错误大致可分为三种:语法错误、运行错误和逻辑错误。语法错误是指由于编程中出现了不符合语法规则的语句而产生的错误。语法错误一旦出现,程序不能运行起来,编译不能通过,这种错误相对于其他两种错误调试起来要容易一些;运行错误是指程序通过了编译能够运行起来,但是运行时出现的错误。一旦发生这种错误,程序会被迫停止运行,这种错误有特定的发生条件,比语法错误调试要难一些;逻辑错误是指程序没有语法错误和运行错误,但是执行出来的结果与预期的不同,这种错误是最难发现与修改的,且修改所花费的成本也最高[2]。对于学习编程的学生来说,能够准确且快速地识别程序错误,并准确地修改错误,是对学习编程的最大助力。修改程序语法错误的过程中,学生能够正确认识错误进而掌握相关语法知识,而运行错误和逻辑错误的修改,则对学生的编程能力有更高的要求,需要学生对相关程序语法熟练掌握,对程序中的业务逻辑了解清晰。

在本文中,我们采集在线编程教育平台中学生的Python编程学习数据,对学生容易出现的编程错误进行数据分析与挖掘,得出学生在学习过程中最容易出现的程序错误,让学生在学习的過程中对这些问题所涉及的相关知识点进行认真学习。同时,也给相关任课老师生成教学建议,让任课老师在上课时,对于容易出现的程序错误点,进行强化教学,保证学生能够精准掌握相关知识点,在编程中不再发生相关错误。

三、相关知识

针对 C 程序编译及运行时的出错情况,相关研究对C程序编译之后的错误进行了分析与研究,将错误类型归纳为原级错误、再生错误和伪错误[3]。原级错误是指编程者在编写程序的过程中,因为粗心等初级问题而导致程序出现的错误,这一类的错误修改起来非常简单,且通常与编程者的知识掌握程度关联不太大。再生错误指的是因为原级错误的存在,导致后续程序出现的错误,当原级错误被解决时,再生错误通常也会自动消失。伪错误指的是当编程者在修改程序中当前存在的错误时,由于修改不当,导致程序中其他地方出现的错误。

而依据C语言语法格式和编程规则,则有研究对C程序中的错误进行了分类,主要错误包括程序书写格式错误。在编程过程中,由于编程者的书写习惯或者粗心大意,很容易发生因格式错误而造成的程序编译不通过。除了书写格式错误以外,还有输入出错、与编译环境不匹配等[4]。

除了C语言之外,还有研究通过对AspectJ语言进行分析,给出了八种程序错误类型。这八种程序错误类型涉及程序语法、程序流程控制有误导致程序错误、异常抛出导致程序流程发生改变、错误建立后置条件、类型间声明使用不当等[5]。

上述的程序错误分析相关研究,针对的大部分是C语言或其他使用人不多的语言。现今使用最多的语言是Python语言,由软件开发工具制造商 JetBrains 发布的《2020年开发者生态报告》显示,在2019年,Python已经超越JAVA,成为使用人数最多的编程语言。随着人工智能的兴起,Python的使用变得越来越广泛,无论是数据分析与挖掘,还是深度学习、机器学习等人工智能相关技能,绝大部分编程人员都会选择Python语言进行开发。为了对接产业,让学生在课堂上学习的知识能够直接应用到工作中,大部分高校在教学期间,都会给学生开设Python课程,而Python编程的学习并非容易。Python编程语言有一套独立的语法体系,同时还有独有的内置函数、模块和标准库等,学生在学习编程的过程中,最重要的步骤也是不能缺少的一步就是动手编程,因为Python学习的难度,程序会出现各种各样的错误。由此,学生在学习的过程中,哪些错误出现得比较频繁就是一个非常值得研究的问题。

本文主要通过基于字段切割的错误标志提取算法对代码报错信息切割,提取出代码错误标志,并对每种代码错误标志进行统计分析,得出每类代码错误的分布情况,以此为依据,为学生代码编写学习提供参考,并为教师日常编程教学提供参照。

四、数据预处理

本文提取编程教学平台中学生的编程记录历史数据,一共有来自2380 名学生的40355条编程错误提示信息。数据集中包括学生姓名、学生学习ID号和学生提交代码,除此之外,学生在平台中每次写完代码可以进行提交。在提交完毕后,系统后台会将该学生此次编写的代码进行存储,然后系统会运行代码,如果代码出现错误,那么系统会将错误信息进行显示,让学生能够根据错误信息修改代码,同时系统也会将错误信息存储到后台,所以数据集中还包括学生的代码报错信息。由于平台延时、学生重复提交和系统错误等问题,数据集中会出现重复、数据不一致和数据缺失等问题。在进行数据分析之前,要将数据集进行预处理,将重复数据进行删除,同时按照数据集的主键约束保证数据的唯一性和一致性。平台在进行错误信息存储时,由于延时等问题,会造成错误信息存储失败,所以要进行缺失数据处理。本文中的数据为代码错误信息,一旦缺失便不能进行错误标志识别,所以需要将缺失数据进行删除,处理完成后的数据集便可进行后续的数据分析。

五、程序错误数据分析与挖掘

当程序运行出现错误时,编译器会给出报错信息,报错信息一般包含三部分,第一部分一般为第一行,给出当前运行程序的存储路径和出错的代码行数,第二部分为一到多行,给出出错的具体代码,并会指出代码出错的位置,第三部分为最后一行,给出报错标志类型。报错信息如图1所示。

Python程序错误标志有多种,包括SyntaxError(语法错误)、TypeError(对类型无效的操作)、ValueError(传入无效的参数)、IndentationError(缩进错误)、AttributeError(对象没有这个属性)、ImportError(导入模块/对象失败)、KeyError(映射中没有这个键)等。本文通过字段切割算法来提取学生报错信息中的错误标志,该算法的核心为正则表达式模式匹配,正则表达式是记录文本规则的代码,也就是一种字符串匹配方法,可以用于在字符串中进行子串的查找和替换,应用十分广泛。在本文中,由于错误标志存在于报错信息中,且错误类型的前文为错误代码,与错误标志之前存在一个换行,所以在错误标志之前要匹配一个换行符,在错误标志之后为一个冒号,所以在最后需要匹配一个冒号,提取错误标志的字符串模板如图2所示。

将经过预处理的数据都通过字段切割算法提取出错误标志,然后将所有提取出来的错误标志存储进错误标志库。接着,我们便可对错误标志库中的数据进行分析,通过统计分析,我们可以得到如表1所示的程序错误标志类型和每种类型的数量以及占比。从表中我们可以看出来,出错最多的是语法错误,有7037个程序都是因为语法而报错,占比达到27.64%。由此可见,对于学生来说,学习编程语言时,最难掌握的就是程序语法,这个错误对于学生来说非常常见。由于大部分学生是初学者,而程序中的语法知识点非常多且大多都比较难以掌握,所以学生学起来会比较困难;其次便是未声明/初始化对象,占比达到24.27%。未声明和初始化对象是初学者经常会犯的一个错误,主要原因是初学者在使用一个变量或常量前经常会忘记定义该量,或者是定义了而没有赋初值,有6179个程序因为该错误而报错。缩进错误的出现主要是因为学生对于Python编程规则的不熟悉,有4871个程序因为此错误而报错,占比达19.13%。对类型无效的操作错误的出现主要是因为传入参数个数与函数本身参数个数不一致,或者传入参数的数据类型与函数本身参数数据类型不一致,有3822个程序因此错误而报错。还有学生程序因为超过递归深度而报错,这一类错误的出现主要是因为递归次数过多,学生对于递归知识点没有掌握牢固。如图3所示,学生错得最多的8种类型,分别是语法错误、未声明/初始化对象、缩进错误、对类型无效的操作、超过递归深度、对象没有这个属性、序列中没有此索引和访问未初始化的本地变量。这些错误都是初学者经常会犯的错误,由此可见学生在学习编程时,主要是因为对程序语法和编程规则不够熟练而导致程序出错。而没有内建输入、导入模块/对象失败、找不到模块、Tkinter模块调用错误、映射中没有这个键、传入无效的参数、自动提升为长整型错误、除零等错误则出现的次数比较少。编程时这些错误的出现一般是因为对程序逻辑没有建构清楚或者是对于内置模块没有了解透彻,前文所述常见错误类型的出现是因为学生对于基础的程序知识掌握不够熟练。相比起来,出现次数比较少的错误类型则代表了一小部分学生对于编程基本知识掌握比较牢固,而程序逻辑建构能力还不够扎实。

从上述的数据挖掘与分析中,我们可以得知,学生在学习编程知识时,经常出错的地方为语法错误、未声明/初始化对象、缩进错误、对类型无效的操作、超过递归深度、对象没有这个属性、序列中没有此索引和访问为初始化的本地变量。这也就要求学生在进行编程学习时,在这些方面要特别注意,对于编程的基础语法和编程规则要牢牢掌握。而对于教师而言,在进行课程的教授时,在这些方面要特别着重讲授和强调,多为学生进行讲解,多给学生布置相关习题,保证学生能够牢牢掌握这些知识点,在编程的学习上大幅提升。

六、结语

本文提取了编程教育平台中学生的历史编程数据,对该数据进行预处理,剔除数据集中的重复数据和缺失数据,并对数据集中存在的数据不一致问题进行解决。然后,通过字段切割算法来对数据集中的错误标志类型进行挖掘,得到每个学生编程时具体的报错类型,最后对错误类型进行统计分析。通过统计分析,我们可以得知,学生在初学编程时,非常容易在程序语法和编程规则上出错,这也就为学生学习程序时提供了帮助,学生在这些方面就要认真学习,攻克这些学习难点。同时,也为老师的教学方法调整提供依据,在老师进行编程授课时,在这些方面就要让学生多加练习,保证学生能够真正掌握知识点。

参考文献

[1]胡艺龄,顾小清,赵春.在线学习行为分析建模及挖掘[J].开放教育研究,2014,20(02):102-110.

[2]张倩.基于群体学习行为数据的编程错误引导修复方法研究与实现[D].长沙:国防科技大学,2020.

[3]辛明影,邵冬云,王开铸.C程序错误分析和查错研究[J].电脑学习,2010(05):102-103.

[4]李璟.C程序常见错误分析[J].电脑知识与技术,2006(26):148+166.

[5]丁辉,姚庆文.面向方面程序错误类型分析[J].微计算机信息,2005(14):133-136+57.

作者单位:湖南高速铁路职业技术学院

■ 责任编辑:周航

猜你喜欢
数据挖掘大数据
探讨人工智能与数据挖掘发展趋势
基于并行计算的大数据挖掘在电网中的应用
电力与能源(2017年6期)2017-05-14 06:19:37
数据挖掘技术在中医诊疗数据分析中的应用
大数据环境下基于移动客户端的传统媒体转型思路
新闻世界(2016年10期)2016-10-11 20:13:53
基于大数据背景下的智慧城市建设研究
科技视界(2016年20期)2016-09-29 10:53:22
数据+舆情:南方报业创新转型提高服务能力的探索
中国记者(2016年6期)2016-08-26 12:36:20
一种基于Hadoop的大数据挖掘云服务及应用
数据挖掘的分析与探索
河南科技(2014年23期)2014-02-27 14:18:43
基于GPGPU的离散数据挖掘研究