def boxing(request): if request.method == 'GET': form = PredictBoutURL(request.GET or None) if form.is_valid(): try: date = form['date'].value() title_fight = form['title_fight'].value() venue = form['venue'].value() division = form['division'].value() red_url = form['red_url'].value() blue_url = form['blue_url'].value() gender = form['gender'].value() red = dbr.get_boxer_profile(red_url) blue = dbr.get_boxer_profile(blue_url) red = dbr.clean(red, date) blue = dbr.clean(blue, date) df = pd.DataFrame( { 'date': date, 'blue': blue['name'].iloc[0], 'red': red['name'].iloc[0], 'red_br_id': int(red['br_id'].iloc[0]), 'blue_br_id': blue['br_id'].iloc[0], 'title_fight': title_fight, 'venue': venue, 'red_born': red['born'].dt.strftime(date_format='%Y-%m-%d'), 'red_debut': red['debut'].dt.strftime(date_format='%Y-%m-%d'), 'red_division': division, 'red_height': red['height'].iloc[0], 'red_nationality': red['nationality'].iloc[0], 'red_reach': red['reach'].iloc[0], 'red_stance': red['stance'].iloc[0], 'blue_born': blue['born'].dt.strftime(date_format='%Y-%m-%d'), 'blue_debut': blue['debut'].dt.strftime(date_format='%Y-%m-%d'), 'blue_division': division, 'blue_height': blue['height'].iloc[0], 'blue_nationality': blue['nationality'].iloc[0], 'blue_reach': blue['reach'].iloc[0], 'sex': gender, 'blue_stance': blue['stance'].iloc[0], 'red_age': red['age'].iloc[0], 'blue_age': blue['age'].iloc[0], 'red_age_at_fight_time': red['age_at_fight_time'].iloc[0], 'red_years_active': red['years_active'].iloc[0], 'blue_age_at_fight_time': blue['age_at_fight_time'].iloc[0], 'blue_years_active': blue['years_active'].iloc[0] }, index=[0]) xgb = XGBClassifier() loaded_model = xgb.load(model_filename) loaded_encoder = pickle.load(open(encoder_filename, 'rb')) df_encoded = loaded_encoder.transform(df) print(df.T) print(df_encoded.T) prediction = loaded_model.predict_proba(df_encoded) draw_proba = prediction[0][0] * 100 loss_proba = prediction[0][1] * 100 win_proba = prediction[0][2] * 100 winner = None loser = None if win_proba > loss_proba: winner = red loser = blue print(winner + "in the red corner") elif loss_proba > win_proba: winner = blue loser = red print(winner + "in the blue corner") elif draw_proba > (win_proba + loss_proba): winner = 'draw' else: winner = 'close' context = { 'draw_proba': "{:.2f}".format(draw_proba), 'win_proba': "{:.2f}".format(win_proba), 'loss_proba': "{:.2f}".format(loss_proba), 'blue': blue, 'red': red, 'date': date, 'venue': venue, 'title_fight': title_fight, 'winner': winner, 'loser': loser } return render(request, 'boxing/prediction_results.html', context) except Exception as ex: print(ex) return redirect('boxing_long_form') else: form = PredictBoutURL() return render(request, 'boxing/boxing.html', {'form': form})