import pandas as pd
import matplotlib.pyplot as plt

# Načtení datového souboru
file_path = r"C:\Škola\BAK\DATA\PROCESSED\CR_Obce_VSECHNY_OBDOBI.xlsx"

# Definice listů v Excel souboru odpovídajících jednotlivým časovým obdobím
sheets = {
    "Léto 2020": "CR_obce_20200801_20200828_Merge",
    "Podzim 2020": "CR_obce_20201006_20201110_Merge",
    "Léto 2022": "CR_obce_20220723_20220819_Merge",
    "Podzim 2022": "CR_obce_20221010_20221106_Merge"
}

# Načtení všech listů do slovníku datových rámců
data = {key: pd.read_excel(file_path, sheet_name=sheet) for key, sheet in sheets.items()}

# Funkce pro získání správných sloupců s daty o dojíždějících ('PracSkolDoj_dX_hY')
def get_correct_columns(df):
    return [col for col in df.columns if "PracSkolDoj_" in col]

# Funkce na výpočet průměrného počtu dojíždějících pro každou hodinu dne
def calculate_hourly_average(df, columns):
    """
    Vypočítá průměrný počet dojíždějících za každou hodinu dne (průměr za týden).
    """
    if df.empty:
        return [0] * 24  # Ochrana proti prázdným datasetům

    hourly_averages = []
    for hour in range(24):
        hour_columns = [col for col in columns if f"_{hour}_h" in col]
        if hour_columns:
            total_sum_per_hour = df[hour_columns].sum().sum()
            hourly_averages.append(total_sum_per_hour / 7)  # Průměr za 7 dní
        else:
            hourly_averages.append(0)

    return hourly_averages

# Výpočet průměrných hodnot pro každé období
data_aggregated = {}
for key in data:
    dojizdejici_cols = get_correct_columns(data[key])
    data_aggregated[key] = calculate_hourly_average(data[key], dojizdejici_cols)

# Definice hodin (0–23)
hours = list(range(24))

# Definice stylů pro jednotlivá období
line_styles = {
    "Léto 2020": {"color": "#8B0000", "linestyle": "--", "marker": "o", "label": "Léto 2020 (COVID-19)"},
    "Podzim 2020": {"color": "#8B0000", "linestyle": "-", "marker": "s", "label": "Podzim 2020 (COVID-19)"},
    "Léto 2022": {"color": "#0E86D4", "linestyle": "--", "marker": "o", "label": "Léto 2022 (PostCOVID-19)"},
    "Podzim 2022": {"color": "#0E86D4", "linestyle": "-", "marker": "s", "label": "Podzim 2022 (PostCOVID-19)"}
}

# Vykreslení grafu průměrné denní dynamiky dojíždějících
plt.figure(figsize=(14, 7))

for key, style in line_styles.items():
    plt.plot(hours, data_aggregated[key], **style)

# Nastavení popisků os
plt.xlabel("Hodina dne", fontsize=14)
plt.ylabel("Průměrný počet dojíždějících", fontsize=14)
plt.xticks(hours)
plt.grid(True, linestyle="--", linewidth=0.5)

# Přidání hlavního nadpisu a podnadpisu
plt.suptitle("DENNÍ DYNAMIKA DOJÍŽDĚJÍCÍCH VE MĚSTĚ PROSTĚJOV", fontsize=16, fontweight="bold")
plt.title(
    "Průměrný počet dojíždějících za celý týden pro každou hodinu dne",
    fontsize=13,
    pad=8
)

# Legenda pro jednotlivá období
plt.legend(title="Období", loc="upper right")

# Zobrazení grafu
plt.show()

# Skript byl optimalizován pomocí nástroje ChatGPT 4.0
