# Complex demo: Load Iris, clean, compute descriptive stats, feature engineering, visualize distributions/correlations with Matplotlib/Seaborn
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
import seaborn as sns

def advanced_iris_exploration_demo():
    # Load data
    iris = load_iris()
    df = pd.DataFrame(iris.data, columns=iris.feature_names)
    df['Target'] = iris.target
    
    # Data cleaning
    df = df.dropna()
    df = df[df.duplicated() == False]
    
    # Descriptive stats
    stats = df.describe()
    correlation = df.corr()
    print("Descriptive Statistics:\n", stats)
    print("Correlation Matrix:\n", correlation)
    
    # Feature engineering
    df['Petal_Ratio'] = df['petal length (cm)'] / (df['petal width (cm)'] + 1e-5)
    
    # Preprocessing
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(df.drop('Target', axis=1))
    df_scaled = pd.DataFrame(X_scaled, columns=df.drop('Target', axis=1).columns)
    df_scaled['Target'] = df['Target']
    
    # Visualize distributions
    fig, axes = plt.subplots(2, 3, figsize=(15, 10))
    
    for i, col in enumerate(df.columns[:5]):
        ax = axes[i // 3, i % 3]
        sns.histplot(df[col], kde=True, ax=ax)
        ax.set_title(f'Distribution of {col}')
        ax.annotate(f'Mean: {df[col].mean():.2f}', xy=(0.05, 0.95), xycoords='axes fraction', fontsize=10)
        
    plt.tight_layout()
    plt.show()
    
    # Visualize correlations
    plt.figure(figsize=(8, 6))
    sns.heatmap(correlation, annot=True, cmap='coolwarm')
    plt.title('Correlation Heatmap for Iris Data')
    plt.annotate('High Corr', xy=(0, 0), xytext=(1, 1), arrowprops=dict(facecolor='black', shrink=0.05))
    plt.show()

advanced_iris_exploration_demo()