import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Load the dataset
file_path = "Titanic-Dataset.csv"
titanic_data = pd.read_csv(file_path)

# 1. Handling Missing Values
# Fill missing 'Age' with the mean age
titanic_data = titanic_data.assign(Age=titanic_data['Age'].fillna(titanic_data['Age'].mean()))

# Drop 'Cabin' as it has too many missing values
titanic_data = titanic_data.drop('Cabin', axis=1)


# 2. Handling Outliers (Using IQR Method)
def remove_outliers(df, column):
    Q1 = df[column].quantile(0.25)
    Q3 = df[column].quantile(0.75)
    IQR = Q3 - Q1

    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR

    return df[(df[column] >= lower_bound) & (df[column] <= upper_bound)]


# Remove outliers
titanic_data = remove_outliers(titanic_data, 'Fare')
titanic_data = remove_outliers(titanic_data, 'Age')

# 3. Data Visualization
plt.figure(figsize=(14, 6))

# Histogram for 'Age'
plt.subplot(1, 2, 1)
sns.histplot(titanic_data['Age'], kde=True)
plt.title('Visualize Age on Distribution')

# Boxplot for 'Fare'
plt.subplot(1, 2, 2)
sns.boxplot(x=titanic_data['Fare'])
plt.title('Visualize Fare on Boxplot')

plt.tight_layout()
plt.show()

# Save the cleaned dataset to a new CSV file
cleaned_file_path = "Titanic-Dataset-Cleaned.csv"
titanic_data.to_csv(cleaned_file_path, index=False)
