{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Wstęp do eksploracji danych w Pythonie\n", "\n", "Ten notatnik pomoże Ci zapoznać się z postawowymi elementami eksploracji danych w Pythonie. Po uzupełnieniu tego notatnika powinieneś:\n", "\n", "+ znać nazwy podstawowych bibliotek do eksploracji i wizualizacji danych,\n", "+ umieć wczytać zbiór danych,\n", "+ wiedzieć jak wykonać podstawowe operacje na data frame'ie\n", "+ umieć nauczyć i przetestować klasyfikator\n", "+ wiedzieć jak wykonać prosty wykres" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Biblioteki\n", "\n", "Oprócz podstawowych elementów języka, do eksploracji danych wykorzystamy klika bibliotek. Podstawowe biblioteki, które będą", " nam potrzebne to: `matplotlib`, `pandas`, `numpy` i `sklearn`. Część z potrzebnych modułów załadowałem już poniżej: " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true } }, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "from sklearn.model_selection import GridSearchCV\n", "from sklearn.metrics import classification_report, auc, roc_auc_score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Zad. 3: Załaduj jeszcze dwie biblioteki: pandas z aliasem pd i numpy z aliasem np.**" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true } }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pandas\n", "\n", "Najwyższy czas wczytać jakiś zbiór danych. W tym celu wykorzystamy bibliotekę, którą", " właśnie zaimportowałeś: pandas. Upewnij się, że ściagnięty zbiór danych znajduje się w tym samym folderze co notatnik i podą", "żaj za komentarzami.\n", "\n", "**Zad. 4: Wczytaj zbiór titanic do zmiennej `df`.**" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# skorzystaj z metody read_csv w module pandas\n", "# ponieważ nadalismy temu modułowi alias, musisz wywołać\n", "# pd.read_csv()\n", "# wyszukaj w Internecie jakie parametry przyjmuje ta funkcja\n", "# wynik wywołania przypisz do zmiennej df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Jeśli wszystko poszło dobrze, to zobaczmy jak wyglą", "da pierwsze 10 wierszy zbioru (funkcję o takiej samej nazwie znasz z R).\n", "\n", "**Zad. 5: Wyświetl pierwsze 10 wierszy zbioru.**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Teraz zrobimy coś trochę trudniejszego - odfiltrujemy wybrane kolumny. Warto zajrzeć na http://pandas.pydata.org/pandas-docs/stable/10min.html, żeby zapoznać się z podstawowymi operacjami w pandas.\n", "\n", "**Zad. 6: Usuń kolumny PassengerId, Name, Ticket, Cabin. Wynik przypisz do zmiennej `df_filtered`. Wyświetl pierwsze 10 wierszy, żeby upewnić się że operacja się udała.**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Zanim będziemy mogli wykorzystać jakikolwiek algorytm uczenia maszynowego z scikit-learn, musimy zrobić dwie rzeczy:\n", "- uzupełnić (lub usuną", "ć) brakują", "ce wartości\n", "- zamienić wszystkie atrybuty na liczby\n", "\n", "Ponieważ dopiero zaczynamy pracę z pandas, wyeliminujemy wartości brakują", "ce w najprostszy mozliwy sposób - usuniemy wiersze z wartościami pustymi\n", "\n", "**Zad. 7: Usuń wiersze z brakują", "cymi wartościami i przypisz wynikowego data fame'a do `df_complete`. Wyświetl pierwsze 10 wierszy i sprawdź czy znikną", "ł pią", "ty przykład.**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Zad. 8: Zamień Sex i Embarked na kolumny liczbowe.**" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# tu trochę pomogę...\n", "# musimy zamienić (słowo klucz) wartości tekstowe na liczby\n", "# zrób coś takiego dla kolumny Sex (zignoruj ostrzeżenie):\n", "#\n", "# df_complete.loc[:,\"Sex\"].replace({\"female\": 0, \"male\": 1}, inplace=True)\n", "# df_complete.head(10)\n", "#\n", "# jeśli to się uda - wymyśl coś podobnego dla kolumny Embarked" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas (i numpy na którym bazuje) potrafi dużo, dużo więcej, ale na tę chwilę to co zrobiliśmy nam wystarczy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Scikit-learn\n", "\n", "Czas przejść do uczenia maszynowego. Korzystają", "c z [dokumentacji scikit-learn](http://scikit-learn.org/stable/) oraz slajdów do zajęć, spróbuj wykonać kolejne zadania. Polecam też [tutoriale Kevina Markhama](http://blog.kaggle.com/author/kevin-markham/).\n", "\n", "**Zad. 9: Korzystają", "c z scikit-learn podziel `df_complete` na zbiór uczą", "cy i testowy, kolejno w proporcjach 60%-40%.**" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# to nie jest takie trudne, bo już zaimportowaliśmy odpowiednią", " funkcję (spójrz na importy)\n", "# doczytaj tylko co zwraca funkcja, której użyjesz - scikit ma trochę inne podejście do zbiorów danych niż np. caret\n", "# postaraj się, aby ten losowy podział był powtarzalny...\n", "# UWAGA: chcemy przewidywać wartość zmiennej Survived" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Zad. 10: Korzystają", "c ze zbioru treningowego zoptymalizuj parametry klasyfikatora RandomForestClassifier. Użyj oceny krzyżowej z miarą", " AUC.**\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# spójrz na slajdy do zajęć, znajdują", "ce się tam fragmenty kodu powinny Cię naprowadzić na rozwią", "zanie\n", "# uważaj... będziesz musiał zaimportować dodatkową", " bibliotekę\n", "# upewnij się też, że Twój eksperyment jest powtarzalny..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Zad. 11: Oceń uzyskany model na zbiorze testowym.**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Jeśli dotarłeś do tego momentu, to gratulacje 👏" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Seaborn\n", "\n", "Żeby coś narysować w Pythonie najczęściej korzysta się z biblioteki matplotlib i jakichś nakładek na tę bibliotekę. Matplotlib jest biblioteką", " względnie niskopoziomową", ", która mogłaby zostać porównana do podstawowego mechanizmu rysowania w R (tzw. *base plotting system*). Za pomocą", " matplotliba da się narysować prawie wszystko, z nakładkami jest już gorzej i dlatego często miesza się wykorzystanie różnych bibliotek.\n", "\n", "Spróbujmy coś narysować, żeby zakończyć raport obrazkiem. Wykorzystamy w tym celu bibliotekę [seaborn](http://seaborn.pydata.org/index.html). Jeśli nie masz jej zainstalowanej musisz otworzyć terminal Anacondy (*Anaconda Prompt*) i wpisać `conda install seaborn`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# najpierw odrobina magii\n", "# jeśli chcemy żeby wykresy rysowały nam się w raporcie to musimy wykonać instrukcję\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# dodatkowo zaimportujmy przydatne biblioteki i ustawmy domyślny styl wykresów\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "sns.set(style=\"whitegrid\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Zad. 12: Skorzystaj z `violinplot` żeby porównać ceny biletów (Fare) dla różnych klas (Pclass). Jako palety kolorów użyj jednej z palet z [ColorBrewera](http://colorbrewer2.org/#type=qualitative&scheme=Set1&n=3)**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotnine\n", "\n", "Sprawdź co pamiętasz z ggplota! Narysuj wykres przeżywalności mężczyzn i kobiet (`Sex`) z podziałem na typy biletów (`Pclass`)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "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.8.8" } }, "nbformat": 4, "nbformat_minor": 4 }