
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Load dataset
df = pd.read_csv('diabetes_012_health_indicators_BRFSS2015.csv')

# Function to find outliers using IQR method
def find_outliers_iqr(data, column):
    Q1 = data[column].quantile(0.25)
    Q3 = data[column].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    return data[(data[column] < lower_bound) | (data[column] > upper_bound)]

# Identify and remove outliers from BMI, MentHlth, and PhysHlth
outliers_bmi = find_outliers_iqr(df, 'BMI')
outliers_menthlth = find_outliers_iqr(df, 'MentHlth')
outliers_physhlth = find_outliers_iqr(df, 'PhysHlth')
df_cleaned = df[~df.index.isin(outliers_bmi.index | outliers_menthlth.index | outliers_physhlth.index)]

# Visualizing distributions of selected columns before and after outlier handling
fig, axes = plt.subplots(3, 2, figsize=(12, 12))

# BMI distribution
sns.histplot(df['BMI'], bins=30, kde=True, ax=axes[0, 0]).set_title("Original BMI Distribution")
sns.histplot(df_cleaned['BMI'], bins=30, kde=True, ax=axes[0, 1]).set_title("BMI Distribution (Outliers Removed)")

# MentHlth distribution
sns.histplot(df['MentHlth'], bins=30, kde=True, ax=axes[1, 0]).set_title("Original MentHlth Distribution")
sns.histplot(df_cleaned['MentHlth'], bins=30, kde=True, ax=axes[1, 1]).set_title("MentHlth Distribution (Outliers Removed)")

# PhysHlth distribution
sns.histplot(df['PhysHlth'], bins=30, kde=True, ax=axes[2, 0]).set_title("Original PhysHlth Distribution")
sns.histplot(df_cleaned['PhysHlth'], bins=30, kde=True, ax=axes[2, 1]).set_title("PhysHlth Distribution (Outliers Removed)")

plt.tight_layout()
plt.show()
