国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于大數(shù)據(jù)的學(xué)生編程數(shù)據(jù)挖掘與分析

2023-04-29 06:09:52張倩
信息系統(tǒng)工程 2023年10期
關(guān)鍵詞:數(shù)據(jù)挖掘大數(shù)據(jù)

摘要:在線教育迅速普及,現(xiàn)在已成為一個重要的學(xué)習(xí)方式,在線編程教育也十分火熱。隨著Python編程學(xué)習(xí)熱度的不斷高漲,如何幫助學(xué)生在學(xué)習(xí)編程時快速提升已經(jīng)成為一個亟須解決的問題。通過對在線教育平臺中學(xué)生歷史編程數(shù)據(jù)的挖掘和分析,得到學(xué)生在學(xué)習(xí)編程時最容易出現(xiàn)的程序錯誤類型,并對學(xué)生容易出現(xiàn)這些錯誤的原因進行分析,為學(xué)生進行編程學(xué)習(xí)提供幫助,同時也為教師進行教學(xué)調(diào)整提供依據(jù)。

關(guān)鍵詞:大數(shù)據(jù);數(shù)據(jù)挖掘;編程錯誤;編程錯誤類型

一、前言

隨著人工智能的興起,Python語言也得到極大的應(yīng)用,各大高校紛紛開設(shè)Python課程,幼兒Python編程也在逐漸普及。對于Python編程的新學(xué)者而言,無論是語法還是編程規(guī)則都有一定的難度,同時在學(xué)習(xí)的過程當(dāng)中新學(xué)者也會產(chǎn)生很多錯誤。如何幫助新學(xué)者在學(xué)習(xí)Python編程的過程中快速解決這些錯誤,牢牢掌握編程知識便變得格外重要。學(xué)生編程數(shù)據(jù)挖掘是利用數(shù)據(jù)挖掘技術(shù)來發(fā)現(xiàn)、提取和分析學(xué)生歷史編程數(shù)據(jù)中的有價值的信息和知識的過程。學(xué)生歷史編程數(shù)據(jù)挖掘的目標(biāo)是從大量的學(xué)生編程數(shù)據(jù)中挖掘出隱藏在其中的規(guī)律、趨勢和關(guān)聯(lián)性。采集學(xué)生在編程學(xué)習(xí)過程中的歷史代碼和程序報錯信息,通過對這些數(shù)據(jù)進行采集、清洗、挖掘與分析,從中得出學(xué)生在編程過程中最容易產(chǎn)生錯誤的地方,由此得出在學(xué)習(xí)時學(xué)生需要重點學(xué)習(xí)的知識點。同時,教師也要對這些知識點進行重點講解。通過對學(xué)生編程數(shù)據(jù)進行挖掘與分析,能夠為學(xué)生進行編程學(xué)習(xí)提供幫助,快速解決學(xué)習(xí)中遇到的問題,也能為教師調(diào)整教學(xué)方案提供依據(jù)。

二、研究背景

隨著網(wǎng)絡(luò)課程與學(xué)習(xí)技術(shù)系統(tǒng)的發(fā)展,在線學(xué)習(xí)越來越多地發(fā)生在各種教育情境中,基于網(wǎng)絡(luò)的學(xué)習(xí)能使學(xué)生憑自己的喜好進行自主、探究性的學(xué)習(xí)[1]。在傳統(tǒng)教育中,學(xué)生聚集在一起由老師統(tǒng)一教學(xué),這樣可能會造成某些學(xué)生因為跟不上集體進度而學(xué)習(xí)落后,在線學(xué)習(xí)就很好地解決了這個問題。教育平臺在網(wǎng)絡(luò)上發(fā)布課程視頻或者習(xí)題,學(xué)生如果沒有學(xué)懂還可以反復(fù)觀看學(xué)習(xí),這樣一對一的學(xué)習(xí)模式極大地幫助了學(xué)生,也輔助了老師的授課。由于這些原因,在線學(xué)習(xí)迅速受到了廣泛的關(guān)注,各個學(xué)科在網(wǎng)上都能找到相應(yīng)的學(xué)習(xí)課程。而隨著IT在各行各業(yè)的應(yīng)用越來越廣泛,人們對編程技術(shù)的學(xué)習(xí)熱情也越來越高漲,網(wǎng)絡(luò)上陸續(xù)出現(xiàn)了很多編程教育課程。這些課程以文字或視頻等形式進行編程教育,極大地幫助了學(xué)生的編程學(xué)習(xí)。但是,編程學(xué)習(xí)的最終目的在于編程,這個學(xué)科的實踐性也暴露了這些課程最大的缺點:在學(xué)生編程時,如果程序出現(xiàn)錯誤,將無法幫助學(xué)生進行糾正錯誤的指導(dǎo)。

在程序開發(fā)中,程序錯誤是不可避免會產(chǎn)生的。程序錯誤的產(chǎn)生有許多原因,在程序編寫的每一個階段,處理不當(dāng)都有可能產(chǎn)生錯誤。程序中錯誤大致可分為三種:語法錯誤、運行錯誤和邏輯錯誤。語法錯誤是指由于編程中出現(xiàn)了不符合語法規(guī)則的語句而產(chǎn)生的錯誤。語法錯誤一旦出現(xiàn),程序不能運行起來,編譯不能通過,這種錯誤相對于其他兩種錯誤調(diào)試起來要容易一些;運行錯誤是指程序通過了編譯能夠運行起來,但是運行時出現(xiàn)的錯誤。一旦發(fā)生這種錯誤,程序會被迫停止運行,這種錯誤有特定的發(fā)生條件,比語法錯誤調(diào)試要難一些;邏輯錯誤是指程序沒有語法錯誤和運行錯誤,但是執(zhí)行出來的結(jié)果與預(yù)期的不同,這種錯誤是最難發(fā)現(xiàn)與修改的,且修改所花費的成本也最高[2]。對于學(xué)習(xí)編程的學(xué)生來說,能夠準(zhǔn)確且快速地識別程序錯誤,并準(zhǔn)確地修改錯誤,是對學(xué)習(xí)編程的最大助力。修改程序語法錯誤的過程中,學(xué)生能夠正確認(rèn)識錯誤進而掌握相關(guān)語法知識,而運行錯誤和邏輯錯誤的修改,則對學(xué)生的編程能力有更高的要求,需要學(xué)生對相關(guān)程序語法熟練掌握,對程序中的業(yè)務(wù)邏輯了解清晰。

在本文中,我們采集在線編程教育平臺中學(xué)生的Python編程學(xué)習(xí)數(shù)據(jù),對學(xué)生容易出現(xiàn)的編程錯誤進行數(shù)據(jù)分析與挖掘,得出學(xué)生在學(xué)習(xí)過程中最容易出現(xiàn)的程序錯誤,讓學(xué)生在學(xué)習(xí)的過程中對這些問題所涉及的相關(guān)知識點進行認(rèn)真學(xué)習(xí)。同時,也給相關(guān)任課老師生成教學(xué)建議,讓任課老師在上課時,對于容易出現(xiàn)的程序錯誤點,進行強化教學(xué),保證學(xué)生能夠精準(zhǔn)掌握相關(guān)知識點,在編程中不再發(fā)生相關(guān)錯誤。

三、相關(guān)知識

針對 C 程序編譯及運行時的出錯情況,相關(guān)研究對C程序編譯之后的錯誤進行了分析與研究,將錯誤類型歸納為原級錯誤、再生錯誤和偽錯誤[3]。原級錯誤是指編程者在編寫程序的過程中,因為粗心等初級問題而導(dǎo)致程序出現(xiàn)的錯誤,這一類的錯誤修改起來非常簡單,且通常與編程者的知識掌握程度關(guān)聯(lián)不太大。再生錯誤指的是因為原級錯誤的存在,導(dǎo)致后續(xù)程序出現(xiàn)的錯誤,當(dāng)原級錯誤被解決時,再生錯誤通常也會自動消失。偽錯誤指的是當(dāng)編程者在修改程序中當(dāng)前存在的錯誤時,由于修改不當(dāng),導(dǎo)致程序中其他地方出現(xiàn)的錯誤。

而依據(jù)C語言語法格式和編程規(guī)則,則有研究對C程序中的錯誤進行了分類,主要錯誤包括程序書寫格式錯誤。在編程過程中,由于編程者的書寫習(xí)慣或者粗心大意,很容易發(fā)生因格式錯誤而造成的程序編譯不通過。除了書寫格式錯誤以外,還有輸入出錯、與編譯環(huán)境不匹配等[4]。

除了C語言之外,還有研究通過對AspectJ語言進行分析,給出了八種程序錯誤類型。這八種程序錯誤類型涉及程序語法、程序流程控制有誤導(dǎo)致程序錯誤、異常拋出導(dǎo)致程序流程發(fā)生改變、錯誤建立后置條件、類型間聲明使用不當(dāng)?shù)萚5]。

上述的程序錯誤分析相關(guān)研究,針對的大部分是C語言或其他使用人不多的語言?,F(xiàn)今使用最多的語言是Python語言,由軟件開發(fā)工具制造商 JetBrains 發(fā)布的《2020年開發(fā)者生態(tài)報告》顯示,在2019年,Python已經(jīng)超越JAVA,成為使用人數(shù)最多的編程語言。隨著人工智能的興起,Python的使用變得越來越廣泛,無論是數(shù)據(jù)分析與挖掘,還是深度學(xué)習(xí)、機器學(xué)習(xí)等人工智能相關(guān)技能,絕大部分編程人員都會選擇Python語言進行開發(fā)。為了對接產(chǎn)業(yè),讓學(xué)生在課堂上學(xué)習(xí)的知識能夠直接應(yīng)用到工作中,大部分高校在教學(xué)期間,都會給學(xué)生開設(shè)Python課程,而Python編程的學(xué)習(xí)并非容易。Python編程語言有一套獨立的語法體系,同時還有獨有的內(nèi)置函數(shù)、模塊和標(biāo)準(zhǔn)庫等,學(xué)生在學(xué)習(xí)編程的過程中,最重要的步驟也是不能缺少的一步就是動手編程,因為Python學(xué)習(xí)的難度,程序會出現(xiàn)各種各樣的錯誤。由此,學(xué)生在學(xué)習(xí)的過程中,哪些錯誤出現(xiàn)得比較頻繁就是一個非常值得研究的問題。

本文主要通過基于字段切割的錯誤標(biāo)志提取算法對代碼報錯信息切割,提取出代碼錯誤標(biāo)志,并對每種代碼錯誤標(biāo)志進行統(tǒng)計分析,得出每類代碼錯誤的分布情況,以此為依據(jù),為學(xué)生代碼編寫學(xué)習(xí)提供參考,并為教師日常編程教學(xué)提供參照。

四、數(shù)據(jù)預(yù)處理

本文提取編程教學(xué)平臺中學(xué)生的編程記錄歷史數(shù)據(jù),一共有來自2380 名學(xué)生的40355條編程錯誤提示信息。數(shù)據(jù)集中包括學(xué)生姓名、學(xué)生學(xué)習(xí)ID號和學(xué)生提交代碼,除此之外,學(xué)生在平臺中每次寫完代碼可以進行提交。在提交完畢后,系統(tǒng)后臺會將該學(xué)生此次編寫的代碼進行存儲,然后系統(tǒng)會運行代碼,如果代碼出現(xiàn)錯誤,那么系統(tǒng)會將錯誤信息進行顯示,讓學(xué)生能夠根據(jù)錯誤信息修改代碼,同時系統(tǒng)也會將錯誤信息存儲到后臺,所以數(shù)據(jù)集中還包括學(xué)生的代碼報錯信息。由于平臺延時、學(xué)生重復(fù)提交和系統(tǒng)錯誤等問題,數(shù)據(jù)集中會出現(xiàn)重復(fù)、數(shù)據(jù)不一致和數(shù)據(jù)缺失等問題。在進行數(shù)據(jù)分析之前,要將數(shù)據(jù)集進行預(yù)處理,將重復(fù)數(shù)據(jù)進行刪除,同時按照數(shù)據(jù)集的主鍵約束保證數(shù)據(jù)的唯一性和一致性。平臺在進行錯誤信息存儲時,由于延時等問題,會造成錯誤信息存儲失敗,所以要進行缺失數(shù)據(jù)處理。本文中的數(shù)據(jù)為代碼錯誤信息,一旦缺失便不能進行錯誤標(biāo)志識別,所以需要將缺失數(shù)據(jù)進行刪除,處理完成后的數(shù)據(jù)集便可進行后續(xù)的數(shù)據(jù)分析。

五、程序錯誤數(shù)據(jù)分析與挖掘

當(dāng)程序運行出現(xiàn)錯誤時,編譯器會給出報錯信息,報錯信息一般包含三部分,第一部分一般為第一行,給出當(dāng)前運行程序的存儲路徑和出錯的代碼行數(shù),第二部分為一到多行,給出出錯的具體代碼,并會指出代碼出錯的位置,第三部分為最后一行,給出報錯標(biāo)志類型。報錯信息如圖1所示。

Python程序錯誤標(biāo)志有多種,包括SyntaxError(語法錯誤)、TypeError(對類型無效的操作)、ValueError(傳入無效的參數(shù))、IndentationError(縮進錯誤)、AttributeError(對象沒有這個屬性)、ImportError(導(dǎo)入模塊/對象失敗)、KeyError(映射中沒有這個鍵)等。本文通過字段切割算法來提取學(xué)生報錯信息中的錯誤標(biāo)志,該算法的核心為正則表達式模式匹配,正則表達式是記錄文本規(guī)則的代碼,也就是一種字符串匹配方法,可以用于在字符串中進行子串的查找和替換,應(yīng)用十分廣泛。在本文中,由于錯誤標(biāo)志存在于報錯信息中,且錯誤類型的前文為錯誤代碼,與錯誤標(biāo)志之前存在一個換行,所以在錯誤標(biāo)志之前要匹配一個換行符,在錯誤標(biāo)志之后為一個冒號,所以在最后需要匹配一個冒號,提取錯誤標(biāo)志的字符串模板如圖2所示。

將經(jīng)過預(yù)處理的數(shù)據(jù)都通過字段切割算法提取出錯誤標(biāo)志,然后將所有提取出來的錯誤標(biāo)志存儲進錯誤標(biāo)志庫。接著,我們便可對錯誤標(biāo)志庫中的數(shù)據(jù)進行分析,通過統(tǒng)計分析,我們可以得到如表1所示的程序錯誤標(biāo)志類型和每種類型的數(shù)量以及占比。從表中我們可以看出來,出錯最多的是語法錯誤,有7037個程序都是因為語法而報錯,占比達到27.64%。由此可見,對于學(xué)生來說,學(xué)習(xí)編程語言時,最難掌握的就是程序語法,這個錯誤對于學(xué)生來說非常常見。由于大部分學(xué)生是初學(xué)者,而程序中的語法知識點非常多且大多都比較難以掌握,所以學(xué)生學(xué)起來會比較困難;其次便是未聲明/初始化對象,占比達到24.27%。未聲明和初始化對象是初學(xué)者經(jīng)常會犯的一個錯誤,主要原因是初學(xué)者在使用一個變量或常量前經(jīng)常會忘記定義該量,或者是定義了而沒有賦初值,有6179個程序因為該錯誤而報錯??s進錯誤的出現(xiàn)主要是因為學(xué)生對于Python編程規(guī)則的不熟悉,有4871個程序因為此錯誤而報錯,占比達19.13%。對類型無效的操作錯誤的出現(xiàn)主要是因為傳入?yún)?shù)個數(shù)與函數(shù)本身參數(shù)個數(shù)不一致,或者傳入?yún)?shù)的數(shù)據(jù)類型與函數(shù)本身參數(shù)數(shù)據(jù)類型不一致,有3822個程序因此錯誤而報錯。還有學(xué)生程序因為超過遞歸深度而報錯,這一類錯誤的出現(xiàn)主要是因為遞歸次數(shù)過多,學(xué)生對于遞歸知識點沒有掌握牢固。如圖3所示,學(xué)生錯得最多的8種類型,分別是語法錯誤、未聲明/初始化對象、縮進錯誤、對類型無效的操作、超過遞歸深度、對象沒有這個屬性、序列中沒有此索引和訪問未初始化的本地變量。這些錯誤都是初學(xué)者經(jīng)常會犯的錯誤,由此可見學(xué)生在學(xué)習(xí)編程時,主要是因為對程序語法和編程規(guī)則不夠熟練而導(dǎo)致程序出錯。而沒有內(nèi)建輸入、導(dǎo)入模塊/對象失敗、找不到模塊、Tkinter模塊調(diào)用錯誤、映射中沒有這個鍵、傳入無效的參數(shù)、自動提升為長整型錯誤、除零等錯誤則出現(xiàn)的次數(shù)比較少。編程時這些錯誤的出現(xiàn)一般是因為對程序邏輯沒有建構(gòu)清楚或者是對于內(nèi)置模塊沒有了解透徹,前文所述常見錯誤類型的出現(xiàn)是因為學(xué)生對于基礎(chǔ)的程序知識掌握不夠熟練。相比起來,出現(xiàn)次數(shù)比較少的錯誤類型則代表了一小部分學(xué)生對于編程基本知識掌握比較牢固,而程序邏輯建構(gòu)能力還不夠扎實。

從上述的數(shù)據(jù)挖掘與分析中,我們可以得知,學(xué)生在學(xué)習(xí)編程知識時,經(jīng)常出錯的地方為語法錯誤、未聲明/初始化對象、縮進錯誤、對類型無效的操作、超過遞歸深度、對象沒有這個屬性、序列中沒有此索引和訪問為初始化的本地變量。這也就要求學(xué)生在進行編程學(xué)習(xí)時,在這些方面要特別注意,對于編程的基礎(chǔ)語法和編程規(guī)則要牢牢掌握。而對于教師而言,在進行課程的教授時,在這些方面要特別著重講授和強調(diào),多為學(xué)生進行講解,多給學(xué)生布置相關(guān)習(xí)題,保證學(xué)生能夠牢牢掌握這些知識點,在編程的學(xué)習(xí)上大幅提升。

六、結(jié)語

本文提取了編程教育平臺中學(xué)生的歷史編程數(shù)據(jù),對該數(shù)據(jù)進行預(yù)處理,剔除數(shù)據(jù)集中的重復(fù)數(shù)據(jù)和缺失數(shù)據(jù),并對數(shù)據(jù)集中存在的數(shù)據(jù)不一致問題進行解決。然后,通過字段切割算法來對數(shù)據(jù)集中的錯誤標(biāo)志類型進行挖掘,得到每個學(xué)生編程時具體的報錯類型,最后對錯誤類型進行統(tǒng)計分析。通過統(tǒng)計分析,我們可以得知,學(xué)生在初學(xué)編程時,非常容易在程序語法和編程規(guī)則上出錯,這也就為學(xué)生學(xué)習(xí)程序時提供了幫助,學(xué)生在這些方面就要認(rèn)真學(xué)習(xí),攻克這些學(xué)習(xí)難點。同時,也為老師的教學(xué)方法調(diào)整提供依據(jù),在老師進行編程授課時,在這些方面就要讓學(xué)生多加練習(xí),保證學(xué)生能夠真正掌握知識點。

參考文獻

[1]胡藝齡,顧小清,趙春.在線學(xué)習(xí)行為分析建模及挖掘[J].開放教育研究,2014,20(02):102-110.

[2]張倩.基于群體學(xué)習(xí)行為數(shù)據(jù)的編程錯誤引導(dǎo)修復(fù)方法研究與實現(xiàn)[D].長沙:國防科技大學(xué),2020.

[3]辛明影,邵冬云,王開鑄.C程序錯誤分析和查錯研究[J].電腦學(xué)習(xí),2010(05):102-103.

[4]李璟.C程序常見錯誤分析[J].電腦知識與技術(shù),2006(26):148+166.

[5]丁輝,姚慶文.面向方面程序錯誤類型分析[J].微計算機信息,2005(14):133-136+57.

作者單位:湖南高速鐵路職業(yè)技術(shù)學(xué)院

■ 責(zé)任編輯:周航

猜你喜歡
數(shù)據(jù)挖掘大數(shù)據(jù)
探討人工智能與數(shù)據(jù)挖掘發(fā)展趨勢
基于并行計算的大數(shù)據(jù)挖掘在電網(wǎng)中的應(yīng)用
電力與能源(2017年6期)2017-05-14 06:19:37
數(shù)據(jù)挖掘技術(shù)在中醫(yī)診療數(shù)據(jù)分析中的應(yīng)用
大數(shù)據(jù)環(huán)境下基于移動客戶端的傳統(tǒng)媒體轉(zhuǎn)型思路
新聞世界(2016年10期)2016-10-11 20:13:53
基于大數(shù)據(jù)背景下的智慧城市建設(shè)研究
科技視界(2016年20期)2016-09-29 10:53:22
數(shù)據(jù)+輿情:南方報業(yè)創(chuàng)新轉(zhuǎn)型提高服務(wù)能力的探索
中國記者(2016年6期)2016-08-26 12:36:20
一種基于Hadoop的大數(shù)據(jù)挖掘云服務(wù)及應(yīng)用
數(shù)據(jù)挖掘的分析與探索
河南科技(2014年23期)2014-02-27 14:18:43
基于GPGPU的離散數(shù)據(jù)挖掘研究
会东县| 阜康市| 泰来县| 饶河县| 玉田县| 内江市| 永康市| 高雄县| 鄄城县| 瓮安县| 长宁区| 得荣县| 屏东县| 颍上县| 剑阁县| 瓮安县| 临猗县| 宜兴市| 来宾市| 双江| 鲜城| 米脂县| 蓝田县| 府谷县| 河东区| 夏河县| 桂平市| 绍兴县| 尚志市| 澳门| 宾川县| 安阳市| 景谷| 阳东县| 华宁县| 濉溪县| 富民县| 阿瓦提县| 宁河县| 鄂温| 库车县|