add all series to graph
This commit is contained in:
parent
54096321f4
commit
a2b802a2b1
3 changed files with 563 additions and 2942 deletions
54
foo.py
54
foo.py
|
@ -5,19 +5,39 @@ from dataclasses import dataclass
|
|||
from math import floor
|
||||
from datetime import datetime
|
||||
|
||||
def _add_accumulated_score(df: pandas.DataFrame):
|
||||
acc_col = pandas.Series([0.0]).repeat(len(df)).reset_index(drop=True)
|
||||
|
||||
acc = 0.0
|
||||
for i, row in enumerate(df.itertuples()):
|
||||
acc += row.score
|
||||
acc_col[i] = acc
|
||||
|
||||
df['accumulated_score'] = acc_col
|
||||
|
||||
def load_score_log(path: str) -> pandas.DataFrame:
|
||||
return pandas.read_csv(path, sep=',',
|
||||
scores = pandas.read_csv(path, sep=',',
|
||||
dtype={'score': int, 'sourcename': str, 'name': str, 'mapx': int, 'mapy': int},
|
||||
parse_dates=['when'], date_format='%d/%m/%Y %H:%M')
|
||||
scores.sort_values('when', inplace=True)
|
||||
_add_accumulated_score(scores)
|
||||
return scores
|
||||
|
||||
def generate_station_stats(score_log: pandas.DataFrame) -> pandas.DataFrame:
|
||||
station_count = len(score_log['name'].unique())
|
||||
|
||||
# every station in the score log should have a first visit, so create summary based on that
|
||||
summary = score_log[score_log['sourcename'] == 'First Visit'][['name', 'mapx', 'mapy', 'when']]
|
||||
summary.rename(columns={'when': 'first_visit'}, inplace=True)
|
||||
|
||||
assert len(summary) == station_count
|
||||
|
||||
common_join_args = {'on':'name', 'how':'left', 'validate': '1:1'}
|
||||
|
||||
# add total score
|
||||
summary = pandas.merge(summary, score_log[['name', 'score']].groupby('name').sum(), on='name', validate='1:1')
|
||||
summary = pandas.merge(summary, score_log[['name', 'score']].groupby('name').sum(), **common_join_args)
|
||||
summary.rename(columns={'score': 'total_score'}, inplace=True)
|
||||
assert len(summary) == station_count
|
||||
|
||||
boosts = score_log[score_log['sourcename'] == 'Output Boost'][['name', 'score']].groupby('name')
|
||||
|
||||
|
@ -25,34 +45,40 @@ def generate_station_stats(score_log: pandas.DataFrame) -> pandas.DataFrame:
|
|||
total_boosts = boosts.sum()
|
||||
total_boosts['totalboostduration'] = total_boosts['score'].apply(lambda x: 10 * x)
|
||||
total_boosts.rename(columns={'score': 'totalboostscore'}, inplace=True)
|
||||
summary = pandas.merge(summary, total_boosts, on='name')
|
||||
summary = pandas.merge(summary, total_boosts, **common_join_args)
|
||||
assert len(summary) == station_count
|
||||
|
||||
# add max boosts
|
||||
max_boosts = boosts.max()
|
||||
max_boosts['maxboostduration'] = max_boosts['score'].apply(lambda x: 10 * x)
|
||||
max_boosts.rename(columns={'score': 'maxboostscore'}, inplace=True)
|
||||
summary = pandas.merge(summary, max_boosts, on='name')
|
||||
summary = pandas.merge(summary, max_boosts, **common_join_args)
|
||||
assert len(summary) == station_count
|
||||
|
||||
visits = score_log[(score_log['sourcename'] == 'Visit') | (score_log['sourcename'] == 'First Visit')][['name', 'score']].groupby('name')
|
||||
|
||||
# add total visits (count)
|
||||
summary = pandas.merge(summary, visits.count(), on='name', validate='1:1')
|
||||
summary = pandas.merge(summary, visits.count(), **common_join_args)
|
||||
summary.rename(columns={'score': 'totalvisits'}, inplace=True)
|
||||
assert len(summary) == station_count
|
||||
|
||||
captures = score_log[score_log['sourcename'] == 'Capture'][['name', 'score']].groupby('name')
|
||||
|
||||
# add captures (count)
|
||||
summary = pandas.merge(summary, captures.count(), on='name', validate='1:1')
|
||||
summary = pandas.merge(summary, captures.count(), **common_join_args)
|
||||
summary.rename(columns={'score': 'captures'}, inplace=True)
|
||||
assert len(summary) == station_count
|
||||
|
||||
# add max held duration (max capture score)
|
||||
summary = pandas.merge(summary, captures.max(), on='name', validate='1:1')
|
||||
summary = pandas.merge(summary, captures.max(), **common_join_args)
|
||||
summary.rename(columns={'score': 'maxheldduration'}, inplace=True)
|
||||
assert len(summary) == station_count
|
||||
|
||||
# add total held duration (sum capture score)
|
||||
summary = pandas.merge(summary, captures.sum(), on='name', validate='1:1')
|
||||
summary = pandas.merge(summary, captures.sum(), **common_join_args)
|
||||
summary.rename(columns={'score': 'totalheldduration'}, inplace=True)
|
||||
|
||||
assert len(summary) == station_count
|
||||
return summary
|
||||
|
||||
def generate_score_per_second(score_log: pandas.DataFrame) -> pandas.DataFrame:
|
||||
|
@ -89,15 +115,5 @@ def generate_score_per_second(score_log: pandas.DataFrame) -> pandas.DataFrame:
|
|||
scoreseconds.sort_values(by=['when'], inplace=True)
|
||||
scoreseconds.reset_index(drop=True, inplace=True)
|
||||
|
||||
acc_col = pandas.Series([0.0]).repeat(len(scoreseconds)).reset_index(drop=True)
|
||||
|
||||
acc = 0.0
|
||||
for i, row in enumerate(scoreseconds.itertuples()):
|
||||
acc += row.score
|
||||
acc_col[i] = acc
|
||||
|
||||
scoreseconds['accumulated_score'] = acc_col
|
||||
del acc
|
||||
del acc_col
|
||||
|
||||
_add_accumulated_score(scoreseconds)
|
||||
return scoreseconds
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue