ThorkildFregi's picture
Update main.py
81d9459 verified
from flask import Flask, render_template, redirect, url_for, request, send_from_directory
from vct_data import create_data
from model import create_model
import pandas as pd
import pickle
import os
app = Flask(__name__)
@app.route('/')
def home():
if "data.csv" not in os.listdir():
return redirect(url_for("loading_update_data"))
elif "model.sav" not in os.listdir():
return redirect(url_for("loading_train_model"))
else:
df = pd.read_csv("data.csv")
tournaments_df = df["Tournament"]
tournaments = list(pd.unique(tournaments_df))
maps_df = df["Map"]
maps = list(pd.unique(maps_df))
team_A_df = df["Team A"]
team_A = list(pd.unique(team_A_df))
team_B_df = df["Team B"]
team_B = list(pd.unique(team_B_df))
agents = ["Astra", "Breach", "Brimstone", "Chamber", "Clove", "Cypher", "Deadlock", "Fade", "Gekko", "Harbor", "Iso", "Jett", "Kayo", "Killjoy", "Neon", "Omen", "Phoenix", "Raze", "Reyna", "Sage", "Skye", "Sova", "Viper", "Yoru"]
return render_template("home.html", tournaments=tournaments, maps=maps, team_A=team_A, team_B=team_B, agents=agents)
@app.route('/update-data')
def update_data():
create_data()
return redirect(url_for("loading_train_model"))
@app.route('/loading-update-data')
def loading_update_data():
return render_template("loading.html", next_page="update_data", loading_mission="Updating data...")
@app.route('/train-model')
def train_model():
create_model()
return redirect(url_for("home"))
@app.route('/loading-train-model')
def loading_train_model():
return render_template("loading.html", next_page="train_model", loading_mission="Training model...")
@app.route('/prediction', methods=["post", "get"])
def prediction():
if request.method == "POST":
tournament = request.form["tournament"]
map = request.form["map"]
team_a = request.form["team_a"]
team_b = request.form["team_b"]
ta_agents_list = sorted(request.form["ta_agents"].split())
tb_agents_list = sorted(request.form["tb_agents"].split())
i = 0
ta_agents = "["
for agents in ta_agents_list:
if i == 4:
ta_agents += agents + "]"
else:
ta_agents += agents + ", "
i = 0
tb_agents = "["
for agents in tb_agents_list:
if i == 4:
tb_agents += agents + "]"
else:
tb_agents += agents + ", "
train_data = pd.read_csv("data.csv")
model = pickle.load(open("model.sav", 'rb'))
features = ["Tournament", "Map", "Team A", "Team B", "TA Agents", "TB Agents"]
x = pd.get_dummies(train_data[features])
data_test = {"Tournament": [tournament], "Map": [map], "Team A": [team_a], "Team B": [team_b], "TA Agents": [ta_agents], "TB Agents": [tb_agents]}
test_data = pd.DataFrame(data=data_test)
x_test = pd.get_dummies(test_data[features])
col_x_test = []
for column in x_test:
col_x_test.append(column)
for column in x:
if column in col_x_test:
pass
else:
x_test.insert(0, column, [False])
x_test = x_test.reindex(x.columns, axis=1)
prediction = model.predict(x_test)[0]
return render_template("result.html", prediction=prediction)
else:
return redirect(url_for("home"))
@app.route('/uploads/model.sav')
def download_model():
path = os.path.dirname(__file__)
return send_from_directory(path, "model.sav")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860, debug=True)