{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Wstępne przetwarzanie danych w Pythonie\n", "\n", "W ćwiczeniu zapoznamy się z najprostszymi sposobami przetwarzania danych (normalizacja, one-hot-encoding, binaryzacja) danych przy wykorzystaniu biblioteki `scikit-learn` i `pandas`." ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:51:05.638850Z", "start_time": "2020-03-19T20:51:05.635878Z" } }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import sklearn\n", "import matplotlib.pyplot as plt\n", "\n", "from sklearn import datasets, preprocessing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Irysy Fishera" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Funkcja `load_iris()` utworzy obiekt zawierający słynny zbiór danych o [irysach Fischera](https://en.wikipedia.org/wiki/Iris_flower_data_set)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:12:47.463822Z", "start_time": "2020-03-19T20:12:47.456767Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Nazwy atrybutów: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']\n", "Klasy decyzyjne: ['setosa' 'versicolor' 'virginica']\n", "kształt danych: (150, 4)\n", "kształt etykiety: (150,)\n" ] } ], "source": [ "iris = datasets.load_iris()\n", "\n", "print('Nazwy atrybutów: ', iris.feature_names)\n", "print('Klasy decyzyjne: ', iris.target_names)\n", "\n", "print('kształt danych: ', iris.data.shape)\n", "print('kształt etykiety: ', iris.target.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "W ćwiczeniu wykorzystamy bibliotekę [pandas](https://pandas.pydata.org) do przechowywania danych i wyników pośrednich obliczeń. Pandas to specjalizowana biblioteka która bardzo dobrze współpracuje z bibliotekami [Numerical Python](http://www.numpy.org) oraz [SciKit Learn](http://scikit-learn.org), głównym narzędziem do eksploracji danych i uczenia maszynowego. Jeśli nigdy nie pracowaliście z `pandas` to warto rzucić okiem na krótkie wprowadzenia, np. [tutaj](https://medium.com/@wbusaka/a-gentle-introduction-to-pandas-5ed17421a59d), [tutaj](https://towardsdatascience.com/an-introduction-to-pandas-in-python-b06d2dd51aba) lub [tutaj](https://towardsdatascience.com/a-quick-introduction-to-the-pandas-python-library-f1b678f34673)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:36:29.498789Z", "start_time": "2020-03-19T20:36:29.486093Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
05.13.51.40.20
14.93.01.40.20
24.73.21.30.20
34.63.11.50.20
45.03.61.40.20
55.43.91.70.40
64.63.41.40.30
75.03.41.50.20
84.42.91.40.20
94.93.11.50.10
\n", "
" ], "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", "5 5.4 3.9 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", "\n", " target \n", "0 0 \n", "1 0 \n", "2 0 \n", "3 0 \n", "4 0 \n", "5 0 \n", "6 0 \n", "7 0 \n", "8 0 \n", "9 0 " ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# utworzenie nowego obiektu DataFrame\n", "df = pd.DataFrame(iris.data)\n", "\n", "# dodanie nowej kolumny\n", "df['target'] = iris.target\n", "\n", "# redefinicja nazw kolumn\n", "df.columns = iris.feature_names + ['target']\n", "\n", "df.head(n=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Każda kolumna w obiekcie `DataFrame` jest typu `Series` i posiada [bardzo bogate API](https://pandas.pydata.org/docs/reference/series.html). " ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:36:33.612402Z", "start_time": "2020-03-19T20:36:33.605527Z" } }, "outputs": [ { "data": { "text/plain": [ "count 150.000000\n", "mean 5.843333\n", "std 0.828066\n", "min 4.300000\n", "25% 5.100000\n", "50% 5.800000\n", "75% 6.400000\n", "max 7.900000\n", "Name: sepal length (cm), dtype: float64" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['sepal length (cm)'].describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Często będziemy wykorzystywali funkcję `apply()` która pozwoli definiować *ad hoc* funkcje wykonywane na poszczególnych elementach danej serii." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:36:34.924257Z", "start_time": "2020-03-19T20:36:34.918951Z" } }, "outputs": [ { "data": { "text/plain": [ "0 True\n", "1 False\n", "2 False\n", "3 False\n", "4 False\n", "Name: sepal length (cm), dtype: bool" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['sepal length (cm)'].head().apply(lambda x: x > 5.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Z kolei do rysowania wykresów wykorzystamy bibliotekę [MatPlot](https://matplotlib.org), podstawowe narzędzie tworzenia prostych wizualizacji w Pythonie." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:36:35.951398Z", "start_time": "2020-03-19T20:36:35.792488Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = df['sepal length (cm)'][:]\n", "y = df['sepal width (cm)'][:]\n", "t = df['target']\n", "\n", "plt.scatter(x, y, c=t)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podobny efekt moglibyśmy uzyskać korzystając bezpośrednio z metody `plot()` dostarczanej przez `pandas.Series`. W poniższym przykładzie `iloc` oznacza *index localization* i należy wyrażenie rozumieć jako wybór wszystkich wierszy `:` oraz drugiej i trzeciej kolumny `[1,2]` (kolumny są indeksowane od 0)." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:36:37.321558Z", "start_time": "2020-03-19T20:36:37.141699Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df.iloc[:,[1,2]].plot(kind='scatter', x=0, y=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Normalizacja" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pierwsza operacja to normalizacja liniowa realizowana przez klasę [MinMaxScaler](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler). Klasa ta realizuje następującą transformację atrybutu:\n", "\n", "$$v' = \\frac{v-min}{max-min} * (max'-min') + min'$$\n", "\n", "gdzie $max,min$ to oryginalna wartość maksymalna i minimalna atrybutu, $max',min'$ to wartości maksymalna i minimalna w nowej skali, $v'$ to nowa wartość atrybutu, a $v$ to oryginalna wartość atrybutu." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ponieważ będziemy tylko przetwarzać atrybuty kwiatów, a nie etykietę (ostatnią kolumnę), więc w pierwszym kroku zapiszemy cztery kolumny z cechami kwiatów (oraz ich nazwy) do osobnych zmiennych." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:40:21.508696Z", "start_time": "2020-03-19T20:40:21.502812Z" } }, "outputs": [], "source": [ "X = df.iloc[:, :-1]\n", "cols = df.columns[:-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Poniższy kawałek kodu pokazuje, w jaki sposób należy przeprowadzić normalizację całej tabeli z danymi." ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:43:31.979315Z", "start_time": "2020-03-19T20:43:31.964111Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
00.2222220.6250000.0677970.041667
10.1666670.4166670.0677970.041667
20.1111110.5000000.0508470.041667
30.0833330.4583330.0847460.041667
40.1944440.6666670.0677970.041667
\n", "
" ], "text/plain": [ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", "0 0.222222 0.625000 0.067797 0.041667\n", "1 0.166667 0.416667 0.067797 0.041667\n", "2 0.111111 0.500000 0.050847 0.041667\n", "3 0.083333 0.458333 0.084746 0.041667\n", "4 0.194444 0.666667 0.067797 0.041667" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "norm = preprocessing.MinMaxScaler(feature_range=(0,1)).fit(X)\n", "X_minmax = pd.DataFrame(norm.transform(X), columns=cols)\n", "\n", "X_minmax.head()" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:42:01.120369Z", "start_time": "2020-03-19T20:42:01.100167Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
count150.000000150.000000150.000000150.000000
mean0.4287040.4405560.4674580.458056
std0.2300180.1816110.2992030.317599
min0.0000000.0000000.0000000.000000
25%0.2222220.3333330.1016950.083333
50%0.4166670.4166670.5677970.500000
75%0.5833330.5416670.6949150.708333
max1.0000001.0000001.0000001.000000
\n", "
" ], "text/plain": [ " sepal length (cm) sepal width (cm) petal length (cm) \\\n", "count 150.000000 150.000000 150.000000 \n", "mean 0.428704 0.440556 0.467458 \n", "std 0.230018 0.181611 0.299203 \n", "min 0.000000 0.000000 0.000000 \n", "25% 0.222222 0.333333 0.101695 \n", "50% 0.416667 0.416667 0.567797 \n", "75% 0.583333 0.541667 0.694915 \n", "max 1.000000 1.000000 1.000000 \n", "\n", " petal width (cm) \n", "count 150.000000 \n", "mean 0.458056 \n", "std 0.317599 \n", "min 0.000000 \n", "25% 0.083333 \n", "50% 0.500000 \n", "75% 0.708333 \n", "max 1.000000 " ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_minmax.describe()" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:42:37.735209Z", "start_time": "2020-03-19T20:42:37.596036Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = X_minmax['sepal length (cm)'][:]\n", "y = X_minmax['sepal width (cm)'][:]\n", "t = df['target']\n", "\n", "plt.scatter(x, y, c=t)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Standaryzacja" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Innym rodzajem normalizacji jest *standaryzacja* zmiennej, tzn. zamiana zmiennej w taki sposób, aby średnia wartość zmiennej wynosiła 0 a jej odchylenie standardowe wynosiło 1. W bibliotece scikit-learn jest to realizowane przez klasę [StandardScaler](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler) która realizuje następującą transformację:\n", "\n", "$$v' = \\frac{v-\\mu}{\\sigma}$$\n", "\n", "gdzie $\\mu$ to wartość średnia atrybutu, a $\\sigma$ to odchylenie standardowe." ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:43:16.531540Z", "start_time": "2020-03-19T20:43:16.520682Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
0-0.9006811.019004-1.340227-1.315444
1-1.143017-0.131979-1.340227-1.315444
2-1.3853530.328414-1.397064-1.315444
3-1.5065210.098217-1.283389-1.315444
4-1.0218491.249201-1.340227-1.315444
\n", "
" ], "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": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scale = preprocessing.StandardScaler().fit(X)\n", "X_scaled = pd.DataFrame(scale.transform(X), columns=cols)\n", "\n", "X_scaled.head()" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:43:22.359507Z", "start_time": "2020-03-19T20:43:22.339883Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
count1.500000e+021.500000e+021.500000e+021.500000e+02
mean-2.775558e-16-9.695948e-16-8.652338e-16-4.662937e-16
std1.003350e+001.003350e+001.003350e+001.003350e+00
min-1.870024e+00-2.433947e+00-1.567576e+00-1.447076e+00
25%-9.006812e-01-5.923730e-01-1.226552e+00-1.183812e+00
50%-5.250608e-02-1.319795e-013.364776e-011.325097e-01
75%6.745011e-015.586108e-017.627583e-017.906707e-01
max2.492019e+003.090775e+001.785832e+001.712096e+00
\n", "
" ], "text/plain": [ " sepal length (cm) sepal width (cm) petal length (cm) \\\n", "count 1.500000e+02 1.500000e+02 1.500000e+02 \n", "mean -2.775558e-16 -9.695948e-16 -8.652338e-16 \n", "std 1.003350e+00 1.003350e+00 1.003350e+00 \n", "min -1.870024e+00 -2.433947e+00 -1.567576e+00 \n", "25% -9.006812e-01 -5.923730e-01 -1.226552e+00 \n", "50% -5.250608e-02 -1.319795e-01 3.364776e-01 \n", "75% 6.745011e-01 5.586108e-01 7.627583e-01 \n", "max 2.492019e+00 3.090775e+00 1.785832e+00 \n", "\n", " petal width (cm) \n", "count 1.500000e+02 \n", "mean -4.662937e-16 \n", "std 1.003350e+00 \n", "min -1.447076e+00 \n", "25% -1.183812e+00 \n", "50% 1.325097e-01 \n", "75% 7.906707e-01 \n", "max 1.712096e+00 " ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_scaled.describe()" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:43:44.317559Z", "start_time": "2020-03-19T20:43:44.183999Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = X_scaled['sepal length (cm)'][:]\n", "y = X_scaled['sepal width (cm)'][:]\n", "t = df['target']\n", "\n", "plt.scatter(x, y, c=t)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dyskretyzacja " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatywą dla ręcznego wskazywania podziału atrybutu na przedziały jest wykorzystanie automatycznego wyliczenia przedziałów przy użyciu klasy [KBinsDiscretizer](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.KBinsDiscretizer.html#sklearn.preprocessing.KBinsDiscretizer) która w taki sposób dzieli przestrzeń atrybutu na zadane _k_ przedziałów, aby odległości między środkami geometrycznymi przedziałów były jak największe" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:43:57.151420Z", "start_time": "2020-03-19T20:43:56.989962Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "kbin = preprocessing.KBinsDiscretizer(n_bins=3, strategy='kmeans', encode='ordinal').fit(df[['sepal length (cm)']])\n", "\n", "df_kbinned = pd.DataFrame(kbin.transform(df[['sepal length (cm)']]))\n", "\n", "x = df['sepal length (cm)'][:]\n", "y = df_kbinned[:]\n", "t = df['target']\n", "\n", "plt.scatter(x, y, c=t)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Binaryzacja" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Czasami zachodzi konieczność transformacji atrybutu do postaci flagi binarnej reprezentującej wynik jakiegoś testu logicznego na wartościach atrybutu. Zadanie to realizuje klasa [Binarizer](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Binarizer.html)." ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:49:46.273689Z", "start_time": "2020-03-19T20:49:46.259197Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)targetsepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.201.01.00.00.0
14.93.01.40.201.00.00.00.0
24.73.21.30.201.01.00.00.0
34.63.11.50.201.01.00.00.0
45.03.61.40.201.01.00.00.0
\n", "
" ], "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 sepal length (cm) sepal width (cm) petal length (cm) \\\n", "0 0 1.0 1.0 0.0 \n", "1 0 1.0 0.0 0.0 \n", "2 0 1.0 1.0 0.0 \n", "3 0 1.0 1.0 0.0 \n", "4 0 1.0 1.0 0.0 \n", "\n", " petal width (cm) \n", "0 0.0 \n", "1 0.0 \n", "2 0.0 \n", "3 0.0 \n", "4 0.0 " ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "binarize = preprocessing.Binarizer(threshold=3).fit(X)\n", "\n", "X_binned = pd.DataFrame(binarize.transform(X), columns=cols)\n", "\n", "pd.concat([df,X_binned], axis=1).head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Wyświetlenie histogramów" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do prostego zliczenia wartości w kolumnie można wykorzystać:\n", "- `pandas.Series.value_counts()`\n", "- `collections.Counter`\n", "\n", "natomiast jeśli chcemy tylko narysować histogram wartości w kolumnie, wystarczy `pandas.Series.hist()`" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:50:24.543861Z", "start_time": "2020-03-19T20:50:24.538194Z" } }, "outputs": [ { "data": { "text/plain": [ "0.0 83\n", "1.0 67\n", "Name: sepal width (cm), dtype: int64" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_binned['sepal width (cm)'].value_counts()" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:50:52.909404Z", "start_time": "2020-03-19T20:50:52.905402Z" } }, "outputs": [ { "data": { "text/plain": [ "Counter({1.0: 67, 0.0: 83})" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from collections import Counter\n", "\n", "Counter(X_binned['sepal width (cm)'].values)" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:51:36.703602Z", "start_time": "2020-03-19T20:51:36.504641Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "X_binned['sepal width (cm)'].hist()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Uzupełnienie wartości brakujących" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wartości brakujące mogą poważnie zaburzyć wynik analizy. Wiele algorytmów klasyfikacji i regresji nie akceptuje danych wejściowych, w których występują wartości puste. Klasa [SimpleImputer](https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html) pozwala zamienić wartości brakujące na wartość średnią, medianę lub wartość modalną wyznaczaną na podstawie całego atrybutu." ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:51:46.149837Z", "start_time": "2020-03-19T20:51:46.143719Z" }, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. 2. nan]\n", " [nan 4. 5.]\n", " [ 6. nan 7.]]\n", "\n", "[[1. 2. 6. ]\n", " [3.5 4. 5. ]\n", " [6. 3. 7. ]]\n" ] } ], "source": [ "from sklearn.impute import SimpleImputer\n", "\n", "matrix = np.array([[ 1, 2, np.nan], [np.nan, 4, 5], [6, np.nan, 7]])\n", "\n", "# alternatywne strategie to 'mean', 'median' i 'most_frequent'\n", "imp = SimpleImputer(missing_values=np.nan, strategy='mean').fit(matrix)\n", "\n", "print(matrix)\n", "print()\n", "print(imp.transform(matrix))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kodowanie zmiennej celu" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bardzo często wykorzystywaną klasą jest [OneHotEncoder](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder) która zamienia atrybut kategoryczny na flagi binarne. Po transformacji tworzonych jest $k$ flag binarnych, gdzie $k$ to liczba unikanlnych wartości występujących w oryginalnym atrybucie. Wynikiem transformacji jest indeks bitmapowy oryginalnego atrybutu." ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:51:56.710233Z", "start_time": "2020-03-19T20:51:56.705900Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n", " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", " 2 2]\n" ] } ], "source": [ "df_target = df['target'].values\n", "\n", "print(df_target)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:04:11.226818Z", "start_time": "2020-03-19T20:04:11.202137Z" } }, "outputs": [ { "data": { "text/plain": [ "matrix([[1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [1., 0., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 1., 0.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.],\n", " [0., 0., 1.]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "one_hot = preprocessing.OneHotEncoder(categories='auto').fit(df_target.reshape(-1,1))\n", "\n", "one_hot.transform(df_target.reshape(-1,1)).todense()" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "ExecuteTime": { "end_time": "2020-03-19T20:52:13.753025Z", "start_time": "2020-03-19T20:52:13.748602Z" } }, "outputs": [ { "data": { "text/plain": [ "array([[0]])" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "one_hot.inverse_transform(np.array([[1,0,0]]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## zadanie samodzielne\n", "\n", "Zapoznaj się z dokumentacją klasy [Normalizer](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.Normalizer.html#sklearn.preprocessing.Normalizer) która dokonuje normalizacji pojedynczych instancji w zbiorze uczącym. Dokonaj normalizacji zbioru *Iris*, sprawdzając przy tym, jaki jest efekt zmiany wartości parametru *norm* używanego przy inicjalizacji klasy.\n", "\n", "*podpowiedź* : wykorzystaj metodę [DataFrame.sum()](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sum.html)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.7.3" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }