From f8a9580699548feecab4ffae35bab25fd38db245 Mon Sep 17 00:00:00 2001 From: s460941 Date: Tue, 16 Jun 2020 14:15:16 +0200 Subject: [PATCH] v5 --- .idea/workspace.xml | 36 ++---- main.py | 260 +++++++++++++++++++++++++------------------- worker.fcl | 6 +- 3 files changed, 156 insertions(+), 146 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 964f33f..df67756 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -3,7 +3,6 @@ - - - - - file://$PROJECT_DIR$/main.py - 119 - - - file://$PROJECT_DIR$/main.py - 120 - - - file://$PROJECT_DIR$/main.py - 121 - - - diff --git a/main.py b/main.py index 9a2a9eb..4091879 100644 --- a/main.py +++ b/main.py @@ -2,131 +2,163 @@ from fcl_parser import FCLParser import skfuzzy.control as ctrl import pandas as pd -s1 = '2018/2019' -s2 = '2019/2020' -teams = pd.read_csv('teams_list.csv') -matches = pd.read_csv('matches_list.csv') -not_in_df = ['Podbeskidzie'] -matches_input = [] -for i in range(0,matches.shape[0]): - team1 = matches['Team1'][i][:-1] - team2 = matches['Team2'][i][1:-1] - gameweek = matches['Gameweek'][i] - season = matches['Season'][i] +def test(): + s1 = '2018/2019' + s2 = '2019/2020' + teams = pd.read_csv('teams_list.csv') + matches = pd.read_csv('matches_list.csv') - points2017 = { - "Legia Warszawa": 70, - "Jagiellonia Białystok": 67, - "Lech Poznań": 60, - "Górnik Zabrze": 60, - "Wisła Płock": 57, - "Wisła Kraków": 55, - "Zagłębie Lubin": 52, - "Korona Kielce": 49, - "Cracovia Kraków": 50, - "Śląsk Wrocław": 50, - "Pogoń Szczecin": 45, - "Arka Gdynia": 43, - "Lechia Gdańsk": 39, - "Piast Gliwice": 37, - "Miedź Legnica": 35, - "Zagłębie Sosnowiec": 35, - } + not_in_df = ['Podbeskidzie'] + matches_input = [] + for i in range(0,matches.shape[0]): + team1 = matches['Team1'][i][:-1] + team2 = matches['Team2'][i][1:-1] + gameweek = matches['Gameweek'][i] + season = matches['Season'][i] + + points2017 = { + "Legia Warszawa": 70, + "Jagiellonia Białystok": 67, + "Lech Poznań": 60, + "Górnik Zabrze": 60, + "Wisła Płock": 57, + "Wisła Kraków": 55, + "Zagłębie Lubin": 52, + "Korona Kielce": 49, + "Cracovia Kraków": 50, + "Śląsk Wrocław": 50, + "Pogoń Szczecin": 45, + "Arka Gdynia": 43, + "Lechia Gdańsk": 39, + "Piast Gliwice": 37, + "Miedź Legnica": 35, + "Zagłębie Sosnowiec": 35, + } - if((team1 not in not_in_df) and (team2 not in not_in_df)): - try: - - form_1 = teams.loc[(teams['Team'] == team1) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].Form.values[0] - temp_1 = teams.loc[(teams['Team'] == team1) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].Points.values[0] - xGform_1 = teams.loc[(teams['Team'] == team1) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].xGform.values[0] - - form_2 = teams.loc[(teams['Team'] == team2) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].Form.values[0] - temp_2 = teams.loc[(teams['Team'] == team2) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].Points.values[0] - xGform_2 = teams.loc[(teams['Team'] == team2) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].xGform.values[0] - - except: - print(team1 + team2 + str(gameweek)) - - if ((gameweek < 7) & (season==s1)): + if((team1 not in not_in_df) and (team2 not in not_in_df)): try: - t1 = points2017[team1] - except: - t1 = 35 - try: - t2 = points2017[team2] - except: - t2 = 35 - points = t1 - t2 - elif ((gameweek < 7) & (season==s2)): - try: - t1 = teams.loc[(teams['Team'] == team1) & (teams['Gameweek'] == 37) & (teams['Season'] == s1)].Points.values[0] - except: - t1 = 35 - try: - t2 = teams.loc[(teams['Team'] == team2) & (teams['Gameweek'] == 37) & (teams['Season'] == s1)].Points.values[0] - except: - t2 = 35 - points = t1 - t2 - else: - points = temp_1 - temp_2 - #0.365234375 + form_1 = teams.loc[(teams['Team'] == team1) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].Form.values[0] + temp_1 = teams.loc[(teams['Team'] == team1) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].Points.values[0] + xGform_1 = teams.loc[(teams['Team'] == team1) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].xGform.values[0] - temp = teams.loc[ (teams['Team'] == team1) & (teams['Gameweek'] == gameweek)].Result.values[0] - ground_truth = 0 - if(temp == 'W'): - ground_truth = -1 - elif(temp == 'D'): + form_2 = teams.loc[(teams['Team'] == team2) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].Form.values[0] + temp_2 = teams.loc[(teams['Team'] == team2) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].Points.values[0] + xGform_2 = teams.loc[(teams['Team'] == team2) & (teams['Gameweek'] == gameweek) & (teams['Season'] == season)].xGform.values[0] + + except: + print(team1 + team2 + str(gameweek)) + + if ((gameweek < 7) & (season==s1)): + try: + t1 = points2017[team1] + except: + t1 = 35 + try: + t2 = points2017[team2] + except: + t2 = 35 + points = t1 - t2 + + elif ((gameweek < 7) & (season==s2)): + try: + t1 = teams.loc[(teams['Team'] == team1) & (teams['Gameweek'] == 37) & (teams['Season'] == s1)].Points.values[0] + except: + t1 = 35 + try: + t2 = teams.loc[(teams['Team'] == team2) & (teams['Gameweek'] == 37) & (teams['Season'] == s1)].Points.values[0] + except: + t2 = 35 + points = t1 - t2 + else: + points = temp_1 - temp_2 + #0.365234375 + + temp = teams.loc[ (teams['Team'] == team1) & (teams['Gameweek'] == gameweek)].Result.values[0] ground_truth = 0 + if(temp == 'W'): + ground_truth = -1 + elif(temp == 'D'): + ground_truth = 0 + else: + ground_truth = 1 + matches_input.append([form_1, form_2, points, xGform_1, xGform_2, ground_truth]) + + p = FCLParser() # Create the parser + p.read_fcl_file('C:\Studia\LSR-master\lsr\worker.fcl') + + cs1 = ctrl.ControlSystem(p.rules) + module = ctrl.ControlSystemSimulation(cs1) + predictions = [] + for i in range(0,matches.shape[0]): + module.input['form1'] = matches_input[i][0] + module.input['form2'] = matches_input[i][1] + module.input['points'] = matches_input[i][2] + module.input['xGform1'] = matches_input[i][3] + module.input['xGform2'] = matches_input[i][4] + module.compute() + x = module.output['result'] + x = float("{:.4f}".format(x)) + + #y = int(round(x)) + if x > 0.1: + y = 1 + elif x < -0.1: + y = -1 else: - ground_truth = 1 - matches_input.append([form_1, form_2, points, xGform_1, xGform_2, ground_truth]) + y = 0 + predictions.append(y) + print("|FCL: " +str(x) + "|ROUND: " + str(y) + "|GROUND: " + str(matches_input[i][5]) + "|PKT DIFFERENCE: " + str(matches_input[i][2])+'|') -p = FCLParser() # Create the parser -p.read_fcl_file('worker.fcl') + num = 0 + cor = 0 + home_count = 0 + draw_count = 0 + away_count = 0 -cs1 = ctrl.ControlSystem(p.rules) -module = ctrl.ControlSystemSimulation(cs1) -predictions = [] -for i in range(0,matches.shape[0]): - module.input['form1'] = matches_input[i][0] - module.input['form2'] = matches_input[i][1] - module.input['points'] = matches_input[i][2] - module.input['xGform1'] = matches_input[i][3] - module.input['xGform2'] = matches_input[i][4] - module.compute() - x = module.output['result'] - x = float("{:.4f}".format(x)) + for i in range(0,matches.shape[0]): + if (matches_input[i][5] == -1): home_count+=1 + if (matches_input[i][5] == 0): draw_count += 1 + if (matches_input[i][5] == 1): away_count += 1 + if(predictions[i]==matches_input[i][5]): + cor+=1 + num+=1 + else: + num+=1 + from collections import Counter + print("Predictions: " + str(Counter(predictions).keys())) + print("Predictions: " + str(Counter(predictions).values())) + print("GT: " + str(home_count) + " " + str(draw_count) + " " + str(away_count)) + print(float(cor/num)) - #y = int(round(x)) - if x > 0.1: - y = 1 - elif x < -0.1: - y = -1 - else: - y = 0 - predictions.append(y) - print("|FCL: " +str(x) + "|ROUND: " + str(y) + "|GROUND: " + str(matches_input[i][5]) + "|PKT DIFFERENCE: " + str(matches_input[i][2])+'|') +if __name__ == "__main__": + while True: + p = FCLParser() # Create the parser + p.read_fcl_file('C:\Studia\LSR-master\lsr\worker.fcl') -num = 0 -cor = 0 -home_count = 0 -draw_count = 0 -away_count = 0 + cs1 = ctrl.ControlSystem(p.rules) + module = ctrl.ControlSystemSimulation(cs1) + print("Wpisz 'test' albo dodaj wartości (po przecinku): forma1, forma2, punkty, xGforma1, xGforma2") + command = input() + if command == "test": + test() + else: + values = command.split(sep=',') + module.input['form1'] = float(values[0]) + module.input['form2'] = float(values[1]) + module.input['points'] = float(values[2]) + module.input['xGform1'] = float(values[3]) + module.input['xGform2'] = float(values[4]) + module.compute() + x = module.output['result'] + x = float("{:.4f}".format(x)) + print(x) + if x > 0.1: + print("Wygra drużyna 2") + elif x < -0.1: + print("Wygra drużyna 1") + else: + print("Będzie remis") -for i in range(0,matches.shape[0]): - if (matches_input[i][5] == -1): home_count+=1 - if (matches_input[i][5] == 0): draw_count += 1 - if (matches_input[i][5] == 1): away_count += 1 - if(predictions[i]==matches_input[i][5]): - cor+=1 - num+=1 - else: - num+=1 -from collections import Counter -print("Predictions: " + str(Counter(predictions).keys())) -print("Predictions: " + str(Counter(predictions).values())) -print("GT: " + str(home_count) + " " + str(draw_count) + " " + str(away_count)) -print(float(cor/num)) diff --git a/worker.fcl b/worker.fcl index 9774e17..532494b 100644 --- a/worker.fcl +++ b/worker.fcl @@ -60,8 +60,7 @@ RULEBLOCK ACCU : MAX; ACT : MIN; - // 0.365234375 - //tego nic nie daje + RULE 0 : if form1 is great and form2 is bad then result is home // rozbicie home RULE 3 : if form1 is great and form2 is avg and points is low then result is draw @@ -73,7 +72,7 @@ RULEBLOCK RULE 7 : if form1 is great and form2 is great and points is avg then result is home RULE 8 : if form1 is great and form2 is great and points is high then result is home - //rozbicie tego jednego home coś dało + //rozbicie home RULE 31 : if form1 is avg and form2 is bad and points is low then result is draw RULE 32 : if form1 is avg and form2 is bad and points is avg then result is home RULE 33 : if form1 is avg and form2 is bad and points is high then result is home @@ -92,7 +91,6 @@ RULEBLOCK RULE 62 : if form1 is bad and form2 is bad and points is avg then result is draw RULE 63 : if form1 is bad and form2 is bad and points is high then result is home - // to rozbicie nic nie daje RULE 66 : if form1 is bad and form2 is avg then result is away // rozbicie away RULE 67 : if form1 is bad and form2 is great and points is low then result is away