def create_data_js(self, train_data, n, directory): """ :param n: :return: """ train_data.sort("Date") self.train(train_data) top_n = self.top_n_players(n) lt = "" tc = 0 tours = [] data = {} r = self.player_rankings g = self.player_games elo = rs.Elo(self.params["mu"], self.params["K"]) edge = self.params["edge"] probabilities = [] bet_amount = [] for name in top_n: data[name] = {"rating": [{"return": 1500, "serve": 1500}], "name": name} for i, row in train_data.iterrows(): name1 = row["Winner"] name2 = row["Loser"] wsp1 = row["WSP1"] wsp2 = row["WSP2"] # If there is no data on serve win percentage, skip. if math.isnan(wsp1) or math.isnan(wsp2): probabilities.append(0.5) bet_amount.append(0) continue if not r.get(name1, False): r[name1] = [elo.create_rating(), elo.create_rating()] if not r.get(name2, False): r[name2] = [elo.create_rating(), elo.create_rating()] r[name1][0], r[name2][1] = elo.match(r[name1][0], r[name2][1], wsp1 - edge) r[name2][0], r[name1][1] = elo.match(r[name2][0], r[name1][1], wsp2 - edge) if (name1 in top_n or name2 in top_n) and row["Tournament"] != lt: lt = row["Tournament"] tc += 1 tours.append({"text": lt + " " + str(row["Date"]), "value": tc, "games": []}) for name in top_n: ser, ret = int(r[name][0].rating), int(r[name][1].rating) data[name]["rating"].append({"return": ret, "serve": ser}) if len(tours) and row["Tournament"] == lt: game = "%s | %s vs %s: %s." % (row["Round"], name1, name2, row["Score"]) tours[-1]["games"].append(game) self.player_rankings = r self.player_games = g alpha = 0.05 for key, value in data.iteritems(): points = len(value["rating"]) ret = np.array([float(x["return"]) for x in data[key]["rating"]]) ser = np.array([float(x["serve"]) for x in data[key]["rating"]]) ret = calc.smooth_time_series_exp(ret, alpha) ser = calc.smooth_time_series_exp(ser, alpha) new_rating = [{"return": r, "serve": s} for r, s in zip(ret, ser)] data[key]["rating"] = new_rating sez = sorted([value for key, value in data.iteritems()]) with open(directory, "w") as f: f.write("data = ") f.write(str(sez)) f.write("\n") f.write("n_points = ") f.write(str(points)) f.write("\n") f.write("tours = ") f.write(str(tours))
def create_data_js(self, train_data, n, directory): ''' :param n: :return: ''' train_data.sort("Date") self.train(train_data) top_n = self.top_n_players(n) lt = "" tc = 0 tours = [] data = {} r = self.player_rankings g = self.player_games elo = rs.Elo(self.params["mu"], self.params["K"]) edge = self.params["edge"] probabilities = [] bet_amount = [] for name in top_n: data[name] = { "rating": [{ "return": 1500, "serve": 1500 }], "name": name } for i, row in train_data.iterrows(): name1 = row["Winner"] name2 = row["Loser"] wsp1 = row["WSP1"] wsp2 = row["WSP2"] # If there is no data on serve win percentage, skip. if math.isnan(wsp1) or math.isnan(wsp2): probabilities.append(0.5) bet_amount.append(0) continue if not r.get(name1, False): r[name1] = [elo.create_rating(), elo.create_rating()] if not r.get(name2, False): r[name2] = [elo.create_rating(), elo.create_rating()] r[name1][0], r[name2][1] = elo.match(r[name1][0], r[name2][1], wsp1 - edge) r[name2][0], r[name1][1] = elo.match(r[name2][0], r[name1][1], wsp2 - edge) if (name1 in top_n or name2 in top_n) and row["Tournament"] != lt: lt = row["Tournament"] tc += 1 tours.append({ "text": lt + " " + str(row["Date"]), "value": tc, "games": [] }) for name in top_n: ser, ret = int(r[name][0].rating), int(r[name][1].rating) data[name]["rating"].append({"return": ret, "serve": ser}) if len(tours) and row["Tournament"] == lt: game = "%s | %s vs %s: %s." % (row["Round"], name1, name2, row["Score"]) tours[-1]["games"].append(game) self.player_rankings = r self.player_games = g alpha = 0.05 for key, value in data.iteritems(): points = len(value["rating"]) ret = np.array([float(x["return"]) for x in data[key]["rating"]]) ser = np.array([float(x["serve"]) for x in data[key]["rating"]]) ret = calc.smooth_time_series_exp(ret, alpha) ser = calc.smooth_time_series_exp(ser, alpha) new_rating = [{"return": r, "serve": s} for r, s in zip(ret, ser)] data[key]["rating"] = new_rating sez = sorted([value for key, value in data.iteritems()]) with open(directory, 'w') as f: f.write("data = ") f.write(str(sez)) f.write("\n") f.write("n_points = ") f.write(str(points)) f.write("\n") f.write("tours = ") f.write(str(tours))
def create_data_js(self, train_data, n, directory): ''' :param n: :return: ''' train_data.sort("Date") self.train(train_data) top_n = self.top_n_players(n) lt = "" tc = 0 tours = [] ranking = {} data = {} p = self.params glicko = Match(p["mu"], p["start_sigma"], p["end_sigma"], p["c"], p["Q"]) for name in top_n: ranking[name] = glicko.create_player(name) data[name] = {"rating": [{"return": 1500, "serve": 1500}], "name": name} for i, row in train_data.iterrows(): name1 = row["Winner"] name2 = row["Loser"] wsp1 = row["WSP1"] wsp2 = row["WSP2"] # If there is no data on serve win percentage, skip. if math.isnan(wsp1) or math.isnan(wsp2): continue if not ranking.get(name1, False): ranking[name1] = glicko.create_player(name1) if not ranking.get(name2, False): ranking[name2] = glicko.create_player(name2) r1, r2 = glicko.match(ranking[name1], ranking[name2], wsp1, wsp2) ranking[name1], ranking[name2] = r1, r2 if (name1 in top_n or name2 in top_n) and row["Tournament"] != lt: lt = row["Tournament"] tc += 1 tours.append({"text": lt + " " + str(row["Date"]), "value": tc, "games": []}) for name in top_n: r = ranking[name] ret, ser = int(r.mg_def.rating), int(r.mg_att.rating) data[name]["rating"].append({"return": ret, "serve": ser}) if len(tours) and row["Tournament"] == lt: game = "%s | %s vs %s: %s." % (row["Round"], name1, name2, row["Score"]) tours[-1]["games"].append(game) alpha = 0.05 for key, value in data.iteritems(): points = len(value["rating"]) ret = np.array([float(x["return"]) for x in data[key]["rating"]]) ser = np.array([float(x["serve"]) for x in data[key]["rating"]]) ret = calc.smooth_time_series_exp(ret, alpha) ser = calc.smooth_time_series_exp(ser, alpha) new_rating = [{"return": r, "serve": s} for r, s in zip(ret, ser)] data[key]["rating"] = new_rating sez = sorted([value for key, value in data.iteritems()]) with open(directory, 'w') as f: f.write("data = ") f.write(str(sez)) f.write("\n") f.write("n_points = ") f.write(str(points)) f.write("\n") f.write("tours = ") f.write(str(tours))