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
|
||||
|
|
2180
notebook.ipynb
2180
notebook.ipynb
File diff suppressed because one or more lines are too long
1271
notebook2.ipynb
1271
notebook2.ipynb
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue