exploring stat comparision
This commit is contained in:
1
sandbox/data-exploration/src/api/__init__.py
Normal file
1
sandbox/data-exploration/src/api/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .core import *
|
||||
20
sandbox/data-exploration/src/api/core.py
Normal file
20
sandbox/data-exploration/src/api/core.py
Normal file
@@ -0,0 +1,20 @@
|
||||
import requests
|
||||
|
||||
class Leetify:
|
||||
api_base_url = "https://api.leetify.com/api"
|
||||
profile_base_url = f"{api_base_url}/profile"
|
||||
match_base_url = f"{api_base_url}/games"
|
||||
|
||||
def __get_page(self, url: str) -> dict:
|
||||
resp = requests.get(url)
|
||||
return resp.json()
|
||||
|
||||
def get_profile(self, id: str) -> dict:
|
||||
url = f"{self.profile_base_url}/{id}"
|
||||
return self.__get_page(url)
|
||||
|
||||
def get_match(self, id: str) -> dict:
|
||||
url = f"{self.match_base_url}/{id}"
|
||||
return self.__get_page(url)
|
||||
|
||||
|
||||
0
sandbox/data-exploration/src/tools/__init__.py
Normal file
0
sandbox/data-exploration/src/tools/__init__.py
Normal file
60
sandbox/data-exploration/src/tools/recent_player_comp.py
Normal file
60
sandbox/data-exploration/src/tools/recent_player_comp.py
Normal file
@@ -0,0 +1,60 @@
|
||||
import click
|
||||
import pandas as pd
|
||||
from api import Leetify
|
||||
from tools.utils import playerStats_df, get_n_matches
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.option("--user", prompt="Your user id")
|
||||
@click.option("-n", prompt="number of games", type=int)
|
||||
@click.option(
|
||||
"--include-self",
|
||||
help="Includes self in overal stat averages",
|
||||
default=False,
|
||||
type=bool,
|
||||
)
|
||||
def comp_users(user, n, include_self):
|
||||
api = Leetify()
|
||||
cols_of_interest = [
|
||||
"preaim",
|
||||
"reactionTime",
|
||||
"accuracy",
|
||||
"accuracyEnemySpotted",
|
||||
"accuracyHead",
|
||||
"sprayAccuracy",
|
||||
"counterStrafingShotsGoodRatio",
|
||||
"hsp",
|
||||
"mvps",
|
||||
"totalKills",
|
||||
"kdRatio",
|
||||
]
|
||||
|
||||
profile = api.get_profile(user)
|
||||
|
||||
meta = profile.get("meta")
|
||||
if not meta:
|
||||
print("Missing user meta data(could be malformed response from api)")
|
||||
return
|
||||
|
||||
name = meta.get("name")
|
||||
print(f"{name}")
|
||||
|
||||
matches = get_n_matches(profile, n)
|
||||
|
||||
m_ids = [m.get("gameId") for m in matches]
|
||||
dfs = [playerStats_df(id) for id in m_ids]
|
||||
|
||||
df = pd.concat(dfs)
|
||||
players_of_interest_df = (
|
||||
df if include_self else df[df["leetifyUserId"] != meta["leetifyUserId"]]
|
||||
)
|
||||
stats_of_interest_df = players_of_interest_df[cols_of_interest]
|
||||
total_means = stats_of_interest_df.mean()
|
||||
my_means = df[df["leetifyUserId"] == meta["leetifyUserId"]][
|
||||
cols_of_interest
|
||||
].mean()
|
||||
print(my_means - total_means)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
comp_users()
|
||||
12
sandbox/data-exploration/src/tools/utils.py
Normal file
12
sandbox/data-exploration/src/tools/utils.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from api import Leetify
|
||||
import pandas as pd
|
||||
|
||||
def get_n_matches(profile, n):
|
||||
key_f = lambda match: match.get("gameFinishedAt")
|
||||
games = sorted(profile.get("games"), key=key_f, reverse=True)
|
||||
return games[:n]
|
||||
|
||||
def playerStats_df(id, api = Leetify()):
|
||||
m_details = api.get_match(id)
|
||||
pStats = m_details.get('playerStats')
|
||||
return pd.DataFrame(pStats)
|
||||
Reference in New Issue
Block a user