import pandas as pd
import matplotlib.pyplot as plt

# Cesta k souboru obsahujícímu data
file_path = r"C:\Škola\BAK\DATA\PROCESSED\Cr_Katuze_VSECHNY_OBDOBI.xlsx"

# Definice listů v Excel souboru pro jednotlivá období
sheets = {
    "COVID_Leto_2020": "CR_katuze_20200801_20200828_Mer",
    "COVID_Podzim_2020": "CR_katuze_20201006_20201110_Mer",
    "PostCOVID_Leto_2022": "CR_katuze_20220723_20220819_Mer",
    "PostCOVID_Podzim_2022": "CR_katuze_20221010_20221106_Mer"
}

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

# Výběr sloupců odpovídajících návštěvníkům 
visitor_columns = [col for col in data["COVID_Leto_2020"].columns if "Návst_d" in col or "Navst_d" in col]

# Agregace dat: součet návštěvníků přes všechna katastrální území
aggregated_visitors = {}
for key, df in data.items():
    aggregated_df = df[visitor_columns].sum()
    aggregated_visitors[key] = aggregated_df

# Převedení agregovaných dat do DataFrame pro lepší práci
aggregated_visitors_df = pd.DataFrame(aggregated_visitors)

# Výpočet průměrného počtu návštěvníků pro každou hodinu dne (průměr přes všechny dny v týdnu)
daily_hourly_visitors = {key: [] for key in aggregated_visitors_df.columns}
for hour in range(24):  # 0-23 hodin
    for period in aggregated_visitors_df.columns:
        relevant_columns = [col for col in aggregated_visitors_df.index if col.endswith(f"_{hour}_h")]
        daily_hourly_visitors[period].append(aggregated_visitors_df.loc[relevant_columns, period].mean())

# Definice stylů čar a barev pro jednotlivá období
visitor_styles = {
    "COVID_Leto_2020": {"color": "red", "linestyle": "dashed", "marker": "o", "label": "Léto 2020 (COVID-19)"},
    "PostCOVID_Leto_2022": {"color": "mediumseagreen", "linestyle": "dashed", "marker": "o", "label": "Léto 2022 (PostCOVID-19)"},
    "COVID_Podzim_2020": {"color": "red", "linestyle": "solid", "marker": "s", "label": "Podzim 2020 (COVID-19)"},
    "PostCOVID_Podzim_2022": {"color": "mediumseagreen", "linestyle": "solid", "marker": "s", "label": "Podzim 2022 (PostCOVID-19)"}
}

# Vytvoření grafu průměrné denní dynamiky návštěvníků
plt.figure(figsize=(14, 7))

# Vykreslení čar pro jednotlivá období
for key in daily_hourly_visitors.keys():
    plt.plot(range(24), daily_hourly_visitors[key], **visitor_styles[key])

# Nastavení popisků os
plt.xlabel("Hodina dne", fontsize=14)
plt.ylabel("Průměrný počet návštěvníků", fontsize=14)
plt.xticks(range(0, 24, 1))
plt.grid(True, linestyle="--", linewidth=0.5)

# Přidání hlavního nadpisu a podnadpisu
plt.suptitle("DENNÍ DYNAMIKA NÁVŠTĚVNÍKŮ V OLOMOUCI", fontsize=16, fontweight="bold")
plt.title(
    "Agregováno přes všechna katastrální území Olomouce, průměrný počet návštěvníků za celý týden pro každou hodinu dne",
    fontsize=13,
    pad=8
)

# Přidání legendy
plt.legend(title="Časová období", loc="upper right")

# Zobrazení grafu
plt.show()

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