mieszkania5/SysInf.ipynb

2953 lines
232 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Systemy informatyczne - 1. Organizacja pracy zespołowej"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Klonowanie dostępnych danych uczących"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"fatal: destination path 'mieszkania5' already exists and is not an empty directory.\n"
]
}
],
"source": [
"!git clone git://gonito.net/mieszkania5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Import danych treningowych, walidacyjnych i testowych"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dane treningowe"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"df_train = pd.read_csv(r'mieszkania5\\train\\train.tsv', sep='\\t', header=None)\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>...</th>\n",
" <th>16</th>\n",
" <th>17</th>\n",
" <th>18</th>\n",
" <th>19</th>\n",
" <th>20</th>\n",
" <th>21</th>\n",
" <th>22</th>\n",
" <th>23</th>\n",
" <th>24</th>\n",
" <th>25</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>309000.0</td>\n",
" <td>do zamieszkania</td>\n",
" <td>390 zł</td>\n",
" <td>spółdzielcze własnościowe</td>\n",
" <td>7113</td>\n",
" <td>https://www.otodom.pl/oferta/niezalezny-uklad-...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>43.44</td>\n",
" <td>wtórny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>gazowe</td>\n",
" <td>plastikowe</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>Polecamy na sprzedaż dwupokojowe mieszkanie p...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, meble, piwnica, g...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>314900.0</td>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>7392</td>\n",
" <td>https://www.otodom.pl/oferta/urokliwe-mieszkan...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>42.60</td>\n",
" <td>pierwotny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>gazowe</td>\n",
" <td>plastikowe</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>Kameralne 2 pokojowe mieszkanie z aneksem kuc...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, drzwi / ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>249000.0</td>\n",
" <td>do remontu</td>\n",
" <td>300 zł</td>\n",
" <td>pełna własność</td>\n",
" <td>5621</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-do-rem...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>44.30</td>\n",
" <td>wtórny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>plastikowe</td>\n",
" <td>1960.0</td>\n",
" <td>NaN</td>\n",
" <td>2019-06-30</td>\n",
" <td>cegła</td>\n",
" <td>Oferta bezpośrednio od właściciela - bez pośr...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, domofon ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>419000.0</td>\n",
" <td>do zamieszkania</td>\n",
" <td>490 zł</td>\n",
" <td>pełna własność</td>\n",
" <td>4761</td>\n",
" <td>https://www.otodom.pl/oferta/w-szeregowcu-4-po...</td>\n",
" <td>4</td>\n",
" <td>NaN</td>\n",
" <td>88</td>\n",
" <td>wtórny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>gazowe</td>\n",
" <td>plastikowe</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>Drodzy Państwo Zapraszam do zapoznania się z ...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, zmywarka, lodówka...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>499000.0</td>\n",
" <td>NaN</td>\n",
" <td>850 zł</td>\n",
" <td>NaN</td>\n",
" <td>6481</td>\n",
" <td>https://www.otodom.pl/oferta/komfortowe-przest...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>77</td>\n",
" <td>wtórny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>plastikowe</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Biuro Immohouse ma przyjemność proponować do ...</td>\n",
" <td>NaN</td>\n",
" <td>balkon, piwnica, winda</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2542</th>\n",
" <td>507600.0</td>\n",
" <td>do wykończenia</td>\n",
" <td>1 zł</td>\n",
" <td>pełna własność</td>\n",
" <td>5400</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-do-spr...</td>\n",
" <td>4</td>\n",
" <td>NaN</td>\n",
" <td>94</td>\n",
" <td>wtórny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>gazowe</td>\n",
" <td>drewniane</td>\n",
" <td>1914.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>Do sprzedaży mieszkanie na drugim piętrze w s...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2543</th>\n",
" <td>342400.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>spółdzielcze własnościowe</td>\n",
" <td>6400</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-53-50-...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>53.50</td>\n",
" <td>wtórny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>drewniane</td>\n",
" <td>1999.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>| Świetnie zlokalizowane, przestronne, czyste...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, monitori...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2544</th>\n",
" <td>335000.0</td>\n",
" <td>NaN</td>\n",
" <td>280 zł</td>\n",
" <td>pełna własność</td>\n",
" <td>6063</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-55-25-...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>55.25</td>\n",
" <td>wtórny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>plastikowe</td>\n",
" <td>1910.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>MIESZKANIE ŁAZARZ Przedmiotem sprzedaży jest ...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, monitori...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2545</th>\n",
" <td>260000.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>4194</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-udzial...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>62</td>\n",
" <td>wtórny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>piece kaflowe</td>\n",
" <td>NaN</td>\n",
" <td>1930.0</td>\n",
" <td>NaN</td>\n",
" <td>2011-07-05</td>\n",
" <td>cegła</td>\n",
" <td>Polecam do sprzedaży mieszkanie w udziale kam...</td>\n",
" <td>NaN</td>\n",
" <td>piwnica, oddzielna kuchnia, pom. użytkowe</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2546</th>\n",
" <td>1990000.0</td>\n",
" <td>do zamieszkania</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>5077</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkania-w-kami...</td>\n",
" <td>więcej niż 10</td>\n",
" <td>NaN</td>\n",
" <td>392</td>\n",
" <td>wtórny</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>gazowe</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>Sprzedam 7 mieszkań w centrum Poznania przy u...</td>\n",
" <td>NaN</td>\n",
" <td>lodówka, meble, piekarnik, kuchenka, pralka</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2547 rows × 26 columns</p>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 4 \\\n",
"0 309000.0 do zamieszkania 390 zł spółdzielcze własnościowe 7113 \n",
"1 314900.0 do wykończenia NaN pełna własność 7392 \n",
"2 249000.0 do remontu 300 zł pełna własność 5621 \n",
"3 419000.0 do zamieszkania 490 zł pełna własność 4761 \n",
"4 499000.0 NaN 850 zł NaN 6481 \n",
"... ... ... ... ... ... \n",
"2542 507600.0 do wykończenia 1 zł pełna własność 5400 \n",
"2543 342400.0 NaN NaN spółdzielcze własnościowe 6400 \n",
"2544 335000.0 NaN 280 zł pełna własność 6063 \n",
"2545 260000.0 NaN NaN NaN 4194 \n",
"2546 1990000.0 do zamieszkania NaN NaN 5077 \n",
"\n",
" 5 6 7 \\\n",
"0 https://www.otodom.pl/oferta/niezalezny-uklad-... 2 NaN \n",
"1 https://www.otodom.pl/oferta/urokliwe-mieszkan... 2 NaN \n",
"2 https://www.otodom.pl/oferta/mieszkanie-do-rem... 2 NaN \n",
"3 https://www.otodom.pl/oferta/w-szeregowcu-4-po... 4 NaN \n",
"4 https://www.otodom.pl/oferta/komfortowe-przest... 3 NaN \n",
"... ... ... .. \n",
"2542 https://www.otodom.pl/oferta/mieszkanie-do-spr... 4 NaN \n",
"2543 https://www.otodom.pl/oferta/mieszkanie-53-50-... 2 NaN \n",
"2544 https://www.otodom.pl/oferta/mieszkanie-55-25-... 3 NaN \n",
"2545 https://www.otodom.pl/oferta/mieszkanie-udzial... 3 NaN \n",
"2546 https://www.otodom.pl/oferta/mieszkania-w-kami... więcej niż 10 NaN \n",
"\n",
" 8 9 ... 16 17 18 19 20 \\\n",
"0 43.44 wtórny ... NaN gazowe plastikowe NaN NaN \n",
"1 42.60 pierwotny ... NaN gazowe plastikowe NaN NaN \n",
"2 44.30 wtórny ... NaN miejskie plastikowe 1960.0 NaN \n",
"3 88 wtórny ... NaN gazowe plastikowe NaN NaN \n",
"4 77 wtórny ... NaN NaN plastikowe NaN NaN \n",
"... ... ... ... .. ... ... ... .. \n",
"2542 94 wtórny ... NaN gazowe drewniane 1914.0 NaN \n",
"2543 53.50 wtórny ... NaN miejskie drewniane 1999.0 NaN \n",
"2544 55.25 wtórny ... NaN NaN plastikowe 1910.0 NaN \n",
"2545 62 wtórny ... NaN piece kaflowe NaN 1930.0 NaN \n",
"2546 392 wtórny ... NaN gazowe NaN NaN NaN \n",
"\n",
" 21 22 23 \\\n",
"0 NaN cegła Polecamy na sprzedaż dwupokojowe mieszkanie p... \n",
"1 NaN cegła Kameralne 2 pokojowe mieszkanie z aneksem kuc... \n",
"2 2019-06-30 cegła Oferta bezpośrednio od właściciela - bez pośr... \n",
"3 NaN cegła Drodzy Państwo Zapraszam do zapoznania się z ... \n",
"4 NaN NaN Biuro Immohouse ma przyjemność proponować do ... \n",
"... ... ... ... \n",
"2542 NaN cegła Do sprzedaży mieszkanie na drugim piętrze w s... \n",
"2543 NaN cegła | Świetnie zlokalizowane, przestronne, czyste... \n",
"2544 NaN cegła MIESZKANIE ŁAZARZ Przedmiotem sprzedaży jest ... \n",
"2545 2011-07-05 cegła Polecam do sprzedaży mieszkanie w udziale kam... \n",
"2546 NaN cegła Sprzedam 7 mieszkań w centrum Poznania przy u... \n",
"\n",
" 24 25 \n",
"0 NaN telewizja kablowa, internet, meble, piwnica, g... \n",
"1 NaN telewizja kablowa, internet, telefon, drzwi / ... \n",
"2 NaN telewizja kablowa, internet, telefon, domofon ... \n",
"3 NaN telewizja kablowa, internet, zmywarka, lodówka... \n",
"4 NaN balkon, piwnica, winda \n",
"... .. ... \n",
"2542 NaN NaN \n",
"2543 NaN telewizja kablowa, internet, telefon, monitori... \n",
"2544 NaN telewizja kablowa, internet, telefon, monitori... \n",
"2545 NaN piwnica, oddzielna kuchnia, pom. użytkowe \n",
"2546 NaN lodówka, meble, piekarnik, kuchenka, pralka \n",
"\n",
"[2547 rows x 26 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dane walidacyjne"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"df_valid = pd.read_csv(r'mieszkania5\\dev-0\\in.tsv', sep='\\t', header=None)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>...</th>\n",
" <th>15</th>\n",
" <th>16</th>\n",
" <th>17</th>\n",
" <th>18</th>\n",
" <th>19</th>\n",
" <th>20</th>\n",
" <th>21</th>\n",
" <th>22</th>\n",
" <th>23</th>\n",
" <th>24</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>do zamieszkania</td>\n",
" <td>250 zł</td>\n",
" <td>pełna własność</td>\n",
" <td>6311</td>\n",
" <td>https://www.otodom.pl/oferta/idealne-mieszkani...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>59.10</td>\n",
" <td>wtórny</td>\n",
" <td>4.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>plastikowe</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>wielka płyta</td>\n",
" <td>Zamieszkaj od zaraz idealna lokalizacja OFE...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, domofon ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>do zamieszkania</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>7868</td>\n",
" <td>https://www.otodom.pl/oferta/2-pokoje-38m2-po-...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>38.00</td>\n",
" <td>wtórny</td>\n",
" <td>12.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>inne</td>\n",
" <td>plastikowe</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Na sprzedaż mieszkanie dwupokojowe na osiedlu...</td>\n",
" <td>NaN</td>\n",
" <td>balkon</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>do zamieszkania</td>\n",
" <td>650 zł</td>\n",
" <td>pełna własność</td>\n",
" <td>5717</td>\n",
" <td>https://www.otodom.pl/oferta/3-pokoje-na-jezyc...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>63.84</td>\n",
" <td>wtórny</td>\n",
" <td>4.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>plastikowe</td>\n",
" <td>1958.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>!! Oferta dostępna tylko u nas !! Polecam ofe...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, piwnica,...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>do zamieszkania</td>\n",
" <td>359 zł</td>\n",
" <td>spółdzielcze własnościowe</td>\n",
" <td>7380</td>\n",
" <td>https://www.otodom.pl/oferta/uniwersytet-przyr...</td>\n",
" <td>4</td>\n",
" <td>NaN</td>\n",
" <td>50.00</td>\n",
" <td>wtórny</td>\n",
" <td>10.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>plastikowe</td>\n",
" <td>1975.0</td>\n",
" <td>NaN</td>\n",
" <td>2019-06-30</td>\n",
" <td>wielka płyta</td>\n",
" <td>Oferta  bezpośrednio od właściciela  - bez po...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, drzwi / ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>7373</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-blisko...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>65.62</td>\n",
" <td>pierwotny</td>\n",
" <td>3.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2020.0</td>\n",
" <td>NaN</td>\n",
" <td>2020-01-01</td>\n",
" <td>NaN</td>\n",
" <td>MIESZKANIE 3-POKOJOWE O POW.65,62M2 Mieszkani...</td>\n",
" <td>NaN</td>\n",
" <td>garaż/miejsce parkingowe, taras, pom. użytkowe</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>457</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>9007</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-zajezd...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>72.78</td>\n",
" <td>pierwotny</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>plastikowe</td>\n",
" <td>2019.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>Zapraszam do zapoznania się z nową atrakcyjną...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, monitoring / ochr...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>458</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>9202</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-zajezd...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>51.23</td>\n",
" <td>pierwotny</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Zapraszam do zapoznania się z nową atrakcyjną...</td>\n",
" <td>NaN</td>\n",
" <td>garaż/miejsce parkingowe, winda</td>\n",
" </tr>\n",
" <tr>\n",
" <th>459</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>5723</td>\n",
" <td>https://www.otodom.pl/oferta/nowe-mieszkanie-o...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>54.16</td>\n",
" <td>pierwotny</td>\n",
" <td>3.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>kotłownia</td>\n",
" <td>plastikowe</td>\n",
" <td>2019.0</td>\n",
" <td>NaN</td>\n",
" <td>2019-12-31</td>\n",
" <td>silikat</td>\n",
" <td>Mieszkanie składa się z 3 pokoi, aneksu kuche...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, domofon ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>460</th>\n",
" <td>do zamieszkania</td>\n",
" <td>1 102.05 zł</td>\n",
" <td>pełna własność</td>\n",
" <td>7758</td>\n",
" <td>https://www.otodom.pl/oferta/apartament-w-atan...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>90.10</td>\n",
" <td>wtórny</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>kotłownia</td>\n",
" <td>plastikowe</td>\n",
" <td>2001.0</td>\n",
" <td>NaN</td>\n",
" <td>2018-04-13</td>\n",
" <td>cegła</td>\n",
" <td>Proponuję bardzo atrakcyjny, przestronny, w p...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, drzwi / okna antywłamaniowe...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>461</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>11822</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-71-90-...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>71.90</td>\n",
" <td>wtórny</td>\n",
" <td>3.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>drewniane</td>\n",
" <td>2016.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>Link do oferty: -wielkopolskie-poznan-grunwal...</td>\n",
" <td>NaN</td>\n",
" <td>balkon, garaż/miejsce parkingowe</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>462 rows × 25 columns</p>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 \\\n",
"0 do zamieszkania 250 zł pełna własność 6311 \n",
"1 do zamieszkania NaN pełna własność 7868 \n",
"2 do zamieszkania 650 zł pełna własność 5717 \n",
"3 do zamieszkania 359 zł spółdzielcze własnościowe 7380 \n",
"4 NaN NaN NaN 7373 \n",
".. ... ... ... ... \n",
"457 do wykończenia NaN pełna własność 9007 \n",
"458 do wykończenia NaN pełna własność 9202 \n",
"459 do wykończenia NaN pełna własność 5723 \n",
"460 do zamieszkania 1 102.05 zł pełna własność 7758 \n",
"461 NaN NaN NaN 11822 \n",
"\n",
" 4 5 6 7 \\\n",
"0 https://www.otodom.pl/oferta/idealne-mieszkani... 3 NaN 59.10 \n",
"1 https://www.otodom.pl/oferta/2-pokoje-38m2-po-... 2 NaN 38.00 \n",
"2 https://www.otodom.pl/oferta/3-pokoje-na-jezyc... 3 NaN 63.84 \n",
"3 https://www.otodom.pl/oferta/uniwersytet-przyr... 4 NaN 50.00 \n",
"4 https://www.otodom.pl/oferta/mieszkanie-blisko... 3 NaN 65.62 \n",
".. ... .. .. ... \n",
"457 https://www.otodom.pl/oferta/mieszkanie-zajezd... 3 NaN 72.78 \n",
"458 https://www.otodom.pl/oferta/mieszkanie-zajezd... 2 NaN 51.23 \n",
"459 https://www.otodom.pl/oferta/nowe-mieszkanie-o... 3 NaN 54.16 \n",
"460 https://www.otodom.pl/oferta/apartament-w-atan... 3 NaN 90.10 \n",
"461 https://www.otodom.pl/oferta/mieszkanie-71-90-... 2 NaN 71.90 \n",
"\n",
" 8 9 ... 15 16 17 18 19 20 \\\n",
"0 wtórny 4.0 ... NaN miejskie plastikowe NaN NaN NaN \n",
"1 wtórny 12.0 ... NaN inne plastikowe NaN NaN NaN \n",
"2 wtórny 4.0 ... NaN miejskie plastikowe 1958.0 NaN NaN \n",
"3 wtórny 10.0 ... NaN miejskie plastikowe 1975.0 NaN 2019-06-30 \n",
"4 pierwotny 3.0 ... NaN NaN NaN 2020.0 NaN 2020-01-01 \n",
".. ... ... ... .. ... ... ... .. ... \n",
"457 pierwotny 5.0 ... NaN miejskie plastikowe 2019.0 NaN NaN \n",
"458 pierwotny 5.0 ... NaN NaN NaN NaN NaN NaN \n",
"459 pierwotny 3.0 ... NaN kotłownia plastikowe 2019.0 NaN 2019-12-31 \n",
"460 wtórny 5.0 ... NaN kotłownia plastikowe 2001.0 NaN 2018-04-13 \n",
"461 wtórny 3.0 ... NaN NaN drewniane 2016.0 NaN NaN \n",
"\n",
" 21 22 23 \\\n",
"0 wielka płyta Zamieszkaj od zaraz idealna lokalizacja OFE... NaN \n",
"1 NaN Na sprzedaż mieszkanie dwupokojowe na osiedlu... NaN \n",
"2 cegła !! Oferta dostępna tylko u nas !! Polecam ofe... NaN \n",
"3 wielka płyta Oferta  bezpośrednio od właściciela  - bez po... NaN \n",
"4 NaN MIESZKANIE 3-POKOJOWE O POW.65,62M2 Mieszkani... NaN \n",
".. ... ... .. \n",
"457 cegła Zapraszam do zapoznania się z nową atrakcyjną... NaN \n",
"458 NaN Zapraszam do zapoznania się z nową atrakcyjną... NaN \n",
"459 silikat Mieszkanie składa się z 3 pokoi, aneksu kuche... NaN \n",
"460 cegła Proponuję bardzo atrakcyjny, przestronny, w p... NaN \n",
"461 cegła Link do oferty: -wielkopolskie-poznan-grunwal... NaN \n",
"\n",
" 24 \n",
"0 telewizja kablowa, internet, telefon, domofon ... \n",
"1 balkon \n",
"2 telewizja kablowa, internet, telefon, piwnica,... \n",
"3 telewizja kablowa, internet, telefon, drzwi / ... \n",
"4 garaż/miejsce parkingowe, taras, pom. użytkowe \n",
".. ... \n",
"457 telewizja kablowa, internet, monitoring / ochr... \n",
"458 garaż/miejsce parkingowe, winda \n",
"459 telewizja kablowa, internet, telefon, domofon ... \n",
"460 telewizja kablowa, drzwi / okna antywłamaniowe... \n",
"461 balkon, garaż/miejsce parkingowe \n",
"\n",
"[462 rows x 25 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_valid"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"df_valid_cena = pd.read_csv(r'mieszkania5\\dev-0\\expected.tsv', sep='\\t', header=None)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>373000.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>299000.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>365000.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>369000.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>483791.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>457</th>\n",
" <td>655544.02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>458</th>\n",
" <td>471397.97</td>\n",
" </tr>\n",
" <tr>\n",
" <th>459</th>\n",
" <td>309958.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>460</th>\n",
" <td>699000.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>461</th>\n",
" <td>850000.00</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>462 rows × 1 columns</p>\n",
"</div>"
],
"text/plain": [
" 0\n",
"0 373000.00\n",
"1 299000.00\n",
"2 365000.00\n",
"3 369000.00\n",
"4 483791.00\n",
".. ...\n",
"457 655544.02\n",
"458 471397.97\n",
"459 309958.00\n",
"460 699000.00\n",
"461 850000.00\n",
"\n",
"[462 rows x 1 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_valid_cena"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Dane testowe"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"df_test = pd.read_csv(r'mieszkania5\\test-A\\in.tsv', sep='\\t', header=None)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>...</th>\n",
" <th>15</th>\n",
" <th>16</th>\n",
" <th>17</th>\n",
" <th>18</th>\n",
" <th>19</th>\n",
" <th>20</th>\n",
" <th>21</th>\n",
" <th>22</th>\n",
" <th>23</th>\n",
" <th>24</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>6938</td>\n",
" <td>https://www.otodom.pl/oferta/nowe-mieszkanie-z...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>61.99</td>\n",
" <td>pierwotny</td>\n",
" <td>7.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>plastikowe</td>\n",
" <td>2020.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Prezentujemy naszą najnowszą inwestycje zloka...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, drzwi / ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>do zamieszkania</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>6078</td>\n",
" <td>https://www.otodom.pl/oferta/3-pok-parter-nisk...</td>\n",
" <td>4</td>\n",
" <td>NaN</td>\n",
" <td>64.00</td>\n",
" <td>wtórny</td>\n",
" <td>4.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>NaN</td>\n",
" <td>1982.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>wielka płyta</td>\n",
" <td>Polecam na sprzedaż duże atrakcyjnie zlokaliz...</td>\n",
" <td>NaN</td>\n",
" <td>domofon / wideofon, balkon</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>6150</td>\n",
" <td>https://www.otodom.pl/oferta/hot-oferta-od-dew...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>51.15</td>\n",
" <td>pierwotny</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>plastikowe</td>\n",
" <td>2020.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>cegła</td>\n",
" <td>&amp;gt...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, domofon ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>do zamieszkania</td>\n",
" <td>350 zł</td>\n",
" <td>pełna własność</td>\n",
" <td>9373</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-z-ogro...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>45.77</td>\n",
" <td>wtórny</td>\n",
" <td>7.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>!! OFERTA BEZPOŚREDNIA !! Na sprzedaż mieszkan...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, drzwi / ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>7200</td>\n",
" <td>https://www.otodom.pl/oferta/osiedle-nowych-ko...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>44.36</td>\n",
" <td>pierwotny</td>\n",
" <td>13.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>plastikowe</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2020-08-01</td>\n",
" <td>NaN</td>\n",
" <td>Inwestycja NOWYCH KOSMONAUTÓW powstaje u zbie...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, drzwi / ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>413</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>7150</td>\n",
" <td>https://www.otodom.pl/oferta/zielony-marcelin-...</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>34.97</td>\n",
" <td>pierwotny</td>\n",
" <td>8.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>plastikowe</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Zielony Marcelin I etap mieszkanie nr 407, 1 ...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, drzwi / ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>414</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>6499</td>\n",
" <td>https://www.otodom.pl/oferta/nowe-mieszkanie-p...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>49.06</td>\n",
" <td>pierwotny</td>\n",
" <td>3.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>kotłownia</td>\n",
" <td>plastikowe</td>\n",
" <td>2018.0</td>\n",
" <td>NaN</td>\n",
" <td>2018-12-31</td>\n",
" <td>silikat</td>\n",
" <td>Mieszkanie składa się z 3 pokoi z aneksem kuc...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, domofon ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>415</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>9451</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-76-71-...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>76.71</td>\n",
" <td>pierwotny</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>plastikowe</td>\n",
" <td>2019.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Zapraszam do zapoznania się z nową atrakcyjną...</td>\n",
" <td>NaN</td>\n",
" <td>monitoring / ochrona, garaż/miejsce parkingowe...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>416</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>9322</td>\n",
" <td>https://www.otodom.pl/oferta/mieszkanie-zajezd...</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>72.63</td>\n",
" <td>pierwotny</td>\n",
" <td>5.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Zapraszam do zapoznania się z nową atrakcyjną...</td>\n",
" <td>NaN</td>\n",
" <td>garaż/miejsce parkingowe, winda</td>\n",
" </tr>\n",
" <tr>\n",
" <th>417</th>\n",
" <td>do wykończenia</td>\n",
" <td>NaN</td>\n",
" <td>pełna własność</td>\n",
" <td>6500</td>\n",
" <td>https://www.otodom.pl/oferta/nowe-mieszkanie-w...</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>65.84</td>\n",
" <td>wtórny</td>\n",
" <td>10.0</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>miejskie</td>\n",
" <td>plastikowe</td>\n",
" <td>2012.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>pustak</td>\n",
" <td>Super mieszkanie 2-pokojowe 65,84m2. wykończo...</td>\n",
" <td>NaN</td>\n",
" <td>telewizja kablowa, internet, telefon, monitori...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>418 rows × 25 columns</p>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 \\\n",
"0 do wykończenia NaN pełna własność 6938 \n",
"1 do zamieszkania NaN pełna własność 6078 \n",
"2 do wykończenia NaN pełna własność 6150 \n",
"3 do zamieszkania 350 zł pełna własność 9373 \n",
"4 NaN NaN NaN 7200 \n",
".. ... ... ... ... \n",
"413 do wykończenia NaN NaN 7150 \n",
"414 do wykończenia NaN pełna własność 6499 \n",
"415 do wykończenia NaN pełna własność 9451 \n",
"416 do wykończenia NaN pełna własność 9322 \n",
"417 do wykończenia NaN pełna własność 6500 \n",
"\n",
" 4 5 6 7 \\\n",
"0 https://www.otodom.pl/oferta/nowe-mieszkanie-z... 3 NaN 61.99 \n",
"1 https://www.otodom.pl/oferta/3-pok-parter-nisk... 4 NaN 64.00 \n",
"2 https://www.otodom.pl/oferta/hot-oferta-od-dew... 3 NaN 51.15 \n",
"3 https://www.otodom.pl/oferta/mieszkanie-z-ogro... 2 NaN 45.77 \n",
"4 https://www.otodom.pl/oferta/osiedle-nowych-ko... 2 NaN 44.36 \n",
".. ... .. .. ... \n",
"413 https://www.otodom.pl/oferta/zielony-marcelin-... 1 NaN 34.97 \n",
"414 https://www.otodom.pl/oferta/nowe-mieszkanie-p... 3 NaN 49.06 \n",
"415 https://www.otodom.pl/oferta/mieszkanie-76-71-... 3 NaN 76.71 \n",
"416 https://www.otodom.pl/oferta/mieszkanie-zajezd... 3 NaN 72.63 \n",
"417 https://www.otodom.pl/oferta/nowe-mieszkanie-w... 2 NaN 65.84 \n",
"\n",
" 8 9 ... 15 16 17 18 19 20 \\\n",
"0 pierwotny 7.0 ... NaN NaN plastikowe 2020.0 NaN NaN \n",
"1 wtórny 4.0 ... NaN miejskie NaN 1982.0 NaN NaN \n",
"2 pierwotny 5.0 ... NaN miejskie plastikowe 2020.0 NaN NaN \n",
"3 wtórny 7.0 ... NaN NaN NaN NaN NaN NaN \n",
"4 pierwotny 13.0 ... NaN NaN plastikowe NaN NaN 2020-08-01 \n",
".. ... ... ... .. ... ... ... .. ... \n",
"413 pierwotny 8.0 ... NaN miejskie plastikowe NaN NaN NaN \n",
"414 pierwotny 3.0 ... NaN kotłownia plastikowe 2018.0 NaN 2018-12-31 \n",
"415 pierwotny 5.0 ... NaN NaN plastikowe 2019.0 NaN NaN \n",
"416 pierwotny 5.0 ... NaN NaN NaN NaN NaN NaN \n",
"417 wtórny 10.0 ... NaN miejskie plastikowe 2012.0 NaN NaN \n",
"\n",
" 21 22 23 \\\n",
"0 NaN Prezentujemy naszą najnowszą inwestycje zloka... NaN \n",
"1 wielka płyta Polecam na sprzedaż duże atrakcyjnie zlokaliz... NaN \n",
"2 cegła                                           &gt... NaN \n",
"3 NaN !! OFERTA BEZPOŚREDNIA !! Na sprzedaż mieszkan... NaN \n",
"4 NaN Inwestycja NOWYCH KOSMONAUTÓW powstaje u zbie... NaN \n",
".. ... ... .. \n",
"413 NaN Zielony Marcelin I etap mieszkanie nr 407, 1 ... NaN \n",
"414 silikat Mieszkanie składa się z 3 pokoi z aneksem kuc... NaN \n",
"415 NaN Zapraszam do zapoznania się z nową atrakcyjną... NaN \n",
"416 NaN Zapraszam do zapoznania się z nową atrakcyjną... NaN \n",
"417 pustak Super mieszkanie 2-pokojowe 65,84m2. wykończo... NaN \n",
"\n",
" 24 \n",
"0 telewizja kablowa, internet, telefon, drzwi / ... \n",
"1 domofon / wideofon, balkon \n",
"2 telewizja kablowa, internet, telefon, domofon ... \n",
"3 telewizja kablowa, internet, telefon, drzwi / ... \n",
"4 telewizja kablowa, internet, telefon, drzwi / ... \n",
".. ... \n",
"413 telewizja kablowa, internet, telefon, drzwi / ... \n",
"414 telewizja kablowa, internet, telefon, domofon ... \n",
"415 monitoring / ochrona, garaż/miejsce parkingowe... \n",
"416 garaż/miejsce parkingowe, winda \n",
"417 telewizja kablowa, internet, telefon, monitori... \n",
"\n",
"[418 rows x 25 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Wybranie interesujących nas kolumn (cena, ilość pokoi, metraż, rok budowy)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"df_train = df_train[[0, 6, 8, 19]]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"df_valid[0] = df_valid_cena"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"df_valid = df_valid[[0, 5, 7, 18]]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"df_test = df_test[[5, 7, 18]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Zamiana nazw kolumn"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"df_train = df_train.rename(columns = {0:\"cena\", 6:\"pokoje\", 8:\"metraz\", 19:\"rok\"})"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"df_valid = df_valid.rename(columns = {0:\"cena\", 5:\"pokoje\", 7:\"metraz\", 18:\"rok\"})"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"df_test = df_test.rename(columns = {5:\"pokoje\", 7:\"metraz\", 18:\"rok\"})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Czyszczenie danych"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Czyszczenie danych treningowych"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"df_train = df_train.dropna()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"df_train = df_train.replace( \"więcej niż 10\", '11')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"df_train = df_train[(df_train['rok'] >= 1800) & (df_train['rok'] <= 2023)]\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"df_train = df_train[df_train[\"metraz\"] != '6 909']\n"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"df_train[\"pokoje\"] = df_train[\"pokoje\"].astype(float)\n",
"df_train[\"metraz\"] = df_train[\"metraz\"].astype(float)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cena</th>\n",
" <th>pokoje</th>\n",
" <th>metraz</th>\n",
" <th>rok</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>1.763000e+03</td>\n",
" <td>1763.000000</td>\n",
" <td>1763.000000</td>\n",
" <td>1763.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>4.262096e+05</td>\n",
" <td>2.609756</td>\n",
" <td>60.068327</td>\n",
" <td>1992.024957</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>2.478208e+05</td>\n",
" <td>1.038289</td>\n",
" <td>29.652713</td>\n",
" <td>37.968540</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>8.500000e+04</td>\n",
" <td>1.000000</td>\n",
" <td>19.000000</td>\n",
" <td>1840.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>3.100000e+05</td>\n",
" <td>2.000000</td>\n",
" <td>43.000000</td>\n",
" <td>1976.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>3.671000e+05</td>\n",
" <td>2.000000</td>\n",
" <td>52.300000</td>\n",
" <td>2010.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>4.700000e+05</td>\n",
" <td>3.000000</td>\n",
" <td>68.000000</td>\n",
" <td>2019.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>6.000000e+06</td>\n",
" <td>11.000000</td>\n",
" <td>404.000000</td>\n",
" <td>2022.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cena pokoje metraz rok\n",
"count 1.763000e+03 1763.000000 1763.000000 1763.000000\n",
"mean 4.262096e+05 2.609756 60.068327 1992.024957\n",
"std 2.478208e+05 1.038289 29.652713 37.968540\n",
"min 8.500000e+04 1.000000 19.000000 1840.000000\n",
"25% 3.100000e+05 2.000000 43.000000 1976.000000\n",
"50% 3.671000e+05 2.000000 52.300000 2010.000000\n",
"75% 4.700000e+05 3.000000 68.000000 2019.000000\n",
"max 6.000000e+06 11.000000 404.000000 2022.000000"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train.describe()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cena</th>\n",
" <th>pokoje</th>\n",
" <th>metraz</th>\n",
" <th>rok</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>249000.0</td>\n",
" <td>2.0</td>\n",
" <td>44.30</td>\n",
" <td>1960.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>449000.0</td>\n",
" <td>4.0</td>\n",
" <td>92.00</td>\n",
" <td>1930.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>389000.0</td>\n",
" <td>3.0</td>\n",
" <td>63.60</td>\n",
" <td>1985.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>260000.0</td>\n",
" <td>3.0</td>\n",
" <td>44.20</td>\n",
" <td>1970.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>330682.0</td>\n",
" <td>3.0</td>\n",
" <td>48.99</td>\n",
" <td>2019.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2541</th>\n",
" <td>383680.0</td>\n",
" <td>3.0</td>\n",
" <td>70.40</td>\n",
" <td>2016.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2542</th>\n",
" <td>507600.0</td>\n",
" <td>4.0</td>\n",
" <td>94.00</td>\n",
" <td>1914.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2543</th>\n",
" <td>342400.0</td>\n",
" <td>2.0</td>\n",
" <td>53.50</td>\n",
" <td>1999.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2544</th>\n",
" <td>335000.0</td>\n",
" <td>3.0</td>\n",
" <td>55.25</td>\n",
" <td>1910.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2545</th>\n",
" <td>260000.0</td>\n",
" <td>3.0</td>\n",
" <td>62.00</td>\n",
" <td>1930.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1763 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" cena pokoje metraz rok\n",
"2 249000.0 2.0 44.30 1960.0\n",
"6 449000.0 4.0 92.00 1930.0\n",
"7 389000.0 3.0 63.60 1985.0\n",
"9 260000.0 3.0 44.20 1970.0\n",
"10 330682.0 3.0 48.99 2019.0\n",
"... ... ... ... ...\n",
"2541 383680.0 3.0 70.40 2016.0\n",
"2542 507600.0 4.0 94.00 1914.0\n",
"2543 342400.0 2.0 53.50 1999.0\n",
"2544 335000.0 3.0 55.25 1910.0\n",
"2545 260000.0 3.0 62.00 1930.0\n",
"\n",
"[1763 rows x 4 columns]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Czyszczenie danych walidacyjnych"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cena</th>\n",
" <th>pokoje</th>\n",
" <th>metraz</th>\n",
" <th>rok</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>4.620000e+02</td>\n",
" <td>462.000000</td>\n",
" <td>462.000000</td>\n",
" <td>322.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>4.108530e+05</td>\n",
" <td>2.528139</td>\n",
" <td>57.329113</td>\n",
" <td>1988.605590</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>2.049347e+05</td>\n",
" <td>0.953512</td>\n",
" <td>25.300686</td>\n",
" <td>113.363432</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.597610e+05</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>70.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>2.984000e+05</td>\n",
" <td>2.000000</td>\n",
" <td>42.000000</td>\n",
" <td>1980.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>3.520765e+05</td>\n",
" <td>2.000000</td>\n",
" <td>50.510000</td>\n",
" <td>2013.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>4.687800e+05</td>\n",
" <td>3.000000</td>\n",
" <td>66.315000</td>\n",
" <td>2019.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>2.318580e+06</td>\n",
" <td>6.000000</td>\n",
" <td>234.200000</td>\n",
" <td>2021.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cena pokoje metraz rok\n",
"count 4.620000e+02 462.000000 462.000000 322.000000\n",
"mean 4.108530e+05 2.528139 57.329113 1988.605590\n",
"std 2.049347e+05 0.953512 25.300686 113.363432\n",
"min 1.597610e+05 1.000000 1.000000 70.000000\n",
"25% 2.984000e+05 2.000000 42.000000 1980.000000\n",
"50% 3.520765e+05 2.000000 50.510000 2013.000000\n",
"75% 4.687800e+05 3.000000 66.315000 2019.000000\n",
"max 2.318580e+06 6.000000 234.200000 2021.000000"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_valid.describe()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"df_valid = df_valid.dropna()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"df_valid = df_valid[df_valid['metraz'] > 10]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"df_valid = df_valid[(df_valid['rok'] >= 1800) & (df_valid['rok'] <= 2023)]\n"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"df_valid = df_valid.replace( \"więcej niż 10\", '11')"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"df_valid[\"pokoje\"] = df_valid[\"pokoje\"].astype(float)\n",
"df_valid[\"metraz\"] = df_valid[\"metraz\"].astype(float)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cena</th>\n",
" <th>pokoje</th>\n",
" <th>metraz</th>\n",
" <th>rok</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>365000.00</td>\n",
" <td>3.0</td>\n",
" <td>63.84</td>\n",
" <td>1958.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>369000.00</td>\n",
" <td>4.0</td>\n",
" <td>50.00</td>\n",
" <td>1975.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>483791.00</td>\n",
" <td>3.0</td>\n",
" <td>65.62</td>\n",
" <td>2020.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>430000.00</td>\n",
" <td>5.0</td>\n",
" <td>96.00</td>\n",
" <td>2019.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>325000.00</td>\n",
" <td>2.0</td>\n",
" <td>49.00</td>\n",
" <td>2001.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>455</th>\n",
" <td>641395.58</td>\n",
" <td>2.0</td>\n",
" <td>72.78</td>\n",
" <td>2019.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>457</th>\n",
" <td>655544.02</td>\n",
" <td>3.0</td>\n",
" <td>72.78</td>\n",
" <td>2019.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>459</th>\n",
" <td>309958.00</td>\n",
" <td>3.0</td>\n",
" <td>54.16</td>\n",
" <td>2019.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>460</th>\n",
" <td>699000.00</td>\n",
" <td>3.0</td>\n",
" <td>90.10</td>\n",
" <td>2001.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>461</th>\n",
" <td>850000.00</td>\n",
" <td>2.0</td>\n",
" <td>71.90</td>\n",
" <td>2016.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>320 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" cena pokoje metraz rok\n",
"2 365000.00 3.0 63.84 1958.0\n",
"3 369000.00 4.0 50.00 1975.0\n",
"4 483791.00 3.0 65.62 2020.0\n",
"5 430000.00 5.0 96.00 2019.0\n",
"9 325000.00 2.0 49.00 2001.0\n",
".. ... ... ... ...\n",
"455 641395.58 2.0 72.78 2019.0\n",
"457 655544.02 3.0 72.78 2019.0\n",
"459 309958.00 3.0 54.16 2019.0\n",
"460 699000.00 3.0 90.10 2001.0\n",
"461 850000.00 2.0 71.90 2016.0\n",
"\n",
"[320 rows x 4 columns]"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_valid"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Czyszczenie danych testowych"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"df_test['rok'].fillna(df_test['rok'].mean(), inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"df_test = df_test.dropna()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"df_test = df_test.replace( \"więcej niż 10\", '11')"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"df_test[\"pokoje\"] = df_test[\"pokoje\"].astype(float)\n",
"df_test[\"metraz\"] = df_test[\"metraz\"].astype(float)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cena</th>\n",
" <th>pokoje</th>\n",
" <th>metraz</th>\n",
" <th>rok</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>1.763000e+03</td>\n",
" <td>1763.000000</td>\n",
" <td>1763.000000</td>\n",
" <td>1763.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>4.262096e+05</td>\n",
" <td>2.609756</td>\n",
" <td>60.068327</td>\n",
" <td>1992.024957</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>2.478208e+05</td>\n",
" <td>1.038289</td>\n",
" <td>29.652713</td>\n",
" <td>37.968540</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>8.500000e+04</td>\n",
" <td>1.000000</td>\n",
" <td>19.000000</td>\n",
" <td>1840.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>3.100000e+05</td>\n",
" <td>2.000000</td>\n",
" <td>43.000000</td>\n",
" <td>1976.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>3.671000e+05</td>\n",
" <td>2.000000</td>\n",
" <td>52.300000</td>\n",
" <td>2010.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>4.700000e+05</td>\n",
" <td>3.000000</td>\n",
" <td>68.000000</td>\n",
" <td>2019.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>6.000000e+06</td>\n",
" <td>11.000000</td>\n",
" <td>404.000000</td>\n",
" <td>2022.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" cena pokoje metraz rok\n",
"count 1.763000e+03 1763.000000 1763.000000 1763.000000\n",
"mean 4.262096e+05 2.609756 60.068327 1992.024957\n",
"std 2.478208e+05 1.038289 29.652713 37.968540\n",
"min 8.500000e+04 1.000000 19.000000 1840.000000\n",
"25% 3.100000e+05 2.000000 43.000000 1976.000000\n",
"50% 3.671000e+05 2.000000 52.300000 2010.000000\n",
"75% 4.700000e+05 3.000000 68.000000 2019.000000\n",
"max 6.000000e+06 11.000000 404.000000 2022.000000"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model regresji liniowej"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.linear_model import LinearRegression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Podział danych"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"X_train = df_train[[\"pokoje\", \"metraz\", \"rok\"]]\n",
"y_train = df_train[[\"cena\"]]"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"X_val = df_valid[[\"pokoje\", \"metraz\", \"rok\"]]\n",
"y_val = df_valid[[\"cena\"]]"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"X_test = df_test[[\"pokoje\", \"metraz\", \"rok\"]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Uczenie modelu"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"model = LinearRegression()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LinearRegression</label><div class=\"sk-toggleable__content\"><pre>LinearRegression()</pre></div></div></div></div></div>"
],
"text/plain": [
"LinearRegression()"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.fit(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Walidacja modelu"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"y_train_pred = model.predict(X_train)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6264197107092035"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r2_score(y_true=y_train, y_pred=y_train_pred)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"22930468691.882328"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean_squared_error(y_true=y_train, y_pred=y_train_pred)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"74283.11238859448"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean_absolute_error(y_true=y_train, y_pred=y_train_pred)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"y_val_pred = model.predict(X_val)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5872189061243203"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r2_score(y_true=y_val, y_pred=y_val_pred)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12603444942.321444"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean_squared_error(y_true=y_val, y_pred=y_val_pred)"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"68895.89161086899"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean_absolute_error(y_true=y_val, y_pred=y_val_pred)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Predykcja cen mieszkań"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"y_test_pred = model.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>cena</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>445999.679659</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>391984.112513</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>361680.683534</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>341889.696262</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>330922.003962</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>413</th>\n",
" <td>299103.486333</td>\n",
" </tr>\n",
" <tr>\n",
" <th>414</th>\n",
" <td>343927.359472</td>\n",
" </tr>\n",
" <tr>\n",
" <th>415</th>\n",
" <td>559751.151754</td>\n",
" </tr>\n",
" <tr>\n",
" <th>416</th>\n",
" <td>509598.699344</td>\n",
" </tr>\n",
" <tr>\n",
" <th>417</th>\n",
" <td>511183.577622</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>418 rows × 1 columns</p>\n",
"</div>"
],
"text/plain": [
" cena\n",
"0 445999.679659\n",
"1 391984.112513\n",
"2 361680.683534\n",
"3 341889.696262\n",
"4 330922.003962\n",
".. ...\n",
"413 299103.486333\n",
"414 343927.359472\n",
"415 559751.151754\n",
"416 509598.699344\n",
"417 511183.577622\n",
"\n",
"[418 rows x 1 columns]"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_test_pred_df = pd.DataFrame(y_test_pred, columns=['cena'])\n",
"y_test_pred_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Wizualizacja regresji liniowej"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cena nieruchomości ze względna na liczbę pokoi dla danych treningowych"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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wDQECwAAYBqCBQAAMA3BAgAAmIZgAQAATEOwAAAApiFYAAAA0xAsAACAaQgWAADANAQLAABgGoIFAAAwDcECAACYhmABAABMQ7AAAACmIVgAAADTECwAAIBpCBYAAMA0BAsAAGAaggUAADANwQIAAJiGYAEAAExDsAAAAKYhWAAAANMQLAAAgGkIFgAAwDQECwAAYBqCBQAAMA3BAgAAmIZgAQAATEOwAAAApiFYAAAA0xAsAACAaQgWAADANAQLAABgGoIFAAAwDcECAACYhmABAABMQ7AAAACmIVgAAADT1ClYPP7443K5XBU+OnXqFKjeAACAw0TU9QFdunTRl19++fMXiKjzlwAAACGqzqkgIiJCiYmJgegFAAA4XJ3nWGzatEmtWrVS+/btNWrUKO3YsaPGeq/XK4/HU+EDAACEpjoFi969e2vGjBmaP3++pk6dqtzcXA0YMECFhYXVPmbSpElyu93lH8nJyWfdNAAAsCeX3+/31/fBR44cUdu2bfX888/r9ttvr7LG6/XK6/WWf+7xeJScnKyCggLFxcXV91sDAAALeTweud3uWl+/z2rmZZMmTdSxY0dt3ry52prIyEhFRkaezbcBAAAOcVb7WBw9elRbtmxRUlKSWf0AAAAHq1OwGD9+vBYvXqxt27Zp6dKluv766xUeHq6bb745UP0BAAAHqdNQyK5du3TzzTfr4MGDatGihS655BItX75cLVq0CFR/AADAQeoULD744INA9QEAAEIAZ4UAAADTECwAAIBpCBYAAMA0BAsAAGAaggUAADANwQIAAJiGYAEAAExDsAAAAKYhWAAAANMQLAAAgGkIFgAAwDQECwAAYBqCBQAAMA3BAgAAmIZgAQAATEOwAAAApiFYAAAA0xAsAACAaQgWAADANAQLAABgGoIFAAAwDcECAACYhmABAABMQ7AAAACmIVgAAADTECwAAIBpCBYAAMA0BAsAAGAaggUAADANwQIAAJiGYAEAAExDsAAAAKYhWAAAANMQLAAAgGkIFgAAwDQECwAAYBqCBQAAMA3BAgAAmIZgAQAATEOwAAAApiFYAAAA0xAsAACAaQgWAADANAQLAABgGoIFAAAwDcECAACY5qyCxeTJk+VyuTR27FiT2gEAAE5W72CxcuVKvfbaa+rWrZuZ/QAAAAerV7A4evSoRo0apWnTpqlp06Zm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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"coef = np.polyfit(X_train['pokoje'], y_train['cena'], 1)\n",
"poly1d_fn = np.poly1d(coef)\n",
"\n",
"plt.plot(X_train['pokoje'], y_train['cena'], 'o', X_train['pokoje'], poly1d_fn(X_train['pokoje']), '--k')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cena nieruchomości ze względna na rok wybudowania dla danych treningowych"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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69jdvHkzhg8fjqioKPTr1w9vvPGGr3fPKTX2+/vvv8ecOXOQlZWFmJgYDBw4EH/961/ttrF582aH73dFRYXsuna5gFFfX48hQ4bglVdecfj7++67D4WFhXj77bexd+9e3HPPPViwYAHWrl1rV27evHkoLy+3/TzzzDO235nNZlx11VVobm7Gt99+i3/9619444038Mgjj/h031zxdr+zsrLs9re8vBxLlixBfHw8ZsyYYbetlStX2pWbNWuWr3fPKVf7LYTArFmzcPjwYXz00UfYvXs3srOzMWXKFNTX19vK3Xvvvfj444+xevVqbNmyBadOncLs2bNtvw+191vOfp86dQqnTp3Cc889h5KSErzxxhsoLCzE3LlzO20v3N5vILyObzn7HYrH95YtWzB//nxs27YNn3/+OVpaWjBt2jTVj92ysjJcddVVmDRpEoqLi3HPPffg97//PT777DO/7q+VGvu9c+dOpKWl4e2338aPP/6IP/3pTygoKMDLL7/c6fX27dtn936npaXJr6zowgCINWvW2D128cUXi8cee8zuseHDh4s//elPtv9fdtll4u6773a63U8//VRoNBpRUVFhe2zZsmUiMTFRmEwmVeruDU/3u6OhQ4eKW2+91e22g0XHuu3bt08AECUlJbbHzGaz6N69u1ixYoUQQoiamhoRGRkpVq9ebSuzd+9eAUAUFRUJIULv/Zaz34785z//ETqdTrS0tDjddjDxdL/D7fj29P0OteO7srJSABBbtmwRQqh37P7xj38UF198sd1r3XDDDeKKK67w9S7J4sl+O3LnnXeKSZMm2f6/adMmAUCcPXvW47p1uRYMdy655BKsXbsWJ0+ehBACmzZtwv79+zFt2jS7cv/+97+RmpqKvLw8FBQUoKGhwfa7oqIiDBo0CD169LA9dsUVV8BoNOLHH3/0274oIXe/rXbu3Ini4mKHV7Tz589HamoqRo8ejX/+85+yl/b1N5PJBACIjo62PabRaBAVFYWvv/4aQNt+trS0YMqUKbYyAwYMQK9evVBUVAQg9N5vOfvtiMFgQGJiIiIi7JcwCqf32yqcjm9P3u9QPL6tt++Sk5MBqHfsFhUV2W3DWsa6jUDzZL+dbce6jfaGDh2KjIwMTJ06Fd98842iuvl9sbNg97e//Q233XYbMjMzERERAY1GgxUrVmDChAm2Mr/+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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"coef = np.polyfit(X_train['rok'], y_train['cena'], 1)\n",
"poly1d_fn = np.poly1d(coef)\n",
"\n",
"plt.plot(X_train['rok'], y_train['cena'], 'o', X_train['rok'], poly1d_fn(X_train['rok']), '--k')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cena nieruchomości ze względna na metraż dla danych treningowych"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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DBZEREQkGQYLIiIikgyDBREREUmGwYKIiIgkw2BBREREkmGwICIiIskwWBAREZFkGCyIiIhIMgwWREREJBkGCyIiIpIMgwURERFJhsGCiIiIJMNgQURERJJhsCAiIiLJMFgQERGRZBgsiIiISDIMFkRERCQZBgsiIiKSDIMFERERSYbBgoiIiCTDYEFERESSYbAgIiIiyTBYEBERkWQYLIiIiEgyDBZEREQkGQYLIiIikgyDBREREUmGwYKIiIgkw2BBREREkmGwICIiIskwWBAREZFkGCyIiIhIMgwWREREJBkGCyIiIpIMgwURERFJhsGCiIiIJMNgQURERJJhsCAiIiLJMFgQERGRZBgsiIiISDIMFkRERCQZBgsiIiKSjFnB4rXXXoNMJtP56dmzp6X6RkRERA7Gw9wn3Hffffjhhx9+ewEPs1+CiIiInJTZqcDDwwOhoaGW6AsRERE5OLPnWFy6dAnh4eHo3LkznnzySVy/fr3R9kqlEqWlpTo/RERE5JzMChaxsbFISUnBjh07sGLFCuTk5GDYsGEoKysz+pzk5GQoFArtT0RERIs7TURERPZJJoQQzX1ycXExIiMj8d5772HmzJkG2yiVSiiVSu2fS0tLERERgZKSEgQEBDT3rYmIiMiKSktLoVAomjx/t2jmZWBgILp3747Lly8bbSOXyyGXy1vyNkREROQgWlTHory8HNnZ2QgLC5OqP0REROTAzAoWf/nLX3DgwAFcvXoVP/30E5KSkuDu7o4pU6ZYqn9ERETkQMy6FfLrr79iypQpKCwsRNu2bfHggw/iyJEjaNu2raX6R0RERA7ErGCxfv16S/WDiIiInAD3CiEiIiLJMFgQERGRZBgsiIiISDIMFkRERCQZBgsiIiKSDIMFERERSYbBgoiIiCTDYEFERESSYbAgIiIiyTBYEBERkWQYLIiIiEgyDBZEREQkGQYLIiIikgyDBREREUmGwYKIiIgkw2BBREREkmGwICIiIskwWBAREZFkGCyIiIhIMgwWREREJBkGCyIiIpIMgwURERFJhsGCiIiIJMNgQURERJJhsCAiIiLJMFgQERGRZBgsiIiISDIMFkRERCQZBgsiIiKSDIMFERERSYbBgoiIiCTDYEFERESSYbAgIiIiyTBYEBERkWQYLIiIiEgyDBZEREQkGQYLIiIikgyDBREREUmG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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"coef = np.polyfit(X_train['metraz'], y_train['cena'], 1)\n",
"poly1d_fn = np.poly1d(coef)\n",
"\n",
"plt.plot(X_train['metraz'], y_train['cena'], 'o', X_train['metraz'], poly1d_fn(X_train['metraz']), '--k')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cena nieruchomości ze względna na liczbę pokoi dla danych testowych"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGsCAYAAAAPJKchAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABCuElEQVR4nO3dfXhT9f038HfSktMCbdLSUPoQLFAQLFAqIE8yUKoMtcivogxU+MHUOWECnW5UB4xNrTJh6IYyGIj+JoIiIApDuSvIo0OKdVoRKKCthZaATdJWSNrk3H/UVkKfTvDknJzk/bquXPfFySfNp7n3M+9+n45OFEURRERERCrRq90AERERhTaGESIiIlIVwwgRERGpimGEiIiIVMUwQkRERKpiGCEiIiJVMYwQERGRqhhGiIiISFUMI0RERKQqhhEiIiJSlabCyJ49e5CVlYXExETodDps2bLF558hiiKef/559OrVC4IgICkpCU8//bT8zRIREZEk4Wo34Iuamhqkp6djxowZyM7OvqqfMXv2bHzwwQd4/vnn0a9fP3z33Xf47rvvZO6UiIiIpNJp9UZ5Op0OmzdvxoQJExqvOZ1OPPnkk3jjjTdgs9nQt29fPPfccxg9ejQA4OjRo+jfvz+++OILXHvtteo0TkRERF40NU3TllmzZuHgwYNYv349/vvf/+Luu+/Gz3/+c5w4cQIA8O6776J79+5477330K1bN6SkpOCBBx7gyAgREZGKgiaMlJSU4JVXXsFbb72FkSNHokePHnjsscdw44034pVXXgEAnDp1Ct988w3eeustvPbaa1i7di0KCgowceJElbsnIiIKXZpaM9Kazz//HG63G7169fK67nQ60alTJwCAx+OB0+nEa6+91li3evVqDBw4EMeOHePUDRERkQqCJoxUV1cjLCwMBQUFCAsL83quY8eOAICEhASEh4d7BZY+ffoAqB9ZYRghIiJSXtCEkYyMDLjdbpw7dw4jR45stmbEiBGoq6vDyZMn0aNHDwDA8ePHAQDXXHONYr0SERHRjzS1m6a6uhrFxcUA6sPH0qVLcdNNNyE2NhZdu3bFfffdh/3792PJkiXIyMiA1WpFfn4++vfvj9tvvx0ejweDBw9Gx44dsWzZMng8HsycORPR0dH44IMPVP7tiIiIQpOmwsju3btx0003Nbk+bdo0rF27FrW1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N25Et27d/Pn2REREpAE+h5Hq6moUFxc3/vv06dMoLCxEbGwsunbtitzcXJSVleG1116DXq9H3759vV7fuXNnRERENLlOREREocnnMHL48GHcdNNNjf/OyckBAEybNg1r167F2bNnUVJSIl+HREREFNR0oiiKajfRFofDAaPRCLvdjujoaLXbISIiIgmkfn/z3jRERESkKoYRIiIiUhXDCBEREamKYYSIiIhUxTBCREREqmIYISIiIlUxjBAREZGqGEaIiIhIVQwjREREpCqGESIiIlIVwwgRERGpimGEiIiIVMUwQkRERKpiGCEiIiJVMYwQERGRqhhGiIiISFUMI0RERKQqhhEiIiJSFcMIERERqYphhIiIiFTFMEJERESqYhghIiIiVTGMEBERkaoYRoiIiEhVDCNERESkKoYRIiIiUhXDCBEREamKYYSIiIhUxTBCREREqmIYISIiIlUxjBAREZGqfA4je/bsQVZWFhITE6HT6bBly5ZW6zdt2oRbbrkFZrMZ0dHRGDZsGN5///2r7ZeIiIiCjM9hpKamBunp6Vi+fLmk+j179uCWW27B9u3bUVBQgJtuuglZWVn49NNPfW6WiIiIgo9OFEXxql+s02Hz5s2YMGGCT69LS0vDpEmTsGDBAkn1DocDRqMRdrsd0dHRV9EpERERKU3q93e4gj0BADweD6qqqhAbG9tijdPphNPpbPy3w+FQojUiIiJSgeILWJ9//nlUV1fjnnvuabEmLy8PRqOx8WGxWBTskIiIiJSkaBhZt24dFi1ahDfffBOdO3dusS43Nxd2u73xUVpaqmCXREREpCTFpmnWr1+PBx54AG+99RYyMzNbrRUEAYIgKNQZERERqUmRkZE33ngD06dPxxtvvIHbb79dibckIiIijfB5ZKS6uhrFxcWN/z59+jQKCwsRGxuLrl27Ijc3F2VlZXjttdcA1E/NTJs2DS+88AKGDBmC8vJyAEBkZCSMRqNMvwYRERFplc8jI4cPH0ZGRgYyMjIAADk5OcjIyGjcpnv27FmUlJQ01q9cuRJ1dXWYOXMmEhISGh+zZ8+W6VcgIiIiLftJ54woheeMEBERaY/U72/em4aIiIhUxTBCREREqmIYISIiIlUxjBAREZGqGEaIiIhIVQwjREREpCqGESIiIlIVwwgRERGpimGEiIiIVMUwQkRERKpiGCEi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vbrx2l133YXIyEj861//UrGz4KHT6bB582ZMmDABQP2oSGJiIn7729/iscceAwDY7XbEx8dj7dq1+MUvfqFit4GJIyMaZbfbAQCxsbEqdxKcZs6cidtvvx2ZmZlqtxKUtm7dikGDBuHuu+9G586dkZGRgVWrVqndVlAaPnw48vPzcfz4cQDAZ599hn379mHcuHEqdxa8Tp8+jfLycq//fhiNRgwZMgQHDx5UsbPApYkb5ZE3j8eDOXPmYMSIEejbt6/a7QSd9evX48iRI/jkk0/UbiVonTp1Ci+//DJycnLwxBNP4JNPPsGjjz4Kg8GAadOmqd1eUJk3bx4cDgd69+6NsLAwuN1uPP3007j33nvVbi1olZeXAwDi4+O9rsfHxzc+R94YRjRo5syZ+OKLL7Bv3z61Wwk6paWlmD17Nnbu3ImIiAi12wlaHo8HgwYNwjPPPAMAyMjIwBdffIEVK1YwjMjszTffxOuvv45169YhLS0NhYWFmDNnDhITE/lZU8DgNI3GzJo1C++99x527dqF5ORktdsJOgUFBTh37hyuv/56hIeHIzw8HB999BFefPFFhIeHw+12q91iUEhISMB1113nda1Pnz4oKSlRqaPg9fjjj2PevHn4xS9+gX79+uH+++/H3LlzkZeXp3ZrQatLly4AgIqKCq/rFRUVjc+RN4YRjRBFEbNmzcLmzZvx4Ycfolu3bmq3FJTGjBmDzz//HIWFhY2PQYMG4d5770VhYSHCwsLUbjEojBgxosnW9OPHj+Oaa65RqaPg9f3330Ov9/5PfVhYGDwej0odBb9u3bqhS5cuyM/Pb7zmcDjwn//8B8OGDVOxs8DFaRqNmDlzJtatW4d33nkHUVFRjfOORqMRkZGRKncXPKKiopqsw+nQoQM6derE9Tkymjt3LoYPH45nnnkG99xzDw4dOoSVK1di5cqVarcWdLKysvD000+ja9euSEtLw6effoqlS5dixowZaremadXV1SguLm789+nTp1FYWIjY2Fh07doVc+bMwVNPPYWePXuiW7dumD9/PhITExt33NAVRNIEAM0+XnnlFbVbC3qjRo0SZ8+erXYbQefdd98V+/btKwqCIPbu3VtcuXKl2i0FJYfDIc6ePVvs2rWrGBERIXbv3l188sknRafTqXZrmrZr165m/5s8bdo0URRF0ePxiPPnzxfj4+NFQRDEMWPGiMeOHVO36QDGc0aIiIhIVVwzQkRERKpiGCEiIiJVMYwQERGRqhhGiIiISFUMI0RERKQqhhEiIiJSFcMIERERqYphhIiIiFTFMEJERESqYhghIiIiVTGMEBERkaoYRoiIiEhV/x9AtIOBkgR7owAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"coef = np.polyfit(X_train['metraz'], y_train['cena'], 1)\n",
"poly1d_fn = np.poly1d(coef)\n",
"\n",
"plt.plot(X_test['pokoje'], y_test_pred_df['cena'], 'yo', X_train['pokoje'], poly1d_fn(X_train['pokoje']), '--k')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cena nieruchomości ze względna na rok wybudowania dla danych testowych"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiYAAAGsCAYAAADpDWxlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/NUlEQVR4nO3deXhU1eH/8c9kmyRAQgIhOwkE2ZewxrjzbYTypVhKbSn6FYpbVVQwdaMqqFVpqyj+KkrFva1CURDqgiKC1BK0ILGIrGGHJAQzWQiYZeb+/sAMDEkmM1nvJO/X88zzwM25956TO3fmk3PPPddiGIYhAAAAE/Br7QoAAABUI5gAAADTIJgAAADTIJgAAADTIJgAAADTIJgAAADTIJgAAADTIJgAAADTIJgAAADTIJgAAADT8KlgsmHDBk2YMEFxcXGyWCx69913vVr/4YcflsViqfHq0KFD81QYAAB4xaeCSVlZmYYMGaKFCxc2aP27775bubm5Lq/+/fvrF7/4RRPXFAAANIRPBZNx48bpscce089+9rNaf15eXq67775b8fHx6tChg9LS0rR+/Xrnzzt27KiYmBjnKz8/X99++61uuOGGFmoBAABwx6eCSX1uv/12ZWVlacmSJfrvf/+rX/ziF/rxj3+sPXv21Fr+pZdeUu/evXXppZe2cE0BAEBt2kwwOXTokF599VUtW7ZMl156qVJSUnT33Xfrkksu0auvvlqj/Pfff6+///3v9JYAAGAiAa1dgaaybds22e129e7d22V5eXm5unTpUqP8ihUrVFpaqmnTprVUFQEAQD3aTDA5efKk/P39tWXLFvn7+7v8rGPHjjXKv/TSS/rJT36i6OjolqoiAACoR5sJJkOHDpXdbtfx48frHTOyf/9+rVu3TqtWrWqh2gEAAE/4VDA5efKk9u7d6/z//v37lZ2drcjISPXu3VvXXnutpk6dqvnz52vo0KEqKCjQ2rVrNXjwYI0fP9653iuvvKLY2FiNGzeuNZoBAADqYDEMw2jtSnhq/fr1Gj16dI3l06ZN02uvvabKyko99thjeuONN3T06FF17dpVF154oR555BENGjRIkuRwOJSUlKSpU6fq8ccfb+kmAAAAN3wqmAAAgLatzdwuDAAAfB/BBAAAmIZPDH51OBw6duyYOnXqJIvF0trVAQAAHjAMQ6WlpYqLi5Ofn2d9IT4RTI4dO6bExMTWrgYAAGiAw4cPKyEhwaOyPhFMOnXqJOlMw8LCwlq5NgAAwBMlJSVKTEx0fo97wieCSfXlm7CwMIIJAAA+xpthGAx+BQAApkEwAQAApkEwAQAApkEwAQAApkEwAQAApkEwAQAApkEwAQAApkEwAQAApkEwAQAApkEwAQAApkEwAQAApkEwAQAApuETD/EDAAANYxiG8vLylJOTo5ycHO3bt085OTmy2+0aNmyYpkyZooSEhNauphPBBAAAH2AYhiTp22+/1datW/XZZ585w8ahQ4ec5caNG6f58+erb9++SkhI0LFjx+rc5pIlS5SamkowAQCgPTp9+rT27dunwsJCBQYGatCgQQoODtYLL7ygd955R+vXr691veDgYG3YsEEjRozQkCFDZLfb69zHhx9+qFmzZqlfv36qqKhwW5/rrrtOXbt2bUyTmhzBBAAAL1RVVenQoUMul0VycnIUFBSkwYMH66abblKnTp00ZcoUrVixwu22vvzyS40YMUKzZs1yGza+//572Ww2WSwW9erVS7t27aq1XGpqqu688071799fkvT555/L399fnTt3VpcuXWSxWBre8BZCMAEAtDvVl0Xsdru2b9+uTZs26V//+pczbBw/ftxZ9sorr9TLL7+syMhIJSQkqKioqM7tLlmyRFdeeaWGDx+uf/7zn27rkJSUpKqqKlksFk2dOlWbNm3Sjh07FBkZqZ49e6pnz55KSUnRwIEDddFFFyk2NlaStHPnTo/b2adPH4/LmgXBBADgs2w2m3JyclRSUqLAwECNGjVKdrtdL774ot544w1t3bq11vUCAgK0Y8cORUdHKzU11e0+1qxZo7y8PCUkJKi0tNRt2enTpyssLEwWi0V/+ctflJeXpxMnTiglJcUZNJKSkmS1Wl3We+WVV7xqd1tGMAEAtKrqcRfnXhbZt2+fwsLC1K9fP911112qqqrStGnT6u2F2LNnj2JiYnTXXXe5LVdVVSWbzaaUlBTFx8fr6NGjtZa7/PLLdcMNNyg5OVkWi0Xbt29XcHCwIiMj1alTJ7f7uP766903HLUimAAAGs3hcMhisaiiokLbtm3TZ599po0bNzrDxrk9DVdccYWWL1+u06dPq0+fPjp58qTbbU+ZMkWxsbH1hpJevXqpvLxcHTp00DXXXKPNmzdr9+7dio+Pd+mxGDRokIYPH67o6GhZLBYdOXLE43b64qURX0MwAQBIcp3v4tSpUwoMDNRll12mkpISvfTSS3rhhRe0f//+Wte1WCwqKCjQqVOnNHLkSLf7Wb9+vb777jvFxMTUG0puvvlmhYSEqEOHDnrxxRdVUFCgsrIyZ8hISUlRXFyc/P39Xdb7+9//7l3jYRoEEwBoY4qKirR3794ad43ExMToggsu0Jw5c5Sbm6vf/OY3+vDDD91u68SJEzp16pTuvfdet+UMw5DNZlNMTIwSEhJq7YUICQlRRkaGpkyZoqioKHXo0EG7d+9Whw4d1KVLlxrjLs5300031d94+DyLUT002cRKSkoUHh6u4uJihYWFtXZ1AKDZnT59WqWlpaqsrNThw4f10UcfadOmTc6xGFVVVc6yl1xyidatW6fdu3dr+PDh+v77791uu6CgQKdPn1b37t3dluvXr58+/vhjRUZG6je/+Y2ysrKUk5Pj7Kmofg0ePFiDBg1SVFRUjZ4LtG8N+f6mxwQAmkl5ebm2bdumzZs3q6CgQCdPntSwYcPUsWNHff3115o/f74KCwvdbmPs2LH66KOP3Jb5/PPPVVRUpLCwsHpDyW233SY/Pz9169ZNr7zyivLz81VVVeUyBqO2+S7++te/etZooJEIJgDghmEYys/P17Zt2/Thhx9q8+bN+s9//uMSAH7zm9+oe/fuWrdunT755JN6tzlmzBh9/PHHHu0/NDRUycnJOnDgQI2fRUZGaty4cZo4caJCQ0MVERGh/fv3q2PHjoqMjJSfn/vntE6fPt2jOgAtiWACoF0oKipSWVmZqqqqdPjwYa1cuVLvv/++duzYUWv53r17a+jQoXrnnXdcLpvU5i9/+YvGjBnjUShJTU1Venq64uPjtX79eh08eFAOh0OSNGDAAI0YMUKjR4/WRRddpB49eiggwLuP6eTkZK/KA2ZDMAHgM4qLi/XVV19p8+bNKi4uVnl5uVJTU9WpUydlZ2fr4YcfVn3D5jy5NCJJu3fvVo8ePeoNJZJ03333KS0tTdddd52OHTsmwzBkGIZGjBihYcOGKTIy0uM2Au0dwQRAi7Lb7SouLta///1vrVy5Ups3b9bXX3/tUuaGG25QUlKSPv300zofanYuT8OGJHXq1Em9evXS3r17a/15cHCwfvWrX+m6665Tjx49FBQUpE6dOqlTp04+8ZwRwNcRTAB4zTAMlZaWymazqaqqSgcPHpTNZlN2drYWLVqkEydOOMv6+flp6NChKiws1LBhw7R8+fJ6ezVefvlljRkzxqNQMnr0aF1yySVKSkrSxx9/rCNHjqiqqkoBAQEaMWKERo4cqSuuuEIjR45UfHx8veMuALQuggnQjlU/ZyQnJ0chISHOuSjCwsK0detW2Ww2rVmzRrt3765zG/X1VjgcDm3ZskWSdMEFF9QbSiTpscce0+DBgzV9+nQdOXJEfn5+CgoKcj7yPSQkxPvGAvAJBBPAx1VWVspms2n//v3auHGjy7NGRo0apS5dushms6lHjx5au3atCgsL9e2337rdpqeXRoKCghQREaF+/fopMjJSxcXF+uabbySd6Snp2bOnJk2apMsuu0wRERFKSEiQ1WpVRESEgoKCmqT9ANoWgglgAtXjLmw2m+x2uw4cOCCbzaasrCy9/PLLLtN2h4SEqHfv3s5LIytXrqxzu+f2dIwdO1aff/6523qkpaUpIiJCl19+uXr16qWIiAhVVVVp48aNzsm0evbsqSFDhig5OVkhISGMuwDQpAgmQBNxOBzKzc11TgEeHh4uh8Mhm82m8PBwffXVV7LZbFq+fLkKCgrq3E59c1ycPn3aOVi0X79+buvUu3dvTZo0SRERERo0aJBuvPFGRUZGKjg4WJWVlc7njDDuAoBZEEyAcxiGodOnT8tms2nPnj3697//7fKskR/96Efq2LGjCgsL1bNnT33yyScqLCzUnj173G7X00sjHTp0UNeuXTV48GBFRETo2LFjzm2HhoaqZ8+e+uUvf6lRo0YpMjJScXFxCg4OVufOnZkKHECbQDBBm1RRUSGbzSabzSaHw+G8NPLpp5/q9ddfl91ud5bt3Lmz4uLiVFhYqBEjRui9996rc7uvv/66899jx47VF1984bYeF198sSIiInTZZZepb9++ioiI0KlTp/T111+7TAE+ePBgJSQkMO4CQLtHMIFpVVZW6uDBg86BnDExMc7A0blzZ23ZskWFhYV644033E6CVd+lkaKiIhUVFTn3KUn+/v4u4aXayJEjNXbsWEVERGjgwIG69dZbFRERIavV6hzsGRkZybgLAGggggma1bnzXWzfvl1ZWVkul0auuuoqBQYGqrCwUCkpKVqzZo0KCwu1f/9+t9v15FkjFotF4eHhiomJ0bBhwxQR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gsnkyZNVUFCgOXPmKC8vT6mpqVq9erVzQOyhQ4dcekgefPBBWSwWPfjggzp69KiioqI0YcIEPf74403XCgAA0CZYDB+4nlJSUqLw8HAVFxcrLCystasDAAA80JDvb56VAwAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATINgAgAATKNBwWThwoVKTk5WcHCw0tLS9OWXX7otX1RUpBkzZig2NlZWq1W9e/fWBx980KAKAwCAtivA2xWWLl2qzMxMLVq0SGlpaVqwYIHGjh2rXbt2qVu3bjXKV1RU6Morr1S3bt309ttvKz4+XgcPHlTnzp2bov4AAKANsRiGYXizQlpamkaOHKnnnntOkuRwOJSYmKg77rhD999/f43yixYt0pNPPqmdO3cqMDCwQZUsKSlReHi4iouLFRYW1qBtAACAltWQ72+vLuVUVFRoy5YtysjIOLsBPz9lZGQoKyur1nVWrVql9PR0zZgxQ9HR0Ro4cKCeeOIJ2e32OvdTXl6ukpISlxcAAGj7vAomJ06ckN1uV3R0tMvy6Oho5eXl1brOvn379Pbbb8tut+uDDz7QQw89pPnz5+uxxx6rcz/z5s1TeHi485WYmOhNNQEAgI9q9rtyHA6HunXrphdffFHDhw/X5MmT9cADD2jRokV1rjN79mwVFxc7X4cPH27uagIAABPwavBr165d5e/vr/z8fJfl+fn5iomJqXWd2NhYBQYGyt/f37msX79+ysvLU0VFhYKCgmqsY7VaZbVavakaAABoA7zqMQkKCtLw4cO1du1a5zKHw6G1a9cqPT291nUuvvhi7d27Vw6Hw7ls9+7dio2NrTWUAACA9svrSzmZmZlavHixXn/9de3YsUO33nqrysrKNH36dEnS1KlTNXv2bGf5W2+9VYWFhZo5c6Z2796t999/X0888YRmzJjRdK0AAABtgtfzmEyePFkFBQWaM2eO8vLylJqaqtWrVzsHxB46dEh+fmfzTmJioj766CPdddddGjx4sOLj4zVz5kzdd999TdcKAADQJng9j0lrYB4TAAB8T7PPYwIAANCcCCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0CCYAAMA0GhRMFi5cqOTkZAUHBystLU1ffvmlR+stWbJEFotFEydObMhuAQBAG+d1MFm6dKkyMzM1d+5cffXVVxoyZIjGjh2r48ePu13vwIEDuvvuu3XppZc2uLIAAKBt8zqYPP3007rppps0ffp09e/fX4sWLVJoaKheeeWVOtex2+269tpr9cgjj6hnz56NqjAAAGi7vAomFRUV2rJlizIyMs5uwM9PGRkZysrKqnO9Rx99VN26ddMNN9zg0X7Ky8tVUlLi8gIAAG2fV8HkxIkTstvtio6OdlkeHR2tvLy8Wtf5/PPP9fLLL2vx4sUe72fevHkKDw93vhITE72pJgAA8FHNeldOaWmprrvuOi1evFhdu3b1eL3Zs2eruLjY+Tp8+HAz1hIAAJhFgDeFu3btKn9/f+Xn57ssz8/PV0xMTI3yOTk5OnDggCZMmOBc5nA4zuw4IEC7du1SSkpKjfWsVqusVqs3VQMAAG2AVz0mQUFBGj58uNauXetc5nA4tHbtWqWnp9co37dvX23btk3Z2dnO11VXXaXRo0crOzubSzQAAMCFVz0mkpSZmalp06ZpxIgRGjVqlBYsWKCysjJNnz5dkjR16lTFx8dr3rx5Cg4O1sCBA13W79y5syTVWA4AAOB1MJk8ebIKCgo0Z84c5eXlKTU1VatXr3YOiD106JD8/JhQFgAAeM9iGIbR2pWoT0lJicLDw1VcXKywsLDWrg4AAPBAQ76/6doAAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACmQTABAACm0aBgsnDhQiUnJys4OFhpaWn68ssv6yy7ePFiXXrppYqIiFBERIQyMjLclgcAAO2X18Fk6dKlyszM1Ny5c/XVV19pyJAhGjt2rI4fP15r+fXr12vKlClat26dsrKylJiYqDFjxujo0aONrjwAAGhbLIZhGN6skJaWppEjR+q5556TJDkcDiUmJuqOO+7Q/fffX+/6drtdEREReu655zR16lSP9llSUqLw8HAVFxcrLCzMm+oCAIBW0pDvb696TCoqKrRlyxZlZGSc3YCfnzIyMpSVleXRNk6dOqXKykpFRkbWWaa8vFwlJSUuLwAA0PZ5FUxOnDghu92u6Ohol+XR0dHKy8vzaBv33Xef4uLiXMLN+ebNm6fw8HDnKzEx0ZtqAgAAH9Wid+X84Q9/0JIlS7RixQoFBwfXWW727NkqLi52vg4fPtyCtQQAAK0lwJvCXbt2lb+/v/Lz812W5+fnKyYmxu26Tz31lP7whz/ok08+0eDBg92WtVqtslqt3lQNAAC0AV71mAQFBWn48OFau3atc5nD4dDatWuVnp5e53p/+tOf9Pvf/16rV6/WiBEjGl5bAADQpnnVYyJJmZmZmjZtmkaMGKFRo0ZpwYIFKisr0/Tp0yVJU6dOVXx8vObNmydJ+uMf/6g5c+bozTffVHJysnMsSseOHdWxY8cmbArQugzDrqKif6miIldBQbHq3PlSWSz+rV0tAPApXgeTyZMnq6CgQHPmzFFeXp5SU1O1evVq54DYQ4cOyc/vbEfMCy+8oIqKCl199dUu25k7d64efvjhxtUeMImCguXau3emysuPOJdZrQnq1etZRUVNasWaAYBv8Xoek9bAPCYws4KC5dq+/WpJ559KFknSgAFvE04AtEvN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cYUsFovL65ZbbnEpc+jQIY0fP16hoaHq1q2b7rnnHlVVVTV38+rU2HYfOHCgRpurX8uWLXOWq+3nS5Ysaalm1lBfu/Pz8/XrX/9acXFxCg0N1Y9//GPt2bPHpcz333+vGTNmqEuXLurYsaN+/vOfKz8/36WMrx3v+tpdWFioO+64Q3369FFISIi6d++uO++8U8XFxS7baYvHuy2e3/W12xfP73nz5mnkyJHq1KmTunXrpokTJ2rXrl0uZZrq3F2/fr2GDRsmq9WqXr166bXXXmvu5tWpKdr99ddfa8qUKUpMTFRISIj69eunZ5991mUb69evr/V45+XleVVfgokHysrKNGTIEC1cuLDWn2dmZmr16tX629/+ph07dmjWrFm6/fbbtWrVKpdyN910k3Jzc52vP/3pT86f2e12jR8/XhUVFdq4caNef/11vfbaa5ozZ06zts2dxrY7MTHRpb25ubl65JFH1LFjR40bN85lW6+++qpLuYkTJzZ38+rkrt2GYWjixInat2+fVq5cqa1btyopKUkZGRkqKytzlrvrrrv0z3/+U8uWLdNnn32mY8eOadKkSc6f+9rx9qTdx44d07Fjx/TUU0/pm2++0WuvvabVq1frhhtuqLG9tna8pbZ1fnvSbl88vz/77DPNmDFDmzZt0po1a1RZWakxY8Y0+bm7f/9+jR8/XqNHj1Z2drZmzZqlG2+8UR999FGLtrdaU7R7y5Yt6tatm/72t79p+/bteuCBBzR79mw999xzNfa3a9cul+PdrVs37ypswCuSjBUrVrgsGzBggPHoo4+6LBs2bJjxwAMPOP9/+eWXGzNnzqxzux988IHh5+dn5OXlOZe98MILRlhYmFFeXt4kdW+Mhrb7fKmpqcb1119f77bN4vy67dq1y5BkfPPNN85ldrvdiIqKMhYvXmwYhmEUFRUZgYGBxrJly5xlduzYYUgysrKyDMPwvePtSbtr849//MMICgoyKisr69y2mTS03W3t/G7o8fa18/v48eOGJOOzzz4zDKPpzt17773XGDBggMu+Jk+ebIwdO7a5m+SRhrS7NrfddpsxevRo5//XrVtnSDJsNluj6kePSRO46KKLtGrVKh09elSGYWjdunXavXu3xowZ41Lu73//u7p27aqBAwdq9uzZOnXqlPNnWVlZGjRokKKjo53Lxo4dq5KSEm3fvr3F2uINT9tdbcuWLcrOzq71L+gZM2aoa9euGjVqlF555RWvHpHdksrLyyVJwcHBzmV+fn6yWq36/PPPJZ1pZ2VlpTIyMpxl+vbtq+7duysrK0uS7x1vT9pdm+LiYoWFhSkgwPWxXG3peFdrS+d3Q463L57f1ZcZIyMjJTXduZuVleWyjeoy1dtobQ1pd13bqd7GuVJTUxUbG6srr7xS//73v72un088xM/s/vznP+vmm29WQkKCAgIC5Ofnp8WLF+uyyy5zlrnmmmuUlJSkuLg4/fe//9V9992nXbt2afny5ZKkvLw8lze6JOf/vb0+11I8afe5Xn75ZfXr108XXXSRy/JHH31U//M//6PQ0FB9/PHHuu2223Ty5EndeeedLdEMr1SfrLNnz9Zf/vIXdejQQc8884yOHDmi3NxcSWeOV1BQkDp37uyybnR0tPNY+trx9qTd5ztx4oR+//vf6+abb3ZZ3taOt9T2zu+GHG9fO78dDodmzZqliy++WAMHDpTUdOduXWVKSkp0+vRphYSENEeTPNLQdp9v48aNWrp0qd5//33nstjYWC1atEgjRoxQeXm5XnrpJV1xxRX64osvNGzYMI/rSDBpAn/+85+1adMmrVq1SklJSdqwYYNmzJihuLg4ZwI998N50KBBio2N1Y9+9CPl5OQoJSWltareKJ60u9rp06f15ptv6qGHHqqxnXOXDR06VGVlZXryySdb/YOrNoGBgVq+fLluuOEGRUZGyt/fXxkZGRo3bpxp/gpsDt62u6SkROPHj1f//v318MMPu/ysLR7vtnZ+e3u8ffH8njFjhr755hu3PX5tUVO0+5tvvtFPf/pTzZ0716WHvE+fPurTp4/z/xdddJFycnL0zDPP6K9//avH2+dSTiOdPn1av/vd7/T0009rwoQJGjx4sG6//XZNnjxZTz31VJ3rpaWlSZL27t0rSYqJiakx8rv6/zExMc1U+4bztt1vv/22Tp06palTp9a77bS0NB05csTZnWw2w4cPV3Z2toqKipSbm6vVq1fru+++U8+ePSWdOV4VFRUqKipyWS8/P995LH3teEv1t7taaWmpfvzjH6tTp05asWKFAgMD3W7X1493bXz9/Ja8a7evnd+333673nvvPa1bt04JCQnO5U117tZVJiwsrFV7SxrT7mrffvutfvSjH+nmm2/Wgw8+WO8+R40a5TwPPEUwaaTKykpVVlbKz8/1V+nv7y+Hw1HnetnZ2ZLOdH1JUnp6urZt26bjx487y6xZs0ZhYWHq379/01e8kbxt98svv6yrrrpKUVFR9W47OztbERERpn9QVnh4uKKiorRnzx5t3rxZP/3pTyWd+UAPDAzU2rVrnWV37dqlQ4cOKT09XZLvHe9z1dVu6UxPyZgxYxQUFKRVq1a5jFGoi68f79r4+vl9Lk/a7Svnt2EYuv3227VixQp9+umn6tGjh8vPm+rcTU9Pd9lGdZnqbbS0pmi3JG3fvl2jR4/WtGnT9Pjjj3u07+zsbOd54E2FUY/S0lJj69atxtatWw1JxtNPP21s3brVOHjwoGEYZ0bkDxgwwFi3bp2xb98+49VXXzWCg4ON559/3jAMw9i7d6/x6KOPGps3bzb2799vrFy50ujZs6dx2WWXOfdRVVVlDBw40BgzZoyRnZ1trF692oiKijJmz57dKm02jMa3u9qePXsMi8VifPjhhzX2sWrVKmPx4sXGtm3bjD179hjPP/+8ERoaasyZM6dF2lib+tr9j3/8w1i3bp2Rk5NjvPvuu0ZSUpIxadIkl23ccsstRvfu3Y1PP/3U2Lx5s5Genm6kp6c7f+6Lx7u+dhcXFxtpaWnGoEGDjL179xq5ubnOV1VVlWEYbfN4t9Xz25P3uWH41vl96623GuHh4cb69etd3p+nTp1ylmmKc3ffvn1GaGiocc899xg7duwwFi5caPj7+xurV69u0fZWa4p2b9u2zYiKijL+7//+z2Ubx48fd5Z55plnjHfffdfYs2ePsW3bNmPmzJmGn5+f8cknn3hVX4KJB6pvgTr/NW3aNMMwDCM3N9f49a9/bcTFxRnBwcFGnz59jPnz5xsOh8MwDMM4dOiQcdlllxmRkZGG1Wo1evXqZdxzzz1GcXGxy34OHDhgjBs3zggJCTG6du1q/Pa3v3W5zbKlNbbd1WbPnm0kJiYadru9xj4+/PBDIzU11ejYsaPRoUMHY8iQIcaiRYtqLdtS6mv3s88+ayQkJBiBgYFG9+7djQcffLDGLZ+nT582brvtNiMiIsIIDQ01fvaznxm5ubkuZXzteNfX7rrWl2Ts37/fMIy2ebzb6vntyfvcMHzr/K7r/fnqq686yzTVubtu3TojNTXVCAoKMnr27Omyj5bWFO2eO3durdtISkpylvnjH/9opKSkGMHBwUZkZKRxxRVXGJ9++qnX9bX8UGkAAIBWxxgTAABgGgQTAABgGgQTAABgGgQTAABgGgQTAABgGgQTAABgGgQTAABgGgQTAABgGgQTAABgGgQTAABgGgQTAABgGgQTAABgGv8fubKbvDqgmXgAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"coef = np.polyfit(X_train['metraz'], y_train['cena'], 1)\n",
"poly1d_fn = np.poly1d(coef)\n",
"\n",
"plt.plot(X_test['rok'], y_test_pred_df['cena'], 'yo', X_train['rok'], poly1d_fn(X_train['rok']), '--k')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Cena nieruchomości ze względna na metraż dla danych testowych"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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mJgYfPnll5yWMROcpiEiolorPj4eoaGhUvuVV17BV199hTp16shYFVU1jowQEVGttGfPHp0g8sUXX2D58uUMImaIYYSIiGqVoqIifPTRR3j66aelvs2bN2PKlCkyVkXVidM0RERUa5w4cUJn75AxY8Zg7ty5cHR0lLEqqm4MI0REVCv89NNP+L//+z+pvXbtWgwZMkTGiqimcJqGiIhkVVhYiPfee08niOzYsYNBxIJwZISIiGRz+PBhREREoKioCAAQGRmJzz77DHXr1pW5MqpJHBkhIiJZvP7663jiiSekILJ+/Xp8/fXXDCIWiCMjRERUowoKCjBt2jQsXbpU6vv1118REREhX1EkK4YRIiKqMcnJyRgyZAhOnDgBALC1tcXt27c5GmLhOE1DREQ14qWXXkKTJk1w4sQJuLi4YPPmzSgoKGAQIY6MEBFR9VKpVJgyZQpWr14t9cXHx6Nhw4YyVkW1CcMIERFVm6SkJAwePBinT5+W+vLz87mJGengNA0REVWLF154AU2bNsXp06dRv359bNu2DUIIBhF6BEdGiIioSt2/fx8ODg46ffHx8fD395epIqrtODJCRERV5q+//kLnzp11+u7du8cgQuViGCEioirxzjvvoF27dvj999/h4eGBtWvXQggBe3t7uUujWo7TNEREVCl3795FnTp1pHZERAR++OEH+Pr6ylgVmRKOjBARkdEuXLiATp06SW1HR0fs2bOHQYQMwjBCRERG+fjjj9GxY0ckJCTAy8sLK1asQH5+PqytreUujUyMQWEkKioKHTt2RL169eDp6YkBAwYgMTGxwvPWr1+PFi1awN7eHq1bt8aOHTuMLpiIiOSVkZEBhUKBTz75BHfv3kXPnj3x+++/Y8SIEXKXRibKoDCyf/9+REZG4tixY9i9ezcKCwvx9NNPIz8/v8xzjhw5gqFDh+K1117DmTNnMGDAAAwYMADnz5+vdPFERFSzzp07By8vL6ndqFEj7Ny5U6ePyFAKIYQw9uTMzEx4enpi//796NatW6nHDB48GPn5+di2bZvU17lzZ7Rt2xaLFy/W63Nyc3Ph7OyMnJwcODk5GVsuEREZSQiBZcuW4a233sL9+/cBAJ988gk+/PBDmSuj2kzf39+VWk2Tk5MDAHBzcyvzmKNHj2LSpEk6fb169cKWLVvKPEelUkGlUknt3NzcypRJ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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"coef = np.polyfit(X_train['metraz'], y_train['cena'], 1)\n",
"poly1d_fn = np.poly1d(coef)\n",
"\n",
"plt.plot(X_test['metraz'], y_test_pred_df['cena'], 'yo', X_train['metraz'], poly1d_fn(X_train['metraz']), '--k')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Funkcja predykcji ceny mieszkania"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [],
"source": [
"def cena_mieszkania(pokoje, metraz, rok):\n",
" mieszkanie = pd.DataFrame([[pokoje, metraz, rok]], columns=['pokoje', 'metraz', 'rok'])\n",
" cena = model.predict(mieszkanie).item()\n",
" return np.round(cena, 2)"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"184531.94"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cena_mieszkania(pokoje=2, metraz=25, rok=2000)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [],
"source": [
"# Zapisanie modelu do pliku\n",
"import pickle\n",
"filename = 'mieszkania_model'\n",
"pickle.dump(model, open(filename, 'wb'))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Zapisywanie wyników"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Zapisywanie wyników zbioru walidacyjnego"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"y_val_pred = pd.DataFrame(y_val_pred)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"y_val_pred.to_csv(r'dev-0\\out.tsv', sep='\\t', header=None, index=None)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Zapisywanie wyników zbioru testowego"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"y_test_pred_df.to_csv(r'test-A\\out.tsv', sep='\\t', header=None, index=None)"
]
}
],
"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.10.11"
}
},
"nbformat": 4,
"nbformat_minor": 2
}