はじめに
【初めてのスクレイピング】スマブラのVIPいきやすいキャラ作ってみた【BeautifulSoup】【ついでにデータ解析】を参考にPandasでVIP値を集計しました
スクレイピング
import re
import time
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
result = []
for i in range(1, 82):
url = f"https://kumamate.net/data/?mode=rate&fighter={i}"
r = requests.get(url, headers=headers)
r.raise_for_status()
soup = BeautifulSoup(r.content, "html.parser")
for trs in soup.find_all("tr", class_=re.compile("RecentMatch[12]")):
tds = trs.find_all("td")
win, lose, _ = re.split("[勝敗]", tds[3].get_text(strip=True))
data = [
tds[0].img.get("alt"),
tds[2].get_text(strip=True),
int(win),
int(lose),
float(tds[4].get_text(strip=True).rstrip("%")),
]
result.append(data)
time.sleep(1)
result
データ解析
import pandas as pd
df = pd.DataFrame(result, columns=["自分", "相手", "勝", "敗", "勝率"])
# 使用回数計算
df["使用回数"] = df["勝"] + df["敗"]
# ファイター別使用回数集計
pv = df.pivot_table(values="使用回数", index="自分", aggfunc="sum").reset_index()
pv.rename(columns={"自分": "相手", "使用回数": "登録数"}, inplace=True)
df1 = pd.merge(df, pv, on="相手")
# VIP計算
df1["VIP"] = df1["登録数"] * df1["勝率"]
# 同一キャラを除外
df2 = df1[df1["自分"] != df1["相手"]].copy()
# ファイター別VIP集計
pv1 = df2.pivot_table(values="VIP", index="自分", aggfunc="sum").sort_values(
by="VIP", ascending=False
)
pv1["VIP"] = (pv1["VIP"] // 100000).astype(int)
print(pv1.to_markdown())
使用回数集計
| 自分 | 使用回数 | |
|---|---|---|
| 1 | ガノンドロフ | 24004 |
| 2 | ジョーカー | 19527 |
| 3 | クッパ | 19016 |
| 4 | マリオ | 17186 |
| 5 | ドンキーコング | 15838 |
| 6 | ルキナ | 15771 |
| 7 | プリン | 13148 |
| 8 | リュカ | 12628 |
| 9 | クラウド | 12264 |
| 10 | ロイ | 11374 |
| 11 | ゼルダ | 11125 |
| 12 | キャプテン・ファルコン | 11044 |
| 13 | ベレト/ベレス | 10269 |
| 14 | パルテナ | 10159 |
| 15 | マルス | 10126 |
| 16 | カービィ | 9388 |
| 17 | リンク | 9173 |
| 18 | ガオガエン | 8657 |
| 19 | ファルコ | 8223 |
| 20 | ネス | 8061 |
| 21 | ロボット | 8032 |
| 22 | インクリング | 7986 |
| 23 | テリー | 7955 |
| 24 | ウルフ | 7867 |
| 25 | ピカチュウ | 7739 |
| 26 | スネーク | 7330 |
| 27 | ヨッシー | 7275 |
| 28 | ゲッコウガ | 6898 |
| 29 | アイク | 6333 |
| 30 | Mr.ゲーム&ウォッチ | 6333 |
| 31 | ミェンミェン | 6290 |
| 32 | ベヨネッタ | 6286 |
| 33 | デデデ | 6201 |
| 34 | フォックス | 6198 |
| 35 | ケン | 6088 |
| 36 | 勇者 | 6077 |
| 37 | ミュウツー | 6037 |
| 38 | ルフレ | 5917 |
| 39 | キングクルール | 5893 |
| 40 | ゼロスーツサムス | 5454 |
| 41 | カムイ | 5453 |
| 42 | リドリー | 5446 |
| 43 | パックマン | 5262 |
| 44 | ポケモントレーナー | 5093 |
| 45 | パックンフラワー | 5019 |
| 46 | サムス | 4854 |
| 47 | ブラックピット | 4733 |
| 48 | ダークサムス | 4716 |
| 49 | Wii Fit トレーナー | 4693 |
| 50 | クロム | 4630 |
| 51 | ドクターマリオ | 4405 |
| 52 | むらびと | 4261 |
| 53 | シュルク | 4201 |
| 54 | メタナイト | 4173 |
| 55 | シーク | 4127 |
| 56 | ルイージ | 4103 |
| 57 | クッパ.Jr | 3974 |
| 58 | ピチュー | 3886 |
| 59 | バンジョー&カズーイ | 3867 |
| 60 | リトル・マック | 3818 |
| 61 | こどもリンク | 3653 |
| 62 | ダックハント | 3282 |
| 63 | しずえ | 3208 |
| 64 | ルカリオ | 3167 |
| 65 | ロックマン | 3073 |
| 66 | トゥーンリンク | 2954 |
| 67 | ソニック | 2848 |
| 68 | ワリオ | 2506 |
| 69 | ピクミン&オリマー | 2340 |
| 70 | アイスクライマー | 2324 |
| 71 | ピット | 2265 |
| 72 | 格闘Mii | 2262 |
| 73 | ピーチ | 2251 |
| 74 | ロゼッタ&チコ | 2192 |
| 75 | 射撃Mii | 2169 |
| 76 | リュウ | 2151 |
| 77 | デイジー | 1880 |
| 78 | ディディーコング | 1829 |
| 79 | シモン | 1554 |
| 80 | リヒター | 1515 |
| 81 | 剣術Mii | 1383 |
VIP集計
| 自分 | VIP |
|---|---|
| クッパ.Jr | 303 |
| バンジョー&カズーイ | 300 |
| リヒター | 299 |
| ミェンミェン | 296 |
| 射撃Mii | 295 |
| ダックハント | 291 |
| フォックス | 287 |
| ルフレ | 285 |
| 格闘Mii | 284 |
| ロックマン | 284 |
| ガオガエン | 283 |
| Mr.ゲーム&ウォッチ | 282 |
| ケン | 281 |
| デデデ | 278 |
| 剣術Mii | 277 |
| ゲッコウガ | 276 |
| ダークサムス | 276 |
| ベヨネッタ | 275 |
| スネーク | 274 |
| トゥーンリンク | 274 |
| ブラックピット | 274 |
| シモン | 273 |
| ファルコ | 273 |
| パックンフラワー | 273 |
| ディディーコング | 273 |
| Wii Fit トレーナー | 272 |
| メタナイト | 272 |
| ピーチ | 272 |
| サムス | 268 |
| ゼルダ | 268 |
| アイク | 268 |
| ピクミン&オリマー | 267 |
| ピット | 267 |
| ロボット | 266 |
| リュウ | 266 |
| パックマン | 266 |
| アイスクライマー | 266 |
| ロゼッタ&チコ | 265 |
| パルテナ | 265 |
| むらびと | 265 |
| 勇者 | 264 |
| ドクターマリオ | 264 |
| ポケモントレーナー | 264 |
| デイジー | 262 |
| リンク | 261 |
| ピチュー | 260 |
| マリオ | 260 |
| クロム | 260 |
| カムイ | 259 |
| ヨッシー | 259 |
| キングクルール | 258 |
| ウルフ | 258 |
| リトル・マック | 258 |
| ルカリオ | 258 |
| ワリオ | 257 |
| シュルク | 257 |
| インクリング | 257 |
| クラウド | 257 |
| ロイ | 256 |
| こどもリンク | 256 |
| ピカチュウ | 256 |
| クッパ | 256 |
| ミュウツー | 256 |
| ルイージ | 255 |
| テリー | 255 |
| ソニック | 255 |
| ネス | 254 |
| シーク | 254 |
| しずえ | 253 |
| リュカ | 252 |
| キャプテン・ファルコン | 250 |
| プリン | 250 |
| ドンキーコング | 249 |
| マルス | 249 |
| ルキナ | 248 |
| ゼロスーツサムス | 246 |
| リドリー | 245 |
| ジョーカー | 244 |
| カービィ | 244 |
| ベレト/ベレス | 241 |
| ガノンドロフ | 240 |
参考
【初めてのスクレイピング】スマブラのVIPいきやすいキャラ作ってみた【BeautifulSoup】【ついでにデータ解析】