import pandas as pd from fuzzy import * def generateTrainingData(dataframe): columns = ['season','date','home_team','away_team','result_full','home_passes','away_passes', 'home_possession','away_possession','home_shots','away_shots'] return dataframe[columns] def generateFuzzyLogicData(dataframe): columns = ['season','date','home_team','away_team','result_full','c_home_form_5m','c_away_form_5m',#,'c_home_passes','c_away_passes', # 'c_home_possession','c_away_possession','c_home_shots','c_away_shots', 'c_home_diff_5m', 'c_away_diff_5m', 'c_home_aggression_5m', 'c_away_aggression_5m', 'c_home_aggression_season', 'c_away_aggression_season', 'c_home_form_season','c_away_form_season', 'c_home_diff_season', 'c_away_diff_season'] return dataframe[columns] def last5Matches(season, teamA, data, df): # Wybierz rekordy dla danej pary drużyn i sezonu subset = df[((df['season'] == season) & ((df['home_team'] == teamA) | (df['away_team'] == teamA)))] # Filtruj dane, aby zawierały te przed daną datą before_given_date = subset[pd.to_datetime(subset['date']) < pd.to_datetime(data)] # Posortuj wg daty w odwrotnej kolejności before_given_date = before_given_date.sort_values(by='date', ascending=False) # Wybierz 5 ostatnich przed daną datą last_before_date = before_given_date.head(5) return last_before_date def last5MatchesBtwTeams(teamA, teamB, data, df): subset = df[(((df['home_team'] == teamA) | (df['away_team'] == teamA)) & ((df['home_team'] == teamB) | (df['away_team'] == teamB)))] before_given_date = subset[pd.to_datetime(subset['date']) < pd.to_datetime(data)] before_given_date = before_given_date.sort_values(by='date', ascending=False) last_before_date = before_given_date.head(5) return last_before_date def seasonMatches(season, teamA, data, df): # Wybierz rekordy dla danej pary drużyn i sezonu subset = df[((df['season'] == season) & ((df['home_team'] == teamA) | (df['away_team'] == teamA)))] # Filtruj dane, aby zawierały te przed daną datą before_given_date = subset[pd.to_datetime(subset['date']) < pd.to_datetime(data)] # Posortuj wg daty w odwrotnej kolejności before_given_date = before_given_date.sort_values(by='date', ascending=False) return before_given_date def getResult(score,teamHome): x,y = score.split('-') x = int(x) y = int(y) if (x > y and teamHome == True) or (x < y and teamHome == False): return "win" elif x == y: return "draw" else: return "loss" def calculateAggression(matches, team): aggression = 0 for index, row in matches.iterrows(): if team == row['home_team']: yellow_cards = row['home_yellow_cards'] red_cards = row['home_red_cards'] else: yellow_cards = row['away_yellow_cards'] red_cards = row['away_red_cards'] aggression_result = calculateFuzzyAggression(yellow_cards, red_cards) #print(aggression_result['aggression']) aggression = aggression + aggression_result['aggression'] if matches.shape[0] != 0: aggression_avg = aggression / matches.shape[0] else: aggression_avg = 0 return aggression_avg def calculatePoints(matches, team): points = 0 for index, row in matches.iterrows(): if team == row['home_team']: teamHome = True else: teamHome = False x = getResult(row['result_full'], teamHome) #print(x) if x == "win": points = points + 3 elif x == "draw": points = points + 1 if matches.shape[0] != 0: points_avg = points / matches.shape[0] else: points_avg = 0 return points_avg def calculateGoalDifference(matches, team): goal_diff = 0 for index, row in matches.iterrows(): if team == row['home_team']: teamHome = True else: teamHome = False x,y = row['result_full'].split('-') x = int(x) y = int(y) if teamHome: goal_diff = goal_diff + (x-y) else: goal_diff = goal_diff + (y-x) return goal_diff