import pandas as pd from fuzzy import * def zapisz_do_csv(nazwa_pliku, dataframe): dataframe.to_csv(nazwa_pliku, mode='a', index=False, header=not pd.DataFrame().append(dataframe).empty) def podziel_na_partie(dataframe, rozmiar_partii): for i in range(0, len(dataframe), rozmiar_partii): yield dataframe.iloc[i:i + rozmiar_partii] def przetwarzaj_co_50_rekordow(plik_wejsciowy, plik_wyjsciowy): dataframe_wejsciowe = pd.read_csv(plik_wejsciowy) 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_form_5s", 'c_away_form_5s','c_home_diff_5s','c_away_diff_5s' , 'c_home_aggression_5m', 'c_away_aggression_5m', 'c_away_shots_5m','c_away_shots_5m', 'c_away_shots_5btw', 'c_away_shots_5btw', 'c_away_defence_5m', 'c_away_defence_5m', 'c_away_defence_5btw', 'c_away_defence_5btw', 'c_home_passing_5m', 'c_away_passing_5m', 'c_home_passing_5btw', 'c_away_passing_5btw', 'c_away_aggression_5btw', 'c_away_aggression_5btw' #'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, "_5m" 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, "_5btw" 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, "_s" 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 def calculateColumn(matches, team, column_name): result = 0 for index, row in matches.iterrows(): if team == row['home_team']: column = row[column_name] else: column = row[column_name] result = result + column if matches.shape[0] != 0: result_avg = result / matches.shape[0] else: result_avg = 0 return result_avg