Následující report slouží k vygenerování seznamu sportovců, kteří se zúčastnili více než 6 dnů soutěží v daném období od 1.11.2023 do 30.10.2024.

Kde soutěže jsou filtrovány podle kategorie.

Dále se počítá počet dnů soutěží pomocí pole DatumOd a DatumDo v matrice, kde u některých vícetermínových turnajů je nutno datum ručně změnit, protože Od a Do jsou vždy jen datum prvního dne a posledního dne turnaje.

from connection import connect_to_db

conn = connect_to_db()
Successfully connected to the database!

Exportujeme všechny účasti od 1.11.2023 do 30.10.2024. Náhled dat:

import pandas as pd

ucasti_sql =  """
SELECT 
    h.Legitimace,
    h.Prijmeni,
    h.Jmena,
    h.Rocnik,
    k.Nazev as KlubNazev,
    t.Nazev as TurnajNazev,
    t.DatumOd as TurnajOd,
    t.DatumDo as TurnajDo,
    kt.Nazev as KategorieTurnaje,
    CASE 
        WHEN p.Id IS NOT NULL THEN 'Ano'
        ELSE 'Ne'
    END as ClenPrispevek2024
FROM Hrac h
INNER JOIN Ucast u ON h.Legitimace = u.IdHrace
INNER JOIN Soutezici s ON s.Id = u.IdSouteziciho
INNER JOIN Turnaj t ON t.Id = s.IdTurnaje
LEFT JOIN Klub k ON k.Id = h.IdKlubu
LEFT JOIN KategorieTurnaje kt ON kt.Id = t.IdKategorie
LEFT JOIN Prispevek p ON p.IdHrace = h.Legitimace AND p.IdSezony = 2024
WHERE 
    t.DatumOd >= CONVERT(datetime, '2023-11-01', 120)
    AND t.DatumOd <= CONVERT(datetime, '2024-10-31', 120)
ORDER BY Prijmeni, Jmena
    """

df = pd.read_sql(ucasti_sql, conn)

# Vypočítáme počet dnů soutěží pro každou soutěž
df['DobaTurnaje'] = (pd.to_datetime(df['TurnajDo']) - pd.to_datetime(df['TurnajOd'])).dt.days

# Jednodenní soutěže jsou převedeny na 1 den
df.loc[df['DobaTurnaje'] == 0, 'DobaTurnaje'] = 1

df.head()
Legitimace Prijmeni Jmena Rocnik KlubNazev TurnajNazev TurnajOd TurnajDo KategorieTurnaje ClenPrispevek2024 DobaTurnaje
0 3728 Adamczak Jakub 2009 Zahraniční 5th Central European Championship - Kids 2023-11-17 2023-11-17 Juniorské MČR Ne 1
1 3728 Adamczak Jakub 2009 Zahraniční Funbridge (16. - 18. 11. 2023) 2023-11-16 2023-11-18 Funbridge Ne 2
2 3728 Adamczak Jakub 2009 Zahraniční Funbridge (11. - 13. 7. 2024) 2024-07-11 2024-07-13 Funbridge Ne 2
3 3723 Adamczak Michal 2012 Zahraniční 5th Central European Championship - Kids 2023-11-17 2023-11-17 Juniorské MČR Ne 1
4 2949 Adamová Marie 1954 BK Máj České Budějovice Klubové body České Budějovice leden 2024 2024-01-04 2024-01-11 Klubové a jiné podobné turnaje Ano 7

Kritérium zaplaceného členství

Vyfiltrujeme sportovce, kteří mají prispevek za rok 2024

df = df[df['ClenPrispevek2024'] == 'Ano']

print(f"Počet účastí s prispevekem za rok 2024: {len(df)}")
Počet účastí s prispevekem za rok 2024: 4563

Kritérium svazových soutěží

Podívejme se na kategorie turnajů:

print("Kategorie:\n")

print(*sorted(df['KategorieTurnaje'].fillna('Neznámá').unique().tolist()), sep='\n' )
Kategorie:

1. liga
2. liga
3. liga
CBT
Funbridge
Juniorské MČR
Klubové a jiné podobné turnaje
MČR MIX
MČR TOP
Neznámá
Skupinovky, Malé ceny, Pražská liga
Slavonice
Vedlejší páráky VC/CBT, Hlavní párák Slavonice
Vedlejší týmy CBT
Velké ceny

Z těchto kategorií chceme vyfiltrovat: Funbridge, Klubové a jiné podobné turnaje

Dále je zde pár turnajů s neznámou kategorií, podívejme se na ně:

display( df[df['KategorieTurnaje'].isna()][['TurnajNazev', 'TurnajOd', 'TurnajDo']])
TurnajNazev TurnajOd TurnajDo
51 Účastnické bonusové body - CBT 2024-02-17 2024-10-19
52 Účastnické bonusové body - MČR 2024-10-05 2024-12-07
53 Výkonnostní bonusové body 2024-01-01 2024-12-31
56 Deštné 2024-02-10 2024-02-16
81 Účastnické bonusové body - CBT 2024-02-17 2024-10-19
... ... ... ...
5803 Výkonnostní bonusové body 2024-01-01 2024-12-31
5847 Klubové body Havířov květen 2024 2024-05-07 2024-05-28
5899 Účastnické bonusové body - CBT 2024-02-17 2024-10-19
5900 Účastnické bonusové body - MČR 2024-10-05 2024-12-07
5901 Výkonnostní bonusové body 2024-01-01 2024-12-31

154 rows × 3 columns

Vidíme, že jde o souhrnné turnaje, které nechceme počítat, tedy je také vyfiltrujeme:

print(f"Počet řádků před filtrováním: {len(df)}")
df = df[~df['KategorieTurnaje'].isin(['Funbridge', 'Klubové a jiné podobné turnaje', None])]
print(f"Počet řádků po filtrování: {len(df)}")
print("\nZbývající kategorie:")
print(*sorted(df['KategorieTurnaje'].dropna().unique().tolist()), sep='\n')
Počet řádků před filtrováním: 4563
Počet řádků po filtrování: 1662

Zbývající kategorie:
1. liga
2. liga
3. liga
CBT
Juniorské MČR
MČR MIX
MČR TOP
Skupinovky, Malé ceny, Pražská liga
Slavonice
Vedlejší páráky VC/CBT, Hlavní párák Slavonice
Vedlejší týmy CBT
Velké ceny

Výpočet počtu dnů soutěží

Nyní se zaměřmě na výpočet počtu dnů soutěží.

Podívejme se na soutěže a jejich počet dnů, konkrétně na soutěže, které trvají více než 2 dny:

df_tournaments = df[['TurnajNazev', 'TurnajOd', 'TurnajDo', 'DobaTurnaje']].drop_duplicates()

df_long_tournaments =  df_tournaments[df_tournaments['DobaTurnaje'] > 2]

df_long_tournaments.sort_values(by='DobaTurnaje', ascending=False)
TurnajNazev TurnajOd TurnajDo DobaTurnaje
1208 Brno - Skupinovka 2024-01-01 2024-06-06 157
382 Brno skupinovka 09/24 - 01/25 2024-09-01 2025-01-30 151
16 Skupinovka České Budějovice - Podzim 2024 2024-09-19 2025-02-13 147
155 Pražská Skupinová B Jaro 2024 2024-02-01 2024-06-06 126
195 Skupinová B Podzim 2024 2024-09-25 2025-01-29 126
257 Pražská švýcarská skupinovka jaro 2024 2024-02-08 2024-06-13 126
8 Skupinovka České Budějovice - Jaro 2024 2024-02-22 2024-06-13 112
44 Pražská liga jaro 2024 2024-02-12 2024-06-03 112
43 Pražská skupinovka A Jaro 2024 2024-02-15 2024-04-30 75
35 Pražská skupinová A zima 2023 2023-11-20 2024-01-29 70
38 Skupinová A - Jaro 2024 2024-02-05 2024-04-15 70
36 1. Liga 2024 2024-01-13 2024-03-17 64
118 2. Liga 2024 2024-01-06 2024-03-03 57
42 Pražská skupinová A léto 2024 2024-05-01 2024-06-24 54

Doplnění počtu dnů soutěží pro dlouhodobé turnaje

U dlouhodobých turnajů je nutné ručně změnit počet dnů soutěží, protože Od a Do jsou vždy jen datum prvního dne a posledního dne turnaje.

long_tournament_mapping = {
 'Skupinovka České Budějovice - Jaro 2024': 10,
 'Skupinovka České Budějovice - Podzim 2024': 10,
 'Pražská skupinová A zima 2023': 5,
 '1. Liga 2024': 8,
 'Skupinová A - Jaro 2024': 5,
 'Pražská skupinová A léto 2024': 5,
 'Pražská skupinovka A Jaro 2024': 5,
 'Pražská liga jaro 2024': 11,
 '2. Liga 2024': 8,
 'Skupinová B Podzim 2024': 9,
 'Pražská Skupinová B Jaro 2024': 9,
 'Pražská švýcarská skupinovka jaro 2024': 5,
 'Brno skupinovka 09/24 - 01/25': 10,
 'Brno - Skupinovka': 10,
}

# Upravíme počet dnů soutěží pro dlouhodobé turnaje
for tournament, days in long_tournament_mapping.items():
    df.loc[df['TurnajNazev'] == tournament, 'DobaTurnaje'] = days

# Zobrazime mapovani
for tournament, days in long_tournament_mapping.items():
    print(f"{tournament}".ljust(45), f"{days} dní")
Skupinovka České Budějovice - Jaro 2024       10 dní
Skupinovka České Budějovice - Podzim 2024     10 dní
Pražská skupinová A zima 2023                 5 dní
1. Liga 2024                                  8 dní
Skupinová A - Jaro 2024                       5 dní
Pražská skupinová A léto 2024                 5 dní
Pražská skupinovka A Jaro 2024                5 dní
Pražská liga jaro 2024                        11 dní
2. Liga 2024                                  8 dní
Skupinová B Podzim 2024                       9 dní
Pražská Skupinová B Jaro 2024                 9 dní
Pražská švýcarská skupinovka jaro 2024        5 dní
Brno skupinovka 09/24 - 01/25                 10 dní
Brno - Skupinovka                             10 dní

Export seznamu sportovců

Nyní můžeme vygenerovat seznam sportovců, kteří se zúčastnili více než 6 dnů soutěží v daném období od 1.11.2023 do 30.10.2024.

Odkaz na stažení seznamu sportovců

Odkaz na stažení seznamu sportovců s rokem narození mezi 1975 a 2001

# Seskupíme data podle hráče a sečteme dny turnajů
sportovci_dny = df.groupby(['Legitimace', 'Prijmeni', 'Jmena', 'Rocnik', 'KlubNazev'])['DobaTurnaje'].sum().reset_index().rename(columns={'DobaTurnaje': 'Pocet dni'})

# Vyfiltrujeme hráče s více než 6 dny soutěží
sportovci_nad_6_dni = sportovci_dny[sportovci_dny['Pocet dni'] > 6].sort_values('Pocet dni', ascending=False)
sportovic_nad_6_dni_filtered = sportovci_nad_6_dni[(sportovci_nad_6_dni['Rocnik'] >= 1975) & (sportovci_nad_6_dni['Rocnik'] <= 2001)]

# Zobrazíme výsledky
print(f"Počet sportovců s více než 6 dny soutěží: {len(sportovci_nad_6_dni)}")
print(f"Počet sportovců s více než 6 dny soutěží a rokem narození mezi 1975 a 2001: {len(sportovic_nad_6_dni_filtered)}")
print("\nSeznam sportovců:")
sportovci_nad_6_dni.to_csv('sportovci_nad_6_dni.csv', index=False)
sportovic_nad_6_dni_filtered.to_csv('sportovci_nad_6_dni_filtered.csv', index=False)


sportovci_nad_6_dni
Počet sportovců s více než 6 dny soutěží: 201
Počet sportovců s více než 6 dny soutěží a rokem narození mezi 1975 a 2001: 61

Seznam sportovců:
Legitimace Prijmeni Jmena Rocnik KlubNazev Pocet dni
24 341 Svoboda Otakar 1953 BK Praha 83
72 1761 Spálovský Luboš 1961 BK Praha 79
8 187 Hnátová Daniela 1969 BK Praha 77
57 1188 Nulíček Vladimír 1959 BK Praha 76
47 878 Kupková Lucie 1965 BK Praha 76
... ... ... ... ... ... ...
126 2684 Bielecki Piotr 1954 BS Havířov 8
153 2880 Štrbová Barbora 1994 BK Uherské Hradiště 8
211 3642 Barb Simon 1958 Zahraniční 8
183 3247 Pilát Marek 2007 BS Havířov 8
123 2672 Kolek Lukáš 1995 BS Havířov 8

201 rows × 6 columns

print("Seznam sportovců s více než 6 dny soutěží a rokem narození mezi 1975 a 2001:")
sportovic_nad_6_dni_filtered
Seznam sportovců s více než 6 dny soutěží a rokem narození mezi 1975 a 2001:
Legitimace Prijmeni Jmena Rocnik KlubNazev Pocet dni
78 1868 Vozábal David 1978 BS Havířov 57
132 2733 Kohutová Lucie 1997 BS Havířov 53
156 2909 Volhejn Petr 2001 BK Trutnov z.s. 53
89 2095 Bahník Ondřej 1985 BK Chaos Bridge 52
205 3559 Franz Vojtěch 2000 BK Praha 51
... ... ... ... ... ... ...
128 2701 Bouřa Patrik 1995 BK Uherské Hradiště 8
103 2304 Medlín Jiří 1977 BK Praha 8
114 2462 Teichmann Lukáš 1990 BS Havířov 8
153 2880 Štrbová Barbora 1994 BK Uherské Hradiště 8
123 2672 Kolek Lukáš 1995 BS Havířov 8

61 rows × 6 columns