From 696d3aefac84312b611ce38ca6eb3e95c6aa2def Mon Sep 17 00:00:00 2001 From: thbeca-30 Date: Tue, 15 Jun 2021 18:20:00 +0300 Subject: [PATCH 1/2] finish 4 lab --- "ml/lb4/Lab\342\204\2264.ipynb" | 1690 +++++++++++++++++++++++++++++++ 1 file changed, 1690 insertions(+) create mode 100644 "ml/lb4/Lab\342\204\2264.ipynb" diff --git "a/ml/lb4/Lab\342\204\2264.ipynb" "b/ml/lb4/Lab\342\204\2264.ipynb" new file mode 100644 index 00000000..133550f0 --- /dev/null +++ "b/ml/lb4/Lab\342\204\2264.ipynb" @@ -0,0 +1,1690 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Цветков Николай Максимович, Вариант №4\n", + "### Лабораторная работа №4. Регрессионный анализ данных" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import seaborn as sns\n", + "import sklearn as sk\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from scipy import interp \n", + "from sklearn.preprocessing import MinMaxScaler\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "from sklearn.model_selection import StratifiedKFold\n", + "from sklearn.neighbors import RadiusNeighborsClassifier\n", + "from sklearn.model_selection import train_test_split, cross_val_score\n", + "from sklearn.metrics import (auc, roc_curve, \n", + " precision_recall_curve, \n", + " average_precision_score)\n", + "\n", + "from sklearn import datasets\n", + "from sklearn.linear_model import Perceptron\n", + "from sklearn.preprocessing import LabelEncoder\n", + "from sklearn import neighbors\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.preprocessing import LabelEncoder, OneHotEncoder\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n", + "from sklearn.metrics import precision_recall_curve, classification_report\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.metrics import roc_curve, auc\n", + "from matplotlib.pylab import rc, plot\n", + "\n", + "df = pd.read_csv('kc_house_data.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.Изучить набор данных. Создать описание набора данных на русском языке. Описать признаки, используемые в наборе данных (включить полученные описания в отчёт)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Этот набор данных содержит цены продажи домов для округа Кинг, включая Сиэтл. Сюда входят дома, проданные в период с мая 2014 года по май 2015 года.\n", + "\n", + "id - Уникальный идентификатор для каждого проданного дома\n", + "\n", + "date - Дата продажи дома\n", + "\n", + "цена - Цена каждого проданного дома\n", + "\n", + "спальни - Количество спален\n", + "\n", + "ванные комнаты - Количество ванных комнат, где 0,5 составляет комнату с туалетом, но без душа.\n", + "\n", + "sqft_living - Метраж внутренней жилой площади квартиры\n", + "\n", + "sqft_lot - метраж земельного участка\n", + "\n", + "floors - Количество этажей\n", + "\n", + "Waterfront - фиктивная переменная, определяющая, выходила ли квартира на набережную или нет.\n", + "\n", + "view - индекс от 0 до 4 того, насколько хорош был вид собственности.\n", + "\n", + "Состояние - Индекс от 1 до 5 от состояния квартиры,\n", + "\n", + "оценка - индекс от 1 до 13, где 1–3 не соответствует уровню строительства и проектирования, 7 - среднему уровню строительства и проектирования, а 11–13 - высокому уровню качества строительства и проектирования.\n", + "\n", + "sqft_above - квадратные метры внутреннего жилого пространства, которое находится над уровнем земли.\n", + "\n", + "sqft_basement - квадратные метры внутреннего жилого пространства, которое находится ниже уровня земли.\n", + "\n", + "yr_built - год постройки дома\n", + "\n", + "yr_renovated - Год последней реновации дома\n", + "\n", + "zipcode - В каком районе с почтовым индексом находится дом\n", + "\n", + "lat - Широта\n", + "\n", + "long - долгота\n", + "\n", + "sqft_living15 - Площадь жилой площади внутри жилья для ближайших 15 соседей.\n", + "\n", + "sqft_lot15 - Площадь земельных участков ближайших 15 соседей" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.Удалите дубликаты строк в наборе данных; приведите размер набора данных до и после данной операции" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(21613, 21)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 21613 entries, 0 to 21612\n", + "Data columns (total 21 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 id 21613 non-null int64 \n", + " 1 date 21613 non-null object \n", + " 2 price 21613 non-null float64\n", + " 3 bedrooms 21613 non-null int64 \n", + " 4 bathrooms 21613 non-null float64\n", + " 5 sqft_living 21613 non-null int64 \n", + " 6 sqft_lot 21613 non-null int64 \n", + " 7 floors 21613 non-null float64\n", + " 8 waterfront 21613 non-null int64 \n", + " 9 view 21613 non-null int64 \n", + " 10 condition 21613 non-null int64 \n", + " 11 grade 21613 non-null int64 \n", + " 12 sqft_above 21613 non-null int64 \n", + " 13 sqft_basement 21613 non-null int64 \n", + " 14 yr_built 21613 non-null int64 \n", + " 15 yr_renovated 21613 non-null int64 \n", + " 16 zipcode 21613 non-null int64 \n", + " 17 lat 21613 non-null float64\n", + " 18 long 21613 non-null float64\n", + " 19 sqft_living15 21613 non-null int64 \n", + " 20 sqft_lot15 21613 non-null int64 \n", + "dtypes: float64(5), int64(15), object(1)\n", + "memory usage: 3.5+ MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "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", + "
iddatepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontview...gradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
0712930052020141013T000000221900.031.00118056501.000...711800195509817847.5112-122.25713405650
1641410019220141209T000000538000.032.25257072422.000...72170400195119919812547.7210-122.31916907639
2563150040020150225T000000180000.021.00770100001.000...67700193309802847.7379-122.23327208062
3248720087520141209T000000604000.043.00196050001.000...71050910196509813647.5208-122.39313605000
4195440051020150218T000000510000.032.00168080801.000...816800198709807447.6168-122.04518007503
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " id date price bedrooms bathrooms sqft_living \\\n", + "0 7129300520 20141013T000000 221900.0 3 1.00 1180 \n", + "1 6414100192 20141209T000000 538000.0 3 2.25 2570 \n", + "2 5631500400 20150225T000000 180000.0 2 1.00 770 \n", + "3 2487200875 20141209T000000 604000.0 4 3.00 1960 \n", + "4 1954400510 20150218T000000 510000.0 3 2.00 1680 \n", + "\n", + " sqft_lot floors waterfront view ... grade sqft_above sqft_basement \\\n", + "0 5650 1.0 0 0 ... 7 1180 0 \n", + "1 7242 2.0 0 0 ... 7 2170 400 \n", + "2 10000 1.0 0 0 ... 6 770 0 \n", + "3 5000 1.0 0 0 ... 7 1050 910 \n", + "4 8080 1.0 0 0 ... 8 1680 0 \n", + "\n", + " yr_built yr_renovated zipcode lat long sqft_living15 \\\n", + "0 1955 0 98178 47.5112 -122.257 1340 \n", + "1 1951 1991 98125 47.7210 -122.319 1690 \n", + "2 1933 0 98028 47.7379 -122.233 2720 \n", + "3 1965 0 98136 47.5208 -122.393 1360 \n", + "4 1987 0 98074 47.6168 -122.045 1800 \n", + "\n", + " sqft_lot15 \n", + "0 5650 \n", + "1 7639 \n", + "2 8062 \n", + "3 5000 \n", + "4 7503 \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "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", + "
iddatepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontview...gradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
2160826300001820140521T000000360000.032.50153011313.000...815300200909810347.6993-122.34615301509
21609660006012020150223T000000400000.042.50231058132.000...823100201409814647.5107-122.36218307200
21610152330014120140623T000000402101.020.75102013502.000...710200200909814447.5944-122.29910202007
2161129131010020150116T000000400000.032.50160023882.000...816000200409802747.5345-122.06914101287
21612152330015720141015T000000325000.020.75102010762.000...710200200809814447.5941-122.29910201357
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " id date price bedrooms bathrooms \\\n", + "21608 263000018 20140521T000000 360000.0 3 2.50 \n", + "21609 6600060120 20150223T000000 400000.0 4 2.50 \n", + "21610 1523300141 20140623T000000 402101.0 2 0.75 \n", + "21611 291310100 20150116T000000 400000.0 3 2.50 \n", + "21612 1523300157 20141015T000000 325000.0 2 0.75 \n", + "\n", + " sqft_living sqft_lot floors waterfront view ... grade \\\n", + "21608 1530 1131 3.0 0 0 ... 8 \n", + "21609 2310 5813 2.0 0 0 ... 8 \n", + "21610 1020 1350 2.0 0 0 ... 7 \n", + "21611 1600 2388 2.0 0 0 ... 8 \n", + "21612 1020 1076 2.0 0 0 ... 7 \n", + "\n", + " sqft_above sqft_basement yr_built yr_renovated zipcode lat \\\n", + "21608 1530 0 2009 0 98103 47.6993 \n", + "21609 2310 0 2014 0 98146 47.5107 \n", + "21610 1020 0 2009 0 98144 47.5944 \n", + "21611 1600 0 2004 0 98027 47.5345 \n", + "21612 1020 0 2008 0 98144 47.5941 \n", + "\n", + " long sqft_living15 sqft_lot15 \n", + "21608 -122.346 1530 1509 \n", + "21609 -122.362 1830 7200 \n", + "21610 -122.299 1020 2007 \n", + "21611 -122.069 1410 1287 \n", + "21612 -122.299 1020 1357 \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(21613, 21)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df.drop_duplicates()\n", + "df = df.dropna()\n", + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 21613 entries, 0 to 21612\n", + "Data columns (total 21 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 id 21613 non-null int64 \n", + " 1 date 21613 non-null object \n", + " 2 price 21613 non-null float64\n", + " 3 bedrooms 21613 non-null int64 \n", + " 4 bathrooms 21613 non-null float64\n", + " 5 sqft_living 21613 non-null int64 \n", + " 6 sqft_lot 21613 non-null int64 \n", + " 7 floors 21613 non-null float64\n", + " 8 waterfront 21613 non-null int64 \n", + " 9 view 21613 non-null int64 \n", + " 10 condition 21613 non-null int64 \n", + " 11 grade 21613 non-null int64 \n", + " 12 sqft_above 21613 non-null int64 \n", + " 13 sqft_basement 21613 non-null int64 \n", + " 14 yr_built 21613 non-null int64 \n", + " 15 yr_renovated 21613 non-null int64 \n", + " 16 zipcode 21613 non-null int64 \n", + " 17 lat 21613 non-null float64\n", + " 18 long 21613 non-null float64\n", + " 19 sqft_living15 21613 non-null int64 \n", + " 20 sqft_lot15 21613 non-null int64 \n", + "dtypes: float64(5), int64(15), object(1)\n", + "memory usage: 3.6+ MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "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", + "
iddatepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontview...gradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
0712930052020141013T000000221900.031.00118056501.000...711800195509817847.5112-122.25713405650
1641410019220141209T000000538000.032.25257072422.000...72170400195119919812547.7210-122.31916907639
2563150040020150225T000000180000.021.00770100001.000...67700193309802847.7379-122.23327208062
3248720087520141209T000000604000.043.00196050001.000...71050910196509813647.5208-122.39313605000
4195440051020150218T000000510000.032.00168080801.000...816800198709807447.6168-122.04518007503
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " id date price bedrooms bathrooms sqft_living \\\n", + "0 7129300520 20141013T000000 221900.0 3 1.00 1180 \n", + "1 6414100192 20141209T000000 538000.0 3 2.25 2570 \n", + "2 5631500400 20150225T000000 180000.0 2 1.00 770 \n", + "3 2487200875 20141209T000000 604000.0 4 3.00 1960 \n", + "4 1954400510 20150218T000000 510000.0 3 2.00 1680 \n", + "\n", + " sqft_lot floors waterfront view ... grade sqft_above sqft_basement \\\n", + "0 5650 1.0 0 0 ... 7 1180 0 \n", + "1 7242 2.0 0 0 ... 7 2170 400 \n", + "2 10000 1.0 0 0 ... 6 770 0 \n", + "3 5000 1.0 0 0 ... 7 1050 910 \n", + "4 8080 1.0 0 0 ... 8 1680 0 \n", + "\n", + " yr_built yr_renovated zipcode lat long sqft_living15 \\\n", + "0 1955 0 98178 47.5112 -122.257 1340 \n", + "1 1951 1991 98125 47.7210 -122.319 1690 \n", + "2 1933 0 98028 47.7379 -122.233 2720 \n", + "3 1965 0 98136 47.5208 -122.393 1360 \n", + "4 1987 0 98074 47.6168 -122.045 1800 \n", + "\n", + " sqft_lot15 \n", + "0 5650 \n", + "1 7639 \n", + "2 8062 \n", + "3 5000 \n", + "4 7503 \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.Выполните масштабирование количественных признаков; Постройте диаграммы BoxPlot для признаков до и после масштабирования. Выберите способ масштабирования (например, нормализацию или стандартизацию)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "numerical: ['id', 'price', 'bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot', 'floors', 'waterfront', 'view', 'condition', 'grade', 'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated', 'zipcode', 'lat', 'long', 'sqft_living15', 'sqft_lot15']\n", + "categorial: ['date']\n" + ] + } + ], + "source": [ + "numerical_columns = [i for i in df.columns if df[i].dtype.name != 'object']\n", + "categorial_columns = [i for i in df.columns if df[i].dtype.name == 'object']\n", + "\n", + "print('numerical: ', numerical_columns)\n", + "print('categorial: ', categorial_columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.boxplot(column='bedrooms',by='floors',rot=90)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "def cast(obj):\n", + " if type(obj) == str:\n", + " return float(obj.replace(',', '.'))\n", + " else:\n", + " return obj\n", + "\n", + "df['bathrooms'] = df['bathrooms'].apply(lambda x: cast(x))\n", + "df['floors'] = df['floors'].apply(lambda x: cast(x))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "numerical: ['id', 'price', 'bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot', 'floors', 'waterfront', 'view', 'condition', 'grade', 'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated', 'zipcode', 'lat', 'long', 'sqft_living15', 'sqft_lot15']\n", + "categorial: ['date']\n" + ] + } + ], + "source": [ + "numerical_columns = [i for i in df.columns if df[i].dtype.name != 'object']\n", + "categorial_columns = [i for i in df.columns if df[i].dtype.name == 'object']\n", + "\n", + "print('numerical: ', numerical_columns)\n", + "print('categorial: ', categorial_columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 21613 entries, 0 to 21612\n", + "Data columns (total 21 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 id 21613 non-null int64 \n", + " 1 date 21613 non-null object \n", + " 2 price 21613 non-null float64\n", + " 3 bedrooms 21613 non-null int64 \n", + " 4 bathrooms 21613 non-null float64\n", + " 5 sqft_living 21613 non-null int64 \n", + " 6 sqft_lot 21613 non-null int64 \n", + " 7 floors 21613 non-null float64\n", + " 8 waterfront 21613 non-null int64 \n", + " 9 view 21613 non-null int64 \n", + " 10 condition 21613 non-null int64 \n", + " 11 grade 21613 non-null int64 \n", + " 12 sqft_above 21613 non-null int64 \n", + " 13 sqft_basement 21613 non-null int64 \n", + " 14 yr_built 21613 non-null int64 \n", + " 15 yr_renovated 21613 non-null int64 \n", + " 16 zipcode 21613 non-null int64 \n", + " 17 lat 21613 non-null float64\n", + " 18 long 21613 non-null float64\n", + " 19 sqft_living15 21613 non-null int64 \n", + " 20 sqft_lot15 21613 non-null int64 \n", + "dtypes: float64(5), int64(15), object(1)\n", + "memory usage: 3.6+ MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "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", + "
iddatepricebedroomsbathroomssqft_livingsqft_lotfloorswaterfrontview...gradesqft_abovesqft_basementyr_builtyr_renovatedzipcodelatlongsqft_living15sqft_lot15
00.72010320141013T0000000.0192660.0909090.125000.0671700.0031080.00.00.0...0.5000000.0975880.0000000.4782610.0000000.8939390.5714980.2176080.1619340.005742
10.64785320141209T0000000.0607210.0909090.281250.1720750.0040720.40.00.0...0.5000000.2061400.0829880.4434780.9880890.6262630.9089590.1661130.2221650.008027
20.56879520150225T0000000.0137700.0606060.125000.0362260.0057430.00.00.0...0.4166670.0526320.0000000.2869570.0000000.1363640.9361430.2375420.3994150.008513
30.25115720141209T0000000.0693770.1212120.375000.1260380.0027140.00.00.0...0.5000000.0833330.1887970.5652170.0000000.6818180.5869390.1046510.1653760.004996
40.19733320150218T0000000.0570490.0909090.250000.1049060.0045790.00.00.0...0.5833330.1524120.0000000.7565220.0000000.3686870.7413540.3936880.2410940.007871
\n", + "

5 rows × 21 columns

\n", + "
" + ], + "text/plain": [ + " id date price bedrooms bathrooms sqft_living \\\n", + "0 0.720103 20141013T000000 0.019266 0.090909 0.12500 0.067170 \n", + "1 0.647853 20141209T000000 0.060721 0.090909 0.28125 0.172075 \n", + "2 0.568795 20150225T000000 0.013770 0.060606 0.12500 0.036226 \n", + "3 0.251157 20141209T000000 0.069377 0.121212 0.37500 0.126038 \n", + "4 0.197333 20150218T000000 0.057049 0.090909 0.25000 0.104906 \n", + "\n", + " sqft_lot floors waterfront view ... grade sqft_above \\\n", + "0 0.003108 0.0 0.0 0.0 ... 0.500000 0.097588 \n", + "1 0.004072 0.4 0.0 0.0 ... 0.500000 0.206140 \n", + "2 0.005743 0.0 0.0 0.0 ... 0.416667 0.052632 \n", + "3 0.002714 0.0 0.0 0.0 ... 0.500000 0.083333 \n", + "4 0.004579 0.0 0.0 0.0 ... 0.583333 0.152412 \n", + "\n", + " sqft_basement yr_built yr_renovated zipcode lat long \\\n", + "0 0.000000 0.478261 0.000000 0.893939 0.571498 0.217608 \n", + "1 0.082988 0.443478 0.988089 0.626263 0.908959 0.166113 \n", + "2 0.000000 0.286957 0.000000 0.136364 0.936143 0.237542 \n", + "3 0.188797 0.565217 0.000000 0.681818 0.586939 0.104651 \n", + "4 0.000000 0.756522 0.000000 0.368687 0.741354 0.393688 \n", + "\n", + " sqft_living15 sqft_lot15 \n", + "0 0.161934 0.005742 \n", + "1 0.222165 0.008027 \n", + "2 0.399415 0.008513 \n", + "3 0.165376 0.004996 \n", + "4 0.241094 0.007871 \n", + "\n", + "[5 rows x 21 columns]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# нормализуем\n", + "scaler = MinMaxScaler()\n", + "df[numerical_columns] = scaler.fit_transform(df[numerical_columns])\n", + "\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df.boxplot(column='bedrooms',by='floors',rot=90)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.Выполните замену категориальных признаков; выберите и обоснуйте способ замены" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Категориальных признаков нет" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5)Оцените корреляцию между признаков и удалите те признаки, которые коррелируют с наибольшим числом других" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " price bedrooms bathrooms sqft_living sqft_lot floors \\\n", + "price 1.000000 0.308350 0.525138 0.702035 0.089661 0.256794 \n", + "bedrooms 0.308350 1.000000 0.515884 0.576671 0.031703 0.175429 \n", + "bathrooms 0.525138 0.515884 1.000000 0.754665 0.087740 0.500653 \n", + "sqft_living 0.702035 0.576671 0.754665 1.000000 0.172826 0.353949 \n", + "sqft_lot 0.089661 0.031703 0.087740 0.172826 1.000000 -0.005201 \n", + "floors 0.256794 0.175429 0.500653 0.353949 -0.005201 1.000000 \n", + "condition 0.036362 0.028472 -0.124982 -0.058753 -0.008958 -0.263768 \n", + "grade 0.667434 0.356967 0.664983 0.762704 0.113621 0.458183 \n", + "sqft_above 0.605567 0.477600 0.685342 0.876597 0.183512 0.523885 \n", + "sqft_basement 0.323816 0.303093 0.283770 0.435043 0.015286 -0.245705 \n", + "yr_built 0.054012 0.154178 0.506019 0.318049 0.053080 0.489319 \n", + "yr_renovated 0.126434 0.018841 0.050739 0.055363 0.007644 0.006338 \n", + "sqft_living15 0.585379 0.391638 0.568634 0.756420 0.144608 0.279885 \n", + "sqft_lot15 0.082447 0.029244 0.087175 0.183286 0.718557 -0.011269 \n", + "\n", + " condition grade sqft_above sqft_basement yr_built \\\n", + "price 0.036362 0.667434 0.605567 0.323816 0.054012 \n", + "bedrooms 0.028472 0.356967 0.477600 0.303093 0.154178 \n", + "bathrooms -0.124982 0.664983 0.685342 0.283770 0.506019 \n", + "sqft_living -0.058753 0.762704 0.876597 0.435043 0.318049 \n", + "sqft_lot -0.008958 0.113621 0.183512 0.015286 0.053080 \n", + "floors -0.263768 0.458183 0.523885 -0.245705 0.489319 \n", + "condition 1.000000 -0.144674 -0.158214 0.174105 -0.361417 \n", + "grade -0.144674 1.000000 0.755923 0.168392 0.446963 \n", + "sqft_above -0.158214 0.755923 1.000000 -0.051943 0.423898 \n", + "sqft_basement 0.174105 0.168392 -0.051943 1.000000 -0.133124 \n", + "yr_built -0.361417 0.446963 0.423898 -0.133124 1.000000 \n", + "yr_renovated -0.060618 0.014414 0.023285 0.071323 -0.224874 \n", + "sqft_living15 -0.092824 0.713202 0.731870 0.200355 0.326229 \n", + "sqft_lot15 -0.003406 0.119248 0.194050 0.017276 0.070958 \n", + "\n", + " yr_renovated sqft_living15 sqft_lot15 \n", + "price 0.126434 0.585379 0.082447 \n", + "bedrooms 0.018841 0.391638 0.029244 \n", + "bathrooms 0.050739 0.568634 0.087175 \n", + "sqft_living 0.055363 0.756420 0.183286 \n", + "sqft_lot 0.007644 0.144608 0.718557 \n", + "floors 0.006338 0.279885 -0.011269 \n", + "condition -0.060618 -0.092824 -0.003406 \n", + "grade 0.014414 0.713202 0.119248 \n", + "sqft_above 0.023285 0.731870 0.194050 \n", + "sqft_basement 0.071323 0.200355 0.017276 \n", + "yr_built -0.224874 0.326229 0.070958 \n", + "yr_renovated 1.000000 -0.002673 0.007854 \n", + "sqft_living15 -0.002673 1.000000 0.183192 \n", + "sqft_lot15 0.007854 0.183192 1.000000 \n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "corr_matrix = df.drop(['id','date','waterfront','view','zipcode','lat','long'], axis=1).corr()\n", + "sns.heatmap(corr_matrix);\n", + "print(corr_matrix)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6)Заполните пропущенные значения в данных" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 21613 entries, 0 to 21612\n", + "Data columns (total 21 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 id 21613 non-null float64\n", + " 1 date 21613 non-null object \n", + " 2 price 21613 non-null float64\n", + " 3 bedrooms 21613 non-null float64\n", + " 4 bathrooms 21613 non-null float64\n", + " 5 sqft_living 21613 non-null float64\n", + " 6 sqft_lot 21613 non-null float64\n", + " 7 floors 21613 non-null float64\n", + " 8 waterfront 21613 non-null float64\n", + " 9 view 21613 non-null float64\n", + " 10 condition 21613 non-null float64\n", + " 11 grade 21613 non-null float64\n", + " 12 sqft_above 21613 non-null float64\n", + " 13 sqft_basement 21613 non-null float64\n", + " 14 yr_built 21613 non-null float64\n", + " 15 yr_renovated 21613 non-null float64\n", + " 16 zipcode 21613 non-null float64\n", + " 17 lat 21613 non-null float64\n", + " 18 long 21613 non-null float64\n", + " 19 sqft_living15 21613 non-null float64\n", + " 20 sqft_lot15 21613 non-null float64\n", + "dtypes: float64(20), object(1)\n", + "memory usage: 3.6+ MB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Пропущенных значений нет" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7)Решите поставленную задачу регрессии в соответствии с заданием. При подборе параметров метода принятия решения используйте перекрёстную проверку (изучите возможные для изменения параметры метода регрессии). Вычислите точность решения задачи, вычислив разницу между реальным значением и предсказанным. Вычислите коэффициент корреляции (Пирсона, Спирмена) между реальным значением и предсказаннымс учётом p-value" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Ridge(alpha=0.5)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn import linear_model\n", + "# линейная регрессия, RIDGE регуляризатор.\n", + "\n", + "X, y = df.drop(['price','date'], axis=1), df['price']\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 123)\n", + "\n", + "reg = linear_model.Ridge (alpha = .5)\n", + "reg.fit (X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.00193748, -0.13540374, 0.04129303, 0.11038102, 0.02741847,\n", + " 0.00124632, 0.08238055, 0.02730064, 0.01342247, 0.15861042,\n", + " 0.13349222, 0.05085051, -0.03985562, 0.00523935, -0.01478764,\n", + " 0.04892132, -0.03391988, 0.01578631, -0.04172803])" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reg.coef_" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.07406577 0.05182631 0.1123396 0.15140513 0.02083593 0.02279907\n", + " 0.07315432 0.05148704 0.07626971 0.07923561]\n" + ] + } + ], + "source": [ + "xt = reg.predict(X_test)\n", + "print(xt[:10])" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5506 0.060000\n", + "9279 0.043934\n", + "16034 0.092787\n", + "6608 0.120656\n", + "20359 0.026754\n", + "8798 0.013115\n", + "10035 0.080525\n", + "13321 0.026230\n", + "15842 0.051148\n", + "12119 0.056525\n", + "Name: price, dtype: float64\n" + ] + } + ], + "source": [ + "print(y_test[:10])" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5506 0.014066\n", + "9279 0.007892\n", + "16034 0.019553\n", + "6608 0.030749\n", + "20359 -0.005918\n", + "8798 0.009684\n", + "10035 -0.007370\n", + "13321 0.025258\n", + "15842 0.025122\n", + "12119 0.022711\n", + "Name: price, dtype: float64\n" + ] + } + ], + "source": [ + "print(xt[:10]-y_test[:10])" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.07059632503296992" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reg.intercept_" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression()" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn import linear_model\n", + "# линейная регрессия без использования регуляризаторов;\n", + "\n", + "X, y = df.drop(['price','date'], axis=1), df['price']\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 123)\n", + "\n", + "reg = linear_model.LinearRegression()\n", + "\n", + "reg.fit(X_train,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.00194496, -0.14592851, 0.04155688, 0.11204693, 0.03233074,\n", + " 0.00104583, 0.08272934, 0.02706334, 0.01346456, 0.1589406 ,\n", + " 0.13549138, 0.05164739, -0.04000652, 0.00515634, -0.01487619,\n", + " 0.04888636, -0.03401542, 0.01486874, -0.04690618])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reg.coef_" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.06988863157025132" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reg.intercept_" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.84251977295736\n", + "0.8579427865393281\n" + ] + } + ], + "source": [ + "from scipy.stats import *\n", + "corr={}\n", + "corr['pearson'], p_value_p = stats.pearsonr(xt,y_test)\n", + "corr['spearman'], p_value_s = stats.spearmanr(xt,y_test)\n", + "print(corr['pearson'])\n", + "print(corr['spearman'])" + ] + } + ], + "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.8.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From b97015d1060f83cf6c6bf79d5f2746216550be3a Mon Sep 17 00:00:00 2001 From: thbeca-30 Date: Wed, 23 Jun 2021 10:29:37 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=83=D1=82=D1=8C=20=D0=BA=204=20=D0=BB=D0=B0?= =?UTF-8?q?=D0=B1=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lb4/Tzvetkov_N_M/Lab\342\204\2264.ipynb" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "ml/lb4/Lab\342\204\2264.ipynb" => "ml/lb4/Tzvetkov_N_M/Lab\342\204\2264.ipynb" (100%) diff --git "a/ml/lb4/Lab\342\204\2264.ipynb" "b/ml/lb4/Tzvetkov_N_M/Lab\342\204\2264.ipynb" similarity index 100% rename from "ml/lb4/Lab\342\204\2264.ipynb" rename to "ml/lb4/Tzvetkov_N_M/Lab\342\204\2264.ipynb"