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 2022 a podzim 2022 (období PostCOVID-19)
summer_data = pd.read_excel(file_path, sheet_name="CR_obce_20220723_20220819_Merge")
autumn_data = pd.read_excel(file_path, sheet_name="CR_obce_20221010_20221106_Merge")

# Výběr dat pouze pro obec Prostějov
prostejov_summer = summer_data[summer_data["NAZEV"] == "Prostějov"]
prostejov_autumn = autumn_data[autumn_data["NAZEV"] == "Prostějov"]

# Definice funkce pro vytvoření heatmapy dojíždějících
def create_heatmap(data, title, subtitle, cmap, ax, vmin, vmax):
    """
    Funkce vytvoří heatmapu průměrného počtu dojíždějících osob podle dne v týdnu a hodiny.

    Parametry:
    - data: datový rámec s údaji o dojíždějí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 dojíždějících
    for day in days:
        for hour in hours:
            column_name = f"PracSkolDoj_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 dojíždějících"},
        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)

    # Zvýšení velikosti popisků legendy (barevné škály)
    cbar = ax.collections[0].colorbar
    cbar.ax.tick_params(labelsize=14)
    cbar.set_label("Průměrný počet dojíždějících", fontsize=14)

# Vytvoření heatmap s jednotnou stupnicí
fig, axes = plt.subplots(1, 2, figsize=(15, 7))

# Zjištění minimální a maximální hodnoty pro optimalizaci barevné škály
vmin = min(prostejov_summer.filter(like="PracSkolDoj").min().min(),
           prostejov_autumn.filter(like="PracSkolDoj").min().min())
vmax = max(prostejov_summer.filter(like="PracSkolDoj").max().max(),
           prostejov_autumn.filter(like="PracSkolDoj").max().max())

# Vykreslení heatmapy pro léto 2022 (PostCOVID-19)
create_heatmap(
    prostejov_summer,
    "PRŮMĚRNÝ POČET DOJÍŽDĚJÍCÍCH PRO OBEC PROSTĚJOV",
    "V období od 23.07.2022 do 19.08.2022 (PostCOVID-19 - léto)",
    "Blues",
    axes[0],
    vmin,
    vmax
)

# Vykreslení heatmapy pro podzim 2022 (PostCOVID-19)
create_heatmap(
    prostejov_autumn,
    "PRŮMĚRNÝ POČET DOJÍŽDĚJÍCÍCH PRO OBEC PROSTĚJOV",
    "V období od 10.10.2022 do 06.11.2022 (PostCOVID-19 - podzim)",
    "Blues",
    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
