Herc commited on
Commit
2ef814a
·
1 Parent(s): 8b935d3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -0
app.py CHANGED
@@ -9,6 +9,70 @@ import random
9
  # [All the scheduling functions and analytics functions here]
10
 
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  # Team Workload Analysis
13
  def team_workload_analysis(schedule_df):
14
  """Generate a bar chart showing the number of matches each team has per week."""
 
9
  # [All the scheduling functions and analytics functions here]
10
 
11
 
12
+
13
+ # 1. create_schedule
14
+ def create_schedule(num_teams, num_conferences, num_inter_games):
15
+ full_schedule = []
16
+ for i in range(num_conferences):
17
+ conference_name = chr(65 + i) # 'A', 'B', 'C', 'D', ...
18
+ combined_schedule = combine_schedules(conference_name, num_teams, num_inter_games)
19
+ assigned_dates = assign_dates_to_matches(combined_schedule)
20
+ full_schedule.extend(assigned_dates)
21
+ return pd.DataFrame(full_schedule, columns=["Team 1", "Team 2", "Date"])
22
+
23
+ # 2. combine_schedules
24
+ def combine_schedules(conference_name, num_teams, num_inter_games):
25
+ intra_conf_matches = generate_intra_conference_schedule(conference_name, num_teams)
26
+ inter_conf_matches = generate_inter_conference_schedule(conference_name, num_teams, num_inter_games)
27
+ return intra_conf_matches + inter_conf_matches
28
+
29
+ # 3. generate_intra_conference_schedule
30
+ def generate_intra_conference_schedule(conference_name, num_teams):
31
+ teams = [f"{conference_name}{i}" for i in range(1, num_teams + 1)]
32
+ matches = []
33
+ for i in range(len(teams)):
34
+ for j in range(i+1, len(teams)):
35
+ matches.append((teams[i], teams[j]))
36
+ matches.append((teams[j], teams[i])) # Home and away
37
+ return matches
38
+
39
+ # 4. generate_inter_conference_schedule
40
+ def generate_inter_conference_schedule(conference_name, num_teams, num_inter_games):
41
+ current_conf_teams = [f"{conference_name}{i}" for i in range(1, num_teams + 1)]
42
+ other_confs = [chr(65 + i) for i in range(4) if chr(65 + i) != conference_name]
43
+ other_conf_teams = [f"{conf}{i}" for conf in other_confs for i in range(1, num_teams + 1)]
44
+ matches = []
45
+ for team in current_conf_teams:
46
+ opponents = random.sample(other_conf_teams, num_inter_games)
47
+ for opp in opponents:
48
+ matches.append((team, opp))
49
+ return matches
50
+
51
+ # 5. assign_dates_to_matches
52
+ def assign_dates_to_matches(matches):
53
+ start_date = date(2022, 11, 6)
54
+ end_date = date(2023, 3, 1)
55
+ available_dates = [start_date + timedelta(days=i) for i in range((end_date - start_date).days) if (start_date + timedelta(days=i)).weekday() in [0, 2, 3, 5]]
56
+ random.shuffle(available_dates)
57
+ return [(match[0], match[1], available_dates[i]) for i, match in enumerate(matches)]
58
+
59
+ # 6. generate_mock_historical_data
60
+ def generate_mock_historical_data(num_teams, num_conferences, num_inter_games, start_date, end_date):
61
+ full_schedule = []
62
+ for i in range(num_conferences):
63
+ conference_name = chr(65 + i)
64
+ combined_schedule = combine_schedules(conference_name, num_teams, num_inter_games)
65
+ shuffled_dates = assign_dates_to_matches(combined_schedule)
66
+ random.shuffle(shuffled_dates)
67
+ for match in shuffled_dates:
68
+ full_schedule.append({
69
+ "Team 1": match[0],
70
+ "Team 2": match[1],
71
+ "Date": match[2]
72
+ })
73
+ return pd.DataFrame(full_schedule)
74
+
75
+
76
  # Team Workload Analysis
77
  def team_workload_analysis(schedule_df):
78
  """Generate a bar chart showing the number of matches each team has per week."""