import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

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

# Načtení příslušných listů obsahujících data pro léto 2020 (COVID-19) a léto 2022 (PostCOVID-19)
covid_summer = pd.read_excel(file_path, sheet_name="CR_obce_20200801_20200828_Merge")
postcovid_summer = pd.read_excel(file_path, sheet_name="CR_obce_20220723_20220819_Merge")

# Výběr dat pouze pro obec Jeseník pro obě období
jesenik_covid = covid_summer[covid_summer["NAZEV"] == "Jeseník"]
jesenik_postcovid = postcovid_summer[postcovid_summer["NAZEV"] == "Jeseník"]

# Definice funkce pro vytvoření heatmapy návštěvnosti
def create_heatmap(data, title, subtitle, cmap, ax, vmin, vmax):
    """
    Funkce vytvoří heatmapu průměrného počtu návštěvníků podle dne v týdnu a hodiny.

    Parametry:
    - data: datový rámec s údaji o návštěvnících
    - title: hlavní název grafu
    - subtitle: podtitul grafu
    - cmap: barevná mapa grafu
    - ax: osa, na kterou se heatmapa vykreslí
    - vmin, vmax: minimální a maximální hodnota barevné škály
    """

    # Příprava prázdné tabulky s dny týdne a hodinami
    days = ['1', '2', '3', '4', '5', '6', '7']  # Pondělí až neděle
    hours = range(0, 24)  # Hodiny od 0 do 23
    heatmap_data = pd.DataFrame(index=hours, columns=days)

    # Naplnění tabulky hodnotami návštěvníků
    for day in days:
        for hour in hours:
            column_name = f"Navst_d{day}_{hour}_h"
            if column_name in data.columns:
                heatmap_data.at[hour, day] = data[column_name].values[0]

    # Převedení hodnot na celá čísla a vykreslení heatmapy
    heatmap_data = heatmap_data.astype(float).round().astype(int)

    sns.heatmap(
        heatmap_data,
        annot=True,
        fmt="d",
        cmap=cmap,
        cbar_kws={"label": "Průměrný počet návštěvníků"},
        ax=ax,
        vmin=vmin,
        vmax=vmax,
        linewidths=0.5
    )

    # Nastavení vzhledu grafu
    ax.set_title(f"{title}\n{subtitle}", fontsize=16, fontweight="bold")
    ax.set_xlabel("Den v týdnu", fontsize=14)
    ax.set_ylabel("Hodina", fontsize=14)

    # Nastavení velikosti popisů a legendy (barevné škály)
    cbar = ax.collections[0].colorbar
    cbar.ax.tick_params(labelsize=14)
    cbar.set_label("Průměrný počet návštěvníků", fontsize=14)

# Vytvoření dvou heatmap: pro COVID-19 léto 2020 a PostCOVID-19 léto 2022
fig, axes = plt.subplots(1, 2, figsize=(15, 7))

# Nastavení společné minimální a maximální hodnoty pro barevnou škálu
vmin, vmax = 250, 750

# Vykreslení heatmapy pro období COVID-19
create_heatmap(
    jesenik_covid,
    "PRŮMĚRNÝ POČET NÁVŠTĚVNÍKŮ PRO OBEC JESENÍK",
    "V období od 01.08.2020 do 28.08.2020 (COVID-19)",
    "YlOrRd",
    axes[0],
    vmin,
    vmax
)

# Vykreslení heatmapy pro období PostCOVID-19
create_heatmap(
    jesenik_postcovid,
    "PRŮMĚRNÝ POČET NÁVŠTĚVNÍKŮ PRO OBEC JESENÍK",
    "V období od 23.07.2022 do 19.08.2022 (PostCOVID-19)",
    "YlOrRd",
    axes[1],
    vmin,
    vmax
)

# Úprava rozložení grafů
plt.tight_layout()

# Zobrazení grafu
plt.show()

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