{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "b6084825",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.stats import zscore\n",
    "from sklearn.preprocessing import MinMaxScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "3c99702d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Name   Age  GPA  Test_Score  Attendance\n",
      "0   Amit  18.0  8.1          78        85.0\n",
      "1   Neha  19.0  7.8          82        90.0\n",
      "2  Rahul   NaN  9.0          91        88.0\n",
      "3  Priya  20.0  8.5          85         NaN\n",
      "4  Karan  21.0  7.2          76        76.0\n",
      "5  Sneha  19.0  8.9          88        92.0\n",
      "6  Rohit  18.0  3.5         620        87.0\n",
      "7  Pooja  20.0  8.0          80        89.0\n",
      "8  Arjun  50.0  9.5          92       900.0\n",
      "9  Kavya  19.0  8.3          79        84.0\n",
      "Name          0\n",
      "Age           1\n",
      "GPA           0\n",
      "Test_Score    0\n",
      "Attendance    1\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# Load dataset\n",
    "df = pd.read_csv(\"data_2.csv\")\n",
    "\n",
    "print(df)\n",
    "print(df.isnull().sum())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "3dc6b737",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Name        Age  GPA  Test_Score  Attendance\n",
      "0   Amit  18.000000  8.1          78        85.0\n",
      "1   Neha  19.000000  7.8          82        90.0\n",
      "2  Rahul  22.666667  9.0          91        88.0\n",
      "3  Priya  20.000000  8.5          85        88.0\n",
      "4  Karan  21.000000  7.2          76        76.0\n",
      "5  Sneha  19.000000  8.9          88        92.0\n",
      "6  Rohit  18.000000  3.5         620        87.0\n",
      "7  Pooja  20.000000  8.0          80        89.0\n",
      "8  Arjun  50.000000  9.5          92       900.0\n",
      "9  Kavya  19.000000  8.3          79        84.0\n"
     ]
    }
   ],
   "source": [
    "# Fill missing values\n",
    "df['Age'] = df['Age'].fillna(df['Age'].mean())\n",
    "df['Attendance'] = df['Attendance'].fillna(df['Attendance'].median())\n",
    "\n",
    "print(df)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "3af112ba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             Age        GPA  Test_Score  Attendance\n",
      "count  10.000000  10.000000   10.000000   10.000000\n",
      "mean   22.666667   7.880000  137.100000  167.900000\n",
      "std     9.706813   1.673187  169.762874  257.270912\n",
      "min    18.000000   3.500000   76.000000   76.000000\n",
      "25%    19.000000   7.850000   79.250000   85.500000\n",
      "50%    19.500000   8.200000   83.500000   88.000000\n",
      "75%    20.750000   8.800000   90.250000   89.750000\n",
      "max    50.000000   9.500000  620.000000  900.000000\n"
     ]
    }
   ],
   "source": [
    "# Statistical summary\n",
    "print(df.describe())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "4be284d5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Boxplot for outliers\n",
    "df[['Age','GPA','Test_Score','Attendance']].boxplot()\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "6b6d17b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Name        Age  GPA  Test_Score  Attendance\n",
      "0   Amit  18.000000  8.1          78        85.0\n",
      "1   Neha  19.000000  7.8          82        90.0\n",
      "2  Rahul  22.666667  9.0          91        88.0\n",
      "3  Priya  20.000000  8.5          85        88.0\n",
      "4  Karan  21.000000  7.2          76        76.0\n",
      "5  Sneha  19.000000  8.9          88        92.0\n",
      "7  Pooja  20.000000  8.0          80        89.0\n",
      "9  Kavya  19.000000  8.3          79        84.0\n"
     ]
    }
   ],
   "source": [
    "# Remove outliers\n",
    "z = np.abs(zscore(df[['Age','GPA','Test_Score','Attendance']]))\n",
    "\n",
    "df = df[(z < 2.5).all(axis=1)]\n",
    "\n",
    "print(df)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "9367fb15",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Name       Age       GPA  Test_Score  Attendance\n",
      "0   Amit  0.000000  0.500000    0.133333      0.5625\n",
      "1   Neha  0.214286  0.333333    0.400000      0.8750\n",
      "2  Rahul  1.000000  1.000000    1.000000      0.7500\n",
      "3  Priya  0.428571  0.722222    0.600000      0.7500\n",
      "4  Karan  0.642857  0.000000    0.000000      0.0000\n",
      "5  Sneha  0.214286  0.944444    0.800000      1.0000\n",
      "7  Pooja  0.428571  0.444444    0.266667      0.8125\n",
      "9  Kavya  0.214286  0.611111    0.200000      0.5000\n"
     ]
    }
   ],
   "source": [
    "# Normalize data\n",
    "scaler = MinMaxScaler()\n",
    "\n",
    "df[['Age','GPA','Test_Score','Attendance']] = scaler.fit_transform(\n",
    "    df[['Age','GPA','Test_Score','Attendance']]\n",
    ")\n",
    "\n",
    "print(df)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "195671b3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Age           1.009749\n",
      "GPA          -0.346064\n",
      "Test_Score    0.597254\n",
      "Attendance   -1.477838\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "# Check skewness\n",
    "print(df[['Age','GPA','Test_Score','Attendance']].skew())\n"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
