这是继上一篇文章 “使用 Elastic Stack 来分析奥运数据(二)” 的续篇。这是一个连续三篇文章的系列文章:
在之前的文章中,我详细地介绍了如何摄入奥运数据,并且可视化数据。在今天的练习中,我将使用 Maps 来可视化数据。
在我们的数据中,虽然我们没有经纬度数据,但是我们发现有一个叫做 NOC 的字段。它代表运动员来自那个国家。在我之前的文章 “Kibana:通过 Elastic Maps 中的全局行政区层为 IP 分析带来新见解”,我展示了如何使用行政区来展示数据。针对我们的奥运情况,我们可以展示一下奥运运动员分别在哪些国家。
参赛运动员分布
我们接上次的练习。在 Dashboard 中点击 Create visualization:
从上面我们可以看出来美国的颜色比较深,显示参加比赛的人员比较多。相反,在地球的有些地方,我们看到没有运动员或者较少的运动员参加奥运会。
点击上面的 Save & return:
从上面,我们可以看出来共有18853个美国人参加奥运会。这确实是一个比较大的数据。
金牌分别在哪些国家
有时,我们更关心这些金牌分布在哪些国家。由于 Maps 只能作用于索引上,而且它没有 filter 可以使用。那么我们该怎么办呢?一种办法是把 olympic 这个索引 reindex 成为另外一个索引,把所有金牌的文档放到另外一个索引中。
POST _reindex { "source": { "index": "olympic", "query": { "match": { "medal": "Gold" } } }, "dest": { "index": "olympic_gold_medals" } }
在上面,我们把数据 reindex 到一个叫做 olympic_gold_medals 里去。我们需要创建一个 view data。这样做的话,如果我们的数据发生改变,我们需要每次都要这么做。
我们另外一种方法是创建一个 alias:
POST _aliases { "actions": [ { "add": { "index": "olympic", "alias": "medals", "filter": { "bool": { "filter" : [ { "term": { "medal": "Gold" } } ] } } } } ] }
那么这个 alias medals 将含有所有金牌的文档,比如我们查询:
GET medals/_count
它显示:
{ "count" : 13372, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 } }
这个和我们使用 Discover 查看到的金牌数是一模一样的:
我们接下来需要为这个 alias 创建一个 data view:
这样我们就创建了一个叫做 medals 的 data view。
和之前一样,我们选择 Maps 来可视化数据:
从上面,我们可以看出来美国已经得了315块金牌。在世界的很多其它地方有的还没有金牌呢。
其实从地图上的数字我们就可以看到每个国家得了多少块金牌。 点击上面的 Save & return 按钮:
好了,今天的展示就到这里。希望大家对 Elastic Maps 有更多的认识和了解。