{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6fe9bdcd",
   "metadata": {},
   "source": [
    "# Εργαστήριο 1: Εισαγωγή στην Python και την pandas\n",
    "### Μηχανική Μάθηση και Εξόρυξη Γνώσης · ΗΜΜΥ ΕΛΜΕΠΑ\n",
    "\n",
    "**Στόχος:** να εξοικειωθούμε με το Jupyter και να μάθουμε τις βασικές εντολές που θα χρειαζόμαστε για να βλέπουμε, καθαρίζουμε και προετοιμάζουμε δεδομένα για Μηχανική Μάθηση.\n",
    "\n",
    "Στο εργαστήριο **δεν θα εκπαιδεύσουμε ακόμη μοντέλα**. Θα εστιάσουμε στα δεδομένα.\n",
    "\n",
    "Θα χρησιμοποιήσουμε το κλασικό dataset **Iris**, το οποίο είναι διαθέσιμο μέσω του `scikit-learn` και δεν χρειάζεται να κατεβάσουμε αρχείο από το Internet.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7933db34",
   "metadata": {},
   "source": [
    "## 1. Jupyter Notebook\n",
    "\n",
    "Κάθε notebook αποτελείται από κελιά:\n",
    "\n",
    "- **Markdown**: κείμενο και επεξηγήσεις\n",
    "- **Code**: κώδικας Python\n",
    "- Εκτέλεση κελιού: **Shift + Enter**\n",
    "\n",
    "Ξεκινάμε εισάγοντας τις βιβλιοθήκες που θα χρησιμοποιήσουμε.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "49054339",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.datasets import load_iris"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2ac3f72",
   "metadata": {},
   "source": [
    "## 2. Πολύ σύντομη εισαγωγή στην Python\n",
    "\n",
    "Για το σημερινό εργαστήριο χρειαζόμαστε μόνο μεταβλητές, λίστες και απλές πράξεις.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "6089af83",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "15\n",
      "50\n"
     ]
    }
   ],
   "source": [
    "x = 10\n",
    "y = 5\n",
    "\n",
    "print(x + y)\n",
    "print(x * y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3d025b50",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[10, 20, 30, 40]\n",
      "10\n",
      "4\n"
     ]
    }
   ],
   "source": [
    "values = [10, 20, 30, 40]\n",
    "\n",
    "print(values)\n",
    "print(values[0])\n",
    "print(len(values))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6244381",
   "metadata": {},
   "source": [
    "### Μικρή άσκηση\n",
    "\n",
    "Αλλάξτε τις τιμές της λίστας και εμφανίστε:\n",
    "- το πρώτο στοιχείο\n",
    "- το τελευταίο στοιχείο\n",
    "- το πλήθος των στοιχείων\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "15d89dd1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "40\n"
     ]
    }
   ],
   "source": [
    "# Γράψτε εδώ τον κώδικά σας\n",
    "print(values[-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21abde6a",
   "metadata": {},
   "source": [
    "# 3. Φόρτωση του Iris dataset\n",
    "\n",
    "Το Iris περιέχει 150 παρατηρήσεις λουλουδιών και 4 αριθμητικά χαρακτηριστικά.\n",
    "\n",
    "Κάθε **γραμμή** είναι μία παρατήρηση.  \n",
    "Κάθε **στήλη** είναι ένα χαρακτηριστικό.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5041dcc5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \\\n",
       "0                5.1               3.5                1.4               0.2   \n",
       "1                4.9               3.0                1.4               0.2   \n",
       "2                4.7               3.2                1.3               0.2   \n",
       "3                4.6               3.1                1.5               0.2   \n",
       "4                5.0               3.6                1.4               0.2   \n",
       "\n",
       "   target  \n",
       "0       0  \n",
       "1       0  \n",
       "2       0  \n",
       "3       0  \n",
       "4       0  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "iris = load_iris(as_frame=True)\n",
    "\n",
    "df = iris.frame\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48f7fffe",
   "metadata": {},
   "source": [
    "## 4. Κατανόηση ενός DataFrame\n",
    "\n",
    "Οι πρώτες εντολές που πρέπει να δοκιμάζουμε σε κάθε νέο dataset είναι οι παρακάτω.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "08c5d8f9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(150, 5)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "31482f1e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)',\n",
       "       'petal width (cm)', 'target'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "237a5be4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sepal length (cm)    float64\n",
       "sepal width (cm)     float64\n",
       "petal length (cm)    float64\n",
       "petal width (cm)     float64\n",
       "target                 int64\n",
       "dtype: object"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8ffc02de",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 150 entries, 0 to 149\n",
      "Data columns (total 5 columns):\n",
      " #   Column             Non-Null Count  Dtype  \n",
      "---  ------             --------------  -----  \n",
      " 0   sepal length (cm)  150 non-null    float64\n",
      " 1   sepal width (cm)   150 non-null    float64\n",
      " 2   petal length (cm)  150 non-null    float64\n",
      " 3   petal width (cm)   150 non-null    float64\n",
      " 4   target             150 non-null    int64  \n",
      "dtypes: float64(4), int64(1)\n",
      "memory usage: 6.0 KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "77a552b4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>150.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>150.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>5.843333</td>\n",
       "      <td>3.057333</td>\n",
       "      <td>3.758000</td>\n",
       "      <td>1.199333</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.828066</td>\n",
       "      <td>0.435866</td>\n",
       "      <td>1.765298</td>\n",
       "      <td>0.762238</td>\n",
       "      <td>0.819232</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>4.300000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>5.100000</td>\n",
       "      <td>2.800000</td>\n",
       "      <td>1.600000</td>\n",
       "      <td>0.300000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>5.800000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>4.350000</td>\n",
       "      <td>1.300000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.400000</td>\n",
       "      <td>3.300000</td>\n",
       "      <td>5.100000</td>\n",
       "      <td>1.800000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>7.900000</td>\n",
       "      <td>4.400000</td>\n",
       "      <td>6.900000</td>\n",
       "      <td>2.500000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       sepal length (cm)  sepal width (cm)  petal length (cm)  \\\n",
       "count         150.000000        150.000000         150.000000   \n",
       "mean            5.843333          3.057333           3.758000   \n",
       "std             0.828066          0.435866           1.765298   \n",
       "min             4.300000          2.000000           1.000000   \n",
       "25%             5.100000          2.800000           1.600000   \n",
       "50%             5.800000          3.000000           4.350000   \n",
       "75%             6.400000          3.300000           5.100000   \n",
       "max             7.900000          4.400000           6.900000   \n",
       "\n",
       "       petal width (cm)      target  \n",
       "count        150.000000  150.000000  \n",
       "mean           1.199333    1.000000  \n",
       "std            0.762238    0.819232  \n",
       "min            0.100000    0.000000  \n",
       "25%            0.300000    0.000000  \n",
       "50%            1.300000    1.000000  \n",
       "75%            1.800000    2.000000  \n",
       "max            2.500000    2.000000  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6b907f0",
   "metadata": {},
   "source": [
    "### Τι μάθαμε;\n",
    "\n",
    "- `shape` → πόσες γραμμές και στήλες έχουμε\n",
    "- `columns` → ονόματα στηλών\n",
    "- `dtypes` → τύποι δεδομένων\n",
    "- `info()` → συνοπτική εικόνα και ελλιπείς τιμές\n",
    "- `describe()` → βασικά στατιστικά για τις αριθμητικές στήλες\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "973ffd6f",
   "metadata": {},
   "source": [
    "# 5. Επιλογή στηλών και γραμμών\n",
    "\n",
    "Η επιλογή δεδομένων είναι μία από τις συχνότερες εργασίες στην pandas.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "70e6adbf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    5.1\n",
       "1    4.9\n",
       "2    4.7\n",
       "3    4.6\n",
       "4    5.0\n",
       "Name: sepal length (cm), dtype: float64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"sepal length (cm)\"].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "9eaf0dde",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>1.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>1.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>1.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>1.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>1.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sepal length (cm)  petal length (cm)\n",
       "0                5.1                1.4\n",
       "1                4.9                1.4\n",
       "2                4.7                1.3\n",
       "3                4.6                1.5\n",
       "4                5.0                1.4"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[[\"sepal length (cm)\", \"petal length (cm)\"]].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "79402fd8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sepal length (cm)    5.1\n",
       "sepal width (cm)     3.5\n",
       "petal length (cm)    1.4\n",
       "petal width (cm)     0.2\n",
       "target               0.0\n",
       "Name: 0, dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "fabf3e70",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \\\n",
       "0                5.1               3.5                1.4               0.2   \n",
       "1                4.9               3.0                1.4               0.2   \n",
       "2                4.7               3.2                1.3               0.2   \n",
       "3                4.6               3.1                1.5               0.2   \n",
       "4                5.0               3.6                1.4               0.2   \n",
       "\n",
       "   target  \n",
       "0       0  \n",
       "1       0  \n",
       "2       0  \n",
       "3       0  \n",
       "4       0  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[0:5]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dde6bc29",
   "metadata": {},
   "source": [
    "### Φιλτράρισμα γραμμών\n",
    "\n",
    "Για παράδειγμα, επιλέγουμε μόνο λουλούδια με μήκος πετάλου μεγαλύτερο από 5 cm.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "ea264111",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>83</th>\n",
       "      <td>6.0</td>\n",
       "      <td>2.7</td>\n",
       "      <td>5.1</td>\n",
       "      <td>1.6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>6.3</td>\n",
       "      <td>3.3</td>\n",
       "      <td>6.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101</th>\n",
       "      <td>5.8</td>\n",
       "      <td>2.7</td>\n",
       "      <td>5.1</td>\n",
       "      <td>1.9</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>102</th>\n",
       "      <td>7.1</td>\n",
       "      <td>3.0</td>\n",
       "      <td>5.9</td>\n",
       "      <td>2.1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>103</th>\n",
       "      <td>6.3</td>\n",
       "      <td>2.9</td>\n",
       "      <td>5.6</td>\n",
       "      <td>1.8</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \\\n",
       "83                 6.0               2.7                5.1               1.6   \n",
       "100                6.3               3.3                6.0               2.5   \n",
       "101                5.8               2.7                5.1               1.9   \n",
       "102                7.1               3.0                5.9               2.1   \n",
       "103                6.3               2.9                5.6               1.8   \n",
       "\n",
       "     target  \n",
       "83        1  \n",
       "100       2  \n",
       "101       2  \n",
       "102       2  \n",
       "103       2  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "large_petals = df[df[\"petal length (cm)\"] > 5]\n",
    "\n",
    "large_petals.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f88268c",
   "metadata": {},
   "source": [
    "### Μικρή άσκηση\n",
    "\n",
    "Επιλέξτε μόνο τις παρατηρήσεις με `sepal width (cm) > 3.5`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "2cb7d69a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Γράψτε εδώ τον κώδικά σας\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16dead00",
   "metadata": {},
   "source": [
    "# 6. Η μεταβλητή στόχος\n",
    "\n",
    "Στο dataset η στήλη `target` περιέχει αριθμούς 0, 1, 2.\n",
    "\n",
    "Θα προσθέσουμε μία πιο κατανοητή στήλη με τα ονόματα των ειδών.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "00e7f7e2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>target</th>\n",
       "      <th>species</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \\\n",
       "0                5.1               3.5                1.4               0.2   \n",
       "1                4.9               3.0                1.4               0.2   \n",
       "2                4.7               3.2                1.3               0.2   \n",
       "3                4.6               3.1                1.5               0.2   \n",
       "4                5.0               3.6                1.4               0.2   \n",
       "\n",
       "   target species  \n",
       "0       0  setosa  \n",
       "1       0  setosa  \n",
       "2       0  setosa  \n",
       "3       0  setosa  \n",
       "4       0  setosa  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"species\"] = df[\"target\"].map({\n",
    "    0: \"setosa\",\n",
    "    1: \"versicolor\",\n",
    "    2: \"virginica\"\n",
    "})\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "bf7e2fb9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "species\n",
       "setosa        50\n",
       "versicolor    50\n",
       "virginica     50\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"species\"].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b2e0137f",
   "metadata": {},
   "source": [
    "# 7. Απλές περιγραφικές αναλύσεις με pandas\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "f7cdb1a0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "species\n",
       "setosa        5.006\n",
       "versicolor    5.936\n",
       "virginica     6.588\n",
       "Name: sepal length (cm), dtype: float64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(\"species\")[\"sepal length (cm)\"].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "939e445d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>species</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>setosa</th>\n",
       "      <td>5.006</td>\n",
       "      <td>1.462</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>versicolor</th>\n",
       "      <td>5.936</td>\n",
       "      <td>4.260</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>virginica</th>\n",
       "      <td>6.588</td>\n",
       "      <td>5.552</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            sepal length (cm)  petal length (cm)\n",
       "species                                         \n",
       "setosa                  5.006              1.462\n",
       "versicolor              5.936              4.260\n",
       "virginica               6.588              5.552"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(\"species\")[[\"sepal length (cm)\", \"petal length (cm)\"]].mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b41e5fb4",
   "metadata": {},
   "source": [
    "### Νέα στήλη\n",
    "\n",
    "Μπορούμε εύκολα να δημιουργήσουμε ένα νέο χαρακτηριστικό.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "e7b016e5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>petal_ratio</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>6.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>7.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   petal length (cm)  petal width (cm)  petal_ratio\n",
       "0                1.4               0.2          7.0\n",
       "1                1.4               0.2          7.0\n",
       "2                1.3               0.2          6.5\n",
       "3                1.5               0.2          7.5\n",
       "4                1.4               0.2          7.0"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"petal_ratio\"] = df[\"petal length (cm)\"] / df[\"petal width (cm)\"]\n",
    "\n",
    "df[[\"petal length (cm)\", \"petal width (cm)\", \"petal_ratio\"]].head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74be82d5",
   "metadata": {},
   "source": [
    "# 8. Απλά διαγράμματα\n",
    "\n",
    "Στόχος δεν είναι να μάθουμε όλες τις επιλογές του matplotlib.  \n",
    "Χρησιμοποιούμε μόνο λίγες βασικές εντολές.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "10efe56a",
   "metadata": {},
   "source": [
    "## Ιστόγραμμα\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "7f3ada37",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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OAAAAH80KtB88cUXuuaaa+pdnp+fr+Li4pMuCgAAoDEaFWh++OGHOj+uXSMhIUE//vjjSRcFAADQGI0KNGeccYY2bNhQ7/L169crKyvrpIsCAABojEYFmgEDBujRRx/VkSNHai07fPiwJk+erEGDBgWtOAAAAH806mPbDz/8sN555x116tRJ999/v84++2w5HA599dVXeuGFF1RVVaVJkyaFqlYAAIA6NSrQZGRk6JNPPtFvf/tbTZw4UcYYSZLD4VD//v314osvKiMjIySFAgAA1KfRf1gvNzdXixYtUnl5ubZs2SJjjDp27KjTTjstFPUBAACcUEB/KViSTjvtNF1yySXBrAUAACAgAX2XEwAAQCQh0AAAAOsRaAAAgPUINAAAwHoEGgAAYD0CDQAAsB6BBgAAWI9AAwAArEegAQAA1iPQAAAA6xFoAACA9Qg0AADAegQaAABgPQINAACwHoEGAABYj0ADAACsR6ABAADWI9AAAADrEWgAAID1CDQAAMB6BBoAAGA9Ag0AALAegQYAAFiPQAMAAKxHoAEAANYj0AAAAOsRaAAAgPUINAAAwHphDTTLly/Xddddp+zsbDkcDs2fP99nuTFGLpdL2dnZat68ufr06aMvv/wyPMUCAICIFdZAc/DgQV1wwQWaPn16ncunTZumZ555RtOnT9fq1auVmZmpvLw87d+/v4krBQAAkSwhnAe/9tprde2119a5zBij5557TpMmTdKQIUMkSa+//royMjI0Z84cjRgxos7t3G633G63d7qyslKS5PF45PF4gtxB6NXUHMzanfEmaPsKFWec8fkZS+g99nq3oe9QvX6G4jXOBrHat+R/7409Nw5jTET8BjkcDs2bN0+DBw+WJH333Xfq0KGD1q5dq27dunnXu/7669WyZUu9/vrrde7H5XJpypQptebPmTNHSUlJIakdAAAE16FDhzR06FBVVFQoJSXlhOuH9QpNQ0pLSyVJGRkZPvMzMjL0/fff17vdxIkTNXbsWO90ZWWlcnJylJ+f79cJiTQej0dFRUXKy8tTYmJiUPbZ1VUYlP2EkjPO6PHu1XpkTZzc1Y5wl9Ok6D32ereh742u/iHZbyhe42wQq31L/vdec4fFXxEbaGo4HL6/3MaYWvN+zul0yul01pqfmJho9ZMmmPW7qyLzBbMu7mqHVfUGE73HXu+R3Heo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S5bom2++kSR98cUXWrlypQYMGFDvNsEadwJNGM2dO1dr167Vk08+6df6WVlZevnll/X222/rnXfe0dlnn61+/fpp+fLlIa40uHr06KHZs2ersLBQr7zyikpLS9WrVy/t2bOnzvVLS0trfRlpRkaGjh07pt27dzdFyUHT2N6jZcy/++47zZgxQx07dlRhYaHuvfdePfDAA5o9e3a920TLuAfSe7SM+8/Nnz9f+/bt07Bhw+pdJ1rG/Of86Tuaxvuhhx7SrbfeqnPOOUeJiYnq1q2bxowZo1tvvbXebYI27o26noOg2bZtm0lPTzfr1q3zzjvRLae6DBo0yFx33XVBrq5pHThwwGRkZJinn366zuUdO3Y0U6dO9Zm3cuVKI8ns2rWrKUoMmRP1XhcbxzwxMdH07NnTZ96oUaMavKQcLeMeSO91sXHcfy4/P98MGjSowXWiZcx/zp++62LreL/55pvmzDPPNG+++aZZv369mT17tmnVqpWZNWtWvdsEa9y5QhMmxcXFKisr08UXX6yEhAQlJCRo2bJl+stf/qKEhASfN5Q15LLLLtPmzZtDXG1onXrqqTrvvPPq7SMzM1OlpaU+88rKypSQkKDWrVs3RYkhc6Le62LjmGdlZalLly4+8zp37qxt27bVu020jHsgvdfFxnGv8f3332vx4sW6++67G1wvWsa8hr9918XW8f7P//xPTZgwQbfccovOO+883XHHHXrwwQcbvBMRrHEn0IRJv379tGHDBq1bt8776N69u2677TatW7fOr0++SNLnn3+urKysEFcbWm63W1999VW9ffTs2VNFRUU+8z744AN1795diYmJTVFiyJyo97rYOOaXX365Nm3a5DPvm2++afBLZqNl3APpvS42jnuNmTNnKj09XQMHDmxwvWgZ8xr+9l0XW8f70KFDiovzjRbx8fENfmw7aOMe8HUlBN3xt5wmTJhg7rjjDu/0s88+a+bNm2e++eYbs3HjRjNhwgQjybz99tthqDZwv/vd78zSpUvNd999Zz799FMzaNAgk5ycbLZu3WqMqd33d999Z5KSksyDDz5o/v3vf5tXX33VJCYmmn/84x/haiFgje09Wsb8X//6l0lISDBPPPGE2bx5s/n73/9ukpKSzBtvvOFdJ1rHPZDeo2XcjTGmqqrKtGnTxjz00EO1lkXrmBvTuL6jabwLCgrMGWecYf73f//XlJSUmHfeecekpaWZ8ePHe9cJ1bgTaCLI8YGmoKDA9O7d2zv91FNPmQ4dOphmzZqZ0047zVxxxRVm4cKFTV/oSbr55ptNVlaWSUxMNNnZ2WbIkCHmyy+/9C4/vm9jjFm6dKnp1q2bOeWUU0zbtm3NjBkzmrjq4Ghs79Ey5sYY8+6775quXbsap9NpzjnnHPPyyy/7LI/mcW9s79E07oWFhUaS2bRpU61l0Tzmjek7msa7srLSjB492rRp08Y0a9bMtG/f3kyaNMm43W7vOqEad4cxxvh/PQcAACDy8B4aAABgPQINAACwHoEGAABYj0ADAACsR6ABAADWI9AAAADrEWgAAID1CDQAAMB6BBoAIeFwODR//vx6l/fp00djxoxpsnoasnTpUjkcDu3bt6/R27766qvKz88PflE/M336dP3yl78M6TEA2xFogChSVlamESNGqE2bNnI6ncrMzFT//v21atWqcJcWMYIZpNxutx599FE98sgjQdlffYYPH67Vq1dr5cqVIT0OYLOEcBcAIHhuuOEGeTwevf7662rfvr1++OEHLVmyRHv37g13aVHp7bffVosWLfSLX/wipMdxOp0aOnSonn/+eV1xxRUhPRZgK67QAFFi3759WrlypZ566in17dtXubm5uvTSSzVx4kQNHDjQu15FRYXuuecepaenKyUlRVdddZW++OIL73KXy6ULL7xQL730knJycpSUlKQbb7zR53bM6tWrlZeXp7S0NKWmpqp3795au3btSdV/9OhRjR8/XmeccYZOPfVU9ejRQ0uXLvUunzVrllq2bKnCwkJ17txZLVq00DXXXKNdu3Z51zl27JgeeOABtWzZUq1bt9ZDDz2kgoICDR48WJI0bNgwLVu2TH/+85/lcDjkcDi0detW7/bFxcXq3r27kpKS1KtXL23atKnBmufOnVvnraDXXntN5557rpxOp7KysnT//fd7lzkcDr300ksaNGiQkpKS1LlzZ61atUpbtmxRnz59dOqpp6pnz5769ttvffb5y1/+UvPnz9fhw4cbcVaB2EGgAaJEixYt1KJFC82fP19ut7vOdYwxGjhwoEpLS7Vo0SIVFxfroosuUr9+/Xyu4mzZskX//d//rXfffVfvv/++1q1bp5EjR3qX79+/XwUFBVqxYoU+/fRTdezYUQMGDND+/fsDrv83v/mNPv74Y82dO1fr16/XjTfeqGuuuUabN2/2rnPo0CH913/9l/72t79p+fLl2rZtm8aNG+dd/tRTT+nvf/+7Zs6cqY8//liVlZU+7+P585//rJ49e2r48OHatWuXdu3apZycHO/ySZMm6emnn9aaNWuUkJCgu+66q8GaV6xYoe7du/vMmzFjhkaOHKl77rlHGzZs0IIFC3TWWWf5rPP444/rzjvv1Lp163TOOedo6NChGjFihCZOnKg1a9ZIkk8IkqTu3bvL4/HoX//6l38nFIg1J/U94QAiyj/+8Q9z2mmnmWbNmplevXqZiRMnmi+++MK7fMmSJSYlJcUcOXLEZ7sOHTqYl156yRhjzOTJk018fLzZvn27d/l7771n4uLizK5du+o87rFjx0xycrJ59913vfMkmXnz5tVba+/evc3o0aONMcZs2bLFOBwOs2PHDp91+vXrZyZOnGiMMWbmzJlGktmyZYt3+QsvvGAyMjK80xkZGeZPf/qTT11t2rQx119/fZ3HrfHRRx8ZSWbx4sXeeQsXLjSSzOHDh+usv7y83Egyy5cv95mfnZ1tJk2aVG/fkszDDz/snV61apWRZF599VXvvDfffNM0a9as1rannXaamTVrVr37BmIZV2iAKHLDDTdo586dWrBggfr376+lS5fqoosu0qxZsyT9dEvlwIEDat26tfeKTosWLVRSUuJzi6NNmzY688wzvdM9e/ZUdXW19xZMWVmZ7r33XnXq1EmpqalKTU3VgQMHtG3btoDqXrt2rYwx6tSpk09dy5Yt86krKSlJHTp08E5nZWWprKxM0k+30n744Qddeuml3uXx8fG6+OKL/a7j/PPP99l3Ta91qbn106xZM++8srIy7dy5U/369fP7OBkZGZKk8847z2fekSNHVFlZ6bNd8+bNdejQIX9aAWIObwoGokyzZs2Ul5envLw8Pfroo7r77rs1efJkDRs2TNXV1crKyvJ5b0qNli1b1rtPh8Ph83PYsGH68ccf9dxzzyk3N1dOp1M9e/bU0aNHA6q5urpa8fHxKi4uVnx8vM+yFi1aeP+dmJhYqy5jTJ211jh+eUN+vv+a/VRXV9e5buvWreVwOFReXu6d17x584CP48+x9+7dq9NPP92vYwCxhis0QJTr0qWLDh48KEm66KKLVFpaqoSEBJ111lk+j7S0NO8227Zt086dO73Tq1atUlxcnDp16iTpp/eOPPDAAxowYID3za+7d+8OuMZu3bqpqqpKZWVlterKzMz0ax+pqanKyMjweY9JVVWVPv/8c5/1TjnlFFVVVQVc68/306VLF/373//2zktOTlbbtm21ZMmSk97/8b799lsdOXJE3bp1C/q+gWhAoAGixJ49e3TVVVfpjTfe0Pr161VSUqL/+Z//0bRp03T99ddLkq6++mr17NlTgwcPVmFhobZu3apPPvlEDz/8sPfNqNJPV3kKCgr0xRdfeMPLTTfd5A0XZ511lv72t7/pq6++0meffabbbrvN76sTdenUqZNuu+023XnnnXrnnXdUUlKi1atX66mnntKiRYv83s+oUaP05JNP6p///Kc2bdqk0aNHq7y83OeqTdu2bfXZZ59p69at2r17d71XYPzRv3//Wn8bxuVy6emnn9Zf/vIXbd68WWvXrtXzzz8f8DFqrFixQu3bt/e55Qbg/+OWExAlWrRooR49eujZZ5/Vt99+K4/Ho5ycHA0fPly///3vJf10K2PRokWaNGmS7rrrLv3444/KzMzUlVde6X0vh/RTYBkyZIgGDBigvXv3asCAAXrxxRe9y1977TXdc8896tatm9q0aaOpU6f6fNooEDNnztQf/vAH/e53v9OOHTvUunVr9ezZUwMGDPB7Hw899JBKS0t15513Kj4+Xvfcc4/69+/vcxtr3LhxKigoUJcuXXT48GGVlJQEXPPw4cN10UUXqaKiQqmpqZKkgoICHTlyRM8++6zGjRuntLQ0/frXvw74GDXefPNNDR8+/KT3A0Qrh2nMDWYAUc/lcmn+/Plat25duEs5adXV1ercubNuuukmPf744yE5xk033aRu3bpp4sSJIdm/JG3cuFH9+vXTN9984w1OAHxxywlA1Pj+++/1yiuv6JtvvtGGDRv029/+ViUlJRo6dGjIjvmnP/3J543LobBz507Nnj2bMAM0gFtOAKJGXFycZs2apXHjxskYo65du2rx4sXq3LlzyI6Zm5urUaNGhWz/kkL+5ZdANOCWEwAAsB63nAAAgPUINAAAwHoEGgAAYD0CDQAAsB6BBgAAWI9AAwAArEegAQAA1iPQAAAA6/0/ktjZPJ7FyE8AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df[\"sepal length (cm)\"].hist()\n",
    "\n",
    "plt.xlabel(\"Sepal length (cm)\")\n",
    "plt.ylabel(\"Count\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24baa9fc",
   "metadata": {},
   "source": [
    "## Scatter plot\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "667dfd2f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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ZSUOHDiAxYsXY/v27Zg+fbrm9yTzmNg/GfkzhiDJ6nmrJ8kag/wZQ7jOChFRmFDcDSTLMubMmQOLxeJ+7OLFi3jooYdwxRVXuB/78MMPFR/8u+++w8yZM1FTUwOr1YrrrrsOmzZtwrhx4xS/B5nbxP7JGJeRxBVsiYjCmOKalV/84heK3rCwsNCvgNRgzQoREVHo0W2dFSOTECIiIiIX1cvtExERERmJyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCS2oyUpeXh5uuOEGdOjQAYmJibjzzjtx+PDhYIZEREREgglqsrJjxw4sWLAAu3fvxpYtW9DU1ITx48fj3LlzwQyLiIiIBCLJsiwHOwiX77//HomJidixYwdGjRrV5ni73Q6r1QqbzYb4+HgDIiQiIiJ/qf3+jjIgJsVsNhsAICEhwevzDQ0NaGhocP9ut9sNiYuIiIiCR5gCW1mW8fjjj2PEiBHo37+/1zF5eXmwWq3un5SUFIOjJCIiIqMJcxtowYIF+OSTT7Br1y5ceeWVXsd4u7KSkpLC20AB4nDK2FNRj7qzF5HYIQbD0hMQGSEFOyxh4yIiIm1C8jbQww8/jA0bNmDnzp2tJioAYLFYYLFYDIwsfGw6WIOlG8tRY7vofizZGoMlt2dgYv9kxkVEREET1NtAsizjV7/6FT788ENs27YN6enpwQwnbG06WIP560o9EgIAqLVdxPx1pdh0sIZxERFR0AQ1WVmwYAHWrVuH9957Dx06dEBtbS1qa2tx4cKFYIYVVhxOGUs3lsPbvUDXY0s3lsPhNPZuoahxERGR8YKarOTn58Nm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uusUjT98+LDHqn9du3bVKzTdXHvttfjss8/cv0dGRrY6tqKiAllZWcjOzsa6devwxRdf4Je//CW6du2Ku+66y4hwA0rN3F3McM5Pnz6Nm2++Gbfeeis+/fRTJCYm4ujRo+jYsWOrrzHDudcyb5dQP+979+6Fw+Fw/37w4EGMGzcOd999t9fxZjjfLmrn7hLq53zFihV444038M477+Daa6/Fl19+iV/84hewWq3Iycnx+pqAnXeZdHP27Fn56quvlrds2SKPHj1azsnJaXXs559/LgOQT58+bVh8eliyZIk8cOBAxeOffPJJuW/fvh6PzZs3T77pppsCHJn+1M7dLOdclmV50aJF8ogRI1S9xgznXsu8zXTeL5WTkyP37t1bdjqdXp83w/luTVtzN8s5nzx5sjx37lyPx372s5/JM2bMaPU1gTrvvA2kowULFmDy5Mm47bbbFL9m8ODBSE5OxtixY/H555/rGJ1+jhw5gu7duyM9PR3Tpk3DsWPHWh1bUlKC8ePHezw2YcIEfPnll/jpp5/0DjXg1MzdxQznfMOGDRg6dCjuvvtuJCYmYvDgwSgoKPD5GjOcey3zdjHDeXdpbGzEunXrMHfu3FY3lTXD+fZGydxdQv2cjxgxAlu3bsU333wDANi/fz927dqFrKysVl8TqPPOZEUn69evR2lpKfLy8hSNT05OxqpVq/DBBx/gww8/xDXXXIOxY8di586dOkcaWDfeeCPWrFmDzZs3o6CgALW1tRg+fDhOnTrldXxtbS26devm8Vi3bt3Q1NSEH374wYiQA0bt3M1yzgHg2LFjyM/Px9VXX43NmzfjoYcewiOPPII1a9a0+hoznHst8zbTeXf5+OOPcebMGcyZM6fVMWY4394ombtZzvmiRYtw7733om/fvmjXrh0GDx6MRx99FPfee2+rrwnYeVd1HYYUqaqqkhMTE+WysjL3Y23dBvJmypQp8u233x7g6Iz1448/yt26dZNfeeUVr89fffXV8vLlyz0e27VrlwxArqmpMSJE3bQ1d29C9Zy3a9dOzszM9Hjs4Ycf9nmp1wznXsu8vQnV8+4yfvx4ecqUKT7HmOF8e6Nk7t6E4jl///335SuvvFJ+//335a+++kpes2aNnJCQIK9evbrV1wTqvPPKig727duHuro6XH/99YiKikJUVBR27NiB119/HVFRUR6FWb7cdNNNOHLkiM7R6uuKK67AgAEDWp1HUlISamtrPR6rq6tDVFQUOnfubESIumlr7t6E6jlPTk5GRkaGx2P9+vVDVVVVq68xw7nXMm9vQvW8A8Dx48fx2Wef4YEHHvA5zgzn+3JK5+5NKJ7zX//613jqqacwbdo0DBgwADNnzsRjjz3m8w5CoM47kxUdjB07FgcOHEBZWZn7Z+jQoZg+fTrKysoUdYgAwD//+U8kJyfrHK2+GhoacOjQoVbnkZmZiS1btng89j//8z8YOnQo2rVrZ0SIumlr7t6E6jm/+eabcfjwYY/HvvnmG6Smprb6GjOcey3z9iZUzzsAFBYWIjExEZMnT/Y5zgzn+3JK5+5NKJ7z8+fPIyLCM22IjIz02bocsPOu+XoQqXL5baCnnnpKnjlzpvv3V199Vf7oo4/kb775Rj548KD81FNPyQDkDz74IAjRavfEE0/I27dvl48dOybv3r1bnjJlityhQwe5srJSluWW8z527JgcGxsrP/bYY3J5ebn81ltvye3atZP/9re/BWsKmqmdu1nOuSzL8p49e+SoqCh52bJl8pEjR+R3331Xjo2NldetW+ceY8Zzr2XeZjrvDodD7tmzp7xo0aIWz5nxfF9KzdzNcs5nz54t9+jRQ/7v//5vuaKiQv7www/lLl26yE8++aR7jF7nncmKQS5PVmbPni2PHj3a/fuKFSvk3r17yzExMXKnTp3kESNGyJ988onxgfrp5z//uZycnCy3a9dO7t69u/yzn/1M/vrrr93PXz5vWZbl7du3y4MHD5ajo6PltLQ0OT8/3+CoA0Pt3M1yzl02btwo9+/fX7ZYLHLfvn3lVatWeTxv1nOvdt5mOu+bN2+WAciHDx9u8ZxZz7eLmrmb5Zzb7XY5JydH7tmzpxwTEyP36tVLXrx4sdzQ0OAeo9d5l2RZlpVfhyEiIiIyFmtWiIiISGhMVoiIiEhoTFaIiIhIaExWiIiISGhMVoiIiEhoTFaIiIhIaExWiIiISGhMVoiIiEhoTFaISDVJkvDxxx+3+vwtt9yCRx991LB4fNm+fTskScKZM2dUv/att97C+PHjAx/UJf74xz9i6tSpuh6DKNQxWSEKEXV1dZg3bx569uwJi8WCpKQkTJgwASUlJcEOTRiBTJIaGhrw3HPP4dlnnw3I+7UmOzsbe/fuxa5du3Q9DlEoiwp2AESkzF133YWffvoJ77zzDnr16oXvvvsOW7duRX19fbBDM6UPPvgAcXFxGDlypK7HsVgsuO+++/CHP/wBI0aM0PVYRKGKV1aIQsCZM2ewa9curFixArfeeitSU1MxbNgw5ObmemxPb7PZ8OCDDyIxMRHx8fEYM2YM9u/f737++eefx6BBg7By5UqkpKQgNjYWd999t8ctkr1792LcuHHo0qULrFYrRo8ejdLSUr/ib2xsxJNPPokePXrgiiuuwI033ojt27e7n1+9ejU6duyIzZs3o1+/foiLi8PEiRNRU1PjHtPU1IRHHnkEHTt2ROfOnbFo0SLMnj0bd955JwBgzpw52LFjB37/+99DkiRIkoTKykr36/ft24ehQ4ciNjYWw4cPx+HDh33GvH79eq+3Z95++21ce+21sFgsSE5Oxq9+9Sv3c5IkYeXKlZgyZQpiY2PRr18/lJSU4Ntvv8Utt9yCK664ApmZmTh69KjHe06dOhUff/wxLly4oOJTJQofTFaIQkBcXBzi4uLw8ccfo6GhwesYWZYxefJk1NbWoqioCPv27cOQIUMwduxYj6sv3377Lf7yl79g48aN2LRpE8rKyrBgwQL382fPnsXs2bNRXFyM3bt34+qrr0ZWVhbOnj2rOf5f/OIX+OKLL7B+/Xp89dVXuPvuuzFx4kQcOXLEPeb8+fP43e9+h7Vr12Lnzp2oqqrCwoUL3c+vWLEC7777LgoLC/HFF1/Abrd71M38/ve/R2ZmJrKzs1FTU4OamhqkpKS4n1+8eDFeeeUVfPnll4iKisLcuXN9xlxcXIyhQ4d6PJafn48FCxbgwQcfxIEDB7BhwwZcddVVHmNefPFFzJo1C2VlZejbty/uu+8+zJs3D7m5ufjyyy8BwCPBAYChQ4fip59+wp49e5R9oEThxq/9oonIMH/729/kTp06yTExMfLw4cPl3Nxcef/+/e7nt27dKsfHx8sXL170eF3v3r3llStXyrIsy0uWLJEjIyPl6upq9/OffvqpHBERIdfU1Hg9blNTk9yhQwd548aN7scAyB999FGrsY4ePVrOycmRZVmWv/32W1mSJPnEiRMeY8aOHSvn5ubKsizLhYWFMgD522+/dT//X//1X3K3bt3cv3fr1k1++eWXPeLq2bOnfMcdd3g9rsvnn38uA5A/++wz92OffPKJDEC+cOGC1/hPnz4tA5B37tzp8Xj37t3lxYsXtzpvAPIzzzzj/r2kpEQGIL/11lvux95//305JiamxWs7deokr169utX3JgpnvLJCFCLuuusunDx5Ehs2bMCECROwfft2DBkyBKtXrwbQfJvjxx9/ROfOnd1XYuLi4lBRUeFx26Fnz5648sor3b9nZmbC6XS6b4vU1dXhoYceQp8+fWC1WmG1WvHjjz+iqqpKU9ylpaWQZRl9+vTxiGvHjh0eccXGxqJ3797u35OTk1FXVweg+fbWd999h2HDhrmfj4yMxPXXX684juuuu87jvV1z9cZ1OyYmJsb9WF1dHU6ePImxY8cqPk63bt0AAAMGDPB47OLFi7Db7R6va9++Pc6fP69kKkRhhwW2RCEkJiYG48aNw7hx4/Dcc8/hgQcewJIlSzBnzhw4nU4kJyd71IK4dOzYsdX3lCTJ43/nzJmD77//Hq+99hpSU1NhsViQmZmJxsZGTTE7nU5ERkZi3759iIyM9HguLi7O/d/t2rVrEZcsy15jdbn8eV8ufX/X+zidTq9jO3fuDEmScPr0afdj7du313wcJceur69H165dFR2DKNzwygpRCMvIyMC5c+cAAEOGDEFtbS2ioqJw1VVXefx06dLF/ZqqqiqcPHnS/XtJSQkiIiLQp08fAM21Go888giysrLchaQ//PCD5hgHDx4Mh8OBurq6FnElJSUpeg+r1Ypu3bp51HQ4HA7885//9BgXHR0Nh8OhOdZL3ycjIwPl5eXuxzp06IC0tDRs3brV7/e/3NGjR3Hx4kUMHjw44O9NZAZMVohCwKlTpzBmzBisW7cOX331FSoqKvDXv/4Vv/3tb3HHHXcAAG677TZkZmbizjvvxObNm1FZWYn//d//xTPPPOMu7ASar87Mnj0b+/fvdycm99xzjztxuOqqq7B27VocOnQI//jHPzB9+nTFVxW86dOnD6ZPn45Zs2bhww8/REVFBfbu3YsVK1agqKhI8fs8/PDDyMvLw9///nccPnwYOTk5OH36tMfVlrS0NPzjH/9AZWUlfvjhh1avnCgxYcKEFmufPP/883jllVfw+uuv48iRIygtLcUf/vAHzcdwKS4uRq9evTxugxHRv/E2EFEIiIuLw4033ohXX30VR48exU8//YSUlBRkZ2fj6aefBtB8e6GoqAiLFy/G3Llz8f333yMpKQmjRo1y104AzcnIz372M2RlZaG+vh5ZWVn405/+5H7+7bffxoMPPojBgwejZ8+eWL58uUdXjhaFhYV46aWX8MQTT+DEiRPo3LkzMjMzkZWVpfg9Fi1ahNraWsyaNQuRkZF48MEHMWHCBI9bSwsXLsTs2bORkZGBCxcuoKKiQnPM2dnZGDJkCGw2G6xWKwBg9uzZuHjxIl599VUsXLgQXbp0wX/+539qPobL+++/j+zsbL/fh8isJFnNTV8iCmnPP/88Pv74Y5SVlQU7FL85nU7069cP99xzD1588UVdjnHPPfdg8ODByM3N1eX9AeDgwYMYO3YsvvnmG3dSRESeeBuIiELC8ePHUVBQgG+++QYHDhzA/PnzUVFRgfvuu0+3Y7788sseRcB6OHnyJNasWcNEhcgH3gYiopAQERGB1atXY+HChZBlGf3798dnn32Gfv366XbM1NRUPPzww7q9PwDdN0okMgPeBiIiIiKh8TYQERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQmNyQoREREJjckKERERCY3JChEREQnt/wMINQO2kzo2JQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(df[\"sepal length (cm)\"], df[\"petal length (cm)\"])\n",
    "\n",
    "plt.xlabel(\"Sepal length (cm)\")\n",
    "plt.ylabel(\"Petal length (cm)\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51d4b276",
   "metadata": {},
   "source": [
    "## Boxplot\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "444333a4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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KpWF2hUKBTceA+M6pfKC2yqVF9xWDUef9Vgm7qOzevVquLq6onPnzqYuhYiIiCTE5Ht08vPzsXr1avTt2xdyucnLISIiKlZWVhYSEhL0WuZJdg6OnkuEg/NJ2FoVPirxIj4+PjwH9SWZPFns3bsX169fR//+/U1dChER0QslJCSgSZMmpVp2dimWiY+PR+PGjUs1Hz1j8qDTsWNHlJHzoYmIiF7Ix8cH8fHxei1z+c4jjPrtHOa/54t67vZ6z0cvx+RBh4iIqLywtrbWew+L2bVUKA9lo37DRvD3dDJSZVScMnEyMhEREZExMOgQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkMegQERGRZDHoEBERkWQx6BAREZFkmTzo3Lp1C3369IGTkxOsra3h7++P+Ph4U5dFREREEiA35eQPHz5EQEAA2rZti507d8LV1RWJiYmwt7c3ZVlEREQkESYNOt999x08PDywevVqTZuXl5fpCiIiIiJJMWnQ2b59Ozp16oT33nsPsbGxqFatGgYPHoxPP/20yP45OTnIycnRvM7IyAAAqFQqqFSqV1Kz1BWsR65PKuu4rVJ5oVarNX9zezUMfdajTAghjFjLC1laWgIARo0ahffeew9//vknRo4cieXLl+Ojjz4q1H/atGkIDw8v1L5hwwZYW1sbvV4iIiJ93XgCzD0nxxhfNTxsTV2NNGRlZaFXr15IT0+HnZ3dC/uaNOhYWFigadOmOHr0qKZt+PDhOHHiBI4dO1aof1F7dDw8PPDgwYMSPyjpRqVSITo6GsHBwVAoFKYuh6hY3FapvPjrehrCVp5ExKdN0aiGo6nLkYSMjAw4OzvrFHRMeujK3d0dDRo00GqrX78+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dYWdnR0+++wz5ObmapYVQmD27NmoVasWrKys0KhRI0RERGiNf+HCBXTu3Bl2dnaoVKkSAgMDkZiYCKDwoauSxnv48CF69+4NFxcXWFlZoU6dOli9erVxVxARGR0fAUFERnHnzh188MEHmD17Nt599108fvwYhw4dQsFO5H379sHS0hIxMTFITk7Gxx9/DGdnZ80t9L/66itERkZi6dKlqFOnDg4ePIg+ffrAxcUFQUFBuHXrFlq3bo02bdpg//79sLOzw5EjR6BWq4usp6TxJk+ejIsXL2Lnzp1wdnbGlStXkJ2d/crWFxEZBw9dEZFRnDp1Ck2aNEFycjI8PT213uvXrx9+//133LhxA9bW1gCAZcuWYezYsUhPT0d2djacnZ2xf/9+tGzZUrPcJ598gqysLGzYsAETJ07Epk2bcPnyZSgUikLz9+vXD48ePcK2bduQmZlZ4njvvPMOnJ2d8dNPPxlpjRCRKXCPDhEZRaNGjdC+fXv4+vqiU6dO6NixI8LCwuDg4KB5vyDkAEDLli3x5MkT3LhxA/fu3cPTp08RHBysNWZubi5ef/11AMCZM2cQGBhYZMh53sWLF0scb9CgQfjPf/6DU6dOoWPHjujWrRtatWr1UuuAiEyPQYeIjMLc3BzR0dE4evQo9uzZg0WLFmHSpEk4fvz4C5eTyWTIz88HAOzYsQPVqlXTel+pVAIArKysdK5Fl/FCQkJw7do17NixA3v37kX79u0xZMgQzJ07V+d5iKjsYdAhIqORyWQICAhAQEAApkyZAk9PT2zduhUA8NdffyE7O1sTWOLi4mBra4vq1avDwcEBSqUS169fR1BQUJFj+/n5Ye3atVCpVCXu1WnQoEGJ4wGAi4sL+vXrh379+iEwMBBjx45l0CEq5xh0iMgojh8/jn379qFjx45wdXXF8ePHcf/+fdSvXx9nz55Fbm4uBgwYgK+++grXrl3D1KlTMXToUJiZmaFSpUoYM2YMvvjiC+Tn5+PNN99ERkYGjh49CltbW/Tt2xdDhw7FokWL0LNnT0yYMAGVK1dGXFwcmjdvjnr16mnVost4U6ZMQZMmTfDaa68hJycHUVFRqF+/vonWHhEZCoMOERmFnZ0dDh48iIULFyIjIwOenp6YN28eQkJCsHnzZrRv3x516tRB69atkZOTg549e2LatGma5WfMmAFXV1fMmjULV69ehb29PRo3boyJEycCAJycnLB//36MHTsWQUFBMDc3h7+/PwICAoqsp6TxLCwsMGHCBCQnJ8PKygqBgYHYtGmT0dcTERkXr7oiolfu31dEEREZE28YSERERJLFoENERESSxUNXREREJFnco0NERESSxaBDREREksWgQ0RERJLFoENERESSxaBDREREksWgQ0RERJLFoENERESSxaBDREREkvX/AE3gcdGiFb8KAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.boxplot(column=\"petal length (cm)\", by=\"species\")\n",
    "\n",
    "plt.ylabel(\"Petal length (cm)\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eabf36dd",
   "metadata": {},
   "source": [
    "### Μικρή άσκηση\n",
    "\n",
    "Φτιάξτε scatter plot με:\n",
    "- x: `petal length (cm)`\n",
    "- y: `petal width (cm)`\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "19947a09",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Γράψτε εδώ τον κώδικά σας\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d08b10e4",
   "metadata": {},
   "source": [
    "# 9. Ελλιπείς τιμές\n",
    "\n",
    "Το Iris δεν έχει ελλιπείς τιμές. Για να εξασκηθούμε, θα δημιουργήσουμε αντίγραφο και θα αφαιρέσουμε μερικές τιμές.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "2a9c5a4d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>target</th>\n",
       "      <th>species</th>\n",
       "      <th>petal_ratio</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>NaN</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>7.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>7.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>6.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>7.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>7.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5.4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.7</td>\n",
       "      <td>0.4</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>4.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.4</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.3</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>4.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.4</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>7.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>4.4</td>\n",
       "      <td>2.9</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>7.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.1</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>15.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>5.4</td>\n",
       "      <td>3.7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>7.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>4.8</td>\n",
       "      <td>3.4</td>\n",
       "      <td>1.6</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>setosa</td>\n",
       "      <td>8.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \\\n",
       "0                 NaN               3.5                1.4               0.2   \n",
       "1                 4.9               3.0                1.4               0.2   \n",
       "2                 4.7               3.2                1.3               0.2   \n",
       "3                 4.6               3.1                1.5               0.2   \n",
       "4                 5.0               3.6                1.4               0.2   \n",
       "5                 5.4               NaN                1.7               0.4   \n",
       "6                 4.6               3.4                1.4               0.3   \n",
       "7                 5.0               3.4                1.5               0.2   \n",
       "8                 4.4               2.9                1.4               0.2   \n",
       "9                 4.9               3.1                1.5               0.1   \n",
       "10                5.4               3.7                NaN               0.2   \n",
       "11                4.8               3.4                1.6               0.2   \n",
       "\n",
       "    target species  petal_ratio  \n",
       "0        0  setosa     7.000000  \n",
       "1        0  setosa     7.000000  \n",
       "2        0  setosa     6.500000  \n",
       "3        0  setosa     7.500000  \n",
       "4        0  setosa     7.000000  \n",
       "5        0  setosa     4.250000  \n",
       "6        0  setosa     4.666667  \n",
       "7        0  setosa     7.500000  \n",
       "8        0  setosa     7.000000  \n",
       "9        0  setosa    15.000000  \n",
       "10       0  setosa     7.500000  \n",
       "11       0  setosa     8.000000  "
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_missing = df.copy()\n",
    "\n",
    "df_missing.loc[0, \"sepal length (cm)\"] = None\n",
    "df_missing.loc[5, \"sepal width (cm)\"] = None\n",
    "df_missing.loc[10, \"petal length (cm)\"] = None\n",
    "\n",
    "df_missing.head(12)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8573b0ec",
   "metadata": {},
   "source": [
    "## Εντοπισμός ελλιπών τιμών\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "78dcb87b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sepal length (cm)    1\n",
       "sepal width (cm)     1\n",
       "petal length (cm)    1\n",
       "petal width (cm)     0\n",
       "target               0\n",
       "species              0\n",
       "petal_ratio          0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_missing.isna().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df0410b3",
   "metadata": {},
   "source": [
    "## Επιλογή 1: διαγραφή γραμμών\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "05521cb9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(150, 7)\n",
      "(147, 7)\n"
     ]
    }
   ],
   "source": [
    "df_drop = df_missing.dropna()\n",
    "\n",
    "print(df_missing.shape)\n",
    "print(df_drop.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a2d709c",
   "metadata": {},
   "source": [
    "## Επιλογή 2: συμπλήρωση με τη διάμεσο\n",
    "\n",
    "Στα πραγματικά έργα δεν υπάρχει μία λύση που είναι πάντα σωστή. Η επιλογή εξαρτάται από τα δεδομένα και το πρόβλημα.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "a1585c01",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sepal length (cm)    0\n",
       "sepal width (cm)     1\n",
       "petal length (cm)    1\n",
       "petal width (cm)     0\n",
       "target               0\n",
       "species              0\n",
       "petal_ratio          0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "median_value = df_missing[\"sepal length (cm)\"].median()\n",
    "\n",
    "df_missing[\"sepal length (cm)\"] = df_missing[\"sepal length (cm)\"].fillna(median_value)\n",
    "\n",
    "df_missing.isna().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2ae47ea3",
   "metadata": {},
   "source": [
    "### Μικρή άσκηση\n",
    "\n",
    "Συμπληρώστε τις ελλιπείς τιμές της στήλης `sepal width (cm)` με τη διάμεσο της στήλης.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "40897839",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Γράψτε εδώ τον κώδικά σας\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "576ac7bd",
   "metadata": {},
   "source": [
    "# 10. Διπλότυπες γραμμές\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "e20362d0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(1)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.duplicated().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6573f864",
   "metadata": {},
   "source": [
    "Για παράδειγμα, δημιουργούμε τεχνητά ένα διπλότυπο:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "141aea47",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(151, 7)\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "df_dup = pd.concat([df, df.iloc[[0]]])\n",
    "\n",
    "print(df_dup.shape)\n",
    "print(df_dup.duplicated().sum())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "b5d64c2b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(149, 7)\n"
     ]
    }
   ],
   "source": [
    "df_dup = df_dup.drop_duplicates()\n",
    "\n",
    "print(df_dup.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dfba9a11",
   "metadata": {},
   "source": [
    "# 11. Κατηγορικές μεταβλητές\n",
    "\n",
    "Πολλά μοντέλα χρειάζονται αριθμητική είσοδο.\n",
    "\n",
    "Η `species` είναι κατηγορική μεταβλητή. Μία απλή λύση είναι το **one-hot encoding**.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "b1017029",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>setosa</th>\n",
       "      <th>versicolor</th>\n",
       "      <th>virginica</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   setosa  versicolor  virginica\n",
       "0    True       False      False\n",
       "1    True       False      False\n",
       "2    True       False      False\n",
       "3    True       False      False\n",
       "4    True       False      False"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.get_dummies(df[\"species\"]).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de4b2507",
   "metadata": {},
   "source": [
    "Μπορούμε να προσθέσουμε τις νέες στήλες στο DataFrame:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "b85b1ad5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "      <th>target</th>\n",
       "      <th>petal_ratio</th>\n",
       "      <th>species_setosa</th>\n",
       "      <th>species_versicolor</th>\n",
       "      <th>species_virginica</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.1</td>\n",
       "      <td>3.5</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>6.5</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>7.5</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \\\n",
       "0                5.1               3.5                1.4               0.2   \n",
       "1                4.9               3.0                1.4               0.2   \n",
       "2                4.7               3.2                1.3               0.2   \n",
       "3                4.6               3.1                1.5               0.2   \n",
       "4                5.0               3.6                1.4               0.2   \n",
       "\n",
       "   target  petal_ratio  species_setosa  species_versicolor  species_virginica  \n",
       "0       0          7.0            True               False              False  \n",
       "1       0          7.0            True               False              False  \n",
       "2       0          6.5            True               False              False  \n",
       "3       0          7.5            True               False              False  \n",
       "4       0          7.0            True               False              False  "
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_encoded = pd.get_dummies(df, columns=[\"species\"])\n",
    "\n",
    "df_encoded.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b2757224",
   "metadata": {},
   "source": [
    "# 12. Κλιμάκωση αριθμητικών χαρακτηριστικών\n",
    "\n",
    "Στη Διάλεξη 2 είδαμε ότι χαρακτηριστικά με πολύ διαφορετικές κλίμακες μπορούν να δημιουργήσουν πρόβλημα σε αρκετούς αλγορίθμους.\n",
    "\n",
    "Εδώ βλέπουμε ένα απλό παράδειγμα με `StandardScaler`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "717475a6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.900681</td>\n",
       "      <td>1.019004</td>\n",
       "      <td>-1.340227</td>\n",
       "      <td>-1.315444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.143017</td>\n",
       "      <td>-0.131979</td>\n",
       "      <td>-1.340227</td>\n",
       "      <td>-1.315444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-1.385353</td>\n",
       "      <td>0.328414</td>\n",
       "      <td>-1.397064</td>\n",
       "      <td>-1.315444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1.506521</td>\n",
       "      <td>0.098217</td>\n",
       "      <td>-1.283389</td>\n",
       "      <td>-1.315444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.021849</td>\n",
       "      <td>1.249201</td>\n",
       "      <td>-1.340227</td>\n",
       "      <td>-1.315444</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)\n",
       "0          -0.900681          1.019004          -1.340227         -1.315444\n",
       "1          -1.143017         -0.131979          -1.340227         -1.315444\n",
       "2          -1.385353          0.328414          -1.397064         -1.315444\n",
       "3          -1.506521          0.098217          -1.283389         -1.315444\n",
       "4          -1.021849          1.249201          -1.340227         -1.315444"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "features = [\n",
    "    \"sepal length (cm)\",\n",
    "    \"sepal width (cm)\",\n",
    "    \"petal length (cm)\",\n",
    "    \"petal width (cm)\"\n",
    "]\n",
    "\n",
    "scaler = StandardScaler()\n",
    "\n",
    "scaled = scaler.fit_transform(df[features])\n",
    "\n",
    "df_scaled = pd.DataFrame(scaled, columns=features)\n",
    "df_scaled.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "63e2e430",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sepal length (cm)</th>\n",
       "      <th>sepal width (cm)</th>\n",
       "      <th>petal length (cm)</th>\n",
       "      <th>petal width (cm)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>150.00</td>\n",
       "      <td>150.00</td>\n",
       "      <td>150.00</td>\n",
       "      <td>150.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-0.00</td>\n",
       "      <td>-0.00</td>\n",
       "      <td>-0.00</td>\n",
       "      <td>-0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.00</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-1.87</td>\n",
       "      <td>-2.43</td>\n",
       "      <td>-1.57</td>\n",
       "      <td>-1.45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.90</td>\n",
       "      <td>-0.59</td>\n",
       "      <td>-1.23</td>\n",
       "      <td>-1.18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-0.05</td>\n",
       "      <td>-0.13</td>\n",
       "      <td>0.34</td>\n",
       "      <td>0.13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.67</td>\n",
       "      <td>0.56</td>\n",
       "      <td>0.76</td>\n",
       "      <td>0.79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.49</td>\n",
       "      <td>3.09</td>\n",
       "      <td>1.79</td>\n",
       "      <td>1.71</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       sepal length (cm)  sepal width (cm)  petal length (cm)  \\\n",
       "count             150.00            150.00             150.00   \n",
       "mean               -0.00             -0.00              -0.00   \n",
       "std                 1.00              1.00               1.00   \n",
       "min                -1.87             -2.43              -1.57   \n",
       "25%                -0.90             -0.59              -1.23   \n",
       "50%                -0.05             -0.13               0.34   \n",
       "75%                 0.67              0.56               0.76   \n",
       "max                 2.49              3.09               1.79   \n",
       "\n",
       "       petal width (cm)  \n",
       "count            150.00  \n",
       "mean              -0.00  \n",
       "std                1.00  \n",
       "min               -1.45  \n",
       "25%               -1.18  \n",
       "50%                0.13  \n",
       "75%                0.79  \n",
       "max                1.71  "
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_scaled.describe().round(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1dfe7b9f",
   "metadata": {},
   "source": [
    "Παρατηρήστε ότι οι μέσες τιμές είναι περίπου 0 και οι τυπικές αποκλίσεις περίπου 1.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce8589aa",
   "metadata": {},
   "source": [
    "# 13. Χαρακτηριστικά X και στόχος y\n",
    "\n",
    "Στη Μηχανική Μάθηση συχνά χωρίζουμε το DataFrame σε:\n",
    "\n",
    "- `X`: χαρακτηριστικά εισόδου\n",
    "- `y`: μεταβλητή στόχος\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "291ed4cc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(150, 4)\n",
      "(150,)\n"
     ]
    }
   ],
   "source": [
    "X = df[features]\n",
    "y = df[\"target\"]\n",
    "\n",
    "print(X.shape)\n",
    "print(y.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b2f6459f",
   "metadata": {},
   "source": [
    "# 14. Train και test set\n",
    "\n",
    "Από τη Διάλεξη 1 γνωρίζουμε ότι δεν πρέπει να αξιολογούμε ένα μοντέλο στα ίδια δεδομένα στα οποία εκπαιδεύτηκε.\n",
    "\n",
    "Εδώ κάνουμε μόνο τον διαχωρισμό. Το μοντέλο θα έρθει σε επόμενο εργαστήριο.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "8f543651",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train: (120, 4)\n",
      "Test : (30, 4)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y,\n",
    "    test_size=0.2,\n",
    "    random_state=42\n",
    ")\n",
    "\n",
    "print(\"Train:\", X_train.shape)\n",
    "print(\"Test :\", X_test.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5dc3383",
   "metadata": {},
   "source": [
    "## Σημαντικό: αποφυγή data leakage\n",
    "\n",
    "Η προεπεξεργασία που **μαθαίνει κάτι από τα δεδομένα**, όπως ο `StandardScaler`, πρέπει να προσαρμόζεται (`fit`) μόνο στο training set.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "65b8105b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(120, 4)\n",
      "(30, 4)\n"
     ]
    }
   ],
   "source": [
    "scaler = StandardScaler()\n",
    "\n",
    "X_train_scaled = scaler.fit_transform(X_train)\n",
    "X_test_scaled = scaler.transform(X_test)\n",
    "\n",
    "print(X_train_scaled.shape)\n",
    "print(X_test_scaled.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ced87b3b",
   "metadata": {},
   "source": [
    "# 15. Τι πρέπει να κρατήσουμε\n",
    "\n",
    "Για ένα νέο tabular dataset, η βασική ροή είναι:\n",
    "\n",
    "1. Φορτώνουμε τα δεδομένα\n",
    "2. Κοιτάζουμε `head()`, `shape`, `info()`, `describe()`\n",
    "3. Επιλέγουμε και φιλτράρουμε γραμμές / στήλες\n",
    "4. Ελέγχουμε ελλιπείς τιμές και διπλότυπα\n",
    "5. Κοιτάζουμε απλές κατανομές και σχέσεις με γραφήματα\n",
    "6. Χειριζόμαστε κατηγορικές μεταβλητές\n",
    "7. Κάνουμε κλιμάκωση όπου χρειάζεται\n",
    "8. Χωρίζουμε σε `X`, `y`, train και test\n",
    "9. Δεν αφήνουμε πληροφορία από το test set να περάσει στην προεπεξεργασία\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0be9486",
   "metadata": {},
   "source": [
    "# Ασκήσεις\n",
    "\n",
    "Χρησιμοποιήστε το ίδιο `df`.\n",
    "\n",
    "**1.** Εμφανίστε μόνο τις στήλες `sepal length (cm)` και `species`.\n",
    "\n",
    "**2.** Βρείτε πόσα λουλούδια έχουν `petal width (cm) > 1.5`.\n",
    "\n",
    "**3.** Υπολογίστε τη μέση τιμή του `petal width (cm)` ανά είδος.\n",
    "\n",
    "**4.** Δημιουργήστε histogram για το `petal width (cm)`.\n",
    "\n",
    "**5.** Δημιουργήστε μία νέα στήλη:\n",
    "`sepal_ratio = sepal length / sepal width`.\n",
    "\n",
    "**6.** Εμφανίστε τις 5 γραμμές με το μεγαλύτερο `sepal_ratio`.\n",
    "\n",
    "**7.** Στο `df_missing`, συμπληρώστε όλες τις αριθμητικές ελλιπείς τιμές με τη διάμεσο της αντίστοιχης στήλης.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d7aaf5ab-2a0a-403f-80c8-14eae9a164b3",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fb510897-89fd-472a-81c6-a78924300c0f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1a8c38fa-ac56-4db1-af09-f1a91d687051",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9c6f10a3-9f81-4a01-89f5-b9356cb59f88",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "323e97f8-e1a2-4933-ac5f-f8e3695c89e7",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "65c067a1-c567-469b-b143-dfd4edc85864",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
