exploring stat comparision

This commit is contained in:
Andrei Stoica 2024-01-24 15:24:13 -05:00
parent 266b354513
commit d5899d3a75
6 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,6 @@
[project]
name = "leetify-data-exploration"
version = "0.0.1"
dependencies = [
"click"
]

View File

@ -0,0 +1 @@
from .core import *

View 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)

View 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()

View 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)