【R图秀-6】图说里约奥运(二)

上期R图秀抓取并展示了本届奥运会的各个国家和比赛项目的数据,今天我们再增加一点难度,玩一玩运动员的数据。

为什么说今天的难度比上次大呢?主要原因是在Rio2016官网上抓取运动员数据的时候遇到了一点小麻烦。

我是根据每个比赛项目分别抓取运动员数据,由于运动员数目比较多,网页上最初只展示5名运动员,如果要看更多的信息,必须要点击“LOAD MORE”,每次点击只能多显示5名运动员。熟悉javascript的同学肯定知道,这是利用了AJAX技术,简单的说就是在不刷新整个页面的情况下,动态更新页面中的局部信息,提高了网页的交互性。这下用Rvest就很困难了。如果自己去点每一个“LOAD MORE”,真的会“生不如死”的。


【R图秀-6】图说里约奥运(二)_第1张图片
loadmore.png

今天就给大家再介绍一个神器:Selenium。它可以控制你的浏览器做出指定的动作,换句话说,它可以让你写一个程序来代替你上网。听上去是不是很酷?更酷的是,R有一个包(RSelenium)可以提供接口,让你通过写R程序来控制浏览器!这样我就可以让R程序来帮我不断的点击“LOAD MORE”,直到所有的运动员都展示在页面上,然后就可以“一网打尽”!


【R图秀-6】图说里约奥运(二)_第2张图片
selenium.png

友情提示:我大概花了一天时间才掌握RSelenium的使用,对初学者来说可能需要花的时间会更长,多一点耐心,多查查Google会很有帮助!

抓取运动员数据的步骤是:

  1. 利用RSelenium抓取每个运动员所对应的URL,代码如下:


    【R图秀-6】图说里约奥运(二)_第3张图片
    code4.png
  2. 利用Rvest在每个运动员的页面上抓取感兴趣的数据:姓名,国家,比赛项目,性别,年龄,出生月,身高,体重。代码如下:


    【R图秀-6】图说里约奥运(二)_第4张图片
    code5.png

由于数据量较大,抓取的时间会稍微久一些。

有了数据以后,接下来需要思考一下,我想知道关于运动员的哪些信息?

  1. 我想知道奥运运动员里最流行的名字有哪些?
  2. 本届奥运会的男女运动员比例是怎样的?
  3. 哪个月份出生的奥运运动员最多?灵感来自于一本叫《异类》的书,里面也研究过出生月份和运动员成长之间的关系
  4. 年龄、身高、体重是如何分布的?男女运动员的差异有多大?
  5. 谁的年纪最小/大,谁最高/矮,谁最重/轻?

有了问题就有了方向,接下来就是秀图时间:

  1. Name Cloud,使用的是wordcloud2包。是不是看到了很多熟悉的名字呢?


    【R图秀-6】图说里约奥运(二)_第5张图片
    Rio2016_namecloud.png

    代码如下(# name cloud部分):


    【R图秀-6】图说里约奥运(二)_第6张图片
    code6.png
  2. 男女运动员比例,还是男运动员稍微多一些


    【R图秀-6】图说里约奥运(二)_第7张图片
    Rio2016_gender_pie.png

    代码见上图(# gender pie部分)

  3. 出生月份分布图,一月份出生的男运动员较多,而4月份出生的女运动员较多,原因是什么?我也不知道!回去再好好看看《异类》那本书


    【R图秀-6】图说里约奥运(二)_第8张图片
    Rio2016_month_bar.png

    代码如下:


    【R图秀-6】图说里约奥运(二)_第9张图片
    code8.png
  4. 年龄分布图,男女基本一致,女运动员稍微年轻一些


    【R图秀-6】图说里约奥运(二)_第10张图片
    Rio2016_age_hist.png
  5. 身高分布图,还是男生高一些,符合预期


    【R图秀-6】图说里约奥运(二)_第11张图片
    Rio2016_height_hist.png
  6. 体重分布图,还是男生“胖”一点阿


    【R图秀-6】图说里约奥运(二)_第12张图片
    Rio2016_weight_hist.png

    上面三副图的代码如下:


    【R图秀-6】图说里约奥运(二)_第13张图片
    code7.png
  7. 比比谁最年轻、谁最高、谁最重。怎么看上去有点像结婚证的赶脚?


    【R图秀-6】图说里约奥运(二)_第14张图片
    Rio2016_age_barplot.png

    【R图秀-6】图说里约奥运(二)_第15张图片
    Rio2016_height_barplot.png

    【R图秀-6】图说里约奥运(二)_第16张图片
    Rio2016_weight_barplot.png

    代码如下(只展示了第一副图的代码,后面的代码类似):


    【R图秀-6】图说里约奥运(二)_第17张图片
    code9.png

友情提示:代码中大量运用了dplyr包的函数和pipe(%>%),初学者看起来可能会有点吃力。没有关系,Rapp公众号会陆续推出相关教程,让我们一起来学习吧。

【图说里约奥运】共有3集,前2集展示的是各个国家和运动员的数据。为了展示最完整的奥运奖牌榜,最后1集将在奥运结束后推出,敬请关注!

【R图秀-6】图说里约奥运(二)_第18张图片
qrcode.jpg

你可能感兴趣的:(【R图秀-6】图说里约奥运(二))