@@ -227,7 +227,10 @@ def analyze_per_player_arena(data: list, N: int = 5) -> pd.DataFrame:
227227def analyze_per_player (data : list , N : int = 5 ) -> pd .DataFrame :
228228 df = analyze_per_player_arena (data , N = N )
229229 df = df [df ["total_files" ] > 0 ]
230- return df .groupby ("player" )["active_file_ratio" ].agg (["mean" , "std" ]).reset_index ()
230+ result = df .groupby ("player" )["active_file_ratio" ].agg (["mean" , "std" , "count" ]).reset_index ()
231+ # Calculate standard error of the mean (SEM)
232+ result ["sem" ] = result ["std" ] / (result ["count" ] ** 0.5 )
233+ return result
231234
232235
233236def calculate_root_clutter_ratio (file_history : dict ) -> dict :
@@ -263,7 +266,10 @@ def analyze_root_clutter_per_player(data: list) -> pd.DataFrame:
263266
264267 df = pd .DataFrame (results )
265268 df = df [df ["total_files" ] > 0 ]
266- return df .groupby ("player" )["root_clutter_ratio" ].agg (["mean" , "std" ]).reset_index ()
269+ result = df .groupby ("player" )["root_clutter_ratio" ].agg (["mean" , "std" , "count" ]).reset_index ()
270+ # Calculate standard error of the mean (SEM)
271+ result ["sem" ] = result ["std" ] / (result ["count" ] ** 0.5 )
272+ return result
267273
268274
269275def calculate_churn_concentration (file_history : dict , use_magnitude : bool = False ) -> dict :
@@ -324,7 +330,10 @@ def analyze_churn_concentration_per_player(data: list, use_magnitude: bool = Fal
324330
325331 df = pd .DataFrame (results )
326332 df = df [df ["total_churn" ] > 0 ]
327- return df .groupby ("player" )["churn_concentration" ].agg (["mean" , "std" ]).reset_index ()
333+ result = df .groupby ("player" )["churn_concentration" ].agg (["mean" , "std" , "count" ]).reset_index ()
334+ # Calculate standard error of the mean (SEM)
335+ result ["sem" ] = result ["std" ] / (result ["count" ] ** 0.5 )
336+ return result
328337
329338
330339def plot_organization_metrics (file_reuse_df : pd .DataFrame , root_clutter_df : pd .DataFrame ):
@@ -355,8 +364,8 @@ def plot_organization_metrics(file_reuse_df: pd.DataFrame, root_clutter_df: pd.D
355364 plt .errorbar (
356365 row ["mean_clutter" ],
357366 row ["mean_reuse" ],
358- xerr = row ["std_clutter " ],
359- yerr = row ["std_reuse " ],
367+ xerr = row ["sem_clutter " ],
368+ yerr = row ["sem_reuse " ],
360369 fmt = "none" ,
361370 ecolor = color ,
362371 elinewidth = 1.5 ,
@@ -472,7 +481,10 @@ def analyze_file_reuse_per_player(data: list) -> pd.DataFrame:
472481
473482 df = pd .DataFrame (results )
474483 df = df [df ["total_files_created" ] > 0 ]
475- return df .groupby ("player" )["file_reuse_ratio" ].agg (["mean" , "std" ]).reset_index ()
484+ result = df .groupby ("player" )["file_reuse_ratio" ].agg (["mean" , "std" , "count" ]).reset_index ()
485+ # Calculate standard error of the mean (SEM)
486+ result ["sem" ] = result ["std" ] / (result ["count" ] ** 0.5 )
487+ return result
476488
477489
478490def calculate_filename_redundancy (file_history : dict ) -> dict :
@@ -542,10 +554,10 @@ def calculate_redundancy_over_rounds(file_history: dict) -> list:
542554
543555def plot_filename_redundancy_over_rounds (redundancy_df : pd .DataFrame ):
544556 """Line plot showing filename redundancy over rounds per model.
545-
546- - X: Round number
547- - Y: Filename redundancy ratio (mean across tournaments)
548- - One line per model, colored consistently
557+ sc
558+ - X: Round number
559+ - Y: Filename redundancy ratio (mean across tournaments)
560+ - One line per model, colored consistently
549561 """
550562 # Aggregate by player and round (mean across all tournaments)
551563 agg_redundancy = (
0 commit comments