李小白 黃洪標(biāo) 陳鑫 杜平
摘? 要:教師對(duì)學(xué)生成績(jī)分析一般僅統(tǒng)計(jì)處在優(yōu)、一般、差的人數(shù),對(duì)每位學(xué)生具體擅長(zhǎng)與不擅長(zhǎng)的課程往往無(wú)法了解。為了能挖掘出每位學(xué)生擅長(zhǎng)與不擅長(zhǎng)課程,更好地提高教學(xué)質(zhì)量,利用Python語(yǔ)言開(kāi)發(fā)了基于數(shù)據(jù)挖掘的學(xué)生成績(jī)分析系統(tǒng)。使用決策樹(shù)算法中的CART算法對(duì)學(xué)生成績(jī)進(jìn)行分析預(yù)測(cè),對(duì)決策樹(shù)進(jìn)行剪枝降低樹(shù)的高度防止過(guò)擬合,不斷優(yōu)化決策樹(shù)模型,使分析預(yù)測(cè)達(dá)到一個(gè)較為精準(zhǔn)的水平,更好地為高校教學(xué)服務(wù)。
關(guān)鍵詞:數(shù)據(jù)挖掘;決策樹(shù)算法;成績(jī)分析系統(tǒng)
中圖分類號(hào):TP311.13? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2020)16-0082-03
Student Achievement Analysis System Based on Data Mining
LI Xiaobai,HUANG Hongbiao,CHEN Xin,DU Ping
(Guangdong Construction Polytechnic,Guangzhou? 511500,China)
Abstract:The analysis and processing of studentsperformance by teachers is only to count the number of students whose performance is in the excellent,general and poor grades. It is often impossible to understand the specific courses that each student is good at or not good at. If the teacher can find out each students good at the curriculum and not good at the curriculum,it will play a positive role in improving the quality of teaching. The student achievement analysis system based on data mining is developed by using Python language. The system uses CART algorithm in decision tree algorithm to analyze and predict the students performance,prunes the decision tree to reduce the height of the tree to prevent over fitting,and constantly adjusts parameters to optimize the decision tree model,so that the analysis and prediction can reach a more accurate level and provide better service for college teaching.
Keywords:data mining;decision tree algorithm;achievement analysis system
0? 引? 言
為了解決廣東建設(shè)職業(yè)技術(shù)學(xué)院教師對(duì)學(xué)生成績(jī)以及偏科情況了解不夠清楚的問(wèn)題,作者采用AngularJS作為前端框架,使用Flask輕量級(jí)框架用于前后端交互進(jìn)行對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),設(shè)計(jì)了基于數(shù)據(jù)挖掘的學(xué)生成績(jī)分析系統(tǒng),能夠根據(jù)學(xué)生課程成績(jī)以及所在年級(jí)的所有學(xué)生的課程成績(jī),通過(guò)決策樹(shù)算法來(lái)分析預(yù)測(cè)某個(gè)學(xué)生對(duì)某門(mén)課程的擅長(zhǎng)程度。從而直觀明了地反映出學(xué)生對(duì)課程成績(jī)掌握的情況,即達(dá)到對(duì)學(xué)生成績(jī)分析的目的。同時(shí)該系統(tǒng)還針對(duì)整個(gè)班級(jí)來(lái)分析班級(jí)的成績(jī)情況,讓班主任也能夠直接直觀的了解班里的情況,而不是簡(jiǎn)單的通過(guò)Excel統(tǒng)計(jì)表來(lái)掌握班級(jí)學(xué)生學(xué)習(xí)情況,通過(guò)Python庫(kù)提供的畫(huà)圖工具,能簡(jiǎn)單有效的以各種圖形直觀的呈現(xiàn)出班級(jí)成績(jī)的情況,包括及格人數(shù)、優(yōu)秀人數(shù)等等。同時(shí)用戶還能夠?qū)W(xué)生課程成績(jī)進(jìn)行管理,包括對(duì)學(xué)生課程成績(jī)進(jìn)行增刪改查以及對(duì)學(xué)生課程成績(jī)按姓名、學(xué)號(hào)、班級(jí)號(hào)以及課程名等進(jìn)行模糊搜索。
通過(guò)構(gòu)建決策樹(shù)模型,用學(xué)生個(gè)人成績(jī)以及該名學(xué)生所在年級(jí)的課程成績(jī)作為訓(xùn)練集的輸入,以學(xué)生對(duì)該門(mén)課程的擅長(zhǎng)程度作為訓(xùn)練集的輸出來(lái)訓(xùn)練模型,預(yù)測(cè)某個(gè)學(xué)生對(duì)他所學(xué)課程的擅長(zhǎng)程度來(lái)實(shí)現(xiàn)個(gè)人成績(jī)分析。通過(guò)對(duì)數(shù)據(jù)庫(kù)課程成績(jī)表的查詢操作并以柱狀圖的形式直觀反映班級(jí)的成績(jī)情況來(lái)實(shí)現(xiàn)班級(jí)成績(jī)分析。
1? 系統(tǒng)核心功能實(shí)現(xiàn)
1.1? 用戶信息管理
該系統(tǒng)可以對(duì)用戶進(jìn)行管理,包括用戶的增刪改查,用戶分為管理員與普通用戶,管理員可以管理用戶并且具有課程成績(jī)管理權(quán)限,包括課程成績(jī)的增刪改查,還能進(jìn)行學(xué)生的個(gè)人成績(jī)分析,當(dāng)管理員輸入指定學(xué)號(hào)時(shí),可以得到該學(xué)生所學(xué)課程成績(jī)的情況,也可以進(jìn)行班級(jí)成績(jī)分析,當(dāng)管理員輸入指定的班級(jí)號(hào)時(shí),可以得到該班級(jí)的成績(jī)情況,包括均分、及格人數(shù)以及優(yōu)秀人數(shù)。
用戶類定義如下:
class User(db.Model):
__tablename__ = 'user'
__table_args__ = {"useexisting": True}
id = db.Column(db.INT, primary_key=True)
login_name = db.Column(db.String(30), nullable=False)
pass_word = db.Column(db.String(255), nullable=True)
sex = db.Column(db.String(255), nullable=True)
age = db.Column(db.String(255), nullable=True)
role = db.Column(db.String(255), nullable=True)
remark = db.Column(db.String(255), nullable= False,default=1
1.2? 課程成績(jī)管理
可以對(duì)學(xué)生的課程成績(jī)進(jìn)行管理,包括課程成績(jī)的增刪改查,還可以對(duì)課程成績(jī)進(jìn)行模糊搜索,用戶輸入指定的課程號(hào)、學(xué)號(hào)或者學(xué)生姓名等均可以進(jìn)行模糊搜索,并且當(dāng)用戶在添加課程情況的編輯框輸入學(xué)生課程成績(jī)時(shí),系統(tǒng)會(huì)添加相應(yīng)的學(xué)生課程成績(jī)。同時(shí)添加刪除之后在界面上會(huì)立即顯示添加刪除后的情況,界面會(huì)顯示所有的課程信息。
課程成績(jī)類定義如下:
class gradeList(db.Model):
__tablename__ = 'grade_list'
__table_args__ = {"useexisting": True}
id = db.Column(db.INT, primary_key=True)
grade = db.Column(db.String(255), nullable=True)
college = db.Column(db.String(255), nullable=True)
special = db.Column(db.String(255), nullable=True)
className = db.Column(db.String(255), nullable=True)
studentId = db.Column(db.String(255), nullable=True)
studentName = db.Column(db.String(255), nullable=True)
course = db.Column(db.String(255), nullable=True)
score = db.Column(db.INT, nullable=True)
1.3? 學(xué)生個(gè)人成績(jī)分析實(shí)現(xiàn)
采用決策樹(shù)算法對(duì)學(xué)生個(gè)人成績(jī)進(jìn)行分析,當(dāng)用戶在編輯框里輸入指定學(xué)生的學(xué)號(hào)時(shí),例如輸入1904050713,系統(tǒng)以柱狀圖的形式反饋出該學(xué)生對(duì)他所學(xué)的各科目的擅長(zhǎng)情況,并給出提示語(yǔ),告知用戶該學(xué)生所學(xué)課程的擅長(zhǎng)情況以及具體分?jǐn)?shù),柱狀圖給人以直觀的感覺(jué),讓用戶一眼就能知道該學(xué)生的課程擅長(zhǎng)情況,同時(shí)采用決策樹(shù)算法比普通的SQL分析具有更為可靠的優(yōu)點(diǎn),學(xué)號(hào)為1904050713的學(xué)生個(gè)人成績(jī)分析效果如圖1所示。
決策樹(shù)關(guān)鍵代碼部分:
y_train = []
if data_user:
for each in data_user:
each_tmp = []
each_tmp.append(str(each[0]).replace("xm", ""))
each_tmp.append(course_dict.get(str(each[1])))
if float(each[2])>80:
each_tmp.append(1)
else:
each_tmp.append(0)
y_train.append(each_tmp)
sql_user = "select studentId,grade_list.course as course,score from grade_list where studentId = '{0}'; ".format('1904050713 ')
cursor.execute(sql_user)
data_user = cursor.fetchall()
x_test = []
if data_user:
for each in data_user:
each_tmp = []
each_tmp.append(course_dict.get(str(each[1])))
each_tmp.append(str(each[2]))
x_test.append(each_tmp)
estimator = DecisionTreeClassifier(criterion="entropy")
estimator.fit(x_train, y_train)
joblib.dump(estimator, "train_model.m")
y_predict = estimator.predict(x_test)
1.4? 班級(jí)成績(jī)分析
采用對(duì)數(shù)據(jù)庫(kù)的查詢操作來(lái)實(shí)現(xiàn)對(duì)班級(jí)成績(jī)的分析,當(dāng)用戶在編輯框里輸入指定班級(jí)的班號(hào),例如作者所教的19級(jí)軟件7班,系統(tǒng)以柱狀圖的形式反饋出本班級(jí)學(xué)生的課程成績(jī)情況以及班級(jí)每門(mén)課的均分,班級(jí)85分以上人數(shù)以及班級(jí)不及格人數(shù)并能把圖片保存下來(lái)供長(zhǎng)期的研究分析。19級(jí)軟件7班的班級(jí)成績(jī)分析圖如圖2所示。
班級(jí)成績(jī)分析關(guān)鍵代碼:
cursor = db.cursor()
sql_user = "select studentId,grade_list.course as course, score from grade_list join (select course from grade_list where studentId = '{0}')t ongrade_list.course = t.course;".format('19級(jí)軟件7班')
cursor.execute(sql_user)
data_user = cursor.fetchall()
course_dict = {}
course_dict_2 = {}
i = 1
if data_user:
for each in data_user:
each_tmp = []
if not course_dict.get(str(each[1])):
course_dict.update({str(each[1]):i})
course_dict_2.update({i:str(each[1])})
i = i+1
each_tmp.append(course_dict.get(str(each[1])))
each_tmp.append(str(each[2]))
2? 結(jié)? 論
本著服務(wù)廣東建設(shè)職業(yè)技術(shù)學(xué)院教師的理念,幫助解決學(xué)生偏科問(wèn)題,開(kāi)發(fā)了基于數(shù)據(jù)挖掘的學(xué)生成績(jī)分析系統(tǒng)。該系統(tǒng)通過(guò)決策樹(shù)算法來(lái)實(shí)現(xiàn)對(duì)學(xué)生個(gè)人成績(jī)進(jìn)行預(yù)測(cè)的功能,以及對(duì)整個(gè)班級(jí)各門(mén)課程成績(jī)進(jìn)行分析,讓任課教師、教務(wù)管理人員以及班主任一目了然掌握學(xué)生的成績(jī)情況,更好地開(kāi)展以后的教育教學(xué)。
參考文獻(xiàn):
[1] 王燦.基于數(shù)據(jù)挖掘算法的成都市流動(dòng)人口狀況研究 [J].經(jīng)濟(jì)研究導(dǎo)刊,2020(3):129-131+153.
[2] 胡濤.基于關(guān)聯(lián)規(guī)則的數(shù)據(jù)挖掘算法 [J].電子技術(shù)與軟件工程,2018(2):186.
[3] 潘燕.關(guān)聯(lián)規(guī)則下的數(shù)據(jù)挖掘算法分析 [J].信息記錄材料,2018,19(7):212-213.
[4] 楊銘.入侵檢測(cè)中常用數(shù)據(jù)挖掘算法的分析與研究 [J].無(wú)線互聯(lián)科技,2014(11):127.
[5] 張容,張勇.基于數(shù)據(jù)挖掘算法的電子圖書(shū)館智能推薦技術(shù)研究 [J].西南師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2017,42(7):81-85.
作者簡(jiǎn)介:李小白(1981—),女,漢族,海南臨高人,中級(jí)職稱,碩士在讀,研究方向:計(jì)算機(jī)應(yīng)用。