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 math import floor
 | 
				
			||||||
from datetime import datetime
 | 
					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:
 | 
					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},
 | 
					                           dtype={'score': int, 'sourcename': str, 'name': str, 'mapx': int, 'mapy': int},
 | 
				
			||||||
                           parse_dates=['when'], date_format='%d/%m/%Y %H:%M')
 | 
					                           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:
 | 
					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
 | 
					    # 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 = score_log[score_log['sourcename'] == 'First Visit'][['name', 'mapx', 'mapy', 'when']]
 | 
				
			||||||
    summary.rename(columns={'when': 'first_visit'}, inplace=True)
 | 
					    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
 | 
					    # 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)
 | 
					    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')
 | 
					    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 = boosts.sum()
 | 
				
			||||||
    total_boosts['totalboostduration'] = total_boosts['score'].apply(lambda x: 10 * x)
 | 
					    total_boosts['totalboostduration'] = total_boosts['score'].apply(lambda x: 10 * x)
 | 
				
			||||||
    total_boosts.rename(columns={'score': 'totalboostscore'}, inplace=True)
 | 
					    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
 | 
					    # add max boosts
 | 
				
			||||||
    max_boosts = boosts.max()
 | 
					    max_boosts = boosts.max()
 | 
				
			||||||
    max_boosts['maxboostduration'] = max_boosts['score'].apply(lambda x: 10 * x)
 | 
					    max_boosts['maxboostduration'] = max_boosts['score'].apply(lambda x: 10 * x)
 | 
				
			||||||
    max_boosts.rename(columns={'score': 'maxboostscore'}, inplace=True)
 | 
					    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')
 | 
					    visits = score_log[(score_log['sourcename'] == 'Visit') | (score_log['sourcename'] == 'First Visit')][['name', 'score']].groupby('name')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # add total visits (count)
 | 
					    # 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)
 | 
					    summary.rename(columns={'score': 'totalvisits'}, inplace=True)
 | 
				
			||||||
 | 
					    assert len(summary) == station_count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    captures = score_log[score_log['sourcename'] == 'Capture'][['name', 'score']].groupby('name')
 | 
					    captures = score_log[score_log['sourcename'] == 'Capture'][['name', 'score']].groupby('name')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # add captures (count)
 | 
					    # 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)
 | 
					    summary.rename(columns={'score': 'captures'}, inplace=True)
 | 
				
			||||||
 | 
					    assert len(summary) == station_count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # add max held duration (max capture score)
 | 
					    # 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)
 | 
					    summary.rename(columns={'score': 'maxheldduration'}, inplace=True)
 | 
				
			||||||
 | 
					    assert len(summary) == station_count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # add total held duration (sum capture score)
 | 
					    # 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)
 | 
					    summary.rename(columns={'score': 'totalheldduration'}, inplace=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert len(summary) == station_count
 | 
				
			||||||
    return summary
 | 
					    return summary
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def generate_score_per_second(score_log: pandas.DataFrame) -> pandas.DataFrame:
 | 
					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.sort_values(by=['when'], inplace=True)
 | 
				
			||||||
    scoreseconds.reset_index(drop=True, inplace=True)
 | 
					    scoreseconds.reset_index(drop=True, inplace=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    acc_col = pandas.Series([0.0]).repeat(len(scoreseconds)).reset_index(drop=True)
 | 
					    _add_accumulated_score(scoreseconds)
 | 
				
			||||||
 | 
					 | 
				
			||||||
    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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return 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