# Complex demo: Load Iris, preprocess, visualize with line/bar/scatter plots using Matplotlib/Seaborn, integrate with stats, add annotations
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_visual_demo():
    # Load and prep
    iris = load_iris()
    df = pd.DataFrame(iris.data, columns=iris.feature_names)
    df['Target'] = iris.target
    # 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']
    # Descriptive stats integration
    stats = df_scaled.describe()
    print("Descriptive Stats for Iris:\n", stats)
    # Visualize with line plot (e.g., mean trends)
    mean_trends = df_scaled.groupby('Target').mean().T
    plt.figure(figsize=(10, 6))
    for col in mean_trends.columns:
        plt.plot(mean_trends.index, mean_trends[col], marker='o', label=f'Class {col}')
    plt.title('Line Plot of Mean Feature Values by Class')
    plt.xlabel('Features')
    plt.ylabel('Mean Scaled Value')
    plt.legend()
    plt.annotate('High Mean', xy=(0, mean_trends.iloc[0,0]), xytext=(1, mean_trends.iloc[0,0] + 0.5), arrowprops=dict(facecolor='black', shrink=0.05))
    plt.xticks(rotation=45)
    plt.show()
    # Bar plot for class counts
    class_counts = df_scaled['Target'].value_counts()
    plt.figure(figsize=(8, 5))
    sns.barplot(x=class_counts.index, y=class_counts.values)
    plt.title('Bar Plot of Class Distribution')
    plt.xlabel('Class')
    plt.ylabel('Count')
    plt.annotate('Balanced Classes', xy=(1, class_counts.max()), xytext=(1.5, class_counts.max() + 5), arrowprops=dict(facecolor='black', shrink=0.05))
    plt.show()
    # Scatter plot with annotations
    plt.figure(figsize=(10, 6))
    sns.scatterplot(x=df_scaled['sepal length (cm)'], y=df_scaled['sepal width (cm)'], hue=df_scaled['Target'])
    plt.title('Scatter Plot of Sepal Dimensions by Class')
    plt.annotate('Cluster Separation', xy=(0, 0), xytext=(1, 1), arrowprops=dict(facecolor='black', shrink=0.05))
    plt.show()

advanced_iris_visual_demo()