世界杯ing~这不来个实时数据可视化?(结尾附源码)

简介: 世界杯ing~这不来个实时数据可视化?(结尾附源码)

一、场景介绍

世界杯赛程已经过半,目前的比分以及各球员的数据都可以比较容易的查询到,但是还不够直观。因此忙里偷闲,写一点小玩意儿,将动态获取的数据以各类图表的方式展现。

1. 概念介绍

  • 实时数据

这个词一般出现在实时计算中,指的是数据会源源不断的输入进来。其实我们目前所需的数据源也是在不断的变化,只是变化的频率很慢,所以我们可以把其当成一个普通的数据接口使用就可以了。

由于整体的场景与实时数据统计的场景很相似,因此借用了实时数据这个词,意思是数据是动态获取的,可以随时根据最新的数据渲染图表。

  • 数据可视化

数据可视化其实是一种描述性分析,最基本的数据查看方式就是以表格的形式,显然不利于对比,也不能反映数据的变化趋势,在分析方面表现力很弱。

如果使用图表的方式来呈现,就可以通过不同数据维度的组合,不同图表类型的展现、联动、下钻来反映数据之间的关系以及自身趋势的变化,这在各类应用中是十分常见的。

2. 最终效果

  • 世界杯积分榜

  • 世界杯射手榜

  • 世界杯助攻榜

二、数据源获取

首先需要做的就是获取一个稳定的数据来源,以能够公开免费访问的为例,当然也可以直接购买体育数据平台的资源。

1. 数据来源

以网易体育为例:https://sports.163.com/worldcup2022/

  • 点击数据下的射手榜

  • 打开浏览器控制台

  • 保持控制台开启,刷新页面
  • 点击JS选项卡进行筛选【有时也可能为json】
  • 逐一查看左侧接口的返回数据【点击响应选项卡】
  • 以射手榜数据为例,则player为所需

  • 找到所需要的数据接口后就可以使用其它工具协助开发,如Postman

2. 数据结构

确定了数据源之后我们接下来要将所需要的数据维度整理出来,可以方便在开发时进行对照,比对方式也十分简单,直接通过数据在页面上出现的效果就可以找到对应,如:

字段名称 字段含义 样例数据
player 球员名称 姆巴佩
team 所在球队 法国
goals 进球数量 5
games 出场次数 5
minsPlayed 出场时间 387
totalScoringAtt 射门次数 22
ontargetScoringAtt 射正次数 10

3. 数据获取

明确了数据源接口之后,我们只需要想办法将数据在代码中能够获取到,放在一个变量中准备进行解析和使用,可以直接使用jQuery封装的Ajax

在获取数据时需要注意,因为我们的最终目标是将数据以图表的方式展现,所以在获取数据时应该以同步的方式,默认Ajax是异步的方式,案例代码如下:

  • get_data.js
// 定义全局变量
var data = [];
function get_data() {
  // 关闭异步,设置为同步请求
  $.ajaxSetup({
    async: false
  });
  // 以JSON数据格式获取数据
  $.getJSON("https://gw.m.163.com/base/worldCup/qatar/player", function(resp) {
    data = resp.data.items;
    console.log(data);
  });
}
  • index.html

需要将jQuery库文件优先引入,下载地址:https://code.jquery.com/jquery-3.6.1.min.js

<script type="text/javascript" src="js/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="js/get_data.js"></script>
<script type="text/javascript">
        get_data();
</script>
  • 运行结果

现在我们需要的数据已经存放在了json数组中,后面根据图表类型整理成对应的数据结构就可以使用了。

三、可视化图表

在Web前端实现可视化图表有很多开源免费的组件,只需要简单的配置就可以达到比较精美的效果,本文以Echarts为例。

1. Echarts

Echarts是一个可以快速入门的前端可视化组件,支持千万级的数据渲染展示,官方文档齐全,支持全中文,大家感兴趣可以自己深入学习一下。如果我们现在想要快速做出一个效果图,只需要从示例中选择一个效果相似的,修改一下数据就可以马上在自己的代码中实现了。

2. 官方案例

  • 选择一个示例模板:以简单柱状图为例

  • 代码实时编辑预览

  • 复制完整代码

  • 本地实现

使用代码时,只需要在html页面定义一个id为main的div元素即可,效果如下:

对从示例获得的代码进行简单修改【bar.js】:

// 纯HTML项目中只需要引入echarts.js文件即可成功初始化echarts对象
//var echarts = require('echarts');
$(function(){
  var chartDom = document.getElementById('main');
  var myChart = echarts.init(chartDom);
  var option;
  option = {
    xAxis: {
      type: 'category',
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
      type: 'value'
    },
    series: [
      {
        data: [120, 200, 150, 80, 70, 110, 130],
        type: 'bar'
      }
    ]
  };
  option && myChart.setOption(option);
});

3. 进球统计

现在我们只需要将获取到的数据整理成图表需要的数据格式就可以看到我们想要的效果了,目前我们需要填充好两个一维数组:xAxis下的data作为横轴数据,yAxis下的data作为纵轴数据。可以将前五名的球员名称作为横轴数据,进球数量作为纵轴数据,整理后如下:

$(function(){
  var chartDom = document.getElementById('main');
  var myChart = echarts.init(chartDom);
  // 定义x轴数据
  var xData = [];
  // 定义y轴数据
  var yData = [];
  // 数据构建
  for(var i = 0;i < 5;i++){
    xData.push(data[i].player);
    yData.push(data[i].goals);
  }
  var option;
  option = {
    xAxis: {
      type: 'category',
      data: xData// 替换为动态数据
    },
    yAxis: {
      type: 'value'
    },
    series: [
      {
        data: yData,// 替换为动态数据
        type: 'bar'
      }
    ]
  };
  option && myChart.setOption(option);
});

四、案例源码

案例中使用了世界杯积分榜、世界杯射手榜、世界杯助攻榜三种数据源,包含柱状图、饼形图、散点图等类型,大家可以在此基础之上继续发挥,如:将各个国家的数据分组统计到一起,再以图表的方式呈现,只需要修改数据构建部分的代码即可。

目录
相关文章
|
安全 Linux 网络安全
/var/log/secure日志详解
Linux系统的 `/var/log/secure` 文件记录安全相关消息,包括身份验证和授权尝试。它涵盖用户登录(成功或失败)、`sudo` 使用、账户锁定解锁及其他安全事件和PAM错误。例如,SSH登录成功会显示&quot;Accepted password&quot;,失败则显示&quot;Failed password&quot;。查看此文件可使用 `tail -f /var/log/secure`,但通常只有root用户有权访问。
3369 4
|
SQL 机器学习/深度学习 开发框架
分享95个ASP整站程序源码,总有一款适合您
分享95个ASP整站程序源码,总有一款适合您
137 1
|
XML JSON 缓存
Gin实战演练|Go主题月
in实战 1 gin的简单使用
236 0
|
网络安全 数据安全/隐私保护 Shell
解决ssh登录后闲置时间过长而断开连接
解决ssh登录后闲置时间过长而断开连接 时我们通过终端连接服务器时,当鼠标和键盘长时间不操作,服务器就会自动断开连接,我们还的需要重新连接,感觉很麻烦,总结一下解决此问题的方法方法一、修改/etc/ssh/sshd_config配置文件,找到ClientAliveCountMax(单位为分钟)修改你想要的值,执行service sshd reload 方法二、找到所在用户的.
12114 1
迷宫回溯(java)
迷宫回溯(java)
|
Kubernetes 网络协议 Dubbo
《Nacos 架构与原理》| Nacos社区首本电子书免费下载
《Nacos 架构与原理》是 Nacos 电子书系列计划的第一步,并且这部分内容希望和社区共同创作,社区会推动 Nacos 电子书持续更新迭代,也欢迎更多小伙伴能加入 Nacos 社区一起创作。我们把电子书文档通过语雀公开文档像社区开放评论和更新,希望大家针对于内容共同进行校对,并且也欢迎进行投稿,把经验向社区更多个人和企业进行分享。
2648 103
《Nacos 架构与原理》| Nacos社区首本电子书免费下载
|
关系型数据库 MySQL 应用服务中间件
【IIS搭建网站】在本地电脑上搭建web服务器并实现外网访问
在网上各种教程和介绍中,搭建网页都会借助各种软件的帮助,比如网页运行的Apache和Nginx、数据库软件MySQL和MSSQL之类,为方便用户使用,还出现了XAMPP、PHPStudy、宝塔面板等等一系列集成服务,都是为了方便我们能快速建立网站。是不是不适用这些软件就无法建立网站了呢?答案当然是否定的,在Windows系统中实际上集成了建立网站所必须的软件环境。今天就让我们来看看,如何使用Windows自带的网站程序建立网站吧。
|
XML 存储 安全
CodeSign的签名机制
iOS如何保证App的安全
1038 1
|
JavaScript 前端开发
js:Vue3.js+Express实现SSR服务端渲染
js:Vue3.js+Express实现SSR服务端渲染
535 0
|
Java Android开发 数据安全/隐私保护
android10.0(Q) AOSP 增加应用锁功能
android10.0(Q) AOSP 增加应用锁功能
398 0