def create_1d_stats(run_data): """ Create count and revenue stats per attribute value from a data dictionary :param run_data: [{context: context_dict, action: action_dict, result: result_dict}] :return: {context_key/action_key: {context_value/action_value: {count: int, revenue: int, rate: int}}} """ stats = dict() means = dict() total = dict(count=0, revenue=0, rate=0) count = 0 for record in run_data: success = record["result"]["effect"]["Success"] price = record["action"]["price"] info = dict(record["context"]["context"], **record["action"]) for k, v in info.items(): create_key(stats, k, dict()) create_key(stats[k], v, dict()) stats[k][v]["count"] = stats[k][v].get("count", 0) + 1 stats[k][v]["revenue"] = stats[k][v].get("revenue", 0) + success * price stats[k][v]["rate"] = stats[k][v]["revenue"] / stats[k][v]["count"] total["count"] += stats[k][v]["count"] total["revenue"] += stats[k][v]["revenue"] total["rate"] += stats[k][v]["rate"] count += 1 for stat in total.keys(): means[stat] = total[stat] / count return stats, means
def create_2d_stats(run_data): """ Create stats from a data dictionary :param run_data: [{context: context_dict, action: action_dict, result: result_dict}] """ stats = dict() for record in run_data: success = record["result"]["effect"]["Success"] price = record["action"]["price"] for ck, cv in record["context"]["context"].items(): for ak, av in record["action"].items(): create_key(stats, ck, dict()) create_key(stats[ck], ak, dict()) create_key(stats[ck][ak], cv, dict()) create_key(stats[ck][ak][cv], av, dict()) stats[ck][ak][cv][av]["count"] = stats[ck][ak][cv][av].get("count", 0) + 1 stats[ck][ak][cv][av]["revenue"] = stats[ck][ak][cv][av].get("revenue", 0) + success * price stats[ck][ak][cv][av]["rate"] = stats[ck][ak][cv][av]["revenue"] / stats[ck][ak][cv][av]["count"] return stats
def create_2d_stats(run_data): """ Create stats from a data dictionary :param run_data: [{context: context_dict, action: action_dict, result: result_dict}] """ stats = dict() for record in run_data: success = record["result"]["effect"]["Success"] price = record["action"]["price"] for ck, cv in record["context"]["context"].items(): for ak, av in record["action"].items(): create_key(stats, ck, dict()) create_key(stats[ck], ak, dict()) create_key(stats[ck][ak], cv, dict()) create_key(stats[ck][ak][cv], av, dict()) stats[ck][ak][cv][av]["count"] = stats[ck][ak][cv][av].get( "count", 0) + 1 stats[ck][ak][cv][av]["revenue"] = stats[ck][ak][cv][av].get( "revenue", 0) + success * price stats[ck][ak][cv][av]["rate"] = stats[ck][ak][cv][av][ "revenue"] / stats[ck][ak][cv][av]["count"] return stats