# -*- coding: utf-8 -*-
"""
Created on Fri Oct  3 11:57:45 2025

@author: Moritz Romeike
"""

# ------------------------------------------------------------------------
# Programmcode 05 (Python, ohne seaborn): Explorative Datenanalyse
# ------------------------------------------------------------------------
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
from pandas.plotting import scatter_matrix

base_path = Path(__file__).resolve().parent
data_path = base_path / "Kap_2.2_Risk_Management_Data_Imputed.xlsx"

data = pd.read_excel(data_path)

print("\nStruktur der Daten:")
print(data.info())

print("\nDeskriptive Statistik:")
print(data.describe(include="all"))

print("\nErste Zeilen:")
print(data.head())

# Histogramme
plt.figure(); plt.hist(data["Likelihood"].dropna(), bins=10, edgecolor="black")
plt.title("Histogram of Likelihood"); plt.xlabel("Likelihood"); plt.ylabel("Frequency"); plt.tight_layout()

plt.figure(); plt.hist(data["Impact"].dropna(), bins=10, edgecolor="black")
plt.title("Histogram of Impact"); plt.xlabel("Impact"); plt.ylabel("Frequency"); plt.tight_layout()

plt.figure(); plt.hist(data["Risk_Score"].dropna(), bins=10, edgecolor="black")
plt.title("Histogram of Risk Score"); plt.xlabel("Risk Score"); plt.ylabel("Frequency"); plt.tight_layout()

# Scatter Likelihood vs Impact
plt.figure(); plt.scatter(data["Likelihood"], data["Impact"])
plt.title("Scatterplot of Likelihood vs. Impact"); plt.xlabel("Likelihood"); plt.ylabel("Impact"); plt.tight_layout()

# Boxplot Risk_Score by Category
cats = data["Risk_Category"].astype(str)
groups = [data.loc[cats==c, "Risk_Score"].dropna().values for c in sorted(cats.unique())]
plt.figure(); plt.boxplot(groups, labels=sorted(cats.unique()), vert=True)
plt.title("Boxplot of Risk Score by Category"); plt.xlabel("Risk Category"); plt.ylabel("Risk Score"); plt.xticks(rotation=45); plt.tight_layout()

# Korrelationsmatrix
num = data.select_dtypes(include=[np.number])
cor_matrix = num.corr()
print("\nKorrelationsmatrix:"); print(cor_matrix)

# Heatmap (matplotlib)
plt.figure(figsize=(6,5))
im = plt.imshow(cor_matrix, vmin=-1, vmax=1)
plt.xticks(range(len(cor_matrix.columns)), cor_matrix.columns, rotation=45, ha="right")
plt.yticks(range(len(cor_matrix.index)), cor_matrix.index)
plt.colorbar(im, fraction=0.046, pad=0.04, label="Correlation")
plt.title("Correlation Heatmap"); plt.tight_layout()

# „Pairs Plot“ (scatter_matrix)
plt.figure()
scatter_matrix(num, figsize=(8,8), diagonal='hist')
plt.suptitle("Pairs Plot", y=0.92)
plt.tight_layout()

# Weitere Boxplots zur Ausreißer-Sichtung
for col, title in [("Likelihood","Boxplot of Likelihood"),
                   ("Impact","Boxplot of Impact"),
                   ("Risk_Score","Boxplot of Risk Score")]:
    plt.figure()
    plt.boxplot(data[col].dropna().values, vert=True)
    plt.title(title); plt.ylabel(col); plt.tight_layout()

# Barplot der Kategorien
counts = data["Risk_Category"].value_counts()
plt.figure(); plt.bar(counts.index.astype(str), counts.values)
plt.title("Barplot of Risk Categories"); plt.xlabel("Risk Category"); plt.ylabel("Frequency")
plt.xticks(rotation=45); plt.tight_layout()
# ------------------------------------------------------------------------
