[Python]2018年Jリーグの得点データをスクレイピングして描画してみる[ジョー編]

Python
Nishipy
先月はWebスクレイピングの本を少し読み、とても興味深く思いました。
試しに使ってみたくて、Jリーグのサイトからジョーの得点データを抽出してみることにしました。

1. はじめに

1.1. Webスクレイピングとは

Webスクレイピングの説明は、こんな感じです。

ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラーあるいはウェブ・スパイダーとも呼ばれる。 通常このようなソフトウェアプログラムは低レベルのHTTPを実装することで、もしくはウェブブラウザを埋め込むことによって、WWWのコンテンツを取得する。[Wikipediaより]


Webサイトから情報を抽出して、加工することをいうらしいですね。
機械学習の勉強に実データを使いたくてもデータセットとして配布されていないときや、
Webページにデータが乗ってるけど手作業でcsv化するのが面倒なときに使えそうです。

1.2. 動機

Python初心者の私ですが、最近こんな本を読みました。

ライブラリーを使うと、私でもスクレイピングできそうだなあと思い、実際試してみました。
せっかくやるなら、大好きなサッカーに関することの方が楽しそうなので、Jリーグの公式サイトのデータをスクレイピングすることとしました。
当たり前だけど、好きなことと絡めたほうが、勉強も長続きする気がします。

2. ジョーの得点データをスクレイピング

以下で利用するWebサイトのURLを適切に選べば、任意の選手に対して同様のことができます。
(小林悠とか鈴木優磨とか…)

2.1. 概要

  • 対象選手: ジョー (名古屋グランパス)
  • 対象リーグ: J1 2018年
  • 利用するWebサイト: → https://www.jleague.jp/club/nagoya/player/detail/604346/
    (バリバリの初心者のため、すでに表形式のデータが公開されているサイトを選ぶこととします)
  • 利用する言語: Python

2.2. スクレイピングしてみる

(1) Webサイトから情報を取得

利用するWebサイトから、htmlを取得します。

(2) 必要なデータのみ抽出

取得したhtmlから、必要なデータのみを抽出します。
BeautifulSoupを使うのが良さそうです

まだタグはついていますが、それっぽいです。


(3) csvに出力

さっきのデータを、csvに出力してみます。

(4) pandasで処理

先ほどのcsvをpandasのDataFrameとして読み込んでみます。
pandasの表示みやすいですね。

今回は、2018年シーズンの累積得点数の推移を、goals_transitionとして格納していきます。

(5) matplotlibで描画

n節終了時のシーズン累積得点数の推移を描画してみます。
そり立つ壁がありますね…

そり立つ壁がありますね。


3. まとめ

3.1. 所感

興味本位でやってみました。所感は以下の通りです。

  • 自分で考えながらコードを書くので、本を読んでいるより楽しかった
  • ライブラリの使い方を調べながら実装したため、覚えることが多かった
  • 20節から25節あたりのジョーさん、半端ない

ちなみに、スクレイピングに関しては、この本がわかりやすかったです。

[amazonjs asin=”4774183679″ locale=”JP” title=”Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-“]

3.2. 今後やりたいこと

主に2点です。ふんわりしていますが、暖かく見守ってくださいませ。

  • 今回のデータで、特長量を整備する練習がしたい
  • 今回のデータで特長量エンジニアリングした後、モデルを適応し、何かしたの予測がしたい。

3.3. 注意

Webスクレイピングはをやりすぎると、相手のサーバーやネットワークに過剰な負荷をかけてしまうことがあるので、注意が必要です。

404 NOT FOUND | Nishipy Notes

以上

コメント