欢迎光临散文网 会员登陆 & 注册

数据库技术及应用大作业——数据挖掘结果预测系统

2022-12-13 10:54 作者:儒雅的fldy  | 我要投稿


概述

项目目标

通过实现一个数据挖掘结果预测系统,理解和掌握有关数据库设计、数据库访问和数据库应用编写等方面的知识和技术。

开发环境

开发环境:Windows10

辅助工具: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图


ER关系图
关系表

 


数据库逻辑结构设计

数据库名为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 安装指南

  1. 安装RRStudio,R版本为4.2.2,RStudio版本为2022.07.2+576

  2. 打开RStudio,输入以下代码以安装相应的依赖包

  1. 在SQL Server 2002中配置数据库,运行数据库创建.sql中的代码

  2. 配置ODBC数据源,打开Windows应用ODBC数据源,点击“添加...”,选择“SQL Server”,命名数据源并指定本机的服务器,选择连接的数据库为“SCT”,设置数据源名称为“RSCT”。

  3. 打开app.R,运行代码进行系统操作。


用户界面的设计

登录界面

登录界面

管理员界面

管理员界面


  • 登录问候:根据登录时间,分别展示“上午好”“下午好”“晚上好”的用户界面。

  • 上传数据信息:可以通过上传csv文件,导入学生信息、教师信息、课程信息与选课信息。

  • 刷新数据信息:可以查看教师人数、学生人数与课程人数,通过刷新得到实时数据。


教师端

教师界面


  • 课程介绍模块:可以对课程进行简要的介绍,并配以相应的图片展示

  • 管理账户信息:可以对当前账户的密码进行修改

  • 成绩上传与查询:通关下拉菜单,选择相应课程,上传并查询课程上的所有学生及其成绩

  • 标准答案上传:通过下拉菜单,选择相应课程以及相应作业次数,上传作业的标准答案


学生端

学生界面


  • 继承功能:课程介绍模块、管理账户信息、选择课程、选择作业次数、上传作业答案、登录问候等与教师端同理

  • 作业结果可视化:查询作业预测结果,计算得到各种数据挖掘的统计量,以及混淆矩阵、准确率曲线等可视化


运行测试和结果展示

  • 修改密码后可成功登录

修改密码
  • 多分类作业的统计量展示与可视化结果


多分类结果
  • 作业多次提交的准确率曲线


准确率曲线
  • 注:上传答案、查询成绩等基本功能结果在界面设计板块已展示,更多详细操作过程可见

    功能展示-b站传送门



团队分工

@马走日那个象走田:UI设计,前端实现

@儒雅的fldy:数据库设计,报告写作


遇到的问题与解决办法

数据库设计

  • 标准答案表的储存 【数据表结构设计】

    • 困难:由于每次作业的题目数不固定,初步想法是横向列表,每道题作为一个属性,如ans1存储ans1的答案,ans2存储ans2的答案,但造成了大量的冗余且不好操作

    • 解决:改为纵向列表,采用id来存储题号,ans来存储答案,即可实现对答案表的存储

  • 作业评分的计算     【数据冗余度考虑】

    • 方案一:每次学生上传答案后立即比对,仅存储准确率等信息,舍弃答案的存储

    • 方案二:学生上传答案后将所有答案存储,在需要计算时按照需求查询,给出相应结果

    • 困难:由于评分需要标准答案用于比对,这时就存在两种选择

    • 解决:选择方案二尽管需要存储的数据更多,需要专门建立学生答案表,但更利于后续多种功能(如多种数据挖掘统计量计算)的灵活实现,并且更符合实际情况,在学生对批改情况存在疑问时有迹可循。

  • 重复上传的报错     【触发器使用】

    • 困难:由于标准答案由R自动读入转化为数据库格式,在重复插入时就会出现报错,这时就无法完成标准答案的修改

    • 解决:使用数据库的触发器功能,在question表设置instead触发器std_ans_update_trig, 在插入时从inserted表中读取相应数据,并改为执行insert操作,并给出操作提示,同理,触发器还可以用于对学生成绩的反复上传等场景。

前端实现

  • 用户界面的构建

    • 困难:根据数据挖掘预测系统的要求,确定合适的技术路径,实现友好的用户界面

    • 解决:针对这一预测系统的要求,有许多实现用户界面的路径,包括原生HTML,Qt,PyQT以及各种框架等;经过反复比对,我们选择了R+Shiny的技术路径。Shiny是R语言下一款用于构建Web APP可视化界面的包,具有很强的易用性和扩展性,能够轻松构造出美丽、友好的界面,同时也支持大量HTML语句的插入以丰富表现力;代码由负责界面展现的ui和后台数据处理和呈递的server两部分组成,清晰易读便于理解。同时,R语言作为一款为统计而生的语言,我们可以使用其中机器学习和可视化方面丰富的包,如cvms, caret, tidyverse等,来完善数据挖掘结果分析的部分,完成对预测结果更多维的分析。界面友好简单易用分析全面,这也是我们开发的系统的三大亮点。

  • 系统与数据库的连接

    • 困难:如何根据数据库设计要求,建立系统与数据库的连接

  • 解决:我们使用的数据库管理系统为SQL Server 2012。在数据库管理系统中创建数据库,完成初始化后,我们选择使用Windows系统自带的ODBC数据源应用进行连接。百度百科上关于ODBC数据源的介绍是这样的:

ODBC数据源建立了一组规范,并提供了一组对数据库访问的标准API,这些API利用SQL来完成大部分任务。所有的数据库操作由对应的DBMS的ODBC驱动程序完成,只要是ODBC数据源支持的数据库,均可通过其API完成。

在R中,我们使用了一个实现ODBC与R交互操作的包RODBC。通过RODBC中的函数sqlSave可以实现数据的批量插入,sqlUpdate可以实现数据的批量更新,对于更一般的sql语句则可通过sqlQuery逐条实现。综上,我们就实现了R与数据库之间的数据连接(见下图)

R与数据库的连接

实现的功能列表

  • 所有基本功能

    • 登录

    • 验证数据挖掘结果正确率

    • 查询成绩

    • 账户管理

    • 标准答案上传

    • 用户名密码上传

    • 学生成绩上传

    • 账户管理

    • 设计完善并生成测试数据

    • 设计应用界面

    • 教师端功能

    • 学生端功能

  • 拓展功能

    • 管理员功能与管理员界面

    • 支持管理员通过可视化卡片的形式掌握老师、学生、课程总体情况

    • 支持多个老师使用系统

    • 支持老师同时管理多门课程

    • 支持老师查询所教课程选课同学及该班学生成绩

    • 支持学生参与多门课程的教学活动

    • 学生每次作业可以多次提交,并查看自己答案的准确率变化

    • 学生查询作业混淆矩阵的精美可视化

    • 支持学生可以查询除正确率外的其他分类结果,如查全率、查准率、灵敏性、特异性、Kappa 统计量、准确率检验p值、McNemar检验p值等。

    • 支持学生查询自己本门课程成绩

    • 支持处理多个数据挖掘结果查询,可以处理 2 分类, 3 分类及多分类问题。


























数据库技术及应用大作业——数据挖掘结果预测系统的评论 (共 条)

分享到微博请遵守国家法律