今天学长向大家介绍一个机器视觉的毕设项目
毕设分享 基于hadoop大数据教育可视化系统(源码+论文)
项目获取:
https://gitee.com/sinonfin/algorithm-sharing
在线教育平台现在是教育体系的重要组成部分,在当前大数据时代的背景下,促进教育机构建立统一平台、统一资源管理的数字化教学系统。如何评估系统平台的健康程度、学生的学习体验和在线课程的质量对于课程的教师和学校的管理人员都是非常重要的,这是进行数据分析的主要目的。可视化是一个重要的途径,它能够帮助大数据获得完整的数据图表并挖掘数据的价值,大数据分析离不开可视化这一工具的推动。
基于hadoop和echarts的教育大数据可视化系统,以B/S模式开发。通过Hadoop中Sqoop进行数据导入转换。以MapReduce构建数据分析,数据分析维度包括每日登录人数分析、平均学习时长分析、学习行为次数分析、每日活跃情况分析和分时段学习人数分析。最终使用ECharts可视化工具来对在线教育平台在学习过程中产生的数据进行可视化大屏展现,让更多人感受到可视化大数据的魅力。
大数据可视化是关于数据视觉表现形式的科学技术研究[9],将数据转换为图形或图像在屏幕上显示出来,并进行各种交互处理的理论、方法和技术。将数据直观地展现出来,以帮助人们理解数据,同时找出包含在海量数据中的规律或者信息,更多的为态势监控和综合决策服务。数据可视化是大数据生态链的最后一公里,也是用户最直接感知数据的环节。
数据可视化系统并不是为了展示用户的已知的数据之间的规律,而是为了帮助用户通过认知数据,有新的发现,发现这些数据所反映的实质。
大数据可视化的实施是一系列数据的转换过程。通过对原始数据进行标准化、结构化的处理,把它们整理成数据表。将这些数值转换成视觉结构,通过视觉的方式把它表现出来。例如将高中低的风险转换成红黄蓝等色彩,数值转换成大小。将视觉结构进行组合,把它转换成图形传递给用户,用户通过人机交互的方式进行反向转换,去更好地了解数据背后有什么问题和规律。
传统的显示技术已很难达到可以完美展示出大规模、高纬度、非结构化数据层出不穷数据的需求,随着人们对大数据技术的不断应用和机器学习的不断深入,数据可视化越来越受到人们的欢迎和认可[9]。那么,应运而生的有哪些新的展示方式呢?首先,不得不提到的一定的是大屏了。高清大屏幕具有超大画面、纯真彩色、高亮度、高分辨率等显示优势, 结合数据实时渲染技术、GIS空间数据可视化技术,实现数据实时图形可视化、场景化以及实时交互,让使用者更加方便地进行数据的理解和空间知识的呈现[10],可应用于指挥监控、视景仿真及三维交互等众多领域.另外VR、AR、MR[11]、全息投影…这些当下最火热的技术也已经被应用到游戏、房地产、教育等各行各业,可以预见的是数据可视化也能与这些技术擦出有趣的火花,比如带来更真实的感官体验和更接近现实的交互方式,使用户可以完全“沉浸”到数据之中。而在不远的未来,触觉、嗅觉甚至味觉,都可能成为我们接受数据和信息的感知方式[12]。
Java语言是一种半动态的支持多平台的面向对象高级语言,其有着悠久的历史却还在换发生机。Java语法严谨,面向对象的思想更是划时代的标志,简单易用,高并发稳定,适合大型系统的开发[13]。
IDEA是一款Java的IDE,它集成了J2EE开发的常用插件,能够快速提高团队的合作和开发效率,该软件实成自动编译,检查错误,尤其在代码智能助手、自动代码提示等方面功能强大。
HDFS
一种分布式文件系统,提供对应用程序数据的高吞吐量访问,HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上[14]。
MapReduce
基于YARN的系统,是一种可用于数据处理的编程模型,用于并行处理大型数据集,MapReduce任务过程分为两个处理阶段:Map阶段和Reduce阶段。每个阶段都是以键值对作为输入和输出,其类型是由程序员来选择[14]。
HBase
HBase是一个在HDFS上开发的面向列的分数式数据库,该技术是Google论文“Bigtable:一个结构化数据的分布式存储系统”的开源实现,它自底向上地进行构建,能够简单地通过增加节点来达到线性扩展[14],解决了RDBMS的可伸缩性问题。
Sqoop
Sqoop允许用户将数据从结构化存储器抽取到Hadoop中[14],用以关系型数据和Hadoop之间数据迁移,抽取的数据数据可以被MapReduce程序使用[14]。
ECharts是由百度开发的交互式可视化图表控件,兼容主流浏览器,并提供丰富的中文API接口和文档,提供直观、交互、个性化的数据图表[15],该技术也是免费,其高可用性和易用性也是深受国人喜爱。
硬件环境
-7300CPU 16g内存 1T硬盘
软件环境
IntelliJ IDEA 2018.1.5 x64、Eclipse4.5.2开发工具
Windows7/Windows10 64位系统
Google Chrome 73.0.3683.103浏览器
VMware Workstation 14 Pro 14.1.2 build-8497320
Hadoop 2.7.3、HBase 1.3.1
本系统是对在现教育平台的数据分析和可视化,其数据分析维度包含平台健康度、用户习惯分析和课程质量评估等,掌握通过数据库进行怎样数据分析以及数据分析常用方法,将结果能正确地展示给平台管理人员或是老师,以达到反哺课程的目的。
本系统提供给用户查看平台中数据,首先要求用户简单注册以登录系统查看页面数据,注册过程中需要提供手机号进行短信验证。用户成功登录后通过点击导航栏中不同的按钮,可以查看不同数据维度的图表展示。
上述流程如下图3.1所示:
图3.1 用户操作流程图
经济可行性分析
教育大数据可视化系统的目标是以时间短成本低的前提下,开发出基于在线平台数据的数据分析及数据展示,侧重点在于数据的可视化,但这种可视化平台已经有丰富的商业产品实现众多酷炫的图表展示,此系统可以自定义定制要实现的功能点和数据分析维度,而且系统使用大数据组件开源技术,搭建单节点Hadoop集群使用MapReduce数据分析,考虑到市面上大屏可视化系统需要收费,所以用ECharts技术完成数据图表展现,减少了经济成本。
技术可行性分析
该教育大数据可视化系统分为两部分:数据分析和数据展示。
数据分析步骤是通过Eclipse工具开发MapReduce程序,使用Maven管理项目所需Hadoop相关依赖,将处理好的数据写入HBase数据库中或是以JSON形式写入JSON文件中。
数据展示步骤是通过IDEA工具开发Java WEB项目,dao持久化层从HBase读取数据,service层处理业务逻辑,controller层接受向前端发送请求和返回响应,通过servlet和json进行数据交互[16],前台接受数据传送到ECharts进行数据展示,以及CAS做单点登录和注销,调整好系统结构,可以很好实现页面数据传输和展示的功能。
系统性能可行性分析
系统有使用Hadoop中HBase、MapReduce等Linux中大数据组件,这些组件本身具备分布式高并发的特点,此处通过设置虚拟机内存等手段,保证正确运行。而WEB项目的B/S系统确保Tomcat服务器运行项目即可,用户通过浏览器就可以访问该系统,并且系统简洁、操作简单。
用户进入登录页,没有注册的用户可以进行注册,已有账号的用户经过Spring Security框架的登录拦截,登陆后系统显示已登录用户名,点击注销可以实现用户退出登录。
将数据通过Sqoop导入Hadoop中的HDFS,使用MapReduce进行数据处理,并将处理好的数据保存到HBase中。
读取HBase中登录数据,页面显示不同月份的登录人数比,并可以显示每月登录人数,可以切换不同的月份。
读取HBase中相关数据,页面显示不同日期对应的学习时长和学习次数。
柱状图显示每日活跃学生人数的统计分析,这里设定每日至少进行3次学习行为的用户为活跃用户。
热力图展示学生在什么时间段爱学习,横坐标为小时,纵坐标为星期。
柱状图展示在不同时间段中用户登录人数。
tb_user表保存用户登陆基本信息,包含用户名、密码、手机号等基本信息[17]。
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
---|---|---|---|---|
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
id | 用户ID | bigint(10) | ||
username | 用户名 | VARCHAR(50) | ||
password | 密码 | VARCHAR(32) | 以md5加密 | |
phone | 手机号 | VARCHAR(20) |
zt_stu_study_schedule学生学习活跃情况(mysql中原始数据表),原有在线教育平台中保存学生学习情况,包含学生的id、班级id、学习方式、学习日期等学生在在线教育平台的学习情况。
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
---|---|---|---|---|
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
user_id | 用户ID | bigint(13) | ||
class_id | 班级id | bigint(13) | ||
content_type | 学习类型 | VARCHAR(8) | Page:浏览网页 ;Video:看视频 ;Topic:讨论话题;Coursewa:看课件;Assignme:做作业 | |
updated_date | 学习日期 | CHAR(8) |
zt_student_num学生注册信息(mysql中原始数据表),原有在线教育平台中用以保存的学生注册信息。
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
---|---|---|---|---|
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
user_id | 用户id | bigint(22) | ||
created_at | 注册日期 | datetime |
zt_login学生登录信息(mysql中原始数据表),原有在线教育平台中用以保存学生登录信息。
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
---|---|---|---|---|
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
user_id | 用户ID | int(22) | ||
login_date | 登录日期 | VARCHAR(8) | ||
date_time | 登录时间 | Vdate_time |
zt_class班级信息(mysql中原始数据表),原有在线教育平台中用以保存班级id和班级名称。
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
---|---|---|---|---|
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
class_id | 班级ID | bigint(23) | ||
class_name | 班级名称 | VARCHAR(8) |
zt_stu_study_time_beihang当日人均登录时长表(mysql中原始数据表),原有在线教育平台中用以保存每个学生的id、开始学习时间、结束学习时间。
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
---|---|---|---|---|
字段名 | 字段中文名 | 数据类型 | 取值定义 | 备注 |
user_id | 用户ID | bigint (22) | ||
visit_time | 用户开始学习时间 | datetime | ||
last_visit_time | 用户结束学习时间 | datetime |
zt教育可视化系统数据展示表(HBase中处理后数据表),保存可视化系统展示所需数据,即从原有在线教育平台的mysql数据库中通过Sqoop导入HDFS中的平台数据,使用MapReduce进行数据的处理并存储到HBase中,用以在教育可视化系统中调用,包括每日登陆人数、平均学习时长和学习行为次数、每日活跃学生人数等。
列族名 | 列名 | 字段中文名 | 取值定义 | 备注 |
---|---|---|---|---|
列族名 | 列名 | 字段中文名 | 取值定义 | 备注 |
DailyActivity | count | 每日活跃学生人数 | ||
DailyLogin | count | 每日登陆人数 | ||
LearningNumber | count | 学习行为次数 | ||
LearningStuday | avg_studay_time | 平均学习时长 |
zt_index教育可视化系统首页数据表(HBase中处理后数据表),保存教育可视化系统首页相关数据,用以保存教育可视化首页所需相关数据,包括学生数和课程数,周活跃学生和周活跃健康度。
列族名 | 列名 | 字段中文名 | 取值定义 | 备注 |
---|---|---|---|---|
列族名 | 列名 | 字段中文名 | 取值定义 | 备注 |
info | num | 不同行键对应不同的数量 |
在系统实现时,分为两部分:数据处理和数据展示。
数据处理部分是开发MapReduce程序,用户只需继承自Mapper类和Reducer类封装自己的Map和Reduce函数,由客户端调用,即可实现分布式计算。
代码分析:以平台学生登录
Map端:
public class LoginNumMapper extends Mapper < LongWritable, Text, Text, IntWritable >
{@
Override
protected void map(LongWritable key, Text value, Context context)
{
// 26575679,20170401,2017-04-01 00:01:34.0
//获取一行数据
String line = value.toString();
//分片
String[] words = line.split(",");
//数据清洗
if(words.length != 3) return;
//group by login_date
try
{
context.write(new Text(words[1]), new IntWritable(1));
}
catch(Exception e)
{
printStackTrace();
}
}
}
Reduce端:
Driver主函数端:
public class LoginNumReducer extends Reducer < Text, IntWritable, Text, NullWritable >
{
private HBaseDAO bHBaseDAO = new HBaseDAOImp();@
Override
protected void reduce(Text key, Iterable < IntWritable > value, Reducer < Text, IntWritable, Text, NullWritable > .Context context) throws IOException, InterruptedException
{
//20170401 <1,1,1>
int count = 0;
for(IntWritable v: value)
{
count += v.get();
}
// disable '表名'
// alter '表明', NAME => '列名'
// enable '表名'
//插入HBase中
bHBaseDAO.insert("zt", key.toString(), "DailyLogin", "count", String.valueOf(count));
//login_date,count
context.write(new Text(key + "," + String.valueOf(count)), NullWritable.get());
}
}
数据展示部分是用IDEA+Maven开发Java Web程序,主要使用MVC模式将代码分层,其中使用Spring Security、CAS、阿里大鱼等技术。
MVC
mvc:model-view-controller的简称,模型-视图-控制器。
Model是业务逻辑层,View是视图层,Controller是控制层。view层发起一个请求到达controller,controller调用业务逻辑,调用完毕再跳转到视图,从而完成一个请求响应。
Spring Security
一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方式的安全框架,应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分,常在企业级Web项目中。它提供一组可以在Spring配置文件中配置的Bean,利用Spring IoC,DI和AOP功能,对底层大量重复代码重新封装。
CAS
CAS 是企业级单点登录开源解决方案。在分布式系统中,用户只需登录一次就能访问相互信任的所有系统。CAS 包含CAS Server 和 CAS Client。
阿里大鱼
阿里大于是阿里云旗下产品,是阿里云为用户提供的收发短信的服务。
前端JS使用AngularJS和ECharts,其双向数据绑定方便的操作,配合可视化工具可以动态展示更多有用的信息,和直观的图形效果显示。
当新用户没有账号登录时徐注册账号,注册时输入用户名昵称和密码,获取手机短信验证码验证功能。
功能上进行输入检查和验证,密码二次输入一致性检查,短信验证码是否正确,密码以md5加密的密文形式存储数据库中。
图5.3 登录界面
在浏览器中输入系统地址时,系统会验证cas中是否有用户已登录,如果没有则跳转登录页面 ,有则直接跳转首页。
登录页面的动画效果是手写的echarts图标效果,功能上同样有用户名和密码的验证并提示信息。
图5.4 首页界面
用户登录成功后,系统将用户名并存储在用户浏览器的COOKIE中,在导航栏的右上角显示:欢迎,xxx!,当鼠标悬停在用户名上,下方会显示退出登录,点击退出登录,系统重新跳转到登录界面。
首页页面读取HBase中处理好的数据,展示平台中课程数、学生数,以及课程上课受欢迎度降序排序,下方采用仪表盘开发[18],反映平台每周的活跃人数和周活跃平台健康度。在仪表盘的右上方有工具配置项,可供下载和装换数据视图。
总结:院校的在线教育平台中一般有学习周期,寒暑假学习人数比平时学习学生人数锐减,一般这个时间段里人数不做参考,有的学生喜欢在期末考试之前突击学习完成,所以在那个时间段里会有活跃的峰值,所以在这里面会有一个每日的登录人数和用户的活跃度的这个维度的分析。
图5.5 每日登陆人数分析界面
此页面左侧饼图显示每月登录人数比,数据库中只有四月和五月相关数据。右侧默认显示四月每日登陆人数信息。当点击下拉按钮后,系统展示所选月份相关数据。
图5.6 选择按钮切换数据界面
总结:一般每日的登录人数一般能在保持在这个整个课程的50%左右,基本上就是可以的,就比如说一门课,一共有50个学生,每天由25个学生去登录,平均的这个量基本就可以在期末的峰值时候,一般会保持在80%到90%以上,很常见的一个情况。
这里设定每日至少进行3次学习行为的用户为活跃用户。
该页面通过柱状图显示每天的活跃学生情况,第一层以月份形式展示。当点击201705所对应的柱状图时,进行数据下钻,第二层以当月的每天形式展示,点击放回按钮,又返回第一层数据。
总结:一般每日的活跃度一般在10%左右,在期末的情况也是活跃度会上升到80%到90%,这些都是我们能够预见到的,或者允许的,这是针对平台健康度的一个监测信息。
此页面展示了平台中每条学生的平均学习时长和行为次数,可以从图中看出这二者关系正相关,当学习行为次数增加时,平台中学习时长就增加。
总结:了解到学生一般习惯看这门课的时候,一般每次学生聚精会神学习20分钟左右,建议单次学习视频不要拉长到20分钟以上,保持在15到20分钟,方便学生一次看完学习还了解到一个知识点。所以根据这个我们可以反过来帮助去调整在线这个视频,它的每个段视频的时长以及知识点的切割。
其次,就比如说有一个人学了这么课程更活跃,他会跟他同学一起去说,听着很有意思,很多人就会一起过来的,所以用户活跃度相对肯定会高,学生学习行为次数肯定次数也会多那一次看课的视频的时长肯定相对会比较长。所以通过这个就可以评估出来这门课程的质量怎么样?那如果质量不好,我们可以去这这这样根据这个情况,我就更换课程或者去重新拍摄的课程。
该页面左侧以热力图的图标展示学生们在什么时间段中学习,可以从图表中纵坐标看出在一星期中的星期一、星期六、星期日学习人数最多,从横坐标可以看出,在每天的0-8点学习人数比白天人数少很多,这符合人们的学习作息时间。
页面右侧细化分一天中每个时间段学习人数在下午的2点-6点,这个时间段中学习人数最多,晚上和早上人数次之,1点-7点人数最少。图表的右上角同样实现柱状图与折线图的转换。
总结:我们可以通过这个监测的一般学生喜欢在下午的2点到4点进行在线课程的学习,那么这样就可以把很多比如说老师的在线答疑的时间,还有随堂测验的时间,我们可以安排在这个时间段里。
该页面使用阿里云DataV数据可视化平台,同样实现相同的功能,点击每日,每周,每月按钮,对应折线图,柱状图图表会联动显示数据。学生分布处使用地图显示学生的地区分布人数,以南通市学生人数为榜首。在时间段学习人数处使用气泡图展示,图中恰好展示学习人数在不同时间段中的分布。
使用DataV数据可视化平台,可以看出数据展示效果更加紧凑和大屏数据的显示,看到数据可视化的魅力,可以帮助非专业的工程师通过图形化的界面轻松搭建专业水准的可视化应用多种业务的展示需求。