def set_pract_high_z_score_attr(handler_input, player_obj: object) -> None: """Sets attributes for high z-score practice.""" attr = handler_input.attributes_manager.session_attributes CP_Attr.set_tbl_mean_err_list_attr(handler_input, player_obj) tbl_list_mean_errs = attr['tbl_list_mean_errs'] tbl_means_only = [val[1] for val in tbl_list_mean_errs] total_err_mean = mean(tbl_means_only) total_err_stdev = stdev(tbl_means_only, xbar= total_err_mean) practice_tables = [] for i in range(3): table, mean_err = tbl_list_mean_errs[i] tbl_z_score = calc_z_score( data_point= mean_err, data_mean= total_err_mean, data_stdev= total_err_stdev, ) if tbl_z_score > custom_practice.data.HIGH_Z_SCORE_ERR: practice_tables.append( table) attr['times_tables'] = practice_tables return None
def get_top_z_score_err_tables(handler_input) -> list: """Returns list of the top 3 z-score error tables.""" attr = handler_input.attributes_manager.session_attributes tbl_list_mean_errs = attr['tbl_list_mean_errs'] tbl_means = [ num[1] for num in tbl_list_mean_errs] tables_to_practice = [] tbl_mean_err = mean(tbl_means) tbl_mean_stdev = stdev(tbl_means, xbar = tbl_mean_err) for i in range(3): table, table_err = tbl_list_mean_errs[i] tbl_z_score = calc_z_score( data_point = table_err, data_mean= tbl_mean_err, data_stdev= tbl_mean_stdev, ) if tbl_z_score > custom_practice.data.HIGH_Z_SCORE_ERR: tables_to_practice.append( table ) tables_to_practice.sort() logger.debug( tbl_list_mean_errs) logger.debug( tables_to_practice) return tables_to_practice
def get_higher_table_difficulty( handler_input, player_obj: object = None, tables: tuple = None, answered_tables: list = None ) -> float: """Returns z_score for the table with the highest difficulty. Difficulty is a constructed measure dependent on greatness of tables, e.g., 6 > 5.""" if not player_obj: player_obj = PlayerDict.load_player_obj(handler_input) if tables is None: tables = QuestionAttr.get_question_tables(handler_input, integers=True) if answered_tables is None: answered_tables = player_obj.get_answered_tables(integers = True) inflated_mean_table = mean(answered_tables) + 1 higher_table = max( [int(table) for table in tables]) z_score = calc_z_score( data_point= higher_table, data_mean = inflated_mean_table, data= answered_tables, required_data_length= stats.data.SUF_ANSWERED_TABLES ) return z_score
def get_sm_z_score(handler_input, sm_score: int, player_obj: object = None) -> bool: """Returns z_score for the Survival mode score.""" if not player_obj: player_obj = PlayerDict.load_player_obj(handler_input) sm_average_records = [int(num) for num in player_obj._sm_average_records] z_score = calc_z_score( data_point= sm_score, data = sm_average_records ) return z_score
def get_sc_performance_z_score(player_obj: object, sc_difficulty: str, sc_score_time: int) -> float: """Returns z_score for the user's relative performance in speed challenge.""" sc_average_records = player_obj.get_sc_average_records(sc_difficulty) if len(sc_average_records) < 2: return 0 z_score = calc_z_score( data_point=sc_score_time, data=sc_average_records, ) z_score *= -1 # inversed for time records. logger.debug(z_score) return z_score
def check_high_err_z_score(handler_input) -> bool: """Returns if high error z-score table is present. NOTE: Should probably save tbl error means list as session attr.""" attr = handler_input.attributes_manager.session_attributes tbl_list_mean_errs = attr['tbl_list_mean_errs'] tbl_means_only = [val[1] for val in tbl_list_mean_errs] total_err_mean = mean(tbl_means_only) total_err_stdev = stdev(tbl_means_only, xbar= total_err_mean) total_err_stdev = total_err_stdev if total_err_stdev else 1 first_z_score = calc_z_score( data_point = tbl_list_mean_errs[0][1], data_mean = total_err_mean, data_stdev = total_err_stdev, ) if first_z_score > custom_practice.data.HIGH_Z_SCORE_ERR: return True return False
def get_higher_table_error_freq( handler_input, player_obj: object = None, tables: tuple = None ) -> float: """Returns z_score for the highest error tables.""" if not player_obj: player_obj = PlayerDict.load_player_obj(handler_input) if tables is None: tables = QuestionAttr.get_question_tables(handler_input, integers=False) times_tables_info = player_obj.get_times_table_info() times_tables_mean_err_list = [] for table in times_tables_info.keys(): table_mean = float(times_tables_info[table]['mean']) table_data = times_tables_info[table]['table_data'] if len(table_data) > stats.data.SUF_TABLE_DATA: times_tables_mean_err_list.append(1 - table_mean) # inversed, so errors are higher. ## Exit if not enough data. if len(times_tables_mean_err_list) <= stats.data.SUF_ERR_LIST: return 0 question_tables_err = [] for table in tables: table = str(table) table_info = float( times_tables_info[table]['mean']) table_info = (1 - table_info) # inverse mean. question_tables_err.append( table_info) max_table_err = max(question_tables_err) z_score = calc_z_score( data_point= max_table_err, data= times_tables_mean_err_list, ) return ( z_score)