from os import environ
import atoti as tt
config = "mybinder-config.yml" if "JUPYTERHUB_SERVICE_PREFIX" in environ else "local-config.yml"
session = tt.create_session("Geoguessr", config=config)
print(session.url)
scores = session.read_csv("data/scores.csv", keys=["GameId", "Round", "Player"])
games = session.read_csv("data/games.csv", keys=["GameId"])
rounds = session.read_csv("data/rounds.csv", keys=["GameId", "Round"])
continents = session.read_csv("data/continents.csv", keys=["Country"], sep=",")
scores.join(games, mapping={"GameId": "GameId"})
scores.join(rounds, mapping={"GameId": "GameId", "Round": "Round"})
rounds.join(continents, mapping={"Country": "Country"})
session.stores.schema
cube = session.create_cube(scores)
m, lvl, h = cube.measures, cube.levels, cube.hierarchies
h["Games"] = [scores["GameId"], scores["Round"]]
h["Round Number"] = { "Round Number": scores["Round"]}
del h["GameId"]
del h["Round"]
h["Round Number"] = { "Round Number": scores["Round"]}
h["Geography"] = [continents["Continent"], rounds["Country"]]
del h["Continent"]
del h["Country"]
h["Geography"].dimension = "Geography"
h
m["score"] = tt.agg.mean(
tt.agg.sum(scores["Score"]),
scope=tt.scope.origin(lvl["Player"], lvl["GameId"])
)
m["score"].formatter = "DOUBLE[#,###]"
m["avg score"] = tt.agg.mean(scores["Score"])
session.visualize()
session.visualize("Average Score per country")
session.visualize("Average Score per continent")
m["one"] = 1
m["Number of rounds"] = tt.agg.sum(m["one"], scope=tt.scope.origin(lvl["Round"]))
session.visualize("Most seen countries")
session.visualize("Most seen continent")
m["find country rate"] = tt.filter(m["contributors.COUNT"], lvl["HasCountry"] == True) / m["contributors.COUNT"]
m["find country rate"].formatter = "DOUBLE[0.00%]"
session.visualize("Find country rate per user")
m["Best score"] = tt.agg.max(m["score"], scope=tt.scope.origin(lvl["GameId"], lvl["Player"]))
m["Worst score"] = tt.agg.min(m["score"], scope=tt.scope.origin(lvl["GameId"], lvl["Player"]))
cube.query(m["Best score"], levels=lvl["Player"])
m["Winner"] = tt.where(
lvl["GameId"] != None,
tt.agg.max_member(m["score"], lvl["Player"])
)