数据库技术及应用大作业——数据挖掘结果预测系统
概述
项目目标
通过实现一个数据挖掘结果预测系统,理解和掌握有关数据库设计、数据库访问和数据库应用编写等方面的知识和技术。
开发环境
辅助工具:Rstudio, PDMiner, Excel, ODBC数据源
数据库管理系统:SQLServer2012
运行环境:Windows10, R-4.2.2
需求分析
问题概述
设计并实现一个数据挖掘结果预测系统,帮助同学查询并验证实验结果的正确性。
基本功能分析
教师端
教师端的功能实现逻辑相似,都分为读取与存储两个步骤,通过传输的路径,利用R读取csv文件,连接数据库后将结构化的数据存入对应
存储表,主要涉及到数据库的数据插入操作。
(1) 标准答案上传。读取 CSV 文件中的标准答案,将其存储进数据库中。
(2) 用户名密码上传。读取 CSV 文件中的用户名和密码,将其导入数据库中。
(3)学生成绩上传。 读取 CSV 文件中的用户名和成绩,将其导入到数据库中。
其他功能主要为个人账户信息的管理,需要对相应的身份表修改,主要涉及到数据库的数据修改操作。
(4) 个人账户管理。包括登录、修改密码、修改身份信息等。
学生端
学生端的功能实现在教师端的基础上更进一步,除了读取与存储,还需要查询并完成数据的对比处理,判断是否能够执行下一步或输出对
应的结果信息,主要涉及到数据库的数据查询操作。
(1) 登录。输入用户名和密码登录系统。
(2) 验证数据挖掘结果正确率。 学生按标准格式上传测试 CSV 结果文件,得到结果正确率。
(3) 查询成绩。查找自己的成绩。
其他功能与教师端同理,对相应的身份表修改,主要涉及到数据库的数据修改操作。
(4) 个人账户管理。包括登录、修改密码、修改身份信息等。
拓展功能分析
数据库方面,拓展功能的实现主要在于实体之间关系从 一对多 到 多对多,涉及到数据库设计与较为复杂的多表查询操作
(1) 支持多个老师使用系统
(2) 可以上传并查询多门课程的情况
数据挖掘方面,拓展功能的实现是在展现数据查询结果的基础上,对结果进行深层次的挖掘,展现出更多有价值的信息,主要涉及到R的
统计量计算与数据可视化
(3) 可以处理多个数据挖掘结果查询,可以处理 2 分类, 3 分类及多分类问题。
(4) 可以查询除正确率外的其他分类问题结果,如查全率、查准率等。
其他功能分析
数据库方面,其他功能即为以上需求分析的灵活组合与运用
(1) 支持学生参与多门课程的教学活动
(2) 学生每次作业可以多次提交
(3) 支持学生查询自己本门课程成绩
(4) 支持老师查询所教课程选课同学及该班学生成绩
数据挖掘方面,可以进一步突出可视化的作用,运用网页设计进行多元化展示
(5) 管理员功能与管理员界面
(6) 支持管理员通过可视化卡片的形式掌握老师、学生、课程总体情况
(7) 学生查询作业混淆矩阵的精美可视化
(8) 支持学生查询除正确率外的其他分类结果,如查全率、查准率、灵敏性、特异性、Kappa 统计量、准确率检验p值、McNemar检验
p值等。
(9)支持学生查看自己答案的准确率变化曲线
数据库结构简要分析
数据库 初始创建的物理对象 为 学生、教师、课程,分别存储三者的基本信息
数据库 使用产生的物理对象 为 标准答案、学生答案,分别存储教师与学生上传csv文件中的答案信息
数据库的 逻辑对象 为存在多对多关系的学生课程关系,存储教师端上传的学生成绩
注:默认每门课程由一名教师教授,是一对多的关系,故可以将教师课程关系合并至课程表,将教工号作为外码链接教师表与课程表
综上,为了实现要求的功能,本数据挖掘结果预测系统主要抽象出6个主要对象:学生、教师、课程、标准答案、学生答案、学生课堂关系
数据库概念结构设计
系统E-R图


数据库逻辑结构设计
数据库名为SCT,开始状态分为六个表,分别为student, teacher ,course, question, answer, sc
【详细信息已由上文ER关系表展示】
关系表
Student表
【存储学生信息,属性按顺序排列】
Sno学生学号 (主键)
Sname 学生姓名
Ssex 学生性别
Sage 学生年龄
Sdept 学生所在院系
Spwd 学生登录密码
Teacher表
【存储教师信息,属性按顺序排列】
Tno 教职工号 (主键)
Tname 教师姓名
Tsex 教师性别
Tage 教师年龄
Tdept 教师所在院系
Tpwd 教师登录密码
Course表
【存储课程信息,属性按顺序排列】
Cno 课程号(主键)
Tno 教职工号 (外键)
Cname 课程名
Ccredit 课程学分
Question表
【存储教师端上传的问题与标准答案信息,属性按顺序排列】
Cno 课程号(主键)
Qno 作业号 (主键)
id 题号 (主键)
Std_ans 标准答案
Answer表
【存储学生端上传的学生答案信息,属性按顺序排列】
Sno 学号 (主键)
Cno 课程号(主键)
Qno 作业号 (主键)
id 题号 (主键)
Aid 当前作业提交次数 (主键)
Ans 学生答案
SC表
【存储学生选课与成绩信息,属性按顺序排列】
Sno 学号 (主键)
Cno 课程号 (主键)
Grade 成绩 (保证数值在0-100之间)
产生测试数据的策略
初始存储信息的数据生成
【student,teacher,course, sc表】
主码信息按照顺序连续产生,以保证其不会重复。 (注:为保证教师与课程的一对多关系,course表中tno也要保证不重复)
非主码信息使用 Excel 软件,结合随机数生成的函数,在数据域内随机产生。 (注:姓名的数据域根据性别而定,来源为网络上的男女常用名)
后续传输信息的数据生成
【question,answer表】
随机生成多张表,答案数据根据表格式在数据域中随机生成,保证每次作业的课程号、作业号对应题号数相同即可。 (注:答案的数据域根据分类问题的类别数而定)
数据挖掘评测系统 DataMinecraft 安装指南
安装
和 ,R版本为4.2.2,RStudio版本为2022.07.2+576打开RStudio,输入以下代码以安装相应的依赖包
在SQL Server 2002中配置数据库,运行数据库创建.sql中的代码
配置ODBC数据源,打开Windows应用ODBC数据源,点击“添加...”,选择“SQL Server”,命名数据源并指定本机的服务器,选择连接的数据库为“SCT”,设置数据源名称为“RSCT”。
打开app.R,运行代码进行系统操作。
用户界面的设计
登录界面

管理员界面

登录问候:根据登录时间,分别展示“上午好”“下午好”“晚上好”的用户界面。
上传数据信息:可以通过上传csv文件,导入学生信息、教师信息、课程信息与选课信息。
刷新数据信息:可以查看教师人数、学生人数与课程人数,通过刷新得到实时数据。
教师端

课程介绍模块:可以对课程进行简要的介绍,并配以相应的图片展示
管理账户信息:可以对当前账户的密码进行修改
成绩上传与查询:通关下拉菜单,选择相应课程,上传并查询课程上的所有学生及其成绩
标准答案上传:通过下拉菜单,选择相应课程以及相应作业次数,上传作业的标准答案
学生端

继承功能:课程介绍模块、管理账户信息、选择课程、选择作业次数、上传作业答案、登录问候等与教师端同理
作业结果可视化:查询作业预测结果,计算得到各种数据挖掘的统计量,以及混淆矩阵、准确率曲线等可视化
运行测试和结果展示
修改密码后可成功登录

多分类作业的统计量展示与可视化结果

作业多次提交的准确率曲线

注:上传答案、查询成绩等基本功能结果在界面设计板块已展示,更多详细操作过程可见
团队分工
@马走日那个象走田:UI设计,前端实现
@儒雅的fldy:数据库设计,报告写作
遇到的问题与解决办法
数据库设计
标准答案表的储存 【数据表结构设计】
困难:由于每次作业的题目数不固定,初步想法是横向列表,每道题作为一个属性,如ans1存储ans1的答案,ans2存储ans2的答案,但造成了大量的冗余且不好操作
解决:改为纵向列表,采用id来存储题号,ans来存储答案,即可实现对答案表的存储
作业评分的计算 【数据冗余度考虑】
方案一:每次学生上传答案后立即比对,仅存储准确率等信息,舍弃答案的存储
方案二:学生上传答案后将所有答案存储,在需要计算时按照需求查询,给出相应结果
困难:由于评分需要标准答案用于比对,这时就存在两种选择
解决:选择方案二尽管需要存储的数据更多,需要专门建立学生答案表,但更利于后续多种功能(如多种数据挖掘统计量计算)的灵活实现,并且更符合实际情况,在学生对批改情况存在疑问时有迹可循。
重复上传的报错 【触发器使用】
困难:由于标准答案由R自动读入转化为数据库格式,在重复插入时就会出现报错,这时就无法完成标准答案的修改
解决:使用数据库的触发器功能,在question表设置instead触发器std_ans_update_trig, 在插入时从inserted表中读取相应数据,并改为执行insert操作,并给出操作提示,同理,触发器还可以用于对学生成绩的反复上传等场景。
前端实现
用户界面的构建
困难:根据数据挖掘预测系统的要求,确定合适的技术路径,实现友好的用户界面
解决:针对这一预测系统的要求,有许多实现用户界面的路径,包括原生HTML,Qt,PyQT以及各种框架等;经过反复比对,我们选择了R+Shiny的技术路径。机器学习和可视化方面丰富的包,如 , , 等,来完善数据挖掘结果分析的部分,完成对预测结果更多维的分析。界面友好、简单易用、分析全面,这也是我们开发的系统的三大亮点。
是R语言下一款用于构建Web APP可视化界面的包,具有很强的易用性和扩展性,能够轻松构造出美丽、友好的界面,同时也支持大量HTML语句的插入以丰富表现力;代码由负责界面展现的ui和后台数据处理和呈递的server两部分组成,清晰易读便于理解。同时,R语言作为一款为统计而生的语言,我们可以使用其中系统与数据库的连接
困难:如何根据数据库设计要求,建立系统与数据库的连接
解决:我们使用的数据库管理系统为SQL Server 2012。在数据库管理系统中创建数据库,完成初始化后,我们选择使用Windows系统自带的ODBC数据源应用进行连接。百度百科上关于
的介绍是这样的:
ODBC数据源建立了一组规范,并提供了一组对数据库访问的标准API,这些API利用SQL来完成大部分任务。所有的数据库操作由对应的DBMS的ODBC驱动程序完成,只要是ODBC数据源支持的数据库,均可通过其API完成。
在R中,我们使用了一个实现ODBC与R交互操作的包sqlSave
可以实现数据的批量插入,sqlUpdate
可以实现数据的批量更新,对于更一般的sql语句则可通过sqlQuery
逐条实现。综上,我们就实现了R与数据库之间的数据连接(见下图)

实现的功能列表
所有基本功能
登录
验证数据挖掘结果正确率
查询成绩
账户管理
标准答案上传
用户名密码上传
学生成绩上传
账户管理
设计完善并生成测试数据
设计应用界面
教师端功能
学生端功能
拓展功能
管理员功能与管理员界面
支持管理员通过可视化卡片的形式掌握老师、学生、课程总体情况
支持多个老师使用系统
支持老师同时管理多门课程
支持老师查询所教课程选课同学及该班学生成绩
支持学生参与多门课程的教学活动
学生每次作业可以多次提交,并查看自己答案的准确率变化
学生查询作业混淆矩阵的精美可视化
支持学生可以查询除正确率外的其他分类结果,如查全率、查准率、灵敏性、特异性、Kappa 统计量、准确率检验p值、McNemar检验p值等。
支持学生查询自己本门课程成绩
支持处理多个数据挖掘结果查询,可以处理 2 分类, 3 分类及多分类问题。