関数にして10行で2024年セ・パ交流戦成績データをスクレイピングする。
割引あり
2024年もこの季節がやってきました。
セ・パ交流戦!
プロ野球公式サイトに交流戦の成績のデータも記録されています。
このデータをスクレイピングして使いやすい形に整形していきたいと思います。
サムネイル用の画像はnaofujisawaさんよりnoteから使わせていただきました。ありがとうございます。
1. インポート
pandasをインポートします。
import pandas as pd
2. データ取得
サイトからデータを取得します。
df = pd.read_html('https://npb.jp/bis/2024/stats/bat_inter.html')
3.データ加工
まず、データフレーム型にします。
data = df[0]
列は2行目のデータになるのですが、確認してみると選手列が2列あります。
3列目の「選手」を「球団」に変えます。
print(data.loc[1])
結果
0 順 位
1 選 手
2 選 手
3 打 率
4 試 合
5 打 席
6 打 数
7 得 点
8 安 打
9 二 塁 打
10 三 塁 打
11 本 塁 打
12 塁 打
13 打 点
14 盗 塁
15 盗 塁 刺
16 犠 打
17 犠 飛
18 四 球
19 故 意 四
20 死 球
21 三 振
22 併 殺 打
23 長 打 率
24 出 塁 率
Name: 1, dtype: object
data.iloc[1,2] = '球団'
カラムを設定します。
data.columns = data.loc[1]
確認してみましょう。
data.head()
カラム名にあるスペースは、データ加工などコードを書く際も面倒になるので取り除きます。
data.columns = data.columns.str.replace(' ','')
data.columns = data.columns.str.replace(' ','')
また、1、2行目もいらないので、2行目からのデータを取得するようにして、不要な行を消します。
data = data[2:]
data.head()
indexの番号をリセットします。(ここは、indexを保存する際も除くのでなくても良い処理です。)
data.reset_index(inplace=True,drop=True)
data.head()
4. csvに保存
最後にcwv形式でデータを保存して完了です。
data.to_csv('interLeagueSlugger.csv',index=False)
ex.
投手成績のURLに行けば投手成績も取得することができます。
関数拡張等しやすいようにクラスにしてまとめると下記のような感じになります。
if name == "main":以下で記載されているコードのように使用します。
クラスにまとめて使用することで、コードの変更、機能追加などがしやすくなります。
url_pit = 'https://npb.jp/bis/2024/stats/pit_inter.html'
url_slg = 'https://npb.jp/bis/2024/stats/bat_inter.html'
class interLeagueScraping:
def __init__(self,url):
self.url = url
def interLScrapeSlug(self):
import pandas as pd
df = pd.read_html(self.url)
data = df[0]
data.iloc[1,2] = '球団'
data.columns = data.loc[1]
data.columns = data.columns.str.replace(' ','')
data.columns = data.columns.str.replace(' ','')
data = data[2:]
data.reset_index(inplace=True,drop=True)
data.to_csv('interLeagueSlugger.csv',index=False)
def interLScrapePitch(self):
import pandas as pd
df = pd.read_html(self.url)
data = df[0]
data.iloc[1,2] = '球団'
data.columns = data.loc[1]
data.columns = data.columns.str.replace(' ','')
data.columns = data.columns.str.replace(' ','')
data = data[2:]
data.reset_index(inplace=True,drop=True)
data.to_csv('interLeaguePitcher.csv',index=False)
if __name__ == "__main__":
interLeagueScraping(url_pit).interLScrapePitch()
interLeagueScraping(url_slg).interLScrapeSlug()
本記事のプログラム(notebook)を販売しています。
プログラムをノートブックファイルとpythonファイルを販売します。
本記事のプログラムをコピペすれば動かせますので、サポート感覚で購入してただければ嬉しいです。
よろしければサポートをよろしくお願いします。サポートいただいた資金は活動費に使わせていただきます。