數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用大作業(yè)——數(shù)據(jù)挖掘結(jié)果預(yù)測(cè)系統(tǒng)
概述
項(xiàng)目目標(biāo)
通過實(shí)現(xiàn)一個(gè)數(shù)據(jù)挖掘結(jié)果預(yù)測(cè)系統(tǒng),理解和掌握有關(guān)數(shù)據(jù)庫(kù)設(shè)計(jì)、數(shù)據(jù)庫(kù)訪問和數(shù)據(jù)庫(kù)應(yīng)用編寫等方面的知識(shí)和技術(shù)。
開發(fā)環(huán)境
輔助工具:Rstudio, PDMiner, Excel, ODBC數(shù)據(jù)源
數(shù)據(jù)庫(kù)管理系統(tǒng):SQLServer2012
運(yùn)行環(huán)境:Windows10, R-4.2.2
需求分析
問題概述
設(shè)計(jì)并實(shí)現(xiàn)一個(gè)數(shù)據(jù)挖掘結(jié)果預(yù)測(cè)系統(tǒng),幫助同學(xué)查詢并驗(yàn)證實(shí)驗(yàn)結(jié)果的正確性。
基本功能分析
教師端
教師端的功能實(shí)現(xiàn)邏輯相似,都分為讀取與存儲(chǔ)兩個(gè)步驟,通過傳輸?shù)穆窂?,利用R讀取csv文件,連接數(shù)據(jù)庫(kù)后將結(jié)構(gòu)化的數(shù)據(jù)存入對(duì)應(yīng)
存儲(chǔ)表,主要涉及到數(shù)據(jù)庫(kù)的數(shù)據(jù)插入操作。
(1) 標(biāo)準(zhǔn)答案上傳。讀取 CSV 文件中的標(biāo)準(zhǔn)答案,將其存儲(chǔ)進(jìn)數(shù)據(jù)庫(kù)中。
(2) 用戶名密碼上傳。讀取 CSV 文件中的用戶名和密碼,將其導(dǎo)入數(shù)據(jù)庫(kù)中。
(3)學(xué)生成績(jī)上傳。 讀取 CSV 文件中的用戶名和成績(jī),將其導(dǎo)入到數(shù)據(jù)庫(kù)中。
其他功能主要為個(gè)人賬戶信息的管理,需要對(duì)相應(yīng)的身份表修改,主要涉及到數(shù)據(jù)庫(kù)的數(shù)據(jù)修改操作。
(4) 個(gè)人賬戶管理。包括登錄、修改密碼、修改身份信息等。
學(xué)生端
學(xué)生端的功能實(shí)現(xiàn)在教師端的基礎(chǔ)上更進(jìn)一步,除了讀取與存儲(chǔ),還需要查詢并完成數(shù)據(jù)的對(duì)比處理,判斷是否能夠執(zhí)行下一步或輸出對(duì)
應(yīng)的結(jié)果信息,主要涉及到數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢操作。
(1) 登錄。輸入用戶名和密碼登錄系統(tǒng)。
(2) 驗(yàn)證數(shù)據(jù)挖掘結(jié)果正確率。 學(xué)生按標(biāo)準(zhǔn)格式上傳測(cè)試 CSV 結(jié)果文件,得到結(jié)果正確率。
(3) 查詢成績(jī)。查找自己的成績(jī)。
其他功能與教師端同理,對(duì)相應(yīng)的身份表修改,主要涉及到數(shù)據(jù)庫(kù)的數(shù)據(jù)修改操作。
(4) 個(gè)人賬戶管理。包括登錄、修改密碼、修改身份信息等。
拓展功能分析
數(shù)據(jù)庫(kù)方面,拓展功能的實(shí)現(xiàn)主要在于實(shí)體之間關(guān)系從 一對(duì)多 ?到 ?多對(duì)多,涉及到數(shù)據(jù)庫(kù)設(shè)計(jì)與較為復(fù)雜的多表查詢操作
(1) 支持多個(gè)老師使用系統(tǒng)
(2) 可以上傳并查詢多門課程的情況
數(shù)據(jù)挖掘方面,拓展功能的實(shí)現(xiàn)是在展現(xiàn)數(shù)據(jù)查詢結(jié)果的基礎(chǔ)上,對(duì)結(jié)果進(jìn)行深層次的挖掘,展現(xiàn)出更多有價(jià)值的信息,主要涉及到R的
統(tǒng)計(jì)量計(jì)算與數(shù)據(jù)可視化
(3) 可以處理多個(gè)數(shù)據(jù)挖掘結(jié)果查詢,可以處理 2 分類, 3 分類及多分類問題。
(4) 可以查詢除正確率外的其他分類問題結(jié)果,如查全率、查準(zhǔn)率等。
其他功能分析
數(shù)據(jù)庫(kù)方面,其他功能即為以上需求分析的靈活組合與運(yùn)用
(1) 支持學(xué)生參與多門課程的教學(xué)活動(dòng)
(2) 學(xué)生每次作業(yè)可以多次提交
(3) 支持學(xué)生查詢自己本門課程成績(jī)
(4) 支持老師查詢所教課程選課同學(xué)及該班學(xué)生成績(jī)
數(shù)據(jù)挖掘方面,可以進(jìn)一步突出可視化的作用,運(yùn)用網(wǎng)頁(yè)設(shè)計(jì)進(jìn)行多元化展示
(5) 管理員功能與管理員界面
(6) 支持管理員通過可視化卡片的形式掌握老師、學(xué)生、課程總體情況
(7) 學(xué)生查詢作業(yè)混淆矩陣的精美可視化
(8) 支持學(xué)生查詢除正確率外的其他分類結(jié)果,如查全率、查準(zhǔn)率、靈敏性、特異性、Kappa 統(tǒng)計(jì)量、準(zhǔn)確率檢驗(yàn)p值、McNemar檢驗(yàn)
p值等。
(9)支持學(xué)生查看自己答案的準(zhǔn)確率變化曲線
數(shù)據(jù)庫(kù)結(jié)構(gòu)簡(jiǎn)要分析
數(shù)據(jù)庫(kù) 初始創(chuàng)建的物理對(duì)象 為 學(xué)生、教師、課程,分別存儲(chǔ)三者的基本信息
數(shù)據(jù)庫(kù) 使用產(chǎn)生的物理對(duì)象 為 標(biāo)準(zhǔn)答案、學(xué)生答案,分別存儲(chǔ)教師與學(xué)生上傳csv文件中的答案信息
數(shù)據(jù)庫(kù)的 邏輯對(duì)象 為存在多對(duì)多關(guān)系的學(xué)生課程關(guān)系,存儲(chǔ)教師端上傳的學(xué)生成績(jī)
注:默認(rèn)每門課程由一名教師教授,是一對(duì)多的關(guān)系,故可以將教師課程關(guān)系合并至課程表,將教工號(hào)作為外碼鏈接教師表與課程表
綜上,為了實(shí)現(xiàn)要求的功能,本數(shù)據(jù)挖掘結(jié)果預(yù)測(cè)系統(tǒng)主要抽象出6個(gè)主要對(duì)象:學(xué)生、教師、課程、標(biāo)準(zhǔn)答案、學(xué)生答案、學(xué)生課堂關(guān)系
數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)
系統(tǒng)E-R圖


?
數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)
數(shù)據(jù)庫(kù)名為SCT,開始狀態(tài)分為六個(gè)表,分別為student, teacher ,course, question, answer, sc
【詳細(xì)信息已由上文ER關(guān)系表展示】
關(guān)系表
Student表
【存儲(chǔ)學(xué)生信息,屬性按順序排列】
Sno學(xué)生學(xué)號(hào) (主鍵)
Sname 學(xué)生姓名
Ssex 學(xué)生性別
Sage 學(xué)生年齡
Sdept 學(xué)生所在院系
Spwd 學(xué)生登錄密碼
Teacher表
【存儲(chǔ)教師信息,屬性按順序排列】
Tno 教職工號(hào) (主鍵)
Tname 教師姓名
Tsex 教師性別
Tage 教師年齡
Tdept 教師所在院系
Tpwd 教師登錄密碼
Course表
【存儲(chǔ)課程信息,屬性按順序排列】
Cno 課程號(hào)(主鍵)
Tno 教職工號(hào) (外鍵)
Cname 課程名
Ccredit 課程學(xué)分
Question表
【存儲(chǔ)教師端上傳的問題與標(biāo)準(zhǔn)答案信息,屬性按順序排列】
Cno 課程號(hào)(主鍵)
Qno 作業(yè)號(hào) (主鍵)
id 題號(hào) (主鍵)
Std_ans 標(biāo)準(zhǔn)答案
Answer表
【存儲(chǔ)學(xué)生端上傳的學(xué)生答案信息,屬性按順序排列】
Sno 學(xué)號(hào) (主鍵)
Cno 課程號(hào)(主鍵)
Qno 作業(yè)號(hào) (主鍵)
id 題號(hào) (主鍵)
Aid 當(dāng)前作業(yè)提交次數(shù) (主鍵)
Ans 學(xué)生答案
SC表
【存儲(chǔ)學(xué)生選課與成績(jī)信息,屬性按順序排列】
Sno 學(xué)號(hào) (主鍵)
Cno 課程號(hào) (主鍵)
Grade 成績(jī) ?(保證數(shù)值在0-100之間)
產(chǎn)生測(cè)試數(shù)據(jù)的策略
初始存儲(chǔ)信息的數(shù)據(jù)生成
【student,teacher,course, sc表】
主碼信息按照順序連續(xù)產(chǎn)生,以保證其不會(huì)重復(fù)。 (注:為保證教師與課程的一對(duì)多關(guān)系,course表中tno也要保證不重復(fù))
非主碼信息使用 Excel 軟件,結(jié)合隨機(jī)數(shù)生成的函數(shù),在數(shù)據(jù)域內(nèi)隨機(jī)產(chǎn)生。 (注:姓名的數(shù)據(jù)域根據(jù)性別而定,來源為網(wǎng)絡(luò)上的男女常用名)
后續(xù)傳輸信息的數(shù)據(jù)生成
【question,answer表】
隨機(jī)生成多張表,答案數(shù)據(jù)根據(jù)表格式在數(shù)據(jù)域中隨機(jī)生成,保證每次作業(yè)的課程號(hào)、作業(yè)號(hào)對(duì)應(yīng)題號(hào)數(shù)相同即可。 (注:答案的數(shù)據(jù)域根據(jù)分類問題的類別數(shù)而定)
數(shù)據(jù)挖掘評(píng)測(cè)系統(tǒng) DataMinecraft 安裝指南
安裝
和 ,R版本為4.2.2,RStudio版本為2022.07.2+576打開RStudio,輸入以下代碼以安裝相應(yīng)的依賴包
在SQL Server 2002中配置數(shù)據(jù)庫(kù),運(yùn)行數(shù)據(jù)庫(kù)創(chuàng)建.sql中的代碼
配置ODBC數(shù)據(jù)源,打開Windows應(yīng)用ODBC數(shù)據(jù)源,點(diǎn)擊“添加...”,選擇“SQL Server”,命名數(shù)據(jù)源并指定本機(jī)的服務(wù)器,選擇連接的數(shù)據(jù)庫(kù)為“SCT”,設(shè)置數(shù)據(jù)源名稱為“RSCT”。
打開app.R,運(yùn)行代碼進(jìn)行系統(tǒng)操作。
用戶界面的設(shè)計(jì)
登錄界面

管理員界面

登錄問候:根據(jù)登錄時(shí)間,分別展示“上午好”“下午好”“晚上好”的用戶界面。
上傳數(shù)據(jù)信息:可以通過上傳csv文件,導(dǎo)入學(xué)生信息、教師信息、課程信息與選課信息。
刷新數(shù)據(jù)信息:可以查看教師人數(shù)、學(xué)生人數(shù)與課程人數(shù),通過刷新得到實(shí)時(shí)數(shù)據(jù)。
教師端

課程介紹模塊:可以對(duì)課程進(jìn)行簡(jiǎn)要的介紹,并配以相應(yīng)的圖片展示
管理賬戶信息:可以對(duì)當(dāng)前賬戶的密碼進(jìn)行修改
成績(jī)上傳與查詢:通關(guān)下拉菜單,選擇相應(yīng)課程,上傳并查詢課程上的所有學(xué)生及其成績(jī)
標(biāo)準(zhǔn)答案上傳:通過下拉菜單,選擇相應(yīng)課程以及相應(yīng)作業(yè)次數(shù),上傳作業(yè)的標(biāo)準(zhǔn)答案
學(xué)生端

繼承功能:課程介紹模塊、管理賬戶信息、選擇課程、選擇作業(yè)次數(shù)、上傳作業(yè)答案、登錄問候等與教師端同理
作業(yè)結(jié)果可視化:查詢作業(yè)預(yù)測(cè)結(jié)果,計(jì)算得到各種數(shù)據(jù)挖掘的統(tǒng)計(jì)量,以及混淆矩陣、準(zhǔn)確率曲線等可視化
運(yùn)行測(cè)試和結(jié)果展示
修改密碼后可成功登錄

多分類作業(yè)的統(tǒng)計(jì)量展示與可視化結(jié)果

作業(yè)多次提交的準(zhǔn)確率曲線

注:上傳答案、查詢成績(jī)等基本功能結(jié)果在界面設(shè)計(jì)板塊已展示,更多詳細(xì)操作過程可見
團(tuán)隊(duì)分工
@馬走日那個(gè)象走田:UI設(shè)計(jì),前端實(shí)現(xiàn)
@儒雅的fldy:數(shù)據(jù)庫(kù)設(shè)計(jì),報(bào)告寫作
遇到的問題與解決辦法
數(shù)據(jù)庫(kù)設(shè)計(jì)
標(biāo)準(zhǔn)答案表的儲(chǔ)存 【數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì)】
困難:由于每次作業(yè)的題目數(shù)不固定,初步想法是橫向列表,每道題作為一個(gè)屬性,如ans1存儲(chǔ)ans1的答案,ans2存儲(chǔ)ans2的答案,但造成了大量的冗余且不好操作
解決:改為縱向列表,采用id來存儲(chǔ)題號(hào),ans來存儲(chǔ)答案,即可實(shí)現(xiàn)對(duì)答案表的存儲(chǔ)
作業(yè)評(píng)分的計(jì)算 ? ? 【數(shù)據(jù)冗余度考慮】
方案一:每次學(xué)生上傳答案后立即比對(duì),僅存儲(chǔ)準(zhǔn)確率等信息,舍棄答案的存儲(chǔ)
方案二:學(xué)生上傳答案后將所有答案存儲(chǔ),在需要計(jì)算時(shí)按照需求查詢,給出相應(yīng)結(jié)果
困難:由于評(píng)分需要標(biāo)準(zhǔn)答案用于比對(duì),這時(shí)就存在兩種選擇
解決:選擇方案二盡管需要存儲(chǔ)的數(shù)據(jù)更多,需要專門建立學(xué)生答案表,但更利于后續(xù)多種功能(如多種數(shù)據(jù)挖掘統(tǒng)計(jì)量計(jì)算)的靈活實(shí)現(xiàn),并且更符合實(shí)際情況,在學(xué)生對(duì)批改情況存在疑問時(shí)有跡可循。
重復(fù)上傳的報(bào)錯(cuò) ? ? 【觸發(fā)器使用】
困難:由于標(biāo)準(zhǔn)答案由R自動(dòng)讀入轉(zhuǎn)化為數(shù)據(jù)庫(kù)格式,在重復(fù)插入時(shí)就會(huì)出現(xiàn)報(bào)錯(cuò),這時(shí)就無法完成標(biāo)準(zhǔn)答案的修改
解決:使用數(shù)據(jù)庫(kù)的觸發(fā)器功能,在question表設(shè)置instead觸發(fā)器std_ans_update_trig, 在插入時(shí)從inserted表中讀取相應(yīng)數(shù)據(jù),并改為執(zhí)行insert操作,并給出操作提示,同理,觸發(fā)器還可以用于對(duì)學(xué)生成績(jī)的反復(fù)上傳等場(chǎng)景。
前端實(shí)現(xiàn)
用戶界面的構(gòu)建
困難:根據(jù)數(shù)據(jù)挖掘預(yù)測(cè)系統(tǒng)的要求,確定合適的技術(shù)路徑,實(shí)現(xiàn)友好的用戶界面
解決:針對(duì)這一預(yù)測(cè)系統(tǒng)的要求,有許多實(shí)現(xiàn)用戶界面的路徑,包括原生HTML,Qt,PyQT以及各種框架等;經(jīng)過反復(fù)比對(duì),我們選擇了R+Shiny的技術(shù)路徑。機(jī)器學(xué)習(xí)和可視化方面豐富的包,如 , , 等,來完善數(shù)據(jù)挖掘結(jié)果分析的部分,完成對(duì)預(yù)測(cè)結(jié)果更多維的分析。界面友好、簡(jiǎn)單易用、分析全面,這也是我們開發(fā)的系統(tǒng)的三大亮點(diǎn)。
是R語(yǔ)言下一款用于構(gòu)建Web APP可視化界面的包,具有很強(qiáng)的易用性和擴(kuò)展性,能夠輕松構(gòu)造出美麗、友好的界面,同時(shí)也支持大量HTML語(yǔ)句的插入以豐富表現(xiàn)力;代碼由負(fù)責(zé)界面展現(xiàn)的ui和后臺(tái)數(shù)據(jù)處理和呈遞的server兩部分組成,清晰易讀便于理解。同時(shí),R語(yǔ)言作為一款為統(tǒng)計(jì)而生的語(yǔ)言,我們可以使用其中系統(tǒng)與數(shù)據(jù)庫(kù)的連接
困難:如何根據(jù)數(shù)據(jù)庫(kù)設(shè)計(jì)要求,建立系統(tǒng)與數(shù)據(jù)庫(kù)的連接
解決:我們使用的數(shù)據(jù)庫(kù)管理系統(tǒng)為SQL Server 2012。在數(shù)據(jù)庫(kù)管理系統(tǒng)中創(chuàng)建數(shù)據(jù)庫(kù),完成初始化后,我們選擇使用Windows系統(tǒng)自帶的ODBC數(shù)據(jù)源應(yīng)用進(jìn)行連接。百度百科上關(guān)于
的介紹是這樣的:
ODBC數(shù)據(jù)源建立了一組規(guī)范,并提供了一組對(duì)數(shù)據(jù)庫(kù)訪問的標(biāo)準(zhǔn)API,這些API利用SQL來完成大部分任務(wù)。所有的數(shù)據(jù)庫(kù)操作由對(duì)應(yīng)的DBMS的ODBC驅(qū)動(dòng)程序完成,只要是ODBC數(shù)據(jù)源支持的數(shù)據(jù)庫(kù),均可通過其API完成。
在R中,我們使用了一個(gè)實(shí)現(xiàn)ODBC與R交互操作的包sqlSave
可以實(shí)現(xiàn)數(shù)據(jù)的批量插入,sqlUpdate
可以實(shí)現(xiàn)數(shù)據(jù)的批量更新,對(duì)于更一般的sql語(yǔ)句則可通過sqlQuery
逐條實(shí)現(xiàn)。綜上,我們就實(shí)現(xiàn)了R與數(shù)據(jù)庫(kù)之間的數(shù)據(jù)連接(見下圖)

實(shí)現(xiàn)的功能列表
所有基本功能
登錄
驗(yàn)證數(shù)據(jù)挖掘結(jié)果正確率
查詢成績(jī)
賬戶管理
標(biāo)準(zhǔn)答案上傳
用戶名密碼上傳
學(xué)生成績(jī)上傳
賬戶管理
設(shè)計(jì)完善并生成測(cè)試數(shù)據(jù)
設(shè)計(jì)應(yīng)用界面
教師端功能
學(xué)生端功能
拓展功能
管理員功能與管理員界面
支持管理員通過可視化卡片的形式掌握老師、學(xué)生、課程總體情況
支持多個(gè)老師使用系統(tǒng)
支持老師同時(shí)管理多門課程
支持老師查詢所教課程選課同學(xué)及該班學(xué)生成績(jī)
支持學(xué)生參與多門課程的教學(xué)活動(dòng)
學(xué)生每次作業(yè)可以多次提交,并查看自己答案的準(zhǔn)確率變化
學(xué)生查詢作業(yè)混淆矩陣的精美可視化
支持學(xué)生可以查詢除正確率外的其他分類結(jié)果,如查全率、查準(zhǔn)率、靈敏性、特異性、Kappa 統(tǒng)計(jì)量、準(zhǔn)確率檢驗(yàn)p值、McNemar檢驗(yàn)p值等。
支持學(xué)生查詢自己本門課程成績(jī)
支持處理多個(gè)數(shù)據(jù)挖掘結(jié)果查詢,可以處理 2 分類, 3 分類及多分類問題。