山雅サポの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勉強していきます。