diff --git a/wyk/3_Metody_ewaluacji_i_optymalizacji.ipynb b/wyk/3_Metody_ewaluacji_i_optymalizacji.ipynb
new file mode 100644
index 0000000..4b104e8
--- /dev/null
+++ b/wyk/3_Metody_ewaluacji_i_optymalizacji.ipynb
@@ -0,0 +1,1805 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "### Uczenie maszynowe\n",
+ "# 3. Metody ewaluacji i optymalizacji"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "## 3.1. Metodologia testowania"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "W uczeniu maszynowym bardzo ważna jest ewaluacja budowanego modelu. Dlatego dobrze jest podzielić posiadane dane na odrębne zbiory – osobny zbiór danych do uczenia i osobny do testowania. W niektórych przypadkach potrzeba będzie dodatkowo wyodrębnić tzw. zbiór walidacyjny."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Zbiór uczący a zbiór testowy"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ "* Na zbiorze uczącym (treningowym) uczymy algorytmy, a na zbiorze testowym sprawdzamy ich poprawność.\n",
+ "* Zbiór uczący powinien być kilkukrotnie większy od testowego (np. 4:1, 9:1 itp.).\n",
+ "* Zbiór testowy często jest nieznany.\n",
+ "* Należy unikać mieszania danych testowych i treningowych – nie wolno „zanieczyszczać” danych treningowych danymi testowymi!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "Czasami potrzebujemy dobrać parametry modelu, np. $\\alpha$ – który zbiór wykorzystać do tego celu?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Zbiór walidacyjny"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ "Do doboru parametrów najlepiej użyć jeszcze innego zbioru – jest to tzw. **zbiór walidacyjny**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ " * Zbiór walidacyjny powinien mieć wielkość zbliżoną do wielkości zbioru testowego, czyli np. dane można podzielić na te trzy zbiory w proporcjach 3:1:1, 8:1:1 itp."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "### Walidacja krzyżowa"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ "Którą część danych wydzielić jako zbiór walidacyjny tak, żeby było „najlepiej”?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ " * Niech każda partia danych pełni tę rolę naprzemiennie!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "
\n",
+ "Żródło: https://chrisjmccormick.wordpress.com/2013/07/31/k-fold-cross-validation-with-matlab-code/"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Walidacja krzyżowa\n",
+ "\n",
+ "* Podziel dane $D = \\left\\{ (x^{(1)}, y^{(1)}), \\ldots, (x^{(m)}, y^{(m)})\\right\\} $ na $N$ rozłącznych zbiorów $T_1,\\ldots,T_N$\n",
+ "* Dla $i=1,\\ldots,N$, wykonaj:\n",
+ " * Użyj $T_i$ do walidacji i zbiór $S_i$ do trenowania, gdzie $S_i = D \\smallsetminus T_i$. \n",
+ " * Zapisz model $\\theta_i$.\n",
+ "* Akumuluj wyniki dla modeli $\\theta_i$ dla zbiorów $T_i$.\n",
+ "* Ustalaj parametry uczenia na akumulowanych wynikach."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Walidacja krzyżowa – wskazówki\n",
+ "\n",
+ "* Zazwyczaj ustala się $N$ w przedziale od $4$ do $10$, tzw. $N$-krotna walidacja krzyżowa (*$N$-fold cross validation*). \n",
+ "* Zbiór $D$ warto zrandomizować przed podziałem.\n",
+ "* W jaki sposób akumulować wyniki dla wszystkich zbiórow $T_i$?\n",
+ "* Po ustaleniu parametrów dla każdego $T_i$, trenujemy model na całych danych treningowych z ustalonymi parametrami.\n",
+ "* Testujemy na zbiorze testowym (jeśli nim dysponujemy)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### _Leave-one-out_\n",
+ "\n",
+ "Jest to szczególny przypadek walidacji krzyżowej, w której $N = m$."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ "* Jaki jest rozmiar pojedynczego zbioru $T_i$?\n",
+ "* Jakie są zalety i wady tej metody?\n",
+ "* Kiedy może być przydatna?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Zbiór walidujący a algorytmy optymalizacji\n",
+ "\n",
+ "* Gdy błąd rośnie na zbiorze uczącym, mamy źle dobrany parametr $\\alpha$. Należy go wtedy zmniejszyć.\n",
+ "* Gdy błąd zmniejsza się na zbiorze trenującym, ale rośnie na zbiorze walidującym, mamy do czynienia ze zjawiskiem **nadmiernego dopasowania** (*overfitting*).\n",
+ "* Należy wtedy przerwać optymalizację. Automatyzacja tego procesu to _early stopping_."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "## 3.2. Miary jakości"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "Aby przeprowadzić ewaluację modelu, musimy wybrać **miarę** (**metrykę**), jakiej będziemy używać.\n",
+ "\n",
+ "Jakiej miary użyc najlepiej?\n",
+ " * To zależy od rodzaju zadania.\n",
+ " * Innych metryk używa się do regresji, a innych do klasyfikacji"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "### Metryki dla zadań regresji\n",
+ "\n",
+ "Dla zadań regresji możemy zastosować np.:\n",
+ " * błąd średniokwadratowy (*root-mean-square error*, RMSE):\n",
+ " $$ \\mathrm{RMSE} \\, = \\, \\sqrt{ \\frac{1}{m} \\sum_{i=1}^{m} \\left( \\hat{y}^{(i)} - y^{(i)} \\right)^2 } $$\n",
+ " * średni błąd bezwzględny (*mean absolute error*, MAE):\n",
+ " $$ \\mathrm{MAE} \\, = \\, \\frac{1}{m} \\sum_{i=1}^{m} \\left| \\hat{y}^{(i)} - y^{(i)} \\right| $$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "W powyższych wzorach $y^{(i)}$ oznacza **oczekiwaną** wartości zmiennej $y$ w $i$-tym przykładzie, a $\\hat{y}^{(i)}$ oznacza wartość zmiennej $y$ w $i$-tym przykładzie wyliczoną (**przewidzianą**) przez nasz model."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "### Metryki dla zadań klasyfikacji\n",
+ "\n",
+ "Aby przedstawić kilka najpopularniejszych metryk stosowanych dla zadań klasyfikacyjnych, posłużmy się następującym przykładem:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Przydatne importy\n",
+ "\n",
+ "import ipywidgets as widgets\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas\n",
+ "import random\n",
+ "import seaborn\n",
+ "\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "def powerme(x1,x2,n):\n",
+ " \"\"\"Funkcja, która generuje n potęg dla zmiennych x1 i x2 oraz ich iloczynów\"\"\"\n",
+ " X = []\n",
+ " for m in range(n+1):\n",
+ " for i in range(m+1):\n",
+ " X.append(np.multiply(np.power(x1,i),np.power(x2,(m-i))))\n",
+ " return np.hstack(X)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "def plot_data_for_classification(X, Y, xlabel=None, ylabel=None, Y_predicted=[], highlight=None):\n",
+ " \"\"\"Wykres danych dla zadania klasyfikacji\"\"\"\n",
+ " fig = plt.figure(figsize=(16*.6, 9*.6))\n",
+ " ax = fig.add_subplot(111)\n",
+ " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n",
+ " X = X.tolist()\n",
+ " Y = Y.tolist()\n",
+ " X1n = [x[1] for x, y in zip(X, Y) if y[0] == 0]\n",
+ " X1p = [x[1] for x, y in zip(X, Y) if y[0] == 1]\n",
+ " X2n = [x[2] for x, y in zip(X, Y) if y[0] == 0]\n",
+ " X2p = [x[2] for x, y in zip(X, Y) if y[0] == 1]\n",
+ " \n",
+ " if len(Y_predicted) > 0:\n",
+ " Y_predicted = Y_predicted.tolist()\n",
+ " X1tn = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 0]\n",
+ " X1fn = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 0]\n",
+ " X1tp = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 1]\n",
+ " X1fp = [x[1] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 1]\n",
+ " X2tn = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 0]\n",
+ " X2fn = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 0]\n",
+ " X2tp = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 1 and yp[0] == 1]\n",
+ " X2fp = [x[2] for x, y, yp in zip(X, Y, Y_predicted) if y[0] == 0 and yp[0] == 1]\n",
+ " \n",
+ " if highlight == 'tn':\n",
+ " ax.scatter(X1tn, X2tn, c='r', marker='x', s=100, label='Dane')\n",
+ " ax.scatter(X1fn, X2fn, c='k', marker='o', s=50, label='Dane')\n",
+ " ax.scatter(X1tp, X2tp, c='k', marker='o', s=50, label='Dane')\n",
+ " ax.scatter(X1fp, X2fp, c='k', marker='x', s=50, label='Dane')\n",
+ " elif highlight == 'fn':\n",
+ " ax.scatter(X1tn, X2tn, c='k', marker='x', s=50, label='Dane')\n",
+ " ax.scatter(X1fn, X2fn, c='g', marker='o', s=100, label='Dane')\n",
+ " ax.scatter(X1tp, X2tp, c='k', marker='o', s=50, label='Dane')\n",
+ " ax.scatter(X1fp, X2fp, c='k', marker='x', s=50, label='Dane')\n",
+ " elif highlight == 'tp':\n",
+ " ax.scatter(X1tn, X2tn, c='k', marker='x', s=50, label='Dane')\n",
+ " ax.scatter(X1fn, X2fn, c='k', marker='o', s=50, label='Dane')\n",
+ " ax.scatter(X1tp, X2tp, c='g', marker='o', s=100, label='Dane')\n",
+ " ax.scatter(X1fp, X2fp, c='k', marker='x', s=50, label='Dane')\n",
+ " elif highlight == 'fp':\n",
+ " ax.scatter(X1tn, X2tn, c='k', marker='x', s=50, label='Dane')\n",
+ " ax.scatter(X1fn, X2fn, c='k', marker='o', s=50, label='Dane')\n",
+ " ax.scatter(X1tp, X2tp, c='k', marker='o', s=50, label='Dane')\n",
+ " ax.scatter(X1fp, X2fp, c='r', marker='x', s=100, label='Dane')\n",
+ " else:\n",
+ " ax.scatter(X1tn, X2tn, c='r', marker='x', s=50, label='Dane')\n",
+ " ax.scatter(X1fn, X2fn, c='g', marker='o', s=50, label='Dane')\n",
+ " ax.scatter(X1tp, X2tp, c='g', marker='o', s=50, label='Dane')\n",
+ " ax.scatter(X1fp, X2fp, c='r', marker='x', s=50, label='Dane')\n",
+ "\n",
+ " else:\n",
+ " ax.scatter(X1n, X2n, c='r', marker='x', s=50, label='Dane')\n",
+ " ax.scatter(X1p, X2p, c='g', marker='o', s=50, label='Dane')\n",
+ " \n",
+ " if xlabel:\n",
+ " ax.set_xlabel(xlabel)\n",
+ " if ylabel:\n",
+ " ax.set_ylabel(ylabel)\n",
+ " \n",
+ " ax.margins(.05, .05)\n",
+ " return fig"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Wczytanie danych\n",
+ "import pandas\n",
+ "import numpy as np\n",
+ "\n",
+ "alldata = pandas.read_csv('data-metrics.tsv', sep='\\t')\n",
+ "data = np.matrix(alldata)\n",
+ "\n",
+ "m, n_plus_1 = data.shape\n",
+ "n = n_plus_1 - 1\n",
+ "\n",
+ "X2 = powerme(data[:, 1], data[:, 2], n)\n",
+ "Y2 = np.matrix(data[:, 0]).reshape(m, 1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plot_data_for_classification(X2, Y2, xlabel=r'$x_1$', ylabel=r'$x_2$')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "def safeSigmoid(x, eps=0):\n",
+ " \"\"\"Funkcja sigmoidalna zmodyfikowana w taki sposób, \n",
+ " żeby wartości zawsze były odległe od asymptot o co najmniej eps\n",
+ " \"\"\"\n",
+ " y = 1.0/(1.0 + np.exp(-x))\n",
+ " if eps > 0:\n",
+ " y[y < eps] = eps\n",
+ " y[y > 1 - eps] = 1 - eps\n",
+ " return y\n",
+ "\n",
+ "def h(theta, X, eps=0.0):\n",
+ " \"\"\"Funkcja hipotezy (regresja logistyczna)\"\"\"\n",
+ " return safeSigmoid(X*theta, eps)\n",
+ "\n",
+ "def J(h,theta,X,y, lamb=0):\n",
+ " \"\"\"Funkcja kosztu dla regresji logistycznej\"\"\"\n",
+ " m = len(y)\n",
+ " f = h(theta, X, eps=10**-7)\n",
+ " j = -np.sum(np.multiply(y, np.log(f)) + \n",
+ " np.multiply(1 - y, np.log(1 - f)), axis=0)/m\n",
+ " if lamb > 0:\n",
+ " j += lamb/(2*m) * np.sum(np.power(theta[1:],2))\n",
+ " return j\n",
+ "\n",
+ "def dJ(h,theta,X,y,lamb=0):\n",
+ " \"\"\"Gradient funkcji kosztu\"\"\"\n",
+ " g = 1.0/y.shape[0]*(X.T*(h(theta,X)-y))\n",
+ " if lamb > 0:\n",
+ " g[1:] += lamb/float(y.shape[0]) * theta[1:] \n",
+ " return g\n",
+ "\n",
+ "def classifyBi(theta, X):\n",
+ " \"\"\"Funkcja predykcji - klasyfikacja dwuklasowa\"\"\"\n",
+ " prob = h(theta, X)\n",
+ " return prob"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "def GD(h, fJ, fdJ, theta, X, y, alpha=0.01, eps=10**-3, maxSteps=10000):\n",
+ " \"\"\"Metoda gradientu prostego dla regresji logistycznej\"\"\"\n",
+ " errorCurr = fJ(h, theta, X, y)\n",
+ " errors = [[errorCurr, theta]]\n",
+ " while True:\n",
+ " # oblicz nowe theta\n",
+ " theta = theta - alpha * fdJ(h, theta, X, y)\n",
+ " # raportuj poziom błędu\n",
+ " errorCurr, errorPrev = fJ(h, theta, X, y), errorCurr\n",
+ " # kryteria stopu\n",
+ " if abs(errorPrev - errorCurr) <= eps:\n",
+ " break\n",
+ " if len(errors) > maxSteps:\n",
+ " break\n",
+ " errors.append([errorCurr, theta]) \n",
+ " return theta, errors"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "theta = [[ 1.37136167]\n",
+ " [ 0.90128948]\n",
+ " [ 0.54708112]\n",
+ " [-5.9929264 ]\n",
+ " [ 2.64435168]\n",
+ " [-4.27978238]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Uruchomienie metody gradientu prostego dla regresji logistycznej\n",
+ "theta_start = np.matrix(np.zeros(X2.shape[1])).reshape(X2.shape[1],1)\n",
+ "theta, errors = GD(h, J, dJ, theta_start, X2, Y2, \n",
+ " alpha=0.1, eps=10**-7, maxSteps=10000)\n",
+ "print('theta = {}'.format(theta))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "def plot_decision_boundary(fig, theta, X):\n",
+ " \"\"\"Wykres granicy klas\"\"\"\n",
+ " ax = fig.axes[0]\n",
+ " xx, yy = np.meshgrid(np.arange(-1.0, 1.0, 0.02),\n",
+ " np.arange(-1.0, 1.0, 0.02))\n",
+ " l = len(xx.ravel())\n",
+ " C = powerme(xx.reshape(l, 1), yy.reshape(l, 1), n)\n",
+ " z = classifyBi(theta, C).reshape(int(np.sqrt(l)), int(np.sqrt(l)))\n",
+ "\n",
+ " plt.contour(xx, yy, z, levels=[0.5], lw=3);"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "Y_expected = Y2.astype(int)\n",
+ "Y_predicted = (classifyBi(theta, X2) > 0.5).astype(int)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Przygotowanie interaktywnego wykresu\n",
+ "\n",
+ "dropdown_highlight = widgets.Dropdown(options=['all', 'tp', 'fp', 'tn', 'fn'], value='all', description='highlight')\n",
+ "\n",
+ "def interactive_classification(highlight):\n",
+ " fig = plot_data_for_classification(X2, Y2, xlabel=r'$x_1$', ylabel=r'$x_2$',\n",
+ " Y_predicted=Y_predicted, highlight=highlight)\n",
+ " plot_decision_boundary(fig, theta, X2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/pawel/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: UserWarning: The following kwargs were not used by contour: 'lw'\n",
+ " # Remove the CWD from sys.path while we load stuff.\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "widgets.interact(interactive_classification, highlight=dropdown_highlight)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "Zadanie klasyfikacyjne z powyższego przykładu polega na przypisaniu punktów do jednej z dwóch kategorii:\n",
+ " 0. czerwone krzyżyki\n",
+ " 1. zielone kółka\n",
+ "\n",
+ "W tym celu zastosowano regresję logistyczną."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "W rezultacie otrzymano model, który dzieli płaszczyznę na dwa obszary:\n",
+ " 0. na zewnątrz granatowej krzywej\n",
+ " 1. wewnątrz granatowej krzywej\n",
+ " \n",
+ "Model przewiduje klasę 0 („czerwoną”) dla punktów znajdujący się w obszarze na zewnątrz krzywej, natomiast klasę 1 („zieloną”) dla punktów znajdujących sie w obszarze wewnąrz krzywej."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "Wszysktie obserwacje możemy podzielić zatem na cztery grupy:\n",
+ " * **true positives (TP)** – prawidłowo sklasyfikowane pozytywne przykłady (zielone kółka w wewnętrznym obszarze)\n",
+ " * **true negatives (TN)** – prawidłowo sklasyfikowane negatywne przykłady (czerwone krzyżyki w zewnętrznym obszarze)\n",
+ " * **false positives (FP)** – negatywne przykłady sklasyfikowane jako pozytywne (czerwone krzyżyki w wewnętrznym obszarze)\n",
+ " * **false negatives (FN)** – pozytywne przykłady sklasyfikowane jako negatywne (zielone kółka w zewnętrznym obszarze)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "Innymi słowy:\n",
+ "\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "skip"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "TP = 5\n",
+ "TN = 35\n",
+ "FP = 3\n",
+ "FN = 6\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Obliczmy TP, TN, FP i FN\n",
+ "\n",
+ "tp = 0\n",
+ "tn = 0\n",
+ "fp = 0\n",
+ "fn = 0\n",
+ "\n",
+ "for i in range(len(Y_expected)):\n",
+ " if Y_expected[i] == 1 and Y_predicted[i] == 1:\n",
+ " tp += 1\n",
+ " elif Y_expected[i] == 0 and Y_predicted[i] == 0:\n",
+ " tn += 1\n",
+ " elif Y_expected[i] == 0 and Y_predicted[i] == 1:\n",
+ " fp += 1\n",
+ " elif Y_expected[i] == 1 and Y_predicted[i] == 0:\n",
+ " fn += 1\n",
+ " \n",
+ "print('TP =', tp)\n",
+ "print('TN =', tn)\n",
+ "print('FP =', fp)\n",
+ "print('FN =', fn)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "skip"
+ }
+ },
+ "source": [
+ "Możemy teraz zdefiniować następujące metryki:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "#### Dokładność (*accuracy*)\n",
+ "$$ \\mbox{accuracy} = \\frac{\\mbox{przypadki poprawnie sklasyfikowane}}{\\mbox{wszystkie przypadki}} = \\frac{TP + TN}{TP + TN + FP + FN} $$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "Dokładność otrzymujemy przez podzielenie liczby przypadków poprawnie sklasyfikowanych przez liczbę wszystkich przypadków:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Accuracy: 0.8163265306122449\n"
+ ]
+ }
+ ],
+ "source": [
+ "accuracy = (tp + tn) / (tp + tn + fp + fn)\n",
+ "print('Accuracy:', accuracy)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "**Uwaga:** Nie zawsze dokładność będzie dobrą miarą, zwłaszcza gdy klasy są bardzo asymetryczne!\n",
+ "\n",
+ "*Przykład:* Wyobraźmy sobie test na koronawirusa, który **zawsze** zwraca wynik negatywny. Jaką przydatność będzie miał taki test w praktyce? Żadną. A jaka będzie jego *dokładność*? Policzmy:\n",
+ "$$ \\mbox{accuracy} \\, = \\, \\frac{\\mbox{szacowana liczba osób zdrowych na świecie}}{\\mbox{populacja Ziemi}} \\, \\approx \\, \\frac{7\\,700\\,000\\,000 - 600\\,000}{7\\,700\\,000\\,000} \\, \\approx \\, 0.99992 $$\n",
+ "(zaokrąglone dane z 27 marca 2020)\n",
+ "\n",
+ "Powyższy wynik jest tak wysoki, ponieważ zdecydowana większość osób na świecie nie jest zakażona, więc biorąc losowego Ziemianina możemy w ciemno strzelać, że nie ma koronawirusa.\n",
+ "\n",
+ "W tym przypadku duża różnica w liczności obu zbiorów (zakażeni/niezakażeni) powoduje, że *accuracy* nie jest dobrą metryką.\n",
+ "\n",
+ "Dlatego dysponujemy również innymi metrykami:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "#### Precyzja (*precision*)\n",
+ "$$ \\mbox{precision} = \\frac{TP}{TP + FP} $$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Precision: 0.625\n"
+ ]
+ }
+ ],
+ "source": [
+ "precision = tp / (tp + fp)\n",
+ "print('Precision:', precision)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "Precyzja określa, jaka część przykładów sklasyfikowanych jako pozytywne to faktycznie przykłady pozytywne."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "#### Pokrycie (czułość, *recall*)\n",
+ "$$ \\mbox{recall} = \\frac{TP}{TP + FN} $$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Recall: 0.45454545454545453\n"
+ ]
+ }
+ ],
+ "source": [
+ "recall = tp / (tp + fn)\n",
+ "print('Recall:', recall)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "Pokrycie mówi nam, jaka część przykładów pozytywnych została poprawnie sklasyfikowana."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "#### *$F$-measure* (*$F$-score*)\n",
+ "$$ F = \\frac{2 \\cdot \\mbox{precision} \\cdot \\mbox{recall}}{\\mbox{precision} + \\mbox{recall}} $$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "F-score: 0.5263157894736842\n"
+ ]
+ }
+ ],
+ "source": [
+ "fscore = (2 * precision * recall) / (precision + recall)\n",
+ "print('F-score:', fscore)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "$F$-_measure_ jest kompromisem między precyzją a pokryciem (a ściślej: jest średnią harmoniczną precyzji i pokrycia)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "$F$-_measure_ jest szczególnym przypadkiem ogólniejszej miary:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "*$F_\\beta$-measure*:\n",
+ "$$ F_\\beta = \\frac{(1 + \\beta) \\cdot \\mbox{precision} \\cdot \\mbox{recall}}{\\beta^2 \\cdot \\mbox{precision} + \\mbox{recall}} $$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ "Dla $\\beta = 1$ otrzymujemy:\n",
+ "$$ F_1 \\, = \\, \\frac{(1 + 1) \\cdot \\mbox{precision} \\cdot \\mbox{recall}}{1^2 \\cdot \\mbox{precision} + \\mbox{recall}} \\, = \\, \\frac{2 \\cdot \\mbox{precision} \\cdot \\mbox{recall}}{\\mbox{precision} + \\mbox{recall}} \\, = \\, F $$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "## 3.3. Obserwacje odstające"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "**Obserwacje odstające** (*outliers*) – to wszelkie obserwacje posiadające nietypową wartość.\n",
+ "\n",
+ "Mogą być na przykład rezultatem błędnego pomiaru albo pomyłki przy wprowadzaniu danych do bazy, ale nie tylko.\n",
+ "\n",
+ "Obserwacje odstające mogą niekiedy znacząco wpłynąć na parametry modelu, dlatego ważne jest, żeby takie obserwacje odrzucić zanim przystąpi się do tworzenia modelu."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "W poniższym przykładzie można zobaczyć wpływ obserwacji odstających na wynik modelowania na przykładzie danych dotyczących cen mieszkań zebranych z ogłoszeń na portalu Gratka.pl: tutaj przykładem obserwacji odstającej może być ogłoszenie, w którym podano cenę w tys. zł zamiast ceny w zł."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Przydatne funkcje\n",
+ "\n",
+ "def h_linear(Theta, x):\n",
+ " \"\"\"Funkcja regresji liniowej\"\"\"\n",
+ " return x * Theta\n",
+ "\n",
+ "def linear_regression(theta):\n",
+ " \"\"\"Ta funkcja zwraca funkcję regresji liniowej dla danego wektora parametrów theta\"\"\"\n",
+ " return lambda x: h_linear(theta, x)\n",
+ "\n",
+ "def cost(theta, X, y):\n",
+ " \"\"\"Wersja macierzowa funkcji kosztu\"\"\"\n",
+ " m = len(y)\n",
+ " J = 1.0 / (2.0 * m) * ((X * theta - y).T * (X * theta - y))\n",
+ " return J.item()\n",
+ "\n",
+ "def gradient(theta, X, y):\n",
+ " \"\"\"Wersja macierzowa gradientu funkcji kosztu\"\"\"\n",
+ " return 1.0 / len(y) * (X.T * (X * theta - y)) \n",
+ "\n",
+ "def gradient_descent(fJ, fdJ, theta, X, y, alpha=0.1, eps=10**-5):\n",
+ " \"\"\"Algorytm gradientu prostego (wersja macierzowa)\"\"\"\n",
+ " current_cost = fJ(theta, X, y)\n",
+ " logs = [[current_cost, theta]]\n",
+ " while True:\n",
+ " theta = theta - alpha * fdJ(theta, X, y)\n",
+ " current_cost, prev_cost = fJ(theta, X, y), current_cost\n",
+ " if abs(prev_cost - current_cost) > 10**15:\n",
+ " print('Algorithm does not converge!')\n",
+ " break\n",
+ " if abs(prev_cost - current_cost) <= eps:\n",
+ " break\n",
+ " logs.append([current_cost, theta]) \n",
+ " return theta, logs\n",
+ "\n",
+ "def plot_data(X, y, xlabel, ylabel):\n",
+ " \"\"\"Wykres danych (wersja macierzowa)\"\"\"\n",
+ " fig = plt.figure(figsize=(16*.6, 9*.6))\n",
+ " ax = fig.add_subplot(111)\n",
+ " fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)\n",
+ " ax.scatter([X[:, 1]], [y], c='r', s=50, label='Dane')\n",
+ " \n",
+ " ax.set_xlabel(xlabel)\n",
+ " ax.set_ylabel(ylabel)\n",
+ " ax.margins(.05, .05)\n",
+ " plt.ylim(y.min() - 1, y.max() + 1)\n",
+ " plt.xlim(np.min(X[:, 1]) - 1, np.max(X[:, 1]) + 1)\n",
+ " return fig\n",
+ "\n",
+ "def plot_regression(fig, fun, theta, X):\n",
+ " \"\"\"Wykres krzywej regresji (wersja macierzowa)\"\"\"\n",
+ " ax = fig.axes[0]\n",
+ " x0 = np.min(X[:, 1]) - 1.0\n",
+ " x1 = np.max(X[:, 1]) + 1.0\n",
+ " L = [x0, x1]\n",
+ " LX = np.matrix([1, x0, 1, x1]).reshape(2, 2)\n",
+ " ax.plot(L, fun(theta, LX), linewidth='2',\n",
+ " label=(r'$y={theta0:.2}{op}{theta1:.2}x$'.format(\n",
+ " theta0=float(theta[0][0]),\n",
+ " theta1=(float(theta[1][0]) if theta[1][0] >= 0 else float(-theta[1][0])),\n",
+ " op='+' if theta[1][0] >= 0 else '-')))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Wczytanie danych (mieszkania) przy pomocy biblioteki pandas\n",
+ "\n",
+ "alldata = pandas.read_csv('data_flats_with_outliers.tsv', sep='\\t',\n",
+ " names=['price', 'isNew', 'rooms', 'floor', 'location', 'sqrMetres'])\n",
+ "data = np.matrix(alldata[['price', 'sqrMetres']])\n",
+ "\n",
+ "m, n_plus_1 = data.shape\n",
+ "n = n_plus_1 - 1\n",
+ "Xn = data[:, 0:n]\n",
+ "\n",
+ "Xo = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n + 1)\n",
+ "yo = np.matrix(data[:, -1]).reshape(m, 1)\n",
+ "\n",
+ "Xo /= np.amax(Xo, axis=0)\n",
+ "yo /= np.amax(yo, axis=0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plot_data(Xo, yo, xlabel=u'metraż', ylabel=u'cena')\n",
+ "theta_start = np.matrix([0.0, 0.0]).reshape(2, 1)\n",
+ "theta, logs = gradient_descent(cost, gradient, theta_start, Xo, yo, alpha=0.01)\n",
+ "plot_regression(fig, h_linear, theta, Xo)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "Na powyższym przykładzie obserwacja odstająca jawi sie jako pojedynczy punkt po prawej stronie wykresu. Widzimy, że otrzymana krzywa regresji zamiast odwzorowywać ogólny trend, próbuje „dopasować się” do tej pojedynczej obserwacji.\n",
+ "\n",
+ "Dlatego taką obserwację należy usunąć ze zbioru danych (zobacz ponizej)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Odrzućmy obserwacje odstające\n",
+ "alldata_no_outliers = [\n",
+ " (index, item) for index, item in alldata.iterrows() \n",
+ " if item.price > 100 and item.sqrMetres > 10]\n",
+ "\n",
+ "alldata_no_outliers = alldata.loc[(alldata['price'] > 100) & (alldata['sqrMetres'] > 100)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "data = np.matrix(alldata_no_outliers[['price', 'sqrMetres']])\n",
+ "\n",
+ "m, n_plus_1 = data.shape\n",
+ "n = n_plus_1 - 1\n",
+ "Xn = data[:, 0:n]\n",
+ "\n",
+ "Xo = np.matrix(np.concatenate((np.ones((m, 1)), Xn), axis=1)).reshape(m, n + 1)\n",
+ "yo = np.matrix(data[:, -1]).reshape(m, 1)\n",
+ "\n",
+ "Xo /= np.amax(Xo, axis=0)\n",
+ "yo /= np.amax(yo, axis=0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {
+ "scrolled": true,
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plot_data(Xo, yo, xlabel=u'metraż', ylabel=u'cena')\n",
+ "theta_start = np.matrix([0.0, 0.0]).reshape(2, 1)\n",
+ "theta, logs = gradient_descent(cost, gradient, theta_start, Xo, yo, alpha=0.01)\n",
+ "plot_regression(fig, h_linear, theta, Xo)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "Na powyższym wykresie widać, że po odrzuceniu obserwacji odstających otrzymujemy dużo bardziej „wiarygodną” krzywą regresji."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "## 3.4. Warianty metody gradientu prostego\n",
+ "\n",
+ "* Batch gradient descent\n",
+ "* Stochastic gradient descent\n",
+ "* Mini-batch gradient descent"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### _Batch gradient descent_\n",
+ "\n",
+ "* Klasyczna wersja metody gradientu prostego\n",
+ "* Obliczamy gradient funkcji kosztu względem całego zbioru treningowego:\n",
+ " $$ \\theta := \\theta - \\alpha \\cdot \\nabla_\\theta J(\\theta) $$\n",
+ "* Dlatego może działać bardzo powoli\n",
+ "* Nie można dodawać nowych przykładów na bieżąco w trakcie trenowania modelu (*online learning*)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### *Stochastic gradient descent* (SGD)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ "#### Algorytm\n",
+ "\n",
+ "Powtórz określoną liczbę razy (liczba epok):\n",
+ " 1. Randomizuj dane treningowe\n",
+ " 1. Powtórz dla każdego przykładu $i = 1, 2, \\ldots, m$:\n",
+ " $$ \\theta := \\theta - \\alpha \\cdot \\nabla_\\theta \\, J \\! \\left( \\theta, x^{(i)}, y^{(i)} \\right) $$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "notes"
+ }
+ },
+ "source": [
+ "**Randomizacja danych** to losowe potasowanie przykładów uczących (wraz z odpowiedziami)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "#### SGD - zalety\n",
+ "\n",
+ "* Dużo szybszy niż _batch gradient descent_\n",
+ "* Można dodawać nowe przykłady na bieżąco w trakcie trenowania (*online learning*)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "#### SGD\n",
+ "\n",
+ "* Częsta aktualizacja parametrów z dużą wariancją:\n",
+ "\n",
+ "
\n",
+ "\n",
+ "* Z jednej strony dzięki temu nie utyka w złych minimach lokalnych, ale z drugiej strony może „wyskoczyć” z dobrego minimum"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### _Mini-batch gradient descent_"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ "#### Algorytm\n",
+ "\n",
+ "1. Ustal rozmiar \"paczki/wsadu\" (*batch*) $b \\leq m$.\n",
+ "2. Powtórz określoną liczbę razy (liczba epok):\n",
+ " 1. Powtórz dla każdego batcha (czyli dla $i = 1, 1 + b, 1 + 2 b, \\ldots$):\n",
+ " $$ \\theta := \\theta - \\alpha \\cdot \\nabla_\\theta \\, J \\left( \\theta, x^{(i : i+b)}, y^{(i : i+b)} \\right) $$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "#### _Mini-batch gradient descent_\n",
+ "\n",
+ "* Kompromis między _batch gradient descent_ i SGD\n",
+ "* Stabilniejsza zbieżność dzięki redukcji wariancji aktualizacji parametrów\n",
+ "* Szybszy niż klasyczny _batch gradient descent_\n",
+ "* Typowa wielkość batcha: między kilka a kilkaset przykładów\n",
+ " * Im większy batch, tym bliżej do BGD; im mniejszy batch, tym bliżej do SGD\n",
+ " * BGD i SGD można traktować jako odmiany MBGD dla $b = m$ i $b = 1$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "slideshow": {
+ "slide_type": "skip"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Mini-batch gradient descent - przykładowa implementacja\n",
+ "\n",
+ "def MiniBatchSGD(h, fJ, fdJ, theta, X, y, \n",
+ " alpha=0.001, maxEpochs=1.0, batchSize=100, \n",
+ " logError=True):\n",
+ " errorsX, errorsY = [], []\n",
+ " \n",
+ " m, n = X.shape\n",
+ " start, end = 0, batchSize\n",
+ " \n",
+ " maxSteps = (m * float(maxEpochs)) / batchSize\n",
+ " for i in range(int(maxSteps)):\n",
+ " XBatch, yBatch = X[start:end,:], y[start:end,:]\n",
+ "\n",
+ " theta = theta - alpha * fdJ(h, theta, XBatch, yBatch)\n",
+ " \n",
+ " if logError:\n",
+ " errorsX.append(float(i*batchSize)/m)\n",
+ " errorsY.append(fJ(h, theta, XBatch, yBatch).item())\n",
+ " \n",
+ " if start + batchSize < m:\n",
+ " start += batchSize\n",
+ " else:\n",
+ " start = 0\n",
+ " end = min(start + batchSize, m)\n",
+ " \n",
+ " return theta, (errorsX, errorsY)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "Porównanie uśrednionych krzywych uczenia na przykładzie klasyfikacji dwuklasowej zbioru [MNIST](https://en.wikipedia.org/wiki/MNIST_database):\n",
+ "\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Wady klasycznej metody gradientu prostego, czyli dlaczego potrzebujemy optymalizacji\n",
+ "\n",
+ "* Trudno dobrać właściwą szybkość uczenia (*learning rate*)\n",
+ "* Jedna ustalona wartość stałej uczenia się dla wszystkich parametrów\n",
+ "* Funkcja kosztu dla sieci neuronowych nie jest wypukła, więc uczenie może utknąć w złym minimum lokalnym lub punkcie siodłowym"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "## 3.5. Algorytmy optymalizacji metody gradientu\n",
+ "\n",
+ "* Momentum\n",
+ "* Nesterov Accelerated Gradient\n",
+ "* Adagrad\n",
+ "* Adadelta\n",
+ "* RMSprop\n",
+ "* Adam\n",
+ "* Nadam\n",
+ "* AMSGrad"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Momentum\n",
+ "\n",
+ "* SGD źle radzi sobie w „wąwozach” funkcji kosztu\n",
+ "* Momentum rozwiązuje ten problem przez dodanie współczynnika $\\gamma$, który można trakować jako „pęd” spadającej piłki:\n",
+ " $$ v_t := \\gamma \\, v_{t-1} + \\alpha \\, \\nabla_\\theta J(\\theta) $$\n",
+ " $$ \\theta := \\theta - v_t $$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Przyspiesony gradient Nesterova (*Nesterov Accelerated Gradient*, NAG)\n",
+ "\n",
+ "* Momentum czasami powoduje niekontrolowane rozpędzanie się piłki, przez co staje się „mniej sterowna”\n",
+ "* Nesterov do piłki posiadającej pęd dodaje „hamulec”, który spowalnia piłkę przed wzniesieniem:\n",
+ " $$ v_t := \\gamma \\, v_{t-1} + \\alpha \\, \\nabla_\\theta J(\\theta - \\gamma \\, v_{t-1}) $$\n",
+ " $$ \\theta := \\theta - v_t $$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Adagrad\n",
+ "\n",
+ "* “Adaptive gradient”\n",
+ "* Adagrad dostosowuje współczynnik uczenia (*learning rate*) do parametrów: zmniejsza go dla cech występujących częściej, a zwiększa dla występujących rzadziej:\n",
+ "* Świetny do trenowania na rzadkich (*sparse*) zbiorach danych\n",
+ "* Wada: współczynnik uczenia może czasami gwałtownie maleć\n",
+ "* Wyniki badań pokazują, że często **starannie** dobrane $\\alpha$ daje lepsze wyniki na zbiorze testowym"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Adadelta i RMSprop\n",
+ "* Warianty algorytmu Adagrad, które radzą sobie z problemem gwałtownych zmian współczynnika uczenia"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Adam\n",
+ "\n",
+ "* “Adaptive moment estimation”\n",
+ "* Łączy zalety algorytmów RMSprop i Momentum\n",
+ "* Można go porównać do piłki mającej ciężar i opór\n",
+ "* Obecnie jeden z najpopularniejszych algorytmów optymalizacji"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### Nadam\n",
+ "* “Nesterov-accelerated adaptive moment estimation”\n",
+ "* Łączy zalety algorytmów Adam i Nesterov Accelerated Gradient"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "### AMSGrad\n",
+ "* Wariant algorytmu Adam lepiej dostosowany do zadań takich jak rozpoznawanie obiektów czy tłumaczenie maszynowe"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "## 3.6. Metody zbiorcze"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ " * **Metody zbiorcze** (*ensemble methods*) używają połączonych sił wielu modeli uczenia maszynowego w celu uzyskania lepszej skuteczności niż mogłaby być osiągnięta przez każdy z tych modeli z osobna."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ " * Na metodę zbiorczą składa się:\n",
+ " * dobór modeli\n",
+ " * sposób agregacji wyników"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ " * Warto zastosować randomizację, czyli przetasować zbiór uczący przed trenowaniem każdego modelu."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "### Uśrednianie prawdopodobieństw"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ "#### Przykład\n",
+ "\n",
+ "Mamy 3 modele, które dla klas $c=1, 2, 3, 4, 5$ zwróciły prawdopodobieństwa:\n",
+ "\n",
+ "* $M_1$: [0.10, 0.40, **0.50**, 0.00, 0.00]\n",
+ "* $M_2$: [0.10, **0.60**, 0.20, 0.00, 0.10]\n",
+ "* $M_3$: [0.10, 0.30, **0.40**, 0.00, 0.20]\n",
+ "\n",
+ "Która klasa zostanie wybrana według średnich prawdopodobieństw dla każdej klasy?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "Średnie prawdopodobieństwo: [0.10, **0.43**, 0.36, 0.00, 0.10]\n",
+ "\n",
+ "Została wybrana klasa $c = 2$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "### Głosowanie klas"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "fragment"
+ }
+ },
+ "source": [
+ "#### Przykład\n",
+ "\n",
+ "Mamy 3 modele, które dla klas $c=1, 2, 3, 4, 5$ zwróciły prawdopodobieństwa:\n",
+ "\n",
+ "* $M_1$: [0.10, 0.40, **0.50**, 0.00, 0.00]\n",
+ "* $M_2$: [0.10, **0.60**, 0.20, 0.00, 0.10]\n",
+ "* $M_3$: [0.10, 0.30, **0.40**, 0.00, 0.20]\n",
+ "\n",
+ "Która klasa zostanie wybrana według głosowania?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "subslide"
+ }
+ },
+ "source": [
+ "Liczba głosów: [0, 1, **2**, 0, 0]\n",
+ "\n",
+ "Została wybrana klasa $c = 3$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "slideshow": {
+ "slide_type": "slide"
+ }
+ },
+ "source": [
+ "### Inne metody zbiorcze\n",
+ "\n",
+ " * Bagging\n",
+ " * Boostng\n",
+ " * Stacking\n",
+ " \n",
+ "https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205"
+ ]
+ }
+ ],
+ "metadata": {
+ "celltoolbar": "Slideshow",
+ "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.3"
+ },
+ "livereveal": {
+ "start_slideshow_at": "selected",
+ "theme": "white"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/wyk/contours_evaluation_optimizers.gif b/wyk/contours_evaluation_optimizers.gif
new file mode 100644
index 0000000..e9d54d0
Binary files /dev/null and b/wyk/contours_evaluation_optimizers.gif differ
diff --git a/wyk/data-metrics.tsv b/wyk/data-metrics.tsv
new file mode 100644
index 0000000..c50b5e7
--- /dev/null
+++ b/wyk/data-metrics.tsv
@@ -0,0 +1,50 @@
+0 -0.9410633308036449 0.46518252113944425
+1 0.4700636553691919 -0.3970321538875541
+1 -0.01609299859794966 0.23161453968628254
+0 -0.9966154155058933 0.06419313152355421
+0 0.8000009607150127 0.44133107977776875
+0 0.389227379480078 -0.8415416694237676
+0 -0.7786281038890375 0.2833716839963434
+1 -0.10150562150521569 -0.02968754639839366
+1 -0.14995353486391494 0.30921523116923866
+0 0.3150219624148183 0.4186143523577863
+0 -0.5542734031872467 0.9291684810885719
+0 -0.44750469543445215 -0.8240387195698262
+0 -0.7875312310670415 0.27475695030524894
+0 0.20470154428730747 -0.8122722630746713
+0 0.07472783793361693 0.8936381678688297
+0 -0.6016285994197443 -0.9783927694535444
+0 0.4235345463350013 -0.23977977886239832
+0 0.256790496684171 -0.5587059709121811
+0 -0.2172656054288027 0.8015306542483966
+0 0.2009238354275602 0.9376873763906164
+0 -0.8760038215191506 0.015194717659306356
+0 -0.1512141038160364 -0.9575528046526418
+0 -0.6378974241766098 0.35900665963616696
+0 -0.6219617077011876 0.04019896541474166
+0 -0.2533778634666939 -0.8576798720089458
+0 -0.9398823073223508 0.806594859009744
+0 -0.24161324930138606 -0.6982896600554984
+0 -0.967724402993285 0.15651783268628372
+0 0.9587968810951801 -0.3382309645563397
+1 0.18040441263417084 -0.026706542719935777
+0 -0.2403226372749332 -0.2694487472698215
+0 -0.49494412803453747 -0.6833825934742561
+0 -0.32266963833818574 0.6299706350061482
+0 -0.716450532167108 0.7792499086149187
+1 -0.5661825812948427 -0.3045016769669948
+0 -0.9014952263862088 0.19697267011506714
+1 0.3192734822128551 -0.3145295901019187
+1 -0.4386590899062277 0.6119229005694005
+0 -0.6306933372350818 0.4721301354446683
+0 0.3302936606411402 -0.3047093070118343
+1 -0.38049655790356285 -0.609474130471132
+1 0.32069301644263426 0.17266197471996692
+1 0.8349752241994568 0.4408717276862013
+0 -0.26741723386938343 -0.4919294757003996
+0 -0.7786699335922747 -0.47305795528791905
+0 0.723410510517891 -0.010095862311693793
+0 0.0902826080483603 -0.6805262097228113
+0 -0.9286972617786873 0.7200430642275493
+0 -0.0623197964184079 0.8187639325432745
+0 -0.20572090815735944 -0.6655000969777327
diff --git a/wyk/data_flats_with_outliers.tsv b/wyk/data_flats_with_outliers.tsv
new file mode 100644
index 0000000..607342a
--- /dev/null
+++ b/wyk/data_flats_with_outliers.tsv
@@ -0,0 +1,4186 @@
+476118.0 False 3 1 Centrum 78
+349000.0 False 5 0 4 103
+390000.0 False 4 1 Naramowice 100
+530000.0 True 4 3 Jeżyce 70
+364000.0 False 5 0 4 126
+294000.0 False 2 0 Grunwald 46
+277806.0 False 2 1 Dolna 47
+571229.15 False 2 4 Wilda 39
+346777.0 False 3 1 Grunwald 10
+279924.0 False 2 2 Dolna 2
+304000.0 False 2 1 Wilda 95
+604836.0 False 4 5 Grunwald 40
+268229.0 False 2 1 Grunwald 90
+325000.0 False 3 1 Grunwald 54
+274200.0 False 2 0 Grunwald 57
+333694.0 False 3 0 Podolany 38
+249964.0 False 3 0 Nowe 41
+833018.0 False 5 5 Dolna 31
+399406.0 False 3 2 Wilda 89
+277823.0 False 2 4 Podolany 70
+427202.0 False 3 3 Dolna 79
+242751.0 False 2 1 Wilda 40
+324387.0 False 2 9 Grunwald 49
+408707.0 False 3 1 Grunwald 13
+656936.0 False 2 4 Wilda 29
+275000.0 True 2 1 Sołacz 50
+245000.0 True 2 0 Piątkowo 40
+305000.0 True 2 0 Łazarz 60
+861000.0 True 4 1 Łazarz 23
+260000.0 True 2 0 MDM 80
+319000.0 True 2 1 Grunwald 52
+279000.0 True 2 2 Rataje 44
+369000.0 True 2 2 Centrum 51
+329000.0 True 2 3 Nowe 50
+499000.0 True 3 1 Malta 50
+439000.0 True 3 3 Piątkowo 70
+220000.0 True 2 1 Jeżyce 60
+411000.0 True 3 2 Winogrady 50
+305000.0 True 2 1 Winiary 48
+850000.0 True 10 0 Wola 400
+235000.0 True 2 1 Nowe 47
+419000.0 True 2 0 Malta 55
+265000.0 True 3 10 Nowe 48
+385000.0 True 2 2 Piątkowo 50
+714000.0 True 3 2 Malta 84
+289000.0 True 2 3 Winogrady 10
+459000.0 True 2 3 Jeżyce 32
+420000.0 True 3 1 Jeżyce 60
+375000.0 True 3 3 Wilda 30
+310000.0 True 4 1 Winogrady 90
+306000.0 True 3 4 Grunwald 20
+399000.0 True 3 0 Pokrzywno 90
+355000.0 True 2 0 Podolany 93
+415000.0 True 4 3 Jeżyce 78
+350000.0 True 2 3 Grunwald 50
+350000.0 True 3 0 Naramowickie 10
+490000.0 True 4 1 Naramowice 99
+289000.0 True 2 2 Jeżyce 54
+360000.0 True 3 1 Sołacz 65
+329000.0 True 2 3 Nowe 90
+294990.0 True 2 4 Jeżyce 6
+314990.0 True 2 4 Jeżyce 82
+330000.0 True 2 3 Chwaliszewo 56
+395000.0 True 3 3 Wilda 75
+245000.0 True 2 2 Dębiec 45
+229000.0 True 2 0 Bonin 80
+247000.0 True 3 3 Grunwald 49
+1650000.0 True 4 0 Jeżyce 158
+400000.0 False 4 0 Grunwald 81
+400000.0 False 4 0 Grunwald 60
+239000.0 True 2 0 Rataje 36
+350000.0 True 2 11 Rataje 45
+270000.0 True 3 4 Rataje 20
+265999.0 True 2 3 Grunwald 50
+303867.0 False 2 2 Wilda 7
+375000.0 True 3 3 Stare 50
+299000.0 True 3 0 Podolany 94
+385000.0 True 2 1 Rataje 48
+249000.0 True 2 2 Grunwald 46
+288000.0 True 3 4 Winogrady 30
+332000.0 True 3 8 Rataje 63
+347193.0 False 3 11 Grunwald 7
+225000.0 True 2 2 Wilda 50
+255000.0 True 3 0 Grunwald 53
+419000.0 True 3 4 Dębiec 60
+330000.0 True 3 3 Winiary 53
+249441.0 False 2 2 Winogrady 51
+304133.0 False 3 3 Winogrady 27
+250100.0 False 2 1 Winogrady 41
+238948.0 False 2 4 Winogrady 54
+345800.0 False 3 1 Jeżyce 53
+264256.0 False 2 2 Jeżyce 29
+310000.0 True 2 2 Stare 74
+295000.0 True 3 4 Grunwald 45
+399000.0 True 4 3 Stare 40
+489000.0 True 4 2 Centrum 120
+384000.0 True 4 0 Grunwald 42
+290000.0 True 3 2 Winogrady 60
+270000.0 True 2 6 Piątkowo 46
+345000.0 False 5 1 Komorniki 97
+368000.0 True 2 1 Grunwald 33
+339000.0 True 2 1 Grunwald 66
+260000.0 True 2 5 Nowe 42
+780000.0 True 5 0 Winogrady 54
+398000.0 True 3 1 Jeżyce 72
+720000.0 True 3 1 Grunwald 60
+280000.0 True 2 4 Łazarz 20
+495000.0 False 4 0 Nowe 7
+384000.0 True 3 2 Piątkowo 69
+219900.0 True 2 3 Wilda 45
+249000.0 True 2 1 Wilda 65
+325000.0 True 2 3 Stare 50
+265000.0 True 2 11 Rataje 80
+384000.0 True 3 2 Piątkowo 90
+290000.0 True 3 2 Winogrady 47
+209000.0 True 2 0 Dębiec 37
+289000.0 True 3 0 Rataje 50
+310000.0 True 3 4 Rataje 62
+699000.0 True 2 1 Grunwald 68
+195000.0 True 2 1 Grunwald 31
+339000.0 True 3 1 Nowe 88
+359000.0 True 3 4 Nowe 10
+299000.0 True 2 0 Jeżyce 60
+460000.0 True 4 2 Sołacz 68
+355647.0 False 3 3 Dolna 89
+363000.0 False 3 0 Junikowo 45
+343400.0 True 2 1 Wilda 68
+259000.0 True 2 2 Nowe 40
+525000.0 True 4 3 Nowe 88
+289000.0 True 2 7 Winiary 49
+445000.0 False 5 0 Plewiska 104
+305000.0 True 3 4 Rataje 63
+309000.0 True 3 9 Rataje 64
+355000.0 False 3 0 Junikowo 64
+429000.0 True 3 0 Jeżyce 30
+487000.0 True 3 0 Stare 83
+350000.0 True 4 1 Stare 50
+270000.0 True 2 2 Sołacz 49
+439000.0 True 2 3 Jeżyce 60
+350000.0 False 4 0 Plewiska 80
+479000.0 True 3 3 Grunwald 23
+695000.0 True 3 2 Jeżyce 71
+249000.0 True 2 1 Grunwald 56
+295000.0 True 2 0 Winogrady 36
+240000.0 True 2 5 Rataje 43
+847000.0 True 4 2 Piątkowo 113
+298000.0 True 3 1 Rataje 30
+406550.0 True 3 1 Jeżyce 23
+349000.0 True 2 4 Jeżyce 89
+299000.0 True 2 2 Grunwald 35
+529900.0 True 4 1 Podolany 103
+779000.0 True 3 2 Stary 113
+297600.0 False 2 3 Winogrady 47
+336474.0 False 3 4 Winogrady 27
+285678.0 False 2 2 Winogrady 42
+290970.0 False 2 0 Winogrady 60
+295120.0 False 2 1 Winogrady 60
+285200.0 False 2 1 Winogrady 46
+291838.0 False 2 1 Starołęka 55
+348750.0 False 2 3 Centrum 47
+349668.0 False 2 1 Garbary 44
+244071.0 False 2 2 Starołęka 52
+311515.0 False 2 4 Grunwald 49
+296810.0 False 2 2 Grunwald 30
+321656.0 False 2 1 Winogrady 88
+286445.0 False 2 2 Winogrady 49
+299513.0 False 2 1 Starołęka 85
+349785.0 False 3 1 Malta 52
+442827.0 False 4 2 Starołęka 14
+302176.0 False 2 2 Malta 45
+285383.0 False 2 4 Winogrady 37
+377200.0 False 3 3 Grunwald 66
+327584.0 False 3 3 Grunwald 21
+308039.0 False 2 0 Winogrady 21
+377917.0 False 3 2 Grunwald 44
+277039.0 False 2 1 Malta 66
+285678.0 False 2 2 Winogrady 42
+186600.0 False 2 2 Starołęka 62
+156085.0 False 2 2 Głuszyna 54
+225316.0 False 2 0 Starołęka 33
+303287.0 False 2 3 Grunwald 13
+280860.0 False 2 1 Winogrady 30
+272800.0 False 2 5 Winogrady 44
+357000.0 True 3 3 Rataje 90
+210000.0 True 2 2 Grunwald 40
+399000.0 True 3 5 Grunwald 81
+363000.0 True 3 2 Grunwald 77
+400000.0 True 3 3 Stare 70
+420000.0 True 3 1 Podolany 85
+375000.0 False 5 0 Plewiska 96
+465000.0 False 5 0 Plewiska 117
+259000.0 True 3 4 Piątkowo 60
+229000.0 True 4 3 Wilda 54
+330000.0 True 2 3 Wilda 53
+389000.0 True 3 3 Stare 49
+275000.0 True 2 9 Winogrady 10
+289000.0 True 2 2 Naramowice 50
+279000.0 True 3 4 Stare 50
+139000.0 True 3 1 Nowe 56
+275000.0 True 2 4 Jeżyce 90
+229000.0 True 2 4 Grunwald 30
+378000.0 True 2 4 Wilda 52
+299000.0 True 2 2 Grunwald 35
+299000.0 True 2 4 Centrum 50
+695000.0 True 5 0 Jeżyce 150
+323000.0 True 2 0 Jeżyce 54
+235000.0 True 2 12 Stare 38
+335000.0 True 3 1 Grunwald 70
+416000.0 True 3 3 Nowe 64
+275000.0 True 2 9 Stare 10
+315000.0 True 3 4 Winogrady 54
+275000.0 True 2 1 Sołacz 39
+249000.0 True 2 4 Grunwald 43
+268000.0 True 3 4 Jeżyce 43
+179000.0 True 3 2 Wilda 35
+429000.0 True 3 4 Świerczewo 60
+399000.0 True 3 1 Bonin 67
+290000.0 True 3 2 Stare 48
+799000.0 True 4 2 Stare 114
+375000.0 False 4 0 Plewiska 96
+354000.0 True 3 1 Piątkowo 60
+185000.0 True 2 8 Dębiec 50
+385000.0 True 4 3 Stare 80
+549000.0 True 4 5 Jeżyce 98
+326000.0 True 2 1 Winogrady 39
+263000.0 True 2 10 Śródka 48
+643000.0 True 4 0 Naramowice 60
+379000.0 True 3 1 Naramowice 20
+219000.0 True 2 1 Łazarz 35
+299000.0 True 2 0 Dębiec 52
+365000.0 True 2 5 Wilda 30
+410000.0 True 2 9 Rataje 50
+385000.0 True 2 1 Nowe 48
+310000.0 True 3 0 Grunwald 60
+375000.0 True 3 4 Wilda 40
+389000.0 True 3 0 Wilda 69
+269965.0 False 3 0 Nowe 81
+233000.0 True 2 3 Grunwald 70
+240000.0 True 2 3 Grunwald 80
+319000.0 True 3 4 Rataje 63
+315000.0 True 2 4 Jeżyce 25
+351648.0 True 3 4 Jeżyce 28
+305000.0 True 2 4 Jeżyce 55
+379000.0 True 3 0 Naramowice 64
+379000.0 True 3 0 Piątkowo 64
+250000.0 True 3 3 Rataje 53
+214000.0 True 2 3 Wilda 43
+390000.0 True 2 0 Nowe 61
+185000.0 True 2 11 Wilda 38
+435000.0 True 3 1 Junikowo 70
+395000.0 True 2 0 Grunwald 52
+390000.0 True 3 2 Podolany 68
+275000.0 True 2 5 Naramowice 45
+369000.0 True 3 0 Piątkowo 64
+295000.0 True 2 0 Stare 44
+275000.0 True 2 13 Rataje 80
+245000.0 True 2 12 Rataje 50
+429000.0 True 4 1 Rataje 70
+339000.0 True 3 1 Rataje 67
+290000.0 True 3 3 Rataje 50
+235000.0 True 2 0 Wilda 55
+449000.0 True 4 2 Grunwald 90
+695000.0 True 3 2 Jeżyce 25
+555000.0 True 4 0 Stare 20
+182000.0 True 2 2 Stare 70
+380000.0 True 4 6 Stare 90
+450000.0 True 6 4 Wilda 90
+283500.0 True 2 0 Stare 50
+350550.0 True 3 4 Stare 50
+395000.0 True 3 0 Grunwald 70
+425000.0 True 4 6 Rataje 85
+590000.0 True 4 3 Rataje 90
+349000.0 True 4 0 Rataje 84
+695000.0 True 3 2 Jeżyce 25
+329000.0 True 3 3 Piątkowo 60
+265000.0 True 3 10 Śródka 49
+229000.0 True 2 1 Stare 37
+399000.0 True 3 5 Łazarz 68
+249000.0 True 2 1 Nowe 49
+305000.0 True 2 1 Winiary 48
+326000.0 True 2 1 Sołacz 39
+415000.0 True 4 7 Piątkowo 63
+295000.0 True 2 2 Grunwald 50
+519000.0 True 4 3 Wilda 104
+105000.0 True 2 3 Nowe 50
+375000.0 True 3 0 Naramowice 68
+330000.0 True 3 4 Rataje 59
+487000.0 True 3 0 Naramowice 83
+899000.0 True 4 0 Stare 100
+218000.0 True 2 7 Winogrady 38
+395000.0 True 3 1 Grunwald 100
+345000.0 True 3 1 Winogrady 17
+489000.0 True 2 5 Centrum 53
+978000.0 True 4 5 Centrum 106
+339000.0 True 3 1 Żegrze 88
+350000.0 True 3 0 Winogrady 10
+259000.0 True 2 3 Żegrze 49
+265000.0 True 2 0 Dębiec 50
+569000.0 True 4 0 Wilda 50
+275000.0 True 2 1 Sołacz 50
+382280.0 True 3 3 Centrum 80
+259000.0 True 2 3 Łazarz 47
+425000.0 True 4 6 Rataje 85
+429000.0 True 3 4 Rataje 79
+382280.0 True 3 3 Stare 30
+325000.0 True 2 3 Stare 56
+289000.0 True 2 2 Jeżyce 42
+779000.0 True 3 2 Centrum 114
+445000.0 True 2 3 Jeżyce 60
+390000.0 True 3 3 Wilda 50
+339000.0 True 3 10 Rataje 10
+235000.0 True 2 0 Śródka 47
+655000.0 True 3 4 Stare 60
+655000.0 True 2 2 Jeżyce 10
+283340.0 True 2 0 Stare 70
+640000.0 True 3 2 Stare 47
+370000.0 True 3 4 Stare 84
+425000.0 True 2 9 Nowe 50
+282880.0 True 2 3 Stare 20
+561000.0 True 2 4 Stare 50
+360000.0 True 4 0 Grunwald 66
+429000.0 True 3 4 Wilda 47
+359400.0 True 3 1 Stare 72
+1115000.0 True 2 2 Grunwald 7
+497400.0 True 3 0 Wilda 48
+604395.0 True 5 1 Wilda 31
+1199000.0 True 8 3 Stare 282
+405000.0 True 3 1 Stare 80
+330615.0 True 2 2 Stare 79
+255000.0 True 2 3 Wilda 52
+300000.0 True 2 1 Stare 23
+850000.0 True 2 7 Stare 69
+480000.0 True 3 0 Stare 30
+350000.0 True 2 0 Stare 50
+1140000.0 True 6 0 Stare 40
+290970.0 True 2 0 Stare 60
+800000.0 True 4 3 Stare 103
+345000.0 True 2 3 Jeżyce 50
+514000.0 True 4 1 Jeżyce 120
+451000.0 True 3 2 Wilda 30
+659500.0 True 4 0 Grunwald 44
+558000.0 True 5 1 Wilda 2
+649000.0 True 4 0 Winogrady 80
+319000.0 True 2 4 Grunwald 54
+290000.0 True 2 4 Wilda 35
+325000.0 True 3 14 Rataje 80
+249000.0 True 2 5 Centrum 36
+224000.0 True 2 0 Łazarz 39
+295000.0 True 3 0 Grunwald 53
+379000.0 True 3 0 Rataje 30
+305000.0 True 2 1 Winogrady 48
+269000.0 True 2 1 Centrum 30
+240000.0 True 2 16 Rataje 36
+269000.0 True 2 2 Dolna 38
+448995.0 True 2 3 Jeżyce 66
+350000.0 True 2 3 Jeżyce 70
+469000.0 False 4 0 Plewiska 30
+369000.0 True 2 2 Jeżyce 90
+350000.0 True 2 0 Naramowice 60
+330000.0 True 3 4 Rataje 59
+315000.0 True 2 1 Grunwald 60
+349000.0 True 2 3 Piątkowo 60
+309000.0 True 2 0 Grunwald 55
+375000.0 True 3 1 Nowe 62
+280000.0 True 3 9 Jeżyce 49
+570000.0 True 3 5 Grunwald 60
+439000.0 True 4 2 Łazarz 40
+449000.0 True 4 1 Górczyn 90
+550000.0 True 4 2 Grunwald 107
+249000.0 True 2 5 Garbary 20
+519000.0 True 3 0 Nowe 99
+548000.0 True 3 1 Grunwald 84
+299000.0 True 3 2 Grunwald 48
+720000.0 True 4 7 Grunwald 91
+368000.0 True 2 2 Wilda 67
+325000.0 True 3 0 Grunwald 64
+499000.0 True 4 1 Naramowice 96
+269000.0 True 3 4 Rataje 48
+229000.0 True 2 1 Stare 40
+319000.0 True 2 2 Jeżyce 56
+200000.0 True 2 2 Dębiec 40
+240000.0 True 3 4 Dębiec 44
+235000.0 True 2 0 Nowe 47
+240000.0 True 3 4 Dębiec 44
+240000.0 True 3 4 Dębiec 44
+235000.0 True 2 0 Nowe 47
+745000.0 True 6 2 Grunwald 149
+399900.0 True 4 2 Nowe 66
+480000.0 True 3 1 Grunwald 40
+268000.0 True 3 4 Jeżyce 50
+308000.0 True 3 0 Piątkowo 63
+270000.0 True 3 4 Rataje 48
+250000.0 True 2 6 Sołacz 71
+349000.0 True 3 3 Rataje 63
+229000.0 True 2 12 Winogrady 10
+299000.0 True 3 2 Dębiec 70
+329000.0 True 3 3 Piątkowo 60
+289000.0 True 4 4 Winogrady 48
+590000.0 True 7 1 Smochowice 150
+479000.0 True 5 2 Centrum 142
+318400.0 True 3 1 Jeżyce 48
+500203.0 True 4 10 Grunwald 84
+339957.0 True 4 1 Stare 58
+329538.0 True 3 4 Jeżyce 50
+244969.0 True 2 0 Stare 42
+296277.0 True 3 0 Stare 49
+389610.0 True 4 4 Jeżyce 60
+337303.0 True 4 2 Stare 57
+245876.0 True 2 1 Jeżyce 38
+342900.0 True 3 3 Stare 57
+324608.0 True 3 2 Jeżyce 51
+277823.0 True 2 4 Jeżyce 50
+368569.0 True 3 4 Jeżyce 68
+295362.0 True 3 5 Stare 48
+286858.0 True 2 7 Winogrady 49
+292101.0 True 2 1 Grunwald 51
+279554.0 True 2 4 Jeżyce 43
+266320.0 True 2 4 Jeżyce 41
+327584.0 True 3 6 Grunwald 56
+339201.0 True 3 3 Jeżyce 53
+530000.0 True 2 5 Piątkowo 10
+269000.0 True 2 0 Grunwald 46
+237000.0 True 2 2 Dębiec 44
+275000.0 True 2 13 Rataje 49
+384000.0 True 3 2 Piątkowo 70
+339000.0 True 3 0 Rataje 47
+348000.0 True 3 9 Rataje 65
+460000.0 True 3 0 Rataje 73
+330000.0 True 3 4 Rataje 59
+350000.0 True 3 1 Rataje 63
+85000.0 True 3 4 Stare 70
+690000.0 True 4 1 Grunwald 60
+380000.0 True 3 4 Naramowice 52
+309978.0 False 2 2 Centrum 16
+1.0 False 5 0 4 126
+355000.0 True 2 0 Podolany 93
+225000.0 True 2 0 Grunwald 17
+259500.0 True 2 0 Grunwald 55
+289000.0 True 2 6 Winogrady 48
+230000.0 True 2 3 Nowe 47
+1000000.0 False 5 0 4 126
+339000.0 True 3 3 Nowe 90
+949000.0 True 3 4 Śródka 98
+520000.0 True 4 1 Wilda 129
+305000.0 True 2 1 Winiary 48
+318000.0 True 2 4 Piątkowo 20
+385000.0 True 2 0 Nowe 48
+860000.0 True 4 0 Centrum 103
+269000.0 True 2 3 Centrum 37
+445000.0 False 5 0 Luboń 104
+299000.0 True 3 10 Grunwald 10
+325000.0 True 3 7 Rataje 90
+305000.0 True 2 1 Winiary 49
+333000.0 True 3 4 Wilda 8
+275000.0 True 2 4 Rataje 63
+375570.0 False 2 4 Centrum 5
+542141.0 False 3 4 Centrum 53
+365546.0 False 2 4 Centrum 82
+698508.0 False 4 4 Centrum 59
+394787.0 False 2 4 Centrum 71
+597184.0 False 3 4 Centrum 61
+354177.0 False 2 3 Centrum 25
+353537.0 False 2 3 Centrum 17
+509468.0 False 3 3 Centrum 53
+652026.0 False 4 3 Centrum 89
+353457.0 False 2 3 Centrum 16
+356818.0 False 2 3 Centrum 58
+558745.0 False 3 3 Centrum 62
+349668.0 False 2 2 Centrum 15
+481903.0 False 3 2 Centrum 53
+389528.0 False 2 2 Centrum 87
+374216.0 False 2 2 Centrum 71
+534523.0 False 3 2 Centrum 62
+377418.0 False 2 1 Centrum 87
+372651.0 False 2 1 Centrum 5
+505032.0 False 3 1 Centrum 62
+469000.0 True 2 1 Winogrady 30
+339000.0 True 3 1 Rataje 88
+349000.0 True 3 1 Śródka 63
+466395.0 False 4 1 Dolna 65
+468406.0 False 4 2 Dolna 64
+275000.0 True 2 0 Łazarz 52
+395000.0 True 2 1 Naramowice 30
+339000.0 True 3 9 Nowe 65
+177000.0 True 2 2 Dębiec 33
+525000.0 True 4 3 Jeżyce 70
+309000.0 True 2 0 Jeżyce 28
+339000.0 True 2 2 Naramowice 49
+325000.0 True 2 3 Stare 60
+380000.0 True 4 4 Winogrady 80
+368110.44 True 3 2 Nowe 31
+324800.0 True 2 1 Nowe 56
+270000.0 True 2 2 Łazarz 100
+169000.0 True 2 1 Łazarz 44
+460000.0 True 3 4 Wilda 69
+199650.0 True 2 5 Nowe 93
+557338.0 True 3 3 Centrum 7
+290970.0 True 2 4 Górczyn 70
+412438.0 True 3 2 Winogrady 11
+360343.59 True 2 0 Centrum 60
+327127.5 True 2 0 Centrum 50
+194500.0 True 2 3 Nowe 90
+495000.0 True 4 0 Jeżyce 10
+293436.0 False 2 11 Grunwald 16
+333232.0 False 3 7 Grunwald 21
+333232.0 False 3 7 Grunwald 21
+296810.0 False 2 2 Grunwald 30
+296810.0 False 2 2 Grunwald 30
+771672.0 False 4 7 Grunwald 68
+339000.0 True 3 7 Jeżyce 50
+319000.0 True 2 4 Grunwald 20
+290000.0 True 2 4 Grunwald 36
+295000.0 True 2 3 Stare 30
+380931.0 False 3 3 Starołęka 82
+300680.0 False 2 2 Starołęka 54
+300680.0 False 2 2 Starołęka 54
+349668.0 False 2 2 Stare 15
+384000.0 True 3 2 Piątkowo 90
+339000.0 True 3 1 Rataje 88
+285678.0 False 2 1 Winogrady 42
+211190.0 False 2 0 Podolany 78
+247705.0 False 2 1 Piątkowo 74
+211190.0 False 2 0 Piątkowo 78
+247705.0 False 2 1 Podolany 74
+449000.0 False 5 0 Szczepankowo 68
+771672.0 False 4 4 Górczyn 66
+442080.0 False 3 1 Starołęka 68
+302887.0 False 2 4 Górczyn 25
+294840.0 False 2 4 Winogrady 50
+282994.0 False 2 0 Starołęka 59
+442080.0 False 3 1 Starołęka 68
+370597.0 False 2 4 Stare 4
+302887.0 False 2 4 Górczyn 25
+294840.0 False 2 4 Winogrady 50
+225228.0 False 2 5 Rataje 91
+282994.0 False 2 0 Starołęka 59
+242731.0 False 2 0 Podolany 74
+522235.0 False 3 2 Stare 62
+370597.0 False 2 4 Stare 4
+674695.0 False 3 4 Stare 59
+349000.0 False 4 0 Szczepankowo 29
+259015.0 False 2 0 Ogrody 53
+411684.0 False 3 3 Winogrady 17
+282944.0 False 2 0 Starołęka 59
+424377.0 False 4 2 Starołęka 14
+277823.0 False 2 2 Podolany 70
+277823.0 False 2 2 Podolany 70
+460499.0 False 3 1 Stare 51
+460499.0 False 3 1 Stare 51
+557338.0 False 3 3 Stare 4
+481903.0 False 3 2 Centrum 53
+361998.0 False 3 15 Grunwald 20
+310584.0 False 2 1 Nowe 26
+557338.0 False 3 3 Stare 4
+557338.0 False 3 3 Stare 4
+350506.0 False 3 11 Grunwald 20
+368110.0 False 3 2 Nowe 31
+557338.0 False 3 3 Stare 4
+342021.0 False 2 4 Nowe 93
+353379.0 False 3 12 Grunwald 20
+429699.0 False 3 15 Grunwald 62
+350506.0 False 3 11 Grunwald 20
+341682.0 False 2 10 Grunwald 7
+361998.0 False 3 15 Grunwald 20
+341682.0 False 2 10 Grunwald 7
+481903.0 False 3 2 Centrum 53
+310584.0 False 2 1 Nowe 26
+368110.0 False 3 2 Nowe 31
+162525.0 False 2 0 Głuszyna 55
+311488.0 False 3 2 Jeżyce 24
+336804.0 False 2 3 Jeżyce 4
+382074.0 False 3 2 Jeżyce 89
+195000.0 True 2 1 Łazarz 31
+385000.0 True 3 0 Grunwald 66
+495000.0 True 4 0 Jeżyce 86
+399000.0 True 2 1 Jeżyce 28
+369000.0 True 2 5 Winogrady 62
+172000.0 True 2 0 Starołęka 32
+599000.0 True 3 3 Grunwald 60
+620000.0 True 3 2 Naramowice 98
+495000.0 True 5 1 Naramowice 98
+460000.0 True 3 4 Wilda 69
+270000.0 True 2 0 Nowe 41
+263581.0 True 2 5 Stare 43
+279554.0 True 2 4 Jeżyce 43
+295000.0 True 2 1 Jeżyce 30
+779000.0 True 3 2 Stare 113
+305000.0 True 2 1 Sołacz 48
+385000.0 True 3 5 Centrum 50
+1040000.0 True 2 10 Centrum 79
+570000.0 True 4 0 Centrum 137
+468000.0 True 2 3 Grunwald 60
+1200000.0 True 4 2 Jeżyce 188
+233000.0 True 2 3 Grunwald 38
+315000.0 True 2 7 Rataje 47
+359000.0 True 3 2 Podolany 56
+269000.0 True 2 1 Centrum 34
+240000.0 True 2 3 Grunwald 38
+442150.0 True 2 3 Stare 75
+328000.0 True 3 0 Winogrady 48
+399700.0 True 3 1 Puszczykowo 74
+499000.0 True 3 3 Centrum 109
+529000.0 True 4 0 Piątkowo 115
+565000.0 True 3 1 Stary 95
+499000.0 True 3 1 Suchy 95
+517000.0 True 4 1 Centrum 138
+539000.0 True 4 2 Jeżyce 110
+330000.0 True 2 4 Wilda 50
+349000.0 True 3 3 Piątkowo 60
+359000.0 True 3 2 Podolany 10
+339000.0 True 4 5 Grunwald 74
+219000.0 True 2 2 Grunwald 38
+279000.0 True 2 2 Wilda 30
+489000.0 True 2 8 Centrum 4
+409000.0 True 3 1 Nowe 90
+245000.0 True 2 0 Piątkowo 40
+315000.0 True 2 7 Rataje 47
+395000.0 True 4 0 Grunwald 60
+239000.0 True 2 0 Rataje 48
+280250.0 True 2 0 Górczyn 50
+316355.0 True 2 4 Centrum 67
+276610.0 True 2 4 Centrum 80
+442002.0 True 2 3 Centrum 73
+316498.0 True 2 2 Centrum 77
+300160.0 True 2 3 Winogrady 90
+347090.0 True 3 1 Winogrady 90
+286091.0 True 2 3 Winogrady 49
+442150.0 True 2 2 Centrum 75
+270000.0 True 3 1 Starołęka 30
+319900.0 True 2 1 Grunwald 52
+695000.0 True 3 2 Jeżyce 71
+250000.0 True 2 6 Grunwald 31
+350000.0 True 3 7 Piątkowo 63
+475000.0 True 3 1 Naramowice 68
+535000.0 True 2 2 Stare 55
+425000.0 True 3 1 Piątkowo 74
+349000.0 True 3 3 Rataje 63
+495000.0 True 3 1 Łazarz 64
+495000.0 True 4 1 Naramowice 98
+499000.0 True 5 0 Grunwald 130
+659200.0 True 4 3 Łazarz 103
+510000.0 True 5 1 Naramowice 98
+360000.0 True 2 5 Grunwald 41
+249000.0 True 2 5 Centrum 36
+1950000.0 True 3 5 Centrum 143
+313000.0 True 2 4 Piątkowo 49
+250000.0 True 2 3 Wilda 39
+430000.0 True 2 2 Wilda 46
+239000.0 True 2 8 Winogrady 10
+312259.0 True 2 6 Winogrady 51
+329539.0 True 3 4 Jeżyce 50
+242134.0 True 2 0 Jeżyce 38
+246553.0 True 2 1 Stare 40
+345241.0 True 4 3 Stare 58
+242730.0 True 2 0 Jeżyce 50
+295000.0 True 2 1 Nowe 40
+555000.0 True 4 0 Stare 123
+350000.0 True 3 0 Stare 72
+310584.0 False 2 1 Nowe 26
+162525.0 False 2 0 Głuszyna 55
+289170.0 False 2 0 Winogrady 90
+332940.0 False 2 2 Winogrady 70
+334610.0 False 2 1 Winogrady 9
+298980.0 False 2 5 Winogrady 30
+318645.0 False 2 2 Winogrady 23
+228144.0 False 3 2 Głuszyna 56
+557338.0 False 3 3 Stare 4
+557338.0 False 3 3 Stare 4
+533745.0 False 5 2 Starołęka 4
+321285.0 False 2 4 Winogrady 30
+269000.0 True 2 3 Jeżyce 81
+279000.0 True 2 5 Jeżyce 53
+449000.0 False 5 0 Szczepankowo 68
+460499.0 False 3 1 Stare 51
+557338.0 False 3 3 Stare 4
+455348.0 False 3 0 Stare 61
+460499.0 False 3 1 Stare 51
+368712.0 False 2 5 Stare 90
+302887.0 False 2 4 Górczyn 25
+282994.0 False 2 0 Starołęka 59
+522235.0 False 3 2 Stare 62
+370597.0 False 2 4 Stare 4
+674695.0 False 3 4 Stare 59
+442080.0 False 3 1 Starołęka 68
+771672.0 False 4 4 Górczyn 66
+302887.0 False 2 4 Górczyn 25
+225228.0 False 2 5 Rataje 91
+284618.0 False 2 3 Nowe 55
+297420.0 False 2 3 Grunwald 24
+370597.0 False 2 4 Stare 4
+242731.0 False 2 0 Podolany 74
+368568.0 False 3 4 Podolany 38
+522235.0 False 3 2 Stare 62
+442080.0 False 3 1 Starołęka 68
+305676.0 False 2 5 Winogrady 52
+460499.0 False 3 1 Stare 51
+429699.0 False 3 15 Grunwald 62
+341682.0 False 2 10 Grunwald 7
+481903.0 False 3 2 Centrum 53
+368110.0 False 3 2 Nowe 31
+332940.0 False 2 2 Winogrady 70
+162525.0 False 2 0 Głuszyna 55
+318645.0 False 2 2 Winogrady 23
+228144.0 False 3 2 Głuszyna 56
+318645.0 False 2 2 Winogrady 23
+325000.0 True 3 1 Nowe 90
+319000.0 True 2 1 Jeżyce 67
+339000.0 True 3 9 Rataje 65
+310000.0 True 2 3 Nowe 38
+756000.0 True 4 2 Grunwald 100
+265000.0 True 2 10 Śródka 49
+350000.0 True 2 0 Naramowice 49
+244970.0 True 2 0 Stare 42
+238948.0 True 2 4 Stare 39
+377652.0 True 4 6 Jeżyce 57
+324609.0 True 3 2 Jeżyce 51
+339000.0 True 3 9 Nowe 65
+435000.0 True 3 1 Grunwald 10
+395000.0 True 4 0 Grunwald 60
+310000.0 True 2 2 Jeżyce 55
+235000.0 True 2 1 Starołęka 47
+210000.0 True 2 2 Grunwald 40
+299000.0 True 2 0 Dębiec 52
+305000.0 True 3 10 Piątkowo 40
+180000.0 True 2 6 Dębiec 50
+245488.0 True 2 0 Jeżyce 37
+242407.0 True 2 0 Jeżyce 36
+347095.0 True 3 1 Winogrady 57
+285383.0 True 2 4 Winogrady 48
+289172.0 True 2 0 Stare 46
+301620.0 True 2 5 Stare 46
+247706.0 True 2 1 Jeżyce 50
+278048.0 True 2 3 Jeżyce 50
+333693.0 True 3 1 Jeżyce 68
+235000.0 True 2 1 Głuszyna 47
+369000.0 True 2 3 Wilda 46
+350000.0 True 2 4 Jeżyce 56
+319000.0 True 2 4 Grunwald 47
+279000.0 True 2 1 Podolany 63
+290000.0 True 3 2 Winogrady 48
+235000.0 True 2 1 Nowe 47
+446000.0 True 2 1 Rataje 52
+225288.0 False 2 1 Rataje 91
+287882.0 False 2 1 Starołęka 85
+349000.0 False 4 0 Szczepankowo 29
+285678.0 False 2 1 Winogrady 42
+353275.0 False 2 4 Grunwald 49
+297421.0 False 2 3 Grunwald 24
+156085.0 False 2 4 Nowe 54
+286445.0 True 2 2 Winogrady 55
+285678.0 True 2 1 Winogrady 42
+302985.59 True 2 4 Grunwald 18
+302038.41 True 3 1 Grunwald 2
+495782.25 True 4 7 Grunwald 99
+405103.97 True 4 1 Grunwald 34
+426416.78 True 4 6 Grunwald 20
+319047.97 True 3 3 Grunwald 21
+380480.0 True 3 4 Grunwald 60
+244071.0 False 2 1 Nowe 93
+156085.0 False 2 4 Nowe 54
+404000.0 True 3 2 Rataje 70
+315000.0 True 3 11 Stare 50
+345000.0 True 2 3 Jeżyce 50
+321904.0 False 2 4 Winogrady 92
+270000.0 True 2 0 Zawady 41
+230000.0 True 2 6 Dębiec 45
+349000.0 True 4 3 Centrum 20
+277000.0 True 3 0 Centrum 40
+338700.0 True 3 2 Jeżyce 45
+619000.0 True 3 2 Winogrady 100
+486243.0 True 2 1 Łazarz 60
+413044.03 True 3 12 Grunwald 62
+324387.0 True 2 9 Grunwald 49
+338111.0 True 2 15 Grunwald 62
+293436.0 True 2 1 Grunwald 16
+333212.88 True 2 7 Grunwald 21
+267702.41 True 2 3 Grunwald 22
+903965.44 True 4 0 Centrum 80
+1366410.0 True 4 0 Centrum 71
+1155974.38 True 4 1 Centrum 28
+285383.0 True 2 4 Winogrady 37
+260000.0 True 2 0 Stare 79
+270000.0 True 2 2 Jeżyce 49
+1140000.0 True 6 0 Stare 40
+333232.0 False 3 7 Grunwald 21
+297421.0 False 2 3 Grunwald 24
+200460.0 False 2 0 Głuszyna 55
+377418.0 False 2 1 Stare 87
+289800.0 False 2 0 Winogrady 46
+505032.0 False 3 1 Stare 62
+374216.0 False 2 2 Stare 71
+1156054.0 False 4 0 Stare 41
+904041.0 False 3 0 Stare 2
+460849.0 False 3 2 Grunwald 13
+771672.0 False 4 7 Grunwald 68
+296810.0 False 2 2 Grunwald 30
+460499.0 False 3 1 Stare 51
+349668.0 False 2 2 Stare 15
+325206.0 False 2 10 Grunwald 62
+557338.0 False 3 3 Centrum 4
+380931.0 False 3 3 Starołęka 82
+295549.0 False 2 0 Starołęka 59
+302887.0 False 2 4 Górczyn 25
+225228.0 False 2 5 Rataje 91
+302887.0 False 2 4 Górczyn 25
+284618.0 False 2 3 Nowe 55
+297420.0 False 2 3 Grunwald 24
+370597.0 False 2 4 Stare 4
+242731.0 False 2 0 Podolany 74
+522235.0 False 3 2 Stare 62
+368568.0 False 3 4 Podolany 38
+442080.0 False 3 1 Starołęka 68
+305676.0 False 2 5 Winogrady 52
+294840.0 False 2 4 Winogrady 50
+460499.0 False 3 1 Stare 51
+299999.0 True 2 0 Wilda 51
+325000.0 True 3 7 Rataje 64
+395000.0 True 2 0 Grunwald 52
+315000.0 True 2 2 Zawady 52
+299000.0 True 3 2 Winogrady 48
+339000.0 True 3 1 Rataje 67
+290000.0 True 2 4 Grunwald 53
+369000.0 True 3 1 Piątkowo 65
+339000.0 True 3 0 Rataje 47
+265000.0 True 3 1 Winogrady 53
+315000.0 True 3 2 Winogrady 53
+345000.0 True 2 3 Jeżyce 50
+270000.0 True 3 4 Rataje 48
+375000.0 True 3 1 Nowe 62
+1050000.0 True 5 2 Centrum 161
+515000.0 True 3 0 Rataje 69
+428000.0 True 3 3 Centrum 43
+288000.0 True 3 4 Winogrady 47
+240000.0 True 2 2 Dębiec 48
+530000.0 True 2 5 Piątkowo 66
+510000.0 True 5 1 Naramowice 98
+360000.0 True 3 0 Wilda 112
+360000.0 True 4 4 Jeżyce 60
+330000.0 True 2 1 Jeżyce 53
+365000.0 True 2 2 Rataje 45
+460000.0 True 3 0 Rataje 73
+375000.0 True 3 3 Wilda 49
+380000.0 True 4 0 Piątkowo 74
+335000.0 True 3 9 Nowe 65
+379000.0 True 3 4 Rataje 63
+369000.0 True 2 3 Grunwald 64
+275000.0 True 2 2 Naramowice 45
+259000.0 True 2 2 Nowe 42
+299000.0 True 2 4 Nowe 47
+275000.0 True 2 0 Dębiec 50
+950000.0 True 3 4 Nowe 99
+315000.0 True 3 0 Piątkowo 63
+270000.0 True 2 10 Nowe 48
+430000.0 True 3 2 Rataje 64
+413500.0 True 5 4 Winogrady 64
+359000.0 True 3 2 Rataje 65
+410000.0 True 2 5 Rataje 53
+365000.0 True 4 3 Grunwald 68
+295555.0 True 2 1 Jeżyce 45
+224000.0 True 2 0 Górczyn 38
+315000.0 True 2 2 Winogrady 38
+265000.0 True 2 1 Wilda 44
+299000.0 True 2 3 Grunwald 44
+379000.0 True 3 1 Piątkowo 78
+249000.0 True 2 4 Grunwald 43
+295000.0 True 3 0 Grunwald 53
+510000.0 True 3 6 Grunwald 50
+350000.0 True 2 1 Rataje 54
+450000.0 True 4 1 Grunwald 101
+365000.0 True 2 1 Stare 50
+430000.0 True 2 1 Centrum 72
+385560.0 True 2 3 Piątkowo 57
+299000.0 True 2 1 Junikowo 33
+370000.0 True 4 4 Piątkowo 76
+336000.0 True 2 1 Naramowice 46
+369000.0 True 2 3 Jeżyce 55
+595000.0 True 3 0 Naramowice 94
+429000.0 True 3 4 Nowe 79
+489000.0 True 3 0 Jeżyce 65
+295000.0 True 3 2 Grunwald 49
+499000.0 True 4 2 Wilda 120
+305000.0 True 3 3 Winogrady 48
+325000.0 True 3 4 Jeżyce 64
+299817.0 True 2 3 Górczyn 59
+495000.0 True 4 1 Naramowice 98
+370000.0 True 2 13 Rataje 48
+487000.0 True 3 0 Naramowice 72
+299000.0 True 2 5 Grunwald 59
+269000.0 True 3 10 Grunwald 50
+380000.0 True 4 6 Piątkowo 73
+273875.0 True 2 1 Górczyn 13
+275000.0 True 2 13 Rataje 49
+1000000.0 True 5 1 Jeżyce 128
+379999.0 True 2 5 Jeżyce 61
+315000.0 True 3 4 Winogrady 53
+275000.0 True 2 9 Rataje 38
+259000.0 True 2 2 Jeżyce 48
+295000.0 True 2 0 Naramowice 36
+3200.0 True 4 0 Centrum 75
+260000.0 True 2 0 Rataje 46
+1612000.0 True 7 5 Jeżyce 166
+220000.0 True 2 3 Jeżyce 37
+549000.0 True 3 2 Jeżyce 106
+549000.0 True 3 2 Jeżyce 106
+330000.0 True 3 0 Bonin 56
+399000.0 True 2 0 Podolany 63
+220000.0 True 2 4 Grunwald 43
+290000.0 True 2 4 Winogrady 38
+270000.0 True 3 4 Rataje 48
+245000.0 True 2 3 Grunwald 30
+305000.0 True 2 1 Winiary 48
+235000.0 True 2 0 Łazarz 52
+289000.0 True 2 6 Winogrady 48
+495000.0 True 4 1 Naramowice 98
+270000.0 True 3 4 Rataje 48
+510000.0 True 5 1 Naramowice 98
+390000.0 True 3 3 Stare 48
+269000.0 True 2 0 Grunwald 46
+480000.0 True 2 2 Garbary 56
+320000.0 True 2 2 Piątkowo 48
+240000.0 True 2 16 Rataje 36
+355000.0 True 3 3 Łazarz 62
+240000.0 True 2 8 Dębiec 37
+565964.0 True 2 5 Centrum 49
+289000.0 True 2 2 Jeżyce 42
+350000.0 True 2 3 Rataje 50
+550000.0 True 3 1 Grunwald 73
+345000.0 True 3 1 Rataje 78
+259000.0 True 2 5 Grunwald 46
+491520.0 True 4 1 Górczyn 92
+305739.0 True 2 2 Górczyn 53
+269000.0 True 2 2 Dębiec 48
+295000.0 True 2 0 Centrum 44
+384000.0 True 3 2 Piątkowo 69
+375000.0 True 3 2 Rataje 79
+355000.0 True 3 2 Piątkowo 66
+420000.0 True 2 3 Naramowice 59
+237000.0 True 2 2 Dębiec 44
+330000.0 True 3 4 Rataje 59
+405000.0 True 3 1 Antoninek 68
+249900.0 True 2 9 Winogrady 38
+315000.0 True 2 7 Rataje 47
+510000.0 True 3 6 Grunwald 50
+349000.0 True 3 1 Winogrady 51
+339000.0 True 3 1 Rataje 67
+287000.0 True 2 4 Wilda 37
+585000.0 True 3 4 Jeżyce 59
+335000.0 True 3 7 Rataje 63
+289000.0 True 3 4 Winogrady 47
+263000.0 True 3 4 Grunwald 48
+279000.0 True 2 0 Naramowice 43
+292000.0 True 3 2 Winogrady 48
+399000.0 True 2 3 Centrum 60
+320000.0 True 3 0 Rataje 56
+287000.0 True 2 10 Winogrady 46
+350000.0 True 3 6 Jeżyce 64
+999000.0 True 3 4 Nowe 99
+510660.0 True 4 1 Górczyn 11
+363258.0 True 2 1 Górczyn 59
+650000.0 True 4 8 Rataje 100
+245000.0 True 3 0 Grunwald 45
+200000.0 True 3 4 Nowe 44
+237000.0 True 2 10 Górczyn 38
+259000.0 True 2 3 Rataje 49
+310000.0 True 2 2 Zawady 52
+289000.0 True 2 2 Nowe 48
+405000.0 True 4 2 Rataje 71
+747000.0 True 3 7 Rataje 84
+379000.0 True 3 2 Podolany 56
+495000.0 True 5 1 Naramowice 98
+265000.0 True 2 4 Grunwald 43
+289575.0 True 2 0 Jeżyce 43
+495000.0 True 3 0 Centrum 63
+380000.0 True 4 1 Piątkowo 76
+250000.0 True 2 4 Rataje 44
+335000.0 True 3 4 Winogrady 56
+580000.0 True 4 3 Sołacz 96
+549000.0 True 3 2 Jeżyce 106
+200000.0 True 2 0 Rataje 30
+736933.0 True 3 0 Jeżyce 67
+275000.0 True 2 0 Naramowice 50
+290000.0 True 2 2 Dębiec 40
+620000.0 True 3 2 Naramowice 98
+299000.0 True 2 0 Dębiec 48
+275000.0 True 2 1 Sołacz 38
+279000.0 True 2 1 Naramowice 52
+379999.0 True 3 2 Wilda 67
+354454.0 True 2 3 Górczyn 17
+379000.0 True 3 2 Podolany 56
+800000.0 True 3 3 Chwaliszewo 70
+350000.0 True 3 0 Naramowice 59
+420000.0 True 2 5 Rataje 63
+260000.0 True 3 4 Centrum 44
+470000.0 True 3 1 Rataje 70
+360000.0 True 2 0 Winogrady 48
+320000.0 True 2 3 Chwaliszewo 56
+260000.0 True 2 0 Rataje 46
+397000.0 True 3 2 Jeżyce 74
+439000.0 True 3 1 Junikowo 70
+430000.0 True 3 5 Grunwald 60
+349000.0 True 3 2 Górczyn 55
+450000.0 True 3 0 Winogrady 70
+290000.0 True 2 6 Jeżyce 49
+499000.0 True 3 1 Rataje 64
+319000.0 True 3 1 Piątkowo 63
+489780.0 True 4 2 Górczyn 63
+453600.0 True 2 3 Naramowice 56
+525000.0 True 4 3 Jeżyce 104
+950000.0 True 3 4 Nowe 99
+459000.0 True 3 4 Dębiec 60
+370000.0 True 4 11 Rataje 74
+830000.0 True 3 1 Grunwald 91
+385500.0 True 2 6 Dębiec 38
+409000.0 True 3 1 Malta 61
+275000.0 True 3 7 Wilda 53
+300000.0 True 2 4 Winogrady 53
+335400.0 True 2 1 Łazarz 51
+560000.0 True 2 8 Grunwald 55
+855000.0 True 4 5 Jeżyce 96
+399000.0 True 3 1 Winiary 66
+750000.0 True 4 0 Kobylepole 105
+459000.0 True 3 4 Dębiec 60
+275000.0 True 2 0 Naramowice 50
+925000.0 True 5 1 Stare 105
+350000.0 True 3 3 Jeżyce 70
+550000.0 True 2 1 Naramowice 57
+345000.0 True 2 0 Centrum 42
+576520.0 True 2 5 Centrum 50
+285000.0 True 2 4 Naramowice 42
+395000.0 True 3 10 Piątkowo 67
+516000.0 True 3 3 Naramowice 75
+620000.0 True 3 2 Naramowice 98
+240000.0 True 2 3 Grunwald 38
+350000.0 True 2 0 Naramowice 48
+390000.0 True 3 2 Podolany 68
+339000.0 True 3 9 Rataje 65
+659000.0 True 5 0 Podolany 135
+670000.0 True 4 3 Grunwald 81
+390000.0 True 3 2 Podolany 68
+420000.0 True 2 1 Naramowice 62
+288000.0 True 3 4 Winogrady 47
+326000.0 True 2 0 Jeżyce 55
+450000.0 True 3 0 Grunwald 75
+354000.0 True 3 1 Naramowice 60
+279000.0 True 2 0 Piątkowo 48
+449900.0 True 3 0 Naramowice 71
+285000.0 True 2 11 Winogrady 47
+690000.0 True 4 5 Grunwald 107
+380000.0 True 3 0 Centrum 55
+329000.0 True 2 3 Nowe 50
+510000.0 True 5 1 Naramowice 98
+325000.0 True 3 1 Głuszyna 63
+269000.0 True 2 3 Grunwald 47
+215000.0 True 2 0 Wilda 36
+285000.0 True 2 4 Wilda 35
+390000.0 True 4 4 Piątkowo 74
+295000.0 True 2 4 Stare 33
+245000.0 True 2 0 Stare 44
+490000.0 True 4 3 Sołacz 83
+200000.0 True 2 0 Głuszyna 52
+379000.0 True 2 0 Nowe 56
+290000.0 True 2 5 Winogrady 42
+235000.0 True 2 3 Winogrady 38
+750000.0 True 2 9 Centrum 54
+385000.0 True 2 0 Naramowice 50
+489000.0 True 3 3 Grunwald 104
+290000.0 True 3 2 Winogrady 60
+280000.0 True 3 2 Winogrady 47
+280000.0 True 3 2 Winogrady 47
+385000.0 True 2 1 Nowe 48
+378000.0 True 2 1 Grunwald 50
+460499.0 True 3 1 Centrum 51
+481103.0 True 3 1 Centrum 51
+455348.0 True 3 0 Centrum 61
+348750.0 True 2 3 Centrum 50
+194000.0 True 2 2 Nowe 80
+360288.0 True 2 1 Centrum 60
+368712.0 True 2 0 Centrum 90
+244071.0 True 2 2 Nowe 93
+390312.0 True 2 3 Centrum 60
+430000.0 True 2 2 Wilda 38
+225000.0 True 2 3 Grunwald 41
+720000.0 True 4 0 Centrum 163
+475000.0 True 4 1 Grunwald 90
+585000.0 True 3 1 Centrum 16
+319000.0 True 3 4 Winogrady 53
+949000.0 True 3 4 Śródka 98
+233000.0 True 2 3 Grunwald 39
+299000.0 True 2 1 Centrum 11
+211743.0 False 2 4 Starołęka 33
+208382.0 False 2 3 Starołęka 33
+311283.0 False 3 4 Starołęka 3
+413592.0 False 3 2 Starołęka 72
+345000.0 True 4 3 Grunwald 70
+317880.0 False 2 2 Grunwald 98
+317880.0 False 2 2 Grunwald 98
+317880.0 False 2 2 Grunwald 98
+495723.0 False 4 9 Grunwald 99
+317880.0 False 2 2 Grunwald 98
+495723.0 False 3 9 Grunwald 99
+429699.0 False 3 15 Grunwald 62
+470000.0 True 3 2 Sołacz 68
+302887.0 False 2 4 Górczyn 25
+284618.0 False 2 3 Nowe 55
+225228.0 False 2 5 Rataje 91
+282994.0 False 2 0 Starołęka 59
+522235.0 False 3 2 Stare 62
+294840.0 False 2 4 Winogrady 50
+460499.0 False 3 1 Stare 51
+305676.0 False 2 5 Winogrady 52
+442080.0 False 3 1 Starołęka 68
+242731.0 False 2 0 Podolany 74
+370597.0 False 2 4 Stare 4
+297420.0 False 2 3 Grunwald 24
+342021.0 False 2 4 Nowe 93
+429699.0 False 3 15 Grunwald 62
+341682.0 False 2 10 Grunwald 7
+368110.0 False 3 2 Nowe 31
+162525.0 False 2 0 Głuszyna 55
+228144.0 False 3 2 Głuszyna 56
+557338.0 False 3 3 Stare 4
+557338.0 False 3 3 Stare 4
+310584.0 False 2 1 Nowe 26
+210000.0 True 2 2 Zawady 42
+85000.0 True 2 0 Zawady 40
+145000.0 True 2 1 Zawady 61
+339000.0 True 3 9 Nowe 65
+384000.0 True 3 2 Piątkowo 70
+215000.0 True 2 2 Łazarz 34
+295000.0 True 3 0 Grunwald 20
+295000.0 True 3 0 Grunwald 20
+339000.0 True 3 1 Rataje 67
+247000.0 True 3 3 Raszyn 70
+245000.0 True 2 3 Grunwald 30
+245000.0 True 2 2 Dębiec 30
+305000.0 True 3 4 Rataje 53
+308000.0 True 3 0 Piątkowo 63
+247000.0 True 3 3 Grunwald 70
+155481.0 True 2 0 Stare 88
+350000.0 True 2 0 Stare 60
+240000.0 True 2 3 Grunwald 37
+339000.0 True 3 1 Rataje 88
+265000.0 True 2 1 Jeżyce 66
+259999.0 True 2 4 Rataje 44
+225288.0 False 2 1 Rataje 91
+247000.0 True 3 3 Grunwald 70
+315000.0 True 3 4 Winogrady 50
+239000.0 True 2 8 Winogrady 10
+255000.0 True 2 1 Centrum 48
+382000.0 True 3 3 Centrum 50
+240000.0 True 2 3 Dębiec 50
+930000.0 True 2 2 Malta 75
+239000.0 True 2 10 Grunwald 42
+235000.0 True 2 5 Winogrady 38
+399000.0 True 2 2 Stare 62
+920000.0 True 5 2 Grunwald 177
+499000.0 True 3 0 Centrum 12
+492000.0 True 3 4 Centrum 96
+349000.0 True 2 4 Centrum 11
+317880.0 True 2 2 Grunwald 98
+407208.0 True 3 2 Grunwald 44
+410665.0 True 4 2 Grunwald 7
+410780.0 True 3 3 Grunwald 44
+328476.0 True 2 4 Grunwald 98
+273951.0 True 2 0 Nowe 97
+321285.0 True 2 4 Winogrady 30
+318645.0 True 2 2 Winogrady 30
+886860.06 True 3 5 Centrum 80
+473770.0 True 2 5 Centrum 7
+798966.0 True 2 5 Centrum 33
+163563.75 True 2 0 Centrum 25
+314089.0 True 2 5 Grunwald 49
+297420.81 True 2 3 Grunwald 24
+455712.0 True 3 0 Grunwald 64
+746787.0 True 4 7 Grunwald 53
+322276.0 True 2 3 Winogrady 98
+286327.0 True 2 3 Winogrady 53
+312259.0 True 2 6 Winogrady 19
+256417.0 True 2 3 Nowe 33
+193950.0 True 2 1 Nowe 79
+226239.0 True 2 0 Nowe 93
+487000.0 True 3 0 Naramowice 83
+313028.0 True 2 4 Centrum 4
+292664.5 True 2 4 Centrum 11
+440496.0 True 3 4 Centrum 96
+358092.0 True 2 4 Centrum 84
+288216.5 True 2 4 Centrum 47
+410215.0 True 2 4 Centrum 11
+383760.0 True 3 6 Grunwald 60
+299000.0 True 2 0 Wilda 53
+299000.0 True 3 3 Jeżyce 56
+674000.0 True 5 2 Centrum 40
+270000.0 True 3 4 Nowe 48
+303287.0 True 2 3 Grunwald 13
+156986.0 True 2 1 Nowe 62
+162525.0 True 2 0 Nowe 55
+247831.0 True 3 5 Nowe 73
+222050.0 True 2 3 Nowe 41
+204450.0 True 3 1 Nowe 50
+188190.0 True 2 0 Nowe 90
+192750.0 True 2 4 Nowe 55
+247549.0 True 3 4 Nowe 67
+285678.0 False 2 1 Winogrady 42
+308237.0 False 2 1 Nowe 85
+349000.0 False 4 0 Szczepankowo 29
+297421.0 False 2 3 Grunwald 24
+297421.0 False 2 3 Grunwald 24
+244071.0 False 2 1 Nowe 93
+156085.0 False 2 4 Nowe 54
+265000.0 True 2 1 Jeżyce 66
+235000.0 True 2 0 Dębiec 43
+305000.0 True 2 8 Ogrody 44
+435000.0 True 3 1 Grunwald 70
+395000.0 True 2 0 Grunwald 11
+449000.0 False 5 0 Szczepankowo 68
+211190.0 False 2 0 Piątkowo 78
+771672.0 False 4 4 Górczyn 66
+771672.0 False 4 4 Górczyn 66
+302887.0 False 2 4 Górczyn 25
+282994.0 False 2 0 Starołęka 59
+771672.0 False 4 4 Górczyn 66
+302887.0 False 2 4 Górczyn 25
+225228.0 False 2 5 Rataje 91
+442080.0 False 3 1 Starołęka 68
+370597.0 False 2 4 Stare 4
+771672.0 False 4 4 Górczyn 66
+242731.0 False 2 0 Podolany 74
+225228.0 False 2 5 Rataje 91
+460499.0 False 3 1 Stare 51
+284618.0 False 2 3 Nowe 55
+356251.0 False 3 14 Grunwald 20
+297420.0 False 2 3 Grunwald 24
+428090.0 False 3 2 Nowe 85
+347090.0 False 3 1 Winogrady 41
+375529.0 False 2 3 Centrum 71
+429699.0 False 3 15 Grunwald 62
+332940.0 False 2 2 Winogrady 70
+162525.0 False 2 0 Głuszyna 55
+557338.0 False 3 3 Stare 4
+317880.0 False 2 11 Grunwald 98
+293436.0 False 2 11 Grunwald 16
+317880.0 False 2 2 Grunwald 98
+297421.0 False 2 3 Grunwald 16
+297421.0 False 2 3 Grunwald 16
+317880.0 False 2 2 Grunwald 98
+297421.0 False 2 3 Grunwald 16
+297421.0 False 2 3 Grunwald 16
+270000.0 True 2 2 Jeżyce 49
+470000.0 True 2 4 Centrum 42
+293436.0 False 2 11 Grunwald 16
+347193.0 False 3 11 Grunwald 7
+347193.0 False 3 11 Grunwald 7
+321904.0 False 2 4 Winogrady 92
+455348.0 False 3 0 Centrum 61
+331226.0 False 3 2 Starołęka 95
+557338.0 False 3 3 Centrum 4
+460499.0 False 3 1 Centrum 51
+245000.0 True 2 3 Grunwald 30
+597184.0 False 3 4 Stare 61
+597184.0 False 3 4 Stare 61
+557338.0 False 3 3 Centrum 4
+157039.0 False 2 4 Nowe 63
+522235.0 False 3 2 Stare 62
+294840.0 False 2 4 Winogrady 50
+442080.0 False 3 1 Starołęka 68
+370597.0 False 2 4 Stare 4
+460499.0 False 3 1 Stare 51
+242731.0 False 2 0 Podolany 74
+771672.0 False 4 4 Górczyn 66
+460499.0 False 3 1 Stare 51
+302887.0 False 2 4 Górczyn 25
+225228.0 False 2 5 Rataje 91
+284618.0 False 2 3 Nowe 55
+356251.0 False 3 14 Grunwald 20
+297420.0 False 2 3 Grunwald 24
+297421.0 False 2 3 Grunwald 16
+317880.0 False 2 2 Grunwald 98
+297421.0 False 2 3 Grunwald 16
+156085.0 False 2 3 Głuszyna 45
+362459.0 False 3 0 Starołęka 80
+285678.0 False 2 1 Winogrady 42
+308237.0 False 2 1 Nowe 85
+244071.0 False 2 1 Nowe 93
+156085.0 False 2 4 Nowe 54
+308237.0 False 2 1 Nowe 85
+244071.0 False 2 1 Nowe 93
+245000.0 True 2 5 Nowe 42
+308237.0 False 2 1 Nowe 85
+156085.0 False 2 3 Głuszyna 45
+297421.0 False 2 3 Grunwald 24
+244071.0 False 2 1 Nowe 93
+290000.0 True 3 2 Jeżyce 81
+279000.0 True 2 2 Wilda 30
+489000.0 True 2 8 Centrum 4
+395000.0 True 4 0 Grunwald 60
+239000.0 True 2 0 Rataje 48
+330000.0 True 3 4 Nowe 59
+370000.0 True 4 4 Stare 76
+380000.0 True 4 0 Stare 74
+319000.0 True 3 4 Rataje 63
+480000.0 True 4 1 Grunwald 64
+478000.0 True 3 3 Centrum 78
+304865.0 False 3 3 Zawady 43
+185000.0 True 2 8 Dębiec 50
+410000.0 True 2 9 Nowe 51
+439000.0 True 2 3 Centrum 86
+319000.0 True 3 3 Wilda 53
+399000.0 True 3 3 Stare 68
+870000.0 True 5 0 Grunwald 156
+335000.0 True 3 0 Centrum 65
+278000.0 True 3 2 Rataje 47
+249000.0 True 2 4 Grunwald 43
+379000.0 True 3 0 Wilda 96
+275000.0 True 2 9 Rataje 38
+319000.0 True 2 0 Grunwald 45
+295000.0 True 2 4 Grunwald 53
+195000.0 True 2 2 Nowe 42
+530000.0 True 2 5 Piątkowo 66
+380000.0 True 3 3 Centrum 67
+395000.0 True 2 0 Grunwald 52
+249000.0 True 2 5 Rataje 36
+379000.0 True 3 0 Rataje 30
+399000.0 True 3 1 Grunwald 65
+648263.0 True 3 2 Łazarz 84
+308220.0 True 2 5 Winogrady 70
+288000.0 True 3 4 Winogrady 30
+292020.0 True 2 1 Winogrady 10
+510000.0 True 2 5 Centrum 91
+310000.0 True 3 4 Rataje 10
+333694.0 True 3 0 Jeżyce 68
+232408.0 True 2 0 Stare 38
+392181.0 True 3 4 Winogrady 69
+285382.0 True 2 4 Winogrady 48
+245830.0 True 2 2 Grunwald 40
+410000.0 True 4 2 Nowe 71
+330000.0 True 2 0 Grunwald 68
+350000.0 True 3 4 Jeżyce 20
+245000.0 True 2 5 Rataje 42
+290000.0 True 2 4 Łazarz 36
+360000.0 True 3 0 Centrum 30
+399000.0 False 3 2 Winogrady 98
+348750.0 False 2 3 Centrum 50
+356448.0 False 2 4 Stare 5
+342021.0 False 2 4 Nowe 93
+342021.0 False 2 4 Nowe 93
+342021.0 False 2 4 Nowe 93
+342021.0 False 2 4 Nowe 93
+342021.0 False 2 4 Nowe 93
+638175.0 False 4 3 Nowe 9
+458208.0 False 3 3 Nowe 92
+428090.0 False 3 2 Nowe 85
+428090.0 False 3 1 Nowe 85
+280463.0 False 2 4 Nowe 55
+280000.0 True 3 2 Rataje 20
+347090.0 False 3 1 Winogrady 41
+347090.0 False 3 1 Winogrady 41
+285678.0 False 2 1 Winogrady 82
+347090.0 False 3 1 Winogrady 41
+321656.0 False 2 4 Winogrady 38
+312259.0 False 2 6 Winogrady 60
+317880.0 False 2 2 Grunwald 98
+225228.0 False 2 5 Rataje 91
+356251.0 False 3 14 Grunwald 20
+297420.0 False 2 3 Grunwald 24
+370597.0 False 2 4 Stare 4
+284618.0 False 2 3 Nowe 55
+544008.0 False 4 2 Starołęka 4
+302887.0 False 2 4 Górczyn 25
+156085.0 False 2 4 Nowe 54
+522235.0 False 3 2 Stare 62
+771672.0 False 4 4 Górczyn 66
+442080.0 False 3 1 Starołęka 68
+460499.0 False 3 1 Stare 51
+368712.0 False 2 0 Stare 80
+242731.0 False 2 0 Podolany 74
+560000.0 True 4 0 Naramowice 20
+359000.0 True 3 0 Grunwald 69
+287000.0 True 3 1 Wilda 73
+270000.0 True 2 2 Jeżyce 95
+285000.0 True 2 0 Grunwald 80
+350000.0 True 4 4 Stare 60
+389000.0 True 3 0 Wilda 96
+695000.0 True 3 2 Jeżyce 25
+270000.0 True 2 6 Piątkowo 47
+305000.0 True 2 1 Winogrady 49
+439000.0 True 3 1 Grunwald 10
+415000.0 True 4 7 Piątkowo 63
+268000.0 True 3 4 Jeżyce 42
+270000.0 True 3 4 Rataje 48
+269000.0 True 2 0 Grunwald 46
+360000.0 True 3 1 Rataje 69
+205000.0 True 2 1 Jeżyce 34
+405000.0 True 3 1 Antoninek 70
+295000.0 True 2 0 Winogrady 36
+295000.0 True 2 0 Naramowice 36
+339000.0 True 3 9 Rataje 65
+475000.0 True 4 4 Wilda 120
+359000.0 True 4 0 Winogrady 90
+368567.0 True 3 1 Jeżyce 68
+211189.0 True 2 0 Jeżyce 38
+391729.0 True 3 2 Winogrady 69
+285678.0 True 2 4 Winogrady 48
+469000.0 True 4 2 Jeżyce 87
+259000.0 True 3 4 Stare 60
+470092.78 True 2 3 Centrum 21
+244000.0 True 2 5 Śródka 43
+215000.0 True 2 4 Nowe 14
+488631.0 True 2 5 Centrum 22
+233000.0 True 2 4 Śródka 99
+485017.66 True 2 5 Centrum 77
+450000.0 True 2 3 Centrum 88
+410666.0 True 4 2 Grunwald 71
+327585.0 True 3 6 Grunwald 56
+263000.0 True 2 1 Rataje 45
+270000.0 True 3 4 Rataje 48
+405000.0 True 4 2 Rataje 71
+297421.0 False 2 1 Grunwald 16
+415000.0 True 3 0 Jeżyce 5
+297421.0 False 2 3 Grunwald 16
+991380.0 False 5 1 Starołęka 94
+319998.0 False 3 1 Starołęka 95
+288405.0 False 2 1 Górczyn 37
+375529.0 False 2 3 Centrum 71
+225228.0 False 2 0 Rataje 71
+357692.0 False 3 1 Nowe 31
+310584.0 False 2 1 Nowe 26
+368568.0 False 3 4 Podolany 38
+460499.0 False 3 1 Stare 51
+156085.0 False 2 4 Nowe 54
+771672.0 False 4 4 Górczyn 66
+522235.0 False 3 2 Stare 62
+302887.0 False 2 4 Górczyn 25
+242731.0 False 2 0 Podolany 74
+225228.0 False 2 5 Rataje 91
+356251.0 False 3 14 Grunwald 20
+297420.0 False 2 3 Grunwald 24
+544008.0 False 4 2 Starołęka 4
+284618.0 False 2 3 Nowe 55
+285678.0 False 2 2 Winogrady 42
+174375.0 True 2 3 Centrum 25
+350000.0 True 4 4 Piątkowo 76
+380000.0 True 4 0 Piątkowo 74
+315000.0 True 2 0 Górczyn 48
+362000.0 True 2 1 Centrum 50
+344206.0 True 4 4 Stare 58
+300987.0 True 3 1 Stare 50
+235094.0 True 2 0 Stare 39
+549000.0 True 3 2 Jeżyce 18
+239000.0 True 2 1 Grunwald 44
+379000.0 True 3 1 Naramowice 20
+320000.0 True 2 1 Naramowice 50
+269000.0 True 3 1 Wilda 80
+295000.0 True 3 0 Grunwald 20
+249999.0 True 2 9 Winogrady 38
+330000.0 True 2 3 Piątkowo 50
+360000.0 True 3 2 Rataje 20
+412438.0 True 3 2 Winogrady 71
+291721.0 True 2 5 Stare 44
+354421.0 True 2 5 Stare 54
+399952.0 True 4 1 Grunwald 71
+280000.0 True 2 2 Centrum 40
+200000.0 True 2 2 Dębiec 40
+289000.0 True 2 7 Winiary 49
+279000.0 True 3 10 Rataje 56
+333232.0 True 3 7 Grunwald 56
+489000.0 True 3 0 Jeżyce 10
+375000.0 True 2 1 Piątkowo 48
+259000.0 True 2 2 Centrum 48
+335000.0 True 2 0 Centrum 54
+288000.0 True 3 4 Winogrady 30
+289000.0 True 2 7 Winiary 49
+380000.0 True 3 3 Wilda 67
+419000.0 True 3 4 Wilda 50
+247705.0 True 2 0 Jeżyce 50
+333696.0 True 3 0 Jeżyce 68
+409000.0 True 3 1 Rataje 90
+239000.0 True 2 3 Grunwald 60
+289000.0 True 2 6 Winogrady 48
+326000.0 True 2 1 Winogrady 39
+269000.0 True 2 2 Winogrady 48
+489000.0 True 4 2 Wilda 120
+350000.0 True 4 4 Piątkowo 76
+322663.41 True 2 1 Centrum 14
+368019.41 True 2 4 Centrum 18
+674695.13 True 4 4 Centrum 59
+375000.0 True 4 2 Centrum 72
+378128.09 True 2 3 Centrum 77
+349668.0 True 2 2 Centrum 15
+344296.75 True 2 1 Centrum 5
+353456.63 True 2 3 Centrum 16
+347193.0 False 3 11 Grunwald 7
+557338.0 False 3 3 Centrum 4
+228144.0 False 3 2 Głuszyna 56
+247705.0 False 2 1 Podolany 74
+228144.0 False 3 2 Głuszyna 56
+222050.0 False 2 3 Głuszyna 41
+158682.0 False 2 2 Głuszyna 94
+194000.0 False 2 2 Głuszyna 80
+289170.0 False 2 0 Winogrady 90
+399000.0 False 3 2 Winogrady 98
+305670.0 False 2 3 Grunwald 30
+305670.0 False 2 3 Grunwald 30
+294840.0 False 2 4 Winogrady 50
+597184.0 False 3 4 Stare 61
+460499.0 False 3 1 Stare 51
+347010.0 False 2 10 Grunwald 80
+356251.0 False 3 14 Grunwald 20
+225228.0 False 2 5 Rataje 91
+297420.0 False 2 3 Grunwald 24
+284618.0 False 2 3 Nowe 55
+544008.0 False 4 2 Starołęka 4
+522235.0 False 3 2 Stare 62
+370597.0 False 2 4 Stare 4
+674695.0 False 3 4 Stare 59
+442080.0 False 3 1 Starołęka 68
+771672.0 False 4 4 Górczyn 66
+302887.0 False 2 4 Górczyn 25
+294840.0 False 2 4 Winogrady 50
+305676.0 False 2 5 Winogrady 52
+305676.0 False 2 5 Winogrady 52
+242731.0 False 2 0 Podolany 74
+460499.0 False 3 1 Stare 51
+156085.0 False 2 4 Nowe 54
+242731.0 False 2 0 Podolany 74
+368568.0 False 3 4 Podolany 38
+499000.0 True 3 1 Rataje 50
+275000.0 True 3 1 Wilda 48
+307000.0 True 3 2 Rataje 48
+485000.0 True 2 3 Nowe 50
+288000.0 True 2 4 Naramowice 44
+405000.0 True 4 7 Piątkowo 63
+299000.0 True 2 4 Grunwald 60
+235000.0 True 2 0 Nowe 47
+288000.0 True 3 4 Stare 30
+225288.0 False 2 1 Rataje 91
+287882.0 False 2 1 Starołęka 85
+225288.0 False 2 1 Rataje 91
+652026.0 True 4 3 Stare 89
+476118.0 True 3 1 Stare 78
+349668.0 True 2 2 Stare 15
+318645.0 True 2 2 Stare 30
+290970.0 True 2 0 Stare 60
+354000.0 True 3 1 Stare 60
+260000.0 True 2 0 Stare 47
+670000.0 True 5 1 Stare 152
+360380.0 True 4 4 Wilda 97
+329000.0 True 2 3 Nowe 90
+249000.0 True 2 5 Centrum 20
+319000.0 True 2 3 Jeżyce 40
+493422.0 True 3 1 Centrum 62
+236000.0 True 2 3 Nowe 43
+257697.0 True 2 3 Śródka 21
+234000.0 True 2 2 Śródka 20
+233643.0 True 2 2 Nowe 99
+296810.0 True 2 2 Grunwald 30
+335988.0 True 2 1 Grunwald 41
+453526.5 True 3 6 Grunwald 33
+637135.0 True 3 7 Grunwald 65
+771672.0 True 4 7 Grunwald 68
+329000.0 True 3 8 Piątkowo 63
+399000.0 False 5 0 Szczepankowo 68
+369000.0 True 2 4 Rataje 49
+404000.0 True 2 0 Rataje 49
+389000.0 True 3 4 Rataje 62
+507060.0 True 2 3 Grunwald 77
+390910.0 True 3 1 Grunwald 14
+690000.0 True 6 2 Centrum 170
+355000.0 True 2 0 Podolany 93
+369000.0 True 16 2 Piątkowo 90
+339000.0 True 3 9 Rataje 65
+398000.0 True 2 3 Umultowo 59
+289000.0 True 2 6 Stare 80
+389000.0 True 3 3 Stare 49
+270000.0 True 2 6 Piątkowo 46
+353000.0 True 3 2 Grunwald 73
+413484.5 True 3 4 Grunwald 83
+311046.0 True 2 6 Grunwald 12
+1020000.0 True 3 1 Grunwald 50
+292383.0 True 2 0 Grunwald 41
+307190.0 True 2 4 Grunwald 20
+311975.5 True 2 1 Grunwald 13
+335000.0 True 3 1 Naramowice 60
+289000.0 True 2 1 Winogrady 48
+449000.0 False 5 0 Szczepankowo 68
+285678.0 False 2 1 Winogrady 42
+247705.0 False 2 0 Podolany 74
+211190.0 False 2 0 Podolany 78
+278047.0 False 2 4 Podolany 74
+333694.0 False 3 0 Podolany 38
+333024.0 False 2 1 Stare 51
+319998.0 False 3 1 Starołęka 97
+354420.0 False 2 5 Winogrady 70
+348750.0 False 2 3 Centrum 50
+269000.0 True 2 8 Rataje 90
+370597.0 False 2 4 Stare 4
+242731.0 False 2 0 Podolany 74
+370597.0 False 2 4 Stare 4
+460499.0 False 3 1 Stare 51
+302887.0 False 2 4 Górczyn 25
+225228.0 False 2 5 Rataje 91
+356251.0 False 3 14 Grunwald 20
+156085.0 False 2 4 Nowe 54
+156085.0 False 2 4 Nowe 54
+156085.0 False 2 4 Nowe 54
+544008.0 False 4 2 Starołęka 4
+302887.0 False 2 4 Górczyn 25
+284618.0 False 2 3 Nowe 55
+242731.0 False 2 0 Podolany 74
+546462.0 False 4 0 Jeżyce 74
+493966.0 False 4 0 Jeżyce 79
+332691.0 False 3 0 Jeżyce 58
+335920.0 False 3 0 Jeżyce 68
+334360.0 False 3 1 Jeżyce 44
+329000.0 True 3 3 Jeżyce 54
+299000.0 True 2 3 Naramowice 49
+349000.0 True 3 3 Piątkowo 64
+297421.0 False 2 3 Grunwald 24
+244071.0 False 2 1 Nowe 93
+287882.0 False 2 1 Starołęka 85
+297421.0 False 2 3 Grunwald 24
+297421.0 False 2 3 Grunwald 24
+156085.0 False 2 3 Głuszyna 45
+244071.0 False 2 1 Nowe 93
+330000.0 True 3 1 Dębiec 88
+364000.0 True 3 2 Jeżyce 69
+365000.0 True 3 1 Wilda 46
+380000.0 True 4 0 Piątkowo 74
+270000.0 True 2 6 Piątkowo 46
+330000.0 True 3 4 Rataje 59
+260000.0 True 2 0 Naramowice 47
+425000.0 True 3 1 Rataje 70
+239000.0 True 2 3 Rataje 44
+250000.0 True 2 9 Winogrady 10
+307000.0 True 2 4 Piątkowo 49
+300000.0 True 3 2 Grunwald 49
+295361.0 True 3 2 Stare 48
+242133.0 True 2 0 Jeżyce 38
+391730.0 True 3 2 Winogrady 69
+286860.0 True 2 7 Winogrady 49
+476119.0 True 3 1 Stare 59
+652026.0 True 4 3 Stare 79
+289171.0 True 2 0 Stare 46
+293700.0 True 2 5 Stare 45
+342405.0 True 3 11 Grunwald 54
+297420.0 True 2 1 Grunwald 50
+292100.0 True 2 1 Grunwald 51
+333690.0 True 3 1 Jeżyce 68
+242731.0 True 2 0 Jeżyce 50
+211200.0 True 2 0 Jeżyce 38
+288000.0 True 3 4 Winogrady 30
+245000.0 True 2 0 Naramowice 50
+359600.0 True 2 5 Górczyn 58
+332940.0 True 2 2 Winogrady 70
+248337.0 True 2 3 Winogrady 38
+209000.0 True 2 0 Śródka 14
+341803.78 True 2 8 Winogrady 10
+285000.0 True 2 3 Łazarz 58
+217000.0 True 2 4 Wilda 30
+379000.0 True 4 3 Winogrady 65
+235000.0 True 2 0 Śródka 10
+597184.0 False 3 4 Stare 61
+460499.0 False 3 1 Stare 51
+347010.0 False 2 10 Grunwald 80
+282994.0 False 2 0 Starołęka 59
+297420.0 False 2 3 Grunwald 24
+522235.0 False 3 2 Stare 62
+368568.0 False 3 4 Podolany 38
+242731.0 False 2 0 Podolany 74
+460499.0 False 3 1 Stare 51
+771672.0 False 4 4 Górczyn 66
+302887.0 False 2 4 Górczyn 25
+350000.0 True 4 4 Piątkowo 76
+375000.0 True 3 1 Nowe 62
+260000.0 True 2 0 Naramowice 79
+315000.0 True 2 1 Grunwald 49
+375000.0 True 3 1 Rataje 62
+229000.0 True 2 11 Stare 38
+365000.0 True 3 1 Wilda 46
+299000.0 True 2 3 Górczyn 37
+259000.0 True 2 2 Jeżyce 48
+289000.0 True 2 1 Piątkowo 46
+310000.0 True 3 0 Piątkowo 63
+209000.0 True 2 4 Dębiec 6
+249000.0 True 2 0 Nowe 21
+287882.09 True 2 1 Nowe 85
+434201.0 True 4 1 Nowe 54
+482423.0 True 5 2 Nowe 4
+297789.5 True 2 2 Nowe 54
+149000.0 True 2 0 Grunwald 35
+299000.0 True 2 9 Stare 80
+365000.0 True 3 1 Wilda 46
+329000.0 True 2 3 Rataje 90
+337000.0 True 4 4 Rataje 62
+597184.0 False 3 4 Stare 61
+347010.0 False 2 10 Grunwald 80
+460499.0 False 3 1 Stare 51
+597184.0 False 3 4 Stare 61
+300680.0 False 2 2 Starołęka 54
+347010.0 False 2 10 Grunwald 80
+294840.0 False 2 4 Winogrady 50
+368568.0 False 3 4 Podolany 38
+242731.0 False 2 0 Podolany 74
+674695.0 False 3 4 Stare 59
+442080.0 False 3 1 Starołęka 68
+302887.0 False 2 4 Górczyn 25
+294840.0 False 2 4 Winogrady 50
+460499.0 False 3 1 Stare 51
+365000.0 True 3 0 Wilda 10
+195000.0 True 2 0 Winiary 35
+325000.0 True 4 1 Rataje 58
+303287.0 False 2 3 Grunwald 13
+375000.0 True 3 1 Rataje 62
+384000.0 True 3 2 Piątkowo 69
+297421.0 False 2 3 Grunwald 24
+244071.0 False 2 1 Nowe 93
+255000.0 True 2 2 Centrum 90
+285000.0 True 2 0 Grunwald 80
+300000.0 True 3 1 Grunwald 48
+330000.0 True 3 5 Grunwald 58
+330000.0 True 3 5 Grunwald 58
+330000.0 True 3 5 Grunwald 58
+315000.0 True 2 0 Centrum 60
+290000.0 True 2 4 Centrum 36
+245000.0 True 2 7 Ogrody 90
+289000.0 True 2 1 Piątkowo 46
+359000.0 True 2 4 Nowe 90
+339000.0 True 3 1 Nowe 88
+285385.0 True 2 4 Winogrady 48
+308039.0 True 2 0 Winogrady 52
+298982.0 True 2 3 Stare 45
+289170.0 True 2 0 Stare 46
+368568.0 True 3 4 Jeżyce 68
+211195.0 True 2 0 Jeżyce 38
+315000.0 True 2 2 Podolany 52
+267704.0 True 2 3 Grunwald 45
+325313.0 True 3 3 Grunwald 53
+260000.0 True 2 0 Naramowice 47
+349000.0 True 2 3 Jeżyce 56
+499000.0 True 3 1 Rataje 50
+239000.0 True 2 0 Wilda 57
+487000.0 True 3 0 Naramowice 73
+319000.0 True 2 2 Centrum 53
+344152.0 True 3 0 Nowe 80
+357692.0 True 3 2 Nowe 31
+277098.0 True 2 0 Nowe 59
+301794.13 True 2 1 Nowe 26
+533745.0 False 5 2 Starołęka 4
+333694.0 False 3 1 Podolany 32
+333694.0 False 3 1 Piątkowo 38
+380931.0 False 3 3 Starołęka 82
+597184.0 False 3 4 Stare 61
+460499.0 False 3 1 Stare 51
+300680.0 False 2 2 Starołęka 54
+305670.0 False 2 3 Grunwald 30
+390301.0 False 2 4 Stare 61
+370597.0 False 2 4 Stare 4
+192750.0 False 2 1 Głuszyna 55
+460499.0 False 3 1 Stare 51
+242731.0 False 2 0 Podolany 74
+303287.0 False 2 3 Grunwald 13
+318645.0 False 2 2 Winogrady 23
+370597.0 False 2 4 Stare 4
+674695.0 False 3 4 Stare 59
+442080.0 False 3 1 Starołęka 68
+771672.0 False 4 4 Górczyn 66
+771672.0 False 4 4 Górczyn 66
+294840.0 False 2 4 Winogrady 50
+368712.0 False 2 5 Stare 90
+480000.0 True 3 3 Stare 46
+237000.0 True 2 2 Wilda 44
+359000.0 True 4 3 Grunwald 74
+369000.0 True 3 0 Grunwald 87
+369000.0 True 3 0 Grunwald 87
+695000.0 True 3 2 Jeżyce 25
+321239.09 True 2 3 Winogrady 30
+331899.09 True 2 2 Winogrady 30
+334564.09 True 2 1 Winogrady 30
+289800.0 True 2 0 Winogrady 46
+289170.0 True 2 0 Winogrady 90
+345000.0 True 3 3 Stare 50
+499000.0 True 2 8 Centrum 39
+399000.0 True 2 1 Jeżyce 58
+1049000.0 True 3 9 Nowe 113
+729000.0 True 4 3 Stare 130
+254457.0 True 2 5 Nowe 52
+249000.0 True 2 6 Winogrady 48
+320000.0 True 3 3 Nowe 40
+333692.0 True 3 2 Jeżyce 68
+410665.0 True 4 2 Grunwald 71
+293436.0 True 2 1 Grunwald 50
+481904.0 True 3 2 Stare 62
+332940.0 True 2 2 Stare 54
+325249.0 True 3 3 Jeżyce 49
+347096.0 True 3 1 Winogrady 57
+297421.0 False 2 2 Grunwald 24
+570000.0 True 4 3 Centrum 137
+351475.0 False 3 0 Starołęka 80
+294840.0 False 2 4 Winogrady 50
+460499.0 False 3 1 Stare 51
+300680.0 False 2 2 Starołęka 54
+460499.0 False 3 1 Stare 51
+353275.0 False 2 14 Grunwald 74
+294840.0 False 2 4 Winogrady 50
+297420.0 False 2 3 Grunwald 24
+294840.0 False 2 4 Winogrady 50
+302887.0 False 2 4 Górczyn 25
+442080.0 False 3 1 Starołęka 68
+289000.0 True 2 6 Winogrady 48
+289000.0 True 2 6 Winogrady 48
+674695.0 False 3 4 Stare 59
+269000.0 True 2 6 Stare 49
+347010.0 False 2 10 Grunwald 80
+296279.0 True 3 2 Stare 49
+238947.0 True 2 6 Stare 39
+289000.0 True 2 1 Piątkowo 46
+774618.0 False 4 5 Wilda 31
+741099.0 False 4 5 Wilda 22
+460688.0 False 3 4 Wilda 25
+300723.0 False 2 4 Wilda 97
+349610.0 False 2 4 Wilda 59
+564000.0 False 5 0 Biedrusko 90
+618933.0 False 4 4 Wilda 37
+399000.0 False 4 0 Biedrusko 34
+564000.0 False 5 0 Biedrusko 90
+359000.0 False 3 0 Biedrusko 80
+524808.0 False 3 4 Wilda 92
+359000.0 False 4 1 Biedrusko 86
+360000.0 True 3 3 Jeżyce 62
+499000.0 False 2 2 Stare 45
+664443.0 False 3 3 Stare 24
+526049.0 False 2 3 Stare 45
+709116.0 False 3 4 Stare 88
+347182.0 False 4 1 Biedrusko 70
+335925.0 False 4 1 Biedrusko 70
+335925.0 False 4 1 Biedrusko 70
+335925.0 False 4 1 Biedrusko 70
+335925.0 False 4 1 Biedrusko 70
+453929.0 False 3 3 Wilda 26
+387000.0 False 4 1 Biedrusko 86
+309276.0 False 2 3 Wilda 12
+486720.0 False 3 3 Wilda 60
+325440.0 False 3 0 Biedrusko 80
+484068.0 False 3 3 Wilda 6
+306675.0 False 3 0 Biedrusko 20
+663205.0 False 4 3 Wilda 85
+447038.0 False 3 2 Wilda 25
+306675.0 False 3 0 Biedrusko 20
+306675.0 False 3 0 Biedrusko 20
+481522.0 False 3 2 Wilda 82
+306675.0 False 3 0 Biedrusko 20
+356400.0 False 2 2 Wilda 52
+325440.0 False 3 0 Biedrusko 80
+510984.0 False 3 2 Wilda 97
+272000.0 False 3 2 Biedrusko 31
+289000.0 False 3 1 Biedrusko 39
+289000.0 False 3 1 Biedrusko 39
+319000.0 False 3 0 Biedrusko 49
+329000.0 False 3 0 Biedrusko 49
+289000.0 True 2 1 Piątkowo 46
+289000.0 True 2 1 Piatkowo 46
+125000.0 True 5 3 Grunwald 22
+625000.0 True 5 3 Grunwald 105
+643000.0 True 4 0 Naramowice 60
+215000.0 True 2 2 Centrum 39
+399000.0 True 4 0 Centrum 70
+435000.0 True 3 1 Grunwald 10
+289000.0 True 3 4 Naramowice 40
+515000.0 True 3 0 Rataje 71
+310000.0 True 2 4 Jeżyce 55
+348000.0 True 3 9 Rataje 65
+340000.0 True 3 8 Rataje 65
+325248.0 True 3 1 Jeżyce 49
+262875.0 True 2 4 Jeżyce 40
+325248.0 True 3 1 Jeżyce 49
+262874.0 True 2 4 Jeżyce 40
+253498.0 True 2 4 Jeżyce 38
+253193.0 True 2 6 Jeżyce 38
+253193.0 True 2 4 Jeżyce 38
+220000.0 True 2 1 Łazarz 45
+230000.0 True 2 2 Rataje 49
+293848.0 True 3 4 Winogrady 49
+305000.0 True 3 4 Jeżyce 84
+245000.0 True 2 2 Jeżyce 62
+205000.0 True 2 0 Jeżyce 43
+269000.0 True 2 13 Piątkowo 50
+249000.0 True 2 2 Strzeszyn 34
+330000.0 True 3 6 Rataje 80
+200000.0 True 2 0 Wilda 32
+270000.0 True 3 4 Rataje 48
+617360.0 True 3 3 Grunwald 77
+279554.0 True 2 4 Jeżyce 68
+279554.0 True 2 4 Jeżyce 68
+550000.0 True 3 1 Grunwald 73
+355000.0 True 2 8 Ogrody 52
+210000.0 True 2 10 Ogrody 38
+234000.0 True 2 0 Wilda 37
+375000.0 True 3 2 Wilda 90
+345000.0 True 3 6 Winogrady 10
+320000.0 True 3 4 Piątkowo 63
+239000.0 True 2 8 Winogrady 38
+350000.0 True 4 4 Piątkowo 74
+295363.0 True 3 1 Stare 48
+285384.0 True 2 4 Winogrady 48
+392861.0 True 3 3 Winogrady 69
+399000.0 True 2 0 Podolany 63
+518000.0 True 2 4 Centrum 2
+495000.0 True 3 0 Rataje 69
+405000.0 True 3 3 Jeżyce 63
+269000.0 True 2 1 Rataje 50
+481903.0 True 3 2 Stare 62
+269000.0 True 2 4 Grunwald 38
+404000.0 True 3 2 Piątkowo 60
+549000.0 True 3 2 Dąbrowskiego 106
+489000.0 True 3 0 Stare 70
+358000.0 True 4 3 Grunwald 74
+379000.0 True 3 1 Naramowice 20
+269000.0 True 3 11 Grunwald 50
+197000.0 True 2 3 Grunwald 40
+362459.0 False 3 0 Starołęka 80
+353275.0 False 2 14 Grunwald 74
+351475.0 False 3 0 Starołęka 80
+225228.0 False 2 5 Rataje 91
+394000.0 False 4 0 Szczepankowo 77
+287882.0 False 2 1 Starołęka 85
+349000.0 True 3 4 Wilda 75
+255000.0 True 2 3 Rataje 46
+460040.0 True 3 5 Górczyn 20
+321656.0 True 2 1 Winogrady 88
+326000.0 True 2 1 Winiary 39
+285000.0 True 2 3 Naramowice 5
+399000.0 True 4 0 Stary 70
+349000.0 True 3 3 Nowe 87
+585000.0 True 4 1 Stare 100
+510000.0 True 3 2 Stare 68
+409000.0 True 4 3 Centrum 111
+310000.0 True 2 0 Grunwald 60
+308039.0 True 2 0 Winogrady 21
+286858.0 True 2 7 Winogrady 62
+279000.0 True 3 0 Piątkowo 50
+347090.0 False 3 1 Winogrady 90
+241187.0 True 2 7 Stare 39
+350875.0 True 3 1 Rataje 56
+296279.0 True 3 3 Stare 49
+293900.0 True 3 4 Stare 49
+315812.0 True 4 8 Stare 52
+374791.0 True 4 5 Jeżyce 57
+278048.0 True 2 4 Jeżyce 50
+371931.0 True 4 4 Jeżyce 57
+242000.0 True 2 1 Jeżyce 38
+308220.0 False 2 5 Stare 70
+339000.0 True 3 1 Rataje 66
+460499.0 False 3 1 Stare 51
+349668.0 False 2 2 Stare 15
+300680.0 False 2 2 Starołęka 54
+557338.0 False 3 3 Stare 4
+349332.0 True 3 0 Jeżyce 16
+271236.0 True 2 2 Jeżyce 41
+329000.0 True 3 1 Jeżyce 112
+199000.0 True 2 2 Grunwald 38
+475000.0 True 3 1 Naramowice 68
+379000.0 True 5 3 Winogrady 65
+270000.0 True 2 2 Stare 95
+210000.0 True 2 2 Dębiec 40
+379000.0 True 2 3 Winogrady 48
+440000.0 True 2 2 Stare 90
+750000.0 True 5 2 Jeżyce 136
+425000.0 True 4 6 Nowe 85
+539000.0 True 4 1 Centrum 110
+1300000.0 True 2 1 Grunwald 100
+340000.0 True 3 0 Grunwald 98
+360000.0 True 3 4 Jeżyce 50
+259000.0 True 2 0 Grunwald 52
+295000.0 True 2 1 Wilda 51
+487000.0 True 3 0 Naramowice 73
+487000.0 True 3 0 Naramowice 73
+285000.0 True 3 2 Rataje 10
+605000.0 True 3 0 Grunwald 98
+209000.0 True 3 3 Grunwald 49
+242406.0 True 2 0 Jeżyce 36
+380000.0 True 2 2 Wilda 10
+268000.0 True 3 4 Jeżyce 50
+286446.0 True 2 2 Winogrady 49
+392181.0 True 3 4 Winogrady 69
+300987.0 True 3 3 Stare 50
+240876.0 True 2 7 Stare 39
+298980.0 True 2 5 Stare 45
+293700.0 True 2 5 Stare 45
+375960.0 True 4 2 Grunwald 71
+377918.0 True 3 2 Grunwald 71
+292100.0 True 2 1 Grunwald 51
+476118.0 True 3 1 Stare 59
+396248.0 True 2 4 Stare 52
+278046.0 True 2 1 Jeżyce 50
+211191.0 True 2 0 Jeżyce 38
+362458.0 True 3 0 Nowe 68
+288523.0 True 2 0 Nowe 54
+282998.0 True 2 0 Nowe 55
+247705.0 False 2 1 Podolany 74
+637135.0 False 3 7 Grunwald 65
+349000.0 False 4 0 Szczepankowo 29
+285678.0 False 2 1 Winogrady 42
+277823.0 False 2 2 Podolany 70
+424377.0 False 4 2 Starołęka 14
+282944.0 False 2 0 Starołęka 59
+460499.0 False 3 1 Stare 51
+289170.0 False 2 0 Winogrady 90
+339000.0 True 3 9 Nowe 65
+351475.0 False 3 0 Starołęka 80
+349000.0 True 3 3 Nowe 63
+349000.0 False 4 0 Szczepankowo 29
+247831.0 False 2 5 Głuszyna 73
+353275.0 False 2 14 Grunwald 74
+353275.0 False 2 14 Grunwald 74
+349000.0 False 4 0 Szczepankowo 29
+225288.0 False 2 1 Rataje 91
+285678.0 False 2 1 Winogrady 42
+225228.0 False 2 5 Rataje 91
+297421.0 False 2 3 Grunwald 24
+294840.0 False 2 4 Winogrady 50
+300680.0 False 2 2 Starołęka 54
+349668.0 False 2 2 Stare 15
+476780.0 True 2 2 Centrum 90
+239000.0 True 2 10 Rataje 44
+359000.0 True 3 2 Jeżyce 58
+207000.0 True 2 2 Zawady 42
+282995.0 True 2 0 Starołęka 59
+626800.0 True 3 7 Stare 68
+439000.0 True 4 2 Grunwald 92
+569000.0 True 4 0 Wilda 30
+313000.0 True 2 4 Stare 20
+396565.0 True 3 2 Jeżyce 61
+405860.0 True 2 1 Jeżyce 44
+519000.0 True 3 3 Grunwald 104
+265000.0 True 3 1 Winogrady 53
+530000.0 True 4 3 Naramowice 102
+390000.0 True 3 2 Podolany 68
+305000.0 True 2 1 Winiary 48
+215000.0 True 2 2 Łazarz 39
+250000.0 True 2 3 Centrum 33
+489000.0 True 2 4 Nowe 51
+495000.0 True 3 1 Centrum 86
+499000.0 True 3 2 Rataje 64
+339000.0 True 3 9 Rataje 65
+319000.0 True 3 1 Piątkowo 64
+310000.0 True 3 0 Piątkowo 50
+270000.0 True 3 4 Rataje 48
+330000.0 True 4 0 Naramowice 68
+255000.0 True 2 0 Grunwald 48
+333000.0 True 3 7 Rataje 78
+255000.0 True 2 2 Dębiec 48
+225000.0 True 2 3 Nowe 36
+326000.0 True 2 1 Winiary 39
+480000.0 True 3 2 Grunwald 87
+399000.0 True 3 3 Centrum 50
+980000.0 True 6 0 Naramowice 193
+350000.0 True 3 5 Stare 48
+410000.0 True 5 0 Łazarz 114
+279000.0 True 2 1 Podolany 45
+357693.0 True 3 2 Nowe 64
+424379.0 True 4 2 Nowe 74
+533746.0 True 5 2 Nowe 95
+282997.0 True 2 0 Nowe 55
+232049.0 True 2 0 Stare 36
+289800.0 True 2 0 Stare 46
+289170.0 True 2 0 Stare 46
+300988.0 True 3 1 Stare 50
+223752.0 True 2 0 Stare 37
+285680.0 True 2 4 Winogrady 48
+391730.0 True 3 2 Winogrady 69
+318383.0 True 3 3 Jeżyce 48
+266320.0 True 2 5 Jeżyce 41
+242407.0 True 2 0 Jeżyce 36
+245000.0 True 2 2 Winogrady 38
+239000.0 True 2 4 Rataje 38
+258000.0 True 2 1 Wilda 49
+269000.0 True 2 9 Nowe 49
+410000.0 True 2 5 Malta 53
+349000.0 True 3 2 Górczyn 55
+210000.0 True 2 2 Zawady 42
+329000.0 True 3 3 Piątkowo 60
+539000.0 True 3 1 Nowe 70
+335000.0 True 4 4 Rataje 50
+305000.0 True 2 1 Sołacz 48
+239000.0 True 2 3 Winogrady 10
+269000.0 True 2 0 Grunwald 20
+269000.0 True 3 1 Wilda 68
+429000.0 True 3 3 Centrum 102
+219000.0 True 2 2 Rataje 38
+1200000.0 True 4 2 Jeżyce 188
+350000.0 True 3 0 Winogrady 48
+250000.0 True 2 4 Rataje 44
+410000.0 True 2 9 Rataje 51
+485000.0 False 2 4 Łazarz 80
+409240.0 False 2 3 Piątkowo 67
+454960.0 False 2 1 Łazarz 87
+384500.0 False 2 3 Piątkowo 50
+392420.0 False 2 3 Piątkowo 70
+295020.0 False 2 2 Piątkowo 70
+298320.0 False 2 2 Piątkowo 20
+295020.0 False 2 1 Piątkowo 70
+298320.0 False 2 1 Piątkowo 20
+297000.0 False 2 1 Piątkowo 45
+286080.0 False 2 0 Piątkowo 70
+293800.0 False 2 0 Piątkowo 20
+292500.0 False 2 0 Piątkowo 45
+300950.0 False 2 0 Piątkowo 30
+227500.0 False 2 3 Piątkowo 20
+427060.0 False 2 3 Piątkowo 50
+699000.0 True 4 2 Naramowice 92
+409240.0 False 2 3 Piątkowo 67
+287760.0 False 2 2 Piątkowo 60
+278720.0 False 2 2 Piątkowo 60
+287100.0 False 2 2 Piątkowo 50
+240000.0 True 2 0 Grunwald 60
+295020.0 False 2 2 Piątkowo 70
+287760.0 False 2 1 Piątkowo 60
+278720.0 False 2 1 Piątkowo 60
+287100.0 False 2 1 Piątkowo 50
+360000.0 True 2 5 Grunwald 41
+304920.0 False 2 1 Piątkowo 20
+295020.0 False 2 1 Piątkowo 70
+239000.0 True 2 4 Rataje 38
+360000.0 True 3 1 Jeżyce 20
+350000.0 True 4 4 Stare 60
+450000.0 True 2 2 Stare 40
+211190.0 False 2 0 Piątkowo 78
+294840.0 False 2 4 Winogrady 50
+399000.0 False 3 2 Winogrady 98
+299514.0 False 2 1 Starołęka 85
+299000.0 True 2 4 Grunwald 37
+287000.0 True 2 16 Rataje 49
+420000.0 True 4 3 Łazarz 104
+274900.0 True 2 13 Nowe 80
+720000.0 True 4 0 Centrum 163
+339000.0 True 3 1 Rataje 66
+480000.0 True 2 2 Grunwald 10
+283400.0 False 2 0 Piątkowo 60
+282750.0 False 2 0 Piątkowo 50
+300300.0 False 2 0 Piątkowo 20
+286080.0 False 2 0 Piątkowo 70
+210000.0 True 2 2 Zawady 42
+320000.0 True 2 4 Winogrady 57
+410000.0 True 2 5 Rataje 50
+315000.0 True 3 0 Stare 63
+365000.0 True 2 1 Jeżyce 56
+340000.0 True 3 9 Rataje 30
+339000.0 True 3 9 Rataje 65
+325000.0 True 3 7 Rataje 90
+349000.0 True 3 2 Górczyn 55
+375000.0 True 4 2 Centrum 72
+269000.0 True 3 3 Winogrady 48
+495000.0 True 4 3 Naramowice 104
+329000.0 True 3 3 Wilda 82
+385000.0 True 3 0 Łazarz 80
+395000.0 True 2 1 Stare 30
+285000.0 True 2 3 Wilda 43
+325000.0 True 2 3 Centrum 57
+305000.0 True 2 1 Sołacz 48
+339000.0 True 3 0 Rataje 20
+480000.0 True 3 1 Grunwald 40
+630000.0 True 4 0 Stare 84
+275000.0 True 2 2 Plewiska 62
+350000.0 True 2 4 Jeżyce 56
+488000.0 True 3 3 Grunwald 70
+305000.0 True 2 1 Winiary 48
+255000.0 True 2 4 Rataje 70
+285000.0 True 3 0 Wilda 61
+282995.0 True 2 0 Starołęka 59
+263000.0 True 3 4 Grunwald 48
+380931.0 False 3 3 Starołęka 82
+329000.0 True 2 3 Rataje 49
+325000.0 True 3 7 Rataje 90
+350000.0 True 3 0 Starołęka 44
+268000.0 True 2 0 Rataje 43
+253000.0 True 2 4 Grunwald 42
+269000.0 True 2 1 Rataje 50
+325000.0 True 3 7 Rataje 63
+300000.0 True 3 6 Wilda 50
+329000.0 True 3 1 Piątkowo 63
+415000.0 True 2 5 Nowe 53
+270000.0 True 3 4 Rataje 47
+300000.0 True 3 6 Wilda 50
+690000.0 True 5 1 Jeżyce 70
+250000.0 True 2 5 Wilda 12
+344000.0 True 2 2 Wilczak 50
+329000.0 True 3 3 Piątkowo 60
+978009.0 False 4 7 Grunwald 2
+864244.5 False 4 7 Grunwald 71
+329000.0 True 3 1 Piątkowo 63
+255000.0 True 2 2 Dębiec 48
+279999.0 True 2 1 Piątkowo 90
+245000.0 True 2 2 Winogrady 20
+510000.0 True 3 3 Grunwald 79
+380000.0 True 2 1 Centrum 67
+355000.0 False 3 0 Stare 61
+355000.0 False 3 0 Podolany 61
+430000.0 False 4 0 Stare 75
+430000.0 False 4 0 Podolany 75
+475000.0 False 4 0 Stare 72
+475000.0 False 4 0 Podolany 72
+455000.0 False 4 0 Stare 72
+455000.0 False 4 0 Podolany 72
+495000.0 False 4 0 Stare 7
+495000.0 False 4 0 Podolany 7
+652100.0 False 4 3 Stare 79
+476200.0 False 3 1 Stare 59
+476200.0 False 3 1 Chwaliszewo 59
+349700.0 False 2 2 Stare 15
+349700.0 False 2 2 Centrum 15
+340000.0 True 3 0 Stare 80
+555000.0 True 5 3 Piątkowo 125
+255000.0 True 2 2 Dębiec 48
+295000.0 True 3 2 Os 20
+295000.0 True 3 2 Os 20
+210000.0 True 2 0 Wilda 36
+239000.0 True 2 1 Grunwald 60
+269000.0 True 2 1 Stare 70
+460040.0 False 3 5 Grunwald 20
+399000.0 False 5 0 Szczepankowo 68
+372651.0 True 2 1 Stare 5
+349668.0 True 2 2 Stare 15
+282390.0 True 2 3 Stare 64
+597184.0 True 2 4 Stare 61
+320000.0 True 2 1 Grunwald 30
+269000.0 True 2 16 Rataje 49
+359000.0 True 2 1 Jeżyce 40
+285000.0 True 3 0 Dębiec 50
+290000.0 True 2 3 Stare 60
+320000.0 True 3 1 Grunwald 78
+344000.0 True 2 2 Wilczak 50
+395000.0 True 2 1 Stare 30
+299000.0 True 2 0 Dębiec 52
+495000.0 True 4 3 Jeżyce 107
+319000.0 True 2 1 Grunwald 52
+395000.0 True 2 1 Naramowice 30
+319000.0 True 2 1 Grunwald 52
+269000.0 True 2 0 Grunwald 46
+380000.0 True 4 6 Piątkowo 90
+297297.0 False 2 4 Podolany 82
+33760350.0 False 3 4 Podolany 71
+420000.0 True 3 1 Stare 60
+3559725.0 False 3 4 Podolany 85
+3559725.0 False 3 4 Podolany 85
+259000.0 True 2 1 Stare 60
+465000.0 True 3 3 Nowe 71
+282994.0 False 2 0 Starołęka 59
+300680.0 False 2 2 Starołęka 54
+349000.0 False 4 0 Szczepankowo 29
+277823.0 False 2 2 Podolany 70
+424377.0 False 4 2 Starołęka 14
+282944.0 False 2 0 Starołęka 59
+380000.0 True 3 3 Piątkowo 90
+270000.0 True 3 1 Starołęka 30
+365000.0 True 2 2 Grunwald 51
+550000.0 True 3 2 Stare 101
+300000.0 True 2 1 Naramowice 52
+450000.0 True 4 1 Grunwald 113
+490000.0 True 4 0 Naramowice 40
+216500.0 True 2 3 Nowe 30
+244071.0 True 2 1 Nowe 93
+192750.0 True 2 1 Nowe 55
+156562.0 True 2 1 Nowe 54
+350000.0 True 4 4 Piątkowo 76
+329000.0 True 3 3 Piątkowo 60
+298000.0 True 2 4 Wilda 45
+374000.0 True 3 4 Wilczak 30
+460000.0 True 2 2 Centrum 56
+288000.0 True 3 4 Winogrady 30
+400000.0 True 2 1 Świerczewo 60
+220000.0 True 2 4 Grunwald 43
+290000.0 True 2 4 Grunwald 53
+298000.0 True 2 4 Wilda 45
+439000.0 True 2 3 Jeżyce 60
+237000.0 True 2 2 Dębiec 44
+180000.0 True 3 2 Wilda 35
+330000.0 True 2 1 Jeżyce 50
+348000.0 True 3 9 Rataje 65
+439000.0 True 4 2 Grunwald 89
+269000.0 True 2 6 Rataje 70
+360000.0 True 3 3 Stare 63
+1000000.0 True 4 1 Centrum 103
+649400.0 False 3 4 Rataje 50
+311570.0 False 2 4 Rataje 51
+386883.0 False 3 4 Rataje 7
+383928.0 False 3 3 Rataje 46
+294906.0 False 2 3 Rataje 74
+309741.0 False 2 3 Rataje 89
+295734.0 False 2 3 Rataje 86
+384540.0 False 3 3 Rataje 55
+377947.0 False 3 2 Rataje 41
+310707.0 False 2 2 Rataje 3
+296631.0 False 2 2 Rataje 99
+380091.0 False 3 2 Rataje 73
+375672.0 False 3 1 Rataje 92
+293352.0 False 2 1 Rataje 14
+307156.0 False 2 1 Rataje 17
+293352.0 False 2 1 Rataje 14
+535000.0 True 2 3 Łazarz 59
+375606.0 False 3 1 Rataje 91
+293488.0 False 3 0 Rataje 94
+293488.0 False 2 0 Rataje 57
+260000.0 True 2 3 Rataje 38
+307428.0 False 2 0 Rataje 21
+293488.0 False 2 0 Rataje 16
+375408.0 False 3 0 Rataje 88
+325000.0 True 2 0 Rataje 47
+405000.0 True 3 2 Rataje 70
+360000.0 True 3 2 Rataje 20
+275000.0 True 2 13 Rataje 49
+410000.0 True 2 5 Rataje 30
+243828.0 False 2 4 Podolany 68
+398853.0 False 3 3 Podolany 18
+421258.0 False 4 3 Podolany 1
+348835.0 False 3 3 Podolany 63
+273546.0 False 2 3 Podolany 76
+256171.0 False 2 3 Podolany 79
+298116.0 False 2 3 Podolany 96
+306247.0 False 2 3 Podolany 35
+337602.0 False 3 3 Podolany 71
+357084.0 False 3 3 Podolany 4
+244647.0 False 2 3 Podolany 82
+641000.0 True 3 3 Łazarz 75
+277000.0 True 2 10 Nowe 80
+450000.0 True 2 2 Grunwald 70
+242000.0 True 2 1 Grunwald 52
+310000.0 True 3 4 Jeżyce 50
+475000.0 True 3 4 Wilda 66
+475000.0 True 3 4 Wilda 66
+120000.0 True 3 3 Grunwald 35
+120000.0 True 3 3 Grunwald 35
+1850000.0 True 5 1 Grunwald 196
+350000.0 True 4 4 Grunwald 50
+280000.0 True 4 4 Grunwald 40
+490000.0 True 4 4 Grunwald 70
+495000.0 True 3 1 Naramowice 70
+545000.0 True 3 0 Rataje 71
+310000.0 True 3 10 Rataje 80
+209000.0 True 2 0 Wilda 36
+295000.0 True 2 4 Garbary 33
+200000.0 True 2 8 Dębiec 50
+359900.0 True 4 4 Rataje 74
+320000.0 True 3 3 Jeżyce 70
+300000.0 True 2 1 Naramowice 23
+535000.0 True 4 2 Wilda 120
+620000.0 True 3 2 Naramowice 60
+495000.0 True 4 1 Naramowice 10
+240000.0 True 2 10 Rataje 36
+597000.0 True 3 0 Naramowice 60
+260000.0 True 2 0 Rataje 40
+399000.0 True 3 0 Winogrady 62
+275000.0 True 3 7 Wilda 20
+350000.0 True 2 2 Piątkowo 50
+429000.0 True 3 0 Grunwald 75
+380000.0 True 3 8 Rataje 80
+295000.0 True 2 1 Rataje 30
+339000.0 True 3 1 Rataje 88
+382000.0 True 3 3 Centrum 30
+299000.0 True 2 2 Sołacz 58
+499000.0 True 3 1 Grunwald 64
+549000.0 True 3 2 Jeżyce 106
+239000.0 True 2 1 Grunwald 36
+295000.0 True 3 2 Grunwald 49
+470000.0 True 4 2 Sołacz 87
+413000.0 True 3 3 Łazarz 46
+259000.0 True 2 1 Jeżyce 47
+348000.0 True 3 9 Nowe 65
+259000.0 True 2 0 Ławica 60
+269000.0 True 2 9 Rataje 49
+224000.0 True 2 0 Łazarz 50
+260000.0 True 3 4 Grunwald 49
+315000.0 True 3 0 Piątkowo 60
+379999.0 True 3 3 Wilda 67
+350000.0 True 2 1 Rataje 63
+270000.0 True 2 4 Grunwald 38
+250000.0 True 3 3 Rataje 53
+439000.0 True 4 2 Łazarz 92
+499000.0 True 3 1 Rataje 50
+290000.0 True 2 2 Dębiec 66
+320000.0 True 2 4 Łazarz 80
+379000.0 True 3 0 Wilda 67
+399000.0 True 3 2 Dębiec 91
+220000.0 True 2 4 Grunwald 43
+268000.0 True 3 4 Jeżyce 50
+399000.0 True 3 1 Bonin 68
+329000.0 True 3 4 Rataje 63
+353457.0 False 2 3 Stare 16
+347900.0 True 3 3 Nowe 10
+237000.0 True 2 2 Dębiec 44
+399000.0 True 3 1 Sołacz 66
+488000.0 True 3 3 Grunwald 70
+220000.0 True 2 4 Grunwald 43
+390000.0 True 3 2 Podolany 68
+299000.0 True 2 0 Wilda 52
+320000.0 True 3 4 Winogrady 50
+370000.0 True 4 4 Piątkowo 73
+339000.0 True 3 9 Rataje 65
+348000.0 True 3 9 Rataje 65
+420000.0 False 4 0 Grunwald 82
+495000.0 True 4 1 Stare 98
+329000.0 True 2 1 Stare 54
+699000.0 True 3 2 Stare 92
+487000.0 True 3 0 Stare 73
+375000.0 True 3 0 Naramowice 69
+270000.0 True 3 4 Rataje 48
+230000.0 True 2 1 Dębiec 38
+498000.0 True 4 4 Centrum 85
+390000.0 True 3 2 Podolany 68
+330000.0 True 4 2 Rataje 62
+299000.0 True 3 6 Jeżyce 70
+270000.0 True 3 4 Rataje 48
+390000.0 True 3 2 Podolany 68
+269000.0 True 2 2 Sołacz 49
+270000.0 True 3 4 Rataje 48
+232034.0 True 2 1 Starołęka 86
+265000.0 True 2 4 Winiary 10
+475000.0 True 2 4 Centrum 54
+585000.0 True 4 1 Piątkowo 100
+260000.0 True 2 0 Naramowice 46
+350000.0 True 4 4 Stare 76
+430000.0 True 2 5 Wilda 57
+366770.0 True 3 1 Winogrady 10
+285200.0 True 2 1 Winogrady 46
+319055.0 True 3 3 Grunwald 21
+307881.0 True 3 0 Grunwald 16
+267702.0 True 2 2 Grunwald 22
+239592.0 True 2 5 Grunwald 59
+375529.0 False 2 3 Stare 71
+247705.0 False 2 1 Podolany 74
+247705.0 False 2 1 Piątkowo 74
+411684.0 False 3 3 Winogrady 17
+349000.0 False 4 0 Szczepankowo 29
+277823.0 False 2 2 Podolany 70
+424377.0 False 4 2 Starołęka 14
+282944.0 False 2 0 Starołęka 59
+270000.0 True 3 0 Grunwald 48
+350000.0 True 4 1 Wilda 80
+340000.0 True 4 4 Winogrady 90
+599000.0 True 4 4 Centrum 109
+369000.0 True 3 0 Wilda 30
+549000.0 True 3 3 Grunwald 60
+345865.0 True 3 2 Jeżyce 21
+261000.0 True 2 2 Jeżyce 57
+410000.0 True 3 2 Jeżyce 74
+339000.0 True 2 2 Centrum 53
+399000.0 True 3 1 Grunwald 65
+410000.0 True 2 2 Jeżyce 74
+295000.0 True 2 2 Raszyn 50
+240000.0 True 2 16 Rataje 36
+250000.0 True 2 4 Rataje 23
+245000.0 True 2 4 Rataje 44
+269000.0 True 2 9 Rataje 49
+240000.0 True 2 2 Dębiec 48
+262000.0 True 2 4 Grunwald 60
+349000.0 True 3 1 Grunwald 57
+365000.0 True 3 1 Rataje 67
+409000.0 True 3 1 Malta 90
+298000.0 True 2 1 Łazarz 55
+599000.0 True 3 3 Grunwald 83
+289000.0 True 2 2 Jeżyce 42
+390000.0 True 3 3 Naramowice 48
+270000.0 True 2 2 Bonin 49
+250000.0 True 2 0 Naramowice 40
+350000.0 True 3 1 Naramowice 51
+270000.0 True 2 2 Sołacz 49
+260000.0 True 2 0 Rataje 46
+339000.0 True 3 9 Rataje 65
+348000.0 True 3 9 Rataje 65
+329000.0 True 3 2 Rataje 59
+230000.0 True 2 1 Dębiec 37
+238000.0 True 2 2 Grunwald 37
+392000.0 True 4 0 Piątkowo 74
+200000.0 True 2 0 Rataje 30
+370000.0 True 4 2 Piątkowo 74
+347000.0 True 3 1 Naramowice 47
+432000.0 True 2 5 Centrum 40
+435000.0 True 3 1 Piątkowo 84
+389000.0 True 2 1 Podolany 46
+799999.0 True 3 1 Sołacz 90
+248000.0 True 3 0 Jeżyce 74
+266000.0 True 2 2 Piątkowo 49
+316498.0 True 2 2 Stare 77
+519000.0 True 3 1 Rataje 50
+442150.0 True 2 2 Stare 75
+395000.0 True 3 2 Centrum 74
+599000.0 True 2 1 Centrum 70
+550.0 True 5 3 Naramowice 15
+499000.0 True 3 0 Grunwald 10
+499000.0 True 3 0 Grunwald 10
+459000.0 True 2 1 Centrum 48
+365000.0 True 3 2 Jeżyce 50
+375000.0 True 3 2 Jeżyce 50
+450000.0 True 3 11 Jeżyce 50
+289000.0 True 2 4 Ogrody 41
+230000.0 True 2 5 Winogrady 60
+440000.0 True 2 4 Centrum 55
+599000.0 True 3 2 Centrum 80
+343200.0 True 3 4 Winogrady 52
+435000.0 True 3 5 Wilda 70
+385000.0 True 2 1 Centrum 60
+300000.0 True 3 3 Centrum 88
+550000.0 True 3 1 Junikowo 84
+529000.0 True 4 4 Centrum 85
+460000.0 True 4 2 Bonin 87
+335000.0 True 3 3 Wilda 82
+405000.0 True 4 2 Nowe 71
+379000.0 True 3 0 Wilda 67
+379000.0 True 3 3 Winiary 55
+360000.0 True 3 4 Rataje 69
+495000.0 True 4 1 Grunwald 64
+285000.0 True 2 3 Wilda 60
+379999.0 True 3 3 Wilda 67
+370000.0 True 2 13 Rataje 67
+700000.0 True 4 1 Górczyn 160
+479000.0 True 3 3 Górczyn 70
+385000.0 True 3 0 Łazarz 80
+550000.0 True 4 1 Łazarz 50
+260000.0 True 3 4 Grunwald 47
+755000.0 True 4 2 Łazarz 90
+319000.0 True 2 0 Górczyn 54
+485000.0 True 2 2 Centrum 55
+485000.0 True 2 2 Centrum 55
+576500.0 True 2 5 Centrum 50
+576500.0 True 2 5 Chwaliszewo 50
+339000.0 True 2 5 Górczyn 41
+438503.0 True 3 2 Centrum 57
+419000.0 True 2 0 Rataje 55
+354454.0 False 2 3 Grunwald 17
+363258.0 False 2 1 Górczyn 59
+489780.0 False 4 2 Górczyn 63
+491520.0 False 4 1 Górczyn 92
+273875.5 False 2 1 Grunwald 13
+267000.0 True 2 2 Dębiec 35
+260000.0 True 2 2 Piątkowo 90
+587000.0 True 4 3 Łazarz 38
+460000.0 True 3 1 Naramowice 110
+695000.0 True 4 1 Rataje 70
+506657.0 True 4 11 Grunwald 73
+338325.0 True 2 13 Grunwald 5
+249641.0 True 2 0 Ogrody 54
+298250.0 True 2 5 Grunwald 38
+297421.0 True 2 2 Grunwald 24
+275000.0 True 2 9 Nowe 38
+249641.0 True 2 0 Jeżyce 54
+344141.0 True 2 8 Winogrady 47
+318384.0 True 3 6 Jeżyce 24
+269984.0 True 3 4 Winogrady 76
+447000.0 True 3 4 Grunwald 20
+450000.0 True 3 2 Strzeszyn 70
+690000.0 True 4 5 Górczyn 25
+334000.0 True 2 4 Sołacz 50
+289476.0 False 2 3 Jeżyce 84
+533745.0 False 5 2 Starołęka 4
+333694.0 False 3 1 Podolany 32
+333694.0 False 3 1 Piątkowo 38
+310000.0 True 2 2 Centrum 74
+310000.0 True 2 1 Grunwald 52
+250000.0 True 2 2 Łazarz 36
+265000.0 True 2 4 Jeżyce 43
+558745.0 False 3 3 Stare 62
+298000.0 True 2 5 Centrum 50
+347090.0 False 3 1 Winogrady 90
+362459.0 False 3 0 Starołęka 80
+754000.0 True 7 1 Stare 116
+247705.0 False 2 1 Podolany 74
+313000.0 True 2 4 Piątkowo 49
+339000.0 True 3 8 Nowe 78
+207000.0 True 2 2 Wilda 33
+295000.0 True 2 4 Grunwald 50
+330000.0 True 3 0 Jeżyce 78
+324500.0 True 2 5 Wilda 65
+429000.0 True 3 4 Wilda 47
+275000.0 True 2 9 Rataje 38
+365000.0 True 4 1 Nowe 54
+259000.0 True 2 6 Winogrady 38
+369000.0 True 2 3 Piątkowo 60
+414225.0 True 3 3 Centrum 23
+269000.0 True 3 3 Winogrady 48
+320000.0 True 2 3 Rataje 20
+288465.0 True 2 1 Starołęka 77
+321845.0 False 3 1 Grunwald 55
+389000.0 True 3 4 Piątkowo 16
+289000.0 True 2 7 Winiary 80
+249000.0 True 2 0 Komorniki 53
+391729.0 True 3 2 Winogrady 21
+285383.0 True 2 1 Winogrady 37
+228144.0 True 3 2 Nowe 56
+204450.0 True 2 1 Nowe 33
+496573.0 False 3 2 Stare 78
+286000.0 True 2 5 Centrum 49
+269000.0 True 2 1 Ogrody 50
+114642.0 True 2 0 Łazarz 46
+286000.0 True 2 5 Centrum 49
+390000.0 True 2 0 Świerczewo 60
+320000.0 True 4 1 Jeżyce 40
+706655.0 False 3 2 Nowe 45
+754000.0 False 5 0 Morasko 42
+259000.0 True 3 4 Winogrady 60
+289000.0 True 2 7 Winogrady 80
+350000.0 True 3 0 Rataje 63
+260000.0 True 2 1 Łazarz 54
+319990.0 True 2 3 Jeżyce 70
+228144.0 False 3 2 Głuszyna 56
+156085.0 False 2 2 Głuszyna 45
+350000.0 True 4 4 Stare 60
+394000.0 False 4 0 Szczepankowo 77
+287882.0 False 2 1 Starołęka 85
+445000.0 True 4 3 Piątkowo 65
+229000.0 True 2 1 Grunwald 16
+220000.0 True 2 3 Jeżyce 37
+285000.0 True 3 2 Antoninek 61
+550000.0 True 3 1 Jeżyce 73
+504326.0 True 4 4 Stare 26
+371930.0 True 4 2 Jeżyce 57
+255000.0 True 3 2 Grunwald 20
+279000.0 True 2 3 Piątkowo 30
+325000.0 True 2 0 Nowe 80
+604395.0 True 5 1 Wilda 31
+558000.0 True 5 1 Wilda 2
+1007500.0 False 4 1 Starołęka 94
+1203616.0 False 5 0 Starołęka 71
+298980.0 False 2 5 Winogrady 30
+263140.0 False 2 0 Naramowice 5
+281988.0 False 2 7 Naramowice 76
+349000.0 False 4 0 Szczepankowo 29
+277823.0 False 2 2 Podolany 70
+424377.0 False 4 2 Starołęka 14
+282944.0 False 2 0 Starołęka 59
+282944.0 False 2 0 Starołęka 59
+349668.0 False 2 2 Stare 15
+321904.0 False 2 4 Winogrady 92
+367000.0 True 3 1 Centrum 30
+350000.0 True 3 1 Nowe 63
+350000.0 True 2 1 Rataje 63
+399000.0 True 3 5 Grunwald 98
+429000.0 True 3 3 Centrum 102
+451000.0 True 3 2 Wilda 30
+565000.0 True 4 0 Sołacz 90
+285000.0 True 3 2 Antoninek 61
+350000.0 True 2 1 Rataje 54
+299000.0 True 2 5 Centrum 50
+269000.0 True 2 9 Rataje 49
+249000.0 True 2 2 Grunwald 46
+285000.0 True 3 2 Antoninek 10
+250000.0 True 2 4 Wilda 54
+269000.0 True 3 1 Wilda 68
+350000.0 True 4 4 Piątkowo 76
+360000.0 True 3 1 Grunwald 49
+260000.0 True 2 0 Rataje 46
+350000.0 True 2 4 Jeżyce 56
+263000.0 True 2 1 Rataje 44
+285000.0 True 2 2 Centrum 52
+285000.0 True 2 2 Łazarz 52
+429000.0 True 4 2 Grunwald 92
+211190.0 False 2 0 Podolany 78
+219000.0 True 2 3 Wilda 40
+820000.0 True 4 1 Grunwald 133
+299000.0 True 2 1 Centrum 11
+288000.0 True 2 4 Naramowice 44
+820000.0 True 4 1 Grunwald 133
+470000.0 True 4 2 Sołacz 87
+364000.0 True 3 4 Nowe 90
+706655.0 False 3 2 Nowe 45
+425000.0 True 3 1 Rataje 70
+248000.0 True 2 2 Winogrady 80
+260000.0 True 3 10 Śródka 48
+289000.0 True 2 0 Grunwald 80
+389000.0 True 3 4 Nowe 84
+253000.0 True 2 0 Łazarz 10
+449000.0 False 5 0 Szczepankowo 68
+225288.0 False 2 1 Rataje 91
+389528.0 False 2 2 Stare 87
+481903.0 False 3 2 Stare 53
+349000.0 False 4 0 Szczepankowo 29
+534523.0 False 3 2 Stare 62
+465538.0 False 3 1 Stare 78
+263000.0 True 2 0 Wilda 75
+370000.0 True 4 4 Piątkowo 76
+305000.0 True 3 3 Winogrady 60
+180000.0 True 3 2 Wilda 35
+189000.0 True 2 4 Wilda 35
+357692.0 False 3 2 Starołęka 31
+282994.0 False 2 0 Starołęka 59
+211190.0 False 2 0 Piątkowo 78
+349000.0 False 4 0 Szczepankowo 29
+277823.0 False 2 2 Podolany 70
+424377.0 False 4 2 Starołęka 14
+282944.0 False 2 0 Starołęka 59
+282944.0 False 2 0 Starołęka 59
+245000.0 True 2 7 Rataje 44
+570000.0 True 4 0 Jeżyce 90
+720000.0 True 4 7 Jeżyce 90
+237000.0 True 2 2 Dębiec 44
+329000.0 True 3 3 Piątkowo 60
+270000.0 True 3 3 Stare 47
+487000.0 True 3 0 Naramowice 83
+271000.0 True 2 3 Stare 37
+372000.0 False 4 1 Grunwald 87
+487000.0 True 3 0 Stare 11
+326000.0 True 2 1 Sołacz 39
+270000.0 True 2 10 Śródka 48
+349000.0 True 3 3 Rataje 63
+285000.0 True 2 2 Grunwald 52
+262500.0 True 4 0 Wilda 75
+350000.0 True 2 1 Rataje 80
+199000.0 True 2 3 Grunwald 35
+349000.0 False 4 0 Szczepankowo 29
+250000.0 True 2 3 Wilda 10
+234000.0 True 2 7 Wilda 46
+210000.0 True 2 1 Wilda 65
+249000.0 True 2 10 Grunwald 43
+469000.0 True 2 1 Winogrady 30
+235000.0 True 2 0 Nowe 10
+265000.0 True 2 0 Centrum 40
+329000.0 True 3 13 Rataje 65
+265000.0 True 2 2 Piątkowo 70
+350000.0 True 3 0 Stare 10
+307000.0 True 2 4 Stare 49
+315000.0 True 3 0 Stare 63
+350000.0 True 3 0 Rataje 63
+690000.0 True 2 1 Stare 20
+423000.0 True 2 2 Wilda 49
+250000.0 True 2 6 Grunwald 31
+292000.0 True 3 2 Winogrady 47
+249000.0 True 2 10 Grunwald 42
+350000.0 True 2 3 Rataje 52
+780000.0 True 3 0 Grunwald 87
+1000000.0 True 15 5 Wilda 50
+535000.0 True 2 2 Centrum 55
+285200.0 True 2 0 Stare 46
+434201.0 True 4 1 Nowe 54
+344152.0 True 3 0 Nowe 80
+396000.0 True 3 1 Wilda 50
+240000.0 True 2 16 Rataje 36
+390000.0 True 3 4 Piątkowo 74
+288000.0 True 2 4 Naramowice 22
+518000.0 True 4 0 Wilda 41
+320000.0 True 4 3 Stare 40
+449000.0 True 5 3 Wilda 97
+249000.0 True 2 10 Grunwald 42
+289000.0 True 3 4 Winogrady 48
+289000.0 True 2 7 Jeżyce 80
+330715.0 True 2 2 Wilda 13
+97000.0 True 2 4 Wilda 80
+285000.0 True 2 2 Łazarz 20
+389000.0 True 3 4 Piątkowo 69
+249000.0 True 2 4 Rataje 44
+409000.0 True 3 1 Rataje 62
+240000.0 True 2 2 Dębiec 48
+289000.0 True 3 4 Stare 47
+270000.0 True 3 10 Grunwald 52
+389000.0 True 3 4 Piątkowo 69
+179000.0 True 2 0 Grunwald 34
+364000.0 False 3 6 Grunwald 64
+410000.0 True 2 4 Jeżyce 43
+590000.0 True 3 3 Jeżyce 30
+325000.0 True 3 2 Jeżyce 64
+398000.0 True 3 3 Łazarz 96
+255000.0 True 2 2 Wilda 72
+329000.0 True 2 1 Naramowice 40
+290000.0 True 2 6 Winiary 49
+319875.0 False 2 8 Grunwald 18
+356251.9 False 3 13 Grunwald 20
+319875.0 False 2 7 Grunwald 18
+350557.33 False 2 13 Grunwald 58
+338325.0 False 2 13 Grunwald 5
+329763.26 False 2 9 Grunwald 94
+324400.97 False 2 7 Grunwald 94
+388352.0 False 3 7 Grunwald 60
+347633.0 False 3 10 Grunwald 20
+409713.0 False 3 11 Grunwald 62
+330368.0 False 2 12 Grunwald 62
+347839.75 False 2 12 Grunwald 58
+347193.22 False 3 11 Grunwald 7
+350506.16 False 3 11 Grunwald 20
+342405.13 False 2 11 Grunwald 58
+319875.0 False 2 9 Grunwald 18
+341703.96 False 3 8 Grunwald 21
+336969.98 False 2 10 Grunwald 58
+413044.0 False 3 12 Grunwald 62
+341703.96 False 3 9 Grunwald 21
+325206.0 False 2 10 Grunwald 62
+338111.0 False 2 15 Grunwald 62
+424977.14 False 4 5 Grunwald 20
+327787.0 False 2 11 Grunwald 62
+353378.74 False 3 12 Grunwald 20
+332949.0 False 2 13 Grunwald 62
+383760.0 False 3 6 Grunwald 60
+335530.0 False 2 14 Grunwald 62
+387040.0 False 3 5 Grunwald 60
+302985.6 False 2 4 Grunwald 18
+421375.5 False 4 4 Grunwald 20
+410780.0 False 3 3 Grunwald 44
+417773.83 False 4 3 Grunwald 20
+303286.5 False 2 3 Grunwald 13
+302038.4 False 2 3 Grunwald 2
+319055.27 False 3 3 Grunwald 21
+414352.0 False 3 4 Grunwald 44
+417807.03 False 4 4 Grunwald 7
+414172.54 False 4 2 Grunwald 20
+352390.0 False 2 12 Grunwald 80
+377200.0 False 3 3 Grunwald 60
+314089.0 False 2 5 Grunwald 49
+339072.0 False 2 9 Grunwald 98
+321812.5 False 2 8 Grunwald 49
+500203.02 False 4 10 Grunwald 73
+355080.0 False 2 13 Grunwald 80
+325184.0 False 2 11 Grunwald 81
+297420.8 False 2 3 Grunwald 24
+506566.5 False 4 11 Grunwald 73
+335722.5 False 2 12 Grunwald 5
+349700.0 False 2 11 Grunwald 80
+330517.5 False 2 10 Grunwald 5
+495722.51 False 4 9 Grunwald 99
+426416.8 False 4 6 Grunwald 20
+327081.85 False 2 8 Grunwald 94
+307080.0 False 2 5 Grunwald 18
+305793.0 False 2 4 Grunwald 13
+380480.0 False 3 4 Grunwald 60
+312198.0 False 2 6 Grunwald 18
+410665.2 False 4 2 Grunwald 7
+333231.99 False 3 7 Grunwald 21
+514939.5 False 4 13 Grunwald 73
+317880.0 False 2 2 Grunwald 98
+510753.0 False 4 12 Grunwald 73
+333120.0 False 2 11 Grunwald 5
+324387.0 False 2 9 Grunwald 49
+311514.5 False 2 4 Grunwald 49
+495722.51 False 4 8 Grunwald 99
+331125.0 False 2 5 Grunwald 98
+495782.26 False 4 7 Grunwald 99
+328476.0 False 2 4 Grunwald 98
+316848.0 False 2 6 Grunwald 52
+442803.77 False 4 5 Grunwald 7
+315819.0 False 2 5 Grunwald 13
+293436.18 False 2 1 Grunwald 15
+435784.0 False 3 5 Grunwald 44
+414235.76 False 4 3 Grunwald 7
+407208.0 False 3 2 Grunwald 44
+579000.0 True 4 3 Naramowice 97
+410000.0 True 2 5 Rataje 53
+199000.0 True 2 4 Grunwald 20
+375000.0 True 2 3 Grunwald 51
+350000.0 True 3 0 Naramowice 59
+289000.0 True 3 4 Winogrady 47
+240000.0 True 2 16 Rataje 36
+350000.0 True 3 1 Naramowice 51
+238000.0 True 3 2 Warszawskie 48
+277823.0 False 2 2 Podolany 70
+372000.0 True 4 1 Nadolnik 125
+410000.0 True 2 5 Rataje 53
+249000.0 True 2 4 Rataje 44
+420000.0 True 2 1 Naramowice 50
+420000.0 True 2 3 Naramowice 50
+339000.0 True 2 2 Stare 53
+298000.0 True 3 1 Nowe 30
+250000.0 True 3 0 Stare 45
+475000.0 True 4 4 Naramowice 50
+329000.0 True 3 1 Jeżyce 112
+439000.0 True 3 3 Grunwald 10
+250000.0 True 2 6 Winogrady 42
+259000.0 True 3 1 Grunwald 48
+375000.0 True 2 7 Piątkowo 90
+295000.0 True 2 7 Stare 10
+370000.0 True 4 4 Piątkowo 60
+325000.0 True 3 3 Łazarz 62
+375000.0 True 3 1 Nowe 63
+390000.0 True 4 4 Piątkowo 74
+288000.0 True 3 4 Stare 30
+468000.0 True 2 3 Grunwald 60
+250000.0 True 2 6 Winogrady 42
+350000.0 True 2 2 Jeżyce 46
+292000.0 True 3 2 Winogrady 30
+310000.0 True 2 1 Nowe 40
+289000.0 True 3 4 Winogrady 47
+405900.0 True 3 2 Stare 82
+149000.0 True 3 5 Nowe 56
+326000.0 True 2 1 Sołacz 39
+350000.0 True 2 2 Jeżyce 47
+224343.0 False 2 4 Starołęka 35
+362220.0 False 3 3 Starołęka 60
+287394.0 False 2 2 Starołęka 50
+320739.0 False 3 1 Starołęka 56
+177000.0 True 2 2 Dębiec 25
+313000.0 True 2 1 Górczyn 48
+313000.0 True 2 1 Dębiec 48
+429000.0 True 3 4 Rataje 79
+643720.0 True 4 0 Stare 60
+325000.0 True 2 3 Stare 60
+319000.0 True 2 0 Grunwald 20
+364000.0 True 3 1 Nowe 67
+285000.0 True 2 2 Łazarz 52
+339000.0 True 2 2 Centrum 53
+279000.0 True 2 0 Naramowice 43
+350000.0 True 2 4 Jeżyce 53
+419000.0 True 3 1 Piątkowo 74
+195000.0 True 2 3 Zawady 35
+390000.0 True 2 0 Centrum 60
+177000.0 True 2 2 Dębiec 70
+279000.0 True 2 1 Stare 60
+489000.0 True 4 2 Wilda 120
+299000.0 True 2 1 Jeżyce 32
+205000.0 True 2 4 Wilda 27
+362000.0 True 2 1 Centrum 50
+285000.0 True 2 2 Łazarz 52
+998000.0 True 6 2 Stare 161
+259000.0 True 3 2 Grunwald 45
+439000.0 True 2 3 Rataje 53
+550000.0 True 4 1 Górczyn 90
+310000.0 True 3 10 Nowe 40
+355000.0 True 3 2 Stare 64
+252000.0 True 2 9 Grunwald 50
+659000.0 True 3 2 Nowe 60
+307000.0 True 2 4 Piątkowo 49
+347900.0 True 3 3 Nowe 10
+229000.0 True 2 3 Stare 56
+569000.0 True 4 0 Wilda 50
+136000.0 True 2 1 Nowe 43
+102500.0 True 2 3 Nowe 80
+485000.0 True 4 2 Grunwald 89
+360000.0 True 3 3 Nowe 63
+339000.0 True 3 3 Stare 90
+285000.0 True 2 0 Łazarz 49
+299000.0 True 2 1 Centrum 52
+429999.0 True 3 3 Centrum 20
+429999.0 True 3 3 Centrum 20
+395000.0 True 3 3 Wilda 75
+307000.0 True 2 4 Piątkowo 49
+326000.0 True 2 4 Łazarz 80
+382280.0 True 3 3 Centrum 50
+233239.0 False 2 2 Podolany 87
+400608.0 False 3 2 Podolany 48
+422604.0 False 4 2 Podolany 24
+350064.0 False 3 2 Podolany 84
+349420.0 False 3 2 Podolany 73
+275008.0 False 2 2 Podolany 1
+255762.0 False 2 2 Podolany 72
+257400.0 False 2 2 Podolany 44
+307710.0 False 2 2 Podolany 60
+338188.0 False 3 2 Podolany 81
+258336.0 False 2 2 Podolany 16
+370948.0 False 4 2 Podolany 41
+358605.0 False 3 2 Podolany 30
+245934.0 False 2 2 Podolany 4
+233941.0 False 2 1 Podolany 99
+401544.0 False 3 1 Podolany 64
+424008.0 False 4 1 Podolany 48
+350181.0 False 3 1 Podolany 86
+349537.0 False 3 1 Podolany 75
+275710.0 False 2 1 Podolany 13
+256756.0 False 2 1 Podolany 89
+258102.0 False 2 1 Podolany 12
+255000.0 True 2 3 Jeżyce 38
+300222.0 False 2 1 Podolany 22
+308412.0 False 2 1 Podolany 72
+338305.0 False 3 1 Podolany 83
+259038.0 False 2 1 Podolany 28
+371884.0 False 4 1 Podolany 57
+359541.0 False 3 1 Podolany 46
+234636.0 False 2 1 Podolany 16
+234234.0 False 2 0 Podolany 4
+401719.0 False 3 0 Podolany 67
+423715.0 False 4 0 Podolany 43
+350181.0 False 3 0 Podolany 86
+249537.0 False 3 0 Podolany 75
+276061.0 False 2 0 Podolany 19
+257341.0 False 2 0 Podolany 99
+258453.0 False 2 0 Podolany 18
+220837.0 False 2 0 Podolany 75
+419000.0 True 2 7 Grunwald 20
+419000.0 True 3 4 Wilda 60
+379000.0 True 2 3 Winogrady 48
+315000.0 True 3 0 Piątkowo 60
+339000.0 True 3 1 Rataje 67
+270000.0 True 2 4 Grunwald 38
+268000.0 True 2 5 Rataje 42
+1500000.0 True 3 5 Centrum 68
+264000.0 True 3 4 Nowe 53
+432000.0 True 4 1 Grunwald 72
+449900.0 True 3 2 Stare 81
+295000.0 True 2 1 Nowe 39
+290000.0 True 2 6 Sołacz 49
+307000.0 True 2 4 Piątkowo 49
+285000.0 True 2 3 Piątkowo 49
+285000.0 True 2 3 Wilda 60
+519000.0 True 3 1 Rataje 50
+264000.0 True 3 4 Rataje 53
+318000.0 True 2 4 Piątkowo 49
+325000.0 True 3 3 Sołacz 40
+377685.0 False 2 4 Podolany 4
+377685.0 False 3 4 Podolany 67
+423715.0 False 4 0 Podolany 43
+350181.0 False 3 0 Podolany 86
+349537.0 False 3 0 Podolany 75
+276061.0 False 2 0 Podolany 19
+242990.0 False 2 0 Podolany 18
+283645.0 False 2 0 Podolany 39
+308763.0 False 2 0 Podolany 78
+338305.0 False 3 0 Podolany 83
+480000.0 True 2 2 Centrum 56
+499000.0 True 2 2 Nowe 36
+299000.0 True 2 16 Rataje 49
+355000.0 True 3 2 Stare 64
+210000.0 True 2 0 Grunwald 52
+277098.0 True 2 0 Nowe 59
+410000.0 True 3 1 Górczyn 82
+399000.0 True 3 2 Górczyn 91
+390000.0 True 3 1 Łazarz 75
+370000.0 True 2 0 Górczyn 65
+239000.0 True 2 3 Piątkowo 59
+185000.0 True 2 8 Wilda 38
+432000.0 True 3 0 Wilda 72
+360000.0 True 3 4 Rataje 69
+259330.0 False 2 0 Podolany 33
+372996.0 False 4 0 Podolany 76
+360000.0 True 3 2 Rataje 69
+370000.0 True 4 4 Piątkowo 76
+338579.0 False 3 0 Podolany 56
+231550.0 False 2 0 Podolany 10
+325000.0 True 2 1 Jeżyce 56
+355000.0 True 2 4 Jeżyce 56
+275000.0 True 2 1 Sołacz 50
+355000.0 True 3 2 Piątkowo 66
+224000.0 True 2 0 Górczyn 50
+499000.0 True 3 1 Grunwald 65
+1300000.0 True 2 3 Wilda 90
+399000.0 True 2 4 Grunwald 49
+349999.0 True 4 4 Stare 60
+390000.0 True 3 3 Stare 48
+325000.0 True 3 4 Jeżyce 30
+360000.0 True 3 2 Rataje 69
+389000.0 True 3 4 Stare 74
+450000.0 True 3 2 Naramowice 66
+660000.0 True 4 2 Winogrady 110
+313000.0 True 2 4 Jeżyce 50
+289000.0 True 2 6 Jeżyce 86
+279000.0 True 3 3 Rataje 54
+282000.0 True 2 1 Jeżyce 38
+282000.0 True 2 1 Strzeszyn 38
+225000.0 True 2 2 Grunwald 38
+339000.0 True 3 0 Jeżyce 24
+519000.0 True 3 1 Nowe 64
+189000.0 True 2 2 Grunwald 35
+275000.0 True 3 2 Grunwald 60
+1550000.0 True 6 1 Grunwald 170
+290000.0 True 2 6 Jeżyce 49
+185000.0 True 2 8 Dębiec 80
+270000.0 True 2 4 Grunwald 38
+349000.0 True 3 0 Grunwald 60
+349000.0 True 3 0 Grunwald 60
+360000.0 True 3 2 Nowe 69
+575000.0 True 4 4 Jeżyce 94
+360000.0 True 2 1 Centrum 50
+327000.0 True 4 3 Dębiec 75
+499000.0 True 2 2 Stare 43
+379000.0 True 3 0 Rataje 56
+379000.0 True 3 3 Jeżyce 55
+359000.0 True 2 3 Rataje 48
+205000.0 True 2 2 Starołęka 40
+280000.0 True 2 1 Stare 30
+359000.0 True 3 2 Piątkowo 50
+465374.0 False 3 2 Stare 62
+250000.0 True 2 6 Sołacz 42
+237000.0 True 2 10 Grunwald 38
+365000.0 True 2 1 Centrum 50
+449000.0 True 3 1 Naramowice 89
+329000.0 True 3 7 Rataje 80
+390000.0 True 3 3 Piątkowo 48
+275000.0 True 2 2 Piątkowo 58
+365000.0 True 3 1 Stare 64
+280000.0 True 3 9 Jeżyce 48
+425000.0 True 3 0 Piątkowo 50
+1500000.0 True 3 0 Grunwald 100
+310000.0 True 2 2 Centrum 73
+235000.0 True 2 3 Grunwald 38
+286000.0 True 2 4 Centrum 49
+350000.0 True 2 4 Jeżyce 56
+225000.0 True 2 0 Górczyn 50
+360000.0 True 4 0 Piątkowo 60
+409000.0 True 3 1 Malta 90
+313000.0 True 2 4 Piątkowo 49
+259000.0 True 2 5 Grunwald 45
+279000.0 True 2 5 Centrum 42
+314900.0 True 2 2 Naramowice 41
+635000.0 True 4 3 Grunwald 70
+300000.0 True 3 1 Rataje 80
+390000.0 True 4 1 Jeżyce 70
+615000.0 True 4 1 Jeżyce 130
+525000.0 True 4 3 Jeżyce 70
+199000.0 True 2 6 Grunwald 20
+299000.0 True 3 2 Grunwald 49
+300000.0 True 3 2 Grunwald 49
+259000.0 True 2 3 Rataje 49
+375000.0 True 3 1 Rataje 62
+365000.0 True 4 1 Wilda 79
+248000.0 True 2 14 Rataje 49
+340000.0 True 2 0 Junikowo 62
+280000.0 True 3 1 Jeżyce 58
+475000.0 True 4 0 Górczyn 102
+379000.0 True 3 0 Wilda 67
+399000.0 True 4 0 Nowe 69
+404000.0 True 4 0 Nowe 69
+339000.0 True 3 13 Nowe 65
+369000.0 True 2 3 Stare 49
+370000.0 True 2 4 Rataje 80
+382280.0 True 3 3 Stare 30
+259000.0 True 2 3 Żegrze 49
+329000.0 True 3 7 Rataje 66
+410000.0 True 5 0 Łazarz 111
+295000.0 True 2 4 Wilda 35
+349000.0 True 2 2 Stare 33
+239000.0 True 2 3 Rataje 53
+275000.0 True 2 13 Rataje 49
+495000.0 True 4 1 Naramowice 98
+239000.0 True 2 0 Naramowice 80
+384000.0 True 4 0 Grunwald 93
+289000.0 True 2 2 Zawady 48
+210000.0 True 2 3 Grunwald 38
+329000.0 True 2 3 Rataje 50
+439000.0 True 4 2 Grunwald 92
+235000.0 True 2 3 Grunwald 50
+398000.0 True 2 1 Grunwald 32
+150000.0 True 2 2 Nowe 50
+650000.0 True 3 2 Centrum 101
+191000.0 True 2 0 Górczyn 42
+238000.0 True 2 8 Jeżyce 37
+550000.0 True 3 1 Grunwald 73
+210000.0 True 2 0 Grunwald 65
+308000.0 True 3 0 Jeżyce 70
+620000.0 True 4 1 Smochowice 82
+565000.0 True 4 0 Sołacz 90
+259000.0 True 2 5 Górczyn 45
+259000.0 True 2 4 Grunwald 50
+395000.0 True 4 1 Wilda 80
+300000.0 True 2 1 Centrum 8
+245000.0 True 2 2 Centrum 8
+250000.0 True 2 4 Nowe 23
+399000.0 False 5 0 Szczepankowo 77
+399000.0 False 5 0 Szczepankowo 77
+399000.0 False 5 0 Szczepankowo 77
+402000.0 False 5 0 Szczepankowo 77
+402000.0 False 5 0 Szczepankowo 77
+402000.0 False 5 0 Szczepankowo 77
+402000.0 False 5 0 Szczepankowo 77
+375000.0 True 3 4 Winogrady 65
+248000.0 True 2 14 Rataje 49
+1017445.0 False 6 8 Nowe 53
+316357.0 False 2 7 Nowe 82
+316547.0 False 2 5 Nowe 85
+316674.0 False 2 1 Nowe 87
+356933.0 False 3 1 Nowe 21
+317944.0 False 2 7 Nowe 7
+318198.0 False 2 4 Nowe 11
+318452.0 False 2 3 Nowe 15
+318452.0 False 2 2 Nowe 15
+318071.0 False 2 1 Nowe 9
+350583.0 False 3 1 Nowe 21
+603948.0 False 4 5 Nowe 11
+606171.0 False 4 3 Nowe 46
+606171.0 False 4 2 Nowe 46
+324800.0 False 2 3 Nowe 56
+324800.0 False 2 1 Nowe 56
+460184.0 False 4 7 Nowe 47
+460248.0 False 4 6 Nowe 48
+484314.0 False 4 4 Nowe 27
+484505.0 False 4 3 Nowe 30
+484505.0 False 4 2 Nowe 30
+483616.0 False 4 1 Nowe 16
+424370.0 False 4 3 Nowe 83
+424370.0 False 4 2 Nowe 83
+549211.0 False 4 1 Nowe 49
+359000.0 True 2 4 Grunwald 40
+439000.0 True 4 2 Łazarz 92
+402000.0 False 5 0 Szczepankowo 77
+327000.0 True 3 3 Stare 64
+349000.0 True 4 2 Rataje 20
+380000.0 True 3 4 Nowe 100
+300000.0 True 2 2 Winogrady 58
+339000.0 True 3 3 Stare 37
+664443.3 False 2 2 Stare 57
+308000.0 True 3 4 Rataje 70
+240000.0 True 2 6 Grunwald 42
+270000.0 True 3 0 Grunwald 48
+320000.0 True 3 8 Rataje 78
+319000.0 True 2 2 Jeżyce 55
+335400.0 True 2 1 Łazarz 52
+250000.0 True 3 3 Nowe 53
+355000.0 True 4 0 Stare 88
+360000.0 True 4 0 Grunwald 66
+495000.0 True 3 0 Centrum 63
+268900.0 True 3 10 Grunwald 56
+379000.0 True 2 3 Stare 16
+287000.0 True 2 10 Winogrady 80
+250000.0 True 2 4 Rataje 44
+279000.0 True 4 3 Rataje 62
+265000.0 True 3 0 Rataje 48
+225000.0 True 2 0 Grunwald 50
+290000.0 True 3 8 Osiedle 70
+228000.0 True 4 4 Swarzędz 64
+330000.0 True 4 0 Grunwald 50
+495000.0 True 3 1 Grunwald 64
+307000.0 True 2 4 Piątkowo 50
+225000.0 True 2 7 Ogrody 53
+340000.0 True 2 2 Naramowice 16
+245000.0 True 2 9 Rataje 38
+439000.0 True 3 3 Piątkowo 77
+499000.0 True 4 4 Stare 85
+249000.0 True 3 4 Rataje 53
+410000.0 True 5 0 Łazarz 8
+379000.0 True 2 5 Grunwald 50
+300000.0 True 3 1 Grunwald 48
+1780000.0 True 4 0 Stare 86
+459000.0 True 3 1 Grunwald 81
+450000.0 True 3 2 Stare 67
+1040000.0 True 2 10 Centrum 79
+320000.0 True 2 1 Naramowice 23
+430000.0 True 3 3 Łazarz 96
+380000.0 True 2 6 Dębiec 55
+240000.0 True 2 11 Rataje 42
+275000.0 True 2 2 Naramowice 60
+265000.0 True 2 1 Wilda 60
+515000.0 True 4 2 Jeżyce 87
+420000.0 True 4 3 Grunwald 50
+349000.0 True 2 3 Jeżyce 50
+253000.0 True 2 9 Stare 38
+259500.0 True 2 0 Łazarz 90
+460000.0 True 3 1 Antoninek 8
+379000.0 True 3 0 Rataje 57
+379000.0 True 3 0 Rataje 57
+480000.0 True 4 1 Grunwald 64
+325000.0 True 3 0 Stare 78
+379000.0 True 3 0 Nowe 56
+365000.0 True 2 1 Centrum 50
+349000.0 True 2 3 Centrum 56
+399000.0 True 2 1 Rataje 54
+420000.0 True 3 1 Jeżyce 38
+569000.0 True 4 0 Wilda 118
+302000.0 True 2 3 Winogrady 49
+460000.0 True 3 0 Grunwald 65
+450000.0 True 3 1 Grunwald 84
+269000.0 True 2 4 Rataje 40
+945000.0 True 6 2 Stare 126
+900000.0 True 6 1 Stare 120
+1845000.0 True 12 1 Stare 246
+360000.0 True 3 2 Grunwald 58
+473120.0 True 2 2 Grunwald 14
+458175.0 True 3 0 Grunwald 9
+538229.0 True 3 3 Grunwald 12
+439000.0 True 3 3 Piątkowo 70
+365000.0 True 3 2 Rataje 65
+640174.0 True 3 0 Grunwald 7
+289000.0 True 3 3 Rataje 48
+442612.0 True 2 4 Grunwald 11
+321845.0 False 3 1 Grunwald 55
+349000.0 True 3 5 Rataje 78
+439000.0 True 4 2 Grunwald 92
+395000.0 True 4 4 Stare 84
+390000.0 False 2 2 Grunwald 53
+320000.0 True 3 0 Rataje 56
+480000.0 True 2 1 Stare 44
+315000.0 True 3 1 Nowe 62
+379000.0 True 3 1 Piątkowo 78
+249000.0 True 2 4 Rataje 44
+419000.0 True 3 2 Piątkowo 20
+375000.0 True 3 4 Winogrady 65
+320000.0 True 3 6 Rataje 56
+527150.0 True 4 3 Winogrady 10
+444600.0 True 3 2 Winogrady 40
+360000.0 True 2 1 Centrum 50
+210000.0 True 2 0 Dębiec 37
+747000.0 True 3 7 Nowe 83
+760000.0 True 4 1 Stare 96
+354000.0 True 4 0 Jeżyce 71
+354000.0 True 4 0 Jeżyce 71
+595000.0 True 7 1 Jeżyce 136
+369000.0 True 3 3 Centrum 63
+279000.0 True 2 1 Naramowice 51
+379000.0 True 3 0 Rataje 57
+358000.0 True 3 2 Nowe 90
+350000.0 True 3 1 Starołęka 15
+529000.0 True 4 2 Centrum 107
+840000.0 True 4 0 Centrum 100
+311500.0 True 2 1 Wilda 89
+280000.0 True 2 5 Naramowice 41
+243656.0 True 2 1 Jeżyce 64
+259000.0 True 2 0 Grunwald 40
+260127.0 True 2 1 Ogrody 41
+210000.0 True 2 0 Dębiec 37
+417231.0 True 2 2 Stare 50
+290000.0 True 20 2 Stare 80
+209000.0 True 2 10 Rataje 38
+353000.0 True 3 2 Grunwald 52
+406100.0 True 3 2 Grunwald 61
+389000.0 True 4 0 Nowe 75
+295850.0 True 3 2 Ostrów 33
+295660.0 True 2 1 Ostrów 87
+241940.0 True 2 1 Jeżyce 51
+480000.0 True 4 4 Wilda 80
+449000.0 True 3 2 Wilda 104
+1850000.0 True 7 1 Sołacz 206
+394000.0 False 4 1 Nowe 69
+469000.0 True 3 2 Grunwald 40
+280000.0 True 3 9 Jeżyce 48
+325000.0 True 2 1 Jeżyce 56
+425000.0 True 4 6 Nowe 85
+510000.0 True 3 3 Grunwald 70
+220000.0 True 2 0 Grunwald 50
+319000.0 True 2 3 Podolany 40
+315000.0 True 3 3 Rataje 56
+234400.0 True 2 0 Górczyn 50
+235000.0 True 2 4 Winogrady 68
+229000.0 True 2 8 Winogrady 62
+820000.0 True 4 0 Jeżyce 41
+239000.0 True 2 5 Winogrady 68
+450000.0 True 3 2 Naramowice 67
+310000.0 True 2 2 Centrum 73
+239900.0 True 2 4 Rataje 38
+364520.0 False 3 1 Jeżyce 8
+285285.0 False 3 3 Jeżyce 89
+439000.0 True 3 0 Szczepankowo 77
+224000.0 True 2 0 Łazarzm 50
+820000.0 True 4 3 Centrum 59
+255200.0 True 2 0 Jeżyce 13
+253000.0 True 2 2 Jeżyce 2
+246000.0 True 2 1 Jeżyce 12
+235000.0 True 2 4 Rataje 38
+365000.0 True 4 1 Nowe 54
+299000.0 True 2 2 Grunwald 35
+319000.0 True 2 4 Łazarz 46
+263000.0 True 2 2 Dębiec 48
+1555200.0 True 4 2 Jeżyce 144
+265000.0 True 2 2 Rataje 38
+279000.0 True 2 1 Stare 60
+655000.0 True 3 4 Stare 60
+307000.0 True 2 4 Piątkowo 20
+569000.0 True 4 0 Wilda 40
+310000.0 True 3 1 Piątkowo 60
+430000.0 True 2 3 Grunwald 70
+259000.0 True 2 2 Stare 49
+487000.0 True 3 0 Naramowice 83
+298500.0 True 2 1 Jeżyce 28
+420000.0 True 5 0 Łazarz 8
+680000.0 True 3 0 Stare 89
+669000.0 True 2 0 Łazarz 70
+359000.0 True 2 2 Jeżyce 50
+299900.0 True 2 2 Jeżyce 60
+760000.0 True 5 1 Centrum 73
+604836.0 True 4 6 Grunwald 40
+263400.0 True 2 0 Grunwald 90
+340166.0 True 3 0 Grunwald 10
+480000.0 True 3 0 Rataje 69
+320000.0 True 2 3 Stare 55
+420000.0 True 3 3 Łazarz 95
+690000.0 True 5 1 Stare 100
+568000.0 True 4 0 Centrum 114
+520000.0 True 4 1 Nowe 91
+299000.0 True 2 2 Jeżyce 61
+680000.0 True 3 0 Stare 89
+290000.0 True 2 5 Winogrady 80
+177000.0 True 2 2 Wilda 34
+360000.0 True 3 4 Nowe 63
+820000.0 True 5 1 Winogrady 128
+339000.0 True 3 3 Jeżyce 80
+439000.0 True 3 3 Stare 70
+335000.0 True 3 9 Rataje 66
+599000.0 True 3 3 Górczyn 60
+720000.0 True 4 2 Grunwald 144
+263000.0 True 3 3 Grunwald 48
+270000.0 True 2 0 Jeżyce 20
+339000.0 True 3 4 Winogrady 90
+250000.0 True 2 6 Rataje 23
+340000.0 True 2 2 Garbary 48
+250000.0 True 2 1 Winogrady 38
+487000.0 True 3 0 Stare 83
+268001.0 True 2 2 Sołacz 60
+729000.0 True 4 1 Sołacz 10
+533000.0 True 3 9 Rataje 72
+325000.0 True 3 0 Wola 65
+320000.0 True 3 1 Grunwald 74
+549000.0 True 3 3 Grunwald 60
+345000.0 True 3 1 Rataje 78
+239000.0 True 3 2 Wilda 40
+425000.0 True 4 6 Rataje 90
+332339.0 False 2 5 Dolna 67
+308481.0 False 2 5 Dolna 74
+315537.0 False 2 5 Dolna 45
+319927.0 False 2 5 Dolna 49
+491139.0 False 4 5 Dolna 50
+1500000.0 True 3 5 Stare 68
+292981.0 False 2 5 Dolna 2
+309465.0 False 2 5 Dolna 56
+309838.0 False 2 5 Dolna 39
+457004.0 False 4 5 Dolna 25
+498921.0 False 4 5 Dolna 65
+296180.0 False 2 5 Dolna 47
+300204.0 False 2 5 Dolna 70
+309246.0 False 2 5 Dolna 99
+484168.0 False 3 5 Dolna 8
+306666.0 False 2 4 Dolna 45
+310923.0 False 2 4 Dolna 49
+284921.0 False 2 4 Dolna 2
+300495.0 False 2 4 Dolna 56
+301128.0 False 2 4 Dolna 39
+444872.0 False 4 4 Dolna 25
+484149.0 False 4 4 Dolna 65
+288032.0 False 2 4 Dolna 47
+291765.0 False 2 4 Dolna 70
+412908.0 False 3 4 Dolna 78
+431187.0 False 3 4 Dolna 43
+304231.0 False 2 4 Dolna 99
+469840.0 False 3 4 Dolna 8
+866623.0 False 5 3 Dolna 26
+308005.0 False 2 3 Dolna 49
+472873.0 False 4 3 Dolna 50
+282503.0 False 2 3 Dolna 2
+298253.0 False 2 3 Dolna 56
+298306.0 False 2 3 Dolna 39
+439966.0 False 4 3 Dolna 25
+480336.0 False 4 3 Dolna 65
+285180.0 False 2 3 Dolna 47
+289032.0 False 2 3 Dolna 70
+405142.0 False 3 3 Dolna 78
+750062.0 False 4 6 Wilda 42
+555180.0 False 3 6 Wilda 44
+555180.0 False 3 6 Wilda 44
+855063.0 False 5 3 Dolna 59
+750013.0 False 4 6 Wilda 69
+333852.0 False 2 5 Wilda 70
+525525.0 False 3 5 Wilda 50
+241574.0 False 2 5 Wilda 56
+466175.0 False 3 3 Dolna 8
+670380.0 False 4 5 Wilda 85
+670380.0 False 4 5 Wilda 85
+350719.0 False 2 5 Wilda 11
+399772.0 False 3 5 Wilda 98
+399772.0 False 3 5 Wilda 98
+318202.0 False 2 4 Wilda 85
+316272.0 False 2 4 Wilda 92
+292691.0 False 2 4 Wilda 61
+295370.0 False 2 4 Wilda 43
+393624.0 False 3 4 Wilda 64
+393624.0 False 3 4 Wilda 64
+295370.0 False 2 4 Wilda 43
+295370.0 False 2 4 Wilda 43
+353048.0 False 2 4 Wilda 9
+247217.0 False 2 4 Wilda 99
+316866.0 False 2 3 Wilda 1
+314355.0 False 2 3 Wilda 92
+276293.0 False 2 3 Wilda 75
+278813.0 False 2 3 Wilda 14
+385453.0 False 3 3 Wilda 64
+385453.0 False 3 3 Wilda 64
+293783.0 False 2 3 Wilda 14
+293454.0 False 2 3 Wilda 14
+351450.0 False 2 3 Wilda 25
+245769.0 False 2 3 Wilda 13
+245769.0 False 2 3 Wilda 13
+310696.0 False 2 2 Wilda 17
+311019.0 False 2 2 Wilda 22
+285966.0 False 2 2 Wilda 88
+288567.0 False 2 2 Wilda 27
+399406.0 False 3 2 Wilda 89
+288567.0 False 2 2 Wilda 27
+288567.0 False 2 2 Wilda 27
+345075.0 False 2 2 Wilda 50
+217361.0 False 2 2 Wilda 91
+309586.0 False 2 1 Wilda 32
+310826.0 False 2 1 Wilda 34
+276016.0 False 2 1 Wilda 2
+278518.0 False 2 1 Wilda 41
+384128.0 False 3 1 Wilda 2
+384128.0 False 3 1 Wilda 2
+277824.0 False 2 1 Wilda 41
+277824.0 False 2 1 Wilda 41
+344376.0 False 2 1 Wilda 75
+242751.0 False 2 1 Wilda 40
+360000.0 True 3 2 Grunwald 60
+227012.0 False 2 1 Wilda 4
+456960.0 False 3 5 Jeżyce 20
+765451.0 False 5 5 Jeżyce 81
+473754.0 False 3 5 Jeżyce 66
+445900.0 False 3 5 Jeżyce 70
+310170.0 False 2 5 Jeżyce 31
+747600.0 False 5 5 Jeżyce 80
+558693.0 False 4 5 Jeżyce 97
+558486.0 False 4 5 Jeżyce 94
+497628.0 False 3 5 Jeżyce 12
+412297.0 False 2 5 Jeżyce 7
+392231.0 False 2 5 Jeżyce 26
+332253.0 False 3 5 Jeżyce 59
+310170.0 False 3 5 Jeżyce 31
+413236.0 False 3 5 Jeżyce 77
+459151.0 False 3 4 Jeżyce 53
+388600.0 False 3 4 Jeżyce 58
+357204.0 False 3 4 Jeżyce 53
+542365.0 False 4 4 Jeżyce 95
+406065.0 False 3 4 Jeżyce 85
+368628.0 False 3 4 Jeżyce 21
+362372.0 False 3 4 Jeżyce 29
+257250.0 False 2 4 Jeżyce 75
+542298.0 False 4 4 Jeżyce 94
+485013.0 False 3 4 Jeżyce 39
+413567.0 False 3 4 Jeżyce 14
+370260.0 False 3 4 Jeżyce 45
+325244.0 False 2 4 Jeżyce 83
+324921.0 False 2 4 Jeżyce 9
+454986.0 False 3 4 Jeżyce 94
+323004.0 False 2 4 Jeżyce 94
+297145.0 False 2 4 Jeżyce 35
+383977.0 False 3 4 Jeżyce 31
+382800.0 False 3 3 Jeżyce 58
+452298.0 False 3 3 Jeżyce 53
+400180.0 False 3 3 Jeżyce 85
+351951.0 False 3 3 Jeżyce 53
+363207.0 False 3 3 Jeżyce 21
+257250.0 False 2 3 Jeżyce 75
+534600.0 False 4 3 Jeżyce 81
+534270.0 False 4 3 Jeżyce 95
+357043.0 False 3 3 Jeżyce 29
+477774.0 False 3 3 Jeżyce 39
+410410.0 False 3 3 Jeżyce 14
+320461.0 False 2 3 Jeżyce 83
+364815.0 False 3 3 Jeżyce 45
+320280.0 False 2 3 Jeżyce 10
+448392.0 False 3 3 Jeżyce 94
+318110.0 False 2 3 Jeżyce 94
+292710.0 False 2 3 Jeżyce 35
+378246.0 False 2 3 Jeżyce 31
+448871.5 False 3 2 Jeżyce 53
+377000.0 False 3 2 Jeżyce 58
+394295.0 False 3 2 Jeżyce 85
+344071.5 False 3 2 Jeżyce 53
+253575.0 False 2 2 Jeżyce 75
+530222.5 False 4 2 Jeżyce 95
+357786.0 False 3 2 Jeżyce 21
+351648.0 False 3 2 Jeżyce 28
+530550.0 False 4 2 Jeżyce 81
+474154.5 False 3 2 Jeżyce 39
+407382.0 False 3 2 Jeżyce 16
+359370.0 False 3 2 Jeżyce 45
+320461.0 False 2 2 Jeżyce 83
+317925.0 False 2 2 Jeżyce 10
+211830.0 False 2 2 Jeżyce 70
+441798.0 False 3 2 Jeżyce 94
+318110.0 False 2 2 Jeżyce 94
+290427.0 False 2 2 Jeżyce 34
+377000.0 False 3 1 Jeżyce 58
+375380.5 False 3 2 Jeżyce 31
+444925.0 False 3 1 Jeżyce 45
+394295.0 False 3 1 Jeżyce 85
+346698.0 False 3 1 Jeżyce 53
+357786.0 False 3 1 Jeżyce 21
+249900.0 False 2 1 Jeżyce 75
+526500.0 False 4 1 Jeżyce 81
+526175.0 False 4 1 Jeżyce 95
+351714.0 False 3 1 Jeżyce 29
+470470.0 False 3 1 Jeżyce 38
+407253.0 False 3 1 Jeżyce 14
+320796.0 False 2 1 Jeżyce 88
+315637.0 False 2 1 Jeżyce 11
+435798.0 False 3 1 Jeżyce 3
+359238.0 False 3 1 Jeżyce 43
+288340.0 False 2 1 Jeżyce 36
+315727.5 False 2 1 Jeżyce 95
+372515.0 False 3 1 Jeżyce 31
+448413.0 False 3 0 Jeżyce 46
+418470.0 False 3 0 Jeżyce 38
+453960.0 False 3 0 Jeżyce 84
+444080.0 False 3 0 Jeżyce 32
+309487.5 False 2 0 Jeżyce 25
+423150.0 False 3 0 Jeżyce 10
+334230.0 False 2 0 Jeżyce 42
+453260.0 False 3 0 Jeżyce 20
+452121.0 False 3 2 Dolna 60
+296290.0 False 2 2 Dolna 57
+420388.0 False 3 2 Dolna 11
+321845.0 False 3 1 Grunwald 55
+286082.0 False 2 2 Dolna 20
+457458.0 False 4 2 Dolna 37
+293768.0 False 2 2 Dolna 56
+295485.0 False 2 2 Dolna 39
+436530.0 False 4 2 Dolna 25
+475052.0 False 4 2 Dolna 65
+282980.0 False 2 2 Dolna 47
+286299.0 False 2 2 Dolna 70
+840000.0 True 6 1 Winogrady 129
+442612.0 True 2 4 Grunwald 11
+324558.0 True 2 4 Grunwald 61
+620000.0 True 3 2 Grunwald 73
+265000.0 True 3 4 Łazarz 55
+393789.0 False 3 2 Dolna 78
+298381.0 False 2 2 Dolna 99
+461040.0 False 3 2 Dolna 8
+443502.0 False 3 1 Dolna 60
+485000.0 True 5 2 Łazarz 87
+215000.0 True 2 0 Wilda 36
+412342.0 False 3 1 Dolna 11
+298885.0 False 2 1 Dolna 96
+459470.0 False 4 1 Dolna 50
+289283.0 False 2 1 Dolna 56
+289842.0 False 2 1 Dolna 39
+431316.0 False 4 1 Dolna 25
+280833.0 False 2 1 Dolna 70
+381420.0 False 3 1 Dolna 78
+396421.0 False 3 1 Dolna 79
+483194.0 False 4 1 Dolna 71
+306880.0 False 2 1 Dolna 27
+374734.0 False 3 1 Dolna 43
+760000.0 True 4 1 Centrum 95
+292530.0 False 2 1 Dolna 99
+452976.0 False 3 1 Dolna 8
+446521.0 False 2 0 Dolna 60
+268373.0 False 2 0 Dolna 57
+260000.0 True 2 0 Naramowice 47
+266788.0 False 2 0 Dolna 21
+399355.0 False 3 0 Dolna 11
+290270.0 False 2 0 Dolna 96
+294964.0 False 2 0 Dolna 32
+463973.0 False 4 0 Dolna 50
+282449.0 False 2 0 Dolna 56
+283698.0 False 2 0 Dolna 39
+364073.0 False 3 0 Dolna 4
+376181.0 False 3 0 Dolna 7
+284140.0 False 2 0 Dolna 94
+290853.0 False 2 0 Dolna 80
+336456.0 False 3 0 Dolna 63
+530000.0 True 3 0 Grunwald 63
+135000.0 True 2 4 skiej 86
+799000.0 True 4 0 Grunwald 118
+329000.0 True 3 1 Jeżyce 112
+260000.0 True 2 0 Naramowice 47
+550000.0 True 3 1 Rataje 81
+443102.0 False 3 0 Dolna 80
+549000.0 True 3 2 Jeżyce 106
+499000.0 True 5 4 Jeżyce 93
+404000.0 True 3 2 Piątkowo 90
+387645.0 False 3 5 Grunwald 10
+294810.0 False 2 5 Grunwald 50
+229000.0 True 2 2 Jeżyce 34
+487000.0 True 3 0 Naramowice 83
+367211.0 False 3 4 Grunwald 10
+367211.0 False 3 4 Grunwald 10
+273497.0 False 2 4 Grunwald 90
+289695.0 False 2 4 Grunwald 50
+367211.0 False 3 3 Grunwald 10
+273497.0 False 2 3 Grunwald 90
+289695.0 False 2 3 Grunwald 50
+284711.0 False 2 3 Grunwald 70
+360600.0 False 3 3 Grunwald 10
+360600.0 False 3 2 Grunwald 10
+360000.0 True 3 4 Rataje 69
+273497.0 False 2 2 Grunwald 90
+289695.0 False 2 2 Grunwald 50
+284711.0 False 2 2 Grunwald 70
+353989.0 False 3 1 Grunwald 10
+284115.0 False 2 1 Grunwald 50
+279227.0 False 2 1 Grunwald 70
+346777.0 False 3 1 Grunwald 10
+279000.0 False 2 0 Grunwald 50
+340166.0 False 2 0 Grunwald 70
+340166.0 False 3 0 Grunwald 10
+279594.0 False 2 2 Grunwald 10
+289738.0 False 2 2 Grunwald 70
+346798.0 False 3 2 Grunwald 70
+235545.0 True 3 0 Plewiska 57
+274302.0 False 2 1 Grunwald 10
+284254.0 False 2 1 Grunwald 70
+420000.0 True 3 3 Grunwald 96
+340234.0 False 3 1 Grunwald 70
+269010.0 False 2 0 Grunwald 10
+279594.0 False 2 5 Grunwald 10
+340781.0 False 3 4 Grunwald 70
+284088.0 False 2 4 Grunwald 60
+274743.0 False 2 4 Grunwald 10
+340781.0 False 3 3 Grunwald 70
+284088.0 False 2 3 Grunwald 60
+274743.0 False 2 3 Grunwald 10
+340781.0 False 3 2 Grunwald 70
+284088.0 False 2 2 Grunwald 60
+274743.0 False 2 2 Grunwald 10
+328200.0 False 3 1 Grunwald 70
+273600.0 False 2 1 Grunwald 60
+264600.0 False 2 1 Grunwald 10
+334217.0 False 3 0 Grunwald 70
+800000.0 True 4 3 Stare 103
+317000.0 True 3 3 Naramowice 53
+392181.0 False 4 4 Stare 25
+275000.0 True 2 13 Rataje 49
+330000.0 True 3 2 Grunwald 60
+290000.0 True 4 3 Rataje 50
+215000.0 True 2 0 Wilda 36
+368520.0 True 2 2 Jeżyce 50
+275000.0 True 3 1 Grunwald 90
+439000.0 True 4 2 Łazarz 92
+370000.0 True 3 3 Wilda 78
+962376.0 False 4 5 Centrum 9
+369000.0 True 3 1 Piątkowo 90
+445000.0 True 3 1 Grunwald 69
+250000.0 True 2 10 Grunwald 42
+439000.0 True 4 2 Łazarz 92
+187000.0 True 2 3 Zawady 35
+265000.0 True 3 10 Grunwald 53
+389900.0 True 3 10 Winogrady 67
+387645.0 False 3 5 Grunwald 10
+294810.0 False 2 5 Grunwald 50
+367211.0 False 3 4 Grunwald 10
+289695.0 False 2 4 Grunwald 50
+295000.0 True 2 4 Naramowice 58
+330000.0 True 2 3 Wilda 53
+187000.0 True 2 2 Zawady 35
+273497.0 False 2 3 Grunwald 90
+289695.0 False 2 3 Grunwald 50
+284711.0 False 2 3 Grunwald 70
+367211.0 False 3 2 Grunwald 10
+273497.0 False 2 2 Grunwald 90
+289695.0 False 2 2 Grunwald 50
+284711.0 False 2 2 Grunwald 70
+360600.0 False 3 2 Grunwald 10
+263400.0 False 2 1 Grunwald 90
+279000.0 False 2 1 Grunwald 50
+274200.0 False 2 1 Grunwald 70
+263400.0 False 2 0 Grunwald 9
+279000.0 False 2 0 Grunwald 50
+1725000.0 True 3 0 Stare 136
+279594.0 False 2 2 Grunwald 10
+340234.0 False 3 2 Grunwald 70
+274302.0 False 2 1 Grunwald 10
+284254.0 False 2 1 Grunwald 70
+333670.0 False 3 1 Grunwald 70
+310000.0 True 3 1 Wilda 88
+475000.0 True 3 1 Stare 68
+335000.0 True 2 4 Centrum 45
+279594.0 False 2 2 Grunwald 10
+289738.0 False 2 2 Grunwald 70
+340234.0 False 3 2 Grunwald 70
+274302.0 False 2 1 Grunwald 10
+399000.0 True 2 2 Łazarz 51
+333670.0 False 3 1 Grunwald 70
+499000.0 True 3 1 Rataje 50
+269010.0 False 2 0 Grunwald 10
+230000.0 True 3 4 Centrum 52
+230000.0 True 2 4 Stare 52
+250000.0 True 2 4 Rataje 50
+289000.0 True 2 2 Ogrody 44
+215000.0 True 2 8 Rataje 42
+239000.0 True 2 2 Rataje 38
+293000.0 True 3 1 Wilda 79
+339000.0 True 3 1 Grunwald 54
+307000.0 True 2 4 Stare 48
+280000.0 True 3 4 Rataje 48
+595000.0 True 5 4 Wilda 54
+379000.0 True 3 1 Stare 90
+569000.0 True 2 2 Stare 20
+445000.0 True 2 1 Stare 80
+475000.0 True 3 0 Stare 66
+420000.0 True 3 1 Centrum 60
+259500.0 True 2 0 Grunwald 90
+259500.0 True 2 0 Grunwald 90
+230000.0 True 2 0 Centrum 46
+99000.0 True 2 2 Wilda 52
+329000.0 True 4 4 Rataje 72
+295000.0 True 3 2 Rataje 54
+225000.0 True 2 1 Rataje 42
+285000.0 True 2 3 Wilda 60
+1600000.0 True 3 2 Górczyn 79
+333000.0 True 3 4 Wilda 8
+1600000.0 True 3 2 Górczyn 79
+333000.0 True 3 4 Wilda 8
+2192000.0 True 4 1 Grunwald 21
+339000.0 True 3 4 Winogrady 90
+3233000.0 True 5 1 Grunwald 28
+489000.0 True 2 8 Centrum 39
+336000.0 True 2 3 Istnieje 48
+359000.0 True 3 1 Świerczewo 70
+239000.0 True 2 3 Winogrady 38
+240000.0 True 2 2 Dębiec 48
+439000.0 True 3 0 Jeżyce 75
+404000.0 True 2 2 Centrum 50
+361300.0 False 3 1 Grunwald 66
+385000.0 True 2 1 Centrum 50
+244000.0 False 2 3 Jeżyce 40
+215000.0 True 2 1 Jeżyce 70
+465000.0 True 3 0 Grunwald 60
+329000.0 True 2 0 Naramowice 51
+309000.0 True 3 1 Rataje 20
+420000.0 True 2 3 Stare 50
+480000.0 True 4 3 Centrum 94
+620000.0 True 4 3 Centrum 50
+342000.0 True 3 4 Winogrady 87
+326000.0 True 3 6 Winogrady 1
+330000.0 True 3 7 Piątkowo 40
+315000.0 True 3 0 Nowe 63
+360000.0 True 4 0 Grunwald 66
+360000.0 True 3 3 Nowe 65
+325000.0 True 2 2 Grunwald 47
+531000.0 True 2 1 Grunwald 59
+377000.0 True 3 1 Piątkowo 63
+640000.0 True 3 2 Centrum 80
+150000.0 True 2 2 Nowe 50
+640000.0 True 3 2 Stare 80
+499000.0 True 4 2 Naramowice 85
+250000.0 True 2 10 Grunwald 42
+250000.0 True 3 3 Rataje 53
+333200.0 True 3 4 Wilda 68
+385000.0 True 2 1 Jeżyce 46
+248000.0 True 2 10 Grunwald 42
+389999.0 True 3 4 Grunwald 82
+204999.0 True 2 7 Malta 30
+410000.0 True 5 0 Łazarz 114
+370000.0 True 3 4 Stare 84
+225000.0 True 2 4 Warszawskie 50
+349000.0 True 3 3 Wilda 20
+289000.0 True 3 1 Grunwald 45
+1330000.0 True 3 0 Malta 100
+235000.0 True 3 2 Starołęka 51
+549000.0 True 2 8 Centrum 39
+498000.0 True 4 4 Centrum 86
+525000.0 True 4 3 Nowe 88
+550000.0 True 3 5 Grunwald 73
+410000.0 True 5 0 Łazarz 114
+399000.0 True 3 4 Jeżyce 63
+289000.0 True 3 0 Nowe 10
+308039.0 True 2 0 Stare 52
+322497.0 True 2 6 Stare 51
+220000.0 True 2 1 Łazarz 35
+309000.0 True 3 14 Rataje 80
+293760.0 True 2 3 Winogrady 90
+392181.0 True 3 4 Stare 69
+307257.0 True 2 2 Stare 50
+263140.0 True 2 0 Stare 45
+281881.0 True 2 1 Stare 46
+399000.0 True 5 4 Centrum 10
+511000.0 True 4 1 Stare 104
+428400.0 True 3 0 Piątkowo 60
+260000.0 True 2 2 Jeżyce 10
+369000.0 True 3 1 Stare 90
+379000.0 True 3 1 Piątkowo. 78
+346320.0 True 2 3 Grunwald 40
+440700.0 True 3 3 Grunwald 50
+321285.0 False 2 4 Stare 30
+385000.0 True 3 0 Grunwald 80
+569000.0 True 4 0 Wilda 50
+296033.0 True 2 3 Stare 49
+295362.0 True 2 2 Stare 48
+295362.0 True 2 1 Stare 48
+420000.0 True 5 0 Łazarz 8
+273875.0 True 2 1 Grunwald 13
+450000.0 True 2 2 Jeżyce 41
+379000.0 True 3 1 Piątkowo 78
+270000.0 True 3 3 Rataje 48
+278460.0 True 2 0 Winogrady 10
+298980.0 True 2 5 Stare 30
+369000.0 True 3 1 Piątkowo 78
+450000.0 True 3 0 Winogrady 70
+219000.0 True 2 0 Wilda 36
+345000.0 True 3 5 Rataje 77
+371930.0 False 4 2 Jeżyce 20
+313566.0 False 3 3 Jeżyce 50
+365000.0 True 3 4 Rataje 63
+297000.0 True 2 7 Bonin 49
+350805.0 False 2 2 Rynek 97
+365000.0 True 4 3 Grunwald 68
+405000.0 True 4 2 Rataje 71
+259000.0 True 2 2 Nowe 40
+340000.0 True 3 0 Centrum 10
+275000.0 True 2 0 Dębiec 50
+435000.0 True 3 0 Stare 25
+750000.0 True 2 1 Stare 80
+570000.0 True 4 3 Grunwald 137
+290000.0 True 2 5 Winogrady 42
+360000.0 True 3 14 Rataje 80
+770000.0 True 4 1 Centrum 142
+285000.0 True 2 0 Łazarz 49
+263553.0 True 2 0 Winogrady 67
+475000.0 True 4 4 Wilda 84
+414566.0 False 3 1 Malta 1
+422000.0 False 3 1 Malta 66
+425402.0 False 3 0 Malta 75
+440224.0 False 3 4 Malta 8
+440224.0 False 3 4 Malta 8
+416214.0 False 3 2 Malta 75
+633832.0 False 4 4 Malta 73
+422670.0 False 3 3 Malta 75
+420174.0 False 3 2 Malta 75
+423922.0 False 3 1 Malta 75
+633344.0 False 4 4 Malta 65
+422372.0 False 3 2 Malta 74
+499000.0 True 3 1 Rataje 64
+410110.0 False 3 2 Malta 49
+424178.0 False 3 1 Malta 79
+229000.0 True 2 0 Rataje 38
+422322.0 False 3 1 Malta 73
+411628.0 False 3 0 Malta 68
+438016.0 False 3 4 Malta 10
+441084.0 False 3 4 Malta 10
+380931.0 True 3 3 Nowe 83
+365000.0 True 4 3 Grunwald 68
+365000.0 True 4 3 Grunwald 68
+350000.0 True 3 7 Piątkowo 63
+47475.0 True 2 11 Wilda 75
+289000.0 True 3 0 Winogrady 48
+520000.0 False 4 3 Grunwald 10
+520000.0 False 4 4 Grunwald 12
+520000.0 False 4 3 Grunwald 12
+520000.0 False 4 2 Grunwald 11
+475000.0 True 5 4 Grunwald 23
+281576.0 False 2 2 Stare 16
+380900.0 True 3 3 Nowe 67
+485000.0 True 5 2 Łazarz 88
+239000.0 True 2 4 Rataje 38
+250000.0 True 2 6 Nowe 45
+429000.0 True 4 2 Jeżyce 110
+370000.0 True 4 0 Wilda 80
+275000.0 True 3 4 Wilda 77
+850000.0 True 5 1 Grunwald 135
+265000.0 True 2 4 Rataje 38
+349000.0 True 3 2 Rataje 64
+229000.0 True 2 0 Grunwald 47
+320000.0 True 3 4 Rataje 60
+430000.0 True 3 2 Rataje 64
+389000.0 True 3 4 Rataje 80
+619000.0 True 4 0 Jeżyce 99
+329900.0 True 2 1 Naramowice 20
+430000.0 True 3 2 Rataje 64
+520000.0 True 4 1 Centrum 50
+369000.0 True 3 0 Stare 64
+505877.0 False 2 5 Centrum 22
+619000.0 True 5 1 Jeżyce 146
+389740.0 True 2 2 Łazarz 96
+434525.0 True 2 2 Łazarz 85
+552955.0 True 3 2 Łazarz 7
+350805.0 True 2 2 Łazarz 97
+279000.0 True 2 0 Piątkowo 10
+460135.0 True 3 0 Łazarz 79
+392790.0 True 3 5 Stare 30
+309000.0 True 4 4 Grunwald 70
+219000.0 True 2 2 Dębiec 30
+1345500.0 True 5 1 Grunwald 117
+690000.0 True 4 5 Grunwald 24
+886860.0 False 3 5 Centrum 80
+372000.0 False 4 0 Grunwald 49
+502136.0 False 2 5 Centrum 77
+342000.0 False 3 1 Grunwald 27
+372000.0 False 4 0 Grunwald 49
+342000.0 False 3 1 Grunwald 27
+473770.0 False 2 5 Centrum 7
+798966.0 False 2 5 Centrum 33
+561663.0 False 3 4 Centrum 69
+396248.0 False 2 4 Centrum 77
+278000.0 True 2 0 Piątkowo 45
+368019.0 False 2 4 Centrum 18
+369000.0 True 3 0 Stare 64
+380000.0 True 4 1 Piątkowo 75
+1345500.0 False 5 1 Grunwald 117
+365000.0 True 2 1 Centrum 50
+659000.0 True 4 1 Rataje 78
+344000.0 True 3 3 Nowe 65
+310000.0 True 2 4 Winogrady 45
+275000.0 True 2 0 Centrum 44
+328000.0 True 4 2 Grunwald 75
+382156.0 False 2 4 Centrum 21
+383676.0 False 2 4 Centrum 4
+387597.0 False 2 4 Centrum 49
+1555200.0 True 4 2 Jeżyce 144
+378128.0 False 2 3 Centrum 77
+649999.0 True 4 1 Stare 90
+584000.0 True 3 1 Centrum 89
+229000.0 True 2 0 Winogrady 38
+238900.0 True 2 0 Grunwald 47
+239000.0 True 2 0 Raszyn 47
+254000.0 True 2 1 Nowe 44
+469000.0 True 3 0 Naramowice 52
+215000.0 True 2 3 Centrum 38
+495000.0 True 3 1 Grunwald 37
+490000.0 True 4 2 Centrum 90
+268000.0 True 2 4 Winogrady 37
+262000.0 True 2 2 Rataje 50
+321845.0 False 3 1 Grunwald 55
+265000.0 True 2 0 Wilda 50
+329000.0 True 4 4 Nowe 20
+360000.0 True 3 3 Naramowice 63
+341776.0 False 2 2 Centrum 14
+356774.0 False 2 1 Centrum 10
+230000.0 True 2 0 Rataje 38
+270000.0 True 2 0 Dębiec 50
+330255.0 False 2 1 Centrum 14
+275000.0 True 2 0 Dębiec 50
+210000.0 True 2 0 Wilda 36
+291000.0 True 4 1 Wilda 70
+1465000.0 True 6 3 Łazarz 38
+579000.0 True 3 1 Łazarz 3
+401000.0 True 3 1 Łazarz 49
+626000.0 True 3 1 Łazarz 59
+558000.0 True 4 1 Wilda 93
+533000.0 True 2 2 Łazarz 19
+595000.0 True 2 2 Łazarz 70
+269000.0 True 2 6 Rataje 50
+520000.0 True 4 7 Nowe 98
+269000.0 True 2 6 Rataje 49
+750000.0 True 4 0 Naramowice 133
+370000.0 True 2 1 Nowe 53
+499000.0 True 3 1 Jeżyce 40
+545000.0 True 2 4 Centrum 49
+420000.0 True 3 3 Łazarz 47
+569000.0 True 4 0 Wilda 50
+370000.0 True 2 2 Naramowice 70
+345000.0 True 3 0 Nowe 60
+207000.0 True 2 1 Dębiec 45
+215000.0 True 2 1 Ogrody 38
+250000.0 True 3 3 Nowe 53
+420000.0 True 2 2 Łazarz 51
+269000.0 True 2 6 Rataje 50
+350000.0 True 2 3 Jeżyce 70
+225200.0 True 2 1 Nowe 39
+348000.0 True 3 3 Piątkowo 63
+260000.0 True 2 0 Naramowice 47
+449000.0 True 6 3 Stare 74
+260000.0 True 2 0 Stare 79
+288000.0 True 2 0 Jeżyce 50
+175000.0 True 2 4 Głuszyna 38
+289000.0 True 2 1 Wilda 47
+439000.0 True 4 2 Grunwald 92
+289000.0 True 3 3 Nowe 63
+184000.0 True 2 0 Grunwald 34
+450000.0 True 3 2 Naramowice 66
+360000.0 True 4 3 Grunwald 70
+379999.0 True 2 5 Jeżyce 61
+368712.0 False 2 5 Centrum 34
+348750.0 False 2 4 Centrum 54
+348750.0 False 2 3 Centrum 58
+393120.0 False 2 3 Centrum 52
+368712.0 False 2 2 Centrum 73
+362880.0 False 2 1 Centrum 37
+368712.0 False 2 0 Centrum 89
+362880.0 False 2 0 Centrum 72
+326430.0 False 2 0 Centrum 40
+480000.0 True 3 3 Stare 94
+360000.0 True 4 3 Grunwald 61
+525000.0 True 4 3 Jeżyce 104
+249000.0 True 2 4 Grunwald 38
+333775.0 True 2 1 Stare 35
+339822.0 True 3 3 Jeżyce 10
+360486.0 True 2 4 Jeżyce 10
+365000.0 True 2 1 Stare 10
+310000.0 True 3 1 Piątkowo 60
+339000.0 True 3 0 Rataje 63
+649000.0 True 4 1 Jeżyce 70
+356000.0 True 3 2 Naramowice 80
+345000.0 True 4 11 Grunwald 40
+499000.0 True 4 3 Stare 103
+269000.0 True 2 1 Rataje 49
+285000.0 True 2 4 Jeżyce 56
+308736.0 True 3 1 Jeżyce 24
+346689.0 True 3 2 Jeżyce 3
+241939.0 True 2 4 Jeżyce 51
+377622.0 True 4 4 Jeżyce 94
+245616.0 True 2 1 Jeżyce 8
+366208.0 True 3 6 Jeżyce 22
+195000.0 True 2 4 Grunwald 70
+262656.0 True 2 5 Stare 4
+458000.0 True 3 4 Centrum 87
+1115000.0 True 2 2 Grunwald 7
+285000.0 True 2 3 Wilda 50
+240000.0 True 2 8 Dębiec 38
+390000.0 True 3 3 Grunwald 87
+259500.0 True 2 0 Łazarz 90
+420000.0 True 2 3 Wilda 70
+560000.0 True 4 1 Naramowice 156
+429000.0 True 3 4 Nowe 79
+340000.0 True 3 0 Stare 70
+340000.0 True 3 0 Stare 70
+270000.0 True 2 2 Rataje 49
+428000.0 True 3 3 Centrum 43
+190000.0 True 2 8 Dębiec 50
+240000.0 True 2 8 Dębiec 38
+315000.0 True 2 2 Piątkowo 48
+404000.0 True 3 0 Warszawskie 52
+249000.0 True 2 0 Jeżyce 33
+350000.0 True 2 3 Grunwald 53
+239000.0 True 2 3 Rataje 49
+245000.0 True 2 9 Rataje 38
+706655.0 False 3 2 Nowe 45
+269973.0 False 3 1 Nowe 50
+249984.0 False 3 1 Nowe 64
+229990.0 False 3 1 Nowe 80
+269967.0 False 3 1 Nowe 30
+269973.0 False 3 1 Nowe 50
+189990.0 False 2 1 Nowe 12
+259993.0 False 3 1 Nowe 18
+199990.0 False 2 1 Nowe 95
+290000.0 True 2 2 Winogrady 41
+259993.0 False 3 1 Nowe 18
+279989.0 False 3 1 Nowe 58
+410000.0 True 3 1 Stare 60
+325000.0 True 2 4 Nowe 49
+285000.0 True 2 3 Wilda 60
+415000.0 True 3 2 Jeżyce 10
+245000.0 True 2 3 Naramowice 45
+260000.0 True 2 2 Rataje 38
+285000.0 True 2 3 Wilda 43
+269000.0 True 2 6 Rataje 50
+345000.0 True 3 5 Rataje 77
+259988.0 False 3 0 Nowe 73
+259980.0 False 3 0 Nowe 52
+189991.0 False 2 0 Nowe 40
+239994.0 False 3 0 Nowe 80
+259980.0 False 3 0 Nowe 52
+259988.0 False 3 0 Nowe 73
+349000.0 True 3 1 Nowe 108
+398000.0 True 3 2 Stare 20
+198789.0 False 2 0 Nowe 15
+198789.0 False 2 0 Nowe 15
+189661.0 False 2 0 Nowe 49
+255000.0 True 2 6 Rataje 49
+310576.0 True 3 3 Stare 55
+330680.0 True 2 1 Stare 59
+1214533.0 True 5 0 Grunwald 50
+550000.0 True 3 1 Grunwald 84
+230000.0 True 2 3 Rataje 36
+389000.0 True 3 2 Jeżyce 10
+300000.0 True 2 2 Winogrady 30
+435000.0 True 4 0 Dębiec 89
+1990000.0 True 3 1 Stare 150
+531000.0 True 2 1 Grunwald 59
+550000.0 True 3 1 Grunwald 84
+230000.0 True 2 3 Rataje 36
+389000.0 True 3 2 Jeżyce 10
+300000.0 True 2 2 Winogrady 30
+310576.0 True 3 3 Stare 55
+330680.0 True 2 1 Stare 59
+1214533.0 True 5 0 Grunwald 50
+550000.0 True 3 1 Grunwald 84
+259988.0 False 3 0 Nowe 73
+259980.0 False 3 0 Nowe 52
+189991.0 False 2 0 Nowe 40
+239994.0 False 3 0 Nowe 80
+259980.0 False 3 0 Nowe 52
+259988.0 False 3 0 Nowe 73
+349000.0 True 3 1 Nowe 108
+398000.0 True 3 2 Stare 20
+198789.0 False 2 0 Nowe 15
+198789.0 False 2 0 Nowe 15
+189661.0 False 2 0 Nowe 49
+255000.0 True 2 6 Rataje 49
+310576.0 True 3 3 Stare 55
+330680.0 True 2 1 Stare 59
+1214533.0 True 5 0 Grunwald 50
+550000.0 True 3 1 Grunwald 84
+230000.0 True 2 3 Rataje 36
+389000.0 True 3 2 Jeżyce 10
+300000.0 True 2 2 Winogrady 30
+435000.0 True 4 0 Dębiec 89
+1990000.0 True 3 1 Stare 150
+531000.0 True 2 1 Grunwald 59
+779000.0 True 3 2 Stare 113
+350000.0 True 2 3 Grunwald 53
+350000.0 True 2 1 Zawady 53
+260000.0 True 3 1 Grunwald 48
+350000.0 True 3 3 Nowe 67
+449000.0 True 3 1 Stare 110
+280000.0 True 3 4 Rataje 48
+280000.0 True 3 4 Rataje 48
+390000.0 True 3 3 Grunwald 87
+390000.0 True 3 3 Wilda 70
+462000.0 True 2 3 Winogrady 70
+220000.0 True 2 3 Rataje 42
+368000.0 True 3 2 Winiary 51
+368000.0 True 3 2 Winiary 51
+368000.0 True 3 2 Winiary 51
+402000.0 True 3 1 Winogrady 27
+289000.0 True 2 7 Winiary 48
+320000.0 True 2 2 Zawady 53
+233361.0 True 2 4 Jeżyce 60
+245000.0 True 2 3 Stare 50
+299500.0 False 3 0 Junikowo 59
+462000.0 True 2 3 Winogrady 57
+378000.0 False 4 0 Junikowo 35
+225000.0 True 4 3 Wilda 60
+249000.0 True 2 4 Winiary 49
+569000.0 True 4 0 Wilda 40
+308736.0 True 2 2 Jeżyce 48
+356000.0 True 3 2 Naramowice 63
+349000.0 True 3 1 Stare 83
+1650000.0 True 4 0 Sołacz 70
+330000.0 True 2 3 Wilda 53
+346689.0 True 3 4 Jeżyce 55
+363347.0 True 4 5 Jeżyce 57
diff --git a/wyk/saddle_point_evaluation_optimizers.gif b/wyk/saddle_point_evaluation_optimizers.gif
new file mode 100644
index 0000000..61db246
Binary files /dev/null and b/wyk/saddle_point_evaluation_optimizers.gif differ
diff --git a/wyk/sgd-comparison.png b/wyk/sgd-comparison.png
new file mode 100644
index 0000000..af8bcdf
Binary files /dev/null and b/wyk/sgd-comparison.png differ