スクレイピングで野球データを所得する

プログラミング
スポンサードリンク

スクレイピングによるチーム成績をデータフレーム化してみました。

# パリーグのデータフレームを作成
# セリーグの場合は2行目urlの pacificleague を centralleague に変更
def team_result_data_p(year):
  url = "https://npb.jp/bis/yearly/_"+ str(year) +".html"
  tables = pd.read_html(url)

  # チーム全体成績
  df = tables[3]
  df = df.drop('Unnamed: 5', axis=1)
  df = df.drop('ゲーム差', axis=1)

  # 打撃成績
  offensive_df = tables[4]

  # 守備成績
  deffensive_df = tables[5]
  deffensive_df = deffensive_df.drop('Unnamed: 9', axis=1)

  # テーブルの結合
  result_df = pd.merge(df, offensive_df, on='チーム')
  result_df = pd.merge(result_df, deffensive_df, on='チーム')

  # 列の削除
  result_df = result_df.loc[:, ~result_df.columns.str.contains('_y')]
  result_df = result_df.rename(columns={'試 合_x': '試 合', '勝 利_x': '勝 利', '敗 北_x': '敗 北'})
  result_df = result_df.drop(result_df.columns[[-7]], axis=1)

  return result_df

# 2023年のチーム成績
team_result_data_p(2023)

勝利数と打率や防御率などのデータの相関を調べてみました。

# prompt: 勝利と6列目以降のデータとの相関ヒートマップを作成し、日本語対応ができるようにする
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sns

# 相関行列の算出
corr_mat = team_result_data_p(2023)[['勝 利'] + team_result_data_p(2023).columns[6:].tolist()].corr()

# ヒートマップの作成
plt.figure(figsize=(12, 8))
sns.heatmap(corr_mat, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('勝利と各指標の相関', fontsize=16)
plt.show()

コメント

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