import matplotlib.pyplot as plt import seaborn as sns from sklearn import datasets import pandas as pd import os def load_data(): """Loads the Iris dataset into a Pandas DataFrame.""" iris = datasets.load_iris(as_frame=True) df = iris.frame # Map target integers to target names for better labeling df['species'] = df['target'].map(lambda x: iris.target_names[x]) # Drop the numeric target column as we have the species name now df = df.drop(columns=['target']) return df def setup_plots_dir(): """Creates the plots directory if it doesn't exist.""" if not os.path.exists('plots'): os.makedirs('plots') def plot_pairplot(df): """Generates and saves a pairplot.""" plt.figure(figsize=(10, 8)) sns.pairplot(df, hue='species') plt.savefig('plots/pairplot.png') plt.close() print("Saved plots/pairplot.png") def plot_correlation_heatmap(df): """Generates and saves a correlation heatmap.""" plt.figure(figsize=(8, 6)) # Select only numeric columns for correlation numeric_df = df.select_dtypes(include=['float64', 'int64']) corr = numeric_df.corr() sns.heatmap(corr, annot=True, cmap='coolwarm', fmt=".2f") plt.title('Feature Correlation Heatmap') plt.tight_layout() plt.savefig('plots/heatmap.png') plt.close() print("Saved plots/heatmap.png") def plot_histograms(df): """Generates and saves histograms for each feature.""" df.hist(figsize=(10, 8), bins=20) plt.suptitle('Feature Distributions') plt.tight_layout() plt.savefig('plots/histograms.png') plt.close() print("Saved plots/histograms.png") def main(): setup_plots_dir() df = load_data() print("Generating plots...") plot_pairplot(df) plot_correlation_heatmap(df) plot_histograms(df) print("Done!") if __name__ == "__main__": main()