{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 472
        },
        "id": "mEdtKLn9xJhU",
        "outputId": "fdade025-48d8-42c6-9d4d-7e627581d5aa"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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0uHDh3X//febt4lu2bJFs2fPVq9evXyPQW1s2LBBTzzxhFJSUjRixAhJ8r3j5MwZpR/f3fFTZ7tfqztGcXGxli5dWuu1Ao0JzyAgqL377ru+ZwIOHDigP//5z8rLy9Ojjz7qe2vdoEGD1KdPH02dOlXffvutevToobVr1+rNN9/UxIkT1bFjR0nSrFmztH37dq1fv14tWrRQ9+7dNX36dD3++OO6++67/U7Wdempp57SwIEDlZ6ervvuu0/Hjx/Xc889p9jYWL/PLvj5z38uSZo6daqGDRum8PBwDRo06IJen9CmTRtNmTJFM2fO1IABAzR48GDt2rVLCxcu1LXXXuv39tC6MHz4cH3yySeaM2eOvvzyS40YMUKXX365tm7dqhdffFFt2rTR//zP/9ToQ5Kk//94nz59Wvv379eGDRuUnZ2t5ORkrVq1SlFRUZKkmJgY3XzzzXryySdVXl6udu3aae3atdV+HsXZ7td+/fopIiJCgwYN0r/8y7/o6NGjeuGFF9S2bVvt27ev7u4kIFAC+yYKoH5U9zbHqKgo17NnT7do0SJXWVnpt39paal76KGHnNfrdeHh4a5Tp07uqaee8u23ZcsWFxYW5v7t3/7N73qnT5921157rfN6ve7w4cNnXU/V2xxfe+21c667urc5OufcunXr3I033uiio6NdTEyMGzRokPvyyy/N9Z944gnXrl07FxISct63PFb3Nscq8+fPd127dnXh4eEuPj7ePfDAA2a+3r17u7S0tHPOU9PbW7Vqlevbt6+Li4vzPV5paWmuuLi4Rsf+6eMdERHhEhIS3G233ebmzZvnSkpKzHW+//57d9ddd7m4uDgXGxvr7rnnHrd3714nyWVlZfnte7b7ddWqVa579+4uKirKdejQwc2ePdu9+OKLF/R2U6Cx8jj3k+fYACDAxo0bpyVLluiFF17QuHHjAr0c4JJEIABodCoqKvTLX/5S7733nt588816+/UNgLMjEAAAgMG7GAAAgEEgAAAAg0AAAAAGgQAAAIxaf1BSZWWl9u7dqxYtWtTJR7wCAID655xTaWmpvF6v319t/alaB8LevXvVvn372l4dAAAE0J49e3TFFVecdXutA6HqD6vs2bPH95G1AACgcSspKVH79u2r/QNpZ6p1IFT9WiEmJoZAAACgiTnfywN4kSIAADAIBAAAYBAIAADA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9ddryZIlCgsL05IlSyQFx5z/+7//qwMHDigpKUlhYWEKCwtTQUGBHnnkEXXo0EFScMxZndTUVLVu3Vpff/21pIads84DYenSpWrbtq3uuOMO32U///nPFR4ervXr1/su27Vrl7777julp6fX9RLqVVlZmUJC/O+20NBQVVZWSpJSUlKUkJDgN2tJSYk2bdrU5Gat0qxZMyUmJurw4cNas2aNhgwZEpRz1mSm9PR0HTlyxO9ZlA0bNqiyslLXXXddg6+5PgTLz2tVHOTl5WndunVq1aqV3/ZgfiwrKyt18uRJScEx58iRI7Vjxw5t377d9+X1ejVp0iStWbNGUnDMWZ3vv/9ehw4dUmJioqQGnrMuX/FYUVHhkpKS3OTJk822+++/3yUlJbkNGza4Tz75xKWnp7v09PS6vPkGMXr0aNeuXTu3evVql5+f715//XXXunVr9+///u++ff7jP/7DxcXFuTfffNPt2LHDDRkyxKWkpLjjx48HcOUX7r333nPvvvuu2717t1u7dq3r0aOHu+6669ypU6ecc01zztLSUrdt2za3bds2J8nNmTPHbdu2zffK9prMNGDAANerVy+3adMm9+GHH7pOnTq54cOHB2ok43wzHjp0yG3bts29/fbbTpJ75ZVX3LZt29y+fft8x2gKP6/nmvPUqVNu8ODB7oorrnDbt293+/bt832dPHnSd4zG/lg6d+45jx496qZMmeJyc3Pdt99+6z755BM3ZswYFxkZ6T7//HPfMZr6nNX56bsYnGv6c5aWlrrf/e53Ljc31+Xn57t169a5q6++2nXq1MmdOHHCd4yGmrNOA2HNmjVOktu1a5fZdvz4cTd+/Hh3+eWXu8suu8zdddddfv9BaipKSkrcgw8+6JKSklxUVJRLTU11U6dO9fuPTmVlpZs2bZqLj493kZGR7tZbb632PmnsXn31VZeamuoiIiJcQkKCy8zMdEeOHPFtb4pzvv/++06S+Ro9erRzrmYzHTp0yA0fPtw1b97cxcTEuDFjxrjS0tIATFO98824dOnSardnZWX5jtEUfl7PNWfVWzir+3r//fd9x2jsj6Vz557z+PHj7q677nJer9dFRES4xMREN3jwYPfxxx/7HaOpz1md6gKhqc9ZVlbm+vXr59q0aePCw8NdcnKy+81vfuMKCwv9jtFQc/LnngEAgMHfYgAAAAaBAAAADAIBAAAYBAIAADAIBAAAYBAIAADAIBAAAIBBIAAAAINAAAAABoEAXOIyMjL0y1/+0vf9nj17NHbsWHm9XkVERCg5OVkPPvigDh06FLhFAmhwBAIAn927d+uaa65RXl6eVq5cqa+//lrPP/+81q9fr/T0dBUVFQV6iQAaSFigFwCg8cjMzFRERITWrl2r6OhoSVJSUpJ69eqljh07aurUqVq0aFGAVwmgIfAMAgBJUlFRkdasWaPx48f74qBKQkKCRowYoVdffVX8fTfg0kAgAJAk5eXlyTmnbt26Vbu9W7duOnz4sA4ePNjAKwMQCAQCAD/ne4YgIiKigVYCIJAIBACSpCuvvFIej0c7d+6sdvvOnTvVpk0bxcXFNezCAAQEgQBAktSqVSvddtttWrhwoY4fP+63rbCwUCtWrFBGRkZgFgegwREIAHzmz5+vkydPqn///srJydGePXv03nvv6bbbblPnzp01ffr0QC8RQAMhEAD4dOrUSZs3b1ZqaqruvfdeJScna+DAgercubP++te/qnnz5oFeIoAG4nG8ZwnAOWRlZWnOnDnKzs7W9ddfH+jlAGggBAKA81q6dKmKi4s1YcIEhYTwxCNwKSAQAACAwT8FAACAQSAAAACDQAAAAAaBAAAADAIBAAAYBAIAADAIBAAAYBAIAADAIBAAAIDx/wC5k6Bmp8DTzgAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ],
      "source": [
        "import pandas as pd\n",
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "data = {\"IQ\": [95, 102, 98, 110, 105, 99, 101, 97, 150, 72]}\n",
        "df = pd.DataFrame(data)\n",
        "\n",
        "sns.boxplot(x=df[\"IQ\"])\n",
        "plt.title(\"Box Plot for IQ Data\")\n",
        "plt.show()\n"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Identifying Outliers Using Scatter Plots**"
      ],
      "metadata": {
        "id": "YySbd21jzswu"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "plt.scatter(df.index, df[\"IQ\"])\n",
        "plt.xlabel(\"Index\")\n",
        "plt.ylabel(\"IQ\")\n",
        "plt.title(\"Scatter Plot for IQ Data\")\n",
        "plt.show()\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 472
        },
        "id": "HCiXlhpMxKBP",
        "outputId": "04e36ec3-ea58-4207-ec33-b33a87ba7719"
      },
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAO0dJREFUeJzt3X1cVHXe//H3jMhNwgyiwTCFinajWKl5F2W3okBGuVn9bKm8S7dW83ItK7ZVNHNdre1GLb3sMjXNtt1r09I2yiTDDJU03LxNi0wTJCVmBBc0OL8/vJhtFlA0YIbD6/l4nMfDOec73/M5M9a8Ped7vsdiGIYhAAAAk7L6ugAAAICGRNgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgB4Fe+/fZbWSwWLVmypFH2t2zZMnXu3FktW7ZUeHh4o+wTQOMi7ACN5Msvv9Rdd92l9u3bKzg4WBdddJEGDBiguXPnNtg+V6xYoRdffLHa+sOHD2vq1KnKzc1tsH3/p/Xr18tisXiWli1bqmPHjnrggQf0zTff1Ms+PvvsM02dOlXFxcV1ar9nzx4NHz5cnTp10quvvqqFCxfWSx21mTp1qiwWi44ePVpt25o1a5SUlKQ2bdooODhYl112mSZNmqSioqI69b1kyRKvzzc4OFhOp1OJiYmaM2eOjh8/ft51n+vnCvgbwg7QCD777DP16tVL27dv1+jRozVv3jw9+OCDslqteumllxpsv2cKO9OmTWvUsFNl/PjxWrZsmRYuXKhBgwbprbfeUu/evXX48OFf3Pdnn32madOm1flHef369aqsrNRLL72k4cOH65577vnFNZyPxx57TCkpKSooKNATTzyhefPmKSEhQXPnzlX37t21b9++Ovf19NNPa9myZZo/f74eeeQRSdKECRN05ZVX6p///Od51XeunyvgbwJ8XQDQHMyYMUN2u105OTnVLpUUFhb6pqgGUFpaqlatWp2xzfXXX6+77rpLkjRixAhddtllGj9+vJYuXaq0tLTGKNOj6rOvz8tXJ06c0AUXXFDn9m+++ab+/Oc/6//9v/+nN954Qy1atPBsGz58uG6++Wbdfffd+vzzzxUQcPb/ZScnJ6tXr16e12lpacrMzNRtt92m22+/Xbt371ZISMi5HRTQxHFmB2gEX3/9tbp27Vrjj2pkZGS1dcuXL1efPn10wQUXqHXr1rrhhhv04Ycfera/8847GjRokJxOp4KCgtSpUydNnz5dFRUVnjY33XST3nvvPR04cMBzaaNDhw5av369evfuLel02Kja9vMxMps3b1ZSUpLsdrsuuOAC3Xjjjdq4caNXjVWXZHbt2qVf//rXat26tfr163fOn80tt9wiScrLyztju8zMTF1//fVq1aqVwsPDdccdd2j37t1e9UyaNEmSFBsb6zmub7/9tsb+OnTooPT0dEnShRdeKIvFoqlTp3q2v/LKK+ratauCgoLkdDo1duzYamc2brrpJl1xxRXaunWrbrjhBl1wwQX6/e9/f07HP23aNLVu3VoLFy70CjqS1KdPHz3xxBPavn273n777XPq9+duueUWTZ48WQcOHNDy5cs96//5z39q+PDh6tixo4KDg+VwODRy5EgdO3bM0+Zsn+vixYt1yy23KDIyUkFBQYqLi9P8+fPPu1agIXBmB2gE7du3V3Z2tnbs2KErrrjijG2nTZumqVOn6tprr9XTTz+twMBAbd68WZmZmRo4cKCk0+MzQkNDNXHiRIWGhiozM1NTpkyR2+3Ws88+K0l66qmn5HK5dOjQIb3wwguSpNDQUHXp0kVPP/20pkyZojFjxuj666+XJF177bWSToeK5ORk9ezZU+np6bJarZ4ftA0bNqhPnz5e9d5999269NJL9cc//lGGYZzzZ/P1119Lktq0aVNrm48++kjJycnq2LGjpk6dqn/961+aO3eurrvuOm3btk0dOnTQnXfeqa+++kpvvvmmXnjhBbVt21bS6SBTkxdffFGvv/66Vq5cqfnz5ys0NFRXXXWVpNM/8NOmTVNCQoIefvhh7d27V/Pnz1dOTo42btyoli1bevo5duyYkpOTNXToUN13332Kioqq87Hv27dPe/fu1fDhw2Wz2Wps88ADDyg9PV2rV6/+RZfZ7r//fv3+97/Xhx9+qNGjR0uS1q5dq2+++UYjRoyQw+HQzp07tXDhQu3cuVObNm2SxWI56+c6f/58de3aVbfffrsCAgK0evVq/fa3v1VlZaXGjh173vUC9coA0OA+/PBDo0WLFkaLFi2M+Ph44/HHHzc++OAD4+TJk17t9u3bZ1itVuNXv/qVUVFR4bWtsrLS8+cTJ05U28dvfvMb44ILLjDKyso86wYNGmS0b9++WtucnBxDkrF48eJq+7j00kuNxMTEavuLjY01BgwY4FmXnp5uSDLuvffeOn0GH3/8sSHJeO2114wffvjBOHz4sPHee+8ZHTp0MCwWi5GTk2MYhmHk5eVVq6179+5GZGSkcezYMc+67du3G1ar1XjggQc865599llDkpGXl1enmqqO4YcffvCsKywsNAIDA42BAwd6fQfz5s3z1F/lxhtvNCQZCxYsOK/9rVq1ypBkvPDCC2d8n81mM66++uoztlm8eLEhyfM51sRutxs9evTwvK7p79Gbb75pSDKysrI86870udbUR2JiotGxY8cz1gs0Ji5jAY1gwIABys7O1u23367t27dr9uzZSkxM1EUXXaR3333X027VqlWqrKzUlClTZLV6/+dpsVg8f/75mIvjx4/r6NGjuv7663XixAnt2bPnvOvMzc3Vvn379Otf/1rHjh3T0aNHdfToUZWWlqp///7KyspSZWWl13seeuihc9rHyJEjdeGFF8rpdGrQoEEqLS3V0qVLvcaZ/Fx+fr5yc3M1fPhwRUREeNZfddVVGjBggP7xj3+c+4GewUcffaSTJ09qwoQJXt/B6NGjZbPZ9N5773m1DwoK0ogRI85rX1V3SIWFhZ2xXVhY2C+6m6pKaGioVz8//3tUVlamo0eP6pprrpEkbdu2rU59/rwPl8ulo0eP6sYbb9Q333wjl8v1i2sG6gOXsYBG0rt3b7399ts6efKktm/frpUrV+qFF17QXXfdpdzcXMXFxenrr7+W1WpVXFzcGfvauXOn/vCHPygzM1Nut9tr2y/5gam662fYsGG1tnG5XGrdurXndWxs7DntY8qUKbr++uvVokULtW3bVl26dDnjwNsDBw5Iki6//PJq27p06aIPPvigTgOj66q2/QUGBqpjx46e7VUuuugiBQYGnte+qkLO2YLM8ePH1aFDh/Pax8+VlJR4jRErKirStGnT9Je//KXaQPm6/j3auHGj0tPTlZ2drRMnTlTrw263/+K6gV+KsAM0ssDAQPXu3Vu9e/fWZZddphEjRuhvf/ubZ7Ds2RQXF+vGG2+UzWbT008/rU6dOik4OFjbtm3TE088Ue3My7moeu+zzz6r7t2719gmNDTU6/W53tlz5ZVXKiEh4bzq80e/5M6mqlB7plvCDxw4ILfbrY4dO573fiTp0KFDcrlcuuSSSzzr7rnnHn322WeaNGmSunfvrtDQUFVWViopKalOf4++/vpr9e/fX507d9bzzz+vmJgYBQYG6h//+IdeeOGFX/R3EahPhB3Ah6ou3eTn50uSOnXqpMrKSu3atavWsLF+/XodO3ZMb7/9tm644QbP+pruZvr5pa+6rO/UqZMkyWaz+U0gad++vSRp79691bbt2bNHbdu29ZzVqe24znd/Pw8YJ0+eVF5eXr1+Lpdeeqkuv/xyrVq1Si+99FKNl7Nef/11SacHgv8Sy5YtkyQlJiZKkn788UetW7dO06ZN05QpUzztaprTp7bPdfXq1SovL9e7776rdu3aedZ//PHHv6hWoL4xZgdoBB9//HGNdypVjTepumQyePBgWa1WPf3009X+VVz1/qrbk3/e38mTJ/XKK69U679Vq1Y1Xo6oCgf/eSt1z5491alTJz333HMqKSmp9r4ffvih1mNsKNHR0erevbuWLl3qVe+OHTv04Ycf6tZbb/Wsq+24zkVCQoICAwM1Z84cr8940aJFcrlcGjRo0Hn3XZP09HT9+OOPeuihh7ymDpCkrVu3atasWerRo4eSk5PPex+ZmZmaPn26YmNjlZqaKqnmv0eSapyEsrbPtaY+XC6XFi9efN61Ag2BMztAI3jkkUd04sQJ/epXv1Lnzp118uRJffbZZ3rrrbfUoUMHzwDXSy65RE899ZSmT5+u66+/XnfeeaeCgoKUk5Mjp9OpmTNn6tprr1Xr1q01bNgwjR8/XhaLRcuWLasxTPXs2VNvvfWWJk6cqN69eys0NFQpKSnq1KmTwsPDtWDBAoWFhalVq1bq27evYmNj9T//8z9KTk5W165dNWLECF100UX6/vvv9fHHH8tms2n16tWN/fHp2WefVXJysuLj4zVq1CjPred2u91rbpyePXtKOn3b/dChQ9WyZUulpKSc03ieCy+8UGlpaZo2bZqSkpJ0++23a+/evXrllVfUu3dv3XffffV6bPfee68+//xzPf/889q1a5dSU1PVunVrbdu2Ta+99pouvPBC/e///m+dJhSUpPfff1979uzRTz/9pCNHjigzM1Nr165V+/bt9e677yo4OFjS6bN3N9xwg2bPnq1Tp07poosu0ocffljjGcLaPteBAwcqMDBQKSkp+s1vfqOSkhK9+uqrioyM9JytBPyCD+8EA5qN999/3xg5cqTRuXNnIzQ01AgMDDQuueQS45FHHjGOHDlSrf1rr71m9OjRwwgKCjJat25t3HjjjcbatWs92zdu3Ghcc801RkhIiOF0Oj23sksyPv74Y0+7kpIS49e//rURHh5uSPK6Df2dd94x4uLijICAgGq3en/xxRfGnXfeabRp08YICgoy2rdvb9xzzz3GunXrPG1qum37TKpuPf/b3/52xnY13XpuGIbx0UcfGdddd50REhJi2Gw2IyUlxdi1a1e190+fPt246KKLDKvVetbb0M90DPPmzTM6d+5stGzZ0oiKijIefvhh48cff/Rqc+ONNxpdu3Y94/HUdX/vvvuukZCQ4PmuJBldu3Y1XC5XnfquuvW8agkMDDQcDocxYMAA46WXXjLcbne19xw6dMj41a9+ZYSHhxt2u924++67jcOHDxuSjPT0dK+2tX2u7777rnHVVVcZwcHBRocOHYxZs2YZr7322jlNAQA0NIthnMcsYACABvXggw9q0aJFevXVV/Xggw/6uhygSSPsAIAfqqio0ODBg5WRkaF33nnHa2wSgHND2AEAAKbG3VgAAMDUCDsAAMDUCDsAAMDUCDsAAMDUmFRQp58HdPjwYYWFhdXLdPMAAKDhGYah48ePy+l0ymqt/fwNYUfS4cOHFRMT4+syAADAeTh48KAuvvjiWrcTdiTPw/cOHjwom83m42oAAEBduN1uxcTE1PgQ3Z8j7OjfT/S12WyEHQAAmpizDUFhgDIAADA1wg4AADA1wg4AADA1wg4AADA1wg4AADA1wg4AADA1wg4AADA1wg4AADA1wg4AADA1ZlAGAMDPVFQa2pJXpMLjZYoMC1af2Ai1sPKg6vPl0zM7WVlZSklJkdPplMVi0apVq7y2Dx8+XBaLxWtJSkryalNUVKTU1FTZbDaFh4dr1KhRKikpacSjAACg/mTsyFe/WZm699VN+q+/5OreVzep36xMZezI93VpTZZPw05paam6deuml19+udY2SUlJys/P9yxvvvmm1/bU1FTt3LlTa9eu1Zo1a5SVlaUxY8Y0dOkAANS7jB35enj5NuW7yrzWF7jK9PDybQSe8+TTy1jJyclKTk4+Y5ugoCA5HI4at+3evVsZGRnKyclRr169JElz587Vrbfequeee05Op7PeawYAoCFUVBqatnqXjBq2GZIskqat3qUBcQ4uaZ0jvx+gvH79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9XE4AACggdX197vJjNk5efKkFi5cKLvdrm7dukmSsrOzFR4e7gk6kpSQkCCr1VrtctfPlZeXy+12ey0AAMCc/D7srFmzRqGhoQoODtYLL7ygtWvXqm3btpKkgoICRUZGerUPCAhQRESECgoKau1z5syZstvtniUmJqZBjwEAAPiO34edm2++Wbm5ufrss8+UlJSke+65R4WFhb+oz7S0NLlcLs9y8ODBeqoWAAD4G78PO61atdIll1yia665RosWLVJAQIAWLVokSXI4HNWCz08//aSioiI5HI5a+wwKCpLNZvNaAACAOfl92PlPlZWVKi8vlyTFx8eruLhYW7du9WzPzMxUZWWl+vbt66sSAQCAHwnw5c5LSkq0f/9+z+u8vDzl5uYqIiJCbdq00YwZM3T77bcrOjpaR48e1csvv6zvv/9ed999tySpS5cuSkpK0ujRo7VgwQKdOnVK48aN09ChQ+t8JxYAADA3n4adzz//XDfffLPn9cSJEyVJw4YN04IFC7Rnzx4tXbpUR48eVZs2bdS7d29t2LBBXbt29bznjTfe0Lhx49S/f39ZrVYNGTJEc+bMafRjAQAA/slv5tnxJebZAQCg6THdPDsAAADng7ADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMzadhJysrSykpKXI6nbJYLFq1apVn26lTp/TEE0/oyiuvVKtWreR0OvXAAw/o8OHDXn0UFRUpNTVVNptN4eHhGjVqlEpKShr5SAAAgL/yadgpLS1Vt27d9PLLL1fbduLECW3btk2TJ0/Wtm3b9Pbbb2vv3r26/fbbvdqlpqZq586dWrt2rdasWaOsrCyNGTOmsQ4BAAD4OYthGIavi5Aki8WilStXavDgwbW2ycnJUZ8+fXTgwAG1a9dOu3fvVlxcnHJyctSrVy9JUkZGhm699VYdOnRITqezTvt2u92y2+1yuVyy2Wz1cTgAAKCB1fX3u0mN2XG5XLJY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9u2r7OzsWvstLy+X2+32WgAAgDn5ddgJCwtTfHy8pk+frsOHD6uiokLLly9Xdna28vPzVVBQIEmKioryel9UVJRnW01mzpwpu93uWWJiYhr0OAAAgO/4ddiRpGXLlskwDF100UUKCgrSnDlzdO+998pqPf/S09LS5HK5PMvBgwfrsWIAAOBP/D7sdOrUSZ988olKSkp08OBBbdmyRadOnVLHjh3lcDgkSUeOHPF6z5EjRzzbahIUFCSbzea1AAAAc/L7sFOlVatWio6O1o8//qgPPvhAd9xxh2JjY+VwOLRu3TpPO7fbrc2bNys+Pt6H1QIAAH8R4OsCzuaDDz6QYRi6/PLLtX//fk2aNEmdO3fWiBEjZLFYNGHCBD3zzDO69NJLFRsbq8mTJ8vpdGrw4MG+Lh0AAPgBvw87LpdLaWlpOnTokCIiIjRkyBDNmDFDLVu2lCQ9/vjjKi0t1ZgxY1RcXKx+/fopIyOj2h1cAACgefLreXYaC/PsAADQ9Jhinh0AAIBfirADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMza/DTkVFhSZPnqzY2FiFhISoU6dOmj59ugzD8LQxDENTpkxRdHS0QkJClJCQoH379vmwagAA4E/8OuzMmjVL8+fP17x587R7927NmjVLs2fP1ty5cz1tZs+erTlz5mjBggXavHmzWrVqpcTERJWVlfmwcgAA4C8sxs9Pk/iZ2267TVFRUVq0aJFn3ZAhQxQSEqLly5fLMAw5nU49+uijeuyxxyRJLpdLUVFRWrJkiYYOHVqn/bjdbtntdrlcLtlstgY5FgAAUL/q+vvt12d2rr32Wq1bt05fffWVJGn79u369NNPlZycLEnKy8tTQUGBEhISPO+x2+3q27evsrOza+23vLxcbrfbawEAAOYU4OsCzuTJJ5+U2+1W586d1aJFC1VUVGjGjBlKTU2VJBUUFEiSoqKivN4XFRXl2VaTmTNnatq0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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Identifying Outliers Using Z-Score**"
      ],
      "metadata": {
        "id": "fTawQ7BIzm3J"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "from scipy.stats import zscore\n",
        "\n",
        "np.random.seed(0)\n",
        "normal_iq = np.random.normal(100, 5, 100)\n",
        "outliers = [30, 250]\n",
        "\n",
        "iq_data = np.concatenate([normal_iq, outliers])\n",
        "\n",
        "df = pd.DataFrame({\"IQ\": iq_data})\n",
        "df[\"Z_Score\"] = zscore(df[\"IQ\"])\n",
        "\n",
        "outliers_z = df[np.abs(df[\"Z_Score\"]) > 3]\n",
        "print(outliers_z)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "v0XMPGU9xKDE",
        "outputId": "a4ce22e7-eed9-4d9b-b10e-7f01bc234d3f"
      },
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "        IQ   Z_Score\n",
            "100   30.0 -4.156281\n",
            "101  250.0  8.708296\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Identifying Outliers Using the IQR Method**"
      ],
      "metadata": {
        "id": "EfGsDRNE10ST"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "Q1 = df[\"IQ\"].quantile(0.25)\n",
        "Q3 = df[\"IQ\"].quantile(0.75)\n",
        "IQR = Q3 - Q1\n",
        "\n",
        "lower_bound = Q1 - 1.5 * IQR\n",
        "upper_bound = Q3 + 1.5 * IQR\n",
        "\n",
        "outliers_iqr = df.query(\"IQ < @lower_bound or IQ > @upper_bound\")\n",
        "print(outliers_iqr)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "-bvqB6QAxKFy",
        "outputId": "05244690-1b14-451c-ebdb-1e18862c616c"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "        IQ   Z_Score\n",
            "100   30.0 -4.156281\n",
            "101  250.0  8.708296\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Identifying Outliers Using DBSCAN**"
      ],
      "metadata": {
        "id": "XkS5hc9e14l6"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.cluster import DBSCAN\n",
        "\n",
        "dbscan = DBSCAN(eps=5, min_samples=2)\n",
        "df[\"Cluster\"] = dbscan.fit_predict(df[[\"IQ\"]])\n",
        "\n",
        "outliers_dbscan = df[df[\"Cluster\"] == -1]\n",
        "print(outliers_dbscan)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "8RJEUI0vxKIa",
        "outputId": "c1df6eba-4e04-4f01-8cdb-f01d67999427"
      },
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "        IQ   Z_Score  Cluster\n",
            "100   30.0 -4.156281       -1\n",
            "101  250.0  8.708296       -1\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "**Identifying Outliers Using Isolation Forest**"
      ],
      "metadata": {
        "id": "9Pq8mDzf24FO"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.ensemble import IsolationForest\n",
        "\n",
        "iso = IsolationForest(contamination=0.2, random_state=42)\n",
        "df[\"Outlier\"] = iso.fit_predict(df[[\"IQ\"]])\n",
        "\n",
        "outliers_iso = df[df[\"Outlier\"] == -1]\n",
        "print(outliers_iso)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "8a7CNv3W1xJl",
        "outputId": "d63a626a-75fe-4a15-d5e5-ef3313a8b4b7"
      },
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "             IQ   Z_Score  Cluster  Outlier\n",
            "0    108.820262  0.452761        0       -1\n",
            "3    111.204466  0.592178        0       -1\n",
            "4    109.337790  0.483024        0       -1\n",
            "11   107.271368  0.362189        0       -1\n",
            "20    87.235051 -0.809441        0       -1\n",
            "24   111.348773  0.600617        0       -1\n",
            "25    92.728172 -0.488229        0       -1\n",
            "28   107.663896  0.385142        0       -1\n",
            "33    90.096018 -0.642145        0       -1\n",
            "41    92.899910 -0.478187        0       -1\n",
            "42    91.468649 -0.561880        0       -1\n",
            "43   109.753877  0.507355        0       -1\n",
            "46    93.736023 -0.429295        0       -1\n",
            "48    91.930511 -0.534873        0       -1\n",
            "63    91.368587 -0.567731        0       -1\n",
            "66    91.849008 -0.539639        0       -1\n",
            "83    92.318782 -0.512169        0       -1\n",
            "85   109.479446  0.491307        0       -1\n",
            "97   108.929352  0.459140        0       -1\n",
            "100   30.000000 -4.156281       -1       -1\n",
            "101  250.000000  8.708296       -1       -1\n"
          ]
        }
      ]
    }
  ]
}