LoginSignup
1
1

More than 3 years have passed since last update.

スマブラのVIP値をPandasで集計

Last updated at Posted at 2020-10-01

はじめに

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1