{
  "cells": [
    {
      "cell_type": "code",
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report\n",
        "\n",
        "# Wczytanie danych\n",
        "df = pd.read_csv('Pokemon.csv')\n",
        "\n",
        "# Wybór cech i etykiet\n",
        "X = df[['Attack', 'Defense']]\n",
        "Y = df['Legendary'].astype(int)  # Konwersja wartości logicznych na liczby\n",
        "print(f\"Liczba zwykłych Pokémonów (0): {Y.value_counts()[0]}\")\n",
        "print(f\"Liczba legendarnych Pokémonów (1): {Y.value_counts()[1]}\")\n",
        "# Podział na zbiór uczący i testowy\n",
        "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)\n",
        "\n",
        "# Tworzenie i trenowanie modelu\n",
        "model = LogisticRegression()\n",
        "model.fit(X_train, Y_train)\n",
        "\n",
        "# Predykcja na zbiorze testowym\n",
        "Y_pred = model.predict(X_test)\n",
        "\n",
        "# Ocena skuteczności\n",
        "accuracy = accuracy_score(Y_test, Y_pred)\n",
        "precision = precision_score(Y_test, Y_pred)\n",
        "recall = recall_score(Y_test, Y_pred)\n",
        "f1 = f1_score(Y_test, Y_pred)\n",
        "\n",
        "# Wyświetlenie metryk\n",
        "print(f'Accuracy: {accuracy:.4f}')\n",
        "print(f'Precision: {precision:.4f}')\n",
        "print(f'Recall: {recall:.4f}')\n",
        "print(f'F1-score: {f1:.4f}')\n",
        "print('\\nClassification Report:\\n', classification_report(Y_test, Y_pred))\n",
        "\n",
        "# Wizualizacja danych i decyzji\n",
        "plt.figure(figsize=(8, 6))\n",
        "plt.scatter(X_test['Attack'], X_test['Defense'], c=Y_pred, cmap='coolwarm', edgecolors='k', alpha=0.7)\n",
        "plt.xlabel('Attack')\n",
        "plt.ylabel('Defense')\n",
        "plt.title('Klasyfikacja Pokémonów (legendarny vs. zwykły)')\n",
        "plt.colorbar(label='Legenda: 0 - zwykły, 1 - legendarny')\n",
        "plt.show()\n"
      ],
      "metadata": {
        "id": "j5fjxVBZPpF9"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Sekcja 1: Import bibliotek\n",
        "import pandas as pd\n",
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt\n",
        "from scipy import stats\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.preprocessing import StandardScaler\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n",
        "import numpy as np"
      ],
      "metadata": {
        "id": "vSFTkPj1-TK4"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Sekcja 2: Wczytanie i zapoznanie z danymi\n",
        "\n",
        "#Wczytanie zbioru “Titanic” z biblioteki seaborn\n",
        "df = sns.load_dataset(\"titanic\")\n",
        "\n",
        "# Wyświetlenie pierwszych 10 wierszy danych\n",
        "print(df.head(10))\n",
        "\n",
        "print(\"\\nLiczba brakujących wartości przed czyszczeniem:\")\n",
        "print(df.isnull().sum())\n",
        "\n",
        "\n",
        "# Usunięcie rekordów z brakującą daną w poli 'age' i wyświetlenie danych o liczbie wierszy\n",
        "df = df.dropna(subset=['age'])\n",
        "\n",
        "print(\"\\nLiczba brakujących wartości po czyszczeniu (tylko age):\")\n",
        "print(df.isnull().sum())\n",
        "\n",
        "print(f\"\\nLiczba wierszy przed czyszczeniem: {len(sns.load_dataset('titanic'))}\")\n",
        "print(f\"Liczba wierszy po czyszczeniu: {len(df)}\")"
      ],
      "metadata": {
        "id": "VvprbXwsxrSc"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Sekcja 3: Kategoryzacja opłat za bilety\n",
        "def categorize_fare(fare, fare_ranges):\n",
        "    if fare <= fare_ranges[0]:\n",
        "        return 0  # niska\n",
        "    elif fare <= fare_ranges[1]:\n",
        "        return 1  # średnia\n",
        "    else:\n",
        "        return 2  # wysoka\n",
        "\n",
        "min_fare = df['fare'].min()\n",
        "max_fare = df['fare'].max()\n",
        "fare_step = (max_fare - min_fare) / 3\n",
        "fare_ranges = [min_fare + fare_step, min_fare + 2 * fare_step]\n",
        "\n",
        "print(\"\\nPrzedziały cenowe biletów:\")\n",
        "print(f\"Niska: {min_fare:.2f} - {fare_ranges[0]:.2f}\")\n",
        "print(f\"Średnia: {fare_ranges[0]:.2f} - {fare_ranges[1]:.2f}\")\n",
        "print(f\"Wysoka: {fare_ranges[1]:.2f} - {max_fare:.2f}\")"
      ],
      "metadata": {
        "id": "PY0OSWJcCA9Q"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Sekcja 4: Przygotowanie danych do modelowania\n",
        "selected_features = ['sex', 'pclass', 'age', 'fare_category']\n",
        "df_model = df.copy()\n",
        "df_model['sex'] = df_model['sex'].map({'male': 0, 'female': 1})\n",
        "df_model['fare_category'] = df_model['fare'].apply(lambda x: categorize_fare(x, fare_ranges))\n"
      ],
      "metadata": {
        "id": "iL3tQDmmCMpq",
        "collapsed": true
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# Sekcja 5: Podział danych i skalowanie\n",
        "# Przygotowanie danych\n",
        "X = df_model[selected_features]\n",
        "y = df_model['survived']\n",
        "\n",
        "# Podział na zbiór treningowy i testowy\n",
        "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
        "\n",
        "# Skalowanie danych\n",
        "scaler = StandardScaler()\n",
        "X_train_scaled = scaler.fit_transform(X_train)\n",
        "X_test_scaled = scaler.transform(X_test)"
      ],
      "metadata": {
        "id": "3tgAa5xNEpV6",
        "collapsed": true
      },
      "execution_count": null,
      "outputs": []
    }
  ],
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}