本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。
有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一一回复站内私信,发送完整文件
摘 要
传统的NBA数据平台大多只是基本的数据展示,没有进行深入的数据挖掘以及球迷的互动系统,不能满足用户对于赛事规律分析和社交讨论的需求。为了解决以上问题,本课题以IntelliJ IDEA开发环境为基础,用SpringBoot搭建后端服务、MySQL存储数据、Vue设计前端界面,创建出一个完整的NBA数据智慧分析平台。普通用户可以浏览赛事战报、球员信息、交流论坛、个人评论、通知中心等。VIP用户可以使用私信功能。管理员后台对球员数据进行JS分析,对球员信息进行管理,发布通知公告,维护赛事战报及其分类,管理交流论坛及论坛分类。系统利用ECharts生成球员得分、篮板等关键指标的可视化图表,帮助用户了解比赛规律。各个角色的操作流程是明确的,用户登录之后按照权限进入相应的模块,管理员在后台统一管理数据资源。本平台运行稳定,可以满足数据查询、社交互动、后台管理的整合需求,使NBA信息共享更具有互动性、可分析性。
关键词:NBA数据分析,SpringBoot,Vue,ECharts,权限管理
Abstract
Traditionalnbadata platform is about simple data display without any complex data mining as well as no fan involvement which does not cater to viewer's double purpose of watching a game pattern and talking with other people. In order to tackle the issues listed above, we developed anall in onesmart analysis System withspringbootserving as the source of theback endservice. We usedMySqlDatabase to save data that is necessary and also use the frontend library Vue for our UI work. Regular people can see game reports and players' information, join in discussions on the forum, control their own comments, as well as read the notice center. The VIPs also have the function to send a private message. Administrators take care of the backend to view the data about players, take care of the information related to players, publish announcements, maintain games and their reports, manage the discussion forum and its various categories, etc. System will generate visual charts for some important numbers like players scoring and rebounding throughEchartsso that people can see the pattern in games. Roles work properly: when people sign up to look at various parts based on who they are, while people with power handle numbers behind the scenes. A normal platform; the platform satisfies a lot of requests for data in this world. It is also social networking and making friends, and back-end management. Making all kind of stuff around NBA share-able info to be analyzed.
Keywords:NBAdata analysis,SpringBoot, Vue,ECharts, permission management
第一章 绪论
1.1 研究背景与意义
NBA球迷在传统的电视、报纸、线下聚会中获取赛事信息时存在单向滞后、效率低、数据割裂、互动形式单一等问题。早期的体育网站和论坛出现之后,信息获取的速度变快了,一些查询工具也开始使用起来,球迷之间的互动形式也由线下转移到了线上平台。碎片化体验、战报更新滞后、球员数据浅尝辄止、优质讨论内容难留存等状况依旧存在,现有的方式无法契合当下对于即时数据洞察以及社群归属感的需求[1]。球员竞技状态分析需求的增长,又进一步暴露出传统平台的缺陷[2]。开发NBA数据智慧分析平台,把球员数据可视化分析、赛事战报管理、交流论坛、用户权限体系整合起来,直接提高信息传播效率和数据利用深度。平台缩减了球迷获取分析结果所需的时间,营造出依靠数据展开理性的交流环境,给垂直体育社群内容沉淀以及生态建设赋予实际支撑。该系统也给类似的兴趣社区数据和社会融合模式提供了一个可以参照的范例。
1.2 国内外研究现状
1.2.1 国内现状
国内NBA相关平台和数据分析研究是从资讯门户、垂直社区、智能分析工具三个阶段发展起来的。早期门户时代,新浪体育、搜狐体育都是通过编辑生产文字直播、赛后战报的形式来向用户传递信息的,用户只能被动地接受信息,不能进行互动,数据呈现方式也十分单一[3]。韩泽宇认为传统篮球数据分析只停留在基本的统计上,并没有对球员的综合竞技水平进行深入的研究。虎扑社区随后兴起,论坛模式大大加强了球迷间的互动,用户生成的内容开始占有重要位置,但是系统的数据展示和深入分析的工具还比较欠缺[4]。刘宇航所建立的篮球战术决策支持系统试图把数据分析应用到战术层面,给后来的研究提供了一些方法上的借鉴。移动互联网时代,懂球帝在足球领域里最早实现数据模块和社区的融合,给篮球平台的整合设计提供借鉴[5]。腾讯体育依靠NBA独家转播权创建起完备的资讯、数据、视频系统,不过其社交功能大多以关注大V为特点,普通用户之间讨论的沉淀情况不好[6]。王鑫从大数据分析的角度出发,对篮球运动员体能训练效果的评价方法进行了研究,认为数据驱动的决策对于体育领域具有很大的价值。刘哲辰对数字技术赋能NBA数字化转型的理论机理进行了系统的探究,认为中国体育平台在数据可视化和用户互动融合方面存在着明显的不足。王璐、单明霞提出的基于LSTM和注意力机制的球队得分预测模型,是目前国内对于NBA数据进行深入挖掘的前沿研究。吴宪传和吴泽春设计并实现了一个简单的NBA数据可视化平台,但是没有集成社交互动以及用户权限管理模块[7]。刘家昊对于篮球训练负荷优化的研究,也体现出数据采集、分析手段智能化已经成为体育科学重要研究方向的趋势。从整体上来说,国内目前所形成的平台和研究成果,在数据展示、社交互动以及用户权限管理这三个方面还存在着明显的缺失。
1.2.2 国外现状
国外的篮球数据平台和体育社区走的是不一样的发展道路,有各自不同的运行机制。Bleacher Report早期依靠社交媒体属性累积起大量的用户,后来转向了数据驱动的内容平台,它的个性化推送机制同用户兴趣标签相结合的方式可以参考[8]。SofaScore为全球数百个联赛提供实时数据服务,界面设计简单明了,但是社交功能几乎全部缺失,用户只能单向查看数据,不能围绕数据展开讨论[9]。Onefootball对于足球数据的聚合以及社区运营比较成熟,但是对于NBA的专用平台还没有形成相同规模的内容生态[10]。欧洲豪门俱乐部官方App凭借独有的资源给用户提供球员专访、训练花絮等不一样的内容,用户的受众集中在某一支球队的球迷上,多元讨论生态的建立受到限制[11]。Ojha等人提出的基于数据驱动的决策框架,虽然主要针对工业生产系统,但是它的异常检测和模式识别方法可以迁移到球员状态分析以及赛事预测上。Rawat等人就金融多媒体系统设计的深度伪造检测技术,给体育视频内容真实性验证赋予了技术思路[12]。Chen等对篮球表现分析中数据的使用、分析技术进行系统的回顾,发现目前的研究缺少实时反馈和用户交互界面的设计。Lee等人对于AI预测模型的综述研究认为,可解释性对于数据驱动决策来说具有重要意义,这与体育数据分析平台的设计是一致的。Ofori和Cobblah对于大数据的应用进行系统性的分析,得出结论认为数据可视化同用户参与度呈正相关关系。Fantasy Premier League把数据统计和虚拟竞赛机制结合起来,用户的参与动机非常强烈,但是成功的模式很大程度上依靠联赛的官方授权以及完善的商业生态系统。从国内国外的已有研究现状可知,现有的平台一方面重数据展示轻社交互动,另一方面重社区氛围轻数据分析工具,把ECharts可视化与论坛系统结合起来在统一权限管理框架下构建NBA智慧分析平台有很强的研究价值和现实意义。
1.3 主要研究内容
本文设计出基于SpringBoot以及ECharts的NBA数据智慧分析平台,并给NBA球迷服务。系统创建普通用户、VIP用户、管理员这三个角色。普通用户可以注册登录、查看球员信息和赛事战报、参与交流论坛、管理评论、接收通知。VIP用户享有发送私信的权利。管理员对数据进行分析,对球员信息进行管理,对通知公告进行发布,对赛事战报进行分类维护,对交流论坛进行分类管理。按照需求分析、架构设计、模块划分、数据库设计、实现和测试的软件工程过程来开发。技术路线采用前后端分离的B/S架构,前端Vue、后端Spring Boot、数据库MySQL、可视化ECharts。系统努力解决数据呈现碎片化、用户讨论缺少数据支撑的问题。
第五章 系统实现
5.1 普通用户功能实现
5.1.1 注册登录功能实现
用户注册时提交账号密码,UserController的register方法接收参数并调用service层校验用户名唯一性。登录时login方法接收凭证,查询数据库匹配用户信息,验证通过后生成Token存入Redis并返回前端。注册登录界面如图5-1所示。
图5-1注册登录界面
核心代码实现如下:
@PostMapping("register")
public Map<String, Object>signUp(@RequestBody User user) {
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());Listlist=service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
service.insert(map);
5.1.2 交流论坛功能实现
用户访问论坛时ForumController的get_list方法分页加载帖子列表。点击发帖按钮调用add方法,前端提交标题与正文内容,后端校验非空后写入数据库。帖子发布后待管理员审核。交流论坛界面如图5-2所示。
图5-2交流论坛界面
核心代码实现如下:
@PostMapping("/add")public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Forumforum= JSON.parseObject(JSON.toJSONString(service.readBody(request.getReader())),Forum.class);
forum.setForumId(null);
if (forum.getTitle()== null ||forum.getTitle().trim().isEmpty()){
throw newIllegalArgumentException("标题不能为空");
}
this.addEntity(forum);
5.1.3 赛事战报查看功能实现
用户点击战报模块时ArticleController的get_list方法返回分页战报列表。点击某条战报进入详情页,系统调用get_obj方法根据文章ID查询完整正文内容并增加阅读计数。赛事战报查看界面如图5-3所示。
图5-3赛事战报查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =this.service.selectToPage(service.readQuery(request),service.readConfig(request));
return success(map);
}
@RequestMapping("/get_obj")public Map<String, Object>obj(HttpServletRequestrequest) {
ListresultList=service.selectBaseList(service.select(service.readQuery(request), config));
5.1.4 球员信息查看功能实现
用户进入球员信息页面时PlayerInformationController的get_list方法加载球员列表。系统支持按姓名或球队筛选,前端发送查询参数后后端动态拼接SQL语句返回匹配结果。球员信息查看界面如图5-4所示。
图5-4球员信息查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =this.service.selectToPage(service.readQuery(request),service.readConfig(request));
return success(map);
}
@RequestMapping("/get_obj")
public Map<String, Object>obj(HttpServletRequestrequest) {
5.1.5 通知公告查看功能实现
系统首页展示最新公告列表,用户点击公告标题时NoticeController的get_obj方法根据公告ID查询详细内容。公告按创建时间倒序排列,用户可查阅历史通知消息。通知公告查看界面如图5-5所示。
图5-5通知公告查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =this.service.selectToPage(service.readQuery(request),service.readConfig(request));
return success(map);
}
@RequestMapping("/get_obj")
public Map<String, Object>obj(HttpServletRequestrequest) {
5.1.6 评论管理功能实现
用户在论坛帖子或战报下方填写评论内容,CommentController的add方法接收参数并关联来源ID与用户ID。评论提交后进入待审核状态,用户可在个人中心查看并删除自己的评论。评论管理界面如图5-6所示。
图5-6评论管理界面
核心代码实现如下:
PostMapping("/add")
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
this.addMap(paramMap);
returnsuccess(1);
}
5.1.7 通知中心查看功能实现
用户登录后MessageInformController的get_list方法根据当前用户ID查询个人通知列表。系统展示未读消息数量,用户点击通知后状态标记为已读。通知中心查看界面如图5-7所示。
图5-7通知中心查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =this.service.selectToPage(service.readQuery(request),service.readConfig(request));
return success(map);
}
PostMapping("/add")
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
5.2 VIP用户功能实现
5.2.1 交流论坛功能实现
VIP用户进入论坛模块时拥有与普通用户相同的发帖回复权限。ForumController的add方法接收帖子内容并写入数据库,帖子发布流程与普通用户一致。交流论坛界面如图5-8所示。
图5-8交流论坛界面
核心代码实现如下:
@PostMapping("/add")public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Forumforum= JSON.parseObject(JSON.toJSONString(service.readBody(request.getReader())),Forum.class);
forum.setForumId(null);
if (forum.getTitle()== null ||forum.getTitle().trim().isEmpty()){
throw newIllegalArgumentException("标题不能为空");
}
this.addEntity(forum);
5.2.2 通知公告查看功能实现
VIP用户通过NoticeController的get_list方法获取公告列表,系统展示所有已发布的通知公告。用户点击标题进入详情页查看完整内容。通知公告查看界面如图5-9所示。
图5-9通知公告查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =this.service.selectToPage(service.readQuery(request),service.readConfig(request));
return success(map);
}
@RequestMapping("/get_obj")
public Map<String, Object>obj(HttpServletRequestrequest) {
5.2.3 赛事战报查看功能实现
VIP用户访问战报模块时ArticleController返回战报列表。战报详情页展示完整正文内容,系统记录用户访问行为用于数据统计。赛事战报查看界面如图5-10所示。
图5-10赛事战报查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =this.service.selectToPage(service.readQuery(request),service.readConfig(request));
return success(map);
}
@RequestMapping("/get_obj")
5.2.4 球员信息查看功能实现
VIP用户检索球员信息时PlayerInformationController提供列表展示与详情查询功能。系统支持多条件筛选,响应数据包含球员得分、篮板等统计指标。球员信息查看界面如图5-11所示。
图5-11球员信息查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =this.service.selectToPage(service.readQuery(request),service.readConfig(request));
return success(map);
}
@RequestMapping("/get_obj")
5.2.5 发送私信功能实现
VIP用户进入私信页面填写收件人与消息内容,MessageInformController的add方法将私信记录写入数据库。系统校验收件人是否存在,发送成功后通知接收方。发送私信界面如图5-12所示。
图5-12发送私信界面
核心代码实现如下:
PostMapping("/add")
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
this.addMap(paramMap);
returnsuccess(1);
}
5.3 管理员功能实现
5.3.1 数据分析功能实现
管理员进入数据分析模块时PlayerInformationController的get_hits_list方法执行协同过滤算法。系统统计用户点击行为,根据余弦相似度推荐球员数据,生成的统计图表供管理员查看。数据分析界面如图5-13所示。
图5-13数据分析界面
核心代码实现如下:
@RequestMapping("/get_hits_list")public Map<String, Object>getHits(HttpServletRequestrequest) {
StringhitsSource= "SELECTCOUNT(hits_id)AShits_count,source_idFROM hits WHEREsource_table= 'player_information' ANDuser_id= "+paramMap.get("user_id")+" GROUP BYsource_id";
List<Map<String,Object>>hitsSourceList=service.selectMapBaseList(hitsSource);
doubledotProduct= 0.0;
5.3.2 球员信息管理功能实现
管理员对球员信息执行增删改查操作时PlayerInformationController的add方法新增球员记录,set方法更新现有数据,del方法删除指定条目。系统校验必填字段完整性。球员信息管理界面如图5-14所示。
图5-14球员信息管理界面
核心代码实现如下:
@PostMapping("/add")
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
PlayerInformationplayer_information= newPlayerInformation();player_information.setPlayer_name(paramMap.get("player_name")==null?null:String.valueOf(paramMap.get("player_name")));
this.addEntity(player_information);
@PostMapping("/set")
5.3.3 通知公告管理功能实现
管理员发布公告时NoticeController的add方法接收标题与正文内容。公告置顶或删除操作调用set与del方法,系统自动记录操作时间。通知公告管理界面如图5-15所示。
图5-15通知公告管理界面
核心代码实现如下:
@PostMapping("/add")public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Noticenotice= JSON.parseObject(JSON.toJSONString(service.readBody(request.getReader())),Notice.class);
notice.setNoticeId(null);
if (notice.getTitle()== null ||notice.getTitle().trim().isEmpty()){
throw newIllegalArgumentException("标题不能为空");
}
this.addEntity(notice);
5.3.4 赛事战报管理功能实现
管理员维护赛事战报时ArticleController的add方法写入新战报,set方法修改已有内容,del方法删除战报。战报封面图通过文件上传接口处理。赛事战报管理界面如图5-16所示。
图5-16赛事战报管理界面
核心代码实现如下:
@PostMapping("/add")public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Articlearticle= JSON.parseObject(JSON.toJSONString(service.readBody(request.getReader())),Article.class);
article.setArticleId(null);
if (article.getTitle()== null ||article.getTitle().trim().isEmpty()){
throw newIllegalArgumentException("标题不能为空");
}
this.addEntity(article);
5.3.5 赛事战报分类管理功能实现
管理员设置战报分类时ArticleTypeController的add方法新增分类名称,set方法修改分类属性,del方法删除不需要的分类。分类数据关联战报表的外键约束。赛事战报分类管理界面如图5-17所示。
图5-17赛事战报分类管理界面
核心代码实现如下:
@PostMapping("/add")public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
ArticleTypearticleType= JSON.parseObject(JSON.toJSONString(service.readBody(request.getReader())),ArticleType.class);
articleType.setTypeId(null);
if (articleType.getName()== null ||articleType.getName().trim().isEmpty()){
throw newIllegalArgumentException("名称不能为空");
}
this.addEntity(articleType);
5.3.6 交流论坛管理功能实现
管理员审核论坛帖子时ForumController的set方法修改帖子状态为通过或拒绝。置顶操作更新istop字段,违规帖子调用del方法删除。交流论坛管理界面如图5-18所示。
图5-18交流论坛管理界面
核心代码实现如下:
@PostMapping("/set")public Map<String, Object>set(HttpServletRequestrequest) throwsIOException{
this.service.update(this.service.readQuery(request),this.service.readConfig(request),this.service.readBody(request.getReader()));
returnsuccess(1);
}
@RequestMapping(value = "/del")
public Map<String, Object>del(HttpServletRequestrequest) {
5.3.7 论坛分类管理功能实现
管理员配置论坛板块时ForumTypeController的add方法创建新分类,set方法修改分类名称,del方法移除分类。系统根据分类ID过滤论坛帖子列表。论坛分类管理界面如图5-19所示。
图5-19论坛分类管理界面
核心代码实现如下:
@PostMapping("/add")public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
ForumTypeforumType= JSON.parseObject(JSON.toJSONString(service.readBody(request.getReader())),ForumType.class);
forumType.setTypeId(null);
if (forumType.getName()== null ||forumType.getName().trim().isEmpty()){
throw newIllegalArgumentException("标题不能为空");
}
this.addEntity(forumType);
点赞+收藏+关注 →私信领取本源代码、数据库
关注博主下篇更精彩
一键三连!!!
一键三连!!!
一键三连!!!
感谢一键三连!!!