# -*- coding: utf-8 -*-
"""Project 1 .ipynb

Automatically generated by Colab.

Original file is located at
    https://colab.research.google.com/drive/1HV5Drwor-O9K47BQAvFMKmskfU2qjC-4
"""

import pandas as pd
import numpy as np
import seaborn as sns
from sklearn.preprocessing import LabelEncoder

df = pd.read_csv('Titanic-Dataset.csv')
df.head()

df.dtypes

df.describe()

df.isnull().sum()

missing_percentage = df.isnull().mean() * 100
threshold = 30
columns_to_drop = missing_percentage[missing_percentage > threshold].index
df = df.drop(columns=columns_to_drop)
print(f"Columns dropped: {list(columns_to_drop)}")
print(f"Remaining columns: {df.columns}")

label_encoder = LabelEncoder()
for column in df.select_dtypes(include=['object']).columns:
    df[column] = label_encoder.fit_transform(df[column])
df.head()

label_encoder = LabelEncoder()
for column in df.select_dtypes(include=['object']).columns:
    df[column] = label_encoder.fit_transform(df[column].astype(str))

for column in df.select_dtypes(include=['object']).columns:
    mode_value = df[column].mode()[0]
    df[column] = df[column].fillna(mode_value)

for column in df.select_dtypes(include=['int64']).columns:
    mean_value = df[column].mean()
    df[column] = df[column].fillna(mean_value)

for column in df.select_dtypes(include=['float64']).columns:
    mean_value = df[column].mean()
    df[column] = df[column].fillna(mean_value)

print(df.isnull().sum())

def replace_outliers_with_nan(column):
    Q1 = column.quantile(0.25)
    Q3 = column.quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    return column.where((column >= lower_bound) & (column <= upper_bound), np.nan)

for col in df.select_dtypes(include=['float64', 'int64']).columns:
    df[col] = replace_outliers_with_nan(df[col])

print(df.isnull().sum())

for column in ['Age', 'SibSp', 'Parch', 'Fare']:
    df[column] = df[column].fillna(df[column].mean())

print("\nعدد القيم الفارغة بعد تعويض القيم المتطرفة:")
print(df.isnull().sum())

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))
sns.histplot(df['Age'], bins=15, kde=True, color='blue')
plt.title('Age Distribution')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.show()

plt.figure(figsize=(8, 6))
sns.countplot(x='Survived', data=df, palette='Set2')
plt.title('Survived count')
plt.xlabel('Survived')
plt.ylabel('Count')
plt.show()

plt.figure(figsize=(8, 6))
sns.scatterplot(x='Age', y='Survived', data=df, hue='Survived', palette='Set1')
plt.title('Age Vs Survived')
plt.xlabel('Age')
plt.ylabel('Survived')
plt.show()

plt.figure(figsize=(8, 6))
sns.scatterplot(x='Age', y='Fare', data=df, hue='Survived', palette='Set2')
plt.title('ِAge Vs Fare')
plt.xlabel('Age')
plt.ylabel('Fare ')
plt.show()

plt.figure(figsize=(8, 6))
sns.countplot(x='Pclass', hue='Survived', data=df, palette='Set1')
plt.title('Survived Vs Pclass  ')
plt.xlabel('Pclass ')
plt.ylabel('Survived')
plt.show()

df.to_csv('Titanic-Cleaned.csv', index=False)
print("\nتم حفظ البيانات النظيفة في ملف Titanic-Cleaned.csv")