李小白 黃洪標 陳鑫 杜平


摘? 要:教師對學生成績分析一般僅統計處在優、一般、差的人數,對每位學生具體擅長與不擅長的課程往往無法了解。為了能挖掘出每位學生擅長與不擅長課程,更好地提高教學質量,利用Python語言開發了基于數據挖掘的學生成績分析系統。使用決策樹算法中的CART算法對學生成績進行分析預測,對決策樹進行剪枝降低樹的高度防止過擬合,不斷優化決策樹模型,使分析預測達到一個較為精準的水平,更好地為高校教學服務。
關鍵詞:數據挖掘;決策樹算法;成績分析系統
中圖分類號:TP311.13? ? ? ?文獻標識碼:A 文章編號: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? 引? 言
為了解決廣東建設職業技術學院教師對學生成績以及偏科情況了解不夠清楚的問題,作者采用AngularJS作為前端框架,使用Flask輕量級框架用于前后端交互進行對數據庫的訪問,設計了基于數據挖掘的學生成績分析系統,能夠根據學生課程成績以及所在年級的所有學生的課程成績,通過決策樹算法來分析預測某個學生對某門課程的擅長程度。從而直觀明了地反映出學生對課程成績掌握的情況,即達到對學生成績分析的目的。同時該系統還針對整個班級來分析班級的成績情況,讓班主任也能夠直接直觀的了解班里的情況,而不是簡單的通過Excel統計表來掌握班級學生學習情況,通過Python庫提供的畫圖工具,能簡單有效的以各種圖形直觀的呈現出班級成績的情況,包括及格人數、優秀人數等等。同時用戶還能夠對學生課程成績進行管理,包括對學生課程成績進行增刪改查以及對學生課程成績按姓名、學號、班級號以及課程名等進行模糊搜索。
通過構建決策樹模型,用學生個人成績以及該名學生所在年級的課程成績作為訓練集的輸入,以學生對該門課程的擅長程度作為訓練集的輸出來訓練模型,預測某個學生對他所學課程的擅長程度來實現個人成績分析。通過對數據庫課程成績表的查詢操作并以柱狀圖的形式直觀反映班級的成績情況來實現班級成績分析。
1? 系統核心功能實現
1.1? 用戶信息管理
該系統可以對用戶進行管理,包括用戶的增刪改查,用戶分為管理員與普通用戶,管理員可以管理用戶并且具有課程成績管理權限,包括課程成績的增刪改查,還能進行學生的個人成績分析,當管理員輸入指定學號時,可以得到該學生所學課程成績的情況,也可以進行班級成績分析,當管理員輸入指定的班級號時,可以得到該班級的成績情況,包括均分、及格人數以及優秀人數。
用戶類定義如下:
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? 課程成績管理
可以對學生的課程成績進行管理,包括課程成績的增刪改查,還可以對課程成績進行模糊搜索,用戶輸入指定的課程號、學號或者學生姓名等均可以進行模糊搜索,并且當用戶在添加課程情況的編輯框輸入學生課程成績時,系統會添加相應的學生課程成績。同時添加刪除之后在界面上會立即顯示添加刪除后的情況,界面會顯示所有的課程信息。
課程成績類定義如下:
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? 學生個人成績分析實現
采用決策樹算法對學生個人成績進行分析,當用戶在編輯框里輸入指定學生的學號時,例如輸入1904050713,系統以柱狀圖的形式反饋出該學生對他所學的各科目的擅長情況,并給出提示語,告知用戶該學生所學課程的擅長情況以及具體分數,柱狀圖給人以直觀的感覺,讓用戶一眼就能知道該學生的課程擅長情況,同時采用決策樹算法比普通的SQL分析具有更為可靠的優點,學號為1904050713的學生個人成績分析效果如圖1所示。
決策樹關鍵代碼部分:
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? 班級成績分析
采用對數據庫的查詢操作來實現對班級成績的分析,當用戶在編輯框里輸入指定班級的班號,例如作者所教的19級軟件7班,系統以柱狀圖的形式反饋出本班級學生的課程成績情況以及班級每門課的均分,班級85分以上人數以及班級不及格人數并能把圖片保存下來供長期的研究分析。19級軟件7班的班級成績分析圖如圖2所示。
班級成績分析關鍵代碼:
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級軟件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? 結? 論
本著服務廣東建設職業技術學院教師的理念,幫助解決學生偏科問題,開發了基于數據挖掘的學生成績分析系統。該系統通過決策樹算法來實現對學生個人成績進行預測的功能,以及對整個班級各門課程成績進行分析,讓任課教師、教務管理人員以及班主任一目了然掌握學生的成績情況,更好地開展以后的教育教學。
參考文獻:
[1] 王燦.基于數據挖掘算法的成都市流動人口狀況研究 [J].經濟研究導刊,2020(3):129-131+153.
[2] 胡濤.基于關聯規則的數據挖掘算法 [J].電子技術與軟件工程,2018(2):186.
[3] 潘燕.關聯規則下的數據挖掘算法分析 [J].信息記錄材料,2018,19(7):212-213.
[4] 楊銘.入侵檢測中常用數據挖掘算法的分析與研究 [J].無線互聯科技,2014(11):127.
[5] 張容,張勇.基于數據挖掘算法的電子圖書館智能推薦技術研究 [J].西南師范大學學報(自然科學版),2017,42(7):81-85.
作者簡介:李小白(1981—),女,漢族,海南臨高人,中級職稱,碩士在讀,研究方向:計算機應用。