├── .DS_Store ├── .gitignore ├── 1-operators ├── condition.ipynb └── parallel.ipynb ├── 2-data-passing └── data-passing.ipynb ├── 3-visualize ├── html.ipynb └── metrics.ipynb ├── 4-samples ├── linear_regression.ipynb └── produce_and_consume.ipynb ├── README.md ├── components ├── add │ └── component.yaml ├── get_csv_info │ └── component.yaml ├── merge_csv │ └── component.yaml ├── minus │ └── component.yaml ├── visualize_html │ └── component.yaml └── visualize_metrics │ └── component.yaml ├── constants.py ├── data ├── housing.csv └── housing_features.csv ├── requirements.txt └── utils ├── __init__.py ├── auth.py └── helpers.py /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quan-dang/kubeflow-tutorials/20624db3e035081085e05edc858d52183247dbb7/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ref: https://github.com/github/gitignore/blob/main/Python.gitignore 2 | # Byte-compiled / optimized / DLL files 3 | __pycache__/ 4 | *.py[cod] 5 | *$py.class 6 | 7 | # C extensions 8 | *.so 9 | 10 | # Distribution / packaging 11 | .Python 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | cover/ 54 | 55 | # Translations 56 | *.mo 57 | *.pot 58 | 59 | # Django stuff: 60 | *.log 61 | local_settings.py 62 | db.sqlite3 63 | db.sqlite3-journal 64 | 65 | # Flask stuff: 66 | instance/ 67 | .webassets-cache 68 | 69 | # Scrapy stuff: 70 | .scrapy 71 | 72 | # Sphinx documentation 73 | docs/_build/ 74 | 75 | # PyBuilder 76 | .pybuilder/ 77 | target/ 78 | 79 | # Jupyter Notebook 80 | .ipynb_checkpoints 81 | 82 | # IPython 83 | profile_default/ 84 | ipython_config.py 85 | 86 | # pyenv 87 | # For a library or package, you might want to ignore these files since the code is 88 | # intended to run in multiple environments; otherwise, check them in: 89 | # .python-version 90 | 91 | # pipenv 92 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 93 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 94 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 95 | # install all needed dependencies. 96 | #Pipfile.lock 97 | 98 | # poetry 99 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 100 | # This is especially recommended for binary packages to ensure reproducibility, and is more 101 | # commonly ignored for libraries. 102 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 103 | #poetry.lock 104 | 105 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 106 | __pypackages__/ 107 | 108 | # Celery stuff 109 | celerybeat-schedule 110 | celerybeat.pid 111 | 112 | # SageMath parsed files 113 | *.sage.py 114 | 115 | # Environments 116 | .env 117 | .venv 118 | env/ 119 | venv/ 120 | ENV/ 121 | env.bak/ 122 | venv.bak/ 123 | 124 | # Spyder project settings 125 | .spyderproject 126 | .spyproject 127 | 128 | # Rope project settings 129 | .ropeproject 130 | 131 | # mkdocs documentation 132 | /site 133 | 134 | # mypy 135 | .mypy_cache/ 136 | .dmypy.json 137 | dmypy.json 138 | 139 | # Pyre type checker 140 | .pyre/ 141 | 142 | # pytype static type analyzer 143 | .pytype/ 144 | 145 | # Cython debug symbols 146 | cython_debug/ 147 | 148 | # PyCharm 149 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 150 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 151 | # and can be added to the global gitignore or merged into this file. For a more nuclear 152 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 153 | #.idea/ 154 | -------------------------------------------------------------------------------- /1-operators/condition.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "d6382411", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "from kfp.components import create_component_from_func\n", 11 | "\n", 12 | "import sys\n", 13 | "sys.path.insert(0, \"..\")\n", 14 | "from constants import NAMESPACE, HOST\n", 15 | "from utils.auth import get_session_cookie" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": null, 21 | "id": "b9bdca81", 22 | "metadata": {}, 23 | "outputs": [], 24 | "source": [ 25 | "EXPERIMENT_NAME = \"tutorial\"" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": null, 31 | "id": "fc054cfe", 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "def add(a: float, b: float) -> float:\n", 36 | " \"\"\"Returns sum of two arguments\"\"\"\n", 37 | " return a + b\n", 38 | "\n", 39 | "add_op = create_component_from_func(\n", 40 | " func=add,\n", 41 | " base_image='python:3.7', # Optional, with default is python:3.7\n", 42 | " output_component_file='../components/add/component.yaml', # Optional\n", 43 | " packages_to_install=['pandas==0.24'], # Optional\n", 44 | ")\n", 45 | "\n", 46 | "def minus(a: float, b: float) -> float:\n", 47 | " \"\"\"Returns minus of two arguments\"\"\"\n", 48 | " print(a-b)\n", 49 | " return a - b\n", 50 | "\n", 51 | "minus_op = create_component_from_func(\n", 52 | " func=minus,\n", 53 | " base_image='python:3.7', # Optional\n", 54 | " output_component_file='../components/minus/component.yaml', # Optional\n", 55 | " packages_to_install=['pandas==0.24'], # Optional\n", 56 | ")" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": null, 62 | "id": "42071235", 63 | "metadata": {}, 64 | "outputs": [], 65 | "source": [ 66 | "from kfp import dsl\n", 67 | "import kfp\n", 68 | "\n", 69 | "@dsl.pipeline(\n", 70 | " name='Condition',\n", 71 | " description='Run minus op if the condition is satisfied.'\n", 72 | ")\n", 73 | "def add_and_minus():\n", 74 | " \"\"\"A sample pipeline showing condition.\"\"\"\n", 75 | "\n", 76 | " add_task = add_op(1, 2)\n", 77 | " sum_output_ref = add_task.outputs['Output']\n", 78 | " \n", 79 | " with dsl.Condition(sum_output_ref>3):\n", 80 | " minus_task = minus_op(sum_output_ref, 4)" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": null, 86 | "id": "94efc3a2", 87 | "metadata": {}, 88 | "outputs": [], 89 | "source": [ 90 | "session_cookie = get_session_cookie()\n", 91 | "client = kfp.Client(\n", 92 | " host=f\"{HOST}/pipeline\",\n", 93 | " cookies=f\"authservice_session={session_cookie}\",\n", 94 | " namespace=NAMESPACE,\n", 95 | ")" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": null, 101 | "id": "116d1827", 102 | "metadata": {}, 103 | "outputs": [], 104 | "source": [ 105 | "client.create_run_from_pipeline_func(add_and_minus, \n", 106 | " arguments={}, \n", 107 | " experiment_name=EXPERIMENT_NAME\n", 108 | ")" 109 | ] 110 | } 111 | ], 112 | "metadata": { 113 | "kernelspec": { 114 | "display_name": "Python 3", 115 | "language": "python", 116 | "name": "python3" 117 | }, 118 | "language_info": { 119 | "codemirror_mode": { 120 | "name": "ipython", 121 | "version": 3 122 | }, 123 | "file_extension": ".py", 124 | "mimetype": "text/x-python", 125 | "name": "python", 126 | "nbconvert_exporter": "python", 127 | "pygments_lexer": "ipython3", 128 | "version": "3.8.8" 129 | } 130 | }, 131 | "nbformat": 4, 132 | "nbformat_minor": 5 133 | } 134 | -------------------------------------------------------------------------------- /1-operators/parallel.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "b56d2809", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "from kfp.components import create_component_from_func, load_component_from_file\n", 11 | "\n", 12 | "import sys\n", 13 | "sys.path.insert(0, \"..\")\n", 14 | "from constants import NAMESPACE, HOST\n", 15 | "from utils.auth import get_session_cookie" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": null, 21 | "id": "5ef3a0c0", 22 | "metadata": {}, 23 | "outputs": [], 24 | "source": [ 25 | "EXPERIMENT_NAME = \"tutorial\"" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": null, 31 | "id": "564dc0c6", 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "add_op = load_component_from_file(\"../components/add/component.yaml\")\n", 36 | "minus_op = load_component_from_file(\"../components/minus/component.yaml\")" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": null, 42 | "id": "eba3ab97", 43 | "metadata": {}, 44 | "outputs": [], 45 | "source": [ 46 | "from kfp import dsl\n", 47 | "import kfp\n", 48 | "\n", 49 | "@dsl.pipeline(\n", 50 | " name='Parallel For',\n", 51 | " description='Run in parallel two add tasks.'\n", 52 | ")\n", 53 | "def add_and_minus():\n", 54 | " \"\"\"A sample pipeline showing running tasks in parallel.\"\"\"\n", 55 | " with dsl.ParallelFor([{'a':2, 'b': 3}, {'a': 20, 'b': 30}]) as item:\n", 56 | " add_task = add_op(item.a, item.b)\n", 57 | " minus_task = minus_op(item.a, item.b)" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": null, 63 | "id": "0d830f86", 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [ 67 | "session_cookie = get_session_cookie()\n", 68 | "client = kfp.Client(\n", 69 | " host=f\"{HOST}/pipeline\",\n", 70 | " cookies=f\"authservice_session={session_cookie}\",\n", 71 | " namespace=NAMESPACE,\n", 72 | ")" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": null, 78 | "id": "3041e9d1", 79 | "metadata": {}, 80 | "outputs": [], 81 | "source": [ 82 | "client.create_run_from_pipeline_func(add_and_minus, \n", 83 | " arguments={}, \n", 84 | " experiment_name=EXPERIMENT_NAME\n", 85 | ")" 86 | ] 87 | } 88 | ], 89 | "metadata": { 90 | "kernelspec": { 91 | "display_name": "Python 3", 92 | "language": "python", 93 | "name": "python3" 94 | }, 95 | "language_info": { 96 | "codemirror_mode": { 97 | "name": "ipython", 98 | "version": 3 99 | }, 100 | "file_extension": ".py", 101 | "mimetype": "text/x-python", 102 | "name": "python", 103 | "nbconvert_exporter": "python", 104 | "pygments_lexer": "ipython3", 105 | "version": "3.8.8" 106 | } 107 | }, 108 | "nbformat": 4, 109 | "nbformat_minor": 5 110 | } 111 | -------------------------------------------------------------------------------- /2-data-passing/data-passing.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "cbca6ac9", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import kfp\n", 11 | "from kfp.components import load_component_from_url, create_component_from_func\n", 12 | "from kfp.components import InputPath, OutputPath\n", 13 | "\n", 14 | "import sys\n", 15 | "sys.path.insert(0, \"..\")\n", 16 | "from constants import NAMESPACE, HOST\n", 17 | "from utils.auth import get_session_cookie" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": null, 23 | "id": "0c9d836e", 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "web_downloader_op = load_component_from_url(\n", 28 | " 'https://raw.githubusercontent.com/kubeflow/pipelines/1.7.1/components/web/Download/component.yaml')" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": null, 34 | "id": "5d6ddc9f", 35 | "metadata": {}, 36 | "outputs": [], 37 | "source": [ 38 | "def merge_csv(file_path: InputPath('Tarball'),\n", 39 | " output_csv: OutputPath('CSV')):\n", 40 | " import glob\n", 41 | " import pandas as pd\n", 42 | " import tarfile\n", 43 | "\n", 44 | " tarfile.open(name=file_path, mode=\"r|gz\").extractall('data')\n", 45 | " df = pd.concat(\n", 46 | " [pd.read_csv(csv_file, header=None) \n", 47 | " for csv_file in glob.glob('data/*.csv')])\n", 48 | " df.to_csv(output_csv, index=False, header=False)\n", 49 | " \n", 50 | "create_step_merge_csv = create_component_from_func(\n", 51 | " func=merge_csv,\n", 52 | " output_component_file='../components/merge_csv/component.yaml', # This is optional. It saves the component spec for future use.\n", 53 | " base_image='python:3.7',\n", 54 | " packages_to_install=['pandas==1.1.4'])" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": null, 60 | "id": "3cc5e747", 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [ 64 | "def get_csv_info(input_csv: InputPath('CSV')) -> tuple:\n", 65 | " import pandas as pd\n", 66 | " \n", 67 | " df = pd.read_csv(input_csv, header=None)\n", 68 | " print(f\"[Debug] df.shape: {df.shape}\")\n", 69 | " return df.shape\n", 70 | " \n", 71 | "get_csv_info_op = create_component_from_func(\n", 72 | " func=get_csv_info,\n", 73 | " output_component_file='../components/get_csv_info/component.yaml', # This is optional. It saves the component spec for future use.\n", 74 | " base_image='python:3.7',\n", 75 | " packages_to_install=['pandas==1.1.4'])" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": null, 81 | "id": "a39aa3f8", 82 | "metadata": {}, 83 | "outputs": [], 84 | "source": [ 85 | "# Define a pipeline and create a task from a component:\n", 86 | "def my_pipeline(url):\n", 87 | " web_downloader_task = web_downloader_op(url=url)\n", 88 | " merge_csv_task = create_step_merge_csv(file=web_downloader_task.outputs['Data'])\n", 89 | " get_csv_info_task = get_csv_info_op(input_csv=merge_csv_task.outputs['output_csv'])" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": null, 95 | "id": "db1dc61f", 96 | "metadata": {}, 97 | "outputs": [], 98 | "source": [ 99 | "session_cookie = get_session_cookie()\n", 100 | "client = kfp.Client(\n", 101 | " host=f\"{HOST}/pipeline\",\n", 102 | " cookies=f\"authservice_session={session_cookie}\",\n", 103 | " namespace=NAMESPACE,\n", 104 | ")\n", 105 | "client.create_run_from_pipeline_func(\n", 106 | " my_pipeline,\n", 107 | " arguments={\n", 108 | " 'url': 'https://storage.googleapis.com/ml-pipeline-playground/iris-csv-files.tar.gz'\n", 109 | " })" 110 | ] 111 | } 112 | ], 113 | "metadata": { 114 | "kernelspec": { 115 | "display_name": "Python 3", 116 | "language": "python", 117 | "name": "python3" 118 | }, 119 | "language_info": { 120 | "codemirror_mode": { 121 | "name": "ipython", 122 | "version": 3 123 | }, 124 | "file_extension": ".py", 125 | "mimetype": "text/x-python", 126 | "name": "python", 127 | "nbconvert_exporter": "python", 128 | "pygments_lexer": "ipython3", 129 | "version": "3.8.8" 130 | } 131 | }, 132 | "nbformat": 4, 133 | "nbformat_minor": 5 134 | } 135 | -------------------------------------------------------------------------------- /3-visualize/html.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "eb917a14", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import kfp\n", 11 | "from kfp.components import load_component_from_url, create_component_from_func\n", 12 | "from kfp.components import InputPath, OutputPath\n", 13 | "\n", 14 | "import sys\n", 15 | "sys.path.insert(0, \"..\")\n", 16 | "from constants import NAMESPACE, HOST\n", 17 | "from utils.auth import get_session_cookie" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": null, 23 | "id": "29a4ef25", 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "# Ref: https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/#web-app\n", 28 | "def produce_html(mlpipeline_ui_metadata_path: kfp.components.OutputPath()):\n", 29 | " import json\n", 30 | " import os\n", 31 | "\n", 32 | " metadata = {\n", 33 | " 'outputs' : [{\n", 34 | " 'type': 'web-app',\n", 35 | " 'storage': 'inline',\n", 36 | " 'source': '

Hello, World!

',\n", 37 | " }]\n", 38 | " }\n", 39 | "\n", 40 | " with open(mlpipeline_ui_metadata_path, 'w') as metadata_file:\n", 41 | " json.dump(metadata, metadata_file)\n", 42 | " \n", 43 | "produce_html_op = create_component_from_func(\n", 44 | " produce_html,\n", 45 | " base_image='python:3.7',\n", 46 | " packages_to_install=[],\n", 47 | " output_component_file='../components/visualize_html/component.yaml',\n", 48 | ")" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": null, 54 | "id": "6c8521ab", 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "# Define a pipeline and create a task from a component:\n", 59 | "def my_pipeline(url):\n", 60 | " produce_html_op()" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": null, 66 | "id": "c3096a43", 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [ 70 | "session_cookie = get_session_cookie()\n", 71 | "client = kfp.Client(\n", 72 | " host=f\"{HOST}/pipeline\",\n", 73 | " cookies=f\"authservice_session={session_cookie}\",\n", 74 | " namespace=NAMESPACE,\n", 75 | ")\n", 76 | "client.create_run_from_pipeline_func(\n", 77 | " my_pipeline,\n", 78 | " arguments={}\n", 79 | ")" 80 | ] 81 | } 82 | ], 83 | "metadata": { 84 | "kernelspec": { 85 | "display_name": "Python 3", 86 | "language": "python", 87 | "name": "python3" 88 | }, 89 | "language_info": { 90 | "codemirror_mode": { 91 | "name": "ipython", 92 | "version": 3 93 | }, 94 | "file_extension": ".py", 95 | "mimetype": "text/x-python", 96 | "name": "python", 97 | "nbconvert_exporter": "python", 98 | "pygments_lexer": "ipython3", 99 | "version": "3.8.8" 100 | } 101 | }, 102 | "nbformat": 4, 103 | "nbformat_minor": 5 104 | } 105 | -------------------------------------------------------------------------------- /3-visualize/metrics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "b919c46f", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "import kfp\n", 11 | "from kfp.components import load_component_from_url, create_component_from_func\n", 12 | "from kfp.components import InputPath, OutputPath\n", 13 | "\n", 14 | "import sys\n", 15 | "sys.path.insert(0, \"..\")\n", 16 | "from constants import NAMESPACE, HOST\n", 17 | "from utils.auth import get_session_cookie" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 5, 23 | "id": "6eb506d2", 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "from typing import NamedTuple\n", 28 | "from kfp.components import InputPath, OutputPath, create_component_from_func\n", 29 | "\n", 30 | "# Ref: https://www.kubeflow.org/docs/components/pipelines/sdk/pipelines-metrics/\n", 31 | "def produce_metrics() -> NamedTuple('Outputs', [\n", 32 | " ('mlpipeline_metrics', 'Metrics'),\n", 33 | "]):\n", 34 | " import json\n", 35 | "\n", 36 | " accuracy = 0.8\n", 37 | " metrics = {\n", 38 | " 'metrics': [{\n", 39 | " 'name': 'accuracy-score', # The name of the metric. Visualized as the column name in the runs table.\n", 40 | " 'numberValue': accuracy, # The value of the metric. Must be a numeric value.\n", 41 | " 'format': \"PERCENTAGE\", # The optional format of the metric. Supported values are \"RAW\" (displayed in raw format) and \"PERCENTAGE\" (displayed in percentage format).\n", 42 | " }]\n", 43 | " }\n", 44 | " return [json.dumps(metrics)]\n", 45 | "\n", 46 | "produce_metrics_op = create_component_from_func(\n", 47 | " produce_metrics,\n", 48 | " base_image='python:3.7',\n", 49 | " packages_to_install=[],\n", 50 | " output_component_file='../components/visualize_metrics/component.yaml',\n", 51 | ")" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": 3, 57 | "id": "7704b823", 58 | "metadata": {}, 59 | "outputs": [], 60 | "source": [ 61 | "# Define a pipeline and create a task from a component:\n", 62 | "def my_pipeline(url):\n", 63 | " produce_metrics_op()" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 4, 69 | "id": "c2da397d", 70 | "metadata": {}, 71 | "outputs": [ 72 | { 73 | "data": { 74 | "text/html": [ 75 | "Experiment details." 76 | ], 77 | "text/plain": [ 78 | "" 79 | ] 80 | }, 81 | "metadata": {}, 82 | "output_type": "display_data" 83 | }, 84 | { 85 | "data": { 86 | "text/html": [ 87 | "Run details." 88 | ], 89 | "text/plain": [ 90 | "" 91 | ] 92 | }, 93 | "metadata": {}, 94 | "output_type": "display_data" 95 | }, 96 | { 97 | "data": { 98 | "text/plain": [ 99 | "RunPipelineResult(run_id=f6a2e21f-c395-4e3a-9629-aa25b61fb659)" 100 | ] 101 | }, 102 | "execution_count": 4, 103 | "metadata": {}, 104 | "output_type": "execute_result" 105 | } 106 | ], 107 | "source": [ 108 | "session_cookie = get_session_cookie()\n", 109 | "client = kfp.Client(\n", 110 | " host=f\"{HOST}/pipeline\",\n", 111 | " cookies=f\"authservice_session={session_cookie}\",\n", 112 | " namespace=NAMESPACE,\n", 113 | ")\n", 114 | "client.create_run_from_pipeline_func(\n", 115 | " my_pipeline,\n", 116 | " arguments={}\n", 117 | ")" 118 | ] 119 | } 120 | ], 121 | "metadata": { 122 | "kernelspec": { 123 | "display_name": "Python 3", 124 | "language": "python", 125 | "name": "python3" 126 | }, 127 | "language_info": { 128 | "codemirror_mode": { 129 | "name": "ipython", 130 | "version": 3 131 | }, 132 | "file_extension": ".py", 133 | "mimetype": "text/x-python", 134 | "name": "python", 135 | "nbconvert_exporter": "python", 136 | "pygments_lexer": "ipython3", 137 | "version": "3.8.8" 138 | } 139 | }, 140 | "nbformat": 4, 141 | "nbformat_minor": 5 142 | } 143 | -------------------------------------------------------------------------------- /4-samples/linear_regression.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "2cc06b44", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "# !pip install kfp==1.6.3" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 2, 16 | "id": "23f1e76c", 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "from typing import NamedTuple\n", 21 | "\n", 22 | "import kfp\n", 23 | "from kfp.components import InputPath, InputTextFile, OutputPath, OutputTextFile\n", 24 | "from kfp.components import func_to_container_op\n", 25 | "\n", 26 | "from datetime import datetime\n", 27 | "\n", 28 | "import sys\n", 29 | "sys.path.insert(0, \"..\")\n", 30 | "from constants import NAMESPACE, HOST\n", 31 | "from utils.auth import get_session_cookie\n", 32 | "from utils import helpers" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 3, 38 | "id": "5675f6cc", 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [ 42 | "import pandas as pd" 43 | ] 44 | }, 45 | { 46 | "cell_type": "markdown", 47 | "id": "10b54257", 48 | "metadata": {}, 49 | "source": [ 50 | "### Define several constants" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 4, 56 | "id": "89d6a61e", 57 | "metadata": {}, 58 | "outputs": [], 59 | "source": [ 60 | "EXPERIMENT_NAME = \"tutorial\"\n", 61 | "PIPELINE_NAME = \"linear regression\"\n", 62 | "PIPELINE_VERSION = \"0.0.1\" # remember to change every run\n", 63 | "PIPELINE_DESCRIPTION = \"Using linear regression to predict house prices\"\n", 64 | "DATASET_URL = \"https://raw.githubusercontent.com/quan-dang/kubeflow-tutorials/master/data/housing.csv\"" 65 | ] 66 | }, 67 | { 68 | "cell_type": "markdown", 69 | "id": "850f9d26", 70 | "metadata": {}, 71 | "source": [ 72 | "### Create components from func" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": 5, 78 | "id": "e77f01e5", 79 | "metadata": {}, 80 | "outputs": [], 81 | "source": [ 82 | "def prepare_data(\n", 83 | " url: str,\n", 84 | " X_train_path: OutputPath('PKL'),\n", 85 | " y_train_path: OutputPath('PKL'),\n", 86 | " X_val_path: OutputPath('PKL'),\n", 87 | " y_val_path: OutputPath('PKL'),\n", 88 | " X_test_path: OutputPath('PKL'),\n", 89 | " y_test_path: OutputPath('PKL'),\n", 90 | "):\n", 91 | " import pandas as pd\n", 92 | " import wget\n", 93 | " from sklearn.model_selection import train_test_split\n", 94 | " import joblib\n", 95 | " \n", 96 | " # download housing.csv to local\n", 97 | " wget.download(url)\n", 98 | "\n", 99 | " df = pd.read_csv(\"housing.csv\")\n", 100 | " X = df.drop(columns=[\"price\"])\n", 101 | " y = df[\"price\"]\n", 102 | "\n", 103 | " # create train and test set\n", 104 | " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)\n", 105 | "\n", 106 | " # continue to split train set into train and validation sets\n", 107 | " X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.1, random_state=42)\n", 108 | " \n", 109 | " # dump data to pkl\n", 110 | " joblib.dump(X_train, X_train_path)\n", 111 | " joblib.dump(y_train, y_train_path)\n", 112 | " joblib.dump(X_val, X_val_path)\n", 113 | " joblib.dump(y_val, y_val_path)\n", 114 | " joblib.dump(X_test, X_test_path)\n", 115 | " joblib.dump(y_test, y_test_path)\n", 116 | " \n", 117 | "prepare_data_op = func_to_container_op(\n", 118 | " func=prepare_data, \n", 119 | " packages_to_install=[\"scikit-learn==1.0.2\", \n", 120 | " \"joblib==1.1.0\",\n", 121 | " \"pandas==1.3.5\",\n", 122 | " \"wget==3.2\"]\n", 123 | ")" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 6, 129 | "id": "4a8c9509", 130 | "metadata": {}, 131 | "outputs": [], 132 | "source": [ 133 | "def train(\n", 134 | " X_train_path: InputPath('PKL'),\n", 135 | " y_train_path: InputPath('PKL'),\n", 136 | " X_val_path: InputPath('PKL'),\n", 137 | " y_val_path: InputPath('PKL'),\n", 138 | " clf_path: OutputPath('Model')\n", 139 | "):\n", 140 | " from sklearn.preprocessing import OneHotEncoder\n", 141 | " from sklearn.pipeline import Pipeline\n", 142 | " from sklearn.linear_model import LinearRegression\n", 143 | " from sklearn.compose import ColumnTransformer\n", 144 | " from sklearn.metrics import r2_score\n", 145 | " import joblib\n", 146 | "\n", 147 | " # load data\n", 148 | " X_train = joblib.load(X_train_path)\n", 149 | " y_train = joblib.load(y_train_path)\n", 150 | " X_val = joblib.load(X_val_path)\n", 151 | " y_val = joblib.load(y_val_path)\n", 152 | " \n", 153 | " categorical_features = X_train.loc[:, X_train.dtypes == object].columns\n", 154 | "\n", 155 | " categorical_transformer = OneHotEncoder()\n", 156 | "\n", 157 | " preprocessor = ColumnTransformer(\n", 158 | " transformers=[\n", 159 | " (\"cat\", categorical_transformer, categorical_features),\n", 160 | " ],\n", 161 | " remainder = 'passthrough'\n", 162 | " )\n", 163 | "\n", 164 | " clf = Pipeline(\n", 165 | " steps=[(\"preprocessor\", preprocessor), (\"regressor\", LinearRegression())]\n", 166 | " )\n", 167 | "\n", 168 | " clf.fit(X_train, y_train)\n", 169 | " \n", 170 | " # make prediction on the val data\n", 171 | " y_val_pred = clf.predict(X_val)\n", 172 | " # evaluate on the val data\n", 173 | " print(\"r2_score: \", r2_score(y_val, y_val_pred))\n", 174 | " \n", 175 | " joblib.dump(clf, clf_path)\n", 176 | " \n", 177 | "train_op = func_to_container_op(\n", 178 | " func=train, \n", 179 | " packages_to_install=[\"scikit-learn==1.0.2\", \n", 180 | " \"joblib==1.1.0\",\n", 181 | " \"pandas==1.3.5\"]\n", 182 | ")" 183 | ] 184 | }, 185 | { 186 | "cell_type": "code", 187 | "execution_count": 7, 188 | "id": "33796c6f", 189 | "metadata": {}, 190 | "outputs": [], 191 | "source": [ 192 | "def evaluate(\n", 193 | " X_test_path: InputPath('PKL'),\n", 194 | " y_test_path: InputPath('PKL'),\n", 195 | " clf_path: InputPath('Model'),\n", 196 | " y_test_pred_path: OutputPath('PKL')\n", 197 | ") -> NamedTuple('Outputs', [\n", 198 | " ('mlpipeline_metrics', 'Metrics'),\n", 199 | "]):\n", 200 | " import joblib\n", 201 | " from sklearn.metrics import r2_score\n", 202 | " import json\n", 203 | " \n", 204 | " # load data\n", 205 | " X_test = joblib.load(X_test_path)\n", 206 | " y_test = joblib.load(y_test_path)\n", 207 | " \n", 208 | " # load model\n", 209 | " clf = joblib.load(clf_path)\n", 210 | " \n", 211 | " # make prediction on the test data\n", 212 | " y_test_pred = clf.predict(X_test)\n", 213 | " \n", 214 | " joblib.dump(y_test_pred, y_test_pred_path)\n", 215 | " \n", 216 | " # evaluate on the test data\n", 217 | " metrics = {\n", 218 | " 'metrics': [{\n", 219 | " 'name': 'r2_score', # The name of the metric. Visualized as the column name in the runs table.\n", 220 | " 'numberValue': r2_score(y_test, y_test_pred), # The value of the metric. Must be a numeric value.\n", 221 | " 'format': \"RAW\", # The optional format of the metric. Supported values are \"RAW\" (displayed in raw format) and \"PERCENTAGE\" (displayed in percentage format).\n", 222 | " }]\n", 223 | " }\n", 224 | " return [json.dumps(metrics)]\n", 225 | " \n", 226 | "evaluate_op = func_to_container_op(\n", 227 | " func=evaluate, \n", 228 | " packages_to_install=[\"scikit-learn==1.0.2\", \n", 229 | " \"joblib==1.1.0\",\n", 230 | " \"pandas==1.3.5\"]\n", 231 | ")" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": 8, 237 | "id": "c3cdb19a", 238 | "metadata": {}, 239 | "outputs": [], 240 | "source": [ 241 | "def visualize(\n", 242 | " X_test_path: InputPath('PKL'),\n", 243 | " y_test_path: InputPath('PKL'),\n", 244 | " y_test_pred_path: InputPath('PKL'),\n", 245 | " mlpipeline_ui_metadata_path: kfp.components.OutputPath(),\n", 246 | "):\n", 247 | " import joblib\n", 248 | " import matplotlib.pyplot as plt\n", 249 | " import base64\n", 250 | " from io import BytesIO\n", 251 | " import json\n", 252 | " \n", 253 | " # load data\n", 254 | " X_test = joblib.load(X_test_path)\n", 255 | " y_test = joblib.load(y_test_path)\n", 256 | " y_test_pred = joblib.load(y_test_pred_path)\n", 257 | " \n", 258 | " ncols = 4\n", 259 | " nrows = 3\n", 260 | "\n", 261 | " fig, axs = plt.subplots(ncols=ncols, nrows=nrows, figsize=(10, 5),\n", 262 | " constrained_layout=True)\n", 263 | "\n", 264 | " for row in range(nrows):\n", 265 | " for col in range(ncols):\n", 266 | " # corresponding feature index to this subplot\n", 267 | " feature_index = row*nrows + col\n", 268 | " axs[row, col].scatter(X_test.iloc[:,feature_index], y_test, color=\"red\")\n", 269 | " axs[row, col].scatter(X_test.iloc[:,feature_index], y_test_pred, color=\"blue\")\n", 270 | " axs[row, col].set_title(X_test.columns[feature_index])\n", 271 | "\n", 272 | " fig.suptitle('Test data')\n", 273 | " \n", 274 | " # Ref: https://stackoverflow.com/questions/48717794/matplotlib-embed-figures-in-auto-generated-html\n", 275 | " tmpfile = BytesIO()\n", 276 | " fig.savefig(tmpfile, format='png')\n", 277 | " encoded = base64.b64encode(tmpfile.getvalue()).decode('utf-8')\n", 278 | " html = ''.format(encoded)\n", 279 | "\n", 280 | " with open('test.html','w') as f:\n", 281 | " f.write(html)\n", 282 | "\n", 283 | " metadata = {\n", 284 | " 'outputs' : [{\n", 285 | " 'type': 'web-app',\n", 286 | " 'storage': 'inline',\n", 287 | " 'source': html,\n", 288 | " }]\n", 289 | " }\n", 290 | "\n", 291 | " with open(mlpipeline_ui_metadata_path, 'w') as metadata_file:\n", 292 | " json.dump(metadata, metadata_file)\n", 293 | " \n", 294 | " \n", 295 | "visualize_op = func_to_container_op(\n", 296 | " func=visualize,\n", 297 | " packages_to_install=[\"matplotlib==3.5.1\", \n", 298 | " \"joblib==1.1.0\",\n", 299 | " \"pandas==1.3.5\"]\n", 300 | ")" 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": 9, 306 | "id": "dd88bb30", 307 | "metadata": {}, 308 | "outputs": [], 309 | "source": [ 310 | "# Define a pipeline and create a task from a component:\n", 311 | "def my_pipeline(url):\n", 312 | " prepare_data_task = prepare_data_op(url=url)\n", 313 | " train_task = train_op(x_train=prepare_data_task.outputs['X_train'], \n", 314 | " y_train=prepare_data_task.outputs['y_train'],\n", 315 | " x_val=prepare_data_task.outputs['X_val'],\n", 316 | " y_val=prepare_data_task.outputs['y_val'],\n", 317 | " )\n", 318 | " evaluate_task = evaluate_op(x_test=prepare_data_task.outputs['X_test'], \n", 319 | " y_test=prepare_data_task.outputs['y_test'],\n", 320 | " clf=train_task.outputs['clf'])\n", 321 | " visualize_task = visualize_op(x_test=prepare_data_task.outputs['X_test'], \n", 322 | " y_test=prepare_data_task.outputs['y_test'],\n", 323 | " y_test_pred=evaluate_task.outputs['y_test_pred'])" 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": 10, 329 | "id": "a0a15d6d", 330 | "metadata": {}, 331 | "outputs": [ 332 | { 333 | "data": { 334 | "text/html": [ 335 | "Experiment link here" 336 | ], 337 | "text/plain": [ 338 | "" 339 | ] 340 | }, 341 | "metadata": {}, 342 | "output_type": "display_data" 343 | }, 344 | { 345 | "data": { 346 | "text/html": [ 347 | "Run link here" 348 | ], 349 | "text/plain": [ 350 | "" 351 | ] 352 | }, 353 | "metadata": {}, 354 | "output_type": "display_data" 355 | }, 356 | { 357 | "data": { 358 | "text/plain": [ 359 | "RunPipelineResult(run_id=974d04c1-22df-41c9-addf-8a18ec45282e)" 360 | ] 361 | }, 362 | "execution_count": 10, 363 | "metadata": {}, 364 | "output_type": "execute_result" 365 | } 366 | ], 367 | "source": [ 368 | "session_cookie = get_session_cookie()\n", 369 | "client = kfp.Client(\n", 370 | " host=f\"{HOST}/pipeline\",\n", 371 | " cookies=f\"authservice_session={session_cookie}\",\n", 372 | " namespace=NAMESPACE,\n", 373 | ")\n", 374 | "client.create_run_from_pipeline_func(\n", 375 | " my_pipeline,\n", 376 | " arguments={\n", 377 | " 'url': DATASET_URL\n", 378 | " })" 379 | ] 380 | } 381 | ], 382 | "metadata": { 383 | "kernelspec": { 384 | "display_name": "Python 3", 385 | "language": "python", 386 | "name": "python3" 387 | }, 388 | "language_info": { 389 | "codemirror_mode": { 390 | "name": "ipython", 391 | "version": 3 392 | }, 393 | "file_extension": ".py", 394 | "mimetype": "text/x-python", 395 | "name": "python", 396 | "nbconvert_exporter": "python", 397 | "pygments_lexer": "ipython3", 398 | "version": "3.8.8" 399 | } 400 | }, 401 | "nbformat": 4, 402 | "nbformat_minor": 5 403 | } 404 | -------------------------------------------------------------------------------- /4-samples/produce_and_consume.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "f8ac1efa", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "# !pip install kfp==1.6.3" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": null, 16 | "id": "c62d7561", 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "from typing import NamedTuple\n", 21 | "\n", 22 | "import kfp\n", 23 | "from kfp.components import InputPath, InputTextFile, OutputPath, OutputTextFile\n", 24 | "from kfp.components import func_to_container_op\n", 25 | "\n", 26 | "from datetime import datetime\n", 27 | "\n", 28 | "import sys\n", 29 | "sys.path.insert(0, \"..\")\n", 30 | "from constants import NAMESPACE, HOST\n", 31 | "from utils.auth import get_session_cookie\n", 32 | "from utils import helpers" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "id": "1a0afd21", 38 | "metadata": {}, 39 | "source": [ 40 | "### Define several constants" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": null, 46 | "id": "45b4ffec", 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "EXPERIMENT_NAME = \"tutorial\"\n", 51 | "PIPELINE_NAME = \"tutorial\"\n", 52 | "PIPELINE_VERSION = \"0.0.1\" # remember to change every run\n", 53 | "PIPELINE_DESCRIPTION = \"This is a tutorial pipeline\"" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "id": "d36ba402", 59 | "metadata": {}, 60 | "source": [ 61 | "### Create components from func" 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "id": "0b7eeb41", 68 | "metadata": {}, 69 | "outputs": [], 70 | "source": [ 71 | "@func_to_container_op\n", 72 | "def produce_one_small_output() -> str:\n", 73 | " return 'Hello world'\n", 74 | "\n", 75 | "@func_to_container_op\n", 76 | "def produce_two_small_outputs() -> NamedTuple('Outputs', [('text', str), ('number', int)]):\n", 77 | " return (\"data 1\", 42)\n", 78 | "\n", 79 | "@func_to_container_op\n", 80 | "def consume_two_arguments(text: str, number: int):\n", 81 | " print('Text={}'.format(text))\n", 82 | " print('Number={}'.format(str(number)))" 83 | ] 84 | }, 85 | { 86 | "cell_type": "markdown", 87 | "id": "6184a6d9", 88 | "metadata": {}, 89 | "source": [ 90 | "### Create pipelines by connecting components" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": null, 96 | "id": "63d7e511", 97 | "metadata": {}, 98 | "outputs": [], 99 | "source": [ 100 | "def producers_to_consumers_pipeline(text: str = \"Hello world\"):\n", 101 | " '''Pipeline that passes data from producer to consumer'''\n", 102 | " produce1_task = produce_one_small_output()\n", 103 | " produce2_task = produce_two_small_outputs()\n", 104 | "\n", 105 | " consume_task1 = consume_two_arguments(produce1_task.output, 42)\n", 106 | " consume_task2 = consume_two_arguments(text, produce2_task.outputs['number'])\n", 107 | " consume_task3 = consume_two_arguments(produce2_task.outputs['text'], produce2_task.outputs['number'])" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "id": "20a0da7b", 113 | "metadata": {}, 114 | "source": [ 115 | "### Run pipelines" 116 | ] 117 | }, 118 | { 119 | "cell_type": "markdown", 120 | "id": "dd66bf23", 121 | "metadata": {}, 122 | "source": [ 123 | "1. First, we define the client to interact with kubeflow API. We use session cookie in this case for authentication." 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "id": "c24fa0ab", 130 | "metadata": {}, 131 | "outputs": [], 132 | "source": [ 133 | "session_cookie = get_session_cookie()\n", 134 | "client = kfp.Client(\n", 135 | " host=f\"{HOST}/pipeline\",\n", 136 | " cookies=f\"authservice_session={session_cookie}\",\n", 137 | " namespace=NAMESPACE,\n", 138 | ")" 139 | ] 140 | }, 141 | { 142 | "cell_type": "markdown", 143 | "id": "57b13967", 144 | "metadata": {}, 145 | "source": [ 146 | "2. Next, compile the pipeline into YAML, upload it to the pipeline store, and run" 147 | ] 148 | }, 149 | { 150 | "cell_type": "code", 151 | "execution_count": null, 152 | "id": "5236bbd6", 153 | "metadata": { 154 | "tags": [] 155 | }, 156 | "outputs": [], 157 | "source": [ 158 | "pipeline_package_path = f\"pipeline_{PIPELINE_VERSION}.yaml\"\n", 159 | "kfp.compiler.Compiler().compile(\n", 160 | " pipeline_func=producers_to_consumers_pipeline, package_path=pipeline_package_path\n", 161 | ")\n", 162 | "# get experiment ID\n", 163 | "experiment = helpers.get_or_create_experiment(client, name=EXPERIMENT_NAME)\n", 164 | "pipeline = helpers.get_or_create_pipeline(\n", 165 | " client,\n", 166 | " pipeline_name=PIPELINE_NAME,\n", 167 | " version=PIPELINE_VERSION,\n", 168 | " pipeline_description=PIPELINE_DESCRIPTION\n", 169 | ")\n", 170 | "now = datetime.now().strftime(\"%Y%m%d%H%M%S\")\n", 171 | "client.run_pipeline(\n", 172 | " experiment_id=experiment.id,\n", 173 | " job_name=f\"{PIPELINE_NAME} {PIPELINE_VERSION} {now}\",\n", 174 | " version_id=pipeline.id,\n", 175 | ")" 176 | ] 177 | }, 178 | { 179 | "cell_type": "markdown", 180 | "id": "a07a0575", 181 | "metadata": {}, 182 | "source": [ 183 | "3. Another way is to run directly from notebook (not recommended for prod)" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": null, 189 | "id": "4fa63bb3", 190 | "metadata": {}, 191 | "outputs": [], 192 | "source": [ 193 | "client.create_run_from_pipeline_func(producers_to_consumers_pipeline, \n", 194 | " arguments={}, \n", 195 | " experiment_name=EXPERIMENT_NAME\n", 196 | ")" 197 | ] 198 | }, 199 | { 200 | "cell_type": "markdown", 201 | "id": "11a5a8a4", 202 | "metadata": {}, 203 | "source": [ 204 | "4. Create a recurring run with a single command" 205 | ] 206 | }, 207 | { 208 | "cell_type": "code", 209 | "execution_count": null, 210 | "id": "8c3266ee", 211 | "metadata": { 212 | "tags": [] 213 | }, 214 | "outputs": [], 215 | "source": [ 216 | "# Dont forget to disable recurring run in case you dont need anymore\n", 217 | "client.create_recurring_run(\n", 218 | " experiment_id=experiment.id,\n", 219 | " job_name=f\"{PIPELINE_NAME} {PIPELINE_VERSION} {now}\",\n", 220 | " cron_expression=\"0 0 * * * *\", # hourly\n", 221 | " version_id=pipeline.id,\n", 222 | ")" 223 | ] 224 | } 225 | ], 226 | "metadata": { 227 | "kernelspec": { 228 | "display_name": "Python 3", 229 | "language": "python", 230 | "name": "python3" 231 | }, 232 | "language_info": { 233 | "codemirror_mode": { 234 | "name": "ipython", 235 | "version": 3 236 | }, 237 | "file_extension": ".py", 238 | "mimetype": "text/x-python", 239 | "name": "python", 240 | "nbconvert_exporter": "python", 241 | "pygments_lexer": "ipython3", 242 | "version": "3.8.8" 243 | } 244 | }, 245 | "nbformat": 4, 246 | "nbformat_minor": 5 247 | } 248 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This tutorial includes the following contents: 2 | 1. Component operators 3 | 2. How to pass data between components 4 | 3. Visualize in runs 5 | 4. Pipeline samples 6 | 7 | The source code has been run successfully on MiniKF, which was installed according to this documentation (https://v1-1-branch.kubeflow.org/docs/started/workstation/getting-started-minikf/) -------------------------------------------------------------------------------- /components/add/component.yaml: -------------------------------------------------------------------------------- 1 | name: Add 2 | description: Returns sum of two arguments 3 | inputs: 4 | - {name: a, type: Float} 5 | - {name: b, type: Float} 6 | outputs: 7 | - {name: Output, type: Float} 8 | implementation: 9 | container: 10 | image: python:3.7 11 | command: 12 | - sh 13 | - -c 14 | - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location 15 | 'pandas==0.24' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet 16 | --no-warn-script-location 'pandas==0.24' --user) && "$0" "$@" 17 | - sh 18 | - -ec 19 | - | 20 | program_path=$(mktemp) 21 | printf "%s" "$0" > "$program_path" 22 | python3 -u "$program_path" "$@" 23 | - | 24 | def add(a, b): 25 | """Returns sum of two arguments""" 26 | return a + b 27 | 28 | def _serialize_float(float_value: float) -> str: 29 | if isinstance(float_value, str): 30 | return float_value 31 | if not isinstance(float_value, (float, int)): 32 | raise TypeError('Value "{}" has type "{}" instead of float.'.format(str(float_value), str(type(float_value)))) 33 | return str(float_value) 34 | 35 | import argparse 36 | _parser = argparse.ArgumentParser(prog='Add', description='Returns sum of two arguments') 37 | _parser.add_argument("--a", dest="a", type=float, required=True, default=argparse.SUPPRESS) 38 | _parser.add_argument("--b", dest="b", type=float, required=True, default=argparse.SUPPRESS) 39 | _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1) 40 | _parsed_args = vars(_parser.parse_args()) 41 | _output_files = _parsed_args.pop("_output_paths", []) 42 | 43 | _outputs = add(**_parsed_args) 44 | 45 | _outputs = [_outputs] 46 | 47 | _output_serializers = [ 48 | _serialize_float, 49 | 50 | ] 51 | 52 | import os 53 | for idx, output_file in enumerate(_output_files): 54 | try: 55 | os.makedirs(os.path.dirname(output_file)) 56 | except OSError: 57 | pass 58 | with open(output_file, 'w') as f: 59 | f.write(_output_serializers[idx](_outputs[idx])) 60 | args: 61 | - --a 62 | - {inputValue: a} 63 | - --b 64 | - {inputValue: b} 65 | - '----output-paths' 66 | - {outputPath: Output} 67 | -------------------------------------------------------------------------------- /components/get_csv_info/component.yaml: -------------------------------------------------------------------------------- 1 | name: Get csv info 2 | inputs: 3 | - {name: input_csv, type: CSV} 4 | outputs: 5 | - {name: Output, type: tuple} 6 | implementation: 7 | container: 8 | image: python:3.7 9 | command: 10 | - sh 11 | - -c 12 | - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location 13 | 'pandas==1.1.4' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet 14 | --no-warn-script-location 'pandas==1.1.4' --user) && "$0" "$@" 15 | - sh 16 | - -ec 17 | - | 18 | program_path=$(mktemp) 19 | printf "%s" "$0" > "$program_path" 20 | python3 -u "$program_path" "$@" 21 | - | 22 | def get_csv_info(input_csv): 23 | import pandas as pd 24 | 25 | df = pd.read_csv(input_csv, header=None) 26 | print(f"[Debug] df.shape: {df.shape}") 27 | return df.shape 28 | 29 | import argparse 30 | _parser = argparse.ArgumentParser(prog='Get csv info', description='') 31 | _parser.add_argument("--input-csv", dest="input_csv", type=str, required=True, default=argparse.SUPPRESS) 32 | _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1) 33 | _parsed_args = vars(_parser.parse_args()) 34 | _output_files = _parsed_args.pop("_output_paths", []) 35 | 36 | _outputs = get_csv_info(**_parsed_args) 37 | 38 | _outputs = [_outputs] 39 | 40 | _output_serializers = [ 41 | str, 42 | 43 | ] 44 | 45 | import os 46 | for idx, output_file in enumerate(_output_files): 47 | try: 48 | os.makedirs(os.path.dirname(output_file)) 49 | except OSError: 50 | pass 51 | with open(output_file, 'w') as f: 52 | f.write(_output_serializers[idx](_outputs[idx])) 53 | args: 54 | - --input-csv 55 | - {inputPath: input_csv} 56 | - '----output-paths' 57 | - {outputPath: Output} 58 | -------------------------------------------------------------------------------- /components/merge_csv/component.yaml: -------------------------------------------------------------------------------- 1 | name: Merge csv 2 | inputs: 3 | - {name: file, type: Tarball} 4 | outputs: 5 | - {name: output_csv, type: CSV} 6 | implementation: 7 | container: 8 | image: python:3.7 9 | command: 10 | - sh 11 | - -c 12 | - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location 13 | 'pandas==1.1.4' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet 14 | --no-warn-script-location 'pandas==1.1.4' --user) && "$0" "$@" 15 | - sh 16 | - -ec 17 | - | 18 | program_path=$(mktemp) 19 | printf "%s" "$0" > "$program_path" 20 | python3 -u "$program_path" "$@" 21 | - "def _make_parent_dirs_and_return_path(file_path: str):\n import os\n \ 22 | \ os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\ 23 | \ndef merge_csv(file_path,\n output_csv):\n import glob\n \ 24 | \ import pandas as pd\n import tarfile\n\n tarfile.open(name=file_path,\ 25 | \ mode=\"r|gz\").extractall('data')\n df = pd.concat(\n [pd.read_csv(csv_file,\ 26 | \ header=None) \n for csv_file in glob.glob('data/*.csv')])\n df.to_csv(output_csv,\ 27 | \ index=False, header=False)\n\nimport argparse\n_parser = argparse.ArgumentParser(prog='Merge\ 28 | \ csv', description='')\n_parser.add_argument(\"--file\", dest=\"file_path\"\ 29 | , type=str, required=True, default=argparse.SUPPRESS)\n_parser.add_argument(\"\ 30 | --output-csv\", dest=\"output_csv\", type=_make_parent_dirs_and_return_path,\ 31 | \ required=True, default=argparse.SUPPRESS)\n_parsed_args = vars(_parser.parse_args())\n\ 32 | \n_outputs = merge_csv(**_parsed_args)\n" 33 | args: 34 | - --file 35 | - {inputPath: file} 36 | - --output-csv 37 | - {outputPath: output_csv} 38 | -------------------------------------------------------------------------------- /components/minus/component.yaml: -------------------------------------------------------------------------------- 1 | name: Minus 2 | description: Returns minus of two arguments 3 | inputs: 4 | - {name: a, type: Float} 5 | - {name: b, type: Float} 6 | outputs: 7 | - {name: Output, type: Float} 8 | implementation: 9 | container: 10 | image: python:3.7 11 | command: 12 | - sh 13 | - -c 14 | - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location 15 | 'pandas==0.24' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet 16 | --no-warn-script-location 'pandas==0.24' --user) && "$0" "$@" 17 | - sh 18 | - -ec 19 | - | 20 | program_path=$(mktemp) 21 | printf "%s" "$0" > "$program_path" 22 | python3 -u "$program_path" "$@" 23 | - | 24 | def minus(a, b): 25 | """Returns minus of two arguments""" 26 | print(a-b) 27 | return a - b 28 | 29 | def _serialize_float(float_value: float) -> str: 30 | if isinstance(float_value, str): 31 | return float_value 32 | if not isinstance(float_value, (float, int)): 33 | raise TypeError('Value "{}" has type "{}" instead of float.'.format(str(float_value), str(type(float_value)))) 34 | return str(float_value) 35 | 36 | import argparse 37 | _parser = argparse.ArgumentParser(prog='Minus', description='Returns minus of two arguments') 38 | _parser.add_argument("--a", dest="a", type=float, required=True, default=argparse.SUPPRESS) 39 | _parser.add_argument("--b", dest="b", type=float, required=True, default=argparse.SUPPRESS) 40 | _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1) 41 | _parsed_args = vars(_parser.parse_args()) 42 | _output_files = _parsed_args.pop("_output_paths", []) 43 | 44 | _outputs = minus(**_parsed_args) 45 | 46 | _outputs = [_outputs] 47 | 48 | _output_serializers = [ 49 | _serialize_float, 50 | 51 | ] 52 | 53 | import os 54 | for idx, output_file in enumerate(_output_files): 55 | try: 56 | os.makedirs(os.path.dirname(output_file)) 57 | except OSError: 58 | pass 59 | with open(output_file, 'w') as f: 60 | f.write(_output_serializers[idx](_outputs[idx])) 61 | args: 62 | - --a 63 | - {inputValue: a} 64 | - --b 65 | - {inputValue: b} 66 | - '----output-paths' 67 | - {outputPath: Output} 68 | -------------------------------------------------------------------------------- /components/visualize_html/component.yaml: -------------------------------------------------------------------------------- 1 | name: Produce html 2 | outputs: 3 | - {name: mlpipeline_ui_metadata} 4 | implementation: 5 | container: 6 | image: python:3.7 7 | command: 8 | - sh 9 | - -ec 10 | - | 11 | program_path=$(mktemp) 12 | printf "%s" "$0" > "$program_path" 13 | python3 -u "$program_path" "$@" 14 | - | 15 | def _make_parent_dirs_and_return_path(file_path: str): 16 | import os 17 | os.makedirs(os.path.dirname(file_path), exist_ok=True) 18 | return file_path 19 | 20 | def produce_html(mlpipeline_ui_metadata_path): 21 | import json 22 | import os 23 | 24 | metadata = { 25 | 'outputs' : [{ 26 | 'type': 'web-app', 27 | 'storage': 'inline', 28 | 'source': '

Hello, World!

', 29 | }] 30 | } 31 | 32 | with open(mlpipeline_ui_metadata_path, 'w') as metadata_file: 33 | json.dump(metadata, metadata_file) 34 | 35 | import argparse 36 | _parser = argparse.ArgumentParser(prog='Produce html', description='') 37 | _parser.add_argument("--mlpipeline-ui-metadata", dest="mlpipeline_ui_metadata_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS) 38 | _parsed_args = vars(_parser.parse_args()) 39 | 40 | _outputs = produce_html(**_parsed_args) 41 | args: 42 | - --mlpipeline-ui-metadata 43 | - {outputPath: mlpipeline_ui_metadata} 44 | -------------------------------------------------------------------------------- /components/visualize_metrics/component.yaml: -------------------------------------------------------------------------------- 1 | name: Produce metrics 2 | outputs: 3 | - {name: mlpipeline_metrics, type: Metrics} 4 | implementation: 5 | container: 6 | image: python:3.7 7 | command: 8 | - sh 9 | - -ec 10 | - | 11 | program_path=$(mktemp) 12 | printf "%s" "$0" > "$program_path" 13 | python3 -u "$program_path" "$@" 14 | - | 15 | def produce_metrics(): 16 | import json 17 | 18 | accuracy = 0.8 19 | metrics = { 20 | 'metrics': [{ 21 | 'name': 'accuracy-score', # The name of the metric. Visualized as the column name in the runs table. 22 | 'numberValue': accuracy, # The value of the metric. Must be a numeric value. 23 | 'format': "PERCENTAGE", # The optional format of the metric. Supported values are "RAW" (displayed in raw format) and "PERCENTAGE" (displayed in percentage format). 24 | }] 25 | } 26 | return [json.dumps(metrics)] 27 | 28 | import argparse 29 | _parser = argparse.ArgumentParser(prog='Produce metrics', description='') 30 | _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1) 31 | _parsed_args = vars(_parser.parse_args()) 32 | _output_files = _parsed_args.pop("_output_paths", []) 33 | 34 | _outputs = produce_metrics(**_parsed_args) 35 | 36 | _output_serializers = [ 37 | str, 38 | 39 | ] 40 | 41 | import os 42 | for idx, output_file in enumerate(_output_files): 43 | try: 44 | os.makedirs(os.path.dirname(output_file)) 45 | except OSError: 46 | pass 47 | with open(output_file, 'w') as f: 48 | f.write(_output_serializers[idx](_outputs[idx])) 49 | args: 50 | - '----output-paths' 51 | - {outputPath: mlpipeline_metrics} 52 | -------------------------------------------------------------------------------- /constants.py: -------------------------------------------------------------------------------- 1 | USERNAME = "user" 2 | PASSWORD = "password" 3 | NAMESPACE = "kubeflow-user" 4 | HOST = "http://xxx.ngrok.io/" -------------------------------------------------------------------------------- /data/housing.csv: -------------------------------------------------------------------------------- 1 | price,area,bedrooms,bathrooms,stories,mainroad,guestroom,basement,hotwaterheating,airconditioning,parking,prefarea,furnishingstatus 2 | 13300000,7420,4,2,3,yes,no,no,no,yes,2,yes,furnished 3 | 12250000,8960,4,4,4,yes,no,no,no,yes,3,no,furnished 4 | 12250000,9960,3,2,2,yes,no,yes,no,no,2,yes,semi-furnished 5 | 12215000,7500,4,2,2,yes,no,yes,no,yes,3,yes,furnished 6 | 11410000,7420,4,1,2,yes,yes,yes,no,yes,2,no,furnished 7 | 10850000,7500,3,3,1,yes,no,yes,no,yes,2,yes,semi-furnished 8 | 10150000,8580,4,3,4,yes,no,no,no,yes,2,yes,semi-furnished 9 | 10150000,16200,5,3,2,yes,no,no,no,no,0,no,unfurnished 10 | 9870000,8100,4,1,2,yes,yes,yes,no,yes,2,yes,furnished 11 | 9800000,5750,3,2,4,yes,yes,no,no,yes,1,yes,unfurnished 12 | 9800000,13200,3,1,2,yes,no,yes,no,yes,2,yes,furnished 13 | 9681000,6000,4,3,2,yes,yes,yes,yes,no,2,no,semi-furnished 14 | 9310000,6550,4,2,2,yes,no,no,no,yes,1,yes,semi-furnished 15 | 9240000,3500,4,2,2,yes,no,no,yes,no,2,no,furnished 16 | 9240000,7800,3,2,2,yes,no,no,no,no,0,yes,semi-furnished 17 | 9100000,6000,4,1,2,yes,no,yes,no,no,2,no,semi-furnished 18 | 9100000,6600,4,2,2,yes,yes,yes,no,yes,1,yes,unfurnished 19 | 8960000,8500,3,2,4,yes,no,no,no,yes,2,no,furnished 20 | 8890000,4600,3,2,2,yes,yes,no,no,yes,2,no,furnished 21 | 8855000,6420,3,2,2,yes,no,no,no,yes,1,yes,semi-furnished 22 | 8750000,4320,3,1,2,yes,no,yes,yes,no,2,no,semi-furnished 23 | 8680000,7155,3,2,1,yes,yes,yes,no,yes,2,no,unfurnished 24 | 8645000,8050,3,1,1,yes,yes,yes,no,yes,1,no,furnished 25 | 8645000,4560,3,2,2,yes,yes,yes,no,yes,1,no,furnished 26 | 8575000,8800,3,2,2,yes,no,no,no,yes,2,no,furnished 27 | 8540000,6540,4,2,2,yes,yes,yes,no,yes,2,yes,furnished 28 | 8463000,6000,3,2,4,yes,yes,yes,no,yes,0,yes,semi-furnished 29 | 8400000,8875,3,1,1,yes,no,no,no,no,1,no,semi-furnished 30 | 8400000,7950,5,2,2,yes,no,yes,yes,no,2,no,unfurnished 31 | 8400000,5500,4,2,2,yes,no,yes,no,yes,1,yes,semi-furnished 32 | 8400000,7475,3,2,4,yes,no,no,no,yes,2,no,unfurnished 33 | 8400000,7000,3,1,4,yes,no,no,no,yes,2,no,semi-furnished 34 | 8295000,4880,4,2,2,yes,no,no,no,yes,1,yes,furnished 35 | 8190000,5960,3,3,2,yes,yes,yes,no,no,1,no,unfurnished 36 | 8120000,6840,5,1,2,yes,yes,yes,no,yes,1,no,furnished 37 | 8080940,7000,3,2,4,yes,no,no,no,yes,2,no,furnished 38 | 8043000,7482,3,2,3,yes,no,no,yes,no,1,yes,furnished 39 | 7980000,9000,4,2,4,yes,no,no,no,yes,2,no,furnished 40 | 7962500,6000,3,1,4,yes,yes,no,no,yes,2,no,unfurnished 41 | 7910000,6000,4,2,4,yes,no,no,no,yes,1,no,semi-furnished 42 | 7875000,6550,3,1,2,yes,no,yes,no,yes,0,yes,furnished 43 | 7840000,6360,3,2,4,yes,no,no,no,yes,0,yes,furnished 44 | 7700000,6480,3,2,4,yes,no,no,no,yes,2,no,unfurnished 45 | 7700000,6000,4,2,4,yes,no,no,no,no,2,no,semi-furnished 46 | 7560000,6000,4,2,4,yes,no,no,no,yes,1,no,furnished 47 | 7560000,6000,3,2,3,yes,no,no,no,yes,0,no,semi-furnished 48 | 7525000,6000,3,2,4,yes,no,no,no,yes,1,no,furnished 49 | 7490000,6600,3,1,4,yes,no,no,no,yes,3,yes,furnished 50 | 7455000,4300,3,2,2,yes,no,yes,no,no,1,no,unfurnished 51 | 7420000,7440,3,2,1,yes,yes,yes,no,yes,0,yes,semi-furnished 52 | 7420000,7440,3,2,4,yes,no,no,no,no,1,yes,unfurnished 53 | 7420000,6325,3,1,4,yes,no,no,no,yes,1,no,unfurnished 54 | 7350000,6000,4,2,4,yes,yes,no,no,yes,1,no,furnished 55 | 7350000,5150,3,2,4,yes,no,no,no,yes,2,no,semi-furnished 56 | 7350000,6000,3,2,2,yes,yes,no,no,yes,1,no,semi-furnished 57 | 7350000,6000,3,1,2,yes,no,no,no,yes,1,no,unfurnished 58 | 7343000,11440,4,1,2,yes,no,yes,no,no,1,yes,semi-furnished 59 | 7245000,9000,4,2,4,yes,yes,no,no,yes,1,yes,furnished 60 | 7210000,7680,4,2,4,yes,yes,no,no,yes,1,no,semi-furnished 61 | 7210000,6000,3,2,4,yes,yes,no,no,yes,1,no,furnished 62 | 7140000,6000,3,2,2,yes,yes,no,no,no,1,no,semi-furnished 63 | 7070000,8880,2,1,1,yes,no,no,no,yes,1,no,semi-furnished 64 | 7070000,6240,4,2,2,yes,no,no,no,yes,1,no,furnished 65 | 7035000,6360,4,2,3,yes,no,no,no,yes,2,yes,furnished 66 | 7000000,11175,3,1,1,yes,no,yes,no,yes,1,yes,furnished 67 | 6930000,8880,3,2,2,yes,no,yes,no,yes,1,no,furnished 68 | 6930000,13200,2,1,1,yes,no,yes,yes,no,1,no,furnished 69 | 6895000,7700,3,2,1,yes,no,no,no,no,2,no,unfurnished 70 | 6860000,6000,3,1,1,yes,no,no,no,yes,1,no,furnished 71 | 6790000,12090,4,2,2,yes,no,no,no,no,2,yes,furnished 72 | 6790000,4000,3,2,2,yes,no,yes,no,yes,0,yes,semi-furnished 73 | 6755000,6000,4,2,4,yes,no,no,no,yes,0,no,unfurnished 74 | 6720000,5020,3,1,4,yes,no,no,no,yes,0,yes,unfurnished 75 | 6685000,6600,2,2,4,yes,no,yes,no,no,0,yes,furnished 76 | 6650000,4040,3,1,2,yes,no,yes,yes,no,1,no,furnished 77 | 6650000,4260,4,2,2,yes,no,no,yes,no,0,no,semi-furnished 78 | 6650000,6420,3,2,3,yes,no,no,no,yes,0,yes,furnished 79 | 6650000,6500,3,2,3,yes,no,no,no,yes,0,yes,furnished 80 | 6650000,5700,3,1,1,yes,yes,yes,no,yes,2,yes,furnished 81 | 6650000,6000,3,2,3,yes,yes,no,no,yes,0,no,furnished 82 | 6629000,6000,3,1,2,yes,no,no,yes,no,1,yes,semi-furnished 83 | 6615000,4000,3,2,2,yes,no,yes,no,yes,1,no,semi-furnished 84 | 6615000,10500,3,2,1,yes,no,yes,no,yes,1,yes,furnished 85 | 6580000,6000,3,2,4,yes,no,no,no,yes,0,no,semi-furnished 86 | 6510000,3760,3,1,2,yes,no,no,yes,no,2,no,semi-furnished 87 | 6510000,8250,3,2,3,yes,no,no,no,yes,0,no,furnished 88 | 6510000,6670,3,1,3,yes,no,yes,no,no,0,yes,unfurnished 89 | 6475000,3960,3,1,1,yes,no,yes,no,no,2,no,semi-furnished 90 | 6475000,7410,3,1,1,yes,yes,yes,no,yes,2,yes,unfurnished 91 | 6440000,8580,5,3,2,yes,no,no,no,no,2,no,furnished 92 | 6440000,5000,3,1,2,yes,no,no,no,yes,0,no,semi-furnished 93 | 6419000,6750,2,1,1,yes,yes,yes,no,no,2,yes,furnished 94 | 6405000,4800,3,2,4,yes,yes,no,no,yes,0,no,furnished 95 | 6300000,7200,3,2,1,yes,no,yes,no,yes,3,no,semi-furnished 96 | 6300000,6000,4,2,4,yes,no,no,no,no,1,no,semi-furnished 97 | 6300000,4100,3,2,3,yes,no,no,no,yes,2,no,semi-furnished 98 | 6300000,9000,3,1,1,yes,no,yes,no,no,1,yes,furnished 99 | 6300000,6400,3,1,1,yes,yes,yes,no,yes,1,yes,semi-furnished 100 | 6293000,6600,3,2,3,yes,no,no,no,yes,0,yes,unfurnished 101 | 6265000,6000,4,1,3,yes,yes,yes,no,no,0,yes,unfurnished 102 | 6230000,6600,3,2,1,yes,no,yes,no,yes,0,yes,unfurnished 103 | 6230000,5500,3,1,3,yes,no,no,no,no,1,yes,unfurnished 104 | 6195000,5500,3,2,4,yes,yes,no,no,yes,1,no,semi-furnished 105 | 6195000,6350,3,2,3,yes,yes,no,no,yes,0,no,furnished 106 | 6195000,5500,3,2,1,yes,yes,yes,no,no,2,yes,furnished 107 | 6160000,4500,3,1,4,yes,no,no,no,yes,0,no,unfurnished 108 | 6160000,5450,4,2,1,yes,no,yes,no,yes,0,yes,semi-furnished 109 | 6125000,6420,3,1,3,yes,no,yes,no,no,0,yes,unfurnished 110 | 6107500,3240,4,1,3,yes,no,no,no,no,1,no,semi-furnished 111 | 6090000,6615,4,2,2,yes,yes,no,yes,no,1,no,semi-furnished 112 | 6090000,6600,3,1,1,yes,yes,yes,no,no,2,yes,semi-furnished 113 | 6090000,8372,3,1,3,yes,no,no,no,yes,2,no,unfurnished 114 | 6083000,4300,6,2,2,yes,no,no,no,no,0,no,furnished 115 | 6083000,9620,3,1,1,yes,no,yes,no,no,2,yes,furnished 116 | 6020000,6800,2,1,1,yes,yes,yes,no,no,2,no,furnished 117 | 6020000,8000,3,1,1,yes,yes,yes,no,yes,2,yes,semi-furnished 118 | 6020000,6900,3,2,1,yes,yes,yes,no,no,0,yes,unfurnished 119 | 5950000,3700,4,1,2,yes,yes,no,no,yes,0,no,furnished 120 | 5950000,6420,3,1,1,yes,no,yes,no,yes,0,yes,furnished 121 | 5950000,7020,3,1,1,yes,no,yes,no,yes,2,yes,semi-furnished 122 | 5950000,6540,3,1,1,yes,yes,yes,no,no,2,yes,furnished 123 | 5950000,7231,3,1,2,yes,yes,yes,no,yes,0,yes,semi-furnished 124 | 5950000,6254,4,2,1,yes,no,yes,no,no,1,yes,semi-furnished 125 | 5950000,7320,4,2,2,yes,no,no,no,no,0,no,furnished 126 | 5950000,6525,3,2,4,yes,no,no,no,no,1,no,furnished 127 | 5943000,15600,3,1,1,yes,no,no,no,yes,2,no,semi-furnished 128 | 5880000,7160,3,1,1,yes,no,yes,no,no,2,yes,unfurnished 129 | 5880000,6500,3,2,3,yes,no,no,no,yes,0,no,unfurnished 130 | 5873000,5500,3,1,3,yes,yes,no,no,yes,1,no,furnished 131 | 5873000,11460,3,1,3,yes,no,no,no,no,2,yes,semi-furnished 132 | 5866000,4800,3,1,1,yes,yes,yes,no,no,0,no,unfurnished 133 | 5810000,5828,4,1,4,yes,yes,no,no,no,0,no,semi-furnished 134 | 5810000,5200,3,1,3,yes,no,no,no,yes,0,no,semi-furnished 135 | 5810000,4800,3,1,3,yes,no,no,no,yes,0,no,unfurnished 136 | 5803000,7000,3,1,1,yes,no,yes,no,no,2,yes,semi-furnished 137 | 5775000,6000,3,2,4,yes,no,no,no,yes,0,no,unfurnished 138 | 5740000,5400,4,2,2,yes,no,no,no,yes,2,no,unfurnished 139 | 5740000,4640,4,1,2,yes,no,no,no,no,1,no,semi-furnished 140 | 5740000,5000,3,1,3,yes,no,no,no,yes,0,no,semi-furnished 141 | 5740000,6360,3,1,1,yes,yes,yes,no,yes,2,yes,furnished 142 | 5740000,5800,3,2,4,yes,no,no,no,yes,0,no,unfurnished 143 | 5652500,6660,4,2,2,yes,yes,yes,no,no,1,yes,semi-furnished 144 | 5600000,10500,4,2,2,yes,no,no,no,no,1,no,semi-furnished 145 | 5600000,4800,5,2,3,no,no,yes,yes,no,0,no,unfurnished 146 | 5600000,4700,4,1,2,yes,yes,yes,no,yes,1,no,furnished 147 | 5600000,5000,3,1,4,yes,no,no,no,no,0,no,furnished 148 | 5600000,10500,2,1,1,yes,no,no,no,no,1,no,semi-furnished 149 | 5600000,5500,3,2,2,yes,no,no,no,no,1,no,semi-furnished 150 | 5600000,6360,3,1,3,yes,no,no,no,no,0,yes,semi-furnished 151 | 5600000,6600,4,2,1,yes,no,yes,no,no,0,yes,semi-furnished 152 | 5600000,5136,3,1,2,yes,yes,yes,no,yes,0,yes,unfurnished 153 | 5565000,4400,4,1,2,yes,no,no,no,yes,2,yes,semi-furnished 154 | 5565000,5400,5,1,2,yes,yes,yes,no,yes,0,yes,furnished 155 | 5530000,3300,3,3,2,yes,no,yes,no,no,0,no,semi-furnished 156 | 5530000,3650,3,2,2,yes,no,no,no,no,2,no,semi-furnished 157 | 5530000,6100,3,2,1,yes,no,yes,no,no,2,yes,furnished 158 | 5523000,6900,3,1,1,yes,yes,yes,no,no,0,yes,semi-furnished 159 | 5495000,2817,4,2,2,no,yes,yes,no,no,1,no,furnished 160 | 5495000,7980,3,1,1,yes,no,no,no,no,2,no,semi-furnished 161 | 5460000,3150,3,2,1,yes,yes,yes,no,yes,0,no,furnished 162 | 5460000,6210,4,1,4,yes,yes,no,no,yes,0,no,furnished 163 | 5460000,6100,3,1,3,yes,yes,no,no,yes,0,yes,semi-furnished 164 | 5460000,6600,4,2,2,yes,yes,yes,no,no,0,yes,semi-furnished 165 | 5425000,6825,3,1,1,yes,yes,yes,no,yes,0,yes,semi-furnished 166 | 5390000,6710,3,2,2,yes,yes,yes,no,no,1,yes,furnished 167 | 5383000,6450,3,2,1,yes,yes,yes,yes,no,0,no,unfurnished 168 | 5320000,7800,3,1,1,yes,no,yes,no,yes,2,yes,unfurnished 169 | 5285000,4600,2,2,1,yes,no,no,no,yes,2,no,semi-furnished 170 | 5250000,4260,4,1,2,yes,no,yes,no,yes,0,no,furnished 171 | 5250000,6540,4,2,2,no,no,no,no,yes,0,no,semi-furnished 172 | 5250000,5500,3,2,1,yes,no,yes,no,no,0,no,semi-furnished 173 | 5250000,10269,3,1,1,yes,no,no,no,no,1,yes,semi-furnished 174 | 5250000,8400,3,1,2,yes,yes,yes,no,yes,2,yes,unfurnished 175 | 5250000,5300,4,2,1,yes,no,no,no,yes,0,yes,unfurnished 176 | 5250000,3800,3,1,2,yes,yes,yes,no,no,1,yes,unfurnished 177 | 5250000,9800,4,2,2,yes,yes,no,no,no,2,no,semi-furnished 178 | 5250000,8520,3,1,1,yes,no,no,no,yes,2,no,furnished 179 | 5243000,6050,3,1,1,yes,no,yes,no,no,0,yes,semi-furnished 180 | 5229000,7085,3,1,1,yes,yes,yes,no,no,2,yes,semi-furnished 181 | 5215000,3180,3,2,2,yes,no,no,no,no,2,no,semi-furnished 182 | 5215000,4500,4,2,1,no,no,yes,no,yes,2,no,semi-furnished 183 | 5215000,7200,3,1,2,yes,yes,yes,no,no,1,yes,furnished 184 | 5145000,3410,3,1,2,no,no,no,no,yes,0,no,semi-furnished 185 | 5145000,7980,3,1,1,yes,no,no,no,no,1,yes,semi-furnished 186 | 5110000,3000,3,2,2,yes,yes,yes,no,no,0,no,furnished 187 | 5110000,3000,3,1,2,yes,no,yes,no,no,0,no,unfurnished 188 | 5110000,11410,2,1,2,yes,no,no,no,no,0,yes,furnished 189 | 5110000,6100,3,1,1,yes,no,yes,no,yes,0,yes,semi-furnished 190 | 5075000,5720,2,1,2,yes,no,no,no,yes,0,yes,unfurnished 191 | 5040000,3540,2,1,1,no,yes,yes,no,no,0,no,semi-furnished 192 | 5040000,7600,4,1,2,yes,no,no,no,yes,2,no,furnished 193 | 5040000,10700,3,1,2,yes,yes,yes,no,no,0,no,semi-furnished 194 | 5040000,6600,3,1,1,yes,yes,yes,no,no,0,yes,furnished 195 | 5033000,4800,2,1,1,yes,yes,yes,no,no,0,no,semi-furnished 196 | 5005000,8150,3,2,1,yes,yes,yes,no,no,0,no,semi-furnished 197 | 4970000,4410,4,3,2,yes,no,yes,no,no,2,no,semi-furnished 198 | 4970000,7686,3,1,1,yes,yes,yes,yes,no,0,no,semi-furnished 199 | 4956000,2800,3,2,2,no,no,yes,no,yes,1,no,semi-furnished 200 | 4935000,5948,3,1,2,yes,no,no,no,yes,0,no,semi-furnished 201 | 4907000,4200,3,1,2,yes,no,no,no,no,1,no,furnished 202 | 4900000,4520,3,1,2,yes,no,yes,no,yes,0,no,semi-furnished 203 | 4900000,4095,3,1,2,no,yes,yes,no,yes,0,no,semi-furnished 204 | 4900000,4120,2,1,1,yes,no,yes,no,no,1,no,semi-furnished 205 | 4900000,5400,4,1,2,yes,no,no,no,no,0,no,semi-furnished 206 | 4900000,4770,3,1,1,yes,yes,yes,no,no,0,no,semi-furnished 207 | 4900000,6300,3,1,1,yes,no,no,no,yes,2,no,semi-furnished 208 | 4900000,5800,2,1,1,yes,yes,yes,no,yes,0,no,semi-furnished 209 | 4900000,3000,3,1,2,yes,no,yes,no,yes,0,no,semi-furnished 210 | 4900000,2970,3,1,3,yes,no,no,no,no,0,no,semi-furnished 211 | 4900000,6720,3,1,1,yes,no,no,no,no,0,no,unfurnished 212 | 4900000,4646,3,1,2,yes,yes,yes,no,no,2,no,semi-furnished 213 | 4900000,12900,3,1,1,yes,no,no,no,no,2,no,furnished 214 | 4893000,3420,4,2,2,yes,no,yes,no,yes,2,no,semi-furnished 215 | 4893000,4995,4,2,1,yes,no,yes,no,no,0,no,semi-furnished 216 | 4865000,4350,2,1,1,yes,no,yes,no,no,0,no,unfurnished 217 | 4830000,4160,3,1,3,yes,no,no,no,no,0,no,unfurnished 218 | 4830000,6040,3,1,1,yes,no,no,no,no,2,yes,semi-furnished 219 | 4830000,6862,3,1,2,yes,no,no,no,yes,2,yes,furnished 220 | 4830000,4815,2,1,1,yes,no,no,no,yes,0,yes,semi-furnished 221 | 4795000,7000,3,1,2,yes,no,yes,no,no,0,no,unfurnished 222 | 4795000,8100,4,1,4,yes,no,yes,no,yes,2,no,semi-furnished 223 | 4767000,3420,4,2,2,yes,no,no,no,no,0,no,semi-furnished 224 | 4760000,9166,2,1,1,yes,no,yes,no,yes,2,no,semi-furnished 225 | 4760000,6321,3,1,2,yes,no,yes,no,yes,1,no,furnished 226 | 4760000,10240,2,1,1,yes,no,no,no,yes,2,yes,unfurnished 227 | 4753000,6440,2,1,1,yes,no,no,no,yes,3,no,semi-furnished 228 | 4690000,5170,3,1,4,yes,no,no,no,yes,0,no,semi-furnished 229 | 4690000,6000,2,1,1,yes,no,yes,no,yes,1,no,furnished 230 | 4690000,3630,3,1,2,yes,no,no,no,no,2,no,semi-furnished 231 | 4690000,9667,4,2,2,yes,yes,yes,no,no,1,no,semi-furnished 232 | 4690000,5400,2,1,2,yes,no,no,no,no,0,yes,semi-furnished 233 | 4690000,4320,3,1,1,yes,no,no,no,no,0,yes,semi-furnished 234 | 4655000,3745,3,1,2,yes,no,yes,no,no,0,no,furnished 235 | 4620000,4160,3,1,1,yes,yes,yes,no,yes,0,no,unfurnished 236 | 4620000,3880,3,2,2,yes,no,yes,no,no,2,no,semi-furnished 237 | 4620000,5680,3,1,2,yes,yes,no,no,yes,1,no,semi-furnished 238 | 4620000,2870,2,1,2,yes,yes,yes,no,no,0,yes,semi-furnished 239 | 4620000,5010,3,1,2,yes,no,yes,no,no,0,no,semi-furnished 240 | 4613000,4510,4,2,2,yes,no,yes,no,no,0,no,semi-furnished 241 | 4585000,4000,3,1,2,yes,no,no,no,no,1,no,furnished 242 | 4585000,3840,3,1,2,yes,no,no,no,no,1,yes,semi-furnished 243 | 4550000,3760,3,1,1,yes,no,no,no,no,2,no,semi-furnished 244 | 4550000,3640,3,1,2,yes,no,no,no,yes,0,no,furnished 245 | 4550000,2550,3,1,2,yes,no,yes,no,no,0,no,furnished 246 | 4550000,5320,3,1,2,yes,yes,yes,no,no,0,yes,semi-furnished 247 | 4550000,5360,3,1,2,yes,no,no,no,no,2,yes,unfurnished 248 | 4550000,3520,3,1,1,yes,no,no,no,no,0,yes,semi-furnished 249 | 4550000,8400,4,1,4,yes,no,no,no,no,3,no,unfurnished 250 | 4543000,4100,2,2,1,yes,yes,yes,no,no,0,no,semi-furnished 251 | 4543000,4990,4,2,2,yes,yes,yes,no,no,0,yes,furnished 252 | 4515000,3510,3,1,3,yes,no,no,no,no,0,no,semi-furnished 253 | 4515000,3450,3,1,2,yes,no,yes,no,no,1,no,semi-furnished 254 | 4515000,9860,3,1,1,yes,no,no,no,no,0,no,semi-furnished 255 | 4515000,3520,2,1,2,yes,no,no,no,no,0,yes,furnished 256 | 4480000,4510,4,1,2,yes,no,no,no,yes,2,no,semi-furnished 257 | 4480000,5885,2,1,1,yes,no,no,no,yes,1,no,unfurnished 258 | 4480000,4000,3,1,2,yes,no,no,no,no,2,no,furnished 259 | 4480000,8250,3,1,1,yes,no,no,no,no,0,no,furnished 260 | 4480000,4040,3,1,2,yes,no,no,no,no,1,no,semi-furnished 261 | 4473000,6360,2,1,1,yes,no,yes,no,yes,1,no,furnished 262 | 4473000,3162,3,1,2,yes,no,no,no,yes,1,no,furnished 263 | 4473000,3510,3,1,2,yes,no,no,no,no,0,no,semi-furnished 264 | 4445000,3750,2,1,1,yes,yes,yes,no,no,0,no,semi-furnished 265 | 4410000,3968,3,1,2,no,no,no,no,no,0,no,semi-furnished 266 | 4410000,4900,2,1,2,yes,no,yes,no,no,0,no,semi-furnished 267 | 4403000,2880,3,1,2,yes,no,no,no,no,0,yes,semi-furnished 268 | 4403000,4880,3,1,1,yes,no,no,no,no,2,yes,unfurnished 269 | 4403000,4920,3,1,2,yes,no,no,no,no,1,no,semi-furnished 270 | 4382000,4950,4,1,2,yes,no,no,no,yes,0,no,semi-furnished 271 | 4375000,3900,3,1,2,yes,no,no,no,no,0,no,unfurnished 272 | 4340000,4500,3,2,3,yes,no,no,yes,no,1,no,furnished 273 | 4340000,1905,5,1,2,no,no,yes,no,no,0,no,semi-furnished 274 | 4340000,4075,3,1,1,yes,yes,yes,no,no,2,no,semi-furnished 275 | 4340000,3500,4,1,2,yes,no,no,no,no,2,no,furnished 276 | 4340000,6450,4,1,2,yes,no,no,no,no,0,no,semi-furnished 277 | 4319000,4032,2,1,1,yes,no,yes,no,no,0,no,furnished 278 | 4305000,4400,2,1,1,yes,no,no,no,no,1,no,semi-furnished 279 | 4305000,10360,2,1,1,yes,no,no,no,no,1,yes,semi-furnished 280 | 4277000,3400,3,1,2,yes,no,yes,no,no,2,yes,semi-furnished 281 | 4270000,6360,2,1,1,yes,no,no,no,no,0,no,furnished 282 | 4270000,6360,2,1,2,yes,no,no,no,no,0,no,unfurnished 283 | 4270000,4500,2,1,1,yes,no,no,no,yes,2,no,furnished 284 | 4270000,2175,3,1,2,no,yes,yes,no,yes,0,no,unfurnished 285 | 4270000,4360,4,1,2,yes,no,no,no,no,0,no,furnished 286 | 4270000,7770,2,1,1,yes,no,no,no,no,1,no,furnished 287 | 4235000,6650,3,1,2,yes,yes,no,no,no,0,no,semi-furnished 288 | 4235000,2787,3,1,1,yes,no,yes,no,no,0,yes,furnished 289 | 4200000,5500,3,1,2,yes,no,no,no,yes,0,no,unfurnished 290 | 4200000,5040,3,1,2,yes,no,yes,no,yes,0,no,unfurnished 291 | 4200000,5850,2,1,1,yes,yes,yes,no,no,2,no,semi-furnished 292 | 4200000,2610,4,3,2,no,no,no,no,no,0,no,semi-furnished 293 | 4200000,2953,3,1,2,yes,no,yes,no,yes,0,no,unfurnished 294 | 4200000,2747,4,2,2,no,no,no,no,no,0,no,semi-furnished 295 | 4200000,4410,2,1,1,no,no,no,no,no,1,no,unfurnished 296 | 4200000,4000,4,2,2,no,no,no,no,no,0,no,semi-furnished 297 | 4200000,2325,3,1,2,no,no,no,no,no,0,no,semi-furnished 298 | 4200000,4600,3,2,2,yes,no,no,no,yes,1,no,semi-furnished 299 | 4200000,3640,3,2,2,yes,no,yes,no,no,0,no,unfurnished 300 | 4200000,5800,3,1,1,yes,no,no,yes,no,2,no,semi-furnished 301 | 4200000,7000,3,1,1,yes,no,no,no,no,3,no,furnished 302 | 4200000,4079,3,1,3,yes,no,no,no,no,0,no,semi-furnished 303 | 4200000,3520,3,1,2,yes,no,no,no,no,0,yes,semi-furnished 304 | 4200000,2145,3,1,3,yes,no,no,no,no,1,yes,unfurnished 305 | 4200000,4500,3,1,1,yes,no,yes,no,no,0,no,furnished 306 | 4193000,8250,3,1,1,yes,no,yes,no,no,3,no,semi-furnished 307 | 4193000,3450,3,1,2,yes,no,no,no,no,1,no,semi-furnished 308 | 4165000,4840,3,1,2,yes,no,no,no,no,1,no,semi-furnished 309 | 4165000,4080,3,1,2,yes,no,no,no,no,2,no,semi-furnished 310 | 4165000,4046,3,1,2,yes,no,yes,no,no,1,no,semi-furnished 311 | 4130000,4632,4,1,2,yes,no,no,no,yes,0,no,semi-furnished 312 | 4130000,5985,3,1,1,yes,no,yes,no,no,0,no,semi-furnished 313 | 4123000,6060,2,1,1,yes,no,yes,no,no,1,no,semi-furnished 314 | 4098500,3600,3,1,1,yes,no,yes,no,yes,0,yes,furnished 315 | 4095000,3680,3,2,2,yes,no,no,no,no,0,no,semi-furnished 316 | 4095000,4040,2,1,2,yes,no,no,no,no,1,no,semi-furnished 317 | 4095000,5600,2,1,1,yes,no,no,no,yes,0,no,semi-furnished 318 | 4060000,5900,4,2,2,no,no,yes,no,no,1,no,unfurnished 319 | 4060000,4992,3,2,2,yes,no,no,no,no,2,no,unfurnished 320 | 4060000,4340,3,1,1,yes,no,no,no,no,0,no,semi-furnished 321 | 4060000,3000,4,1,3,yes,no,yes,no,yes,2,no,semi-furnished 322 | 4060000,4320,3,1,2,yes,no,no,no,no,2,yes,furnished 323 | 4025000,3630,3,2,2,yes,no,no,yes,no,2,no,semi-furnished 324 | 4025000,3460,3,2,1,yes,no,yes,no,yes,1,no,furnished 325 | 4025000,5400,3,1,1,yes,no,no,no,no,3,no,semi-furnished 326 | 4007500,4500,3,1,2,no,no,yes,no,yes,0,no,semi-furnished 327 | 4007500,3460,4,1,2,yes,no,no,no,yes,0,no,semi-furnished 328 | 3990000,4100,4,1,1,no,no,yes,no,no,0,no,unfurnished 329 | 3990000,6480,3,1,2,no,no,no,no,yes,1,no,semi-furnished 330 | 3990000,4500,3,2,2,no,no,yes,no,yes,0,no,semi-furnished 331 | 3990000,3960,3,1,2,yes,no,no,no,no,0,no,furnished 332 | 3990000,4050,2,1,2,yes,yes,yes,no,no,0,yes,unfurnished 333 | 3920000,7260,3,2,1,yes,yes,yes,no,no,3,no,furnished 334 | 3920000,5500,4,1,2,yes,yes,yes,no,no,0,no,semi-furnished 335 | 3920000,3000,3,1,2,yes,no,no,no,no,0,no,semi-furnished 336 | 3920000,3290,2,1,1,yes,no,no,yes,no,1,no,furnished 337 | 3920000,3816,2,1,1,yes,no,yes,no,yes,2,no,furnished 338 | 3920000,8080,3,1,1,yes,no,no,no,yes,2,no,semi-furnished 339 | 3920000,2145,4,2,1,yes,no,yes,no,no,0,yes,unfurnished 340 | 3885000,3780,2,1,2,yes,yes,yes,no,no,0,no,semi-furnished 341 | 3885000,3180,4,2,2,yes,no,no,no,no,0,no,furnished 342 | 3850000,5300,5,2,2,yes,no,no,no,no,0,no,semi-furnished 343 | 3850000,3180,2,2,1,yes,no,yes,no,no,2,no,semi-furnished 344 | 3850000,7152,3,1,2,yes,no,no,no,yes,0,no,furnished 345 | 3850000,4080,2,1,1,yes,no,no,no,no,0,no,semi-furnished 346 | 3850000,3850,2,1,1,yes,no,no,no,no,0,no,semi-furnished 347 | 3850000,2015,3,1,2,yes,no,yes,no,no,0,yes,semi-furnished 348 | 3850000,2176,2,1,2,yes,yes,no,no,no,0,yes,semi-furnished 349 | 3836000,3350,3,1,2,yes,no,no,no,no,0,no,unfurnished 350 | 3815000,3150,2,2,1,no,no,yes,no,no,0,no,semi-furnished 351 | 3780000,4820,3,1,2,yes,no,no,no,no,0,no,semi-furnished 352 | 3780000,3420,2,1,2,yes,no,no,yes,no,1,no,semi-furnished 353 | 3780000,3600,2,1,1,yes,no,no,no,no,0,no,semi-furnished 354 | 3780000,5830,2,1,1,yes,no,no,no,no,2,no,unfurnished 355 | 3780000,2856,3,1,3,yes,no,no,no,no,0,yes,furnished 356 | 3780000,8400,2,1,1,yes,no,no,no,no,1,no,furnished 357 | 3773000,8250,3,1,1,yes,no,no,no,no,2,no,furnished 358 | 3773000,2520,5,2,1,no,no,yes,no,yes,1,no,furnished 359 | 3773000,6930,4,1,2,no,no,no,no,no,1,no,furnished 360 | 3745000,3480,2,1,1,yes,no,no,no,no,0,yes,semi-furnished 361 | 3710000,3600,3,1,1,yes,no,no,no,no,1,no,unfurnished 362 | 3710000,4040,2,1,1,yes,no,no,no,no,0,no,semi-furnished 363 | 3710000,6020,3,1,1,yes,no,no,no,no,0,no,semi-furnished 364 | 3710000,4050,2,1,1,yes,no,no,no,no,0,no,furnished 365 | 3710000,3584,2,1,1,yes,no,no,yes,no,0,no,semi-furnished 366 | 3703000,3120,3,1,2,no,no,yes,yes,no,0,no,semi-furnished 367 | 3703000,5450,2,1,1,yes,no,no,no,no,0,no,furnished 368 | 3675000,3630,2,1,1,yes,no,yes,no,no,0,no,furnished 369 | 3675000,3630,2,1,1,yes,no,no,no,yes,0,no,unfurnished 370 | 3675000,5640,2,1,1,no,no,no,no,no,0,no,semi-furnished 371 | 3675000,3600,2,1,1,yes,no,no,no,no,0,no,furnished 372 | 3640000,4280,2,1,1,yes,no,no,no,yes,2,no,semi-furnished 373 | 3640000,3570,3,1,2,yes,no,yes,no,no,0,no,semi-furnished 374 | 3640000,3180,3,1,2,no,no,yes,no,no,0,no,semi-furnished 375 | 3640000,3000,2,1,2,yes,no,no,no,yes,0,no,furnished 376 | 3640000,3520,2,2,1,yes,no,yes,no,no,0,no,semi-furnished 377 | 3640000,5960,3,1,2,yes,yes,yes,no,no,0,no,unfurnished 378 | 3640000,4130,3,2,2,yes,no,no,no,no,2,no,semi-furnished 379 | 3640000,2850,3,2,2,no,no,yes,no,no,0,yes,unfurnished 380 | 3640000,2275,3,1,3,yes,no,no,yes,yes,0,yes,semi-furnished 381 | 3633000,3520,3,1,1,yes,no,no,no,no,2,yes,unfurnished 382 | 3605000,4500,2,1,1,yes,no,no,no,no,0,no,semi-furnished 383 | 3605000,4000,2,1,1,yes,no,no,no,no,0,yes,semi-furnished 384 | 3570000,3150,3,1,2,yes,no,yes,no,no,0,no,furnished 385 | 3570000,4500,4,2,2,yes,no,yes,no,no,2,no,furnished 386 | 3570000,4500,2,1,1,no,no,no,no,no,0,no,furnished 387 | 3570000,3640,2,1,1,yes,no,no,no,no,0,no,unfurnished 388 | 3535000,3850,3,1,1,yes,no,no,no,no,2,no,unfurnished 389 | 3500000,4240,3,1,2,yes,no,no,no,yes,0,no,semi-furnished 390 | 3500000,3650,3,1,2,yes,no,no,no,no,0,no,unfurnished 391 | 3500000,4600,4,1,2,yes,no,no,no,no,0,no,semi-furnished 392 | 3500000,2135,3,2,2,no,no,no,no,no,0,no,unfurnished 393 | 3500000,3036,3,1,2,yes,no,yes,no,no,0,no,semi-furnished 394 | 3500000,3990,3,1,2,yes,no,no,no,no,0,no,semi-furnished 395 | 3500000,7424,3,1,1,no,no,no,no,no,0,no,unfurnished 396 | 3500000,3480,3,1,1,no,no,no,no,yes,0,no,unfurnished 397 | 3500000,3600,6,1,2,yes,no,no,no,no,1,no,unfurnished 398 | 3500000,3640,2,1,1,yes,no,no,no,no,1,no,semi-furnished 399 | 3500000,5900,2,1,1,yes,no,no,no,no,1,no,furnished 400 | 3500000,3120,3,1,2,yes,no,no,no,no,1,no,unfurnished 401 | 3500000,7350,2,1,1,yes,no,no,no,no,1,no,semi-furnished 402 | 3500000,3512,2,1,1,yes,no,no,no,no,1,yes,unfurnished 403 | 3500000,9500,3,1,2,yes,no,no,no,no,3,yes,unfurnished 404 | 3500000,5880,2,1,1,yes,no,no,no,no,0,no,unfurnished 405 | 3500000,12944,3,1,1,yes,no,no,no,no,0,no,unfurnished 406 | 3493000,4900,3,1,2,no,no,no,no,no,0,no,unfurnished 407 | 3465000,3060,3,1,1,yes,no,no,no,no,0,no,unfurnished 408 | 3465000,5320,2,1,1,yes,no,no,no,no,1,yes,unfurnished 409 | 3465000,2145,3,1,3,yes,no,no,no,no,0,yes,furnished 410 | 3430000,4000,2,1,1,yes,no,no,no,no,0,no,unfurnished 411 | 3430000,3185,2,1,1,yes,no,no,no,no,2,no,unfurnished 412 | 3430000,3850,3,1,1,yes,no,no,no,no,0,no,unfurnished 413 | 3430000,2145,3,1,3,yes,no,no,no,no,0,yes,furnished 414 | 3430000,2610,3,1,2,yes,no,yes,no,no,0,yes,unfurnished 415 | 3430000,1950,3,2,2,yes,no,yes,no,no,0,yes,unfurnished 416 | 3423000,4040,2,1,1,yes,no,no,no,no,0,no,unfurnished 417 | 3395000,4785,3,1,2,yes,yes,yes,no,yes,1,no,furnished 418 | 3395000,3450,3,1,1,yes,no,yes,no,no,2,no,unfurnished 419 | 3395000,3640,2,1,1,yes,no,no,no,no,0,no,furnished 420 | 3360000,3500,4,1,2,yes,no,no,no,yes,2,no,unfurnished 421 | 3360000,4960,4,1,3,no,no,no,no,no,0,no,semi-furnished 422 | 3360000,4120,2,1,2,yes,no,no,no,no,0,no,unfurnished 423 | 3360000,4750,2,1,1,yes,no,no,no,no,0,no,unfurnished 424 | 3360000,3720,2,1,1,no,no,no,no,yes,0,no,unfurnished 425 | 3360000,3750,3,1,1,yes,no,no,no,no,0,no,unfurnished 426 | 3360000,3100,3,1,2,no,no,yes,no,no,0,no,semi-furnished 427 | 3360000,3185,2,1,1,yes,no,yes,no,no,2,no,furnished 428 | 3353000,2700,3,1,1,no,no,no,no,no,0,no,furnished 429 | 3332000,2145,3,1,2,yes,no,yes,no,no,0,yes,furnished 430 | 3325000,4040,2,1,1,yes,no,no,no,no,1,no,unfurnished 431 | 3325000,4775,4,1,2,yes,no,no,no,no,0,no,unfurnished 432 | 3290000,2500,2,1,1,no,no,no,no,yes,0,no,unfurnished 433 | 3290000,3180,4,1,2,yes,no,yes,no,yes,0,no,unfurnished 434 | 3290000,6060,3,1,1,yes,yes,yes,no,no,0,no,furnished 435 | 3290000,3480,4,1,2,no,no,no,no,no,1,no,semi-furnished 436 | 3290000,3792,4,1,2,yes,no,no,no,no,0,no,semi-furnished 437 | 3290000,4040,2,1,1,yes,no,no,no,no,0,no,unfurnished 438 | 3290000,2145,3,1,2,yes,no,yes,no,no,0,yes,furnished 439 | 3290000,5880,3,1,1,yes,no,no,no,no,1,no,unfurnished 440 | 3255000,4500,2,1,1,no,no,no,no,no,0,no,semi-furnished 441 | 3255000,3930,2,1,1,no,no,no,no,no,0,no,unfurnished 442 | 3234000,3640,4,1,2,yes,no,yes,no,no,0,no,unfurnished 443 | 3220000,4370,3,1,2,yes,no,no,no,no,0,no,unfurnished 444 | 3220000,2684,2,1,1,yes,no,no,no,yes,1,no,unfurnished 445 | 3220000,4320,3,1,1,no,no,no,no,no,1,no,unfurnished 446 | 3220000,3120,3,1,2,no,no,no,no,no,0,no,furnished 447 | 3150000,3450,1,1,1,yes,no,no,no,no,0,no,furnished 448 | 3150000,3986,2,2,1,no,yes,yes,no,no,1,no,unfurnished 449 | 3150000,3500,2,1,1,no,no,yes,no,no,0,no,semi-furnished 450 | 3150000,4095,2,1,1,yes,no,no,no,no,2,no,semi-furnished 451 | 3150000,1650,3,1,2,no,no,yes,no,no,0,no,unfurnished 452 | 3150000,3450,3,1,2,yes,no,yes,no,no,0,no,semi-furnished 453 | 3150000,6750,2,1,1,yes,no,no,no,no,0,no,semi-furnished 454 | 3150000,9000,3,1,2,yes,no,no,no,no,2,no,semi-furnished 455 | 3150000,3069,2,1,1,yes,no,no,no,no,1,no,unfurnished 456 | 3143000,4500,3,1,2,yes,no,no,no,yes,0,no,unfurnished 457 | 3129000,5495,3,1,1,yes,no,yes,no,no,0,no,unfurnished 458 | 3118850,2398,3,1,1,yes,no,no,no,no,0,yes,semi-furnished 459 | 3115000,3000,3,1,1,no,no,no,no,yes,0,no,unfurnished 460 | 3115000,3850,3,1,2,yes,no,no,no,no,0,no,unfurnished 461 | 3115000,3500,2,1,1,yes,no,no,no,no,0,no,unfurnished 462 | 3087000,8100,2,1,1,yes,no,no,no,no,1,no,unfurnished 463 | 3080000,4960,2,1,1,yes,no,yes,no,yes,0,no,unfurnished 464 | 3080000,2160,3,1,2,no,no,yes,no,no,0,no,semi-furnished 465 | 3080000,3090,2,1,1,yes,yes,yes,no,no,0,no,unfurnished 466 | 3080000,4500,2,1,2,yes,no,no,yes,no,1,no,semi-furnished 467 | 3045000,3800,2,1,1,yes,no,no,no,no,0,no,unfurnished 468 | 3010000,3090,3,1,2,no,no,no,no,no,0,no,semi-furnished 469 | 3010000,3240,3,1,2,yes,no,no,no,no,2,no,semi-furnished 470 | 3010000,2835,2,1,1,yes,no,no,no,no,0,no,semi-furnished 471 | 3010000,4600,2,1,1,yes,no,no,no,no,0,no,furnished 472 | 3010000,5076,3,1,1,no,no,no,no,no,0,no,unfurnished 473 | 3010000,3750,3,1,2,yes,no,no,no,no,0,no,unfurnished 474 | 3010000,3630,4,1,2,yes,no,no,no,no,3,no,semi-furnished 475 | 3003000,8050,2,1,1,yes,no,no,no,no,0,no,unfurnished 476 | 2975000,4352,4,1,2,no,no,no,no,no,1,no,unfurnished 477 | 2961000,3000,2,1,2,yes,no,no,no,no,0,no,semi-furnished 478 | 2940000,5850,3,1,2,yes,no,yes,no,no,1,no,unfurnished 479 | 2940000,4960,2,1,1,yes,no,no,no,no,0,no,unfurnished 480 | 2940000,3600,3,1,2,no,no,no,no,no,1,no,unfurnished 481 | 2940000,3660,4,1,2,no,no,no,no,no,0,no,unfurnished 482 | 2940000,3480,3,1,2,no,no,no,no,no,1,no,semi-furnished 483 | 2940000,2700,2,1,1,no,no,no,no,no,0,no,furnished 484 | 2940000,3150,3,1,2,no,no,no,no,no,0,no,unfurnished 485 | 2940000,6615,3,1,2,yes,no,no,no,no,0,no,semi-furnished 486 | 2870000,3040,2,1,1,no,no,no,no,no,0,no,unfurnished 487 | 2870000,3630,2,1,1,yes,no,no,no,no,0,no,unfurnished 488 | 2870000,6000,2,1,1,yes,no,no,no,no,0,no,semi-furnished 489 | 2870000,5400,4,1,2,yes,no,no,no,no,0,no,unfurnished 490 | 2852500,5200,4,1,3,yes,no,no,no,no,0,no,unfurnished 491 | 2835000,3300,3,1,2,no,no,no,no,no,1,no,semi-furnished 492 | 2835000,4350,3,1,2,no,no,no,yes,no,1,no,unfurnished 493 | 2835000,2640,2,1,1,no,no,no,no,no,1,no,furnished 494 | 2800000,2650,3,1,2,yes,no,yes,no,no,1,no,unfurnished 495 | 2800000,3960,3,1,1,yes,no,no,no,no,0,no,furnished 496 | 2730000,6800,2,1,1,yes,no,no,no,no,0,no,unfurnished 497 | 2730000,4000,3,1,2,yes,no,no,no,no,1,no,unfurnished 498 | 2695000,4000,2,1,1,yes,no,no,no,no,0,no,unfurnished 499 | 2660000,3934,2,1,1,yes,no,no,no,no,0,no,unfurnished 500 | 2660000,2000,2,1,2,yes,no,no,no,no,0,no,semi-furnished 501 | 2660000,3630,3,3,2,no,yes,no,no,no,0,no,unfurnished 502 | 2660000,2800,3,1,1,yes,no,no,no,no,0,no,unfurnished 503 | 2660000,2430,3,1,1,no,no,no,no,no,0,no,unfurnished 504 | 2660000,3480,2,1,1,yes,no,no,no,no,1,no,semi-furnished 505 | 2660000,4000,3,1,1,yes,no,no,no,no,0,no,semi-furnished 506 | 2653000,3185,2,1,1,yes,no,no,no,yes,0,no,unfurnished 507 | 2653000,4000,3,1,2,yes,no,no,no,yes,0,no,unfurnished 508 | 2604000,2910,2,1,1,no,no,no,no,no,0,no,unfurnished 509 | 2590000,3600,2,1,1,yes,no,no,no,no,0,no,unfurnished 510 | 2590000,4400,2,1,1,yes,no,no,no,no,0,no,unfurnished 511 | 2590000,3600,2,2,2,yes,no,yes,no,no,1,no,furnished 512 | 2520000,2880,3,1,1,no,no,no,no,no,0,no,unfurnished 513 | 2520000,3180,3,1,1,no,no,no,no,no,0,no,unfurnished 514 | 2520000,3000,2,1,2,yes,no,no,no,no,0,no,furnished 515 | 2485000,4400,3,1,2,yes,no,no,no,no,0,no,unfurnished 516 | 2485000,3000,3,1,2,no,no,no,no,no,0,no,semi-furnished 517 | 2450000,3210,3,1,2,yes,no,yes,no,no,0,no,unfurnished 518 | 2450000,3240,2,1,1,no,yes,no,no,no,1,no,unfurnished 519 | 2450000,3000,2,1,1,yes,no,no,no,no,1,no,unfurnished 520 | 2450000,3500,2,1,1,yes,yes,no,no,no,0,no,unfurnished 521 | 2450000,4840,2,1,2,yes,no,no,no,no,0,no,unfurnished 522 | 2450000,7700,2,1,1,yes,no,no,no,no,0,no,unfurnished 523 | 2408000,3635,2,1,1,no,no,no,no,no,0,no,unfurnished 524 | 2380000,2475,3,1,2,yes,no,no,no,no,0,no,furnished 525 | 2380000,2787,4,2,2,yes,no,no,no,no,0,no,furnished 526 | 2380000,3264,2,1,1,yes,no,no,no,no,0,no,unfurnished 527 | 2345000,3640,2,1,1,yes,no,no,no,no,0,no,unfurnished 528 | 2310000,3180,2,1,1,yes,no,no,no,no,0,no,unfurnished 529 | 2275000,1836,2,1,1,no,no,yes,no,no,0,no,semi-furnished 530 | 2275000,3970,1,1,1,no,no,no,no,no,0,no,unfurnished 531 | 2275000,3970,3,1,2,yes,no,yes,no,no,0,no,unfurnished 532 | 2240000,1950,3,1,1,no,no,no,yes,no,0,no,unfurnished 533 | 2233000,5300,3,1,1,no,no,no,no,yes,0,yes,unfurnished 534 | 2135000,3000,2,1,1,no,no,no,no,no,0,no,unfurnished 535 | 2100000,2400,3,1,2,yes,no,no,no,no,0,no,unfurnished 536 | 2100000,3000,4,1,2,yes,no,no,no,no,0,no,unfurnished 537 | 2100000,3360,2,1,1,yes,no,no,no,no,1,no,unfurnished 538 | 1960000,3420,5,1,2,no,no,no,no,no,0,no,unfurnished 539 | 1890000,1700,3,1,2,yes,no,no,no,no,0,no,unfurnished 540 | 1890000,3649,2,1,1,yes,no,no,no,no,0,no,unfurnished 541 | 1855000,2990,2,1,1,no,no,no,no,no,1,no,unfurnished 542 | 1820000,3000,2,1,1,yes,no,yes,no,no,2,no,unfurnished 543 | 1767150,2400,3,1,1,no,no,no,no,no,0,no,semi-furnished 544 | 1750000,3620,2,1,1,yes,no,no,no,no,0,no,unfurnished 545 | 1750000,2910,3,1,1,no,no,no,no,no,0,no,furnished 546 | 1750000,3850,3,1,2,yes,no,no,no,no,0,no,unfurnished 547 | -------------------------------------------------------------------------------- /data/housing_features.csv: -------------------------------------------------------------------------------- 1 | id,area,bedrooms,bathrooms,stories,mainroad,guestroom,basement,hotwaterheating,airconditioning,parking,prefarea,furnishingstatus,event_timestamp 2 | 0,7420,4,2,3,yes,no,no,no,yes,2,yes,furnished,2022-03-11 14:10:43.556872 3 | 1,8960,4,4,4,yes,no,no,no,yes,3,no,furnished,2022-03-11 14:10:43.556872 4 | 2,9960,3,2,2,yes,no,yes,no,no,2,yes,semi-furnished,2022-03-11 14:10:43.556872 5 | 6,8580,4,3,4,yes,no,no,no,yes,2,yes,semi-furnished,2022-03-11 14:10:43.556872 6 | 9,5750,3,2,4,yes,yes,no,no,yes,1,yes,unfurnished,2022-03-11 14:10:43.556872 7 | 10,13200,3,1,2,yes,no,yes,no,yes,2,yes,furnished,2022-03-11 14:10:43.556872 8 | 12,6550,4,2,2,yes,no,no,no,yes,1,yes,semi-furnished,2022-03-11 14:10:43.556872 9 | 14,7800,3,2,2,yes,no,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 10 | 15,6000,4,1,2,yes,no,yes,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 11 | 16,6600,4,2,2,yes,yes,yes,no,yes,1,yes,unfurnished,2022-03-11 14:10:43.556872 12 | 17,8500,3,2,4,yes,no,no,no,yes,2,no,furnished,2022-03-11 14:10:43.556872 13 | 19,6420,3,2,2,yes,no,no,no,yes,1,yes,semi-furnished,2022-03-11 14:10:43.556872 14 | 20,4320,3,1,2,yes,no,yes,yes,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 15 | 21,7155,3,2,1,yes,yes,yes,no,yes,2,no,unfurnished,2022-03-11 14:10:43.556872 16 | 23,4560,3,2,2,yes,yes,yes,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 17 | 24,8800,3,2,2,yes,no,no,no,yes,2,no,furnished,2022-03-11 14:10:43.556872 18 | 25,6540,4,2,2,yes,yes,yes,no,yes,2,yes,furnished,2022-03-11 14:10:43.556872 19 | 26,6000,3,2,4,yes,yes,yes,no,yes,0,yes,semi-furnished,2022-03-11 14:10:43.556872 20 | 27,8875,3,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 21 | 28,7950,5,2,2,yes,no,yes,yes,no,2,no,unfurnished,2022-03-11 14:10:43.556872 22 | 29,5500,4,2,2,yes,no,yes,no,yes,1,yes,semi-furnished,2022-03-11 14:10:43.556872 23 | 30,7475,3,2,4,yes,no,no,no,yes,2,no,unfurnished,2022-03-11 14:10:43.556872 24 | 31,7000,3,1,4,yes,no,no,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 25 | 32,4880,4,2,2,yes,no,no,no,yes,1,yes,furnished,2022-03-11 14:10:43.556872 26 | 33,5960,3,3,2,yes,yes,yes,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 27 | 34,6840,5,1,2,yes,yes,yes,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 28 | 35,7000,3,2,4,yes,no,no,no,yes,2,no,furnished,2022-03-11 14:10:43.556872 29 | 36,7482,3,2,3,yes,no,no,yes,no,1,yes,furnished,2022-03-11 14:10:43.556872 30 | 37,9000,4,2,4,yes,no,no,no,yes,2,no,furnished,2022-03-11 14:10:43.556872 31 | 39,6000,4,2,4,yes,no,no,no,yes,1,no,semi-furnished,2022-03-11 14:10:43.556872 32 | 41,6360,3,2,4,yes,no,no,no,yes,0,yes,furnished,2022-03-11 14:10:43.556872 33 | 42,6480,3,2,4,yes,no,no,no,yes,2,no,unfurnished,2022-03-11 14:10:43.556872 34 | 43,6000,4,2,4,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 35 | 44,6000,4,2,4,yes,no,no,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 36 | 45,6000,3,2,3,yes,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 37 | 47,6600,3,1,4,yes,no,no,no,yes,3,yes,furnished,2022-03-11 14:10:43.556872 38 | 48,4300,3,2,2,yes,no,yes,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 39 | 49,7440,3,2,1,yes,yes,yes,no,yes,0,yes,semi-furnished,2022-03-11 14:10:43.556872 40 | 50,7440,3,2,4,yes,no,no,no,no,1,yes,unfurnished,2022-03-11 14:10:43.556872 41 | 51,6325,3,1,4,yes,no,no,no,yes,1,no,unfurnished,2022-03-11 14:10:43.556872 42 | 56,11440,4,1,2,yes,no,yes,no,no,1,yes,semi-furnished,2022-03-11 14:10:43.556872 43 | 57,9000,4,2,4,yes,yes,no,no,yes,1,yes,furnished,2022-03-11 14:10:43.556872 44 | 58,7680,4,2,4,yes,yes,no,no,yes,1,no,semi-furnished,2022-03-11 14:10:43.556872 45 | 62,6240,4,2,2,yes,no,no,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 46 | 63,6360,4,2,3,yes,no,no,no,yes,2,yes,furnished,2022-03-11 14:10:43.556872 47 | 67,7700,3,2,1,yes,no,no,no,no,2,no,unfurnished,2022-03-11 14:10:43.556872 48 | 70,4000,3,2,2,yes,no,yes,no,yes,0,yes,semi-furnished,2022-03-11 14:10:43.556872 49 | 72,5020,3,1,4,yes,no,no,no,yes,0,yes,unfurnished,2022-03-11 14:10:43.556872 50 | 73,6600,2,2,4,yes,no,yes,no,no,0,yes,furnished,2022-03-11 14:10:43.556872 51 | 74,4040,3,1,2,yes,no,yes,yes,no,1,no,furnished,2022-03-11 14:10:43.556872 52 | 75,4260,4,2,2,yes,no,no,yes,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 53 | 76,6420,3,2,3,yes,no,no,no,yes,0,yes,furnished,2022-03-11 14:10:43.556872 54 | 77,6500,3,2,3,yes,no,no,no,yes,0,yes,furnished,2022-03-11 14:10:43.556872 55 | 78,5700,3,1,1,yes,yes,yes,no,yes,2,yes,furnished,2022-03-11 14:10:43.556872 56 | 79,6000,3,2,3,yes,yes,no,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 57 | 85,8250,3,2,3,yes,no,no,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 58 | 86,6670,3,1,3,yes,no,yes,no,no,0,yes,unfurnished,2022-03-11 14:10:43.556872 59 | 87,3960,3,1,1,yes,no,yes,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 60 | 88,7410,3,1,1,yes,yes,yes,no,yes,2,yes,unfurnished,2022-03-11 14:10:43.556872 61 | 89,8580,5,3,2,yes,no,no,no,no,2,no,furnished,2022-03-11 14:10:43.556872 62 | 91,6750,2,1,1,yes,yes,yes,no,no,2,yes,furnished,2022-03-11 14:10:43.556872 63 | 92,4800,3,2,4,yes,yes,no,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 64 | 93,7200,3,2,1,yes,no,yes,no,yes,3,no,semi-furnished,2022-03-11 14:10:43.556872 65 | 94,6000,4,2,4,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 66 | 95,4100,3,2,3,yes,no,no,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 67 | 96,9000,3,1,1,yes,no,yes,no,no,1,yes,furnished,2022-03-11 14:10:43.556872 68 | 98,6600,3,2,3,yes,no,no,no,yes,0,yes,unfurnished,2022-03-11 14:10:43.556872 69 | 100,6600,3,2,1,yes,no,yes,no,yes,0,yes,unfurnished,2022-03-11 14:10:43.556872 70 | 101,5500,3,1,3,yes,no,no,no,no,1,yes,unfurnished,2022-03-11 14:10:43.556872 71 | 102,5500,3,2,4,yes,yes,no,no,yes,1,no,semi-furnished,2022-03-11 14:10:43.556872 72 | 103,6350,3,2,3,yes,yes,no,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 73 | 105,4500,3,1,4,yes,no,no,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 74 | 106,5450,4,2,1,yes,no,yes,no,yes,0,yes,semi-furnished,2022-03-11 14:10:43.556872 75 | 107,6420,3,1,3,yes,no,yes,no,no,0,yes,unfurnished,2022-03-11 14:10:43.556872 76 | 108,3240,4,1,3,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 77 | 109,6615,4,2,2,yes,yes,no,yes,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 78 | 112,4300,6,2,2,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 79 | 113,9620,3,1,1,yes,no,yes,no,no,2,yes,furnished,2022-03-11 14:10:43.556872 80 | 114,6800,2,1,1,yes,yes,yes,no,no,2,no,furnished,2022-03-11 14:10:43.556872 81 | 115,8000,3,1,1,yes,yes,yes,no,yes,2,yes,semi-furnished,2022-03-11 14:10:43.556872 82 | 118,6420,3,1,1,yes,no,yes,no,yes,0,yes,furnished,2022-03-11 14:10:43.556872 83 | 119,7020,3,1,1,yes,no,yes,no,yes,2,yes,semi-furnished,2022-03-11 14:10:43.556872 84 | 120,6540,3,1,1,yes,yes,yes,no,no,2,yes,furnished,2022-03-11 14:10:43.556872 85 | 121,7231,3,1,2,yes,yes,yes,no,yes,0,yes,semi-furnished,2022-03-11 14:10:43.556872 86 | 122,6254,4,2,1,yes,no,yes,no,no,1,yes,semi-furnished,2022-03-11 14:10:43.556872 87 | 123,7320,4,2,2,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 88 | 124,6525,3,2,4,yes,no,no,no,no,1,no,furnished,2022-03-11 14:10:43.556872 89 | 125,15600,3,1,1,yes,no,no,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 90 | 126,7160,3,1,1,yes,no,yes,no,no,2,yes,unfurnished,2022-03-11 14:10:43.556872 91 | 129,11460,3,1,3,yes,no,no,no,no,2,yes,semi-furnished,2022-03-11 14:10:43.556872 92 | 135,6000,3,2,4,yes,no,no,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 93 | 136,5400,4,2,2,yes,no,no,no,yes,2,no,unfurnished,2022-03-11 14:10:43.556872 94 | 137,4640,4,1,2,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 95 | 138,5000,3,1,3,yes,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 96 | 139,6360,3,1,1,yes,yes,yes,no,yes,2,yes,furnished,2022-03-11 14:10:43.556872 97 | 141,6660,4,2,2,yes,yes,yes,no,no,1,yes,semi-furnished,2022-03-11 14:10:43.556872 98 | 143,4800,5,2,3,no,no,yes,yes,no,0,no,unfurnished,2022-03-11 14:10:43.556872 99 | 144,4700,4,1,2,yes,yes,yes,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 100 | 146,10500,2,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 101 | 147,5500,3,2,2,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 102 | 148,6360,3,1,3,yes,no,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 103 | 149,6600,4,2,1,yes,no,yes,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 104 | 150,5136,3,1,2,yes,yes,yes,no,yes,0,yes,unfurnished,2022-03-11 14:10:43.556872 105 | 151,4400,4,1,2,yes,no,no,no,yes,2,yes,semi-furnished,2022-03-11 14:10:43.556872 106 | 152,5400,5,1,2,yes,yes,yes,no,yes,0,yes,furnished,2022-03-11 14:10:43.556872 107 | 154,3650,3,2,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 108 | 155,6100,3,2,1,yes,no,yes,no,no,2,yes,furnished,2022-03-11 14:10:43.556872 109 | 156,6900,3,1,1,yes,yes,yes,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 110 | 159,3150,3,2,1,yes,yes,yes,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 111 | 160,6210,4,1,4,yes,yes,no,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 112 | 162,6600,4,2,2,yes,yes,yes,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 113 | 165,6450,3,2,1,yes,yes,yes,yes,no,0,no,unfurnished,2022-03-11 14:10:43.556872 114 | 166,7800,3,1,1,yes,no,yes,no,yes,2,yes,unfurnished,2022-03-11 14:10:43.556872 115 | 168,4260,4,1,2,yes,no,yes,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 116 | 169,6540,4,2,2,no,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 117 | 171,10269,3,1,1,yes,no,no,no,no,1,yes,semi-furnished,2022-03-11 14:10:43.556872 118 | 173,5300,4,2,1,yes,no,no,no,yes,0,yes,unfurnished,2022-03-11 14:10:43.556872 119 | 174,3800,3,1,2,yes,yes,yes,no,no,1,yes,unfurnished,2022-03-11 14:10:43.556872 120 | 175,9800,4,2,2,yes,yes,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 121 | 177,6050,3,1,1,yes,no,yes,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 122 | 178,7085,3,1,1,yes,yes,yes,no,no,2,yes,semi-furnished,2022-03-11 14:10:43.556872 123 | 179,3180,3,2,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 124 | 180,4500,4,2,1,no,no,yes,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 125 | 181,7200,3,1,2,yes,yes,yes,no,no,1,yes,furnished,2022-03-11 14:10:43.556872 126 | 182,3410,3,1,2,no,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 127 | 184,3000,3,2,2,yes,yes,yes,no,no,0,no,furnished,2022-03-11 14:10:43.556872 128 | 185,3000,3,1,2,yes,no,yes,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 129 | 187,6100,3,1,1,yes,no,yes,no,yes,0,yes,semi-furnished,2022-03-11 14:10:43.556872 130 | 188,5720,2,1,2,yes,no,no,no,yes,0,yes,unfurnished,2022-03-11 14:10:43.556872 131 | 190,7600,4,1,2,yes,no,no,no,yes,2,no,furnished,2022-03-11 14:10:43.556872 132 | 192,6600,3,1,1,yes,yes,yes,no,no,0,yes,furnished,2022-03-11 14:10:43.556872 133 | 193,4800,2,1,1,yes,yes,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 134 | 197,2800,3,2,2,no,no,yes,no,yes,1,no,semi-furnished,2022-03-11 14:10:43.556872 135 | 198,5948,3,1,2,yes,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 136 | 199,4200,3,1,2,yes,no,no,no,no,1,no,furnished,2022-03-11 14:10:43.556872 137 | 200,4520,3,1,2,yes,no,yes,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 138 | 201,4095,3,1,2,no,yes,yes,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 139 | 205,6300,3,1,1,yes,no,no,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 140 | 206,5800,2,1,1,yes,yes,yes,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 141 | 207,3000,3,1,2,yes,no,yes,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 142 | 208,2970,3,1,3,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 143 | 209,6720,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 144 | 211,12900,3,1,1,yes,no,no,no,no,2,no,furnished,2022-03-11 14:10:43.556872 145 | 212,3420,4,2,2,yes,no,yes,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 146 | 214,4350,2,1,1,yes,no,yes,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 147 | 215,4160,3,1,3,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 148 | 216,6040,3,1,1,yes,no,no,no,no,2,yes,semi-furnished,2022-03-11 14:10:43.556872 149 | 217,6862,3,1,2,yes,no,no,no,yes,2,yes,furnished,2022-03-11 14:10:43.556872 150 | 218,4815,2,1,1,yes,no,no,no,yes,0,yes,semi-furnished,2022-03-11 14:10:43.556872 151 | 219,7000,3,1,2,yes,no,yes,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 152 | 222,9166,2,1,1,yes,no,yes,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 153 | 223,6321,3,1,2,yes,no,yes,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 154 | 224,10240,2,1,1,yes,no,no,no,yes,2,yes,unfurnished,2022-03-11 14:10:43.556872 155 | 225,6440,2,1,1,yes,no,no,no,yes,3,no,semi-furnished,2022-03-11 14:10:43.556872 156 | 226,5170,3,1,4,yes,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 157 | 227,6000,2,1,1,yes,no,yes,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 158 | 228,3630,3,1,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 159 | 229,9667,4,2,2,yes,yes,yes,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 160 | 230,5400,2,1,2,yes,no,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 161 | 232,3745,3,1,2,yes,no,yes,no,no,0,no,furnished,2022-03-11 14:10:43.556872 162 | 235,5680,3,1,2,yes,yes,no,no,yes,1,no,semi-furnished,2022-03-11 14:10:43.556872 163 | 236,2870,2,1,2,yes,yes,yes,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 164 | 238,4510,4,2,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 165 | 239,4000,3,1,2,yes,no,no,no,no,1,no,furnished,2022-03-11 14:10:43.556872 166 | 240,3840,3,1,2,yes,no,no,no,no,1,yes,semi-furnished,2022-03-11 14:10:43.556872 167 | 241,3760,3,1,1,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 168 | 242,3640,3,1,2,yes,no,no,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 169 | 244,5320,3,1,2,yes,yes,yes,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 170 | 245,5360,3,1,2,yes,no,no,no,no,2,yes,unfurnished,2022-03-11 14:10:43.556872 171 | 246,3520,3,1,1,yes,no,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 172 | 247,8400,4,1,4,yes,no,no,no,no,3,no,unfurnished,2022-03-11 14:10:43.556872 173 | 248,4100,2,2,1,yes,yes,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 174 | 250,3510,3,1,3,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 175 | 251,3450,3,1,2,yes,no,yes,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 176 | 252,9860,3,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 177 | 253,3520,2,1,2,yes,no,no,no,no,0,yes,furnished,2022-03-11 14:10:43.556872 178 | 254,4510,4,1,2,yes,no,no,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 179 | 255,5885,2,1,1,yes,no,no,no,yes,1,no,unfurnished,2022-03-11 14:10:43.556872 180 | 256,4000,3,1,2,yes,no,no,no,no,2,no,furnished,2022-03-11 14:10:43.556872 181 | 257,8250,3,1,1,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 182 | 258,4040,3,1,2,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 183 | 259,6360,2,1,1,yes,no,yes,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 184 | 260,3162,3,1,2,yes,no,no,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 185 | 262,3750,2,1,1,yes,yes,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 186 | 263,3968,3,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 187 | 264,4900,2,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 188 | 265,2880,3,1,2,yes,no,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 189 | 266,4880,3,1,1,yes,no,no,no,no,2,yes,unfurnished,2022-03-11 14:10:43.556872 190 | 267,4920,3,1,2,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 191 | 268,4950,4,1,2,yes,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 192 | 270,4500,3,2,3,yes,no,no,yes,no,1,no,furnished,2022-03-11 14:10:43.556872 193 | 271,1905,5,1,2,no,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 194 | 272,4075,3,1,1,yes,yes,yes,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 195 | 273,3500,4,1,2,yes,no,no,no,no,2,no,furnished,2022-03-11 14:10:43.556872 196 | 274,6450,4,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 197 | 275,4032,2,1,1,yes,no,yes,no,no,0,no,furnished,2022-03-11 14:10:43.556872 198 | 276,4400,2,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 199 | 277,10360,2,1,1,yes,no,no,no,no,1,yes,semi-furnished,2022-03-11 14:10:43.556872 200 | 279,6360,2,1,1,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 201 | 280,6360,2,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 202 | 281,4500,2,1,1,yes,no,no,no,yes,2,no,furnished,2022-03-11 14:10:43.556872 203 | 282,2175,3,1,2,no,yes,yes,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 204 | 283,4360,4,1,2,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 205 | 284,7770,2,1,1,yes,no,no,no,no,1,no,furnished,2022-03-11 14:10:43.556872 206 | 285,6650,3,1,2,yes,yes,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 207 | 287,5500,3,1,2,yes,no,no,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 208 | 288,5040,3,1,2,yes,no,yes,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 209 | 289,5850,2,1,1,yes,yes,yes,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 210 | 290,2610,4,3,2,no,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 211 | 293,4410,2,1,1,no,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 212 | 296,4600,3,2,2,yes,no,no,no,yes,1,no,semi-furnished,2022-03-11 14:10:43.556872 213 | 298,5800,3,1,1,yes,no,no,yes,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 214 | 299,7000,3,1,1,yes,no,no,no,no,3,no,furnished,2022-03-11 14:10:43.556872 215 | 300,4079,3,1,3,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 216 | 301,3520,3,1,2,yes,no,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 217 | 304,8250,3,1,1,yes,no,yes,no,no,3,no,semi-furnished,2022-03-11 14:10:43.556872 218 | 305,3450,3,1,2,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 219 | 307,4080,3,1,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 220 | 309,4632,4,1,2,yes,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 221 | 310,5985,3,1,1,yes,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 222 | 311,6060,2,1,1,yes,no,yes,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 223 | 312,3600,3,1,1,yes,no,yes,no,yes,0,yes,furnished,2022-03-11 14:10:43.556872 224 | 316,5900,4,2,2,no,no,yes,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 225 | 318,4340,3,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 226 | 319,3000,4,1,3,yes,no,yes,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 227 | 320,4320,3,1,2,yes,no,no,no,no,2,yes,furnished,2022-03-11 14:10:43.556872 228 | 321,3630,3,2,2,yes,no,no,yes,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 229 | 322,3460,3,2,1,yes,no,yes,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 230 | 325,3460,4,1,2,yes,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 231 | 327,6480,3,1,2,no,no,no,no,yes,1,no,semi-furnished,2022-03-11 14:10:43.556872 232 | 328,4500,3,2,2,no,no,yes,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 233 | 329,3960,3,1,2,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 234 | 330,4050,2,1,2,yes,yes,yes,no,no,0,yes,unfurnished,2022-03-11 14:10:43.556872 235 | 331,7260,3,2,1,yes,yes,yes,no,no,3,no,furnished,2022-03-11 14:10:43.556872 236 | 332,5500,4,1,2,yes,yes,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 237 | 335,3816,2,1,1,yes,no,yes,no,yes,2,no,furnished,2022-03-11 14:10:43.556872 238 | 336,8080,3,1,1,yes,no,no,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 239 | 337,2145,4,2,1,yes,no,yes,no,no,0,yes,unfurnished,2022-03-11 14:10:43.556872 240 | 338,3780,2,1,2,yes,yes,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 241 | 339,3180,4,2,2,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 242 | 340,5300,5,2,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 243 | 342,7152,3,1,2,yes,no,no,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 244 | 343,4080,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 245 | 344,3850,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 246 | 345,2015,3,1,2,yes,no,yes,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 247 | 346,2176,2,1,2,yes,yes,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 248 | 348,3150,2,2,1,no,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 249 | 351,3600,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 250 | 352,5830,2,1,1,yes,no,no,no,no,2,no,unfurnished,2022-03-11 14:10:43.556872 251 | 353,2856,3,1,3,yes,no,no,no,no,0,yes,furnished,2022-03-11 14:10:43.556872 252 | 355,8250,3,1,1,yes,no,no,no,no,2,no,furnished,2022-03-11 14:10:43.556872 253 | 358,3480,2,1,1,yes,no,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 254 | 360,4040,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 255 | 361,6020,3,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 256 | 363,3584,2,1,1,yes,no,no,yes,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 257 | 368,5640,2,1,1,no,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 258 | 369,3600,2,1,1,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 259 | 370,4280,2,1,1,yes,no,no,no,yes,2,no,semi-furnished,2022-03-11 14:10:43.556872 260 | 371,3570,3,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 261 | 373,3000,2,1,2,yes,no,no,no,yes,0,no,furnished,2022-03-11 14:10:43.556872 262 | 374,3520,2,2,1,yes,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 263 | 375,5960,3,1,2,yes,yes,yes,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 264 | 376,4130,3,2,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 265 | 377,2850,3,2,2,no,no,yes,no,no,0,yes,unfurnished,2022-03-11 14:10:43.556872 266 | 378,2275,3,1,3,yes,no,no,yes,yes,0,yes,semi-furnished,2022-03-11 14:10:43.556872 267 | 379,3520,3,1,1,yes,no,no,no,no,2,yes,unfurnished,2022-03-11 14:10:43.556872 268 | 380,4500,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 269 | 381,4000,2,1,1,yes,no,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 270 | 384,4500,2,1,1,no,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 271 | 385,3640,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 272 | 386,3850,3,1,1,yes,no,no,no,no,2,no,unfurnished,2022-03-11 14:10:43.556872 273 | 387,4240,3,1,2,yes,no,no,no,yes,0,no,semi-furnished,2022-03-11 14:10:43.556872 274 | 389,4600,4,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 275 | 390,2135,3,2,2,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 276 | 391,3036,3,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 277 | 392,3990,3,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 278 | 393,7424,3,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 279 | 394,3480,3,1,1,no,no,no,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 280 | 395,3600,6,1,2,yes,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 281 | 396,3640,2,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 282 | 397,5900,2,1,1,yes,no,no,no,no,1,no,furnished,2022-03-11 14:10:43.556872 283 | 398,3120,3,1,2,yes,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 284 | 399,7350,2,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 285 | 400,3512,2,1,1,yes,no,no,no,no,1,yes,unfurnished,2022-03-11 14:10:43.556872 286 | 401,9500,3,1,2,yes,no,no,no,no,3,yes,unfurnished,2022-03-11 14:10:43.556872 287 | 403,12944,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 288 | 405,3060,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 289 | 406,5320,2,1,1,yes,no,no,no,no,1,yes,unfurnished,2022-03-11 14:10:43.556872 290 | 407,2145,3,1,3,yes,no,no,no,no,0,yes,furnished,2022-03-11 14:10:43.556872 291 | 408,4000,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 292 | 409,3185,2,1,1,yes,no,no,no,no,2,no,unfurnished,2022-03-11 14:10:43.556872 293 | 412,2610,3,1,2,yes,no,yes,no,no,0,yes,unfurnished,2022-03-11 14:10:43.556872 294 | 413,1950,3,2,2,yes,no,yes,no,no,0,yes,unfurnished,2022-03-11 14:10:43.556872 295 | 415,4785,3,1,2,yes,yes,yes,no,yes,1,no,furnished,2022-03-11 14:10:43.556872 296 | 416,3450,3,1,1,yes,no,yes,no,no,2,no,unfurnished,2022-03-11 14:10:43.556872 297 | 422,3720,2,1,1,no,no,no,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 298 | 423,3750,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 299 | 424,3100,3,1,2,no,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 300 | 426,2700,3,1,1,no,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 301 | 427,2145,3,1,2,yes,no,yes,no,no,0,yes,furnished,2022-03-11 14:10:43.556872 302 | 428,4040,2,1,1,yes,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 303 | 429,4775,4,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 304 | 430,2500,2,1,1,no,no,no,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 305 | 431,3180,4,1,2,yes,no,yes,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 306 | 432,6060,3,1,1,yes,yes,yes,no,no,0,no,furnished,2022-03-11 14:10:43.556872 307 | 433,3480,4,1,2,no,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 308 | 435,4040,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 309 | 437,5880,3,1,1,yes,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 310 | 439,3930,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 311 | 440,3640,4,1,2,yes,no,yes,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 312 | 441,4370,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 313 | 443,4320,3,1,1,no,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 314 | 445,3450,1,1,1,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 315 | 446,3986,2,2,1,no,yes,yes,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 316 | 447,3500,2,1,1,no,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 317 | 448,4095,2,1,1,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 318 | 451,6750,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 319 | 452,9000,3,1,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 320 | 454,4500,3,1,2,yes,no,no,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 321 | 456,2398,3,1,1,yes,no,no,no,no,0,yes,semi-furnished,2022-03-11 14:10:43.556872 322 | 457,3000,3,1,1,no,no,no,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 323 | 459,3500,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 324 | 460,8100,2,1,1,yes,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 325 | 461,4960,2,1,1,yes,no,yes,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 326 | 463,3090,2,1,1,yes,yes,yes,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 327 | 464,4500,2,1,2,yes,no,no,yes,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 328 | 466,3090,3,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 329 | 467,3240,3,1,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-11 14:10:43.556872 330 | 468,2835,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 331 | 470,5076,3,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 332 | 471,3750,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 333 | 472,3630,4,1,2,yes,no,no,no,no,3,no,semi-furnished,2022-03-11 14:10:43.556872 334 | 473,8050,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 335 | 476,5850,3,1,2,yes,no,yes,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 336 | 477,4960,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 337 | 478,3600,3,1,2,no,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 338 | 479,3660,4,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 339 | 480,3480,3,1,2,no,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 340 | 481,2700,2,1,1,no,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 341 | 483,6615,3,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 342 | 486,6000,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 343 | 489,3300,3,1,2,no,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 344 | 491,2640,2,1,1,no,no,no,no,no,1,no,furnished,2022-03-11 14:10:43.556872 345 | 493,3960,3,1,1,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 346 | 495,4000,3,1,2,yes,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 347 | 496,4000,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 348 | 497,3934,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 349 | 498,2000,2,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 350 | 499,3630,3,3,2,no,yes,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 351 | 500,2800,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 352 | 501,2430,3,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 353 | 502,3480,2,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-11 14:10:43.556872 354 | 503,4000,3,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 355 | 504,3185,2,1,1,yes,no,no,no,yes,0,no,unfurnished,2022-03-11 14:10:43.556872 356 | 506,2910,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 357 | 507,3600,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 358 | 508,4400,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 359 | 510,2880,3,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 360 | 513,4400,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 361 | 515,3210,3,1,2,yes,no,yes,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 362 | 518,3500,2,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 363 | 519,4840,2,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 364 | 520,7700,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 365 | 521,3635,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 366 | 522,2475,3,1,2,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 367 | 523,2787,4,2,2,yes,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 368 | 524,3264,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 369 | 525,3640,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 370 | 527,1836,2,1,1,no,no,yes,no,no,0,no,semi-furnished,2022-03-11 14:10:43.556872 371 | 528,3970,1,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 372 | 529,3970,3,1,2,yes,no,yes,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 373 | 530,1950,3,1,1,no,no,no,yes,no,0,no,unfurnished,2022-03-11 14:10:43.556872 374 | 532,3000,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 375 | 533,2400,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 376 | 534,3000,4,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 377 | 535,3360,2,1,1,yes,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 378 | 536,3420,5,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 379 | 538,3649,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 380 | 539,2990,2,1,1,no,no,no,no,no,1,no,unfurnished,2022-03-11 14:10:43.556872 381 | 540,3000,2,1,1,yes,no,yes,no,no,2,no,unfurnished,2022-03-11 14:10:43.556872 382 | 542,3620,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-11 14:10:43.556872 383 | 543,2910,3,1,1,no,no,no,no,no,0,no,furnished,2022-03-11 14:10:43.556872 384 | 0,7420,4,2,3,yes,no,no,no,yes,2,yes,furnished,2022-03-13 14:10:43.565999 385 | 2,9960,3,2,2,yes,no,yes,no,no,2,yes,semi-furnished,2022-03-13 14:10:43.565999 386 | 3,7500,4,2,2,yes,no,yes,no,yes,3,yes,furnished,2022-03-13 14:10:43.565999 387 | 4,7420,4,1,2,yes,yes,yes,no,yes,2,no,furnished,2022-03-13 14:10:43.565999 388 | 5,7500,3,3,1,no,no,yes,no,yes,2,yes,semi-furnished,2022-03-13 14:10:43.565999 389 | 10,13200,3,1,2,no,no,yes,no,yes,2,yes,furnished,2022-03-13 14:10:43.565999 390 | 11,6000,4,3,2,no,yes,yes,yes,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 391 | 12,6550,4,2,2,yes,no,no,no,yes,1,yes,semi-furnished,2022-03-13 14:10:43.565999 392 | 13,3500,4,2,2,no,no,no,yes,no,2,no,furnished,2022-03-13 14:10:43.565999 393 | 15,6000,4,1,2,no,no,yes,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 394 | 17,8500,3,2,4,no,no,no,no,yes,2,no,furnished,2022-03-13 14:10:43.565999 395 | 18,4600,3,2,2,yes,yes,no,no,yes,2,no,furnished,2022-03-13 14:10:43.565999 396 | 20,4320,3,1,2,yes,no,yes,yes,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 397 | 21,7155,3,2,1,yes,yes,yes,no,yes,2,no,unfurnished,2022-03-13 14:10:43.565999 398 | 22,8050,3,1,1,no,yes,yes,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 399 | 24,8800,3,2,2,yes,no,no,no,yes,2,no,furnished,2022-03-13 14:10:43.565999 400 | 25,6540,4,2,2,yes,yes,yes,no,yes,2,yes,furnished,2022-03-13 14:10:43.565999 401 | 26,6000,3,2,4,yes,yes,yes,no,yes,0,yes,semi-furnished,2022-03-13 14:10:43.565999 402 | 27,8875,3,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 403 | 28,7950,5,2,2,yes,no,yes,yes,no,2,no,unfurnished,2022-03-13 14:10:43.565999 404 | 30,7475,3,2,4,yes,no,no,no,yes,2,no,unfurnished,2022-03-13 14:10:43.565999 405 | 33,5960,3,3,2,no,yes,yes,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 406 | 34,6840,5,1,2,no,yes,yes,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 407 | 38,6000,3,1,4,yes,yes,no,no,yes,2,no,unfurnished,2022-03-13 14:10:43.565999 408 | 40,6550,3,1,2,yes,no,yes,no,yes,0,yes,furnished,2022-03-13 14:10:43.565999 409 | 41,6360,3,2,4,no,no,no,no,yes,0,yes,furnished,2022-03-13 14:10:43.565999 410 | 43,6000,4,2,4,no,no,no,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 411 | 44,6000,4,2,4,no,no,no,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 412 | 45,6000,3,2,3,no,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 413 | 46,6000,3,2,4,no,no,no,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 414 | 51,6325,3,1,4,no,no,no,no,yes,1,no,unfurnished,2022-03-13 14:10:43.565999 415 | 53,5150,3,2,4,no,no,no,no,yes,2,no,semi-furnished,2022-03-13 14:10:43.565999 416 | 55,6000,3,1,2,no,no,no,no,yes,1,no,unfurnished,2022-03-13 14:10:43.565999 417 | 56,11440,4,1,2,yes,no,yes,no,no,1,yes,semi-furnished,2022-03-13 14:10:43.565999 418 | 57,9000,4,2,4,no,yes,no,no,yes,1,yes,furnished,2022-03-13 14:10:43.565999 419 | 58,7680,4,2,4,no,yes,no,no,yes,1,no,semi-furnished,2022-03-13 14:10:43.565999 420 | 59,6000,3,2,4,yes,yes,no,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 421 | 60,6000,3,2,2,no,yes,no,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 422 | 61,8880,2,1,1,yes,no,no,no,yes,1,no,semi-furnished,2022-03-13 14:10:43.565999 423 | 64,11175,3,1,1,yes,no,yes,no,yes,1,yes,furnished,2022-03-13 14:10:43.565999 424 | 65,8880,3,2,2,no,no,yes,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 425 | 66,13200,2,1,1,no,no,yes,yes,no,1,no,furnished,2022-03-13 14:10:43.565999 426 | 67,7700,3,2,1,no,no,no,no,no,2,no,unfurnished,2022-03-13 14:10:43.565999 427 | 69,12090,4,2,2,yes,no,no,no,no,2,yes,furnished,2022-03-13 14:10:43.565999 428 | 70,4000,3,2,2,no,no,yes,no,yes,0,yes,semi-furnished,2022-03-13 14:10:43.565999 429 | 71,6000,4,2,4,yes,no,no,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 430 | 72,5020,3,1,4,no,no,no,no,yes,0,yes,unfurnished,2022-03-13 14:10:43.565999 431 | 74,4040,3,1,2,yes,no,yes,yes,no,1,no,furnished,2022-03-13 14:10:43.565999 432 | 76,6420,3,2,3,no,no,no,no,yes,0,yes,furnished,2022-03-13 14:10:43.565999 433 | 78,5700,3,1,1,yes,yes,yes,no,yes,2,yes,furnished,2022-03-13 14:10:43.565999 434 | 79,6000,3,2,3,yes,yes,no,no,yes,0,no,furnished,2022-03-13 14:10:43.565999 435 | 81,4000,3,2,2,yes,no,yes,no,yes,1,no,semi-furnished,2022-03-13 14:10:43.565999 436 | 82,10500,3,2,1,yes,no,yes,no,yes,1,yes,furnished,2022-03-13 14:10:43.565999 437 | 84,3760,3,1,2,yes,no,no,yes,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 438 | 87,3960,3,1,1,no,no,yes,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 439 | 88,7410,3,1,1,no,yes,yes,no,yes,2,yes,unfurnished,2022-03-13 14:10:43.565999 440 | 89,8580,5,3,2,yes,no,no,no,no,2,no,furnished,2022-03-13 14:10:43.565999 441 | 91,6750,2,1,1,yes,yes,yes,no,no,2,yes,furnished,2022-03-13 14:10:43.565999 442 | 92,4800,3,2,4,no,yes,no,no,yes,0,no,furnished,2022-03-13 14:10:43.565999 443 | 93,7200,3,2,1,no,no,yes,no,yes,3,no,semi-furnished,2022-03-13 14:10:43.565999 444 | 94,6000,4,2,4,yes,no,no,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 445 | 95,4100,3,2,3,no,no,no,no,yes,2,no,semi-furnished,2022-03-13 14:10:43.565999 446 | 99,6000,4,1,3,no,yes,yes,no,no,0,yes,unfurnished,2022-03-13 14:10:43.565999 447 | 101,5500,3,1,3,no,no,no,no,no,1,yes,unfurnished,2022-03-13 14:10:43.565999 448 | 102,5500,3,2,4,yes,yes,no,no,yes,1,no,semi-furnished,2022-03-13 14:10:43.565999 449 | 105,4500,3,1,4,yes,no,no,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 450 | 106,5450,4,2,1,yes,no,yes,no,yes,0,yes,semi-furnished,2022-03-13 14:10:43.565999 451 | 107,6420,3,1,3,yes,no,yes,no,no,0,yes,unfurnished,2022-03-13 14:10:43.565999 452 | 108,3240,4,1,3,yes,no,no,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 453 | 109,6615,4,2,2,no,yes,no,yes,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 454 | 111,8372,3,1,3,no,no,no,no,yes,2,no,unfurnished,2022-03-13 14:10:43.565999 455 | 115,8000,3,1,1,yes,yes,yes,no,yes,2,yes,semi-furnished,2022-03-13 14:10:43.565999 456 | 118,6420,3,1,1,yes,no,yes,no,yes,0,yes,furnished,2022-03-13 14:10:43.565999 457 | 119,7020,3,1,1,yes,no,yes,no,yes,2,yes,semi-furnished,2022-03-13 14:10:43.565999 458 | 121,7231,3,1,2,no,yes,yes,no,yes,0,yes,semi-furnished,2022-03-13 14:10:43.565999 459 | 122,6254,4,2,1,no,no,yes,no,no,1,yes,semi-furnished,2022-03-13 14:10:43.565999 460 | 125,15600,3,1,1,no,no,no,no,yes,2,no,semi-furnished,2022-03-13 14:10:43.565999 461 | 128,5500,3,1,3,no,yes,no,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 462 | 129,11460,3,1,3,no,no,no,no,no,2,yes,semi-furnished,2022-03-13 14:10:43.565999 463 | 130,4800,3,1,1,no,yes,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 464 | 132,5200,3,1,3,yes,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 465 | 134,7000,3,1,1,no,no,yes,no,no,2,yes,semi-furnished,2022-03-13 14:10:43.565999 466 | 138,5000,3,1,3,yes,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 467 | 139,6360,3,1,1,yes,yes,yes,no,yes,2,yes,furnished,2022-03-13 14:10:43.565999 468 | 140,5800,3,2,4,no,no,no,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 469 | 142,10500,4,2,2,yes,no,no,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 470 | 146,10500,2,1,1,no,no,no,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 471 | 148,6360,3,1,3,yes,no,no,no,no,0,yes,semi-furnished,2022-03-13 14:10:43.565999 472 | 151,4400,4,1,2,no,no,no,no,yes,2,yes,semi-furnished,2022-03-13 14:10:43.565999 473 | 152,5400,5,1,2,no,yes,yes,no,yes,0,yes,furnished,2022-03-13 14:10:43.565999 474 | 154,3650,3,2,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 475 | 156,6900,3,1,1,yes,yes,yes,no,no,0,yes,semi-furnished,2022-03-13 14:10:43.565999 476 | 159,3150,3,2,1,yes,yes,yes,no,yes,0,no,furnished,2022-03-13 14:10:43.565999 477 | 162,6600,4,2,2,yes,yes,yes,no,no,0,yes,semi-furnished,2022-03-13 14:10:43.565999 478 | 165,6450,3,2,1,no,yes,yes,yes,no,0,no,unfurnished,2022-03-13 14:10:43.565999 479 | 166,7800,3,1,1,yes,no,yes,no,yes,2,yes,unfurnished,2022-03-13 14:10:43.565999 480 | 167,4600,2,2,1,yes,no,no,no,yes,2,no,semi-furnished,2022-03-13 14:10:43.565999 481 | 168,4260,4,1,2,no,no,yes,no,yes,0,no,furnished,2022-03-13 14:10:43.565999 482 | 169,6540,4,2,2,yes,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 483 | 170,5500,3,2,1,yes,no,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 484 | 171,10269,3,1,1,no,no,no,no,no,1,yes,semi-furnished,2022-03-13 14:10:43.565999 485 | 172,8400,3,1,2,no,yes,yes,no,yes,2,yes,unfurnished,2022-03-13 14:10:43.565999 486 | 173,5300,4,2,1,no,no,no,no,yes,0,yes,unfurnished,2022-03-13 14:10:43.565999 487 | 174,3800,3,1,2,no,yes,yes,no,no,1,yes,unfurnished,2022-03-13 14:10:43.565999 488 | 176,8520,3,1,1,no,no,no,no,yes,2,no,furnished,2022-03-13 14:10:43.565999 489 | 179,3180,3,2,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 490 | 181,7200,3,1,2,yes,yes,yes,no,no,1,yes,furnished,2022-03-13 14:10:43.565999 491 | 182,3410,3,1,2,no,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 492 | 186,11410,2,1,2,no,no,no,no,no,0,yes,furnished,2022-03-13 14:10:43.565999 493 | 187,6100,3,1,1,yes,no,yes,no,yes,0,yes,semi-furnished,2022-03-13 14:10:43.565999 494 | 189,3540,2,1,1,no,yes,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 495 | 190,7600,4,1,2,no,no,no,no,yes,2,no,furnished,2022-03-13 14:10:43.565999 496 | 191,10700,3,1,2,no,yes,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 497 | 195,4410,4,3,2,yes,no,yes,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 498 | 199,4200,3,1,2,yes,no,no,no,no,1,no,furnished,2022-03-13 14:10:43.565999 499 | 200,4520,3,1,2,yes,no,yes,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 500 | 201,4095,3,1,2,no,yes,yes,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 501 | 203,5400,4,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 502 | 204,4770,3,1,1,no,yes,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 503 | 206,5800,2,1,1,yes,yes,yes,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 504 | 208,2970,3,1,3,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 505 | 211,12900,3,1,1,yes,no,no,no,no,2,no,furnished,2022-03-13 14:10:43.565999 506 | 214,4350,2,1,1,no,no,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 507 | 215,4160,3,1,3,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 508 | 217,6862,3,1,2,no,no,no,no,yes,2,yes,furnished,2022-03-13 14:10:43.565999 509 | 219,7000,3,1,2,no,no,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 510 | 220,8100,4,1,4,yes,no,yes,no,yes,2,no,semi-furnished,2022-03-13 14:10:43.565999 511 | 221,3420,4,2,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 512 | 225,6440,2,1,1,no,no,no,no,yes,3,no,semi-furnished,2022-03-13 14:10:43.565999 513 | 226,5170,3,1,4,yes,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 514 | 227,6000,2,1,1,no,no,yes,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 515 | 229,9667,4,2,2,yes,yes,yes,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 516 | 231,4320,3,1,1,yes,no,no,no,no,0,yes,semi-furnished,2022-03-13 14:10:43.565999 517 | 233,4160,3,1,1,no,yes,yes,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 518 | 239,4000,3,1,2,no,no,no,no,no,1,no,furnished,2022-03-13 14:10:43.565999 519 | 240,3840,3,1,2,no,no,no,no,no,1,yes,semi-furnished,2022-03-13 14:10:43.565999 520 | 241,3760,3,1,1,yes,no,no,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 521 | 243,2550,3,1,2,no,no,yes,no,no,0,no,furnished,2022-03-13 14:10:43.565999 522 | 244,5320,3,1,2,yes,yes,yes,no,no,0,yes,semi-furnished,2022-03-13 14:10:43.565999 523 | 245,5360,3,1,2,no,no,no,no,no,2,yes,unfurnished,2022-03-13 14:10:43.565999 524 | 248,4100,2,2,1,no,yes,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 525 | 249,4990,4,2,2,no,yes,yes,no,no,0,yes,furnished,2022-03-13 14:10:43.565999 526 | 250,3510,3,1,3,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 527 | 252,9860,3,1,1,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 528 | 253,3520,2,1,2,yes,no,no,no,no,0,yes,furnished,2022-03-13 14:10:43.565999 529 | 254,4510,4,1,2,no,no,no,no,yes,2,no,semi-furnished,2022-03-13 14:10:43.565999 530 | 255,5885,2,1,1,yes,no,no,no,yes,1,no,unfurnished,2022-03-13 14:10:43.565999 531 | 258,4040,3,1,2,yes,no,no,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 532 | 259,6360,2,1,1,yes,no,yes,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 533 | 260,3162,3,1,2,no,no,no,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 534 | 261,3510,3,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 535 | 263,3968,3,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 536 | 264,4900,2,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 537 | 265,2880,3,1,2,no,no,no,no,no,0,yes,semi-furnished,2022-03-13 14:10:43.565999 538 | 266,4880,3,1,1,yes,no,no,no,no,2,yes,unfurnished,2022-03-13 14:10:43.565999 539 | 267,4920,3,1,2,no,no,no,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 540 | 268,4950,4,1,2,no,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 541 | 269,3900,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 542 | 270,4500,3,2,3,no,no,no,yes,no,1,no,furnished,2022-03-13 14:10:43.565999 543 | 271,1905,5,1,2,no,no,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 544 | 272,4075,3,1,1,no,yes,yes,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 545 | 274,6450,4,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 546 | 275,4032,2,1,1,yes,no,yes,no,no,0,no,furnished,2022-03-13 14:10:43.565999 547 | 276,4400,2,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 548 | 278,3400,3,1,2,yes,no,yes,no,no,2,yes,semi-furnished,2022-03-13 14:10:43.565999 549 | 280,6360,2,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 550 | 284,7770,2,1,1,no,no,no,no,no,1,no,furnished,2022-03-13 14:10:43.565999 551 | 285,6650,3,1,2,yes,yes,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 552 | 291,2953,3,1,2,yes,no,yes,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 553 | 292,2747,4,2,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 554 | 293,4410,2,1,1,yes,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 555 | 294,4000,4,2,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 556 | 296,4600,3,2,2,yes,no,no,no,yes,1,no,semi-furnished,2022-03-13 14:10:43.565999 557 | 297,3640,3,2,2,yes,no,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 558 | 302,2145,3,1,3,yes,no,no,no,no,1,yes,unfurnished,2022-03-13 14:10:43.565999 559 | 303,4500,3,1,1,yes,no,yes,no,no,0,no,furnished,2022-03-13 14:10:43.565999 560 | 304,8250,3,1,1,yes,no,yes,no,no,3,no,semi-furnished,2022-03-13 14:10:43.565999 561 | 307,4080,3,1,2,no,no,no,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 562 | 308,4046,3,1,2,yes,no,yes,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 563 | 311,6060,2,1,1,no,no,yes,no,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 564 | 313,3680,3,2,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 565 | 315,5600,2,1,1,yes,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 566 | 317,4992,3,2,2,yes,no,no,no,no,2,no,unfurnished,2022-03-13 14:10:43.565999 567 | 322,3460,3,2,1,no,no,yes,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 568 | 323,5400,3,1,1,yes,no,no,no,no,3,no,semi-furnished,2022-03-13 14:10:43.565999 569 | 325,3460,4,1,2,no,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 570 | 326,4100,4,1,1,no,no,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 571 | 327,6480,3,1,2,yes,no,no,no,yes,1,no,semi-furnished,2022-03-13 14:10:43.565999 572 | 328,4500,3,2,2,yes,no,yes,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 573 | 331,7260,3,2,1,no,yes,yes,no,no,3,no,furnished,2022-03-13 14:10:43.565999 574 | 334,3290,2,1,1,no,no,no,yes,no,1,no,furnished,2022-03-13 14:10:43.565999 575 | 336,8080,3,1,1,no,no,no,no,yes,2,no,semi-furnished,2022-03-13 14:10:43.565999 576 | 338,3780,2,1,2,yes,yes,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 577 | 340,5300,5,2,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 578 | 341,3180,2,2,1,yes,no,yes,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 579 | 342,7152,3,1,2,yes,no,no,no,yes,0,no,furnished,2022-03-13 14:10:43.565999 580 | 343,4080,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 581 | 344,3850,2,1,1,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 582 | 345,2015,3,1,2,no,no,yes,no,no,0,yes,semi-furnished,2022-03-13 14:10:43.565999 583 | 347,3350,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 584 | 349,4820,3,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 585 | 351,3600,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 586 | 354,8400,2,1,1,no,no,no,no,no,1,no,furnished,2022-03-13 14:10:43.565999 587 | 355,8250,3,1,1,no,no,no,no,no,2,no,furnished,2022-03-13 14:10:43.565999 588 | 356,2520,5,2,1,no,no,yes,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 589 | 358,3480,2,1,1,yes,no,no,no,no,0,yes,semi-furnished,2022-03-13 14:10:43.565999 590 | 360,4040,2,1,1,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 591 | 362,4050,2,1,1,yes,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 592 | 363,3584,2,1,1,yes,no,no,yes,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 593 | 366,3630,2,1,1,no,no,yes,no,no,0,no,furnished,2022-03-13 14:10:43.565999 594 | 367,3630,2,1,1,no,no,no,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 595 | 368,5640,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 596 | 369,3600,2,1,1,no,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 597 | 370,4280,2,1,1,yes,no,no,no,yes,2,no,semi-furnished,2022-03-13 14:10:43.565999 598 | 372,3180,3,1,2,no,no,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 599 | 373,3000,2,1,2,no,no,no,no,yes,0,no,furnished,2022-03-13 14:10:43.565999 600 | 375,5960,3,1,2,yes,yes,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 601 | 376,4130,3,2,2,no,no,no,no,no,2,no,semi-furnished,2022-03-13 14:10:43.565999 602 | 378,2275,3,1,3,yes,no,no,yes,yes,0,yes,semi-furnished,2022-03-13 14:10:43.565999 603 | 379,3520,3,1,1,yes,no,no,no,no,2,yes,unfurnished,2022-03-13 14:10:43.565999 604 | 380,4500,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 605 | 382,3150,3,1,2,no,no,yes,no,no,0,no,furnished,2022-03-13 14:10:43.565999 606 | 383,4500,4,2,2,yes,no,yes,no,no,2,no,furnished,2022-03-13 14:10:43.565999 607 | 384,4500,2,1,1,yes,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 608 | 385,3640,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 609 | 386,3850,3,1,1,no,no,no,no,no,2,no,unfurnished,2022-03-13 14:10:43.565999 610 | 387,4240,3,1,2,no,no,no,no,yes,0,no,semi-furnished,2022-03-13 14:10:43.565999 611 | 388,3650,3,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 612 | 389,4600,4,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 613 | 390,2135,3,2,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 614 | 392,3990,3,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 615 | 393,7424,3,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 616 | 394,3480,3,1,1,no,no,no,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 617 | 395,3600,6,1,2,no,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 618 | 397,5900,2,1,1,yes,no,no,no,no,1,no,furnished,2022-03-13 14:10:43.565999 619 | 398,3120,3,1,2,no,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 620 | 400,3512,2,1,1,no,no,no,no,no,1,yes,unfurnished,2022-03-13 14:10:43.565999 621 | 401,9500,3,1,2,yes,no,no,no,no,3,yes,unfurnished,2022-03-13 14:10:43.565999 622 | 402,5880,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 623 | 405,3060,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 624 | 406,5320,2,1,1,no,no,no,no,no,1,yes,unfurnished,2022-03-13 14:10:43.565999 625 | 407,2145,3,1,3,yes,no,no,no,no,0,yes,furnished,2022-03-13 14:10:43.565999 626 | 408,4000,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 627 | 409,3185,2,1,1,yes,no,no,no,no,2,no,unfurnished,2022-03-13 14:10:43.565999 628 | 410,3850,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 629 | 412,2610,3,1,2,yes,no,yes,no,no,0,yes,unfurnished,2022-03-13 14:10:43.565999 630 | 415,4785,3,1,2,no,yes,yes,no,yes,1,no,furnished,2022-03-13 14:10:43.565999 631 | 417,3640,2,1,1,no,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 632 | 419,4960,4,1,3,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 633 | 420,4120,2,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 634 | 421,4750,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 635 | 424,3100,3,1,2,no,no,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 636 | 425,3185,2,1,1,no,no,yes,no,no,2,no,furnished,2022-03-13 14:10:43.565999 637 | 426,2700,3,1,1,no,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 638 | 429,4775,4,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 639 | 430,2500,2,1,1,no,no,no,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 640 | 431,3180,4,1,2,yes,no,yes,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 641 | 434,3792,4,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 642 | 435,4040,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 643 | 437,5880,3,1,1,yes,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 644 | 438,4500,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 645 | 440,3640,4,1,2,yes,no,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 646 | 441,4370,3,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 647 | 442,2684,2,1,1,yes,no,no,no,yes,1,no,unfurnished,2022-03-13 14:10:43.565999 648 | 444,3120,3,1,2,no,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 649 | 446,3986,2,2,1,no,yes,yes,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 650 | 447,3500,2,1,1,no,no,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 651 | 450,3450,3,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 652 | 453,3069,2,1,1,yes,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 653 | 455,5495,3,1,1,no,no,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 654 | 456,2398,3,1,1,no,no,no,no,no,0,yes,semi-furnished,2022-03-13 14:10:43.565999 655 | 458,3850,3,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 656 | 460,8100,2,1,1,no,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 657 | 461,4960,2,1,1,yes,no,yes,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 658 | 462,2160,3,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 659 | 463,3090,2,1,1,yes,yes,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 660 | 464,4500,2,1,2,no,no,no,yes,no,1,no,semi-furnished,2022-03-13 14:10:43.565999 661 | 465,3800,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 662 | 468,2835,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 663 | 470,5076,3,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 664 | 471,3750,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 665 | 473,8050,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 666 | 475,3000,2,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 667 | 476,5850,3,1,2,yes,no,yes,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 668 | 478,3600,3,1,2,no,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 669 | 481,2700,2,1,1,yes,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 670 | 483,6615,3,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 671 | 484,3040,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 672 | 485,3630,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 673 | 487,5400,4,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 674 | 488,5200,4,1,3,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 675 | 490,4350,3,1,2,no,no,no,yes,no,1,no,unfurnished,2022-03-13 14:10:43.565999 676 | 492,2650,3,1,2,yes,no,yes,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 677 | 493,3960,3,1,1,no,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 678 | 494,6800,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 679 | 495,4000,3,1,2,no,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 680 | 497,3934,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 681 | 498,2000,2,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 682 | 499,3630,3,3,2,no,yes,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 683 | 501,2430,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 684 | 503,4000,3,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 685 | 504,3185,2,1,1,yes,no,no,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 686 | 505,4000,3,1,2,yes,no,no,no,yes,0,no,unfurnished,2022-03-13 14:10:43.565999 687 | 506,2910,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 688 | 507,3600,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 689 | 510,2880,3,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 690 | 511,3180,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 691 | 512,3000,2,1,2,no,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 692 | 513,4400,3,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 693 | 514,3000,3,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 694 | 517,3000,2,1,1,no,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 695 | 518,3500,2,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 696 | 519,4840,2,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 697 | 523,2787,4,2,2,no,no,no,no,no,0,no,furnished,2022-03-13 14:10:43.565999 698 | 524,3264,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 699 | 526,3180,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 700 | 527,1836,2,1,1,yes,no,yes,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 701 | 529,3970,3,1,2,no,no,yes,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 702 | 532,3000,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 703 | 534,3000,4,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 704 | 535,3360,2,1,1,no,no,no,no,no,1,no,unfurnished,2022-03-13 14:10:43.565999 705 | 536,3420,5,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 706 | 537,1700,3,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 707 | 540,3000,2,1,1,yes,no,yes,no,no,2,no,unfurnished,2022-03-13 14:10:43.565999 708 | 541,2400,3,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-13 14:10:43.565999 709 | 542,3620,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 710 | 544,3850,3,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-13 14:10:43.565999 711 | 4,7420,4,1,2,yes,no,yes,no,yes,2,no,furnished,2022-03-16 14:10:43.570701 712 | 5,7500,3,3,1,yes,yes,yes,no,yes,2,yes,semi-furnished,2022-03-16 14:10:43.570701 713 | 6,8580,4,3,4,yes,yes,no,no,yes,2,yes,semi-furnished,2022-03-16 14:10:43.570701 714 | 10,13200,3,1,2,yes,yes,yes,no,yes,2,yes,furnished,2022-03-16 14:10:43.570701 715 | 15,6000,4,1,2,yes,yes,yes,no,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 716 | 19,6420,3,2,2,yes,no,no,no,yes,1,yes,semi-furnished,2022-03-16 14:10:43.570701 717 | 20,4320,3,1,2,yes,yes,yes,yes,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 718 | 21,7155,3,2,1,yes,yes,yes,no,yes,2,no,unfurnished,2022-03-16 14:10:43.570701 719 | 22,8050,3,1,1,yes,yes,yes,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 720 | 23,4560,3,2,2,yes,yes,yes,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 721 | 27,8875,3,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 722 | 28,7950,5,2,2,yes,yes,yes,yes,no,2,no,unfurnished,2022-03-16 14:10:43.570701 723 | 29,5500,4,2,2,yes,yes,yes,no,yes,1,yes,semi-furnished,2022-03-16 14:10:43.570701 724 | 30,7475,3,2,4,yes,no,no,no,yes,2,no,unfurnished,2022-03-16 14:10:43.570701 725 | 31,7000,3,1,4,yes,no,no,no,yes,2,no,semi-furnished,2022-03-16 14:10:43.570701 726 | 33,5960,3,3,2,yes,yes,yes,no,no,1,no,unfurnished,2022-03-16 14:10:43.570701 727 | 34,6840,5,1,2,yes,no,yes,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 728 | 35,7000,3,2,4,yes,no,no,no,yes,2,no,furnished,2022-03-16 14:10:43.570701 729 | 39,6000,4,2,4,yes,yes,no,no,yes,1,no,semi-furnished,2022-03-16 14:10:43.570701 730 | 40,6550,3,1,2,yes,yes,yes,no,yes,0,yes,furnished,2022-03-16 14:10:43.570701 731 | 41,6360,3,2,4,yes,no,no,no,yes,0,yes,furnished,2022-03-16 14:10:43.570701 732 | 42,6480,3,2,4,yes,yes,no,no,yes,2,no,unfurnished,2022-03-16 14:10:43.570701 733 | 44,6000,4,2,4,yes,yes,no,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 734 | 46,6000,3,2,4,yes,yes,no,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 735 | 47,6600,3,1,4,yes,no,no,no,yes,3,yes,furnished,2022-03-16 14:10:43.570701 736 | 49,7440,3,2,1,yes,yes,yes,no,yes,0,yes,semi-furnished,2022-03-16 14:10:43.570701 737 | 53,5150,3,2,4,yes,no,no,no,yes,2,no,semi-furnished,2022-03-16 14:10:43.570701 738 | 55,6000,3,1,2,yes,yes,no,no,yes,1,no,unfurnished,2022-03-16 14:10:43.570701 739 | 59,6000,3,2,4,yes,no,no,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 740 | 61,8880,2,1,1,yes,no,no,no,yes,1,no,semi-furnished,2022-03-16 14:10:43.570701 741 | 62,6240,4,2,2,yes,no,no,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 742 | 64,11175,3,1,1,yes,yes,yes,no,yes,1,yes,furnished,2022-03-16 14:10:43.570701 743 | 66,13200,2,1,1,yes,yes,yes,yes,no,1,no,furnished,2022-03-16 14:10:43.570701 744 | 69,12090,4,2,2,yes,no,no,no,no,2,yes,furnished,2022-03-16 14:10:43.570701 745 | 71,6000,4,2,4,yes,no,no,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 746 | 73,6600,2,2,4,yes,yes,yes,no,no,0,yes,furnished,2022-03-16 14:10:43.570701 747 | 78,5700,3,1,1,yes,no,yes,no,yes,2,yes,furnished,2022-03-16 14:10:43.570701 748 | 79,6000,3,2,3,yes,no,no,no,yes,0,no,furnished,2022-03-16 14:10:43.570701 749 | 82,10500,3,2,1,yes,yes,yes,no,yes,1,yes,furnished,2022-03-16 14:10:43.570701 750 | 83,6000,3,2,4,yes,no,no,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 751 | 84,3760,3,1,2,yes,yes,no,yes,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 752 | 87,3960,3,1,1,yes,yes,yes,no,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 753 | 88,7410,3,1,1,yes,yes,yes,no,yes,2,yes,unfurnished,2022-03-16 14:10:43.570701 754 | 90,5000,3,1,2,yes,no,no,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 755 | 94,6000,4,2,4,yes,no,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 756 | 95,4100,3,2,3,yes,yes,no,no,yes,2,no,semi-furnished,2022-03-16 14:10:43.570701 757 | 96,9000,3,1,1,yes,yes,yes,no,no,1,yes,furnished,2022-03-16 14:10:43.570701 758 | 97,6400,3,1,1,yes,yes,yes,no,yes,1,yes,semi-furnished,2022-03-16 14:10:43.570701 759 | 98,6600,3,2,3,yes,yes,no,no,yes,0,yes,unfurnished,2022-03-16 14:10:43.570701 760 | 99,6000,4,1,3,yes,yes,yes,no,no,0,yes,unfurnished,2022-03-16 14:10:43.570701 761 | 102,5500,3,2,4,yes,no,no,no,yes,1,no,semi-furnished,2022-03-16 14:10:43.570701 762 | 103,6350,3,2,3,yes,yes,no,no,yes,0,no,furnished,2022-03-16 14:10:43.570701 763 | 105,4500,3,1,4,yes,no,no,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 764 | 106,5450,4,2,1,yes,no,yes,no,yes,0,yes,semi-furnished,2022-03-16 14:10:43.570701 765 | 107,6420,3,1,3,yes,no,yes,no,no,0,yes,unfurnished,2022-03-16 14:10:43.570701 766 | 112,4300,6,2,2,yes,yes,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 767 | 113,9620,3,1,1,yes,yes,yes,no,no,2,yes,furnished,2022-03-16 14:10:43.570701 768 | 114,6800,2,1,1,yes,no,yes,no,no,2,no,furnished,2022-03-16 14:10:43.570701 769 | 115,8000,3,1,1,yes,no,yes,no,yes,2,yes,semi-furnished,2022-03-16 14:10:43.570701 770 | 116,6900,3,2,1,yes,no,yes,no,no,0,yes,unfurnished,2022-03-16 14:10:43.570701 771 | 117,3700,4,1,2,yes,no,no,no,yes,0,no,furnished,2022-03-16 14:10:43.570701 772 | 122,6254,4,2,1,yes,no,yes,no,no,1,yes,semi-furnished,2022-03-16 14:10:43.570701 773 | 125,15600,3,1,1,yes,yes,no,no,yes,2,no,semi-furnished,2022-03-16 14:10:43.570701 774 | 126,7160,3,1,1,yes,yes,yes,no,no,2,yes,unfurnished,2022-03-16 14:10:43.570701 775 | 127,6500,3,2,3,yes,yes,no,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 776 | 131,5828,4,1,4,yes,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 777 | 133,4800,3,1,3,yes,no,no,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 778 | 134,7000,3,1,1,yes,yes,yes,no,no,2,yes,semi-furnished,2022-03-16 14:10:43.570701 779 | 137,4640,4,1,2,yes,yes,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 780 | 138,5000,3,1,3,yes,no,no,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 781 | 142,10500,4,2,2,yes,yes,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 782 | 143,4800,5,2,3,no,no,yes,yes,no,0,no,unfurnished,2022-03-16 14:10:43.570701 783 | 144,4700,4,1,2,yes,yes,yes,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 784 | 148,6360,3,1,3,yes,no,no,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 785 | 149,6600,4,2,1,yes,yes,yes,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 786 | 150,5136,3,1,2,yes,no,yes,no,yes,0,yes,unfurnished,2022-03-16 14:10:43.570701 787 | 151,4400,4,1,2,yes,yes,no,no,yes,2,yes,semi-furnished,2022-03-16 14:10:43.570701 788 | 152,5400,5,1,2,yes,yes,yes,no,yes,0,yes,furnished,2022-03-16 14:10:43.570701 789 | 154,3650,3,2,2,yes,no,no,no,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 790 | 157,2817,4,2,2,no,no,yes,no,no,1,no,furnished,2022-03-16 14:10:43.570701 791 | 159,3150,3,2,1,yes,yes,yes,no,yes,0,no,furnished,2022-03-16 14:10:43.570701 792 | 162,6600,4,2,2,yes,no,yes,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 793 | 163,6825,3,1,1,yes,no,yes,no,yes,0,yes,semi-furnished,2022-03-16 14:10:43.570701 794 | 166,7800,3,1,1,yes,yes,yes,no,yes,2,yes,unfurnished,2022-03-16 14:10:43.570701 795 | 170,5500,3,2,1,yes,yes,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 796 | 171,10269,3,1,1,yes,no,no,no,no,1,yes,semi-furnished,2022-03-16 14:10:43.570701 797 | 172,8400,3,1,2,yes,no,yes,no,yes,2,yes,unfurnished,2022-03-16 14:10:43.570701 798 | 173,5300,4,2,1,yes,no,no,no,yes,0,yes,unfurnished,2022-03-16 14:10:43.570701 799 | 177,6050,3,1,1,yes,no,yes,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 800 | 182,3410,3,1,2,no,yes,no,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 801 | 183,7980,3,1,1,yes,no,no,no,no,1,yes,semi-furnished,2022-03-16 14:10:43.570701 802 | 185,3000,3,1,2,yes,no,yes,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 803 | 193,4800,2,1,1,yes,yes,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 804 | 198,5948,3,1,2,yes,yes,no,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 805 | 199,4200,3,1,2,yes,no,no,no,no,1,no,furnished,2022-03-16 14:10:43.570701 806 | 200,4520,3,1,2,yes,yes,yes,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 807 | 202,4120,2,1,1,yes,yes,yes,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 808 | 203,5400,4,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 809 | 205,6300,3,1,1,yes,no,no,no,yes,2,no,semi-furnished,2022-03-16 14:10:43.570701 810 | 206,5800,2,1,1,yes,no,yes,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 811 | 207,3000,3,1,2,yes,yes,yes,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 812 | 208,2970,3,1,3,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 813 | 209,6720,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 814 | 210,4646,3,1,2,yes,yes,yes,no,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 815 | 219,7000,3,1,2,yes,yes,yes,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 816 | 222,9166,2,1,1,yes,no,yes,no,yes,2,no,semi-furnished,2022-03-16 14:10:43.570701 817 | 227,6000,2,1,1,yes,yes,yes,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 818 | 228,3630,3,1,2,yes,yes,no,no,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 819 | 230,5400,2,1,2,yes,yes,no,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 820 | 233,4160,3,1,1,yes,yes,yes,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 821 | 234,3880,3,2,2,yes,no,yes,no,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 822 | 236,2870,2,1,2,yes,yes,yes,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 823 | 237,5010,3,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 824 | 241,3760,3,1,1,yes,no,no,no,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 825 | 242,3640,3,1,2,yes,yes,no,no,yes,0,no,furnished,2022-03-16 14:10:43.570701 826 | 243,2550,3,1,2,yes,no,yes,no,no,0,no,furnished,2022-03-16 14:10:43.570701 827 | 245,5360,3,1,2,yes,yes,no,no,no,2,yes,unfurnished,2022-03-16 14:10:43.570701 828 | 246,3520,3,1,1,yes,no,no,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 829 | 249,4990,4,2,2,yes,no,yes,no,no,0,yes,furnished,2022-03-16 14:10:43.570701 830 | 250,3510,3,1,3,yes,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 831 | 251,3450,3,1,2,yes,no,yes,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 832 | 253,3520,2,1,2,yes,no,no,no,no,0,yes,furnished,2022-03-16 14:10:43.570701 833 | 254,4510,4,1,2,yes,no,no,no,yes,2,no,semi-furnished,2022-03-16 14:10:43.570701 834 | 256,4000,3,1,2,yes,yes,no,no,no,2,no,furnished,2022-03-16 14:10:43.570701 835 | 257,8250,3,1,1,yes,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 836 | 260,3162,3,1,2,yes,no,no,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 837 | 261,3510,3,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 838 | 263,3968,3,1,2,no,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 839 | 265,2880,3,1,2,yes,no,no,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 840 | 266,4880,3,1,1,yes,no,no,no,no,2,yes,unfurnished,2022-03-16 14:10:43.570701 841 | 267,4920,3,1,2,yes,yes,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 842 | 268,4950,4,1,2,yes,yes,no,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 843 | 269,3900,3,1,2,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 844 | 270,4500,3,2,3,yes,no,no,yes,no,1,no,furnished,2022-03-16 14:10:43.570701 845 | 273,3500,4,1,2,yes,no,no,no,no,2,no,furnished,2022-03-16 14:10:43.570701 846 | 275,4032,2,1,1,yes,yes,yes,no,no,0,no,furnished,2022-03-16 14:10:43.570701 847 | 279,6360,2,1,1,yes,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 848 | 280,6360,2,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 849 | 281,4500,2,1,1,yes,no,no,no,yes,2,no,furnished,2022-03-16 14:10:43.570701 850 | 282,2175,3,1,2,no,no,yes,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 851 | 286,2787,3,1,1,yes,yes,yes,no,no,0,yes,furnished,2022-03-16 14:10:43.570701 852 | 287,5500,3,1,2,yes,yes,no,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 853 | 288,5040,3,1,2,yes,yes,yes,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 854 | 290,2610,4,3,2,no,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 855 | 292,2747,4,2,2,no,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 856 | 294,4000,4,2,2,no,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 857 | 295,2325,3,1,2,no,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 858 | 296,4600,3,2,2,yes,yes,no,no,yes,1,no,semi-furnished,2022-03-16 14:10:43.570701 859 | 299,7000,3,1,1,yes,yes,no,no,no,3,no,furnished,2022-03-16 14:10:43.570701 860 | 300,4079,3,1,3,yes,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 861 | 303,4500,3,1,1,yes,no,yes,no,no,0,no,furnished,2022-03-16 14:10:43.570701 862 | 304,8250,3,1,1,yes,yes,yes,no,no,3,no,semi-furnished,2022-03-16 14:10:43.570701 863 | 307,4080,3,1,2,yes,yes,no,no,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 864 | 309,4632,4,1,2,yes,no,no,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 865 | 318,4340,3,1,1,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 866 | 321,3630,3,2,2,yes,yes,no,yes,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 867 | 322,3460,3,2,1,yes,yes,yes,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 868 | 323,5400,3,1,1,yes,yes,no,no,no,3,no,semi-furnished,2022-03-16 14:10:43.570701 869 | 324,4500,3,1,2,no,no,yes,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 870 | 325,3460,4,1,2,yes,no,no,no,yes,0,no,semi-furnished,2022-03-16 14:10:43.570701 871 | 327,6480,3,1,2,no,yes,no,no,yes,1,no,semi-furnished,2022-03-16 14:10:43.570701 872 | 329,3960,3,1,2,yes,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 873 | 330,4050,2,1,2,yes,yes,yes,no,no,0,yes,unfurnished,2022-03-16 14:10:43.570701 874 | 331,7260,3,2,1,yes,yes,yes,no,no,3,no,furnished,2022-03-16 14:10:43.570701 875 | 332,5500,4,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 876 | 333,3000,3,1,2,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 877 | 334,3290,2,1,1,yes,yes,no,yes,no,1,no,furnished,2022-03-16 14:10:43.570701 878 | 337,2145,4,2,1,yes,no,yes,no,no,0,yes,unfurnished,2022-03-16 14:10:43.570701 879 | 338,3780,2,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 880 | 339,3180,4,2,2,yes,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 881 | 340,5300,5,2,2,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 882 | 343,4080,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 883 | 344,3850,2,1,1,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 884 | 346,2176,2,1,2,yes,no,no,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 885 | 347,3350,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 886 | 349,4820,3,1,2,yes,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 887 | 350,3420,2,1,2,yes,yes,no,yes,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 888 | 351,3600,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 889 | 352,5830,2,1,1,yes,no,no,no,no,2,no,unfurnished,2022-03-16 14:10:43.570701 890 | 357,6930,4,1,2,no,no,no,no,no,1,no,furnished,2022-03-16 14:10:43.570701 891 | 358,3480,2,1,1,yes,yes,no,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 892 | 363,3584,2,1,1,yes,yes,no,yes,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 893 | 366,3630,2,1,1,yes,yes,yes,no,no,0,no,furnished,2022-03-16 14:10:43.570701 894 | 371,3570,3,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 895 | 373,3000,2,1,2,yes,yes,no,no,yes,0,no,furnished,2022-03-16 14:10:43.570701 896 | 375,5960,3,1,2,yes,yes,yes,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 897 | 379,3520,3,1,1,yes,no,no,no,no,2,yes,unfurnished,2022-03-16 14:10:43.570701 898 | 381,4000,2,1,1,yes,no,no,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 899 | 383,4500,4,2,2,yes,no,yes,no,no,2,no,furnished,2022-03-16 14:10:43.570701 900 | 384,4500,2,1,1,no,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 901 | 388,3650,3,1,2,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 902 | 390,2135,3,2,2,no,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 903 | 391,3036,3,1,2,yes,no,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 904 | 392,3990,3,1,2,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 905 | 395,3600,6,1,2,yes,yes,no,no,no,1,no,unfurnished,2022-03-16 14:10:43.570701 906 | 396,3640,2,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 907 | 397,5900,2,1,1,yes,no,no,no,no,1,no,furnished,2022-03-16 14:10:43.570701 908 | 398,3120,3,1,2,yes,yes,no,no,no,1,no,unfurnished,2022-03-16 14:10:43.570701 909 | 399,7350,2,1,1,yes,no,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 910 | 401,9500,3,1,2,yes,yes,no,no,no,3,yes,unfurnished,2022-03-16 14:10:43.570701 911 | 405,3060,3,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 912 | 406,5320,2,1,1,yes,yes,no,no,no,1,yes,unfurnished,2022-03-16 14:10:43.570701 913 | 407,2145,3,1,3,yes,no,no,no,no,0,yes,furnished,2022-03-16 14:10:43.570701 914 | 409,3185,2,1,1,yes,yes,no,no,no,2,no,unfurnished,2022-03-16 14:10:43.570701 915 | 410,3850,3,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 916 | 411,2145,3,1,3,yes,no,no,no,no,0,yes,furnished,2022-03-16 14:10:43.570701 917 | 412,2610,3,1,2,yes,no,yes,no,no,0,yes,unfurnished,2022-03-16 14:10:43.570701 918 | 415,4785,3,1,2,yes,no,yes,no,yes,1,no,furnished,2022-03-16 14:10:43.570701 919 | 416,3450,3,1,1,yes,no,yes,no,no,2,no,unfurnished,2022-03-16 14:10:43.570701 920 | 417,3640,2,1,1,yes,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 921 | 420,4120,2,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 922 | 423,3750,3,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 923 | 424,3100,3,1,2,no,yes,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 924 | 427,2145,3,1,2,yes,yes,yes,no,no,0,yes,furnished,2022-03-16 14:10:43.570701 925 | 428,4040,2,1,1,yes,no,no,no,no,1,no,unfurnished,2022-03-16 14:10:43.570701 926 | 430,2500,2,1,1,no,yes,no,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 927 | 433,3480,4,1,2,no,yes,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 928 | 435,4040,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 929 | 444,3120,3,1,2,no,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 930 | 445,3450,1,1,1,yes,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 931 | 446,3986,2,2,1,no,yes,yes,no,no,1,no,unfurnished,2022-03-16 14:10:43.570701 932 | 447,3500,2,1,1,no,yes,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 933 | 449,1650,3,1,2,no,yes,yes,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 934 | 451,6750,2,1,1,yes,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 935 | 452,9000,3,1,2,yes,yes,no,no,no,2,no,semi-furnished,2022-03-16 14:10:43.570701 936 | 455,5495,3,1,1,yes,yes,yes,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 937 | 456,2398,3,1,1,yes,yes,no,no,no,0,yes,semi-furnished,2022-03-16 14:10:43.570701 938 | 457,3000,3,1,1,no,yes,no,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 939 | 458,3850,3,1,2,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 940 | 459,3500,2,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 941 | 460,8100,2,1,1,yes,yes,no,no,no,1,no,unfurnished,2022-03-16 14:10:43.570701 942 | 462,2160,3,1,2,no,no,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 943 | 465,3800,2,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 944 | 468,2835,2,1,1,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 945 | 469,4600,2,1,1,yes,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 946 | 472,3630,4,1,2,yes,yes,no,no,no,3,no,semi-furnished,2022-03-16 14:10:43.570701 947 | 474,4352,4,1,2,no,no,no,no,no,1,no,unfurnished,2022-03-16 14:10:43.570701 948 | 475,3000,2,1,2,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 949 | 479,3660,4,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 950 | 480,3480,3,1,2,no,yes,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 951 | 481,2700,2,1,1,no,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 952 | 483,6615,3,1,2,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 953 | 484,3040,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 954 | 485,3630,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 955 | 489,3300,3,1,2,no,no,no,no,no,1,no,semi-furnished,2022-03-16 14:10:43.570701 956 | 494,6800,2,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 957 | 503,4000,3,1,1,yes,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 958 | 504,3185,2,1,1,yes,no,no,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 959 | 505,4000,3,1,2,yes,no,no,no,yes,0,no,unfurnished,2022-03-16 14:10:43.570701 960 | 506,2910,2,1,1,no,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 961 | 510,2880,3,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 962 | 513,4400,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 963 | 514,3000,3,1,2,no,no,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 964 | 515,3210,3,1,2,yes,yes,yes,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 965 | 516,3240,2,1,1,no,yes,no,no,no,1,no,unfurnished,2022-03-16 14:10:43.570701 966 | 518,3500,2,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 967 | 519,4840,2,1,2,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 968 | 522,2475,3,1,2,yes,no,no,no,no,0,no,furnished,2022-03-16 14:10:43.570701 969 | 524,3264,2,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 970 | 526,3180,2,1,1,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 971 | 527,1836,2,1,1,no,yes,yes,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 972 | 528,3970,1,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 973 | 529,3970,3,1,2,yes,no,yes,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 974 | 530,1950,3,1,1,no,yes,no,yes,no,0,no,unfurnished,2022-03-16 14:10:43.570701 975 | 532,3000,2,1,1,no,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 976 | 533,2400,3,1,2,yes,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 977 | 534,3000,4,1,2,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 978 | 535,3360,2,1,1,yes,yes,no,no,no,1,no,unfurnished,2022-03-16 14:10:43.570701 979 | 536,3420,5,1,2,no,no,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 980 | 538,3649,2,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 981 | 540,3000,2,1,1,yes,yes,yes,no,no,2,no,unfurnished,2022-03-16 14:10:43.570701 982 | 541,2400,3,1,1,no,yes,no,no,no,0,no,semi-furnished,2022-03-16 14:10:43.570701 983 | 542,3620,2,1,1,yes,yes,no,no,no,0,no,unfurnished,2022-03-16 14:10:43.570701 984 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | kfp==1.6.3 -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quan-dang/kubeflow-tutorials/20624db3e035081085e05edc858d52183247dbb7/utils/__init__.py -------------------------------------------------------------------------------- /utils/auth.py: -------------------------------------------------------------------------------- 1 | from constants import USERNAME, PASSWORD, NAMESPACE, HOST 2 | import requests 3 | 4 | def get_session_cookie(): 5 | session = requests.Session() 6 | response = session.get(HOST) 7 | 8 | headers = { 9 | "Content-Type": "application/x-www-form-urlencoded", 10 | } 11 | 12 | data = {"login": USERNAME, "password": PASSWORD} 13 | session.post(response.url, headers=headers, data=data) 14 | session_cookie = session.cookies.get_dict()["authservice_session"] 15 | 16 | return session_cookie -------------------------------------------------------------------------------- /utils/helpers.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | def get_or_create_pipeline(client, 4 | pipeline_name: str, 5 | pipeline_description: str, 6 | version: str 7 | ): 8 | pipeline_package_path = f"pipeline_{version}.yaml" 9 | pipeline_id = client.get_pipeline_id(pipeline_name) 10 | 11 | # If no pipeline found by name, create a new pipeline 12 | # Else get the latest pipeline version 13 | if pipeline_id is None: 14 | logging.info(f"Creating a new pipeline: {pipeline_name}") 15 | pipeline = client.upload_pipeline( 16 | pipeline_package_path=pipeline_package_path, 17 | pipeline_name=pipeline_name, 18 | description=pipeline_description 19 | ) 20 | else: 21 | pipeline = client.get_pipeline(pipeline_id) 22 | 23 | # Always try to upload a pipeline version. 24 | pipeline_version = client.upload_pipeline_version( 25 | pipeline_package_path=pipeline_package_path, 26 | pipeline_version_name=f"{pipeline_name} {version}", 27 | pipeline_id=pipeline_id 28 | ) 29 | 30 | return pipeline_version 31 | 32 | 33 | def get_or_create_experiment(client, 34 | name: str 35 | ): 36 | try: 37 | experiment = client.get_experiment( 38 | experiment_name=name 39 | ) 40 | except Exception: 41 | logging.info(f"Creating new experiment: {name}") 42 | experiment = client.create_experiment(name) 43 | 44 | return experiment 45 | --------------------------------------------------------------------------------