【Pandas】プレミアリーグのランキングを分析してみる

2018年のプレミアリーグは、マンチェスタシティが優勝、リバプールが2位、3位がチェルシーでした。

https://www.bbc.co.uk/sport/football/premier-league/table

 

今日はPandasを使ってこのランキング表を取得してみたいと思います。

スポンサーリンク

ランキング表のスクレイピング(read_html)

 

pandasは既に入っているとして、追加で以下のパッケージをダウンロードします。

Pandasのread_html()を使うと、tableタグ内のテーブルを取得できます。

この返り値はテーブルの中身が入ったリストです。

長さが1なので、最初の要素をデータフレームとして取り出します。

必要のないデータの削除(drop)

最初の2つのカラムが必要ないので、消します。

データの末尾を見てみると、

 

関係のないランキングのアップデート情報がありました。これは必要ないので消します。

20行目と、ついでにFormカラムを消します。

 

データタイプを数値に変換(to_numeric)

 

さて、ここで下準備が整ったので、分析していきたいと思います。

分析するには、カラムのデータタイプが数値である必要があります。

各カラムのデータタイプを確認してみます。

なんとオブジェクトになっています。これは文字列(String)ということなので、数値にしないと計算ができません。

こういう時は、to_numericを適用します。

errors=”coerce”を指定すると、数値に変換できなかった時にはNaNに変換してくれます。

int64に変換ができました。

列名の変更(rename)

ここで1つ問題があります。列名が省略された文字なのでなんの事だかわかりません。

分かるように列名を変更しましょう。

inplace=Trueを指定すると、データフレームに変更が反映されます。

Playは試合数、Winは勝利数、Drawは引き分けの数、Loseは負けの数、Forは得点数の合計、Againstは失点数の合計、GD(Goal Difference)は得失点差です。Ptsは勝ち点ですね。

試しに1試合あたりの得点数と失点数を計算し、新しい列を追加してみます。

失点は英語で”Conceded”というらしいです。

こんな感じで右側に2つのカラムを追加できました。

マンチェスターシティとリバプールは1試合あたりの得点が多いし、失点も少ないですね。

カラムのソート(sort_values)

 

1試合あたりの得点が多い順に並べてみましょう。

Pandasを使うと、このようにスクレイピング+データ分析ができます。

おわり。