はじめに
【初めてのスクレイピング】スマブラの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】【ついでにデータ解析】