使用 Elastic Stack 来分析奥运数据(二)
2022年2月24日 | by mebius
这是我的上一篇文章 “使用 Elastic Stack 来分析奥运数据(一)” 的续篇。在上一篇文章中,我详细介绍了如何把数据上传到 Elasticsearch 中。在今天的这篇文章中,我将着重来讲述如何实现针对这个 olympic 索引进行可视化。
可视化奥运数据
在上一篇文章中,我们可以看到这样的数据:
截止2016,一共有271,116个运动员参赛。我们可以创建一个 Dashboard 来可视化这个数据。
获得参赛人数
这样我们就得到了我们的第一个可视化化图。在过去的140年里,共有 271,116 个运动员参加比赛了。
查看男女比例
我们还是按照上面的套路,点击 Create visualization:
这次,我们拖拽的是 sex 字段。我们可以从上面看出来男人站 72.51% 的比例。点击 Save & return:
这样就形成了我们的第二个可视化图。在上面,我们还可以为每个图添加一个标题。我接下来想得到所有运动员中年龄最大的。
年龄最大的运动员
点击上图的 Create visualization:
点击上面的 Save & return:
这样我们就得到了我们的第三个可视化图。它显示参赛者最大年龄者是97岁。 细心的读者,可能在上面的图中看到一个24值的。它实际上是一个表示所有运动员年龄的中位数。也就是说一半以上的运动员年龄超过24岁。当然我们也可以求出来年龄的平均值。关于其它的指标,我在这里就不一一展示。 也许大家对年龄最小的运动员感兴趣。还记得我们在数据清洗时,如果 age 字段的值是一个 NAN (not a number),我们就会设置为0。在表格中,其实有一部分的运动员的年龄是没有的,所以被设置为0。年龄最小的运动员是0,这也就不奇怪了。
历届参数人数
在我们的 Discover 界面,我们已经看到了历届参数的人数。那么我们该如何进行可视化呢?和之前一样,在 Dashboard 界面点击 Create visualization:
这也我们就得到了历届参数人数的总览图。从图中,我们可以看出来,早期有较少的人参加,而且在中间还有两个时期,没有奥运会的举办。在后期,我们可以看到夏季奥运会和冬季奥运会是每隔两年举办一次的。
查看历届冬季奥运会的参数人数
针对这个,我们使用 Lens 确实有点难度,因为我们只是使用其中的一部分数据来进行可视化,也就是 season 为 Winter 的数据。在 Lens 中我们没法使用 filter 来进行过滤。我们有两种方法来进行可视化:
1)使用一个被过滤的数据集。
我们点击 Save:
我们保存 olympic_winter 数据集。我们只有使用 aggregations 工具来进行可视化:
这样我们就得到了冬季奥运会的可视化图。
2)使用 TSVB 来进行可视化
另外一种方法就是直接使用 TSVB 来进行可视化。我们不需要保存一个被过滤的数据集。
在上面,我们选择 Bar,并点击 Save & return:
我们可以看到和上面的第一种方法一样的结果。
年龄分布图
我们看看奥运健儿的年龄分布图。在 Dashboard 中点击 Create visualization:
从上面我们可以看出来运动员的年龄中位数为24岁。还有一些年龄非常大的运动员也活跃在奥运会中。
奖牌按照国家排名
我们接下来按照获得的奖牌数量进行排名。这个奖牌的数量可以是金牌,银牌及铜牌。针对这种情况,它同样是有一个 filter,也就是 medal 不为 None 的那些运动员才是有奖牌的。我们可以仿照之前的方法创建一个过滤后的数据集:
我们接下来使用 Aggregation based 可视化工具来进行可视化:
从这个图中,我们可以看到每届前5名获奖的国家。
我们接下来想知道历届所有国家的获奖总体情况。我们进行如下的操作:
这样我们就得到了前十名的获奖的国家。从这个图中我们可以看出来,USA 到截止2016年为止,获奖数占15.95%。是获奖牌最多的国家。
找出所有的冬季奥运会项目
我们现在回到我在上一篇文章中的问题。我们先找出来所有的冬季奥运会的项目,并找出来参赛人数最多的项目。我们使用如下的方法:
在上面,我们选择之前保存的 olympic_winter 数据集:
这样我们就得到了所有的冬季奥运会的所有项目的名称。我们可以看到 Cross Country Skiing 是参赛人数最多的项目。
中国,美国,俄罗斯,日本及德国奖牌数
我们接下来想比较一下在最近三届冬季奥运会(2006,2010,2014)中国,美国,俄罗斯,日本及德国的获奖总体情况。我们使用 Lens 来完成。和之前的一样,在 Dashboard 中选择 Create visualization:
在上面,我输入如下的 KQL:
year: "2006" and not medal:"None" and (NOC: CHN or NOC :GER or NOC :RUS or NOC :USA or NOC :JPN)
按照同样的方法,我们分别添加 2010 及 2014 年的过滤器。同时记得把显示模式设置为 Bar vertical:
我们接下来配置 Y 轴:
这样,我们就创建了针对我们感兴趣的5个国家2006年,2010年,2014年的所有情况。
找出我们感兴趣的5项运动的比较
我们想找出来感兴趣的5项运动,美国,日本,德国,俄罗斯及中国的情况。和上面的方法类似,只是我们在 filter 中添加我们需要的条件:
我们可以通过 Clone panel 来复制之前的可视化,这样更容易达到目的:
这次tgcode,我们选择 Edit lens。这一次,我们在 filter 中输入如下的条件:
year: "2006" and not medal:"None" and (NOC : CHN or NOC :GER or NOC :RUS or NOC :USA or tgcodeNOC :JPN) and (sports : "Cross Country" or "Skiing" or "Ice Hockey" or "Speed Skating" or Biathlon)
我们分别针对 2010 及 2014 年分别进行修改。同时我们选择展示的模式为 Bar vertical stacked:
这样我们就得到了冬季奥运会我们感兴趣的几个国家的几个比赛项目的比较。
最近三届获奖金牌前10名的国家
这也是到了我最关心的话题:金牌榜。我们想得到2006,2010,2014年冬季奥运会的金牌榜。把排在前十位的国家罗列出来。还记得我们之前使用 enrich processor 把国家的名称也添加到最终的 region 字段吗?在这里,我将使用 table 来进行展示。我们也会使用 region 来描述。很多人对 NOC 的名称还是不很熟悉。
在 Dashboard 中,我们点击 Create visualziation:
我们创建如下的 filter:
year:"2014" and medal:"Gold"
同时我们选择显示模式为 table。如法炮制,我们创建 2010 及 2014 过滤器:
在上面,我们看到了各个国家的金牌数。就像我之前说的那样,在上面的表格中,我们使用了RUS,NOR,这些缩写可能对于很多的读者并不熟悉。我们可以使用 region 来进行描述:
我们接下来把举办城市也添加到这个表格中:
这样我们就形成了我们希望的一个表格。在上面的表格中,我们修改表格的 header:
点击上面的 Save tgcode& return:
这样我们就得到了2006,2010,2014年的金牌排行榜。
至此,我们完成了如下的一个 Dashboard:
希望大家在整个的练习中学到了知识。更多有关 Kibana 的可视化教程,请参阅:
文章来源于互联网:使用 Elastic Stack 来分析奥运数据(二)
相关推荐: 使用 Elastic Stack 来分析奥运数据(一)
最近冬奥会在中国北京顺利举行。这是一件举国高兴的事。在历届都有许多的奥运数据,我们是否可以使用 Elastic Stack 来分析这些数据,并为我国的体育事业提供一些洞察呢? 最近,孩子学校布置了一个寒假的科技信息作业。内容如下: 1、使用网络及其他方式,完成…