How to analyze?その② 分析方法

データ分析方法

本ページの具体的にJリーグのデータ分析を行う方法を紹介。下記ページも参考

How to analyze?その① 分析戦略 – Jリーグデータ分析(FC東京中心)

開発環境としてはクラウドを前提に開発を行うため、Google Colabで対話方式で実装を進め、実行結果をGoogle driveに保存する形をとる。また、スクレイピングの時間短縮やスクレイピング先の付加削減のため、スクレイピングしたデータはCSVで保存し、分析する際は保存したCSVを読み込んで分析することとする。

#取得したデータを修正し、CSVに保存
df_team.to_csv(BOOK_NAME_CLUB)
df_player.to_csv(BOOK_NAME_PLAYER)


#修正したデータを読み込み、分析に用いる
df_player =  pd.read_csv(BOOK_NAME_PLAYER)
df_club =  pd.read_csv(BOOK_NAME_CLUB)

分析したデータはソースコード上でグラフ化し、EXCEL等は用いなかった。この辺は好みの問題(EXCEL等のほうが綺麗にしやすいが、反復動作には向かない)もあるが折角なのでPythonをベースに分析を行った。下記は実行例。グラフをコードで書くのは割と面倒くさい…が、全チームなど反復してみたいときはやはりコードペース(Matplot)の方が可視化しやすい。

def show_participation_by_age(df_club, team_name):
  df_ft = df_club.query('チーム名 == @team_name').set_index("年度")

  fig, ax1 = plt.subplots(1, 1, alpha=0.5, figsize=(12,6), )
  ax2 = ax1.twinx()

  bottom = 0
  cm = plt.get_cmap("Blues")
  col_array = ["U20出場率", "U24出場率", "U28出場率", "U32出場率", "U36出場率", "O36出場率"]
  i = 2/ len(col_array)

  for col in  ["U20出場率", "U24出場率", "U28出場率", "U32出場率", "U36出場率", "O36出場率"]:
    if col == col_array[-1]:
      ax1.bar(df_ft.index, df_ft [col], label = col, bottom = bottom, color = "k")
    else:
      ax1.bar(df_ft.index, df_ft [col], label = col, bottom = bottom, color = cm(i))
    bottom += df_ft [col]
    i += 1 / len(col_array)

  ax1.set_title(f"{team_name}の年代別出場時間率")
  ax1.set_xlabel("")
  ax1.set_ylabel("年代別出場率")
  ax1.xaxis.set_major_locator(MultipleLocator(1))
  ax1.legend(loc='upper left', bbox_to_anchor=(1.1, 1))

  ax2.plot(df_ft.index, df_ft["総合順位"], color = [0.6, 0, 0])
  ax2.set_ylabel("総合順位")
  ax2.yaxis.set_major_locator(MultipleLocator(1))
  ax2.set_ylim([1, 20])
  plt.gca().invert_yaxis()
  plt.show()

show_participation_by_age(df_club, "FC東京")

データの保存方法はいくつか考えられるが、個人的にはクラブデータと選手データの2種類に分けて保存。リーグ統計はクラブデータ統計からすぐに計算できるので、保存はしなかった。下記が選手データとクラブデータの中身。

コメント

タイトルとURLをコピーしました