見出し画像

山雅サポのpython勉強日記_#1 (webスクレイピング,文字認識,画像処理)

1. はじめに

こんばんは、松本山雅FCサポーターのすぴっちです。

以下の2点の理由により、最近"python"というプログラミング言語の勉強を始めました。

#1. 仕事:残業時間の削減のため
 → pythonは自動化に適した技術。機会的な業務はpythonに投げて残業時間を減らしたい

#2. 趣味:純粋に触ってて楽しい
 → (業務が C/C++メインなこともあり)コードを書きやすい。また解説記事も多くて調べやすい。ので、モノづくりのハードルが低くて楽しい。

で、オンラインサービスを使用したり、参考書を使ったりして勉強しているのですが・・・段々とやる気が落ちてくる・・・(オイ

そんなこともあり、少しでもやる気を上げるために「サッカー(松本山雅FC)」に紐づけて勉強していこうと考えました。流れとしては以下の通り。

 Step1. サッカー(松本山雅FC)に関して、何か実現したいことを考える
 Step2. それをどうやってpythonで実現するか考える
 Step3. pythonの勉強して実現する
  → pythonのスキルアップ!!

本記事は、そんな山雅サポによるpythonの勉強の備忘録になります。(定期的にUPしていく・・・予定)

2. 今回実現したいこと

2021シーズンの推しメン(#33大野くん)の戦績の分析
→ 大野くん個人としてどんな戦績だったのか調べてみたい

3. どうやってpythonで実現するのか

3-1. "戦績のデータ"はどうやって取得する?

選択肢は、"FootballLAB" か "SPORTERIA"あたり。
SPORTERIAだと 具体的な"数値"を取得できる。ただし、”画像データ”だが・・・(以下のリンク参照)。

「文字認識&画像解析の勉強したいので丁度良い!」と思い、”SPORTERIA”様のデータを使うことにした。

3-2.  どうやって分析する?必要な処理は?

出場試合の全データから、1試合あたりの平均値を算出する。そして、他の主要なCBの値も算出して比較すれば・・・何か見えてきそう。

ので・・・以下の処理が必要となる

#1. 大野くん含めた数名の選手の、2021シーズン全出場試合の"攻撃スタッツ" と "守備スタッツ" の画像データを取得
 → 最終的に 8名の選手、合計544枚の画像を使用することに
#2. その画像データから、各種スタッツの"数値"を取得
 → タックル数:xx などと
#3. 取得した数値より1試合あたりの平均値を算出

3-3. どうやってpythonで実現する?

ポイントは上記の#1,#2

#1を実現するために「WEBスクレイピング」を勉強。
 - WEBスクレイピング:WEBページから情報を取得すること
 → 画像データがあるページから画像のURLを取得 & 自動保存を行う
 - 主な使用ライブラリ:beautifulsoup
 - 参考サイト:以下参照


#2を実現するために「文字認識」(+「画像処理」)を勉強
 - 文字認識:画像データから文字を取得すること
 → SPORTERIA様の画像データから、各種スタッツ値を取得する
 → 精度向上のため、画像処理(トリミング, 2値化)も勉強
 - 主な使用ライブラリ:pyocr, cv2
 - 参考サイト:以下参照 

4. 実現結果

 4-1. 作成したコード

以下のリンク先参照(画像データをモロに使うため、SPORTERIA様のブログに記載しました)

 4-2. ”2021シーズンの推しメン(#33大野くん)の戦績の分析”の結果

以下のリンク先参照(各種データをモロに使うため、SPORTERIA様のブログに記載しました)

5. 感想 

SPORTERIA様のデータを使って、楽しくpythonを勉強できました。

今回苦労したのが以下の2点。

1点目:指定のWEBページから画像のURLを取得する処理
→ ”テキストを取得する”といった処理は多くのサンプルコードが見つかったが、"img"タグに含まれるURLを取得するやり方が中々見つからなかった。”link.get(xxx)”というメソッドを知れてよかった。

2点目:画像データから正確に数値を取得する処理
→ 似たような画像なのに、画像Aは 出場時間=90となるが、なぜか画像B では出場時間=930となったりした。最終的に、”ギリギリまでトリミングすること”、”モノクロにすること" で安定した。

定期的にpython勉強していきます。