首页 > 编程语言 >基于ECharts+JS+Flask 交互可视化呈现NBA近期比赛信息及球队排名及数据 | 源码分享

基于ECharts+JS+Flask 交互可视化呈现NBA近期比赛信息及球队排名及数据 | 源码分享

时间:2024-09-06 10:55:13浏览次数:13  
标签:Flask data JS 源码 球队 res NBA js 数据

目录

文章|内容

结语|源代码


文章|内容

和大家分享一个我在闲暇之余写的一个小项目。

为了能够更加直观的了解近期的NBA比赛信息、球队排名以及数据,本项目采用了ECharts、JS、Flask等技术进行可视化呈现。

通过这种方式,我们可以更直观的了解NBA比赛,为球迷提供更好的观赛体验。

在这个项目中,我们将分享如何使用ECharts、JS和Flask来可视化NBA近期比赛信息和球队排名。

通过该项目,展示如何结合前端和后端技术快速构建数据可视化Web应用程序。

项目内包含以下内容:

首先找到app.py文件,启动flask服务

我们注册好了蓝图,用来区分后端api接口和home主页,未来我们的前端JS会向后端api发送请求来获取数据

启动后浏览器打开127.0.0.1:5000打开我们的项目

项目启动后的效果如下

严格来说,本项目所呈现的地图并非某个特定国家的地图。是由于多伦多猛龙队的特殊性,我将安大略省(加拿大)纳入地图中以呈现多伦多猛龙队。因此,它应该被称为 NBA 球队分布图

进入项目后,呈现NBA各支球队的地图和排名数据

默认情况下右侧会显示当前nba赛程中各支球队的排名数据

当鼠标移动到某个状态上时,气泡上会呈现当前州包含的所有球队,以及包含的球队作为主场在本州近期已经发生的比赛及未来即将发生的比赛信息

例如下图,鼠标移动到田纳西州,会呈现孟菲斯灰熊队的数据

本项目的 NBA 比赛数据和球队排名数据均来自聚合数据接口平台

以下是接口地址

NBA赛事-NBA赛事API接口-免费API接口-聚合数据

您需要注册并申请 API 密钥才能发送数据检索请求

有了密钥之后,需要在config.py文件中的NBA进行配置

接下来你就可以在项目中引入config.NBA_SCORE_API_KEY然后发送请求了

import config

@api_bp.route('/api/getNBA_rank_data')
def get_new_data():
    apiUrl = 'http://apis.juhe.cn/fapig/nba/rank'
    apiKey = config.NBA_SCORE_API_KEY
    requestParams = {'key': apiKey}

    try:
        response = requests.get(apiUrl, params=requestParams)
        response.raise_for_status()  # 检查响应状态码是否为200
        res = json.loads(response.text)
        if res['error_code'] != 0:
            return jsonify({'error': '请求异常', 'message': res['reason'], 'error_code': res['error_code']})
        else:
            return res
    except requests.exceptions.RequestException as e:
        print(f'请求异常: {e}')
        return jsonify({'error': '请求异常', 'message': str(e)})

当然你也可以模拟一个假的数据JSON来代替API获取的数据

接下来设计好我们的html页面,留一个div容器给echarts

然后我们需要在index.html页面中引入echarts

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="static/css/background_style.css"> 
    <!-- static/css/background_style.css -->
    <title>DataVisualization</title>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <!-- 引入ECharts -->
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
    <script src="../static/js/flash.js"></script>
    <script type="text/javascript">
        var networkHost = "{{ network_host }}";
        var networkPort = "{{ network_port }}";
        window.networkHost = networkHost;
        window.networkPort = networkPort;
    </script>
    <script src="{{ url_for('static', filename='js/data_fetch.js') }}"></script>
    <script src="{{ url_for('static', filename='js/USA.js') }}?t={{ timestamp }}"></script>
</head>
<body>
<div>
    <!-- 欢迎屏幕 -->
    <div id="welcome-screen">
        <div id="welcome-text">WELCOME</div>
    </div>
    <!-- 主页 -->
    <div style="display:flex;">
        <!-- ECharts DOM -->
        <div id="main" style="height: 95vh;width: 70vw;"></div>
        <!-- 右侧信息栏 -->
        <div style="height: 95vh;width: 30vw;">
            <div id="teamInfo" class="hide">
                <table></table>
            </div>
            <div id="teamRank" class="show">
                <table></table>
            </div>

        </div>
        
    </div>

</div>

</body>
</html>

 具体如何使用echarts组件我在这里就不细说了可以在echarts的技术文档里看,很清晰

接下来我们需要准备一份美国地图的json数据来让echarts把地图呈现在元素上,因为NBA包含了多伦多猛龙队,所以我们需要单独再搜索一份加拿大地图JSON数据,提取其中安大略省的数据,并添加到美国地图JSON数据中

这样下来我们就得到了一份包含(安大略省的)美国地图json数据

然后我们需要把阿拉斯加州缩小,让地图数据呈现的更直观,我用三种不同的颜色来区分东部球队、西部球队和多伦多猛龙队的位置,最后得到如下的地图:

以下是echarts的技术文档

Documentation - Apache ECharts

在我们的Flask后端写两个接口,项目启动的时候,用户使用JS向你的后端发送请求,然后你的后端请求API返回数据给用户的前端,js将数据呈现在页面上

data_fetch.js 文件和api.py 文件的请求交互


function get_score_data(){
    axios.get("api/getNBA_score_data").then((res) => {
        window.scoreData = res.data;

        // 设置自定义事件通知其他js数据已获取
        document.dispatchEvent(new Event('scoreDataReady'));
    }).catch((err) => {
        window.alert("Request failed:"+err)
        console.log('Request failed:'+err)
    })
}
function get_rank_data(){
    axios.get("api/getNBA_rank_data").then((res) => {
        window.rankData = JSON.stringify(res.data);
        // 设置自定义事件通知其他js数据已获取
        document.dispatchEvent(new Event('rankDataReady'));
    }).catch((err) => {
        window.alert("Request failed:"+err)
        console.log('Request failed:'+err)
    })
}

get_score_data()
get_rank_data()

项目启动后我们在index.js中监听,确保两个接口都返回结果,也就是拿到了nba球队排名数据和比赛数据后,然后启动index.js中的函数,将地图和数据显示在页面上

由于最近NBA休赛期,我在项目中暂时使用了虚假的JSON数据,如果需要真实数据,别忘了去申请接口然后去config.py文件中配置好密钥,并在api.py文件请求函数中替换真实的接口地址

结语|源代码

需要源码的伙伴你可以去我的github主页上获取

https://github.com/Prycekim/NBA_Score_Rank_DataVisualization?tab=readme-ov-file

你也可以直接在以下地址直接下载

https://download.csdn.net/download/m0_59642837/89714141

如果你需要美国地图或是加拿大地图的json数据,在以下地址直接获取

https://download.csdn.net/download/m0_59642837/89714027

欢迎大家获取源码并发挥你们的想象力增添更多有趣的功能或是弥补我的代码上的不足

如果有人有更好的建议或是提出问题,欢迎找我讨论

标签:Flask,data,JS,源码,球队,res,NBA,js,数据
From: https://blog.csdn.net/m0_59642837/article/details/141884646

相关文章

  • JavaScript 中 structuredClone 和 JSON.parse(JSON.stringify()) 克隆对象的区别
    JavaScript中structuredClone和JSON.parse(JSON.stringify())克隆对象的异同点一、什么是structuredClone?1.structuredClone的发展structuredClone是在ECMAScript2021(ES12)标准中引入的,ECMAScript2021规范正式发布于2021年6月自2022年3月起,该功能适用于最......
  • vue+ThreeJS:从0 到1 搭建开发环境
    文章目录一、下载安装(懒人版)二、顺序安装1,下载安装nodejs2,安装vue-cli3,创建vue-three项目。4,安装threeJS5,安装elementUI(选装)最终package.json文件如下:本系列教程是在vue2.X的基础上加载threeJS程序,来开发各种示例程序。一、下载安装(懒人版)下载vue-three系统包,n......
  • Playwright 源码 BrowserType
    playwright-java的Browser、BrowserContext、Page挺好理解的,唯独这厮,就有一丢丢……packagecom.microsoft.playwright;/***BrowserTypeprovidesmethodstolaunchaspecificbrowserinstanceorconnecttoanexistingone.**BrowserType提供启动一个特定......
  • 2024年实体门店和企业怎么做短视频矩阵获客?为什么要做短视频矩阵?一文告诉你短视频矩阵
    短视频矩阵获客是一种基于多个短视频账号,通过不同职能划分和策略组合,实现更高效、更精准的客户获取方式。一、短视频矩阵是什么?短视频矩阵是指由多个短视频平台通过某种方式连接在一起,形成一个统一的短视频发布、分享和观看的网络体系。每个平台可能具有自己独立的特点和用户......
  • HTML/CSS/JS学习笔记 Day2(HTML)
    跟着该视频学习,记录笔记:【黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p=12&vd_source=04ee94ad3f2168d7d5252c857a2bf358Day2 内容梳理:目录HTML2.0网页开发的标签2.1基础标签的含义......
  • Flask:Python轻量级Web框架详解
    Flask是一个用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展,非常适合小型项目和微服务,同时也能够支持大型应用。Flask依赖于少量的外部库,并且提供了一个简单的方式来创建Web应用。Flask的主要特点轻量级:Flask核心非常简单,使得它易于理解和扩展。扩展性:Flask可......
  • 基于Java的信息发布与管理系统设计与开发-计算机毕业设计源码+LW文档
    摘要在互联网高度发展的今天,人们已经习惯利用网络来填充生活中的碎片时间,如听歌、看视频、浏览信息等。然而,遇到喜欢的内容时,由于时间限制,可能无法一次性看完。此外,各种信息内容分布在不同的平台,给用户查找带来了不便。针对这一问题,Java的信息发布与管理系统应运而生,它有效地解决......
  • 高校信息墙微信小程序-计算机毕业设计源码+LW文档
    摘 要随着科技的进步,管理系统日臻完善,各类企事业单位广泛采用各类管理系统以提升工作效率,从而彻底改变手工操作的局面。我国政府历来重视教育发展,近年来学生数量持续增长,这使得知识问题的咨询管理变得愈加复杂。因此,高校提出了开发高校信息墙微信小程序以优化管理流程,提供全方......
  • 吉林长春产权交易中心JS逆向:魔改AES请求加密与解密
    吉林长春产权交易中心JS逆向:魔改AES请求加密与解密......
  • SpringMVC-05-Json
    1、什么是JSON?JSON:JavaScriptObjectNotation(JS对象描述法)。JSON是一种存储和交换数据的语法。JSON是通过JS对象描述法书写的文本,用字面文本的形式来表示一个JS对象2、为什么要使用JSON?JSON是一种轻量级的数据交换格式,伴随着JavaScript语言的火爆,目前使用特别广泛。......