From 320dac257b64e4a7764b84042373b815c8e4bf51 Mon Sep 17 00:00:00 2001 From: Artem Viznyuk Date: Tue, 10 Aug 2021 19:37:39 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D1=83=D1=80=D0=BE=D0=BA=D0=B0=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson01_NumPy01.ipynb | 125 ++++++ lesson01_Pandas01.ipynb | 831 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 956 insertions(+) create mode 100644 lesson01_NumPy01.ipynb create mode 100644 lesson01_Pandas01.ipynb diff --git a/lesson01_NumPy01.ipynb b/lesson01_NumPy01.ipynb new file mode 100644 index 0000000..03a6eac --- /dev/null +++ b/lesson01_NumPy01.ipynb @@ -0,0 +1,125 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 46, + "id": "14f56e8d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Исходный массив :\n", + "[[ 1 2 3 3 1]\n", + " [ 6 8 11 10 7]]\n", + "Усредненный массив :\n", + "[2. 8.4]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "a = np.array([\n", + " [1, 2, 3, 3, 1],\n", + " [6, 8, 11, 10, 7]\n", + " ])\n", + "\n", + "print(\"Исходный массив :\")\n", + "print(a)\n", + "\n", + "mean_a = a.mean(axis=1)\n", + "print(\"Усредненный массив :\")\n", + "print(mean_a)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "4744d693", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Центрированный массив:\n", + "[[-1. -2.4]\n", + " [ 0. -0.4]\n", + " [ 1. 2.6]\n", + " [ 1. 1.6]\n", + " [-1. -1.4]]\n" + ] + } + ], + "source": [ + "np.shape(a)\n", + "np.shape(mean_a)\n", + "a_centered = np.array(a.T - mean_a)\n", + "print(\"Центрированный массив:\")\n", + "print(a_centered)" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "id": "0736a48d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(5, 2)\n", + "[[-1.]\n", + " [ 0.]\n", + " [ 1.]\n", + " [ 1.]\n", + " [-1.]]\n", + "[[-2.4]\n", + " [-0.4]\n", + " [ 2.6]\n", + " [ 1.6]\n", + " [-1.4]]\n", + "скалярное произведение столбцов:\n", + "8.0\n" + ] + } + ], + "source": [ + "print(np.shape(a_centered))\n", + "\n", + "a1 = np.array(a_centered[0:, 0:1])\n", + "print(a1)\n", + "\n", + "a2 = np.array(a_centered[0:, 1:2])\n", + "print(a2)\n", + "\n", + "a_centered_sp = np.dot(a1.flatten(), a2.flatten())\n", + "print(\"скалярное произведение столбцов:\")\n", + "print(a_centered_sp)" + ] + } + ], + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/lesson01_Pandas01.ipynb b/lesson01_Pandas01.ipynb new file mode 100644 index 0000000..19cfa47 --- /dev/null +++ b/lesson01_Pandas01.ipynb @@ -0,0 +1,831 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "id": "8233d46b", + "metadata": {}, + "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", + "
author_idauthor_name
01Тургенев
12Чехов
23Островский
\n", + "
" + ], + "text/plain": [ + " author_id author_name\n", + "0 1 Тургенев\n", + "1 2 Чехов\n", + "2 3 Островский" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "temp = {\n", + " \"author_id\": [1, 2, 3],\n", + " \"author_name\": ['Тургенев', 'Чехов', 'Островский']\n", + "}\n", + "\n", + "authors = pd.DataFrame(temp)\n", + "authors" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "8751b448", + "metadata": {}, + "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", + "
author_idbook_titleprice
01Отцы и дети450
11Рудин300
21Дворянское гнездо350
32Толстый и тонкий500
42Дама с собачкой450
53Гроза370
63Таланты и поклонники290
\n", + "
" + ], + "text/plain": [ + " author_id book_title price\n", + "0 1 Отцы и дети 450\n", + "1 1 Рудин 300\n", + "2 1 Дворянское гнездо 350\n", + "3 2 Толстый и тонкий 500\n", + "4 2 Дама с собачкой 450\n", + "5 3 Гроза 370\n", + "6 3 Таланты и поклонники 290" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "temp = {\n", + " \"author_id\": [1, 1, 1, 2, 2, 3, 3],\n", + " \"book_title\": ['Отцы и дети', 'Рудин', 'Дворянское гнездо', 'Толстый и тонкий', 'Дама с собачкой', 'Гроза', 'Таланты и поклонники'],\n", + " \"price\": [450, 300, 350, 500, 450, 370, 290]\n", + "}\n", + "\n", + "book = pd.DataFrame(temp)\n", + "book" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "bbdfad76", + "metadata": {}, + "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", + "
author_idauthor_namebook_titleprice
01ТургеневОтцы и дети450
11ТургеневРудин300
21ТургеневДворянское гнездо350
32ЧеховТолстый и тонкий500
42ЧеховДама с собачкой450
53ОстровскийГроза370
63ОстровскийТаланты и поклонники290
\n", + "
" + ], + "text/plain": [ + " author_id author_name book_title price\n", + "0 1 Тургенев Отцы и дети 450\n", + "1 1 Тургенев Рудин 300\n", + "2 1 Тургенев Дворянское гнездо 350\n", + "3 2 Чехов Толстый и тонкий 500\n", + "4 2 Чехов Дама с собачкой 450\n", + "5 3 Островский Гроза 370\n", + "6 3 Островский Таланты и поклонники 290" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "authors_price = pd.merge(authors, book, on='author_id', how='inner')\n", + "authors_price" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "b10a0275", + "metadata": {}, + "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", + "
author_idauthor_namebook_titleprice
32ЧеховТолстый и тонкий500
01ТургеневОтцы и дети450
42ЧеховДама с собачкой450
53ОстровскийГроза370
21ТургеневДворянское гнездо350
11ТургеневРудин300
63ОстровскийТаланты и поклонники290
\n", + "
" + ], + "text/plain": [ + " author_id author_name book_title price\n", + "3 2 Чехов Толстый и тонкий 500\n", + "0 1 Тургенев Отцы и дети 450\n", + "4 2 Чехов Дама с собачкой 450\n", + "5 3 Островский Гроза 370\n", + "2 1 Тургенев Дворянское гнездо 350\n", + "1 1 Тургенев Рудин 300\n", + "6 3 Островский Таланты и поклонники 290" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "authors_price.sort_values(by=\"price\", ascending=False, inplace=True)\n", + "\n", + "authors_price" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "ccb915d5", + "metadata": {}, + "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", + "
author_idauthor_namebook_titleprice
32ЧеховТолстый и тонкий500
01ТургеневОтцы и дети450
42ЧеховДама с собачкой450
53ОстровскийГроза370
21ТургеневДворянское гнездо350
\n", + "
" + ], + "text/plain": [ + " author_id author_name book_title price\n", + "3 2 Чехов Толстый и тонкий 500\n", + "0 1 Тургенев Отцы и дети 450\n", + "4 2 Чехов Дама с собачкой 450\n", + "5 3 Островский Гроза 370\n", + "2 1 Тургенев Дворянское гнездо 350" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "top5_1 = authors_price.head(5)\n", + "top5_1" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "29963342", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3 500\n", + "0 450\n", + "4 450\n", + "5 370\n", + "2 350\n", + "Name: price, dtype: int64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "### или top5 в одно дейтсвие:\n", + "top5 = authors_price['price'].head(5)\n", + "top5" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "5234bc10", + "metadata": {}, + "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", + "
price
author_name
Островский370
Тургенев450
Чехов500
\n", + "
" + ], + "text/plain": [ + " price\n", + "author_name \n", + "Островский 370\n", + "Тургенев 450\n", + "Чехов 500" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max_price = authors_price.groupby('author_name').agg({'price':'max'})\n", + "max_price" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "818f6ae8", + "metadata": {}, + "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", + "
price
author_name
Островский290
Тургенев300
Чехов450
\n", + "
" + ], + "text/plain": [ + " price\n", + "author_name \n", + "Островский 290\n", + "Тургенев 300\n", + "Чехов 450" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "min_price = authors_price.groupby('author_name').agg({'price':'min'})\n", + "min_price" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "dc9e6cb4", + "metadata": {}, + "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", + "
price
author_name
Островский330.000000
Тургенев366.666667
Чехов475.000000
\n", + "
" + ], + "text/plain": [ + " price\n", + "author_name \n", + "Островский 330.000000\n", + "Тургенев 366.666667\n", + "Чехов 475.000000" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mean_price = authors_price.groupby('author_name').agg({'price':'mean'})\n", + "mean_price" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "8ed27e68", + "metadata": {}, + "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", + "
max_pricemin_Pricemean_price
author_name
Островский370290330.000000
Тургенев450300366.666667
Чехов500450475.000000
\n", + "
" + ], + "text/plain": [ + " max_price min_Price mean_price\n", + "author_name \n", + "Островский 370 290 330.000000\n", + "Тургенев 450 300 366.666667\n", + "Чехов 500 450 475.000000" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "authors_stat = pd.merge(max_price, min_price, on='author_name', how='inner')\n", + "authors_stat = pd.merge(authors_stat, mean_price, on='author_name', how='inner')\n", + "authors_stat.rename(columns={'price_x': 'max_price', 'price_y': 'min_Price', 'price': 'mean_price'}, inplace=True)\n", + "authors_stat" + ] + } + ], + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From ab65b92f482c6552d7051374d5db0929deb96eb6 Mon Sep 17 00:00:00 2001 From: Artem Viznyuk Date: Tue, 17 Aug 2021 14:38:29 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=83=D1=80=D0=BE=D0=BA=D0=B0=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02_MathPlotLib01.ipynb | 3492 ++++++++++++++++++++++++++++++++++ 1 file changed, 3492 insertions(+) create mode 100644 lesson02_MathPlotLib01.ipynb diff --git a/lesson02_MathPlotLib01.ipynb b/lesson02_MathPlotLib01.ipynb new file mode 100644 index 0000000..361ce48 --- /dev/null +++ b/lesson02_MathPlotLib01.ipynb @@ -0,0 +1,3492 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "4f89780a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " 2021-08-15T22:32:30.504005\r\n", + " image/svg+xml\r\n", + " \r\n", + " \r\n", + " Matplotlib v3.4.0, https://matplotlib.org/\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "\n", + "%matplotlib inline\n", + "%config InlineBackend.figure_format = 'svg'\n", + "\n", + "x = [1, 2, 3, 4, 5, 6, 7]\n", + "y = [3.5, 3.8, 4.2, 4.5, 5, 5.5, 7]\n", + "\n", + "plt.plot(x, y)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "797cdfd5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " 2021-08-15T22:33:31.769391\r\n", + " image/svg+xml\r\n", + " \r\n", + " \r\n", + " Matplotlib v3.4.0, https://matplotlib.org/\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(x, y)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "4c53e091", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " 2021-08-15T22:42:37.502501\r\n", + " image/svg+xml\r\n", + " \r\n", + " \r\n", + " Matplotlib v3.4.0, https://matplotlib.org/\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "t = np.linspace(0, 10, 51)\n", + "\n", + "f = np.cos(t) \n", + "plt.plot(t, f, 'green')\n", + "plt.title('График f(t)')\n", + "plt.xlabel('Значения t')\n", + "plt.ylabel('Значения f')\n", + "plt.axis([0.5, 9.5, -2.5, 2.5])\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "dcb69571", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " 2021-08-16T22:44:43.325894\r\n", + " image/svg+xml\r\n", + " \r\n", + " \r\n", + " Matplotlib v3.4.0, https://matplotlib.org/\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = np.linspace(-3, 3, 51)\n", + "y1 = x**2\n", + "y2 = 2 * x + 0.5\n", + "y3 = -3 * x - 1.5\n", + "y4 = np.sin(x)\n", + "\n", + "fig, ax = plt.subplots(nrows=2, ncols=2)\n", + "ax = ax.flatten()\n", + "fig.subplots_adjust(wspace=0.3, hspace=0.3)\n", + "fig.set_size_inches(8, 6)\n", + "\n", + "ax[0].set_title(\"График y1\")\n", + "ax[0].plot(x, y1)\n", + "ax[0].set_xlim([-5,5])\n", + "\n", + "ax[1].set_title(\"График y2\")\n", + "ax[1].plot(x, y2)\n", + "\n", + "ax[2].set_title(\"График y3\")\n", + "ax[2].plot(x, y3)\n", + "\n", + "ax[3].set_title(\"График y4\")\n", + "ax[3].plot(x, y4)" + ] + } + ], + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 0e3c7170cb9080c5f9923ec5a16eb91de146ea8f Mon Sep 17 00:00:00 2001 From: Artem Viznyuk Date: Thu, 26 Aug 2021 08:35:50 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=83=D1=80=D0=BE=D0=BA=D0=B0=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03_Sklearn01.ipynb | 518 +++++++++++++++++++++++++++++++++++++++ lesson03_Sklearn02.ipynb | 516 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 1034 insertions(+) create mode 100644 lesson03_Sklearn01.ipynb create mode 100644 lesson03_Sklearn02.ipynb diff --git a/lesson03_Sklearn01.ipynb b/lesson03_Sklearn01.ipynb new file mode 100644 index 0000000..69e423e --- /dev/null +++ b/lesson03_Sklearn01.ipynb @@ -0,0 +1,518 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "dd2114a1", + "metadata": {}, + "outputs": [], + "source": [ + "# загрузка основных модулей\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a4f7afe6", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTAT
00.0063218.02.310.00.5386.57565.24.09001.0296.015.3396.904.98
10.027310.07.070.00.4696.42178.94.96712.0242.017.8396.909.14
20.027290.07.070.00.4697.18561.14.96712.0242.017.8392.834.03
30.032370.02.180.00.4586.99845.86.06223.0222.018.7394.632.94
40.069050.02.180.00.4587.14754.26.06223.0222.018.7396.905.33
..........................................
5010.062630.011.930.00.5736.59369.12.47861.0273.021.0391.999.67
5020.045270.011.930.00.5736.12076.72.28751.0273.021.0396.909.08
5030.060760.011.930.00.5736.97691.02.16751.0273.021.0396.905.64
5040.109590.011.930.00.5736.79489.32.38891.0273.021.0393.456.48
5050.047410.011.930.00.5736.03080.82.50501.0273.021.0396.907.88
\n", + "

506 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \\\n", + "0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 \n", + "1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 \n", + "2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 \n", + "3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 \n", + "4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 \n", + ".. ... ... ... ... ... ... ... ... ... ... \n", + "501 0.06263 0.0 11.93 0.0 0.573 6.593 69.1 2.4786 1.0 273.0 \n", + "502 0.04527 0.0 11.93 0.0 0.573 6.120 76.7 2.2875 1.0 273.0 \n", + "503 0.06076 0.0 11.93 0.0 0.573 6.976 91.0 2.1675 1.0 273.0 \n", + "504 0.10959 0.0 11.93 0.0 0.573 6.794 89.3 2.3889 1.0 273.0 \n", + "505 0.04741 0.0 11.93 0.0 0.573 6.030 80.8 2.5050 1.0 273.0 \n", + "\n", + " PTRATIO B LSTAT \n", + "0 15.3 396.90 4.98 \n", + "1 17.8 396.90 9.14 \n", + "2 17.8 392.83 4.03 \n", + "3 18.7 394.63 2.94 \n", + "4 18.7 396.90 5.33 \n", + ".. ... ... ... \n", + "501 21.0 391.99 9.67 \n", + "502 21.0 396.90 9.08 \n", + "503 21.0 396.90 5.64 \n", + "504 21.0 393.45 6.48 \n", + "505 21.0 396.90 7.88 \n", + "\n", + "[506 rows x 13 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# загрузка исходных данных\n", + "\n", + "from sklearn.datasets import load_boston\n", + "boston = load_boston()\n", + "\n", + "data = boston[\"data\"]\n", + "feature_names = boston[\"feature_names\"]\n", + "target = boston[\"target\"]\n", + "\n", + "# X матрица признаков\n", + "X = pd.DataFrame(data, columns=feature_names)\n", + "\n", + "\n", + "X" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f74b4ec9", + "metadata": {}, + "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", + "
price
024.0
121.6
234.7
333.4
436.2
......
50122.4
50220.6
50323.9
50422.0
50511.9
\n", + "

506 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " price\n", + "0 24.0\n", + "1 21.6\n", + "2 34.7\n", + "3 33.4\n", + "4 36.2\n", + ".. ...\n", + "501 22.4\n", + "502 20.6\n", + "503 23.9\n", + "504 22.0\n", + "505 11.9\n", + "\n", + "[506 rows x 1 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# y вектор результатов (цена недвижимости)\n", + "y = pd.DataFrame(target, columns=[\"price\"])\n", + "\n", + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "1fc8b722", + "metadata": {}, + "outputs": [], + "source": [ + "# разбиваем выборку на Обучающую и тестовую\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 42)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5fc069a9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression()" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# создаем модель линейной регрессии \n", + "\n", + "from sklearn.linear_model import LinearRegression\n", + "\n", + "lr = LinearRegression()\n", + "\n", + "lr.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "4e801d30", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(152, 1)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# делаем предсказание для тестовых данных\n", + "\n", + "y_pred = lr.predict(X_test)\n", + "\n", + "y_pred.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "3054c3ad", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7112260057484908" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# расчет параметра детерминации r2\n", + "from sklearn.metrics import r2_score\n", + "r2 = r2_score(y_test, y_pred)\n", + "r2" + ] + } + ], + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/lesson03_Sklearn02.ipynb b/lesson03_Sklearn02.ipynb new file mode 100644 index 0000000..3e1002e --- /dev/null +++ b/lesson03_Sklearn02.ipynb @@ -0,0 +1,516 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "f55ba795", + "metadata": {}, + "outputs": [], + "source": [ + "# загрузка основных модулей\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "06353144", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTAT
00.0063218.02.310.00.5386.57565.24.09001.0296.015.3396.904.98
10.027310.07.070.00.4696.42178.94.96712.0242.017.8396.909.14
20.027290.07.070.00.4697.18561.14.96712.0242.017.8392.834.03
30.032370.02.180.00.4586.99845.86.06223.0222.018.7394.632.94
40.069050.02.180.00.4587.14754.26.06223.0222.018.7396.905.33
..........................................
5010.062630.011.930.00.5736.59369.12.47861.0273.021.0391.999.67
5020.045270.011.930.00.5736.12076.72.28751.0273.021.0396.909.08
5030.060760.011.930.00.5736.97691.02.16751.0273.021.0396.905.64
5040.109590.011.930.00.5736.79489.32.38891.0273.021.0393.456.48
5050.047410.011.930.00.5736.03080.82.50501.0273.021.0396.907.88
\n", + "

506 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \\\n", + "0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 \n", + "1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 \n", + "2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 \n", + "3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 \n", + "4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 \n", + ".. ... ... ... ... ... ... ... ... ... ... \n", + "501 0.06263 0.0 11.93 0.0 0.573 6.593 69.1 2.4786 1.0 273.0 \n", + "502 0.04527 0.0 11.93 0.0 0.573 6.120 76.7 2.2875 1.0 273.0 \n", + "503 0.06076 0.0 11.93 0.0 0.573 6.976 91.0 2.1675 1.0 273.0 \n", + "504 0.10959 0.0 11.93 0.0 0.573 6.794 89.3 2.3889 1.0 273.0 \n", + "505 0.04741 0.0 11.93 0.0 0.573 6.030 80.8 2.5050 1.0 273.0 \n", + "\n", + " PTRATIO B LSTAT \n", + "0 15.3 396.90 4.98 \n", + "1 17.8 396.90 9.14 \n", + "2 17.8 392.83 4.03 \n", + "3 18.7 394.63 2.94 \n", + "4 18.7 396.90 5.33 \n", + ".. ... ... ... \n", + "501 21.0 391.99 9.67 \n", + "502 21.0 396.90 9.08 \n", + "503 21.0 396.90 5.64 \n", + "504 21.0 393.45 6.48 \n", + "505 21.0 396.90 7.88 \n", + "\n", + "[506 rows x 13 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# загрузка исходных данных\n", + "\n", + "from sklearn.datasets import load_boston\n", + "boston = load_boston()\n", + "\n", + "data = boston[\"data\"]\n", + "feature_names = boston[\"feature_names\"]\n", + "target = boston[\"target\"]\n", + "\n", + "# X матрица признаков\n", + "X = pd.DataFrame(data, columns=feature_names)\n", + "\n", + "\n", + "X" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "bbba2fd9", + "metadata": {}, + "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", + "
price
024.0
121.6
234.7
333.4
436.2
......
50122.4
50220.6
50323.9
50422.0
50511.9
\n", + "

506 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " price\n", + "0 24.0\n", + "1 21.6\n", + "2 34.7\n", + "3 33.4\n", + "4 36.2\n", + ".. ...\n", + "501 22.4\n", + "502 20.6\n", + "503 23.9\n", + "504 22.0\n", + "505 11.9\n", + "\n", + "[506 rows x 1 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# y вектор результатов (цена недвижимости)\n", + "y = pd.DataFrame(target, columns=[\"price\"])\n", + "\n", + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "a39b337c", + "metadata": {}, + "outputs": [], + "source": [ + "# разбиваем выборку на Обучающую и тестовую\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state = 42)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "58280abb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomForestRegressor(max_depth=12, n_estimators=1000, random_state=42)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# создаем модель\n", + "\n", + "from sklearn.ensemble import RandomForestRegressor \n", + "model = RandomForestRegressor(n_estimators = 1000, max_depth = 12, random_state = 42)\n", + "\n", + "model.fit(X_train, y_train.values[:, 0])\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "1f8fe75a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(152,)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# делаем предсказание для тестовых данных\n", + "\n", + "y_pred = model.predict(X_test)\n", + "\n", + "y_pred.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "d9589f83", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.87472606157312" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# расчет параметра детерминации r2\n", + "from sklearn.metrics import r2_score\n", + "r2 = r2_score(y_test, y_pred)\n", + "r2" + ] + } + ], + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From e7fd746be8aeb0516b353cf5a71c6c5785806ecd Mon Sep 17 00:00:00 2001 From: Artem Viznyuk Date: Mon, 30 Aug 2021 23:50:39 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=83=D1=80=D0=BE=D0=BA=D0=B0=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson04_ScikitLearn01.ipynb | 1309 +++++++++++++++++++ lesson04_ScikitLearn02.ipynb | 2289 ++++++++++++++++++++++++++++++++++ 2 files changed, 3598 insertions(+) create mode 100644 lesson04_ScikitLearn01.ipynb create mode 100644 lesson04_ScikitLearn02.ipynb diff --git a/lesson04_ScikitLearn01.ipynb b/lesson04_ScikitLearn01.ipynb new file mode 100644 index 0000000..bf53e7b --- /dev/null +++ b/lesson04_ScikitLearn01.ipynb @@ -0,0 +1,1309 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 19, + "id": "75fd2fd0", + "metadata": {}, + "outputs": [], + "source": [ + "# загрузка основных модулей\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.manifold import TSNE\n", + "\n", + "plt.style.use('fivethirtyeight')\n", + "\n", + "%config InlineBackend.figure_format = 'svg'\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "f251d2f5", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTAT
00.0063218.02.310.00.5386.57565.24.09001.0296.015.3396.904.98
10.027310.07.070.00.4696.42178.94.96712.0242.017.8396.909.14
20.027290.07.070.00.4697.18561.14.96712.0242.017.8392.834.03
30.032370.02.180.00.4586.99845.86.06223.0222.018.7394.632.94
40.069050.02.180.00.4587.14754.26.06223.0222.018.7396.905.33
..........................................
5010.062630.011.930.00.5736.59369.12.47861.0273.021.0391.999.67
5020.045270.011.930.00.5736.12076.72.28751.0273.021.0396.909.08
5030.060760.011.930.00.5736.97691.02.16751.0273.021.0396.905.64
5040.109590.011.930.00.5736.79489.32.38891.0273.021.0393.456.48
5050.047410.011.930.00.5736.03080.82.50501.0273.021.0396.907.88
\n", + "

506 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \\\n", + "0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 \n", + "1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 \n", + "2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 \n", + "3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 \n", + "4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 \n", + ".. ... ... ... ... ... ... ... ... ... ... \n", + "501 0.06263 0.0 11.93 0.0 0.573 6.593 69.1 2.4786 1.0 273.0 \n", + "502 0.04527 0.0 11.93 0.0 0.573 6.120 76.7 2.2875 1.0 273.0 \n", + "503 0.06076 0.0 11.93 0.0 0.573 6.976 91.0 2.1675 1.0 273.0 \n", + "504 0.10959 0.0 11.93 0.0 0.573 6.794 89.3 2.3889 1.0 273.0 \n", + "505 0.04741 0.0 11.93 0.0 0.573 6.030 80.8 2.5050 1.0 273.0 \n", + "\n", + " PTRATIO B LSTAT \n", + "0 15.3 396.90 4.98 \n", + "1 17.8 396.90 9.14 \n", + "2 17.8 392.83 4.03 \n", + "3 18.7 394.63 2.94 \n", + "4 18.7 396.90 5.33 \n", + ".. ... ... ... \n", + "501 21.0 391.99 9.67 \n", + "502 21.0 396.90 9.08 \n", + "503 21.0 396.90 5.64 \n", + "504 21.0 393.45 6.48 \n", + "505 21.0 396.90 7.88 \n", + "\n", + "[506 rows x 13 columns]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# загрузка исходных данных\n", + "\n", + "from sklearn.datasets import load_boston\n", + "boston = load_boston()\n", + "\n", + "data = boston[\"data\"]\n", + "feature_names = boston[\"feature_names\"]\n", + "target = boston[\"target\"]\n", + "\n", + "# X матрица признаков\n", + "X = pd.DataFrame(data, columns=feature_names)\n", + "\n", + "\n", + "X" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "9f3d65fa", + "metadata": {}, + "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", + "
price
024.0
121.6
234.7
333.4
436.2
......
50122.4
50220.6
50323.9
50422.0
50511.9
\n", + "

506 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " price\n", + "0 24.0\n", + "1 21.6\n", + "2 34.7\n", + "3 33.4\n", + "4 36.2\n", + ".. ...\n", + "501 22.4\n", + "502 20.6\n", + "503 23.9\n", + "504 22.0\n", + "505 11.9\n", + "\n", + "[506 rows x 1 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# y вектор результатов (цена недвижимости)\n", + "y = pd.DataFrame(target, columns=[\"price\"])\n", + "\n", + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "f9b127fb", + "metadata": {}, + "outputs": [], + "source": [ + "# разбиваем выборку на Обучающую и тестовую\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state = 42)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "5a7d0735", + "metadata": {}, + "outputs": [], + "source": [ + "scaler = StandardScaler()\n", + "\n", + "X_train_scaled = pd.DataFrame(scaler.fit_transform(X_train), columns=X_train.columns)\n", + "X_test_scaled = pd.DataFrame(scaler.transform(X_test), columns=X_test.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "f2d33b2c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "До:\t(404, 13)\n", + "После:\t(404, 2)\n" + ] + } + ], + "source": [ + "tsne = TSNE(n_components=2, learning_rate=250, random_state=42)\n", + "\n", + "X_train_tsne = tsne.fit_transform(X_train_scaled)\n", + "\n", + "print('До:\\t{}'.format(X_train_scaled.shape))\n", + "print('После:\\t{}'.format(X_train_tsne.shape))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "145b1c10", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " 2021-08-30T23:21:29.663928\r\n", + " image/svg+xml\r\n", + " \r\n", + " \r\n", + " Matplotlib v3.4.0, https://matplotlib.org/\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(X_train_tsne[:, 0], X_train_tsne[:, 1])\n", + "\n", + "plt.show()" + ] + } + ], + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/lesson04_ScikitLearn02.ipynb b/lesson04_ScikitLearn02.ipynb new file mode 100644 index 0000000..6af567e --- /dev/null +++ b/lesson04_ScikitLearn02.ipynb @@ -0,0 +1,2289 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "id": "2cd41bf2", + "metadata": {}, + "outputs": [], + "source": [ + "# загрузка основных модулей\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.manifold import TSNE\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "from sklearn.cluster import KMeans\n", + "\n", + "plt.style.use('fivethirtyeight')\n", + "\n", + "%config InlineBackend.figure_format = 'svg'\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4e5351cd", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTAT
00.0063218.02.310.00.5386.57565.24.09001.0296.015.3396.904.98
10.027310.07.070.00.4696.42178.94.96712.0242.017.8396.909.14
20.027290.07.070.00.4697.18561.14.96712.0242.017.8392.834.03
30.032370.02.180.00.4586.99845.86.06223.0222.018.7394.632.94
40.069050.02.180.00.4587.14754.26.06223.0222.018.7396.905.33
..........................................
5010.062630.011.930.00.5736.59369.12.47861.0273.021.0391.999.67
5020.045270.011.930.00.5736.12076.72.28751.0273.021.0396.909.08
5030.060760.011.930.00.5736.97691.02.16751.0273.021.0396.905.64
5040.109590.011.930.00.5736.79489.32.38891.0273.021.0393.456.48
5050.047410.011.930.00.5736.03080.82.50501.0273.021.0396.907.88
\n", + "

506 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \\\n", + "0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 \n", + "1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 \n", + "2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 \n", + "3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 \n", + "4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 \n", + ".. ... ... ... ... ... ... ... ... ... ... \n", + "501 0.06263 0.0 11.93 0.0 0.573 6.593 69.1 2.4786 1.0 273.0 \n", + "502 0.04527 0.0 11.93 0.0 0.573 6.120 76.7 2.2875 1.0 273.0 \n", + "503 0.06076 0.0 11.93 0.0 0.573 6.976 91.0 2.1675 1.0 273.0 \n", + "504 0.10959 0.0 11.93 0.0 0.573 6.794 89.3 2.3889 1.0 273.0 \n", + "505 0.04741 0.0 11.93 0.0 0.573 6.030 80.8 2.5050 1.0 273.0 \n", + "\n", + " PTRATIO B LSTAT \n", + "0 15.3 396.90 4.98 \n", + "1 17.8 396.90 9.14 \n", + "2 17.8 392.83 4.03 \n", + "3 18.7 394.63 2.94 \n", + "4 18.7 396.90 5.33 \n", + ".. ... ... ... \n", + "501 21.0 391.99 9.67 \n", + "502 21.0 396.90 9.08 \n", + "503 21.0 396.90 5.64 \n", + "504 21.0 393.45 6.48 \n", + "505 21.0 396.90 7.88 \n", + "\n", + "[506 rows x 13 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# загрузка исходных данных\n", + "\n", + "from sklearn.datasets import load_boston\n", + "boston = load_boston()\n", + "\n", + "data = boston[\"data\"]\n", + "feature_names = boston[\"feature_names\"]\n", + "target = boston[\"target\"]\n", + "\n", + "# X матрица признаков\n", + "X = pd.DataFrame(data, columns=feature_names)\n", + "\n", + "\n", + "X" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "2b7e223b", + "metadata": {}, + "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", + "
price
024.0
121.6
234.7
333.4
436.2
......
50122.4
50220.6
50323.9
50422.0
50511.9
\n", + "

506 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " price\n", + "0 24.0\n", + "1 21.6\n", + "2 34.7\n", + "3 33.4\n", + "4 36.2\n", + ".. ...\n", + "501 22.4\n", + "502 20.6\n", + "503 23.9\n", + "504 22.0\n", + "505 11.9\n", + "\n", + "[506 rows x 1 columns]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# y вектор результатов (цена недвижимости)\n", + "y = pd.DataFrame(target, columns=[\"price\"])\n", + "\n", + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "8cf1b14e", + "metadata": {}, + "outputs": [], + "source": [ + "# разбиваем выборку на Обучающую и тестовую\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state = 42)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "955444aa", + "metadata": {}, + "outputs": [], + "source": [ + "scaler = StandardScaler()\n", + "\n", + "X_train_scaled = pd.DataFrame(scaler.fit_transform(X_train), columns=X_train.columns)\n", + "X_test_scaled = pd.DataFrame(scaler.transform(X_test), columns=X_test.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "59bb4639", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "До:\t(404, 13)\n", + "После:\t(404, 2)\n" + ] + } + ], + "source": [ + "tsne = TSNE(n_components=2, learning_rate=250, random_state=42)\n", + "\n", + "X_train_tsne = tsne.fit_transform(X_train_scaled)\n", + "\n", + "print('До:\\t{}'.format(X_train_scaled.shape))\n", + "print('После:\\t{}'.format(X_train_tsne.shape))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "1d63cb6e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\r\n", + "\r\n", + "\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " 2021-08-30T23:43:27.336088\r\n", + " image/svg+xml\r\n", + " \r\n", + " \r\n", + " Matplotlib v3.4.0, https://matplotlib.org/\r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + " \r\n", + "\r\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "kmeans = KMeans(n_clusters=3, random_state=42, max_iter=100)\n", + "\n", + "labels_train = kmeans.fit_predict(X_train_scaled)\n", + "\n", + "plt.scatter(X_train_tsne[:, 0], X_train_tsne[:, 1], c=labels_train)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "24785f86", + "metadata": {}, + "outputs": [], + "source": [ + "labels_test = kmeans.predict(X_test_scaled)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "54cbca40", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "price 22.796535\n", + "dtype: float64" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# средняя по всему\n", + "y_train.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "321a2dba", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "price 27.788372\n", + "dtype: float64" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# средняя по кластеру 1\n", + "y_train[labels_train == 0].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "99c0b043", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "price 16.165354\n", + "dtype: float64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# средняя по кластеру 2\n", + "y_train[labels_train == 1].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "1f1b9e8f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "price 24.958115\n", + "dtype: float64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# средняя по кластеру 3\n", + "y_train[labels_train == 2].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "c0d0fac6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.07356558139534884" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# среднее CRIM по кластеру 1\n", + "X_train.loc[labels_train == 0, 'CRIM'].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "8afda3f6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10.797028425196851" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# среднее CRIM по кластеру 2\n", + "X_train.loc[labels_train == 1, 'CRIM'].mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "94f8e840", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.4216602094240837" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# среднее CRIM по кластеру 3\n", + "X_train.loc[labels_train == 2, 'CRIM'].mean()" + ] + } + ], + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From b979153fad6cdb556d17ef8c70cb1f6f093679a1 Mon Sep 17 00:00:00 2001 From: Artem Viznyuk Date: Mon, 13 Sep 2021 22:37:28 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=9A=D1=83=D1=80=D1=81=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RealEstatePricePredictionMoscow02.ipynb | 4276 +++++++++++++++++++++++ 1 file changed, 4276 insertions(+) create mode 100644 RealEstatePricePredictionMoscow02.ipynb diff --git a/RealEstatePricePredictionMoscow02.ipynb b/RealEstatePricePredictionMoscow02.ipynb new file mode 100644 index 0000000..c8fe35f --- /dev/null +++ b/RealEstatePricePredictionMoscow02.ipynb @@ -0,0 +1,4276 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "6c895a6a", + "metadata": {}, + "outputs": [], + "source": [ + "# импорт используемых библиотек\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "import random\n", + "\n", + "from sklearn.model_selection import train_test_split, cross_val_score\n", + "from sklearn.preprocessing import StandardScaler, RobustScaler\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.metrics import r2_score as r2\n", + "from sklearn.model_selection import KFold, GridSearchCV\n", + "\n", + "from datetime import datetime\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "%matplotlib inline\n", + "\n", + "# отключаем предупреждения\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "\n", + "# устанавливаемый единый размер шрифта\n", + "matplotlib.rcParams.update({'font.size': 14})" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e639b2ff", + "metadata": {}, + "outputs": [], + "source": [ + "# функция для визуальной валидации результатов предсказания\n", + "\n", + "def evaluate_preds(train_true_values, train_pred_values, test_true_values, test_pred_values):\n", + " print(\"Train R2:\\t\" + str(round(r2(train_true_values, train_pred_values), 3)))\n", + " print(\"Test R2:\\t\" + str(round(r2(test_true_values, test_pred_values), 3)))\n", + " \n", + " plt.figure(figsize=(18,10))\n", + " \n", + " plt.subplot(121)\n", + " sns.scatterplot(x=train_pred_values, y=train_true_values)\n", + " plt.xlabel('Predicted values')\n", + " plt.ylabel('True values')\n", + " plt.title('Train sample prediction')\n", + " \n", + " plt.subplot(122)\n", + " sns.scatterplot(x=test_pred_values, y=test_true_values)\n", + " plt.xlabel('Predicted values')\n", + " plt.ylabel('True values')\n", + " plt.title('Test sample prediction')\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "45009ed5", + "metadata": {}, + "outputs": [], + "source": [ + "TRAIN_DATASET_PATH = 'C:/ARTEM/GeekBrains/Python4DS/RealEstatePricePredictionMoscow/train.csv'\n", + "TEST_DATASET_PATH = 'C:/ARTEM/GeekBrains/Python4DS/RealEstatePricePredictionMoscow/test.csv'" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "14b0f3fc", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1Ecology_2Ecology_3Social_1Social_2Social_3Healthcare_1Helthcare_2Shops_1Shops_2Price
99951260612.049.09072833.2726266.0312.019810.300323BB52103116NaN19B119367.455796
999616265272.064.30768437.0384209.0130.019770.072158BB26291NaN00A199715.148807
999727951781.029.64805716.5553635.035.019580.460556BB20438614NaN15B165953.912580
999814561211.032.33029222.3268705.039.019690.194489BB4780043125.035B171842.411855
99997202941.035.81547622.3013676.099.019750.127376BB4384293NaN39B177685.627486
\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "9995 1260 61 2.0 49.090728 33.272626 6.0 3 \n", + "9996 16265 27 2.0 64.307684 37.038420 9.0 13 \n", + "9997 2795 178 1.0 29.648057 16.555363 5.0 3 \n", + "9998 14561 21 1.0 32.330292 22.326870 5.0 3 \n", + "9999 7202 94 1.0 35.815476 22.301367 6.0 9 \n", + "\n", + " HouseFloor HouseYear Ecology_1 Ecology_2 Ecology_3 Social_1 \\\n", + "9995 12.0 1981 0.300323 B B 52 \n", + "9996 0.0 1977 0.072158 B B 2 \n", + "9997 5.0 1958 0.460556 B B 20 \n", + "9998 9.0 1969 0.194489 B B 47 \n", + "9999 9.0 1975 0.127376 B B 43 \n", + "\n", + " Social_2 Social_3 Healthcare_1 Helthcare_2 Shops_1 Shops_2 \\\n", + "9995 10311 6 NaN 1 9 B \n", + "9996 629 1 NaN 0 0 A \n", + "9997 4386 14 NaN 1 5 B \n", + "9998 8004 3 125.0 3 5 B \n", + "9999 8429 3 NaN 3 9 B \n", + "\n", + " Price \n", + "9995 119367.455796 \n", + "9996 199715.148807 \n", + "9997 165953.912580 \n", + "9998 171842.411855 \n", + "9999 177685.627486 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# загружаем обучающую выборку, проверяем данные\n", + "train_df = pd.read_csv(TRAIN_DATASET_PATH)\n", + "train_df.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "18438e1c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Id int64\n", + "DistrictId int64\n", + "Rooms float64\n", + "Square float64\n", + "LifeSquare float64\n", + "KitchenSquare float64\n", + "Floor int64\n", + "HouseFloor float64\n", + "HouseYear int64\n", + "Ecology_1 float64\n", + "Ecology_2 object\n", + "Ecology_3 object\n", + "Social_1 int64\n", + "Social_2 int64\n", + "Social_3 int64\n", + "Healthcare_1 float64\n", + "Helthcare_2 int64\n", + "Shops_1 int64\n", + "Shops_2 object\n", + "Price float64\n", + "dtype: object" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# смотрим типы данных, цель уменьшить размер датасета\n", + "train_df.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e790eca4", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1Ecology_2Ecology_3Social_1Social_2Social_3Healthcare_1Helthcare_2Shops_1Shops_2
499510379292.043.17752130.3399455.065.019620.069660BB3161194NaN12B
499616138383.093.69812294.52146510.02127.020180.060753BB1527872520.007B
499739121011.033.65672319.0032595.025.019660.038693BB28653311015.025B
49985722101.038.63515520.9762579.0814.019700.089040BB3379765NaN011B
499911004212.067.12274233.94434413.0917.020090.194489BB4780043125.035B
\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "4995 10379 29 2.0 43.177521 30.339945 5.0 6 \n", + "4996 16138 38 3.0 93.698122 94.521465 10.0 21 \n", + "4997 3912 101 1.0 33.656723 19.003259 5.0 2 \n", + "4998 5722 10 1.0 38.635155 20.976257 9.0 8 \n", + "4999 11004 21 2.0 67.122742 33.944344 13.0 9 \n", + "\n", + " HouseFloor HouseYear Ecology_1 Ecology_2 Ecology_3 Social_1 \\\n", + "4995 5.0 1962 0.069660 B B 31 \n", + "4996 27.0 2018 0.060753 B B 15 \n", + "4997 5.0 1966 0.038693 B B 28 \n", + "4998 14.0 1970 0.089040 B B 33 \n", + "4999 17.0 2009 0.194489 B B 47 \n", + "\n", + " Social_2 Social_3 Healthcare_1 Helthcare_2 Shops_1 Shops_2 \n", + "4995 6119 4 NaN 1 2 B \n", + "4996 2787 2 520.0 0 7 B \n", + "4997 6533 1 1015.0 2 5 B \n", + "4998 7976 5 NaN 0 11 B \n", + "4999 8004 3 125.0 3 5 B " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# загружаем проверочную выборку, проверяем данные\n", + "\n", + "test_df = pd.read_csv(TEST_DATASET_PATH)\n", + "test_df.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ae193efd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Строк в трейне: 10000\n", + "Строк в тесте 5000\n" + ] + } + ], + "source": [ + "# размеры датасетов\n", + "\n", + "print('Строк в трейне:', train_df.shape[0])\n", + "print('Строк в тесте', test_df.shape[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "ec2ebfcf", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# проверяем размерности датасетов - обучающий нимеет на столбец больше проверочного\n", + "train_df.shape[1] - 1 == test_df.shape[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "17395fc9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Id object\n", + "DistrictId object\n", + "Rooms float64\n", + "Square float64\n", + "LifeSquare float64\n", + "KitchenSquare float64\n", + "Floor int16\n", + "HouseFloor int16\n", + "HouseYear int16\n", + "Ecology_1 float64\n", + "Ecology_2 object\n", + "Ecology_3 object\n", + "Social_1 int64\n", + "Social_2 int64\n", + "Social_3 int64\n", + "Healthcare_1 float64\n", + "Helthcare_2 int64\n", + "Shops_1 int64\n", + "Shops_2 object\n", + "Price float64\n", + "dtype: object" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# приведение типов к строкам, чтобы модель не применяла <> для этих данных\n", + "train_df['Id'] = train_df['Id'].astype(str)\n", + "train_df['DistrictId'] = train_df['DistrictId'].astype(str)\n", + "\n", + "# уменьшаем размерности этажей,этажностей, возраста\n", + "train_df['Floor'] = train_df['Floor'].astype(np.int16)\n", + "train_df['HouseFloor'] = train_df['HouseFloor'].astype(np.int16)\n", + "train_df['HouseYear'] = train_df['HouseYear'].astype(np.int16)\n", + "\n", + "\n", + "# проверяем преобразование\n", + "train_df.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c6491ecb", + "metadata": {}, + "outputs": [], + "source": [ + "### Исследуем данные" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "5ff7bb43", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# гистограма распределения целевых значений\n", + "plt.figure(figsize = (16, 8))\n", + "\n", + "train_df['Price'].hist(bins=30)\n", + "plt.ylabel('Count')\n", + "plt.xlabel('Price')\n", + "\n", + "plt.title('Target distribution')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "07ea1861", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1Social_1Social_2Social_3Healthcare_1Helthcare_2Shops_1Price
count10000.00000010000.0000007887.00000010000.00000010000.00000010000.00000010000.00000010000.00000010000.00000010000.00000010000.0000005202.00000010000.00000010000.00000010000.000000
mean1.89050056.31577537.1996456.2733008.52670012.6094001984.7647000.11885824.6870005352.1574008.0392001142.9044601.3195004.231300214138.857399
std0.83951221.05873286.24120928.5609175.2411486.77597453.1127560.11902517.5326144006.79980323.8318751021.5172641.4936014.80634192872.293865
min0.0000001.1368590.3706190.0000001.0000000.000000-2005.0000000.0000000.000000168.0000000.0000000.0000000.0000000.00000059174.778028
25%1.00000041.77488122.7698321.0000004.0000009.0000001974.0000000.0176476.0000001564.0000000.000000350.0000000.0000001.000000153872.633942
50%2.00000052.51331032.7812606.0000007.00000013.0000001977.0000000.07542425.0000005285.0000002.000000900.0000001.0000003.000000192269.644879
75%2.00000065.90062545.1288039.00000012.00000017.0000002001.0000000.19578136.0000007227.0000005.0000001548.0000002.0000006.000000249135.462171
max19.000000641.0651937480.5921292014.00000042.000000117.0000004968.0000000.52186774.00000019083.000000141.0000004849.0000006.00000023.000000633233.466570
\n", + "
" + ], + "text/plain": [ + " Rooms Square LifeSquare KitchenSquare Floor \\\n", + "count 10000.000000 10000.000000 7887.000000 10000.000000 10000.000000 \n", + "mean 1.890500 56.315775 37.199645 6.273300 8.526700 \n", + "std 0.839512 21.058732 86.241209 28.560917 5.241148 \n", + "min 0.000000 1.136859 0.370619 0.000000 1.000000 \n", + "25% 1.000000 41.774881 22.769832 1.000000 4.000000 \n", + "50% 2.000000 52.513310 32.781260 6.000000 7.000000 \n", + "75% 2.000000 65.900625 45.128803 9.000000 12.000000 \n", + "max 19.000000 641.065193 7480.592129 2014.000000 42.000000 \n", + "\n", + " HouseFloor HouseYear Ecology_1 Social_1 Social_2 \\\n", + "count 10000.000000 10000.000000 10000.000000 10000.000000 10000.000000 \n", + "mean 12.609400 1984.764700 0.118858 24.687000 5352.157400 \n", + "std 6.775974 53.112756 0.119025 17.532614 4006.799803 \n", + "min 0.000000 -2005.000000 0.000000 0.000000 168.000000 \n", + "25% 9.000000 1974.000000 0.017647 6.000000 1564.000000 \n", + "50% 13.000000 1977.000000 0.075424 25.000000 5285.000000 \n", + "75% 17.000000 2001.000000 0.195781 36.000000 7227.000000 \n", + "max 117.000000 4968.000000 0.521867 74.000000 19083.000000 \n", + "\n", + " Social_3 Healthcare_1 Helthcare_2 Shops_1 Price \n", + "count 10000.000000 5202.000000 10000.000000 10000.000000 10000.000000 \n", + "mean 8.039200 1142.904460 1.319500 4.231300 214138.857399 \n", + "std 23.831875 1021.517264 1.493601 4.806341 92872.293865 \n", + "min 0.000000 0.000000 0.000000 0.000000 59174.778028 \n", + "25% 0.000000 350.000000 0.000000 1.000000 153872.633942 \n", + "50% 2.000000 900.000000 1.000000 3.000000 192269.644879 \n", + "75% 5.000000 1548.000000 2.000000 6.000000 249135.462171 \n", + "max 141.000000 4849.000000 6.000000 23.000000 633233.466570 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# смотрим на параметры для данных выборки\n", + "train_df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "983e0cfd", + "metadata": {}, + "outputs": [], + "source": [ + "# количество комнат \n", + "# 0 - допустимое значение для студии\n", + "# площадь" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "8923291f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Id', 'DistrictId', 'Ecology_2', 'Ecology_3', 'Shops_2']" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.select_dtypes(include='object').columns.tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "30f9ec22", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "27 851\n", + "1 652\n", + "23 565\n", + "6 511\n", + "9 294\n", + " ... \n", + "199 1\n", + "117 1\n", + "207 1\n", + "209 1\n", + "174 1\n", + "Name: DistrictId, Length: 205, dtype: int64" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['DistrictId'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "81c3d0f4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "B 9903\n", + "A 97\n", + "Name: Ecology_2, dtype: int64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Ecology_2'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "80b59c3a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "B 9725\n", + "A 275\n", + "Name: Ecology_3, dtype: int64" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Ecology_3'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "bb41a69d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "B 9175\n", + "A 825\n", + "Name: Shops_2, dtype: int64" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Shops_2'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "7761c352", + "metadata": {}, + "outputs": [], + "source": [ + "# Обработка выбросов\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "20aabf1e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.0 3880\n", + "1.0 3705\n", + "3.0 2235\n", + "4.0 150\n", + "5.0 18\n", + "0.0 8\n", + "10.0 2\n", + "19.0 1\n", + "6.0 1\n", + "Name: Rooms, dtype: int64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Rooms'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "5acd823b", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1Ecology_2Ecology_3Social_1Social_2Social_3Healthcare_1Helthcare_2Shops_1Shops_2Price
011809273.0115.027311NaN10.041020140.075424BB1130970NaN00B305018.871089
13013221.039.83252423.1692238.07819660.118537BB30620711183.010B177734.553407
2821513.078.34221547.67197210.021719880.025609BB3352610240.031B282078.720850
3235211.040.409907NaN1.0102219770.007122BB12640NaN01B168106.007630
413866942.064.28506738.5625179.0161619720.282798BB3386672NaN06B343995.102962
\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 NaN 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 NaN 1.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 Ecology_2 Ecology_3 Social_1 Social_2 \\\n", + "0 10 2014 0.075424 B B 11 3097 \n", + "1 8 1966 0.118537 B B 30 6207 \n", + "2 17 1988 0.025609 B B 33 5261 \n", + "3 22 1977 0.007122 B B 1 264 \n", + "4 16 1972 0.282798 B B 33 8667 \n", + "\n", + " Social_3 Healthcare_1 Helthcare_2 Shops_1 Shops_2 Price \n", + "0 0 NaN 0 0 B 305018.871089 \n", + "1 1 1183.0 1 0 B 177734.553407 \n", + "2 0 240.0 3 1 B 282078.720850 \n", + "3 0 NaN 0 1 B 168106.007630 \n", + "4 2 NaN 0 6 B 343995.102962 " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# пример, где считаем выбросами количество комнат равное 0 или >=6: создаем столбец Rooms_outlier, \n", + "# где указываем недоверие к числу комнат\n", + "\n", + "#train_df['Rooms_outlier'] = 0\n", + "#train_df.loc[(train_df['Rooms'] == 0) | (train_df['Rooms'] >= 6), 'Rooms_outlier'] = 1\n", + "#train_df.loc[train_df['Rooms'] == 0, 'Rooms'] = 1\n", + "#train_df.loc[train_df['Rooms'] >= 6, 'Rooms'] = train_df['Rooms'].median()\n", + "\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "8c897557", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.0 3880\n", + "1.0 3705\n", + "3.0 2235\n", + "4.0 150\n", + "5.0 18\n", + "0.0 8\n", + "10.0 2\n", + "19.0 1\n", + "6.0 1\n", + "Name: Rooms, dtype: int64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Rooms'].value_counts()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "070297c7", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0 2460\n", + "8.0 1306\n", + "5.0 1169\n", + "10.0 1075\n", + "6.0 1038\n", + "9.0 843\n", + "0.0 697\n", + "7.0 609\n", + "12.0 249\n", + "11.0 233\n", + "13.0 67\n", + "14.0 51\n", + "4.0 39\n", + "15.0 31\n", + "3.0 22\n", + "16.0 16\n", + "20.0 14\n", + "17.0 12\n", + "19.0 11\n", + "18.0 6\n", + "2.0 4\n", + "22.0 3\n", + "30.0 2\n", + "43.0 2\n", + "41.0 2\n", + "112.0 2\n", + "25.0 2\n", + "51.0 2\n", + "37.0 2\n", + "58.0 2\n", + "32.0 2\n", + "21.0 1\n", + "73.0 1\n", + "75.0 1\n", + "36.0 1\n", + "27.0 1\n", + "63.0 1\n", + "1970.0 1\n", + "54.0 1\n", + "53.0 1\n", + "60.0 1\n", + "26.0 1\n", + "66.0 1\n", + "39.0 1\n", + "29.0 1\n", + "78.0 1\n", + "31.0 1\n", + "84.0 1\n", + "48.0 1\n", + "96.0 1\n", + "42.0 1\n", + "40.0 1\n", + "23.0 1\n", + "72.0 1\n", + "35.0 1\n", + "62.0 1\n", + "123.0 1\n", + "2014.0 1\n", + "Name: KitchenSquare, dtype: int64" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['KitchenSquare'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "d0c61fac", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(13.0, 0.0)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['KitchenSquare'].quantile(.975), train_df['KitchenSquare'].quantile(.025)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "e64fb693", + "metadata": {}, + "outputs": [], + "source": [ + "# обрабатываем выбросы в площадях кухни\n", + "condition = (train_df['KitchenSquare'].isna()) \\\n", + " | (train_df['KitchenSquare'] > train_df['KitchenSquare'].quantile(.975))\n", + " \n", + "train_df.loc[condition, 'KitchenSquare'] = train_df['KitchenSquare'].median()\n", + "\n", + "train_df.loc[train_df['KitchenSquare'] < 3, 'KitchenSquare'] = 3" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "4e632236", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.0 3183\n", + "8.0 1306\n", + "6.0 1227\n", + "5.0 1169\n", + "10.0 1075\n", + "9.0 843\n", + "7.0 609\n", + "12.0 249\n", + "11.0 233\n", + "13.0 67\n", + "4.0 39\n", + "Name: KitchenSquare, dtype: int64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['KitchenSquare'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "38abe743", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n", + " 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\n", + " 26, 27, 28, 29, 30, 31, 32, 36, 37, 38, 39, 40, 44,\n", + " 45, 47, 48, 99, 117], dtype=int16)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# исследуем этажность зданий\n", + "\n", + "train_df['HouseFloor'].sort_values().unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "03135765", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", + " 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, 32, 33, 37, 42],\n", + " dtype=int16)" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# исследуем этаж\n", + "\n", + "train_df['Floor'].sort_values().unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "d2b2bb71", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1825" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# находим случаи, когда этаж больше этажности здания\n", + "(train_df['Floor'] > train_df['HouseFloor']).sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "b5f769f4", + "metadata": {}, + "outputs": [], + "source": [ + "# добавляем признак достоверности этажа\n", + "train_df['HouseFloor_outlier'] = 0\n", + "train_df.loc[train_df['HouseFloor'] == 0, 'HouseFloor_outlier'] = 1\n", + "train_df.loc[train_df['Floor'] > train_df['HouseFloor'], 'HouseFloor_outlier'] = 1" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "863234a8", + "metadata": {}, + "outputs": [], + "source": [ + "# некорректную этажность заменяем медианой\n", + "train_df.loc[train_df['HouseFloor'] == 0, 'HouseFloor'] = train_df['HouseFloor'].median()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "35b81479", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Int64Index([ 17, 19, 21, 25, 26, 33, 34, 37, 39, 44,\n", + " ...\n", + " 9913, 9921, 9930, 9931, 9938, 9953, 9960, 9968, 9970, 9975],\n", + " dtype='int64', length=1610)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# смотрим на id проблемных записей по этажам\n", + "floor_outliers = train_df.loc[train_df['Floor'] > train_df['HouseFloor']].index\n", + "floor_outliers" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "d8c40d18", + "metadata": {}, + "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", + "
PriceSquareMeter_price
count10000.00000010000.00000010000.000000
mean214138.85739956.3157753988.383777
std92872.29386521.0587323755.437224
min59174.7780281.136859208.293451
25%153872.63394241.7748812918.525328
50%192269.64487952.5133103910.052336
75%249135.46217165.9006254692.375993
max633233.466570641.065193230463.537966
\n", + "
" + ], + "text/plain": [ + " Price Square Meter_price\n", + "count 10000.000000 10000.000000 10000.000000\n", + "mean 214138.857399 56.315775 3988.383777\n", + "std 92872.293865 21.058732 3755.437224\n", + "min 59174.778028 1.136859 208.293451\n", + "25% 153872.633942 41.774881 2918.525328\n", + "50% 192269.644879 52.513310 3910.052336\n", + "75% 249135.462171 65.900625 4692.375993\n", + "max 633233.466570 641.065193 230463.537966" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Добавляем цену квадратного метра AV\n", + "train_df['Meter_price'] = 0\n", + "train_df.loc[train_df['Square'] > 0, 'Meter_price'] = train_df['Price'] / train_df['Square']\n", + "#train_df['Meter_price'].sort_values(ascending=False)\n", + "train_df[['Price', 'Square', 'Meter_price']].describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "9f6e136e", + "metadata": {}, + "outputs": [], + "source": [ + "# подстановка для значений этажа\n", + "train_df.loc[floor_outliers, 'Floor'] = train_df.loc[floor_outliers, 'HouseFloor']\\\n", + " .apply(lambda x: random.randint(1, x))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "37b4218f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(train_df['Floor'] > train_df['HouseFloor']).sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "a83f6692", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8828 4968\n", + "6073 2020\n", + "5641 2020\n", + "2350 2020\n", + "9091 2020\n", + " ... \n", + "6250 1914\n", + "2066 1912\n", + "2795 1912\n", + "6794 1910\n", + "9163 -2005\n", + "Name: HouseYear, Length: 10000, dtype: int16" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# выводим года постройки\n", + "train_df['HouseYear'].sort_values(ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "b5f4456f", + "metadata": {}, + "outputs": [], + "source": [ + "# если год постройки еще не наступал, то меняем на текущий, можно менять на медиану\n", + "train_df.loc[train_df['HouseYear'] > 2021, 'HouseYear'] = 2021\n", + "# если дом слишком древний, до 1910 - это первый разумный минимум. Заменяем медианой\n", + "train_df.loc[train_df['HouseYear'] < 1910, 'HouseYear'] = train_df['HouseYear'].median()\n", + "# год можно также предсказывать по этажности, по району и т.д.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "9c753033", + "metadata": {}, + "outputs": [], + "source": [ + "# обработка пропусков" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "f310a637", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Id 0\n", + "DistrictId 0\n", + "Rooms 0\n", + "Square 0\n", + "LifeSquare 2113\n", + "KitchenSquare 0\n", + "Floor 0\n", + "HouseFloor 0\n", + "HouseYear 0\n", + "Ecology_1 0\n", + "Ecology_2 0\n", + "Ecology_3 0\n", + "Social_1 0\n", + "Social_2 0\n", + "Social_3 0\n", + "Healthcare_1 4798\n", + "Helthcare_2 0\n", + "Shops_1 0\n", + "Shops_2 0\n", + "Price 0\n", + "HouseFloor_outlier 0\n", + "Meter_price 0\n", + "dtype: int64" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.isna().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "d914ad63", + "metadata": {}, + "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", + "
SquareLifeSquareKitchenSquare
0115.027311NaN10.0
139.83252423.1692238.0
278.34221547.67197210.0
340.409907NaN3.0
464.28506738.5625179.0
562.52846547.1038336.0
633.93875021.7729309.0
750.39181432.8932568.0
846.88789244.6281323.0
979.86747775.0851253.0
\n", + "
" + ], + "text/plain": [ + " Square LifeSquare KitchenSquare\n", + "0 115.027311 NaN 10.0\n", + "1 39.832524 23.169223 8.0\n", + "2 78.342215 47.671972 10.0\n", + "3 40.409907 NaN 3.0\n", + "4 64.285067 38.562517 9.0\n", + "5 62.528465 47.103833 6.0\n", + "6 33.938750 21.772930 9.0\n", + "7 50.391814 32.893256 8.0\n", + "8 46.887892 44.628132 3.0\n", + "9 79.867477 75.085125 3.0" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df[['Square', 'LifeSquare', 'KitchenSquare']].head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "b68c9268", + "metadata": {}, + "outputs": [], + "source": [ + "# если нет данных по жилой площади - добавляем признак и пытаемся расчитать\n", + "train_df['LifeSquare_nan'] = train_df['LifeSquare'].isna() * 1\n", + "\n", + "condition = (train_df['LifeSquare'].isna()) \\\n", + " & (~train_df['Square'].isna()) \\\n", + " & (~train_df['KitchenSquare'].isna())\n", + " \n", + "train_df.loc[condition, 'LifeSquare'] = train_df.loc[condition, 'Square'] \\\n", + " - train_df.loc[condition, 'KitchenSquare'] - 3" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "e1c3b780", + "metadata": {}, + "outputs": [], + "source": [ + "#train_df[['Healthcare_1','Healthcare_2']].head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "383b8664", + "metadata": {}, + "outputs": [], + "source": [ + "train_df.drop('Healthcare_1', axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "a113fc25", + "metadata": {}, + "outputs": [], + "source": [ + "class DataPreprocessing:\n", + " \"\"\"Подготовка исходных данных\"\"\"\n", + "\n", + " def __init__(self):\n", + " \"\"\"Параметры класса\"\"\"\n", + " self.medians = None\n", + " self.kitchen_square_quantile = None\n", + " \n", + " def fit(self, X):\n", + " \"\"\"Сохранение статистик\"\"\" \n", + " # Расчет медиан\n", + " self.medians = X.median()\n", + " self.kitchen_square_quantile = X['KitchenSquare'].quantile(.975)\n", + " \n", + " def transform(self, X):\n", + " \"\"\"Трансформация данных\"\"\"\n", + "\n", + " # Rooms\n", + " X['Rooms_outlier'] = 0\n", + " X.loc[(X['Rooms'] == 0) | (X['Rooms'] >= 6), 'Rooms_outlier'] = 1\n", + " \n", + " X.loc[X['Rooms'] == 0, 'Rooms'] = 1\n", + " X.loc[X['Rooms'] >= 6, 'Rooms'] = self.medians['Rooms']\n", + " \n", + " # KitchenSquare\n", + " condition = (X['KitchenSquare'].isna()) \\\n", + " | (X['KitchenSquare'] > self.kitchen_square_quantile)\n", + " \n", + " X.loc[condition, 'KitchenSquare'] = self.medians['KitchenSquare']\n", + "\n", + " X.loc[X['KitchenSquare'] < 3, 'KitchenSquare'] = 3\n", + " \n", + " # HouseFloor, Floor\n", + " X['HouseFloor_outlier'] = 0\n", + " X.loc[X['HouseFloor'] == 0, 'HouseFloor_outlier'] = 1\n", + " X.loc[X['Floor'] > X['HouseFloor'], 'HouseFloor_outlier'] = 1\n", + " \n", + " X.loc[X['HouseFloor'] == 0, 'HouseFloor'] = self.medians['HouseFloor']\n", + " \n", + " floor_outliers = X.loc[X['Floor'] > X['HouseFloor']].index\n", + " X.loc[floor_outliers, 'Floor'] = X.loc[floor_outliers, 'HouseFloor']\\\n", + " .apply(lambda x: random.randint(1, x))\n", + " \n", + " # HouseYear\n", + " current_year = datetime.now().year\n", + " \n", + " X['HouseYear_outlier'] = 0\n", + " \n", + " X.loc[X['HouseYear'] > current_year, 'HouseYear_outlier'] = 1 \n", + " X.loc[X['HouseYear'] > current_year, 'HouseYear'] = current_year\n", + " \n", + " # AV\n", + " #==========================================================================\n", + " X.loc[X['HouseYear'] < 1910, 'HouseYear_outlier'] = 1 \n", + " X.loc[X['HouseYear'] < 1910, 'HouseYear'] = self.medians['HouseYear']\n", + " #==========================================================================\n", + " X.loc[X['Square'].isna(), 'Square'] = self.medians['Square'] \n", + " #==========================================================================\n", + " \n", + " \n", + " # Healthcare_1\n", + " if 'Healthcare_1' in X.columns:\n", + " X.drop('Healthcare_1', axis=1, inplace=True)\n", + " \n", + " # LifeSquare\n", + " X['LifeSquare_nan'] = X['LifeSquare'].isna() * 1\n", + " condition = (X['LifeSquare'].isna()) & \\\n", + " (~X['Square'].isna()) & \\\n", + " (~X['KitchenSquare'].isna())\n", + " \n", + " X.loc[condition, 'LifeSquare'] = X.loc[condition, 'Square'] - X.loc[condition, 'KitchenSquare'] - 3\n", + " \n", + " \n", + " X.fillna(self.medians, inplace=True)\n", + " \n", + " return X" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "ff95fb13", + "metadata": {}, + "outputs": [], + "source": [ + "# построение новых признаков" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "11e1d608", + "metadata": {}, + "outputs": [], + "source": [ + "# заменяем A/B на 0/1\n", + "binary_to_numbers = {'A': 0, 'B': 1}\n", + "\n", + "train_df['Ecology_2'] = train_df['Ecology_2'].replace(binary_to_numbers)\n", + "train_df['Ecology_3'] = train_df['Ecology_3'].replace(binary_to_numbers)\n", + "train_df['Shops_2'] = train_df['Shops_2'].replace(binary_to_numbers)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "8a00e237", + "metadata": {}, + "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", + "
DistrictIdDistrictSize
027851
11652
223565
36511
49294
\n", + "
" + ], + "text/plain": [ + " DistrictId DistrictSize\n", + "0 27 851\n", + "1 1 652\n", + "2 23 565\n", + "3 6 511\n", + "4 9 294" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# добавляем размер района\n", + "district_size = train_df['DistrictId'].value_counts().reset_index()\\\n", + " .rename(columns={'index':'DistrictId', 'DistrictId':'DistrictSize'})\n", + "\n", + "district_size.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "a479ebce", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1...Social_2Social_3Helthcare_2Shops_1Shops_2PriceHouseFloor_outlierMeter_priceLifeSquare_nanDistrictSize
011809273.0115.027311102.02731110.041020140.075424...30970001305018.87108902651.7082721851
13013221.039.83252423.1692238.07819660.118537...62071101177734.55340704462.045990078
2821513.078.34221547.67197210.021719880.025609...52610311282078.72085003600.5966980652
3235211.040.40990734.4099073.0102219770.007122...2640011168106.00763004160.0196701652
413866942.064.28506738.5625179.0161619720.282798...86672061343995.10296205351.088794089
\n", + "

5 rows × 23 columns

\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 102.027311 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 34.409907 3.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 ... Social_2 Social_3 Helthcare_2 \\\n", + "0 10 2014 0.075424 ... 3097 0 0 \n", + "1 8 1966 0.118537 ... 6207 1 1 \n", + "2 17 1988 0.025609 ... 5261 0 3 \n", + "3 22 1977 0.007122 ... 264 0 0 \n", + "4 16 1972 0.282798 ... 8667 2 0 \n", + "\n", + " Shops_1 Shops_2 Price HouseFloor_outlier Meter_price \\\n", + "0 0 1 305018.871089 0 2651.708272 \n", + "1 0 1 177734.553407 0 4462.045990 \n", + "2 1 1 282078.720850 0 3600.596698 \n", + "3 1 1 168106.007630 0 4160.019670 \n", + "4 6 1 343995.102962 0 5351.088794 \n", + "\n", + " LifeSquare_nan DistrictSize \n", + "0 1 851 \n", + "1 0 78 \n", + "2 0 652 \n", + "3 1 652 \n", + "4 0 89 \n", + "\n", + "[5 rows x 23 columns]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# добавляем призак в датасет\n", + "train_df = train_df.merge(district_size, on='DistrictId', how='left')\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "aebec7b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True 5069\n", + "False 4931\n", + "Name: DistrictSize, dtype: int64" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# большие районы\n", + "(train_df['DistrictSize'] > 100).value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "bdc9ecf1", + "metadata": {}, + "outputs": [], + "source": [ + "train_df['IsDistrictLarge'] = (train_df['DistrictSize'] > 100).astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "9bc15614", + "metadata": {}, + "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", + "
DistrictIdRoomsMedPriceByDistrict
001.0142799.434052
102.0176210.812334
203.0300610.359425
311.0146735.671740
412.0202706.090239
\n", + "
" + ], + "text/plain": [ + " DistrictId Rooms MedPriceByDistrict\n", + "0 0 1.0 142799.434052\n", + "1 0 2.0 176210.812334\n", + "2 0 3.0 300610.359425\n", + "3 1 1.0 146735.671740\n", + "4 1 2.0 202706.090239" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# медианная стоимость по району\n", + "med_price_by_district = train_df.groupby(['DistrictId', 'Rooms'], as_index=False).agg({'Price':'median'})\\\n", + " .rename(columns={'Price':'MedPriceByDistrict'})\n", + "\n", + "med_price_by_district.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "b6129f8e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(675, 3)" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "med_price_by_district.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "0d3d34ef", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1...Helthcare_2Shops_1Shops_2PriceHouseFloor_outlierMeter_priceLifeSquare_nanDistrictSizeIsDistrictLargeMedPriceByDistrict
011809273.0115.027311102.02731110.041020140.075424...001305018.87108902651.70827218511213530.788443
13013221.039.83252423.1692238.07819660.118537...101177734.55340704462.0459900780146032.829834
2821513.078.34221547.67197210.021719880.025609...311282078.72085003600.59669806521244005.272380
3235211.040.40990734.4099073.0102219770.007122...011168106.00763004160.01967016521146735.671740
413866942.064.28506738.5625179.0161619720.282798...061343995.10296205351.0887940890201584.441255
\n", + "

5 rows × 25 columns

\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 102.027311 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 34.409907 3.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 ... Helthcare_2 Shops_1 Shops_2 \\\n", + "0 10 2014 0.075424 ... 0 0 1 \n", + "1 8 1966 0.118537 ... 1 0 1 \n", + "2 17 1988 0.025609 ... 3 1 1 \n", + "3 22 1977 0.007122 ... 0 1 1 \n", + "4 16 1972 0.282798 ... 0 6 1 \n", + "\n", + " Price HouseFloor_outlier Meter_price LifeSquare_nan \\\n", + "0 305018.871089 0 2651.708272 1 \n", + "1 177734.553407 0 4462.045990 0 \n", + "2 282078.720850 0 3600.596698 0 \n", + "3 168106.007630 0 4160.019670 1 \n", + "4 343995.102962 0 5351.088794 0 \n", + "\n", + " DistrictSize IsDistrictLarge MedPriceByDistrict \n", + "0 851 1 213530.788443 \n", + "1 78 0 146032.829834 \n", + "2 652 1 244005.272380 \n", + "3 652 1 146735.671740 \n", + "4 89 0 201584.441255 \n", + "\n", + "[5 rows x 25 columns]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df = train_df.merge(med_price_by_district, on=['DistrictId', 'Rooms'], how='left')\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "16892db7", + "metadata": {}, + "outputs": [], + "source": [ + "# категоризация\n", + "def floor_to_cat(X):\n", + "\n", + " X['floor_cat'] = 0\n", + "\n", + " X.loc[X['Floor'] <= 3, 'floor_cat'] = 1 \n", + " X.loc[(X['Floor'] > 3) & (X['Floor'] <= 5), 'floor_cat'] = 2\n", + " X.loc[(X['Floor'] > 5) & (X['Floor'] <= 9), 'floor_cat'] = 3\n", + " X.loc[(X['Floor'] > 9) & (X['Floor'] <= 15), 'floor_cat'] = 4\n", + " X.loc[X['Floor'] > 15, 'floor_cat'] = 5\n", + "\n", + " return X\n", + "\n", + "\n", + "def floor_to_cat_pandas(X):\n", + " bins = [0, 3, 5, 9, 15, X['Floor'].max()]\n", + " X['floor_cat'] = pd.cut(X['Floor'], bins=bins, labels=False)\n", + " \n", + " X['floor_cat'].fillna(-1, inplace=True)\n", + " return X\n", + "\n", + "\n", + "def year_to_cat(X):\n", + "\n", + " X['year_cat'] = 0\n", + "\n", + " X.loc[X['HouseYear'] <= 1941, 'year_cat'] = 1\n", + " X.loc[(X['HouseYear'] > 1941) & (X['HouseYear'] <= 1945), 'year_cat'] = 2\n", + " X.loc[(X['HouseYear'] > 1945) & (X['HouseYear'] <= 1980), 'year_cat'] = 3\n", + " X.loc[(X['HouseYear'] > 1980) & (X['HouseYear'] <= 2000), 'year_cat'] = 4\n", + " X.loc[(X['HouseYear'] > 2000) & (X['HouseYear'] <= 2010), 'year_cat'] = 5\n", + " X.loc[(X['HouseYear'] > 2010), 'year_cat'] = 6\n", + "\n", + " return X\n", + "\n", + "\n", + "def year_to_cat_pandas(X):\n", + " bins = [0, 1941, 1945, 1980, 2000, 2010, X['HouseYear'].max()]\n", + " X['year_cat'] = pd.cut(X['HouseYear'], bins=bins, labels=False)\n", + " \n", + " X['year_cat'].fillna(-1, inplace=True)\n", + " return X" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "95906706", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 1\n", + "1 2\n", + "2 0\n", + "3 3\n", + "4 4\n", + " ..\n", + "9995 0\n", + "9996 3\n", + "9997 0\n", + "9998 0\n", + "9999 2\n", + "Name: Floor, Length: 10000, dtype: int64" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bins = [0, 3, 5, 9, 15, train_df['Floor'].max()]\n", + "pd.cut(train_df['Floor'], bins=bins, labels=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "e47e6ba7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 (3, 5]\n", + "1 (5, 9]\n", + "2 (0, 3]\n", + "3 (9, 15]\n", + "4 (15, 42]\n", + " ... \n", + "9995 (0, 3]\n", + "9996 (9, 15]\n", + "9997 (0, 3]\n", + "9998 (0, 3]\n", + "9999 (5, 9]\n", + "Name: Floor, Length: 10000, dtype: category\n", + "Categories (5, interval[int64, right]): [(0, 3] < (3, 5] < (5, 9] < (9, 15] < (15, 42]]" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bins = [0, 3, 5, 9, 15, train_df['Floor'].max()]\n", + "pd.cut(train_df['Floor'], bins=bins)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "20ca77d2", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1...Shops_2PriceHouseFloor_outlierMeter_priceLifeSquare_nanDistrictSizeIsDistrictLargeMedPriceByDistrictyear_catfloor_cat
011809273.0115.027311102.02731110.041020140.075424...1305018.87108902651.70827218511213530.78844362
13013221.039.83252423.1692238.07819660.118537...1177734.55340704462.0459900780146032.82983433
2821513.078.34221547.67197210.021719880.025609...1282078.72085003600.59669806521244005.27238041
3235211.040.40990734.4099073.0102219770.007122...1168106.00763004160.01967016521146735.67174034
413866942.064.28506738.5625179.0161619720.282798...1343995.10296205351.0887940890201584.44125535
\n", + "

5 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 102.027311 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 34.409907 3.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 ... Shops_2 Price \\\n", + "0 10 2014 0.075424 ... 1 305018.871089 \n", + "1 8 1966 0.118537 ... 1 177734.553407 \n", + "2 17 1988 0.025609 ... 1 282078.720850 \n", + "3 22 1977 0.007122 ... 1 168106.007630 \n", + "4 16 1972 0.282798 ... 1 343995.102962 \n", + "\n", + " HouseFloor_outlier Meter_price LifeSquare_nan DistrictSize \\\n", + "0 0 2651.708272 1 851 \n", + "1 0 4462.045990 0 78 \n", + "2 0 3600.596698 0 652 \n", + "3 0 4160.019670 1 652 \n", + "4 0 5351.088794 0 89 \n", + "\n", + " IsDistrictLarge MedPriceByDistrict year_cat floor_cat \n", + "0 1 213530.788443 6 2 \n", + "1 0 146032.829834 3 3 \n", + "2 1 244005.272380 4 1 \n", + "3 1 146735.671740 3 4 \n", + "4 0 201584.441255 3 5 \n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df = year_to_cat(train_df)\n", + "train_df = floor_to_cat(train_df)\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "a3fb003c", + "metadata": {}, + "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", + "
year_catfloor_catMedPriceByFloorYear
011357700.724533
112324303.812481
213429825.896082
314274992.472366
421467230.539057
\n", + "
" + ], + "text/plain": [ + " year_cat floor_cat MedPriceByFloorYear\n", + "0 1 1 357700.724533\n", + "1 1 2 324303.812481\n", + "2 1 3 429825.896082\n", + "3 1 4 274992.472366\n", + "4 2 1 467230.539057" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#!!! медианная цена по году и этажу\n", + "med_price_by_floor_year = train_df.groupby(['year_cat', 'floor_cat'], as_index=False).agg({'Price':'median'}).\\\n", + " rename(columns={'Price':'MedPriceByFloorYear'})\n", + "med_price_by_floor_year.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "16adca39", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1...PriceHouseFloor_outlierMeter_priceLifeSquare_nanDistrictSizeIsDistrictLargeMedPriceByDistrictyear_catfloor_catMedPriceByFloorYear
011809273.0115.027311102.02731110.041020140.075424...305018.87108902651.70827218511213530.78844362164803.070010
13013221.039.83252423.1692238.07819660.118537...177734.55340704462.0459900780146032.82983433192448.500518
2821513.078.34221547.67197210.021719880.025609...282078.72085003600.59669806521244005.27238041207856.713420
3235211.040.40990734.4099073.0102219770.007122...168106.00763004160.01967016521146735.67174034183469.921382
413866942.064.28506738.5625179.0161619720.282798...343995.10296205351.0887940890201584.44125535173955.556579
\n", + "

5 rows × 28 columns

\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 102.027311 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 34.409907 3.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 ... Price HouseFloor_outlier \\\n", + "0 10 2014 0.075424 ... 305018.871089 0 \n", + "1 8 1966 0.118537 ... 177734.553407 0 \n", + "2 17 1988 0.025609 ... 282078.720850 0 \n", + "3 22 1977 0.007122 ... 168106.007630 0 \n", + "4 16 1972 0.282798 ... 343995.102962 0 \n", + "\n", + " Meter_price LifeSquare_nan DistrictSize IsDistrictLarge \\\n", + "0 2651.708272 1 851 1 \n", + "1 4462.045990 0 78 0 \n", + "2 3600.596698 0 652 1 \n", + "3 4160.019670 1 652 1 \n", + "4 5351.088794 0 89 0 \n", + "\n", + " MedPriceByDistrict year_cat floor_cat MedPriceByFloorYear \n", + "0 213530.788443 6 2 164803.070010 \n", + "1 146032.829834 3 3 192448.500518 \n", + "2 244005.272380 4 1 207856.713420 \n", + "3 146735.671740 3 4 183469.921382 \n", + "4 201584.441255 3 5 173955.556579 \n", + "\n", + "[5 rows x 28 columns]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df = train_df.merge(med_price_by_floor_year, on=['year_cat', 'floor_cat'], how='left')\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "1fa55c19", + "metadata": {}, + "outputs": [], + "source": [ + "class FeatureGenetator():\n", + " \"\"\"Генерация новых фич\"\"\"\n", + " \n", + " def __init__(self):\n", + " self.DistrictId_counts = None\n", + " self.binary_to_numbers = None\n", + " self.med_price_by_district = None\n", + " self.med_price_by_floor_year = None\n", + " self.house_year_max = None\n", + " self.floor_max = None\n", + " self.district_size = None\n", + " self.meter_price = None #AV\n", + " \n", + " def fit(self, X, y=None):\n", + " \n", + " X = X.copy()\n", + " \n", + " # Binary features\n", + " self.binary_to_numbers = {'A': 0, 'B': 1}\n", + " \n", + " # DistrictID\n", + " self.district_size = X['DistrictId'].value_counts().reset_index() \\\n", + " .rename(columns={'index':'DistrictId', 'DistrictId':'DistrictSize'})\n", + " \n", + " # Target encoding\n", + " ## District, Rooms\n", + " df = X.copy()\n", + " \n", + " if y is not None:\n", + " df['Price'] = y.values\n", + " \n", + " self.med_price_by_district = df.groupby(['DistrictId', 'Rooms'], as_index=False).agg({'Price':'median'})\\\n", + " .rename(columns={'Price':'MedPriceByDistrict'})\n", + " \n", + " self.med_price_by_district_median = self.med_price_by_district['MedPriceByDistrict'].median()\n", + " \n", + " ## floor, year\n", + " if y is not None:\n", + " self.floor_max = df['Floor'].max()\n", + " self.house_year_max = df['HouseYear'].max()\n", + " df['Price'] = y.values\n", + " df = self.floor_to_cat(df)\n", + " df = self.year_to_cat(df)\n", + " self.med_price_by_floor_year = df.groupby(['year_cat', 'floor_cat'], as_index=False).agg({'Price':'median'}).\\\n", + " rename(columns={'Price':'MedPriceByFloorYear'})\n", + " self.med_price_by_floor_year_median = self.med_price_by_floor_year['MedPriceByFloorYear'].median()\n", + " \n", + " if y is not None:\n", + " df['Price'] = y.values\n", + " self.meter_price = df['Price']/df['Square'] #AV \n", + " # self.meter_price = \n", + " \n", + "\n", + " \n", + " def transform(self, X):\n", + " \n", + " # Binary features\n", + " X['Ecology_2'] = X['Ecology_2'].map(self.binary_to_numbers) # self.binary_to_numbers = {'A': 0, 'B': 1}\n", + " X['Ecology_3'] = X['Ecology_3'].map(self.binary_to_numbers)\n", + " X['Shops_2'] = X['Shops_2'].map(self.binary_to_numbers)\n", + " \n", + " # DistrictId, IsDistrictLarge\n", + " X = X.merge(self.district_size, on='DistrictId', how='left')\n", + " \n", + " X['new_district'] = 0\n", + " X.loc[X['DistrictSize'].isna(), 'new_district'] = 1\n", + " \n", + " X['DistrictSize'].fillna(5, inplace=True)\n", + " \n", + " X['IsDistrictLarge'] = (X['DistrictSize'] > 100).astype(int)\n", + " \n", + " # More categorical features\n", + " X = self.floor_to_cat(X) # + столбец floor_cat\n", + " X = self.year_to_cat(X) # + столбец year_cat\n", + " \n", + " # Target encoding\n", + " if self.med_price_by_district is not None:\n", + " X = X.merge(self.med_price_by_district, on=['DistrictId', 'Rooms'], how='left')\n", + " X['MedPriceByDistrict'].fillna(self.med_price_by_district_median, inplace=True)\n", + " \n", + " if self.med_price_by_floor_year is not None:\n", + " X = X.merge(self.med_price_by_floor_year, on=['year_cat', 'floor_cat'], how='left')\n", + " X['MedPriceByFloorYear'].fillna(self.med_price_by_floor_year_median, inplace=True)\n", + " \n", + " # AV\n", + " X['MeterPrice'] = self.meter_price\n", + " X['MeterPrice'].fillna(3910,inplace = True)\n", + " #X.loc[(X['Square'] > 0), 'MeterPrice'] = X['Price'] / X['Square'] \n", + " \n", + " return X\n", + " \n", + " def floor_to_cat(self, X):\n", + " bins = [0, 3, 5, 9, 15, self.floor_max]\n", + " X['floor_cat'] = pd.cut(X['Floor'], bins=bins, labels=False)\n", + "\n", + " X['floor_cat'].fillna(-1, inplace=True)\n", + " return X\n", + " \n", + " def year_to_cat(self, X):\n", + " bins = [0, 1941, 1945, 1980, 2000, 2010, self.house_year_max]\n", + " X['year_cat'] = pd.cut(X['HouseYear'], bins=bins, labels=False)\n", + "\n", + " X['year_cat'].fillna(-1, inplace=True)\n", + " return X" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "6e21b269", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Id',\n", + " 'DistrictId',\n", + " 'Rooms',\n", + " 'Square',\n", + " 'LifeSquare',\n", + " 'KitchenSquare',\n", + " 'Floor',\n", + " 'HouseFloor',\n", + " 'HouseYear',\n", + " 'Ecology_1',\n", + " 'Ecology_2',\n", + " 'Ecology_3',\n", + " 'Social_1',\n", + " 'Social_2',\n", + " 'Social_3',\n", + " 'Helthcare_2',\n", + " 'Shops_1',\n", + " 'Shops_2',\n", + " 'Price',\n", + " 'HouseFloor_outlier',\n", + " 'Meter_price',\n", + " 'LifeSquare_nan',\n", + " 'DistrictSize',\n", + " 'IsDistrictLarge',\n", + " 'MedPriceByDistrict',\n", + " 'year_cat',\n", + " 'floor_cat',\n", + " 'MedPriceByFloorYear']" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# отбор призаков\n", + "train_df.columns.tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "b70cf62f", + "metadata": {}, + "outputs": [], + "source": [ + "feature_names = ['Rooms', 'Square', 'LifeSquare', 'KitchenSquare', 'Floor', 'HouseFloor', 'HouseYear',\n", + " 'Ecology_1', 'Ecology_2', 'Ecology_3', 'Social_1', 'Social_2', 'Social_3',\n", + " 'Helthcare_2', 'Shops_1', 'Shops_2']\n", + "\n", + "new_feature_names = ['Rooms_outlier', 'HouseFloor_outlier', 'HouseYear_outlier', 'LifeSquare_nan', 'DistrictSize',\n", + " 'new_district', 'IsDistrictLarge', 'MedPriceByDistrict', 'MedPriceByFloorYear', 'MeterPrice']\n", + "\n", + "target_name = 'Price'" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "6cdc1577", + "metadata": {}, + "outputs": [], + "source": [ + "# разбиение на train и test" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "31fa43e6", + "metadata": {}, + "outputs": [], + "source": [ + "train_df = pd.read_csv(TRAIN_DATASET_PATH)\n", + "test_df = pd.read_csv(TEST_DATASET_PATH)\n", + "\n", + "X = train_df.drop(columns=target_name)\n", + "y = train_df[target_name]" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "0fac92ea", + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.33, shuffle=True, random_state=21)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "3209cde6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((6700, 22), (3300, 22), (5000, 22))" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preprocessor = DataPreprocessing()\n", + "preprocessor.fit(X_train)\n", + "\n", + "X_train = preprocessor.transform(X_train)\n", + "X_valid = preprocessor.transform(X_valid)\n", + "test_df = preprocessor.transform(test_df)\n", + "\n", + "X_train.shape, X_valid.shape, test_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "f9474705", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((6700, 30), (3300, 30), (5000, 30))" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "features_gen = FeatureGenetator()\n", + "features_gen.fit(X_train, y_train)\n", + "\n", + "X_train = features_gen.transform(X_train)\n", + "X_valid = features_gen.transform(X_valid)\n", + "test_df = features_gen.transform(test_df)\n", + "\n", + "X_train.shape, X_valid.shape, test_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "6fba65c6", + "metadata": {}, + "outputs": [], + "source": [ + "X_train = X_train[feature_names + new_feature_names]\n", + "X_valid = X_valid[feature_names + new_feature_names]\n", + "test_df = test_df[feature_names + new_feature_names]" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "a67cd879", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0, 0, 0)" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train.isna().sum().sum(), X_valid.isna().sum().sum(), test_df.isna().sum().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "4c9c6e00", + "metadata": {}, + "outputs": [], + "source": [ + "# построение модели" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "48adceb1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomForestRegressor(random_state=21)" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rf_model = RandomForestRegressor(random_state=21, criterion='mse')\n", + "rf_model.fit(X_train, y_train)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "984202de", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train R2:\t0.966\n", + "Test R2:\t0.708\n" + ] + }, + { + "data": { + "image/png": "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RERERERERBRETLYQEREREREREQURky1EREREREREREHEni1EREREREREREHEyhYiIiIiIiIioiDi1s8hMGLECDl69OhID4OIiCiq7Ny587SUcmSkx5EoGI8QERG5C1c8wmRLCIwePRp1dXWRHgYREVFUEUI0RnoMiYTxCBERkbtwxSNcRkREREREREREFERMthARERERERERBRGTLUREREREREREQcRkCxERERERERFREDHZQkREREREREQUREy2EBEREREREREFEZMtRERERERERERBxGQLEREREREREVEQMdlCRERERERERBRETLYQEREREREREQURky1EREREREREREHEZAsRERERERERURAx2UJEREREREREFERMthARERERERERBRGTLUREREREREREQcRkCxERERERERFREDHZQkREREREREQUREy2EBEREREREREFEZMtRERERERERERBxGQLEREREREREVEQJUV6AEREROQ/m03iaGs3mjusKMi2YHReBkwmEelhERFRCPF3P1HsYLKFiIgoxthsEhv3nsQ9L34Ma78NlmQTHrtlOuZOGhVQ0M3gnYgo+gX7dz8RhRaXEREREUWAzSbR0NKFbYdPo6GlCzab9Pm5R1u7HcE2AFj7bbjnxY9xtLXb7/Oqwfu82q249akdmFe7FRv3nvRrPEREFHqefvcTUfRhZQsREVGYDXV2srnD6gi2VdZ+G5o7rNh/stOv8+oF7ys37kPRMAt6+gZZ6UJEFCWMfvef6rSibGRmhEZFREZY2UJERBRmQ52dLMi2wJLsfAu3JJuQnmL2eF69qhfX4L0wx4JFFSVYtHo7K12IiKKI0e/+/CxLhEZERJ4w2UJERBRmnmYnfTE6LwOP3TLdEXSrFSx9gzbD8xotF8rPcg7eF8wsRu3mepapExFFGaPf/aPzMiI8MiLSw2VEREREYabOTmoTI/7MTppMAtdNKMDa6lloareiMMeCSYU5ONbWY3heo2qajcsq8dgt0x1fM5vAMnUioihkMgnMnTQK42sqcarTivwsLvMkimasbCEiIgqzoc5O2mwSb+5rxqLV2/HtP36IRau34819zSjJTTc8r1E1zckOK66bUIDViytQUzUG5flZLFMnIopSJpNA2chMzCobgbKRmUy0RNBQGt1TYmBlCxERUZgNdXbSqEplQ02l4Xk9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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + " # оценка модели\n", + "y_train_preds = rf_model.predict(X_train)\n", + "y_test_preds = rf_model.predict(X_valid)\n", + "\n", + "evaluate_preds(y_train, y_train_preds, y_valid, y_test_preds)" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "f880df39", + "metadata": {}, + "outputs": [], + "source": [ + "# кросс валидация" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "0290cf24", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.77280206, 0.72851638, 0.75368855])" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cv_score = cross_val_score(rf_model, X_train, y_train, scoring='r2', cv=KFold(n_splits=3, shuffle=True, random_state=21))\n", + "cv_score" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "5d373cf1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7516689994037202" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cv_score.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "b5be4638", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
feature_nameimportance
23MedPriceByDistrict6.486684e-01
1Square1.067982e-01
2LifeSquare3.114880e-02
5HouseFloor2.124666e-02
6HouseYear2.101132e-02
12Social_31.984151e-02
20DistrictSize1.976566e-02
25MeterPrice1.767325e-02
24MedPriceByFloorYear1.759345e-02
4Floor1.538490e-02
7Ecology_11.497777e-02
3KitchenSquare1.478966e-02
11Social_21.436299e-02
10Social_11.299079e-02
14Shops_17.863885e-03
13Helthcare_25.410690e-03
0Rooms5.144853e-03
17HouseFloor_outlier1.434990e-03
9Ecology_39.522110e-04
15Shops_29.272947e-04
19LifeSquare_nan8.568115e-04
22IsDistrictLarge7.734220e-04
8Ecology_23.324003e-04
16Rooms_outlier4.981087e-05
18HouseYear_outlier2.952486e-07
21new_district0.000000e+00
\n", + "
" + ], + "text/plain": [ + " feature_name importance\n", + "23 MedPriceByDistrict 6.486684e-01\n", + "1 Square 1.067982e-01\n", + "2 LifeSquare 3.114880e-02\n", + "5 HouseFloor 2.124666e-02\n", + "6 HouseYear 2.101132e-02\n", + "12 Social_3 1.984151e-02\n", + "20 DistrictSize 1.976566e-02\n", + "25 MeterPrice 1.767325e-02\n", + "24 MedPriceByFloorYear 1.759345e-02\n", + "4 Floor 1.538490e-02\n", + "7 Ecology_1 1.497777e-02\n", + "3 KitchenSquare 1.478966e-02\n", + "11 Social_2 1.436299e-02\n", + "10 Social_1 1.299079e-02\n", + "14 Shops_1 7.863885e-03\n", + "13 Helthcare_2 5.410690e-03\n", + "0 Rooms 5.144853e-03\n", + "17 HouseFloor_outlier 1.434990e-03\n", + "9 Ecology_3 9.522110e-04\n", + "15 Shops_2 9.272947e-04\n", + "19 LifeSquare_nan 8.568115e-04\n", + "22 IsDistrictLarge 7.734220e-04\n", + "8 Ecology_2 3.324003e-04\n", + "16 Rooms_outlier 4.981087e-05\n", + "18 HouseYear_outlier 2.952486e-07\n", + "21 new_district 0.000000e+00" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# веса признаков\n", + "feature_importances = pd.DataFrame(zip(X_train.columns, rf_model.feature_importances_), \n", + " columns=['feature_name', 'importance'])\n", + "\n", + "feature_importances.sort_values(by='importance', ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "7d95cb34", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5000, 26)" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# выгрузка результатов\n", + "test_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "90e14b5d", + "metadata": {}, + "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", + "
IdPrice
04567200000.0
15925200000.0
2960200000.0
33848200000.0
4746200000.0
\n", + "
" + ], + "text/plain": [ + " Id Price\n", + "0 4567 200000.0\n", + "1 5925 200000.0\n", + "2 960 200000.0\n", + "3 3848 200000.0\n", + "4 746 200000.0" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "submit = pd.read_csv('C:/ARTEM/GeekBrains/Python4DS/RealEstatePricePredictionMoscow/sample_submission.csv')\n", + "submit.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "2c01f0a4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([166108.90509395, 127232.78534428, 141508.34570682, ...,\n", + " 148166.23205735, 189297.95637356, 250788.19751388])" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predictions = rf_model.predict(test_df)\n", + "predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "6c9f1523", + "metadata": {}, + "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", + "
IdPrice
04567166108.905094
15925127232.785344
2960141508.345707
33848170928.860105
4746175241.143352
\n", + "
" + ], + "text/plain": [ + " Id Price\n", + "0 4567 166108.905094\n", + "1 5925 127232.785344\n", + "2 960 141508.345707\n", + "3 3848 170928.860105\n", + "4 746 175241.143352" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "submit['Price'] = predictions\n", + "submit.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "e6052d38", + "metadata": {}, + "outputs": [], + "source": [ + "submit.to_csv('C:/ARTEM/GeekBrains/Python4DS/RealEstatePricePredictionMoscow/rf_submit.csv', index=False)" + ] + } + ], + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 1d23a6f37141d7b9d8975c6d265844137e6e7f94 Mon Sep 17 00:00:00 2001 From: Artem Viznyuk Date: Tue, 14 Sep 2021 11:14:40 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=9A=D1=83=D1=80=D1=81=D0=BE=D0=B2=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20=D0=B2=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RealEstatePricePredictionMoscow03.ipynb | 4304 +++++++++++++++++++++++ 1 file changed, 4304 insertions(+) create mode 100644 RealEstatePricePredictionMoscow03.ipynb diff --git a/RealEstatePricePredictionMoscow03.ipynb b/RealEstatePricePredictionMoscow03.ipynb new file mode 100644 index 0000000..3056866 --- /dev/null +++ b/RealEstatePricePredictionMoscow03.ipynb @@ -0,0 +1,4304 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "6c895a6a", + "metadata": {}, + "outputs": [], + "source": [ + "# импорт используемых библиотек\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "import random\n", + "\n", + "from sklearn.model_selection import train_test_split, cross_val_score\n", + "from sklearn.preprocessing import StandardScaler, RobustScaler\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.metrics import r2_score as r2\n", + "from sklearn.model_selection import KFold, GridSearchCV\n", + "\n", + "from datetime import datetime\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "%matplotlib inline\n", + "\n", + "# отключаем предупреждения\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "\n", + "# устанавливаемый единый размер шрифта\n", + "matplotlib.rcParams.update({'font.size': 14})" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e639b2ff", + "metadata": {}, + "outputs": [], + "source": [ + "# функция для визуальной валидации результатов предсказания\n", + "\n", + "def evaluate_preds(train_true_values, train_pred_values, test_true_values, test_pred_values):\n", + " print(\"Train R2:\\t\" + str(round(r2(train_true_values, train_pred_values), 3)))\n", + " print(\"Test R2:\\t\" + str(round(r2(test_true_values, test_pred_values), 3)))\n", + " \n", + " plt.figure(figsize=(18,10))\n", + " \n", + " plt.subplot(121)\n", + " sns.scatterplot(x=train_pred_values, y=train_true_values)\n", + " plt.xlabel('Predicted values')\n", + " plt.ylabel('True values')\n", + " plt.title('Train sample prediction')\n", + " \n", + " plt.subplot(122)\n", + " sns.scatterplot(x=test_pred_values, y=test_true_values)\n", + " plt.xlabel('Predicted values')\n", + " plt.ylabel('True values')\n", + " plt.title('Test sample prediction')\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "45009ed5", + "metadata": {}, + "outputs": [], + "source": [ + "TRAIN_DATASET_PATH = 'C:/ARTEM/GeekBrains/Python4DS/RealEstatePricePredictionMoscow/train.csv'\n", + "TEST_DATASET_PATH = 'C:/ARTEM/GeekBrains/Python4DS/RealEstatePricePredictionMoscow/test.csv'" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "14b0f3fc", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1Ecology_2Ecology_3Social_1Social_2Social_3Healthcare_1Helthcare_2Shops_1Shops_2Price
99951260612.049.09072833.2726266.0312.019810.300323BB52103116NaN19B119367.455796
999616265272.064.30768437.0384209.0130.019770.072158BB26291NaN00A199715.148807
999727951781.029.64805716.5553635.035.019580.460556BB20438614NaN15B165953.912580
999814561211.032.33029222.3268705.039.019690.194489BB4780043125.035B171842.411855
99997202941.035.81547622.3013676.099.019750.127376BB4384293NaN39B177685.627486
\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "9995 1260 61 2.0 49.090728 33.272626 6.0 3 \n", + "9996 16265 27 2.0 64.307684 37.038420 9.0 13 \n", + "9997 2795 178 1.0 29.648057 16.555363 5.0 3 \n", + "9998 14561 21 1.0 32.330292 22.326870 5.0 3 \n", + "9999 7202 94 1.0 35.815476 22.301367 6.0 9 \n", + "\n", + " HouseFloor HouseYear Ecology_1 Ecology_2 Ecology_3 Social_1 \\\n", + "9995 12.0 1981 0.300323 B B 52 \n", + "9996 0.0 1977 0.072158 B B 2 \n", + "9997 5.0 1958 0.460556 B B 20 \n", + "9998 9.0 1969 0.194489 B B 47 \n", + "9999 9.0 1975 0.127376 B B 43 \n", + "\n", + " Social_2 Social_3 Healthcare_1 Helthcare_2 Shops_1 Shops_2 \\\n", + "9995 10311 6 NaN 1 9 B \n", + "9996 629 1 NaN 0 0 A \n", + "9997 4386 14 NaN 1 5 B \n", + "9998 8004 3 125.0 3 5 B \n", + "9999 8429 3 NaN 3 9 B \n", + "\n", + " Price \n", + "9995 119367.455796 \n", + "9996 199715.148807 \n", + "9997 165953.912580 \n", + "9998 171842.411855 \n", + "9999 177685.627486 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# загружаем обучающую выборку, проверяем данные\n", + "train_df = pd.read_csv(TRAIN_DATASET_PATH)\n", + "train_df.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "18438e1c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Id int64\n", + "DistrictId int64\n", + "Rooms float64\n", + "Square float64\n", + "LifeSquare float64\n", + "KitchenSquare float64\n", + "Floor int64\n", + "HouseFloor float64\n", + "HouseYear int64\n", + "Ecology_1 float64\n", + "Ecology_2 object\n", + "Ecology_3 object\n", + "Social_1 int64\n", + "Social_2 int64\n", + "Social_3 int64\n", + "Healthcare_1 float64\n", + "Helthcare_2 int64\n", + "Shops_1 int64\n", + "Shops_2 object\n", + "Price float64\n", + "dtype: object" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# смотрим типы данных, цель уменьшить размер датасета\n", + "train_df.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e790eca4", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1Ecology_2Ecology_3Social_1Social_2Social_3Healthcare_1Helthcare_2Shops_1Shops_2
499510379292.043.17752130.3399455.065.019620.069660BB3161194NaN12B
499616138383.093.69812294.52146510.02127.020180.060753BB1527872520.007B
499739121011.033.65672319.0032595.025.019660.038693BB28653311015.025B
49985722101.038.63515520.9762579.0814.019700.089040BB3379765NaN011B
499911004212.067.12274233.94434413.0917.020090.194489BB4780043125.035B
\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "4995 10379 29 2.0 43.177521 30.339945 5.0 6 \n", + "4996 16138 38 3.0 93.698122 94.521465 10.0 21 \n", + "4997 3912 101 1.0 33.656723 19.003259 5.0 2 \n", + "4998 5722 10 1.0 38.635155 20.976257 9.0 8 \n", + "4999 11004 21 2.0 67.122742 33.944344 13.0 9 \n", + "\n", + " HouseFloor HouseYear Ecology_1 Ecology_2 Ecology_3 Social_1 \\\n", + "4995 5.0 1962 0.069660 B B 31 \n", + "4996 27.0 2018 0.060753 B B 15 \n", + "4997 5.0 1966 0.038693 B B 28 \n", + "4998 14.0 1970 0.089040 B B 33 \n", + "4999 17.0 2009 0.194489 B B 47 \n", + "\n", + " Social_2 Social_3 Healthcare_1 Helthcare_2 Shops_1 Shops_2 \n", + "4995 6119 4 NaN 1 2 B \n", + "4996 2787 2 520.0 0 7 B \n", + "4997 6533 1 1015.0 2 5 B \n", + "4998 7976 5 NaN 0 11 B \n", + "4999 8004 3 125.0 3 5 B " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# загружаем проверочную выборку, проверяем данные\n", + "\n", + "test_df = pd.read_csv(TEST_DATASET_PATH)\n", + "test_df.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ae193efd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Строк в трейне: 10000\n", + "Строк в тесте 5000\n" + ] + } + ], + "source": [ + "# размеры датасетов\n", + "\n", + "print('Строк в трейне:', train_df.shape[0])\n", + "print('Строк в тесте', test_df.shape[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "ec2ebfcf", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# проверяем размерности датасетов - обучающий нимеет на столбец больше проверочного\n", + "train_df.shape[1] - 1 == test_df.shape[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "17395fc9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Id object\n", + "DistrictId object\n", + "Rooms float64\n", + "Square float64\n", + "LifeSquare float64\n", + "KitchenSquare float64\n", + "Floor int16\n", + "HouseFloor int16\n", + "HouseYear int16\n", + "Ecology_1 float64\n", + "Ecology_2 object\n", + "Ecology_3 object\n", + "Social_1 int64\n", + "Social_2 int64\n", + "Social_3 int64\n", + "Healthcare_1 float64\n", + "Helthcare_2 int64\n", + "Shops_1 int64\n", + "Shops_2 object\n", + "Price float64\n", + "dtype: object" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# приведение типов к строкам, чтобы модель не применяла <> для этих данных\n", + "train_df['Id'] = train_df['Id'].astype(str)\n", + "train_df['DistrictId'] = train_df['DistrictId'].astype(str)\n", + "\n", + "# уменьшаем размерности этажей,этажностей, возраста\n", + "train_df['Floor'] = train_df['Floor'].astype(np.int16)\n", + "train_df['HouseFloor'] = train_df['HouseFloor'].astype(np.int16)\n", + "train_df['HouseYear'] = train_df['HouseYear'].astype(np.int16)\n", + "\n", + "\n", + "# проверяем преобразование\n", + "train_df.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "c6491ecb", + "metadata": {}, + "outputs": [], + "source": [ + "### Исследуем данные" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "5ff7bb43", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# гистограма распределения целевых значений\n", + "plt.figure(figsize = (16, 8))\n", + "\n", + "train_df['Price'].hist(bins=30)\n", + "plt.ylabel('Count')\n", + "plt.xlabel('Price')\n", + "\n", + "plt.title('Target distribution')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "07ea1861", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1Social_1Social_2Social_3Healthcare_1Helthcare_2Shops_1Price
count10000.00000010000.0000007887.00000010000.00000010000.00000010000.00000010000.00000010000.00000010000.00000010000.00000010000.0000005202.00000010000.00000010000.00000010000.000000
mean1.89050056.31577537.1996456.2733008.52670012.6094001984.7647000.11885824.6870005352.1574008.0392001142.9044601.3195004.231300214138.857399
std0.83951221.05873286.24120928.5609175.2411486.77597453.1127560.11902517.5326144006.79980323.8318751021.5172641.4936014.80634192872.293865
min0.0000001.1368590.3706190.0000001.0000000.000000-2005.0000000.0000000.000000168.0000000.0000000.0000000.0000000.00000059174.778028
25%1.00000041.77488122.7698321.0000004.0000009.0000001974.0000000.0176476.0000001564.0000000.000000350.0000000.0000001.000000153872.633942
50%2.00000052.51331032.7812606.0000007.00000013.0000001977.0000000.07542425.0000005285.0000002.000000900.0000001.0000003.000000192269.644879
75%2.00000065.90062545.1288039.00000012.00000017.0000002001.0000000.19578136.0000007227.0000005.0000001548.0000002.0000006.000000249135.462171
max19.000000641.0651937480.5921292014.00000042.000000117.0000004968.0000000.52186774.00000019083.000000141.0000004849.0000006.00000023.000000633233.466570
\n", + "
" + ], + "text/plain": [ + " Rooms Square LifeSquare KitchenSquare Floor \\\n", + "count 10000.000000 10000.000000 7887.000000 10000.000000 10000.000000 \n", + "mean 1.890500 56.315775 37.199645 6.273300 8.526700 \n", + "std 0.839512 21.058732 86.241209 28.560917 5.241148 \n", + "min 0.000000 1.136859 0.370619 0.000000 1.000000 \n", + "25% 1.000000 41.774881 22.769832 1.000000 4.000000 \n", + "50% 2.000000 52.513310 32.781260 6.000000 7.000000 \n", + "75% 2.000000 65.900625 45.128803 9.000000 12.000000 \n", + "max 19.000000 641.065193 7480.592129 2014.000000 42.000000 \n", + "\n", + " HouseFloor HouseYear Ecology_1 Social_1 Social_2 \\\n", + "count 10000.000000 10000.000000 10000.000000 10000.000000 10000.000000 \n", + "mean 12.609400 1984.764700 0.118858 24.687000 5352.157400 \n", + "std 6.775974 53.112756 0.119025 17.532614 4006.799803 \n", + "min 0.000000 -2005.000000 0.000000 0.000000 168.000000 \n", + "25% 9.000000 1974.000000 0.017647 6.000000 1564.000000 \n", + "50% 13.000000 1977.000000 0.075424 25.000000 5285.000000 \n", + "75% 17.000000 2001.000000 0.195781 36.000000 7227.000000 \n", + "max 117.000000 4968.000000 0.521867 74.000000 19083.000000 \n", + "\n", + " Social_3 Healthcare_1 Helthcare_2 Shops_1 Price \n", + "count 10000.000000 5202.000000 10000.000000 10000.000000 10000.000000 \n", + "mean 8.039200 1142.904460 1.319500 4.231300 214138.857399 \n", + "std 23.831875 1021.517264 1.493601 4.806341 92872.293865 \n", + "min 0.000000 0.000000 0.000000 0.000000 59174.778028 \n", + "25% 0.000000 350.000000 0.000000 1.000000 153872.633942 \n", + "50% 2.000000 900.000000 1.000000 3.000000 192269.644879 \n", + "75% 5.000000 1548.000000 2.000000 6.000000 249135.462171 \n", + "max 141.000000 4849.000000 6.000000 23.000000 633233.466570 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# смотрим на параметры для данных выборки\n", + "train_df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "983e0cfd", + "metadata": {}, + "outputs": [], + "source": [ + "# количество комнат \n", + "# 0 - допустимое значение для студии\n", + "# площадь" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "8923291f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Id', 'DistrictId', 'Ecology_2', 'Ecology_3', 'Shops_2']" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.select_dtypes(include='object').columns.tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "30f9ec22", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "27 851\n", + "1 652\n", + "23 565\n", + "6 511\n", + "9 294\n", + " ... \n", + "199 1\n", + "117 1\n", + "207 1\n", + "209 1\n", + "174 1\n", + "Name: DistrictId, Length: 205, dtype: int64" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['DistrictId'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "81c3d0f4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "B 9903\n", + "A 97\n", + "Name: Ecology_2, dtype: int64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Ecology_2'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "80b59c3a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "B 9725\n", + "A 275\n", + "Name: Ecology_3, dtype: int64" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Ecology_3'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "bb41a69d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "B 9175\n", + "A 825\n", + "Name: Shops_2, dtype: int64" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Shops_2'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "7761c352", + "metadata": {}, + "outputs": [], + "source": [ + "# Обработка выбросов\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "20aabf1e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.0 3880\n", + "1.0 3705\n", + "3.0 2235\n", + "4.0 150\n", + "5.0 18\n", + "0.0 8\n", + "10.0 2\n", + "19.0 1\n", + "6.0 1\n", + "Name: Rooms, dtype: int64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Rooms'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "5acd823b", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1Ecology_2Ecology_3Social_1Social_2Social_3Healthcare_1Helthcare_2Shops_1Shops_2Price
011809273.0115.027311NaN10.041020140.075424BB1130970NaN00B305018.871089
13013221.039.83252423.1692238.07819660.118537BB30620711183.010B177734.553407
2821513.078.34221547.67197210.021719880.025609BB3352610240.031B282078.720850
3235211.040.409907NaN1.0102219770.007122BB12640NaN01B168106.007630
413866942.064.28506738.5625179.0161619720.282798BB3386672NaN06B343995.102962
\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 NaN 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 NaN 1.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 Ecology_2 Ecology_3 Social_1 Social_2 \\\n", + "0 10 2014 0.075424 B B 11 3097 \n", + "1 8 1966 0.118537 B B 30 6207 \n", + "2 17 1988 0.025609 B B 33 5261 \n", + "3 22 1977 0.007122 B B 1 264 \n", + "4 16 1972 0.282798 B B 33 8667 \n", + "\n", + " Social_3 Healthcare_1 Helthcare_2 Shops_1 Shops_2 Price \n", + "0 0 NaN 0 0 B 305018.871089 \n", + "1 1 1183.0 1 0 B 177734.553407 \n", + "2 0 240.0 3 1 B 282078.720850 \n", + "3 0 NaN 0 1 B 168106.007630 \n", + "4 2 NaN 0 6 B 343995.102962 " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# пример, где считаем выбросами количество комнат равное 0 или >=6: создаем столбец Rooms_outlier, \n", + "# где указываем недоверие к числу комнат\n", + "\n", + "#train_df['Rooms_outlier'] = 0\n", + "#train_df.loc[(train_df['Rooms'] == 0) | (train_df['Rooms'] >= 6), 'Rooms_outlier'] = 1\n", + "#train_df.loc[train_df['Rooms'] == 0, 'Rooms'] = 1\n", + "#train_df.loc[train_df['Rooms'] >= 6, 'Rooms'] = train_df['Rooms'].median()\n", + "\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "8c897557", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.0 3880\n", + "1.0 3705\n", + "3.0 2235\n", + "4.0 150\n", + "5.0 18\n", + "0.0 8\n", + "10.0 2\n", + "19.0 1\n", + "6.0 1\n", + "Name: Rooms, dtype: int64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['Rooms'].value_counts()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "070297c7", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0 2460\n", + "8.0 1306\n", + "5.0 1169\n", + "10.0 1075\n", + "6.0 1038\n", + "9.0 843\n", + "0.0 697\n", + "7.0 609\n", + "12.0 249\n", + "11.0 233\n", + "13.0 67\n", + "14.0 51\n", + "4.0 39\n", + "15.0 31\n", + "3.0 22\n", + "16.0 16\n", + "20.0 14\n", + "17.0 12\n", + "19.0 11\n", + "18.0 6\n", + "2.0 4\n", + "22.0 3\n", + "30.0 2\n", + "43.0 2\n", + "41.0 2\n", + "112.0 2\n", + "25.0 2\n", + "51.0 2\n", + "37.0 2\n", + "58.0 2\n", + "32.0 2\n", + "21.0 1\n", + "73.0 1\n", + "75.0 1\n", + "36.0 1\n", + "27.0 1\n", + "63.0 1\n", + "1970.0 1\n", + "54.0 1\n", + "53.0 1\n", + "60.0 1\n", + "26.0 1\n", + "66.0 1\n", + "39.0 1\n", + "29.0 1\n", + "78.0 1\n", + "31.0 1\n", + "84.0 1\n", + "48.0 1\n", + "96.0 1\n", + "42.0 1\n", + "40.0 1\n", + "23.0 1\n", + "72.0 1\n", + "35.0 1\n", + "62.0 1\n", + "123.0 1\n", + "2014.0 1\n", + "Name: KitchenSquare, dtype: int64" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['KitchenSquare'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "d0c61fac", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(13.0, 0.0)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['KitchenSquare'].quantile(.975), train_df['KitchenSquare'].quantile(.025)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "e64fb693", + "metadata": {}, + "outputs": [], + "source": [ + "# обрабатываем выбросы в площадях кухни\n", + "condition = (train_df['KitchenSquare'].isna()) \\\n", + " | (train_df['KitchenSquare'] > train_df['KitchenSquare'].quantile(.975))\n", + " \n", + "train_df.loc[condition, 'KitchenSquare'] = train_df['KitchenSquare'].median()\n", + "\n", + "train_df.loc[train_df['KitchenSquare'] < 3, 'KitchenSquare'] = 3" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "4e632236", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.0 3183\n", + "8.0 1306\n", + "6.0 1227\n", + "5.0 1169\n", + "10.0 1075\n", + "9.0 843\n", + "7.0 609\n", + "12.0 249\n", + "11.0 233\n", + "13.0 67\n", + "4.0 39\n", + "Name: KitchenSquare, dtype: int64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df['KitchenSquare'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "38abe743", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n", + " 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\n", + " 26, 27, 28, 29, 30, 31, 32, 36, 37, 38, 39, 40, 44,\n", + " 45, 47, 48, 99, 117], dtype=int16)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# исследуем этажность зданий\n", + "\n", + "train_df['HouseFloor'].sort_values().unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "03135765", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", + " 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, 32, 33, 37, 42],\n", + " dtype=int16)" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# исследуем этаж\n", + "\n", + "train_df['Floor'].sort_values().unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "d2b2bb71", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1825" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# находим случаи, когда этаж больше этажности здания\n", + "(train_df['Floor'] > train_df['HouseFloor']).sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "b5f769f4", + "metadata": {}, + "outputs": [], + "source": [ + "# добавляем признак достоверности этажа\n", + "train_df['HouseFloor_outlier'] = 0\n", + "train_df.loc[train_df['HouseFloor'] == 0, 'HouseFloor_outlier'] = 1\n", + "train_df.loc[train_df['Floor'] > train_df['HouseFloor'], 'HouseFloor_outlier'] = 1" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "863234a8", + "metadata": {}, + "outputs": [], + "source": [ + "# некорректную этажность заменяем медианой\n", + "train_df.loc[train_df['HouseFloor'] == 0, 'HouseFloor'] = train_df['HouseFloor'].median()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "35b81479", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Int64Index([ 17, 19, 21, 25, 26, 33, 34, 37, 39, 44,\n", + " ...\n", + " 9913, 9921, 9930, 9931, 9938, 9953, 9960, 9968, 9970, 9975],\n", + " dtype='int64', length=1610)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# смотрим на id проблемных записей по этажам\n", + "floor_outliers = train_df.loc[train_df['Floor'] > train_df['HouseFloor']].index\n", + "floor_outliers" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "e779720c", + "metadata": {}, + "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", + "
PriceSquareMeter_price
count10000.00000010000.00000010000.000000
mean214138.85739956.3157753988.383777
std92872.29386521.0587323755.437224
min59174.7780281.136859208.293451
25%153872.63394241.7748812918.525328
50%192269.64487952.5133103910.052336
75%249135.46217165.9006254692.375993
max633233.466570641.065193230463.537966
\n", + "
" + ], + "text/plain": [ + " Price Square Meter_price\n", + "count 10000.000000 10000.000000 10000.000000\n", + "mean 214138.857399 56.315775 3988.383777\n", + "std 92872.293865 21.058732 3755.437224\n", + "min 59174.778028 1.136859 208.293451\n", + "25% 153872.633942 41.774881 2918.525328\n", + "50% 192269.644879 52.513310 3910.052336\n", + "75% 249135.462171 65.900625 4692.375993\n", + "max 633233.466570 641.065193 230463.537966" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Добавляем цену квадратного метра AV\n", + "train_df['Meter_price'] = 0\n", + "train_df.loc[train_df['Square'] > 0, 'Meter_price'] = train_df['Price'] / train_df['Square']\n", + "#train_df['Meter_price'].sort_values(ascending=False)\n", + "train_df[['Price', 'Square', 'Meter_price']].describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "9f6e136e", + "metadata": {}, + "outputs": [], + "source": [ + "# подстановка для значений этажа\n", + "train_df.loc[floor_outliers, 'Floor'] = train_df.loc[floor_outliers, 'HouseFloor']\\\n", + " .apply(lambda x: random.randint(1, x))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "37b4218f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(train_df['Floor'] > train_df['HouseFloor']).sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "a83f6692", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8828 4968\n", + "6073 2020\n", + "5641 2020\n", + "2350 2020\n", + "9091 2020\n", + " ... \n", + "6250 1914\n", + "2066 1912\n", + "2795 1912\n", + "6794 1910\n", + "9163 -2005\n", + "Name: HouseYear, Length: 10000, dtype: int16" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# выводим года постройки\n", + "train_df['HouseYear'].sort_values(ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "b5f4456f", + "metadata": {}, + "outputs": [], + "source": [ + "# если год постройки еще не наступал, то меняем на текущий, можно менять на медиану\n", + "train_df.loc[train_df['HouseYear'] > 2021, 'HouseYear'] = 2021\n", + "# если дом слишком древний, до 1910 - это первый разумный минимум. Заменяем медианой\n", + "train_df.loc[train_df['HouseYear'] < 1910, 'HouseYear'] = train_df['HouseYear'].median()\n", + "# год можно также предсказывать по этажности, по району и т.д.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "9c753033", + "metadata": {}, + "outputs": [], + "source": [ + "# обработка пропусков" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "f310a637", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Id 0\n", + "DistrictId 0\n", + "Rooms 0\n", + "Square 0\n", + "LifeSquare 2113\n", + "KitchenSquare 0\n", + "Floor 0\n", + "HouseFloor 0\n", + "HouseYear 0\n", + "Ecology_1 0\n", + "Ecology_2 0\n", + "Ecology_3 0\n", + "Social_1 0\n", + "Social_2 0\n", + "Social_3 0\n", + "Healthcare_1 4798\n", + "Helthcare_2 0\n", + "Shops_1 0\n", + "Shops_2 0\n", + "Price 0\n", + "HouseFloor_outlier 0\n", + "Meter_price 0\n", + "dtype: int64" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df.isna().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "d914ad63", + "metadata": {}, + "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", + "
SquareLifeSquareKitchenSquare
0115.027311NaN10.0
139.83252423.1692238.0
278.34221547.67197210.0
340.409907NaN3.0
464.28506738.5625179.0
562.52846547.1038336.0
633.93875021.7729309.0
750.39181432.8932568.0
846.88789244.6281323.0
979.86747775.0851253.0
\n", + "
" + ], + "text/plain": [ + " Square LifeSquare KitchenSquare\n", + "0 115.027311 NaN 10.0\n", + "1 39.832524 23.169223 8.0\n", + "2 78.342215 47.671972 10.0\n", + "3 40.409907 NaN 3.0\n", + "4 64.285067 38.562517 9.0\n", + "5 62.528465 47.103833 6.0\n", + "6 33.938750 21.772930 9.0\n", + "7 50.391814 32.893256 8.0\n", + "8 46.887892 44.628132 3.0\n", + "9 79.867477 75.085125 3.0" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df[['Square', 'LifeSquare', 'KitchenSquare']].head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "b68c9268", + "metadata": {}, + "outputs": [], + "source": [ + "# если нет данных по жилой площади - добавляем признак и пытаемся расчитать\n", + "train_df['LifeSquare_nan'] = train_df['LifeSquare'].isna() * 1\n", + "\n", + "condition = (train_df['LifeSquare'].isna()) \\\n", + " & (~train_df['Square'].isna()) \\\n", + " & (~train_df['KitchenSquare'].isna())\n", + " \n", + "train_df.loc[condition, 'LifeSquare'] = train_df.loc[condition, 'Square'] \\\n", + " - train_df.loc[condition, 'KitchenSquare'] - 3" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "e1c3b780", + "metadata": {}, + "outputs": [], + "source": [ + "#train_df[['Healthcare_1','Healthcare_2']].head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "383b8664", + "metadata": {}, + "outputs": [], + "source": [ + "train_df.drop('Healthcare_1', axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "a113fc25", + "metadata": {}, + "outputs": [], + "source": [ + "class DataPreprocessing:\n", + " \"\"\"Подготовка исходных данных\"\"\"\n", + "\n", + " def __init__(self):\n", + " \"\"\"Параметры класса\"\"\"\n", + " self.medians = None\n", + " self.kitchen_square_quantile = None\n", + " \n", + " def fit(self, X):\n", + " \"\"\"Сохранение статистик\"\"\" \n", + " # Расчет медиан\n", + " self.medians = X.median()\n", + " self.kitchen_square_quantile = X['KitchenSquare'].quantile(.975)\n", + " \n", + " def transform(self, X):\n", + " \"\"\"Трансформация данных\"\"\"\n", + "\n", + " # Rooms\n", + " X['Rooms_outlier'] = 0\n", + " X.loc[(X['Rooms'] == 0) | (X['Rooms'] >= 6), 'Rooms_outlier'] = 1\n", + " \n", + " X.loc[X['Rooms'] == 0, 'Rooms'] = 1\n", + " X.loc[X['Rooms'] >= 6, 'Rooms'] = self.medians['Rooms']\n", + " \n", + " # KitchenSquare\n", + " condition = (X['KitchenSquare'].isna()) \\\n", + " | (X['KitchenSquare'] > self.kitchen_square_quantile)\n", + " \n", + " X.loc[condition, 'KitchenSquare'] = self.medians['KitchenSquare']\n", + "\n", + " X.loc[X['KitchenSquare'] < 3, 'KitchenSquare'] = 3\n", + " \n", + " # HouseFloor, Floor\n", + " X['HouseFloor_outlier'] = 0\n", + " X.loc[X['HouseFloor'] == 0, 'HouseFloor_outlier'] = 1\n", + " X.loc[X['Floor'] > X['HouseFloor'], 'HouseFloor_outlier'] = 1\n", + " \n", + " X.loc[X['HouseFloor'] == 0, 'HouseFloor'] = self.medians['HouseFloor']\n", + " \n", + " floor_outliers = X.loc[X['Floor'] > X['HouseFloor']].index\n", + " X.loc[floor_outliers, 'Floor'] = X.loc[floor_outliers, 'HouseFloor']\\\n", + " .apply(lambda x: random.randint(1, x))\n", + " \n", + " # HouseYear\n", + " current_year = datetime.now().year\n", + " \n", + " X['HouseYear_outlier'] = 0\n", + " \n", + " X.loc[X['HouseYear'] > current_year, 'HouseYear_outlier'] = 1 \n", + " X.loc[X['HouseYear'] > current_year, 'HouseYear'] = current_year\n", + " \n", + " # AV\n", + " #==========================================================================\n", + " X.loc[X['HouseYear'] < 1910, 'HouseYear_outlier'] = 1 \n", + " X.loc[X['HouseYear'] < 1910, 'HouseYear'] = self.medians['HouseYear']\n", + " #==========================================================================\n", + " X.loc[X['Square'].isna(), 'Square'] = self.medians['Square'] \n", + " #==========================================================================\n", + " \n", + " \n", + " # Healthcare_1\n", + " if 'Healthcare_1' in X.columns:\n", + " X.drop('Healthcare_1', axis=1, inplace=True)\n", + " \n", + " # LifeSquare\n", + " X['LifeSquare_nan'] = X['LifeSquare'].isna() * 1\n", + " condition = (X['LifeSquare'].isna()) & \\\n", + " (~X['Square'].isna()) & \\\n", + " (~X['KitchenSquare'].isna())\n", + " \n", + " X.loc[condition, 'LifeSquare'] = X.loc[condition, 'Square'] - X.loc[condition, 'KitchenSquare'] - 3\n", + " \n", + " \n", + " X.fillna(self.medians, inplace=True)\n", + " \n", + " return X" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "ff95fb13", + "metadata": {}, + "outputs": [], + "source": [ + "# построение новых признаков" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "11e1d608", + "metadata": {}, + "outputs": [], + "source": [ + "# заменяем A/B на 0/1\n", + "binary_to_numbers = {'A': 0, 'B': 1}\n", + "\n", + "train_df['Ecology_2'] = train_df['Ecology_2'].replace(binary_to_numbers)\n", + "train_df['Ecology_3'] = train_df['Ecology_3'].replace(binary_to_numbers)\n", + "train_df['Shops_2'] = train_df['Shops_2'].replace(binary_to_numbers)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "8a00e237", + "metadata": {}, + "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", + "
DistrictIdDistrictSize
027851
11652
223565
36511
49294
\n", + "
" + ], + "text/plain": [ + " DistrictId DistrictSize\n", + "0 27 851\n", + "1 1 652\n", + "2 23 565\n", + "3 6 511\n", + "4 9 294" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# добавляем размер района\n", + "district_size = train_df['DistrictId'].value_counts().reset_index()\\\n", + " .rename(columns={'index':'DistrictId', 'DistrictId':'DistrictSize'})\n", + "\n", + "district_size.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "a479ebce", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1...Social_2Social_3Helthcare_2Shops_1Shops_2PriceHouseFloor_outlierMeter_priceLifeSquare_nanDistrictSize
011809273.0115.027311102.02731110.041020140.075424...30970001305018.87108902651.7082721851
13013221.039.83252423.1692238.07819660.118537...62071101177734.55340704462.045990078
2821513.078.34221547.67197210.021719880.025609...52610311282078.72085003600.5966980652
3235211.040.40990734.4099073.0102219770.007122...2640011168106.00763004160.0196701652
413866942.064.28506738.5625179.0161619720.282798...86672061343995.10296205351.088794089
\n", + "

5 rows × 23 columns

\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 102.027311 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 34.409907 3.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 ... Social_2 Social_3 Helthcare_2 \\\n", + "0 10 2014 0.075424 ... 3097 0 0 \n", + "1 8 1966 0.118537 ... 6207 1 1 \n", + "2 17 1988 0.025609 ... 5261 0 3 \n", + "3 22 1977 0.007122 ... 264 0 0 \n", + "4 16 1972 0.282798 ... 8667 2 0 \n", + "\n", + " Shops_1 Shops_2 Price HouseFloor_outlier Meter_price \\\n", + "0 0 1 305018.871089 0 2651.708272 \n", + "1 0 1 177734.553407 0 4462.045990 \n", + "2 1 1 282078.720850 0 3600.596698 \n", + "3 1 1 168106.007630 0 4160.019670 \n", + "4 6 1 343995.102962 0 5351.088794 \n", + "\n", + " LifeSquare_nan DistrictSize \n", + "0 1 851 \n", + "1 0 78 \n", + "2 0 652 \n", + "3 1 652 \n", + "4 0 89 \n", + "\n", + "[5 rows x 23 columns]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# добавляем призак в датасет\n", + "train_df = train_df.merge(district_size, on='DistrictId', how='left')\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "aebec7b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True 5069\n", + "False 4931\n", + "Name: DistrictSize, dtype: int64" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# большие районы\n", + "(train_df['DistrictSize'] > 100).value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "bdc9ecf1", + "metadata": {}, + "outputs": [], + "source": [ + "train_df['IsDistrictLarge'] = (train_df['DistrictSize'] > 100).astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "9bc15614", + "metadata": {}, + "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", + "
DistrictIdRoomsMedPriceByDistrict
001.0142799.434052
102.0176210.812334
203.0300610.359425
311.0146735.671740
412.0202706.090239
\n", + "
" + ], + "text/plain": [ + " DistrictId Rooms MedPriceByDistrict\n", + "0 0 1.0 142799.434052\n", + "1 0 2.0 176210.812334\n", + "2 0 3.0 300610.359425\n", + "3 1 1.0 146735.671740\n", + "4 1 2.0 202706.090239" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# медианная стоимость по району\n", + "med_price_by_district = train_df.groupby(['DistrictId', 'Rooms'], as_index=False).agg({'Price':'median'})\\\n", + " .rename(columns={'Price':'MedPriceByDistrict'})\n", + "\n", + "med_price_by_district.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "b6129f8e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(675, 3)" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "med_price_by_district.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "0d3d34ef", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1...Helthcare_2Shops_1Shops_2PriceHouseFloor_outlierMeter_priceLifeSquare_nanDistrictSizeIsDistrictLargeMedPriceByDistrict
011809273.0115.027311102.02731110.041020140.075424...001305018.87108902651.70827218511213530.788443
13013221.039.83252423.1692238.07819660.118537...101177734.55340704462.0459900780146032.829834
2821513.078.34221547.67197210.021719880.025609...311282078.72085003600.59669806521244005.272380
3235211.040.40990734.4099073.0102219770.007122...011168106.00763004160.01967016521146735.671740
413866942.064.28506738.5625179.0161619720.282798...061343995.10296205351.0887940890201584.441255
\n", + "

5 rows × 25 columns

\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 102.027311 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 34.409907 3.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 ... Helthcare_2 Shops_1 Shops_2 \\\n", + "0 10 2014 0.075424 ... 0 0 1 \n", + "1 8 1966 0.118537 ... 1 0 1 \n", + "2 17 1988 0.025609 ... 3 1 1 \n", + "3 22 1977 0.007122 ... 0 1 1 \n", + "4 16 1972 0.282798 ... 0 6 1 \n", + "\n", + " Price HouseFloor_outlier Meter_price LifeSquare_nan \\\n", + "0 305018.871089 0 2651.708272 1 \n", + "1 177734.553407 0 4462.045990 0 \n", + "2 282078.720850 0 3600.596698 0 \n", + "3 168106.007630 0 4160.019670 1 \n", + "4 343995.102962 0 5351.088794 0 \n", + "\n", + " DistrictSize IsDistrictLarge MedPriceByDistrict \n", + "0 851 1 213530.788443 \n", + "1 78 0 146032.829834 \n", + "2 652 1 244005.272380 \n", + "3 652 1 146735.671740 \n", + "4 89 0 201584.441255 \n", + "\n", + "[5 rows x 25 columns]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df = train_df.merge(med_price_by_district, on=['DistrictId', 'Rooms'], how='left')\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "16892db7", + "metadata": {}, + "outputs": [], + "source": [ + "# категоризация\n", + "def floor_to_cat(X):\n", + "\n", + " X['floor_cat'] = 0\n", + "\n", + " X.loc[X['Floor'] <= 3, 'floor_cat'] = 1 \n", + " X.loc[(X['Floor'] > 3) & (X['Floor'] <= 5), 'floor_cat'] = 2\n", + " X.loc[(X['Floor'] > 5) & (X['Floor'] <= 9), 'floor_cat'] = 3\n", + " X.loc[(X['Floor'] > 9) & (X['Floor'] <= 15), 'floor_cat'] = 4\n", + " X.loc[X['Floor'] > 15, 'floor_cat'] = 5\n", + "\n", + " return X\n", + "\n", + "\n", + "def floor_to_cat_pandas(X):\n", + " bins = [0, 3, 5, 9, 15, X['Floor'].max()]\n", + " X['floor_cat'] = pd.cut(X['Floor'], bins=bins, labels=False)\n", + " \n", + " X['floor_cat'].fillna(-1, inplace=True)\n", + " return X\n", + "\n", + "\n", + "def year_to_cat(X):\n", + "\n", + " X['year_cat'] = 0\n", + "\n", + " X.loc[X['HouseYear'] <= 1941, 'year_cat'] = 1\n", + " X.loc[(X['HouseYear'] > 1941) & (X['HouseYear'] <= 1945), 'year_cat'] = 2\n", + " X.loc[(X['HouseYear'] > 1945) & (X['HouseYear'] <= 1980), 'year_cat'] = 3\n", + " X.loc[(X['HouseYear'] > 1980) & (X['HouseYear'] <= 2000), 'year_cat'] = 4\n", + " X.loc[(X['HouseYear'] > 2000) & (X['HouseYear'] <= 2010), 'year_cat'] = 5\n", + " X.loc[(X['HouseYear'] > 2010), 'year_cat'] = 6\n", + "\n", + " return X\n", + "\n", + "\n", + "def year_to_cat_pandas(X):\n", + " bins = [0, 1941, 1945, 1980, 2000, 2010, X['HouseYear'].max()]\n", + " X['year_cat'] = pd.cut(X['HouseYear'], bins=bins, labels=False)\n", + " \n", + " X['year_cat'].fillna(-1, inplace=True)\n", + " return X" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "95906706", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 1\n", + "1 2\n", + "2 0\n", + "3 3\n", + "4 4\n", + " ..\n", + "9995 0\n", + "9996 3\n", + "9997 0\n", + "9998 0\n", + "9999 2\n", + "Name: Floor, Length: 10000, dtype: int64" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bins = [0, 3, 5, 9, 15, train_df['Floor'].max()]\n", + "pd.cut(train_df['Floor'], bins=bins, labels=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "e47e6ba7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 (3, 5]\n", + "1 (5, 9]\n", + "2 (0, 3]\n", + "3 (9, 15]\n", + "4 (15, 42]\n", + " ... \n", + "9995 (0, 3]\n", + "9996 (9, 15]\n", + "9997 (0, 3]\n", + "9998 (0, 3]\n", + "9999 (5, 9]\n", + "Name: Floor, Length: 10000, dtype: category\n", + "Categories (5, interval[int64, right]): [(0, 3] < (3, 5] < (5, 9] < (9, 15] < (15, 42]]" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bins = [0, 3, 5, 9, 15, train_df['Floor'].max()]\n", + "pd.cut(train_df['Floor'], bins=bins)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "20ca77d2", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1...Shops_2PriceHouseFloor_outlierMeter_priceLifeSquare_nanDistrictSizeIsDistrictLargeMedPriceByDistrictyear_catfloor_cat
011809273.0115.027311102.02731110.041020140.075424...1305018.87108902651.70827218511213530.78844362
13013221.039.83252423.1692238.07819660.118537...1177734.55340704462.0459900780146032.82983433
2821513.078.34221547.67197210.021719880.025609...1282078.72085003600.59669806521244005.27238041
3235211.040.40990734.4099073.0102219770.007122...1168106.00763004160.01967016521146735.67174034
413866942.064.28506738.5625179.0161619720.282798...1343995.10296205351.0887940890201584.44125535
\n", + "

5 rows × 27 columns

\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 102.027311 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 34.409907 3.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 ... Shops_2 Price \\\n", + "0 10 2014 0.075424 ... 1 305018.871089 \n", + "1 8 1966 0.118537 ... 1 177734.553407 \n", + "2 17 1988 0.025609 ... 1 282078.720850 \n", + "3 22 1977 0.007122 ... 1 168106.007630 \n", + "4 16 1972 0.282798 ... 1 343995.102962 \n", + "\n", + " HouseFloor_outlier Meter_price LifeSquare_nan DistrictSize \\\n", + "0 0 2651.708272 1 851 \n", + "1 0 4462.045990 0 78 \n", + "2 0 3600.596698 0 652 \n", + "3 0 4160.019670 1 652 \n", + "4 0 5351.088794 0 89 \n", + "\n", + " IsDistrictLarge MedPriceByDistrict year_cat floor_cat \n", + "0 1 213530.788443 6 2 \n", + "1 0 146032.829834 3 3 \n", + "2 1 244005.272380 4 1 \n", + "3 1 146735.671740 3 4 \n", + "4 0 201584.441255 3 5 \n", + "\n", + "[5 rows x 27 columns]" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df = year_to_cat(train_df)\n", + "train_df = floor_to_cat(train_df)\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "a3fb003c", + "metadata": {}, + "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", + "
year_catfloor_catMedPriceByFloorYear
011374737.658654
112322905.044793
213429825.896082
314274992.472366
421467230.539057
\n", + "
" + ], + "text/plain": [ + " year_cat floor_cat MedPriceByFloorYear\n", + "0 1 1 374737.658654\n", + "1 1 2 322905.044793\n", + "2 1 3 429825.896082\n", + "3 1 4 274992.472366\n", + "4 2 1 467230.539057" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#!!! медианная цена по году и этажу\n", + "med_price_by_floor_year = train_df.groupby(['year_cat', 'floor_cat'], as_index=False).agg({'Price':'median'}).\\\n", + " rename(columns={'Price':'MedPriceByFloorYear'})\n", + "med_price_by_floor_year.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "16adca39", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IdDistrictIdRoomsSquareLifeSquareKitchenSquareFloorHouseFloorHouseYearEcology_1...PriceHouseFloor_outlierMeter_priceLifeSquare_nanDistrictSizeIsDistrictLargeMedPriceByDistrictyear_catfloor_catMedPriceByFloorYear
011809273.0115.027311102.02731110.041020140.075424...305018.87108902651.70827218511213530.78844362161974.797753
13013221.039.83252423.1692238.07819660.118537...177734.55340704462.0459900780146032.82983433192538.872015
2821513.078.34221547.67197210.021719880.025609...282078.72085003600.59669806521244005.27238041204670.096676
3235211.040.40990734.4099073.0102219770.007122...168106.00763004160.01967016521146735.67174034183505.979560
413866942.064.28506738.5625179.0161619720.282798...343995.10296205351.0887940890201584.44125535173955.556579
\n", + "

5 rows × 28 columns

\n", + "
" + ], + "text/plain": [ + " Id DistrictId Rooms Square LifeSquare KitchenSquare Floor \\\n", + "0 11809 27 3.0 115.027311 102.027311 10.0 4 \n", + "1 3013 22 1.0 39.832524 23.169223 8.0 7 \n", + "2 8215 1 3.0 78.342215 47.671972 10.0 2 \n", + "3 2352 1 1.0 40.409907 34.409907 3.0 10 \n", + "4 13866 94 2.0 64.285067 38.562517 9.0 16 \n", + "\n", + " HouseFloor HouseYear Ecology_1 ... Price HouseFloor_outlier \\\n", + "0 10 2014 0.075424 ... 305018.871089 0 \n", + "1 8 1966 0.118537 ... 177734.553407 0 \n", + "2 17 1988 0.025609 ... 282078.720850 0 \n", + "3 22 1977 0.007122 ... 168106.007630 0 \n", + "4 16 1972 0.282798 ... 343995.102962 0 \n", + "\n", + " Meter_price LifeSquare_nan DistrictSize IsDistrictLarge \\\n", + "0 2651.708272 1 851 1 \n", + "1 4462.045990 0 78 0 \n", + "2 3600.596698 0 652 1 \n", + "3 4160.019670 1 652 1 \n", + "4 5351.088794 0 89 0 \n", + "\n", + " MedPriceByDistrict year_cat floor_cat MedPriceByFloorYear \n", + "0 213530.788443 6 2 161974.797753 \n", + "1 146032.829834 3 3 192538.872015 \n", + "2 244005.272380 4 1 204670.096676 \n", + "3 146735.671740 3 4 183505.979560 \n", + "4 201584.441255 3 5 173955.556579 \n", + "\n", + "[5 rows x 28 columns]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_df = train_df.merge(med_price_by_floor_year, on=['year_cat', 'floor_cat'], how='left')\n", + "train_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "1fa55c19", + "metadata": {}, + "outputs": [], + "source": [ + "class FeatureGenetator():\n", + " \"\"\"Генерация новых фич\"\"\"\n", + " \n", + " def __init__(self):\n", + " self.DistrictId_counts = None\n", + " self.binary_to_numbers = None\n", + " self.med_price_by_district = None\n", + " self.med_price_by_floor_year = None\n", + " self.house_year_max = None\n", + " self.floor_max = None\n", + " self.district_size = None\n", + " self.meter_price = None #AV\n", + " self.meter_price_by_district_rooms = None #AV\n", + " \n", + " def fit(self, X, y=None):\n", + " \n", + " X = X.copy()\n", + " \n", + " # Binary features\n", + " self.binary_to_numbers = {'A': 0, 'B': 1}\n", + " \n", + " # DistrictID\n", + " self.district_size = X['DistrictId'].value_counts().reset_index() \\\n", + " .rename(columns={'index':'DistrictId', 'DistrictId':'DistrictSize'})\n", + " \n", + " # Target encoding\n", + " ## District, Rooms\n", + " df = X.copy()\n", + " \n", + " if y is not None:\n", + " df['Price'] = y.values\n", + " \n", + " self.med_price_by_district = df.groupby(['DistrictId', 'Rooms'], as_index=False).agg({'Price':'median'})\\\n", + " .rename(columns={'Price':'MedPriceByDistrict'})\n", + " \n", + " self.med_price_by_district_median = self.med_price_by_district['MedPriceByDistrict'].median()\n", + " \n", + " ## floor, year\n", + " if y is not None:\n", + " self.floor_max = df['Floor'].max()\n", + " self.house_year_max = df['HouseYear'].max()\n", + " df['Price'] = y.values\n", + " df = self.floor_to_cat(df)\n", + " df = self.year_to_cat(df)\n", + " self.med_price_by_floor_year = df.groupby(['year_cat', 'floor_cat'], as_index=False).agg({'Price':'median'}).\\\n", + " rename(columns={'Price':'MedPriceByFloorYear'})\n", + " self.med_price_by_floor_year_median = self.med_price_by_floor_year['MedPriceByFloorYear'].median()\n", + " \n", + " if y is not None:\n", + " df['Price'] = y.values\n", + " self.meter_price = df['Price']/df['Square'] #AV \n", + " \n", + " \n", + " if y is not None:\n", + " df['Price'] = y.values \n", + " df = self.fill_meter_price(df)\n", + " self.meter_price_by_district_rooms = df.groupby(['DistrictId', 'Rooms'], as_index=False).\\\n", + " agg({'MeterPrice':'median'}).\\\n", + " rename(columns={'MeterPrice':'MeterPriceByDistrictRooms'})\n", + " \n", + " \n", + " \n", + " def transform(self, X):\n", + " \n", + " # Binary features\n", + " X['Ecology_2'] = X['Ecology_2'].map(self.binary_to_numbers) # self.binary_to_numbers = {'A': 0, 'B': 1}\n", + " X['Ecology_3'] = X['Ecology_3'].map(self.binary_to_numbers)\n", + " X['Shops_2'] = X['Shops_2'].map(self.binary_to_numbers)\n", + " \n", + " # DistrictId, IsDistrictLarge\n", + " X = X.merge(self.district_size, on='DistrictId', how='left')\n", + " \n", + " X['new_district'] = 0\n", + " X.loc[X['DistrictSize'].isna(), 'new_district'] = 1\n", + " \n", + " X['DistrictSize'].fillna(5, inplace=True)\n", + " \n", + " X['IsDistrictLarge'] = (X['DistrictSize'] > 100).astype(int)\n", + " \n", + " # More categorical features\n", + " X = self.floor_to_cat(X) # + столбец floor_cat\n", + " X = self.year_to_cat(X) # + столбец year_cat\n", + " \n", + " # Target encoding\n", + " if self.med_price_by_district is not None:\n", + " X = X.merge(self.med_price_by_district, on=['DistrictId', 'Rooms'], how='left')\n", + " X['MedPriceByDistrict'].fillna(self.med_price_by_district_median, inplace=True)\n", + " \n", + " if self.med_price_by_floor_year is not None:\n", + " X = X.merge(self.med_price_by_floor_year, on=['year_cat', 'floor_cat'], how='left')\n", + " X['MedPriceByFloorYear'].fillna(self.med_price_by_floor_year_median, inplace=True)\n", + " \n", + " # AV\n", + " X['MeterPrice'] = self.meter_price\n", + " X['MeterPrice'].fillna(3910,inplace = True)\n", + " #X.loc[(X['Square'] > 0), 'MeterPrice'] = X['Price'] / X['Square'] \n", + " \n", + " if self.meter_price_by_district_rooms is not None:\n", + " X = X.merge(self.meter_price_by_district_rooms, on=['DistrictId', 'Rooms'], how='left')\n", + " X['MeterPriceByDistrictRooms'].fillna(self.med_price_by_floor_year_median, inplace=True) \n", + " \n", + " \n", + " return X \n", + " \n", + " def floor_to_cat(self, X):\n", + " bins = [0, 3, 5, 9, 15, self.floor_max]\n", + " X['floor_cat'] = pd.cut(X['Floor'], bins=bins, labels=False)\n", + "\n", + " X['floor_cat'].fillna(-1, inplace=True)\n", + " return X\n", + " \n", + " def year_to_cat(self, X):\n", + " bins = [0, 1941, 1945, 1980, 2000, 2010, self.house_year_max]\n", + " X['year_cat'] = pd.cut(X['HouseYear'], bins=bins, labels=False)\n", + " X['year_cat'].fillna(-1, inplace=True)\n", + " return X\n", + " \n", + " def fill_meter_price(self, X): #AV\n", + " X['MeterPrice'] = self.meter_price\n", + " X['MeterPrice'].fillna(3910,inplace = True)\n", + " X.loc[(X['Square'] > 0), 'MeterPrice'] = X['Price'] / X['Square']\n", + " return X\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "6e21b269", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Id',\n", + " 'DistrictId',\n", + " 'Rooms',\n", + " 'Square',\n", + " 'LifeSquare',\n", + " 'KitchenSquare',\n", + " 'Floor',\n", + " 'HouseFloor',\n", + " 'HouseYear',\n", + " 'Ecology_1',\n", + " 'Ecology_2',\n", + " 'Ecology_3',\n", + " 'Social_1',\n", + " 'Social_2',\n", + " 'Social_3',\n", + " 'Helthcare_2',\n", + " 'Shops_1',\n", + " 'Shops_2',\n", + " 'Price',\n", + " 'HouseFloor_outlier',\n", + " 'Meter_price',\n", + " 'LifeSquare_nan',\n", + " 'DistrictSize',\n", + " 'IsDistrictLarge',\n", + " 'MedPriceByDistrict',\n", + " 'year_cat',\n", + " 'floor_cat',\n", + " 'MedPriceByFloorYear']" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# отбор призаков\n", + "train_df.columns.tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "b70cf62f", + "metadata": {}, + "outputs": [], + "source": [ + "feature_names = ['Rooms', 'Square', 'LifeSquare', 'KitchenSquare', 'Floor', 'HouseFloor', 'HouseYear',\n", + " 'Ecology_1', 'Ecology_2', 'Ecology_3', 'Social_1', 'Social_2', 'Social_3',\n", + " 'Helthcare_2', 'Shops_1', 'Shops_2']\n", + "\n", + "new_feature_names = ['Rooms_outlier', 'HouseFloor_outlier', 'HouseYear_outlier', 'LifeSquare_nan', 'DistrictSize',\n", + " 'new_district', 'IsDistrictLarge', 'MedPriceByDistrict', 'MedPriceByFloorYear', 'MeterPrice',\n", + " 'MeterPriceByDistrictRooms']\n", + "\n", + "target_name = 'Price'" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "6cdc1577", + "metadata": {}, + "outputs": [], + "source": [ + "# разбиение на train и test" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "31fa43e6", + "metadata": {}, + "outputs": [], + "source": [ + "train_df = pd.read_csv(TRAIN_DATASET_PATH)\n", + "test_df = pd.read_csv(TEST_DATASET_PATH)\n", + "\n", + "X = train_df.drop(columns=target_name)\n", + "y = train_df[target_name]" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "0fac92ea", + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.33, shuffle=True, random_state=21)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "3209cde6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((6700, 22), (3300, 22), (5000, 22))" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "preprocessor = DataPreprocessing()\n", + "preprocessor.fit(X_train)\n", + "\n", + "X_train = preprocessor.transform(X_train)\n", + "X_valid = preprocessor.transform(X_valid)\n", + "test_df = preprocessor.transform(test_df)\n", + "\n", + "X_train.shape, X_valid.shape, test_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "f9474705", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((6700, 31), (3300, 31), (5000, 31))" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "features_gen = FeatureGenetator()\n", + "features_gen.fit(X_train, y_train)\n", + "\n", + "X_train = features_gen.transform(X_train)\n", + "X_valid = features_gen.transform(X_valid)\n", + "test_df = features_gen.transform(test_df)\n", + "\n", + "X_train.shape, X_valid.shape, test_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "6fba65c6", + "metadata": {}, + "outputs": [], + "source": [ + "X_train = X_train[feature_names + new_feature_names]\n", + "X_valid = X_valid[feature_names + new_feature_names]\n", + "test_df = test_df[feature_names + new_feature_names]" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "a67cd879", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0, 0, 0)" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train.isna().sum().sum(), X_valid.isna().sum().sum(), test_df.isna().sum().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "4c9c6e00", + "metadata": {}, + "outputs": [], + "source": [ + "# построение модели" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "48adceb1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomForestRegressor(random_state=21)" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rf_model = RandomForestRegressor(random_state=21, criterion='mse')\n", + "rf_model.fit(X_train, y_train)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "984202de", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train R2:\t0.967\n", + "Test R2:\t0.722\n" + ] + }, + { + "data": { + "image/png": "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iIiIiIiIAojJFiIiIiIiIiKiAGKyhYiIiIiIiIgogNizhYiIiIiIiIgogFjZQkREREREREQUQNz6OQhyc3Pl6NGjwz0MIiKiiLJ79+4zUsrh4R7HUMF4hIiIyFWo4hEmW4Jg9OjRqKqqCvcwiIiIIooQojbcYxhKGI8QERG5ClU8wmVEREREREREREQBxGQLEREREREREVEAMdlCRERERERERBRATLYQEREREREREQUQky1ERERERERERAHEZAsRERERERERUQAx2UJEREREREREFEBMthARERERERERBRCTLUREREREREREAcRkCxERERERERFRADHZQkREREREREQUQEy2EBEREREREREFEJMtREREREREREQBxGQLEREREREREVEAMdlCRERERERERBRATLYQEREREREREQUQky1ERERERERERAHEZAsRERERERERUQAx2UJEREREREREFEBMthARERERERERBVB8uAdAREREgWGxSJxo7kRDmxl5GUaMzkmFwSDCPSwiIoowvF4QBR+TLURERDHAYpHYvP807n75Y5j7LDAmGLD6xumYN2mkZgDNQJuIaGjy9XpBRP7hMiIiIqIIZLFI1DR1YMexM6hp6oDFIj0ef6K50xY4A4C5z4K7X/4Ye0+dczmHGmjPr9yOm5/ehfmV27F5/2mvz0FERNHP3fXiRHNnmEdGFFuYbCEiIoow/iRDGtrMtsBZZe6zYMuhRpdzeAu0fU30EBFR9HB3vWhsN4dpRESxickWIiKiCOPPrGNehhHGBMfLujHBgAFrPK2e44MTZ3GiudNtoM2qFyKi2ObuejEi3RimERHFJiZbiIiIIow/s46jc1Kx+sbptgDamGBAxZwS/PXDkw7n2H70DD759JzbQJvl5UREsU3rerH6xukYnZMa5pERxRY2yCUiIoow6qyjfcJFTYa4a2xrMAjMmzQS4yvK0NhuRnJCHCpe+gj1rWaHc0gJvLz7JJbPLcHjW6ptzREfvX4KDAKob3Wf6DENTwvZe0BERMHhfL0Ykc4m6UTBwGQLERFRhFFnHZ13iijKSvG4g4TBIGAangbT8DRYLBIr5k1wOLZiTgnW7axFfasZL+yoxbpvXoaG9h4caWjHb/55GC1dvXj61lK3iR4iIooN9tcLGhzu7kfuMNlCREQUYdzNOrpb4jO+oswlYLY/R21z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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + " # оценка модели\n", + "y_train_preds = rf_model.predict(X_train)\n", + "y_test_preds = rf_model.predict(X_valid)\n", + "\n", + "evaluate_preds(y_train, y_train_preds, y_valid, y_test_preds)" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "f880df39", + "metadata": {}, + "outputs": [], + "source": [ + "# кросс валидация" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "0290cf24", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.78324412, 0.73308622, 0.76224678])" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cv_score = cross_val_score(rf_model, X_train, y_train, scoring='r2', cv=KFold(n_splits=3, shuffle=True, random_state=21))\n", + "cv_score" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "5d373cf1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.7595257056684376" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cv_score.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "b5be4638", + "metadata": {}, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
feature_nameimportance
23MedPriceByDistrict6.377276e-01
1Square1.169206e-01
26MeterPriceByDistrictRooms5.302766e-02
2LifeSquare2.742734e-02
6HouseYear1.880421e-02
24MedPriceByFloorYear1.836782e-02
5HouseFloor1.637686e-02
25MeterPrice1.623973e-02
4Floor1.337890e-02
3KitchenSquare1.172162e-02
12Social_31.140762e-02
7Ecology_11.114983e-02
11Social_21.038791e-02
20DistrictSize1.014266e-02
10Social_19.488800e-03
14Shops_17.056769e-03
13Helthcare_24.669791e-03
17HouseFloor_outlier1.497970e-03
0Rooms1.197059e-03
19LifeSquare_nan8.821891e-04
15Shops_28.546742e-04
9Ecology_36.578909e-04
22IsDistrictLarge4.151446e-04
8Ecology_21.322893e-04
16Rooms_outlier6.708606e-05
18HouseYear_outlier1.218268e-08
21new_district0.000000e+00
\n", + "
" + ], + "text/plain": [ + " feature_name importance\n", + "23 MedPriceByDistrict 6.377276e-01\n", + "1 Square 1.169206e-01\n", + "26 MeterPriceByDistrictRooms 5.302766e-02\n", + "2 LifeSquare 2.742734e-02\n", + "6 HouseYear 1.880421e-02\n", + "24 MedPriceByFloorYear 1.836782e-02\n", + "5 HouseFloor 1.637686e-02\n", + "25 MeterPrice 1.623973e-02\n", + "4 Floor 1.337890e-02\n", + "3 KitchenSquare 1.172162e-02\n", + "12 Social_3 1.140762e-02\n", + "7 Ecology_1 1.114983e-02\n", + "11 Social_2 1.038791e-02\n", + "20 DistrictSize 1.014266e-02\n", + "10 Social_1 9.488800e-03\n", + "14 Shops_1 7.056769e-03\n", + "13 Helthcare_2 4.669791e-03\n", + "17 HouseFloor_outlier 1.497970e-03\n", + "0 Rooms 1.197059e-03\n", + "19 LifeSquare_nan 8.821891e-04\n", + "15 Shops_2 8.546742e-04\n", + "9 Ecology_3 6.578909e-04\n", + "22 IsDistrictLarge 4.151446e-04\n", + "8 Ecology_2 1.322893e-04\n", + "16 Rooms_outlier 6.708606e-05\n", + "18 HouseYear_outlier 1.218268e-08\n", + "21 new_district 0.000000e+00" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# веса признаков\n", + "feature_importances = pd.DataFrame(zip(X_train.columns, rf_model.feature_importances_), \n", + " columns=['feature_name', 'importance'])\n", + "\n", + "feature_importances.sort_values(by='importance', ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "7d95cb34", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5000, 27)" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# выгрузка результатов\n", + "test_df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "90e14b5d", + "metadata": {}, + "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", + "
IdPrice
04567200000.0
15925200000.0
2960200000.0
33848200000.0
4746200000.0
\n", + "
" + ], + "text/plain": [ + " Id Price\n", + "0 4567 200000.0\n", + "1 5925 200000.0\n", + "2 960 200000.0\n", + "3 3848 200000.0\n", + "4 746 200000.0" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "submit = pd.read_csv('C:/ARTEM/GeekBrains/Python4DS/RealEstatePricePredictionMoscow/sample_submission.csv')\n", + "submit.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "2c01f0a4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([164129.41193348, 117169.5995882 , 139193.78182605, ...,\n", + " 148103.70058817, 189761.30723796, 229074.87215388])" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predictions = rf_model.predict(test_df)\n", + "predictions" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "6c9f1523", + "metadata": {}, + "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", + "
IdPrice
04567164129.411933
15925117169.599588
2960139193.781826
33848169578.024348
4746171922.946686
\n", + "
" + ], + "text/plain": [ + " Id Price\n", + "0 4567 164129.411933\n", + "1 5925 117169.599588\n", + "2 960 139193.781826\n", + "3 3848 169578.024348\n", + "4 746 171922.946686" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "submit['Price'] = predictions\n", + "submit.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "e6052d38", + "metadata": {}, + "outputs": [], + "source": [ + "submit.to_csv('C:/ARTEM/GeekBrains/Python4DS/RealEstatePricePredictionMoscow/rf_submit.csv', index=False)" + ] + } + ], + "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.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}