4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「FIFA WORLD CUP 2018」で日本が負けたのが悔しくて10年分のサッカーFIFAランキングを可視化してみたら見えてきたもの

Last updated at Posted at 2018-07-03

こんばんは、「好きなこと、おもしろいこと」をコンセプトに活動しているテックチーム soberです。

いやー、サッカー悔しかったですね!


あと少しのところが、世界の壁なのでしょうか・・・。

世界の壁とはどれほどなのかと思い、

10年分のサッカーFIFAランキングを可視化してみました!

ドン!

img.png

↓デモ↓
https://soberjp.github.io/FIFA-Ranking


グループリーグの日本、コロンビア、ポーランド、セネガルと本日対戦したベルギーの5チームの10年分のFIFAランキングを可視化してみました。

可視化してみると、なにやら見えてきますね!


2011年には日本が上位だったのに、2012年を境に明暗が別れていますね。
ポーランドとベルギーの伸び率がすごい。しかもベルギーは1位になったこともあるらしいです。

近年はすごい差ですね・・・。



それでは可視化するおもしろさが少しだけ伝わったところでコードをご紹介。
難しいことは考えず、あくまでシンプルに構築してみました。


↓コードはこちら↓
https://github.com/soberjp/FIFA-Ranking


自分の環境でも試す方法


実行環境


Node.js v9.2.0
npm v5.5.1

パッケージインストール


npm install

ビルド


npm run build

ローカルwebサーバー起動


npm run dev

でできます!



パッケージはこんな感じのをインストール

package.json


{
  "name": "FIFARanking",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "build": "webpack",
    "dev": "webpack-dev-server"
  },
  "keywords": [],
  "author": "sober",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^3.5.4",
    "webpack-dev-server": "^2.7.1"
  },
  "dependencies": {
    "c3": "^0.6.2",
    "css-loader": "^0.28.11",
    "d3": "^5.5.0",
    "file-loader": "^1.1.11",
    "jquery": "^3.3.1",
    "materialize-css": "^0.100.2",
    "style-loader": "^0.21.0",
    "url-loader": "^1.0.1"
  }
}



webpackとwebpack-dev-serverも設定してみる

webpack.config.js


var webpack = require('webpack');

module.exports = {
    entry: './_resouce/main.js',
    output: {
        path: __dirname + '/dist',
        filename: 'app.js'
    },
    module : {
        rules : [
            {
                test: /\.css/,
                loaders: ['style-loader', 'css-loader']
            },
            {
                test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                loader:"url-loader?limit=10000&mimetype=application/font-woff"
            },
            {
                test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                loader: "file"
            }
        ]
    },
    plugins: [
        new webpack.optimize.UglifyJsPlugin({
            compress: {
                warnings: false
            }
        }),
        new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            'window.jQuery': 'jquery'
        })
    ],
    devServer: {
    contentBase: __dirname + '/dist',
        publicPath: '/',
        watchContentBase: true,
        open: true
}
};



パッケージしたいJSとCSSを書いておく

main.js


// JS一式を読み込んでパッケージ
import {chart} from './js/chart.js';

// CSS一式を読み込んでパッケージ
require('materialize-css/dist/css/materialize.css');
require('c3/c3.css');
require('./css/stylesheet.css');

// materialize(JS)を読み込んでパッケージ
require('materialize-css');

chart();



C3.jsを利用してシンプルにチャートを作成してみる

chart.js


export function chart() {

    var d3 = require('d3');
    var c3 = require('c3');

    c3.generate({
        size: {
            height: 600
        },
        data: {
            // データ格納
            columns: [
                ['日本', 43,29,19,22,47,54,53,45,57,61],
                ['ベルギー', 66,57,41,21,11,4,1,5,5,3],
                ['コロンビア', 39,48,36,5,4,3,8,6,13,16],
                ['ポーランド', 58,73,66,55,76,41,34,15,7,8],
                ['セネガル', 89,70,44,77,65,35,44,33,23,27]
            ],
            type: 'spline'
        },
        // 軸設定
        axis: {
            // 年表示
            x: {
                type: 'category',
                categories: ['2009年', '2010年', '2011年', '2012年', '2013年', '2014年', '2015年', '2016年', '2017年', '2018年']
            },
            // 順位表示
            y: {
                // 逆順表示
                inverted: true,
                // 左ラベル
                label: {
                    text: '順位',
                    position: 'outer-middle'
                }
            }
        },
        // グリッド追加
        grid: {
            x: {
                show: true
            },
            y: {
                show: true
            }
        },
        // ツールチップで順位表示
        tooltip: {
            format: {
                value: function (value) {
                    return d3.format(',')(value) + "";
                }
            }
        },
        // ポイント表示
        point: {
            show: true
        }
    });

}



スタイルは少なめ

stylesheet.css



/*全体設定*/
html, body {
    background-color: #FFFFFF;
    color: #383838;
}

/*余白*/
#mm_60 {
    margin-top: 60px;
}

/*グラフフォントサイズ*/
.c3-axis-y text {
    font-size: 14px;
}
.c3-axis-x text {
    font-size: 14px;
}



htmlはdistディレクトリに置いておく

index.html


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="keywords" content="FIFA ランキング 比較">
    <meta name="description" content="FIFA ランキング 比較">
    <meta name="author" content="FIFA ランキング">
    <title>FIFA Ranking</title>
</head>
<body>

    <div id="mm_60"></div>

    <div class="row">
        <div class="container">
            <div class="col s12 center">
                <h3>FIFA ランキング</h3>
            </div>
        </div>
    </div>

    <div id="mm_60"></div>

    <div class="row">
        <div class="container">
            <div class="col s12 center">
                <div id="chart"></div>
            </div>
        </div>
    </div>

    <script src="./app.js"></script>

</body>
</html>


4年後はベスト8、いや優勝狙いたいですね!!


↓ FIFAランキングをスクレイピングしたサイトはこちらになります ↓
FIFA Ranking.net

FIFA Ranking.netを見るだけで済んじゃうじゃんっていうのは内緒で :vulcan_tone1:

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?