diff --git a/Pipfile b/Pipfile
new file mode 100644
index 0000000..9a479cb
--- /dev/null
+++ b/Pipfile
@@ -0,0 +1,22 @@
+[[source]]
+name = "pypi"
+url = "https://pypi.org/simple"
+verify_ssl = true
+
+[dev-packages]
+
+[packages]
+flask = "*"
+flask-sqlalchemy = "*"
+flask-migrate = "*"
+requests = "*"
+python-dotenv = "*"
+pandas = "*"
+numpy = "*"
+sklearn = "*"
+gunicorn = "*"
+psycopg2-binary = "*"
+joblib = "*"
+
+[requires]
+python_version = "3.7"
diff --git a/Pipfile.lock b/Pipfile.lock
new file mode 100644
index 0000000..3461471
--- /dev/null
+++ b/Pipfile.lock
@@ -0,0 +1,363 @@
+{
+ "_meta": {
+ "hash": {
+ "sha256": "d3b1e3ec9ebaf15cb564b0ad8f0e8b0a439f4a82662c975f498b630c9baab4f7"
+ },
+ "pipfile-spec": 6,
+ "requires": {
+ "python_version": "3.7"
+ },
+ "sources": [
+ {
+ "name": "pypi",
+ "url": "https://pypi.org/simple",
+ "verify_ssl": true
+ }
+ ]
+ },
+ "default": {
+ "alembic": {
+ "hashes": [
+ "sha256:791a5686953c4b366d3228c5377196db2f534475bb38d26f70eb69668efd9028"
+ ],
+ "version": "==1.4.1"
+ },
+ "certifi": {
+ "hashes": [
+ "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3",
+ "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"
+ ],
+ "version": "==2019.11.28"
+ },
+ "chardet": {
+ "hashes": [
+ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
+ "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
+ ],
+ "version": "==3.0.4"
+ },
+ "click": {
+ "hashes": [
+ "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
+ "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
+ ],
+ "version": "==7.0"
+ },
+ "flask": {
+ "hashes": [
+ "sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52",
+ "sha256:45eb5a6fd193d6cf7e0cf5d8a5b31f83d5faae0293695626f539a823e93b13f6"
+ ],
+ "index": "pypi",
+ "version": "==1.1.1"
+ },
+ "flask-migrate": {
+ "hashes": [
+ "sha256:6fb038be63d4c60727d5dfa5f581a6189af5b4e2925bc378697b4f0a40cfb4e1",
+ "sha256:a96ff1875a49a40bd3e8ac04fce73fdb0870b9211e6168608cbafa4eb839d502"
+ ],
+ "index": "pypi",
+ "version": "==2.5.2"
+ },
+ "flask-sqlalchemy": {
+ "hashes": [
+ "sha256:0078d8663330dc05a74bc72b3b6ddc441b9a744e2f56fe60af1a5bfc81334327",
+ "sha256:6974785d913666587949f7c2946f7001e4fa2cb2d19f4e69ead02e4b8f50b33d"
+ ],
+ "index": "pypi",
+ "version": "==2.4.1"
+ },
+ "gunicorn": {
+ "hashes": [
+ "sha256:1904bb2b8a43658807108d59c3f3d56c2b6121a701161de0ddf9ad140073c626",
+ "sha256:cd4a810dd51bf497552cf3f863b575dabd73d6ad6a91075b65936b151cbf4f9c"
+ ],
+ "index": "pypi",
+ "version": "==20.0.4"
+ },
+ "idna": {
+ "hashes": [
+ "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb",
+ "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"
+ ],
+ "version": "==2.9"
+ },
+ "itsdangerous": {
+ "hashes": [
+ "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19",
+ "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"
+ ],
+ "version": "==1.1.0"
+ },
+ "jinja2": {
+ "hashes": [
+ "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250",
+ "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"
+ ],
+ "version": "==2.11.1"
+ },
+ "joblib": {
+ "hashes": [
+ "sha256:0630eea4f5664c463f23fbf5dcfc54a2bc6168902719fa8e19daf033022786c8",
+ "sha256:bdb4fd9b72915ffb49fde2229ce482dd7ae79d842ed8c2b4c932441495af1403"
+ ],
+ "index": "pypi",
+ "version": "==0.14.1"
+ },
+ "mako": {
+ "hashes": [
+ "sha256:3139c5d64aa5d175dbafb95027057128b5fbd05a40c53999f3905ceb53366d9d",
+ "sha256:8e8b53c71c7e59f3de716b6832c4e401d903af574f6962edbbbf6ecc2a5fe6c9"
+ ],
+ "version": "==1.1.2"
+ },
+ "markupsafe": {
+ "hashes": [
+ "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
+ "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
+ "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
+ "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
+ "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42",
+ "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
+ "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
+ "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
+ "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
+ "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
+ "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
+ "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b",
+ "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
+ "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15",
+ "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
+ "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
+ "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
+ "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
+ "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
+ "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
+ "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
+ "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
+ "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
+ "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
+ "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
+ "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
+ "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
+ "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
+ "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
+ "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
+ "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2",
+ "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7",
+ "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"
+ ],
+ "version": "==1.1.1"
+ },
+ "numpy": {
+ "hashes": [
+ "sha256:1786a08236f2c92ae0e70423c45e1e62788ed33028f94ca99c4df03f5be6b3c6",
+ "sha256:17aa7a81fe7599a10f2b7d95856dc5cf84a4eefa45bc96123cbbc3ebc568994e",
+ "sha256:20b26aaa5b3da029942cdcce719b363dbe58696ad182aff0e5dcb1687ec946dc",
+ "sha256:2d75908ab3ced4223ccba595b48e538afa5ecc37405923d1fea6906d7c3a50bc",
+ "sha256:39d2c685af15d3ce682c99ce5925cc66efc824652e10990d2462dfe9b8918c6a",
+ "sha256:56bc8ded6fcd9adea90f65377438f9fea8c05fcf7c5ba766bef258d0da1554aa",
+ "sha256:590355aeade1a2eaba17617c19edccb7db8d78760175256e3cf94590a1a964f3",
+ "sha256:70a840a26f4e61defa7bdf811d7498a284ced303dfbc35acb7be12a39b2aa121",
+ "sha256:77c3bfe65d8560487052ad55c6998a04b654c2fbc36d546aef2b2e511e760971",
+ "sha256:9537eecf179f566fd1c160a2e912ca0b8e02d773af0a7a1120ad4f7507cd0d26",
+ "sha256:9acdf933c1fd263c513a2df3dceecea6f3ff4419d80bf238510976bf9bcb26cd",
+ "sha256:ae0975f42ab1f28364dcda3dde3cf6c1ddab3e1d4b2909da0cb0191fa9ca0480",
+ "sha256:b3af02ecc999c8003e538e60c89a2b37646b39b688d4e44d7373e11c2debabec",
+ "sha256:b6ff59cee96b454516e47e7721098e6ceebef435e3e21ac2d6c3b8b02628eb77",
+ "sha256:b765ed3930b92812aa698a455847141869ef755a87e099fddd4ccf9d81fffb57",
+ "sha256:c98c5ffd7d41611407a1103ae11c8b634ad6a43606eca3e2a5a269e5d6e8eb07",
+ "sha256:cf7eb6b1025d3e169989416b1adcd676624c2dbed9e3bcb7137f51bfc8cc2572",
+ "sha256:d92350c22b150c1cae7ebb0ee8b5670cc84848f6359cf6b5d8f86617098a9b73",
+ "sha256:e422c3152921cece8b6a2fb6b0b4d73b6579bd20ae075e7d15143e711f3ca2ca",
+ "sha256:e840f552a509e3380b0f0ec977e8124d0dc34dc0e68289ca28f4d7c1d0d79474",
+ "sha256:f3d0a94ad151870978fb93538e95411c83899c9dc63e6fb65542f769568ecfa5"
+ ],
+ "index": "pypi",
+ "version": "==1.18.1"
+ },
+ "pandas": {
+ "hashes": [
+ "sha256:23e177d43e4bf68950b0f8788b6a2fef2f478f4ec94883acb627b9264522a98a",
+ "sha256:2530aea4fe46e8df7829c3f05e0a0f821c893885d53cb8ac9b89cc67c143448c",
+ "sha256:303827f0bb40ff610fbada5b12d50014811efcc37aaf6ef03202dc3054bfdda1",
+ "sha256:3b019e3ea9f5d0cfee0efabae2cfd3976874e90bcc3e97b29600e5a9b345ae3d",
+ "sha256:3c07765308f091d81b6735d4f2242bb43c332cc3461cae60543df6b10967fe27",
+ "sha256:5036d4009012a44aa3e50173e482b664c1fae36decd277c49e453463798eca4e",
+ "sha256:6f38969e2325056f9959efbe06c27aa2e94dd35382265ad0703681d993036052",
+ "sha256:74a470d349d52b9d00a2ba192ae1ee22155bb0a300fd1ccb2961006c3fa98ed3",
+ "sha256:7d77034e402165b947f43050a8a415aa3205abfed38d127ea66e57a2b7b5a9e0",
+ "sha256:7f9a509f6f11fa8b9313002ebdf6f690a7aa1dd91efd95d90185371a0d68220e",
+ "sha256:942b5d04762feb0e55b2ad97ce2b254a0ffdd344b56493b04a627266e24f2d82",
+ "sha256:a9fbe41663416bb70ed05f4e16c5f377519c0dc292ba9aa45f5356e37df03a38",
+ "sha256:d10e83866b48c0cdb83281f786564e2a2b51a7ae7b8a950c3442ad3c9e36b48c",
+ "sha256:e2140e1bbf9c46db9936ee70f4be6584d15ff8dc3dfff1da022d71227d53bad3"
+ ],
+ "index": "pypi",
+ "version": "==1.0.1"
+ },
+ "psycopg2-binary": {
+ "hashes": [
+ "sha256:040234f8a4a8dfd692662a8308d78f63f31a97e1c42d2480e5e6810c48966a29",
+ "sha256:086f7e89ec85a6704db51f68f0dcae432eff9300809723a6e8782c41c2f48e03",
+ "sha256:18ca813fdb17bc1db73fe61b196b05dd1ca2165b884dd5ec5568877cabf9b039",
+ "sha256:19dc39616850342a2a6db70559af55b22955f86667b5f652f40c0e99253d9881",
+ "sha256:2166e770cb98f02ed5ee2b0b569d40db26788e0bf2ec3ae1a0d864ea6f1d8309",
+ "sha256:3a2522b1d9178575acee4adf8fd9f979f9c0449b00b4164bb63c3475ea6528ed",
+ "sha256:3aa773580f85a28ffdf6f862e59cb5a3cc7ef6885121f2de3fca8d6ada4dbf3b",
+ "sha256:3b5deaa3ee7180585a296af33e14c9b18c218d148e735c7accf78130765a47e3",
+ "sha256:407af6d7e46593415f216c7f56ba087a9a42bd6dc2ecb86028760aa45b802bd7",
+ "sha256:4c3c09fb674401f630626310bcaf6cd6285daf0d5e4c26d6e55ca26a2734e39b",
+ "sha256:4c6717962247445b4f9e21c962ea61d2e884fc17df5ddf5e35863b016f8a1f03",
+ "sha256:50446fae5681fc99f87e505d4e77c9407e683ab60c555ec302f9ac9bffa61103",
+ "sha256:5057669b6a66aa9ca118a2a860159f0ee3acf837eda937bdd2a64f3431361a2d",
+ "sha256:5dd90c5438b4f935c9d01fcbad3620253da89d19c1f5fca9158646407ed7df35",
+ "sha256:659c815b5b8e2a55193ede2795c1e2349b8011497310bb936da7d4745652823b",
+ "sha256:69b13fdf12878b10dc6003acc8d0abf3ad93e79813fd5f3812497c1c9fb9be49",
+ "sha256:7a1cb80e35e1ccea3e11a48afe65d38744a0e0bde88795cc56a4d05b6e4f9d70",
+ "sha256:7e6e3c52e6732c219c07bd97fff6c088f8df4dae3b79752ee3a817e6f32e177e",
+ "sha256:7f42a8490c4fe854325504ce7a6e4796b207960dabb2cbafe3c3959cb00d1d7e",
+ "sha256:84156313f258eafff716b2961644a4483a9be44a5d43551d554844d15d4d224e",
+ "sha256:8578d6b8192e4c805e85f187bc530d0f52ba86c39172e61cd51f68fddd648103",
+ "sha256:890167d5091279a27e2505ff0e1fb273f8c48c41d35c5b92adbf4af80e6b2ed6",
+ "sha256:98e10634792ac0e9e7a92a76b4991b44c2325d3e7798270a808407355e7bb0a1",
+ "sha256:9aadff9032e967865f9778485571e93908d27dab21d0fdfdec0ca779bb6f8ad9",
+ "sha256:9f24f383a298a0c0f9b3113b982e21751a8ecde6615494a3f1470eb4a9d70e9e",
+ "sha256:a73021b44813b5c84eda4a3af5826dd72356a900bac9bd9dd1f0f81ee1c22c2f",
+ "sha256:afd96845e12638d2c44d213d4810a08f4dc4a563f9a98204b7428e567014b1cd",
+ "sha256:b73ddf033d8cd4cc9dfed6324b1ad2a89ba52c410ef6877998422fcb9c23e3a8",
+ "sha256:b8f490f5fad1767a1331df1259763b3bad7d7af12a75b950c2843ba319b2415f",
+ "sha256:dbc5cd56fff1a6152ca59445178652756f4e509f672e49ccdf3d79c1043113a4",
+ "sha256:eac8a3499754790187bb00574ab980df13e754777d346f85e0ff6df929bcd964",
+ "sha256:eaed1c65f461a959284649e37b5051224f4db6ebdc84e40b5e65f2986f101a08"
+ ],
+ "index": "pypi",
+ "version": "==2.8.4"
+ },
+ "python-dateutil": {
+ "hashes": [
+ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
+ "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
+ ],
+ "version": "==2.8.1"
+ },
+ "python-dotenv": {
+ "hashes": [
+ "sha256:81822227f771e0cab235a2939f0f265954ac4763cafd806d845801c863bf372f",
+ "sha256:92b3123fb2d58a284f76cc92bfe4ee6c502c32ded73e8b051c4f6afc8b6751ed"
+ ],
+ "index": "pypi",
+ "version": "==0.12.0"
+ },
+ "python-editor": {
+ "hashes": [
+ "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d",
+ "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b",
+ "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8"
+ ],
+ "version": "==1.0.4"
+ },
+ "pytz": {
+ "hashes": [
+ "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d",
+ "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"
+ ],
+ "version": "==2019.3"
+ },
+ "requests": {
+ "hashes": [
+ "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee",
+ "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"
+ ],
+ "index": "pypi",
+ "version": "==2.23.0"
+ },
+ "scikit-learn": {
+ "hashes": [
+ "sha256:1bf45e62799b6938357cfce19f72e3751448c4b27010e4f98553da669b5bbd86",
+ "sha256:267ad874b54c67b479c3b45eb132ef4a56ab2b27963410624a413a4e2a3fc388",
+ "sha256:2d1bb83d6c51a81193d8a6b5f31930e2959c0e1019d49bdd03f54163735dae4b",
+ "sha256:349ba3d837fb3f7cb2b91486c43713e4b7de17f9e852f165049b1b7ac2f81478",
+ "sha256:3f4d8eea3531d3eaf613fa33f711113dfff6021d57a49c9d319af4afb46f72f0",
+ "sha256:4990f0e166292d2a0f0ee528233723bcfd238bfdb3ec2512a9e27f5695362f35",
+ "sha256:57538d138ba54407d21e27c306735cbd42a6aae0df6a5a30c7a6edde46b0017d",
+ "sha256:5b722e8bb708f254af028dc2da86d23df5371cba57e24f889b672e7b15423caa",
+ "sha256:6043e2c4ccfc68328c331b0fc19691be8fb02bd76d694704843a23ad651de902",
+ "sha256:672ea38eb59b739a8907ec063642b486bcb5a2073dda5b72b7983eeaf1fd67c1",
+ "sha256:73207dca6e70f8f611f28add185cf3a793c8232a1722f21d82259560dc35cd50",
+ "sha256:83fc104a799cb340054e485c25dfeee712b36f5638fb374eba45a9db490f16ff",
+ "sha256:8416150ab505f1813da02cdbdd9f367b05bfc75cf251235015bb09f8674358a0",
+ "sha256:84e759a766c315deb5c85139ff879edbb0aabcddb9358acf499564ed1c21e337",
+ "sha256:8ed66ab27b3d68e57bb1f315fc35e595a5c4a1f108c3420943de4d18fc40e615",
+ "sha256:a7f8aa93f61aaad080b29a9018db93ded0586692c03ddf2122e47dd1d3a14e1b",
+ "sha256:ddd3bf82977908ff69303115dd5697606e669d8a7eafd7d83bb153ef9e11bd5e",
+ "sha256:de9933297f8659ee3bb330eafdd80d74cd73d5dab39a9026b65a4156bc479063",
+ "sha256:ea91a70a992ada395efc3d510cf011dc2d99dc9037bb38cd1cb00e14745005f5",
+ "sha256:eb4c9f0019abb374a2e55150f070a333c8f990b850d1eb4dfc2765fc317ffc7c",
+ "sha256:ffce8abfdcd459e72e5b91727b247b401b22253cbd18d251f842a60e26262d6f"
+ ],
+ "version": "==0.22.2.post1"
+ },
+ "scipy": {
+ "hashes": [
+ "sha256:00af72998a46c25bdb5824d2b729e7dabec0c765f9deb0b504f928591f5ff9d4",
+ "sha256:0902a620a381f101e184a958459b36d3ee50f5effd186db76e131cbefcbb96f7",
+ "sha256:1e3190466d669d658233e8a583b854f6386dd62d655539b77b3fa25bfb2abb70",
+ "sha256:2cce3f9847a1a51019e8c5b47620da93950e58ebc611f13e0d11f4980ca5fecb",
+ "sha256:3092857f36b690a321a662fe5496cb816a7f4eecd875e1d36793d92d3f884073",
+ "sha256:386086e2972ed2db17cebf88610aab7d7f6e2c0ca30042dc9a89cf18dcc363fa",
+ "sha256:71eb180f22c49066f25d6df16f8709f215723317cc951d99e54dc88020ea57be",
+ "sha256:770254a280d741dd3436919d47e35712fb081a6ff8bafc0f319382b954b77802",
+ "sha256:787cc50cab3020a865640aba3485e9fbd161d4d3b0d03a967df1a2881320512d",
+ "sha256:8a07760d5c7f3a92e440ad3aedcc98891e915ce857664282ae3c0220f3301eb6",
+ "sha256:8d3bc3993b8e4be7eade6dcc6fd59a412d96d3a33fa42b0fa45dc9e24495ede9",
+ "sha256:9508a7c628a165c2c835f2497837bf6ac80eb25291055f56c129df3c943cbaf8",
+ "sha256:a144811318853a23d32a07bc7fd5561ff0cac5da643d96ed94a4ffe967d89672",
+ "sha256:a1aae70d52d0b074d8121333bc807a485f9f1e6a69742010b33780df2e60cfe0",
+ "sha256:a2d6df9eb074af7f08866598e4ef068a2b310d98f87dc23bd1b90ec7bdcec802",
+ "sha256:bb517872058a1f087c4528e7429b4a44533a902644987e7b2fe35ecc223bc408",
+ "sha256:c5cac0c0387272ee0e789e94a570ac51deb01c796b37fb2aad1fb13f85e2f97d",
+ "sha256:cc971a82ea1170e677443108703a2ec9ff0f70752258d0e9f5433d00dda01f59",
+ "sha256:dba8306f6da99e37ea08c08fef6e274b5bf8567bb094d1dbe86a20e532aca088",
+ "sha256:dc60bb302f48acf6da8ca4444cfa17d52c63c5415302a9ee77b3b21618090521",
+ "sha256:dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59"
+ ],
+ "version": "==1.4.1"
+ },
+ "six": {
+ "hashes": [
+ "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
+ "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
+ ],
+ "version": "==1.14.0"
+ },
+ "sklearn": {
+ "hashes": [
+ "sha256:e23001573aa194b834122d2b9562459bf5ae494a2d59ca6b8aa22c85a44c0e31"
+ ],
+ "index": "pypi",
+ "version": "==0.0"
+ },
+ "sqlalchemy": {
+ "hashes": [
+ "sha256:64a7b71846db6423807e96820993fa12a03b89127d278290ca25c0b11ed7b4fb"
+ ],
+ "version": "==1.3.13"
+ },
+ "urllib3": {
+ "hashes": [
+ "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc",
+ "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"
+ ],
+ "version": "==1.25.8"
+ },
+ "werkzeug": {
+ "hashes": [
+ "sha256:169ba8a33788476292d04186ab33b01d6add475033dfc07215e6d219cc077096",
+ "sha256:6dc65cf9091cf750012f56f2cad759fa9e879f511b5ff8685e456b4e3bf90d16"
+ ],
+ "version": "==1.0.0"
+ }
+ },
+ "develop": {}
+}
diff --git a/Procfile b/Procfile
new file mode 100644
index 0000000..8001d1a
--- /dev/null
+++ b/Procfile
@@ -0,0 +1 @@
+web: gunicorn app:app
\ No newline at end of file
diff --git a/README.md b/README.md
index 62da6f3..08dc1d8 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,8 @@
-# Data-Science
\ No newline at end of file
+# Data-Science
+
+For this project, our goal is to accurately predict the price of a potential listing for AirBnB in the city of Berlin, Germany.
+
+## Notebook
+
+The notebook for this repo 'airbnb_notebook.ipynb' is used to take 'Berlin.csv' which
+is taken and cleaned up from the original at https://www.kaggle.com/brittabettendorf/berlin-airbnb-data and turn that into a predictive model for prices of airbnb listings in the Berlin area. This model is persisted to `berlin_model.gz` as a compressed joblib dump (instead of pickle). Next `app.py` reads this model and uses it to make predictions in the web interface, for now arranged as html under `templates/`. `features.json`contains a skeleton JSON of feature variables with default values set to '0', and is used to transform html form input into a format used to do the model prediction. `requirements.txt`, `runtime.txt`, and `Procfile` are all necessary to run on Heroku.
\ No newline at end of file
diff --git a/airbnb_notebook.ipynb b/airbnb_notebook.ipynb
new file mode 100644
index 0000000..e2fd803
--- /dev/null
+++ b/airbnb_notebook.ipynb
@@ -0,0 +1,7128 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "op9sunrTOD-Y"
+ },
+ "source": [
+ "# Importing and Installing Libraries"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 391
+ },
+ "colab_type": "code",
+ "id": "N_WDgKlZAFf3",
+ "outputId": "54932b23-e8f5-4dc7-fefc-011c826a2e6f"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: eli5 in c:\\users\\james b\\anaconda3\\lib\\site-packages (0.10.1)\n",
+ "Requirement already satisfied: scipy in c:\\users\\james b\\anaconda3\\lib\\site-packages (from eli5) (1.4.1)\n",
+ "Requirement already satisfied: graphviz in c:\\users\\james b\\anaconda3\\lib\\site-packages (from eli5) (0.13.2)\n",
+ "Requirement already satisfied: numpy>=1.9.0 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from eli5) (1.16.5)\n",
+ "Requirement already satisfied: scikit-learn>=0.18 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from eli5) (0.21.3)\n",
+ "Requirement already satisfied: jinja2 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from eli5) (2.10.3)\n",
+ "Requirement already satisfied: tabulate>=0.7.7 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from eli5) (0.8.6)\n",
+ "Requirement already satisfied: attrs>16.0.0 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from eli5) (19.2.0)\n",
+ "Requirement already satisfied: six in c:\\users\\james b\\anaconda3\\lib\\site-packages (from eli5) (1.12.0)\n",
+ "Requirement already satisfied: joblib>=0.11 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from scikit-learn>=0.18->eli5) (0.13.2)\n",
+ "Requirement already satisfied: MarkupSafe>=0.23 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from jinja2->eli5) (1.1.1)\n",
+ "Requirement already satisfied: category_encoders in c:\\users\\james b\\anaconda3\\lib\\site-packages (2.1.0)\n",
+ "Requirement already satisfied: scikit-learn>=0.20.0 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from category_encoders) (0.21.3)\n",
+ "Requirement already satisfied: numpy>=1.11.3 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from category_encoders) (1.16.5)\n",
+ "Requirement already satisfied: statsmodels>=0.6.1 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from category_encoders) (0.10.1)\n",
+ "Requirement already satisfied: patsy>=0.4.1 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from category_encoders) (0.5.1)\n",
+ "Requirement already satisfied: pandas>=0.21.1 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from category_encoders) (0.25.3)\n",
+ "Requirement already satisfied: scipy>=0.19.0 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from category_encoders) (1.4.1)\n",
+ "Requirement already satisfied: joblib>=0.11 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from scikit-learn>=0.20.0->category_encoders) (0.13.2)\n",
+ "Requirement already satisfied: six in c:\\users\\james b\\anaconda3\\lib\\site-packages (from patsy>=0.4.1->category_encoders) (1.12.0)\n",
+ "Requirement already satisfied: pytz>=2017.2 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from pandas>=0.21.1->category_encoders) (2019.3)\n",
+ "Requirement already satisfied: python-dateutil>=2.6.1 in c:\\users\\james b\\anaconda3\\lib\\site-packages (from pandas>=0.21.1->category_encoders) (2.8.0)\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install eli5\n",
+ "!pip install category_encoders"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "CLoijWdh8qgN"
+ },
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "pd.set_option('display.max_columns', None)\n",
+ "\n",
+ "import matplotlib.pyplot as plt\n",
+ "plt.style.use('seaborn')\n",
+ "import seaborn as sns\n",
+ "\n",
+ "import functools\n",
+ "\n",
+ "from sklearn.ensemble import RandomForestRegressor\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.impute import SimpleImputer\n",
+ "from sklearn.pipeline import make_pipeline\n",
+ "from sklearn.metrics import r2_score\n",
+ "\n",
+ "import category_encoders as ce\n",
+ "\n",
+ "import eli5\n",
+ "from eli5.sklearn import PermutationImportance"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "V9Hfxg3XBzi5"
+ },
+ "source": [
+ "# Loading and Reviewing Data Shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 700
+ },
+ "colab_type": "code",
+ "id": "8bhC2g0TxyWt",
+ "outputId": "849df18b-b610-426b-acc0-ec6ebd69e298"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(22552, 96)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " id | \n",
+ " listing_url | \n",
+ " scrape_id | \n",
+ " last_scraped | \n",
+ " name | \n",
+ " summary | \n",
+ " space | \n",
+ " description | \n",
+ " experiences_offered | \n",
+ " neighborhood_overview | \n",
+ " notes | \n",
+ " transit | \n",
+ " access | \n",
+ " interaction | \n",
+ " house_rules | \n",
+ " thumbnail_url | \n",
+ " medium_url | \n",
+ " picture_url | \n",
+ " xl_picture_url | \n",
+ " host_id | \n",
+ " host_url | \n",
+ " host_name | \n",
+ " host_since | \n",
+ " host_location | \n",
+ " host_about | \n",
+ " host_response_time | \n",
+ " host_response_rate | \n",
+ " host_acceptance_rate | \n",
+ " host_is_superhost | \n",
+ " host_thumbnail_url | \n",
+ " host_picture_url | \n",
+ " host_neighbourhood | \n",
+ " host_listings_count | \n",
+ " host_total_listings_count | \n",
+ " host_verifications | \n",
+ " host_has_profile_pic | \n",
+ " host_identity_verified | \n",
+ " street | \n",
+ " neighbourhood | \n",
+ " neighbourhood_cleansed | \n",
+ " neighbourhood_group_cleansed | \n",
+ " city | \n",
+ " state | \n",
+ " zipcode | \n",
+ " market | \n",
+ " smart_location | \n",
+ " country_code | \n",
+ " country | \n",
+ " latitude | \n",
+ " longitude | \n",
+ " is_location_exact | \n",
+ " property_type | \n",
+ " room_type | \n",
+ " accommodates | \n",
+ " bathrooms | \n",
+ " bedrooms | \n",
+ " beds | \n",
+ " bed_type | \n",
+ " amenities | \n",
+ " square_feet | \n",
+ " price | \n",
+ " weekly_price | \n",
+ " monthly_price | \n",
+ " security_deposit | \n",
+ " cleaning_fee | \n",
+ " guests_included | \n",
+ " extra_people | \n",
+ " minimum_nights | \n",
+ " maximum_nights | \n",
+ " calendar_updated | \n",
+ " has_availability | \n",
+ " availability_30 | \n",
+ " availability_60 | \n",
+ " availability_90 | \n",
+ " availability_365 | \n",
+ " calendar_last_scraped | \n",
+ " number_of_reviews | \n",
+ " first_review | \n",
+ " last_review | \n",
+ " review_scores_rating | \n",
+ " review_scores_accuracy | \n",
+ " review_scores_cleanliness | \n",
+ " review_scores_checkin | \n",
+ " review_scores_communication | \n",
+ " review_scores_location | \n",
+ " review_scores_value | \n",
+ " requires_license | \n",
+ " license | \n",
+ " jurisdiction_names | \n",
+ " instant_bookable | \n",
+ " is_business_travel_ready | \n",
+ " cancellation_policy | \n",
+ " require_guest_profile_picture | \n",
+ " require_guest_phone_verification | \n",
+ " calculated_host_listings_count | \n",
+ " reviews_per_month | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 2015 | \n",
+ " https://www.airbnb.com/rooms/2015 | \n",
+ " 20181107122246 | \n",
+ " 2018-11-07 | \n",
+ " Berlin-Mitte Value! Quiet courtyard/very central | \n",
+ " Great location! 30 of 75 sq meters. This wood... | \n",
+ " A+++ location! This „Einliegerwohnung“ is an e... | \n",
+ " Great location! 30 of 75 sq meters. This wood... | \n",
+ " none | \n",
+ " It is located in the former East Berlin area o... | \n",
+ " This is my home, not a hotel. I rent out occas... | \n",
+ " Close to U-Bahn U8 and U2 (metro), Trams M12, ... | \n",
+ " Simple kitchen/cooking, refrigerator, microwav... | \n",
+ " Always available | \n",
+ " No parties No events No pets No smoking, not e... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " https://a0.muscache.com/im/pictures/260fd609-7... | \n",
+ " NaN | \n",
+ " 2217 | \n",
+ " https://www.airbnb.com/users/show/2217 | \n",
+ " Ian | \n",
+ " 2008-08-18 | \n",
+ " Key Biscayne, Florida, United States | \n",
+ " Believe in sharing economy. | \n",
+ " within an hour | \n",
+ " 96% | \n",
+ " NaN | \n",
+ " t | \n",
+ " https://a0.muscache.com/im/pictures/21428a22-4... | \n",
+ " https://a0.muscache.com/im/pictures/21428a22-4... | \n",
+ " Mitte | \n",
+ " 4.0 | \n",
+ " 4.0 | \n",
+ " ['email', 'phone', 'reviews', 'jumio', 'offlin... | \n",
+ " t | \n",
+ " t | \n",
+ " Berlin, Berlin, Germany | \n",
+ " Mitte | \n",
+ " Brunnenstr. Süd | \n",
+ " Mitte | \n",
+ " Berlin | \n",
+ " Berlin | \n",
+ " 10119 | \n",
+ " Berlin | \n",
+ " Berlin, Germany | \n",
+ " DE | \n",
+ " Germany | \n",
+ " 52.534537 | \n",
+ " 13.402557 | \n",
+ " f | \n",
+ " Guesthouse | \n",
+ " Entire home/apt | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 2.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Wifi,Kitchen,Gym,Heating,\"Famil... | \n",
+ " NaN | \n",
+ " $60.00 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " $200.00 | \n",
+ " $30.00 | \n",
+ " 1 | \n",
+ " $28.00 | \n",
+ " 4 | \n",
+ " 1125 | \n",
+ " 3 months ago | \n",
+ " t | \n",
+ " 0 | \n",
+ " 21 | \n",
+ " 51 | \n",
+ " 141 | \n",
+ " 2018-11-07 | \n",
+ " 118 | \n",
+ " 2016-04-11 | \n",
+ " 2018-10-28 | \n",
+ " 93.0 | \n",
+ " 10.0 | \n",
+ " 9.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 9.0 | \n",
+ " t | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ " f | \n",
+ " f | \n",
+ " 4 | \n",
+ " 3.76 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2695 | \n",
+ " https://www.airbnb.com/rooms/2695 | \n",
+ " 20181107122246 | \n",
+ " 2018-11-07 | \n",
+ " Prenzlauer Berg close to Mauerpark | \n",
+ " NaN | \n",
+ " In the summertime we are spending most of our ... | \n",
+ " In the summertime we are spending most of our ... | \n",
+ " none | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " Within walking distance you'll find the S-Bahn... | \n",
+ " Außer deinem Zimmer kannst du noch die Küche u... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " https://a0.muscache.com/im/pictures/97d4f6e8-1... | \n",
+ " NaN | \n",
+ " 2986 | \n",
+ " https://www.airbnb.com/users/show/2986 | \n",
+ " Michael | \n",
+ " 2008-09-16 | \n",
+ " Berlin, Berlin, Germany | \n",
+ " Living with my wife in Berlin. Like travellin... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " f | \n",
+ " https://a0.muscache.com/im/pictures/50434955-1... | \n",
+ " https://a0.muscache.com/im/pictures/50434955-1... | \n",
+ " Prenzlauer Berg | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " ['email', 'phone', 'reviews', 'jumio', 'govern... | \n",
+ " t | \n",
+ " t | \n",
+ " Berlin, Berlin, Germany | \n",
+ " NaN | \n",
+ " Prenzlauer Berg Nordwest | \n",
+ " Pankow | \n",
+ " Berlin | \n",
+ " Berlin | \n",
+ " 10437 | \n",
+ " Berlin | \n",
+ " Berlin, Germany | \n",
+ " DE | \n",
+ " Germany | \n",
+ " 52.548513 | \n",
+ " 13.404553 | \n",
+ " t | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,Kitchen,Elevator,Heating,Washer,Essentia... | \n",
+ " NaN | \n",
+ " $17.00 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " $0.00 | \n",
+ " $0.00 | \n",
+ " 1 | \n",
+ " $0.00 | \n",
+ " 2 | \n",
+ " 40 | \n",
+ " 7 weeks ago | \n",
+ " t | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 2018-11-07 | \n",
+ " 6 | \n",
+ " 2018-07-04 | \n",
+ " 2018-10-01 | \n",
+ " 100.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " t | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ " f | \n",
+ " f | \n",
+ " 1 | \n",
+ " 1.42 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3176 | \n",
+ " https://www.airbnb.com/rooms/3176 | \n",
+ " 20181107122246 | \n",
+ " 2018-11-07 | \n",
+ " Fabulous Flat in great Location | \n",
+ " This beautiful first floor apartment is situa... | \n",
+ " 1st floor (68m2) apartment on Kollwitzplatz/ P... | \n",
+ " This beautiful first floor apartment is situa... | \n",
+ " none | \n",
+ " The neighbourhood is famous for its variety of... | \n",
+ " We welcome FAMILIES and cater especially for y... | \n",
+ " We are 5 min walk away from the tram M2, whic... | \n",
+ " The apartment will be entirely yours. We are c... | \n",
+ " Feel free to ask any questions prior to bookin... | \n",
+ " It’s a non smoking flat, which likes to be tre... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " https://a0.muscache.com/im/pictures/243355/84a... | \n",
+ " NaN | \n",
+ " 3718 | \n",
+ " https://www.airbnb.com/users/show/3718 | \n",
+ " Britta | \n",
+ " 2008-10-19 | \n",
+ " Coledale, New South Wales, Australia | \n",
+ " We love to travel ourselves a lot and prefer t... | \n",
+ " within a day | \n",
+ " 100% | \n",
+ " NaN | \n",
+ " f | \n",
+ " https://a0.muscache.com/im/users/3718/profile_... | \n",
+ " https://a0.muscache.com/im/users/3718/profile_... | \n",
+ " Prenzlauer Berg | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " ['email', 'phone', 'facebook', 'reviews', 'man... | \n",
+ " t | \n",
+ " t | \n",
+ " Berlin, Berlin, Germany | \n",
+ " Prenzlauer Berg | \n",
+ " Prenzlauer Berg Südwest | \n",
+ " Pankow | \n",
+ " Berlin | \n",
+ " Berlin | \n",
+ " 10405 | \n",
+ " Berlin | \n",
+ " Berlin, Germany | \n",
+ " DE | \n",
+ " Germany | \n",
+ " 52.534996 | \n",
+ " 13.417579 | \n",
+ " t | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 4 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 2.0 | \n",
+ " Real Bed | \n",
+ " {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... | \n",
+ " 720.0 | \n",
+ " $90.00 | \n",
+ " $520.00 | \n",
+ " $1,900.00 | \n",
+ " $200.00 | \n",
+ " $50.00 | \n",
+ " 2 | \n",
+ " $20.00 | \n",
+ " 62 | \n",
+ " 1125 | \n",
+ " a week ago | \n",
+ " t | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 220 | \n",
+ " 2018-11-07 | \n",
+ " 143 | \n",
+ " 2009-06-20 | \n",
+ " 2017-03-20 | \n",
+ " 92.0 | \n",
+ " 9.0 | \n",
+ " 9.0 | \n",
+ " 9.0 | \n",
+ " 9.0 | \n",
+ " 10.0 | \n",
+ " 9.0 | \n",
+ " t | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ " f | \n",
+ " f | \n",
+ " 1 | \n",
+ " 1.25 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 3309 | \n",
+ " https://www.airbnb.com/rooms/3309 | \n",
+ " 20181107122246 | \n",
+ " 2018-11-07 | \n",
+ " BerlinSpot Schöneberg near KaDeWe | \n",
+ " First of all: I prefer short-notice bookings. ... | \n",
+ " Your room is really big and has 26 sqm, is ver... | \n",
+ " First of all: I prefer short-notice bookings. ... | \n",
+ " none | \n",
+ " My flat is in the middle of West-Berlin, direc... | \n",
+ " The flat is a strictly non-smoking facility! A... | \n",
+ " The public transportation is excellent: Severa... | \n",
+ " I do have a strictly non-smoker-flat. Keep th... | \n",
+ " I'm working as a freelancing photographer. My ... | \n",
+ " House-Rules and Information ..............(deu... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " https://a0.muscache.com/im/pictures/29054294/b... | \n",
+ " NaN | \n",
+ " 4108 | \n",
+ " https://www.airbnb.com/users/show/4108 | \n",
+ " Jana | \n",
+ " 2008-11-07 | \n",
+ " Berlin, Berlin, Germany | \n",
+ " ENJOY EVERY DAY AS IF IT'S YOUR LAST!!! \\r\\n\\r... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " f | \n",
+ " https://a0.muscache.com/im/pictures/user/b5938... | \n",
+ " https://a0.muscache.com/im/pictures/user/b5938... | \n",
+ " Schöneberg | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " ['email', 'phone', 'reviews', 'jumio', 'govern... | \n",
+ " t | \n",
+ " t | \n",
+ " Berlin, Berlin, Germany | \n",
+ " Schöneberg | \n",
+ " Schöneberg-Nord | \n",
+ " Tempelhof - Schöneberg | \n",
+ " Berlin | \n",
+ " Berlin | \n",
+ " 10777 | \n",
+ " Berlin | \n",
+ " Berlin, Germany | \n",
+ " DE | \n",
+ " Germany | \n",
+ " 52.498855 | \n",
+ " 13.349065 | \n",
+ " t | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " Pull-out Sofa | \n",
+ " {Internet,Wifi,\"Pets allowed\",\"Pets live on th... | \n",
+ " 0.0 | \n",
+ " $26.00 | \n",
+ " $175.00 | \n",
+ " $599.00 | \n",
+ " $250.00 | \n",
+ " $30.00 | \n",
+ " 1 | \n",
+ " $18.00 | \n",
+ " 5 | \n",
+ " 360 | \n",
+ " 4 weeks ago | \n",
+ " t | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 22 | \n",
+ " 297 | \n",
+ " 2018-11-07 | \n",
+ " 25 | \n",
+ " 2013-08-12 | \n",
+ " 2018-08-16 | \n",
+ " 88.0 | \n",
+ " 9.0 | \n",
+ " 9.0 | \n",
+ " 9.0 | \n",
+ " 10.0 | \n",
+ " 9.0 | \n",
+ " 9.0 | \n",
+ " t | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ " f | \n",
+ " f | \n",
+ " 1 | \n",
+ " 0.39 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 7071 | \n",
+ " https://www.airbnb.com/rooms/7071 | \n",
+ " 20181107122246 | \n",
+ " 2018-11-07 | \n",
+ " BrightRoom with sunny greenview! | \n",
+ " Cozy and large room in the beautiful district ... | \n",
+ " The BrightRoom is an approx. 20 sqm (215ft²), ... | \n",
+ " Cozy and large room in the beautiful district ... | \n",
+ " none | \n",
+ " Great neighborhood with plenty of Cafés, Baker... | \n",
+ " I hope you enjoy your stay to the fullest! Ple... | \n",
+ " Best access to other parts of the city via pub... | \n",
+ " The guests have access to the bathroom, a smal... | \n",
+ " I am glad if I can give you advice or help as ... | \n",
+ " Please take good care of everything during you... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " https://a0.muscache.com/im/pictures/21278/32a1... | \n",
+ " NaN | \n",
+ " 17391 | \n",
+ " https://www.airbnb.com/users/show/17391 | \n",
+ " Bright | \n",
+ " 2009-05-16 | \n",
+ " Berlin, Berlin, Germany | \n",
+ " I'm a creative person, adventurer, and travele... | \n",
+ " within an hour | \n",
+ " 100% | \n",
+ " NaN | \n",
+ " t | \n",
+ " https://a0.muscache.com/im/pictures/user/48c3d... | \n",
+ " https://a0.muscache.com/im/pictures/user/48c3d... | \n",
+ " Prenzlauer Berg | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " ['email', 'phone', 'reviews', 'jumio', 'govern... | \n",
+ " t | \n",
+ " t | \n",
+ " Berlin, Berlin, Germany | \n",
+ " Prenzlauer Berg | \n",
+ " Helmholtzplatz | \n",
+ " Pankow | \n",
+ " Berlin | \n",
+ " Berlin | \n",
+ " 10437 | \n",
+ " Berlin | \n",
+ " Berlin, Germany | \n",
+ " DE | \n",
+ " Germany | \n",
+ " 52.543157 | \n",
+ " 13.415091 | \n",
+ " t | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 2.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,Heating,\"Family/kid friendly\",Essentials... | \n",
+ " NaN | \n",
+ " $42.00 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " $0.00 | \n",
+ " $0.00 | \n",
+ " 1 | \n",
+ " $24.00 | \n",
+ " 2 | \n",
+ " 10 | \n",
+ " 3 days ago | \n",
+ " t | \n",
+ " 15 | \n",
+ " 26 | \n",
+ " 26 | \n",
+ " 26 | \n",
+ " 2018-11-07 | \n",
+ " 197 | \n",
+ " 2009-08-18 | \n",
+ " 2018-11-04 | \n",
+ " 96.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 10.0 | \n",
+ " 9.0 | \n",
+ " t | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ " f | \n",
+ " f | \n",
+ " 1 | \n",
+ " 1.75 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id listing_url scrape_id last_scraped \\\n",
+ "0 2015 https://www.airbnb.com/rooms/2015 20181107122246 2018-11-07 \n",
+ "1 2695 https://www.airbnb.com/rooms/2695 20181107122246 2018-11-07 \n",
+ "2 3176 https://www.airbnb.com/rooms/3176 20181107122246 2018-11-07 \n",
+ "3 3309 https://www.airbnb.com/rooms/3309 20181107122246 2018-11-07 \n",
+ "4 7071 https://www.airbnb.com/rooms/7071 20181107122246 2018-11-07 \n",
+ "\n",
+ " name \\\n",
+ "0 Berlin-Mitte Value! Quiet courtyard/very central \n",
+ "1 Prenzlauer Berg close to Mauerpark \n",
+ "2 Fabulous Flat in great Location \n",
+ "3 BerlinSpot Schöneberg near KaDeWe \n",
+ "4 BrightRoom with sunny greenview! \n",
+ "\n",
+ " summary \\\n",
+ "0 Great location! 30 of 75 sq meters. This wood... \n",
+ "1 NaN \n",
+ "2 This beautiful first floor apartment is situa... \n",
+ "3 First of all: I prefer short-notice bookings. ... \n",
+ "4 Cozy and large room in the beautiful district ... \n",
+ "\n",
+ " space \\\n",
+ "0 A+++ location! This „Einliegerwohnung“ is an e... \n",
+ "1 In the summertime we are spending most of our ... \n",
+ "2 1st floor (68m2) apartment on Kollwitzplatz/ P... \n",
+ "3 Your room is really big and has 26 sqm, is ver... \n",
+ "4 The BrightRoom is an approx. 20 sqm (215ft²), ... \n",
+ "\n",
+ " description experiences_offered \\\n",
+ "0 Great location! 30 of 75 sq meters. This wood... none \n",
+ "1 In the summertime we are spending most of our ... none \n",
+ "2 This beautiful first floor apartment is situa... none \n",
+ "3 First of all: I prefer short-notice bookings. ... none \n",
+ "4 Cozy and large room in the beautiful district ... none \n",
+ "\n",
+ " neighborhood_overview \\\n",
+ "0 It is located in the former East Berlin area o... \n",
+ "1 NaN \n",
+ "2 The neighbourhood is famous for its variety of... \n",
+ "3 My flat is in the middle of West-Berlin, direc... \n",
+ "4 Great neighborhood with plenty of Cafés, Baker... \n",
+ "\n",
+ " notes \\\n",
+ "0 This is my home, not a hotel. I rent out occas... \n",
+ "1 NaN \n",
+ "2 We welcome FAMILIES and cater especially for y... \n",
+ "3 The flat is a strictly non-smoking facility! A... \n",
+ "4 I hope you enjoy your stay to the fullest! Ple... \n",
+ "\n",
+ " transit \\\n",
+ "0 Close to U-Bahn U8 and U2 (metro), Trams M12, ... \n",
+ "1 Within walking distance you'll find the S-Bahn... \n",
+ "2 We are 5 min walk away from the tram M2, whic... \n",
+ "3 The public transportation is excellent: Severa... \n",
+ "4 Best access to other parts of the city via pub... \n",
+ "\n",
+ " access \\\n",
+ "0 Simple kitchen/cooking, refrigerator, microwav... \n",
+ "1 Außer deinem Zimmer kannst du noch die Küche u... \n",
+ "2 The apartment will be entirely yours. We are c... \n",
+ "3 I do have a strictly non-smoker-flat. Keep th... \n",
+ "4 The guests have access to the bathroom, a smal... \n",
+ "\n",
+ " interaction \\\n",
+ "0 Always available \n",
+ "1 NaN \n",
+ "2 Feel free to ask any questions prior to bookin... \n",
+ "3 I'm working as a freelancing photographer. My ... \n",
+ "4 I am glad if I can give you advice or help as ... \n",
+ "\n",
+ " house_rules thumbnail_url \\\n",
+ "0 No parties No events No pets No smoking, not e... NaN \n",
+ "1 NaN NaN \n",
+ "2 It’s a non smoking flat, which likes to be tre... NaN \n",
+ "3 House-Rules and Information ..............(deu... NaN \n",
+ "4 Please take good care of everything during you... NaN \n",
+ "\n",
+ " medium_url picture_url \\\n",
+ "0 NaN https://a0.muscache.com/im/pictures/260fd609-7... \n",
+ "1 NaN https://a0.muscache.com/im/pictures/97d4f6e8-1... \n",
+ "2 NaN https://a0.muscache.com/im/pictures/243355/84a... \n",
+ "3 NaN https://a0.muscache.com/im/pictures/29054294/b... \n",
+ "4 NaN https://a0.muscache.com/im/pictures/21278/32a1... \n",
+ "\n",
+ " xl_picture_url host_id host_url host_name \\\n",
+ "0 NaN 2217 https://www.airbnb.com/users/show/2217 Ian \n",
+ "1 NaN 2986 https://www.airbnb.com/users/show/2986 Michael \n",
+ "2 NaN 3718 https://www.airbnb.com/users/show/3718 Britta \n",
+ "3 NaN 4108 https://www.airbnb.com/users/show/4108 Jana \n",
+ "4 NaN 17391 https://www.airbnb.com/users/show/17391 Bright \n",
+ "\n",
+ " host_since host_location \\\n",
+ "0 2008-08-18 Key Biscayne, Florida, United States \n",
+ "1 2008-09-16 Berlin, Berlin, Germany \n",
+ "2 2008-10-19 Coledale, New South Wales, Australia \n",
+ "3 2008-11-07 Berlin, Berlin, Germany \n",
+ "4 2009-05-16 Berlin, Berlin, Germany \n",
+ "\n",
+ " host_about host_response_time \\\n",
+ "0 Believe in sharing economy. within an hour \n",
+ "1 Living with my wife in Berlin. Like travellin... NaN \n",
+ "2 We love to travel ourselves a lot and prefer t... within a day \n",
+ "3 ENJOY EVERY DAY AS IF IT'S YOUR LAST!!! \\r\\n\\r... NaN \n",
+ "4 I'm a creative person, adventurer, and travele... within an hour \n",
+ "\n",
+ " host_response_rate host_acceptance_rate host_is_superhost \\\n",
+ "0 96% NaN t \n",
+ "1 NaN NaN f \n",
+ "2 100% NaN f \n",
+ "3 NaN NaN f \n",
+ "4 100% NaN t \n",
+ "\n",
+ " host_thumbnail_url \\\n",
+ "0 https://a0.muscache.com/im/pictures/21428a22-4... \n",
+ "1 https://a0.muscache.com/im/pictures/50434955-1... \n",
+ "2 https://a0.muscache.com/im/users/3718/profile_... \n",
+ "3 https://a0.muscache.com/im/pictures/user/b5938... \n",
+ "4 https://a0.muscache.com/im/pictures/user/48c3d... \n",
+ "\n",
+ " host_picture_url host_neighbourhood \\\n",
+ "0 https://a0.muscache.com/im/pictures/21428a22-4... Mitte \n",
+ "1 https://a0.muscache.com/im/pictures/50434955-1... Prenzlauer Berg \n",
+ "2 https://a0.muscache.com/im/users/3718/profile_... Prenzlauer Berg \n",
+ "3 https://a0.muscache.com/im/pictures/user/b5938... Schöneberg \n",
+ "4 https://a0.muscache.com/im/pictures/user/48c3d... Prenzlauer Berg \n",
+ "\n",
+ " host_listings_count host_total_listings_count \\\n",
+ "0 4.0 4.0 \n",
+ "1 1.0 1.0 \n",
+ "2 1.0 1.0 \n",
+ "3 1.0 1.0 \n",
+ "4 1.0 1.0 \n",
+ "\n",
+ " host_verifications host_has_profile_pic \\\n",
+ "0 ['email', 'phone', 'reviews', 'jumio', 'offlin... t \n",
+ "1 ['email', 'phone', 'reviews', 'jumio', 'govern... t \n",
+ "2 ['email', 'phone', 'facebook', 'reviews', 'man... t \n",
+ "3 ['email', 'phone', 'reviews', 'jumio', 'govern... t \n",
+ "4 ['email', 'phone', 'reviews', 'jumio', 'govern... t \n",
+ "\n",
+ " host_identity_verified street neighbourhood \\\n",
+ "0 t Berlin, Berlin, Germany Mitte \n",
+ "1 t Berlin, Berlin, Germany NaN \n",
+ "2 t Berlin, Berlin, Germany Prenzlauer Berg \n",
+ "3 t Berlin, Berlin, Germany Schöneberg \n",
+ "4 t Berlin, Berlin, Germany Prenzlauer Berg \n",
+ "\n",
+ " neighbourhood_cleansed neighbourhood_group_cleansed city state \\\n",
+ "0 Brunnenstr. Süd Mitte Berlin Berlin \n",
+ "1 Prenzlauer Berg Nordwest Pankow Berlin Berlin \n",
+ "2 Prenzlauer Berg Südwest Pankow Berlin Berlin \n",
+ "3 Schöneberg-Nord Tempelhof - Schöneberg Berlin Berlin \n",
+ "4 Helmholtzplatz Pankow Berlin Berlin \n",
+ "\n",
+ " zipcode market smart_location country_code country latitude \\\n",
+ "0 10119 Berlin Berlin, Germany DE Germany 52.534537 \n",
+ "1 10437 Berlin Berlin, Germany DE Germany 52.548513 \n",
+ "2 10405 Berlin Berlin, Germany DE Germany 52.534996 \n",
+ "3 10777 Berlin Berlin, Germany DE Germany 52.498855 \n",
+ "4 10437 Berlin Berlin, Germany DE Germany 52.543157 \n",
+ "\n",
+ " longitude is_location_exact property_type room_type accommodates \\\n",
+ "0 13.402557 f Guesthouse Entire home/apt 3 \n",
+ "1 13.404553 t Apartment Private room 2 \n",
+ "2 13.417579 t Apartment Entire home/apt 4 \n",
+ "3 13.349065 t Apartment Private room 2 \n",
+ "4 13.415091 t Apartment Private room 2 \n",
+ "\n",
+ " bathrooms bedrooms beds bed_type \\\n",
+ "0 1.0 1.0 2.0 Real Bed \n",
+ "1 1.0 1.0 1.0 Real Bed \n",
+ "2 1.0 1.0 2.0 Real Bed \n",
+ "3 1.0 1.0 1.0 Pull-out Sofa \n",
+ "4 1.0 1.0 2.0 Real Bed \n",
+ "\n",
+ " amenities square_feet price \\\n",
+ "0 {TV,\"Cable TV\",Wifi,Kitchen,Gym,Heating,\"Famil... NaN $60.00 \n",
+ "1 {Wifi,Kitchen,Elevator,Heating,Washer,Essentia... NaN $17.00 \n",
+ "2 {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... 720.0 $90.00 \n",
+ "3 {Internet,Wifi,\"Pets allowed\",\"Pets live on th... 0.0 $26.00 \n",
+ "4 {Wifi,Heating,\"Family/kid friendly\",Essentials... NaN $42.00 \n",
+ "\n",
+ " weekly_price monthly_price security_deposit cleaning_fee guests_included \\\n",
+ "0 NaN NaN $200.00 $30.00 1 \n",
+ "1 NaN NaN $0.00 $0.00 1 \n",
+ "2 $520.00 $1,900.00 $200.00 $50.00 2 \n",
+ "3 $175.00 $599.00 $250.00 $30.00 1 \n",
+ "4 NaN NaN $0.00 $0.00 1 \n",
+ "\n",
+ " extra_people minimum_nights maximum_nights calendar_updated \\\n",
+ "0 $28.00 4 1125 3 months ago \n",
+ "1 $0.00 2 40 7 weeks ago \n",
+ "2 $20.00 62 1125 a week ago \n",
+ "3 $18.00 5 360 4 weeks ago \n",
+ "4 $24.00 2 10 3 days ago \n",
+ "\n",
+ " has_availability availability_30 availability_60 availability_90 \\\n",
+ "0 t 0 21 51 \n",
+ "1 t 0 0 0 \n",
+ "2 t 0 0 0 \n",
+ "3 t 0 0 22 \n",
+ "4 t 15 26 26 \n",
+ "\n",
+ " availability_365 calendar_last_scraped number_of_reviews first_review \\\n",
+ "0 141 2018-11-07 118 2016-04-11 \n",
+ "1 0 2018-11-07 6 2018-07-04 \n",
+ "2 220 2018-11-07 143 2009-06-20 \n",
+ "3 297 2018-11-07 25 2013-08-12 \n",
+ "4 26 2018-11-07 197 2009-08-18 \n",
+ "\n",
+ " last_review review_scores_rating review_scores_accuracy \\\n",
+ "0 2018-10-28 93.0 10.0 \n",
+ "1 2018-10-01 100.0 10.0 \n",
+ "2 2017-03-20 92.0 9.0 \n",
+ "3 2018-08-16 88.0 9.0 \n",
+ "4 2018-11-04 96.0 10.0 \n",
+ "\n",
+ " review_scores_cleanliness review_scores_checkin \\\n",
+ "0 9.0 10.0 \n",
+ "1 10.0 10.0 \n",
+ "2 9.0 9.0 \n",
+ "3 9.0 9.0 \n",
+ "4 10.0 10.0 \n",
+ "\n",
+ " review_scores_communication review_scores_location review_scores_value \\\n",
+ "0 10.0 10.0 9.0 \n",
+ "1 10.0 10.0 10.0 \n",
+ "2 9.0 10.0 9.0 \n",
+ "3 10.0 9.0 9.0 \n",
+ "4 10.0 10.0 9.0 \n",
+ "\n",
+ " requires_license license jurisdiction_names instant_bookable \\\n",
+ "0 t NaN NaN f \n",
+ "1 t NaN NaN f \n",
+ "2 t NaN NaN t \n",
+ "3 t NaN NaN f \n",
+ "4 t NaN NaN f \n",
+ "\n",
+ " is_business_travel_ready cancellation_policy \\\n",
+ "0 f strict_14_with_grace_period \n",
+ "1 f flexible \n",
+ "2 f strict_14_with_grace_period \n",
+ "3 f strict_14_with_grace_period \n",
+ "4 f moderate \n",
+ "\n",
+ " require_guest_profile_picture require_guest_phone_verification \\\n",
+ "0 f f \n",
+ "1 f f \n",
+ "2 f f \n",
+ "3 f f \n",
+ "4 f f \n",
+ "\n",
+ " calculated_host_listings_count reviews_per_month \n",
+ "0 4 3.76 \n",
+ "1 1 1.42 \n",
+ "2 1 1.25 \n",
+ "3 1 0.39 \n",
+ "4 1 1.75 "
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Loading up the original dataframe.\n",
+ "\n",
+ "berlin = pd.read_csv('https://raw.githubusercontent.com/BuildWeekAirbnbOptimal1/Data-Science/master/Berlin.csv')\n",
+ "print(berlin.shape)\n",
+ "berlin.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 510
+ },
+ "colab_type": "code",
+ "id": "yfzAdd9LyG5D",
+ "outputId": "21879ff0-76ba-4c2b-f3ad-507c6b58aa5f"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Index(['id', 'listing_url', 'scrape_id', 'last_scraped', 'name', 'summary',\n",
+ " 'space', 'description', 'experiences_offered', 'neighborhood_overview',\n",
+ " 'notes', 'transit', 'access', 'interaction', 'house_rules',\n",
+ " 'thumbnail_url', 'medium_url', 'picture_url', 'xl_picture_url',\n",
+ " 'host_id', 'host_url', 'host_name', 'host_since', 'host_location',\n",
+ " 'host_about', 'host_response_time', 'host_response_rate',\n",
+ " 'host_acceptance_rate', 'host_is_superhost', 'host_thumbnail_url',\n",
+ " 'host_picture_url', 'host_neighbourhood', 'host_listings_count',\n",
+ " 'host_total_listings_count', 'host_verifications',\n",
+ " 'host_has_profile_pic', 'host_identity_verified', 'street',\n",
+ " 'neighbourhood', 'neighbourhood_cleansed',\n",
+ " 'neighbourhood_group_cleansed', 'city', 'state', 'zipcode', 'market',\n",
+ " 'smart_location', 'country_code', 'country', 'latitude', 'longitude',\n",
+ " 'is_location_exact', 'property_type', 'room_type', 'accommodates',\n",
+ " 'bathrooms', 'bedrooms', 'beds', 'bed_type', 'amenities', 'square_feet',\n",
+ " 'price', 'weekly_price', 'monthly_price', 'security_deposit',\n",
+ " 'cleaning_fee', 'guests_included', 'extra_people', 'minimum_nights',\n",
+ " 'maximum_nights', 'calendar_updated', 'has_availability',\n",
+ " 'availability_30', 'availability_60', 'availability_90',\n",
+ " 'availability_365', 'calendar_last_scraped', 'number_of_reviews',\n",
+ " 'first_review', 'last_review', 'review_scores_rating',\n",
+ " 'review_scores_accuracy', 'review_scores_cleanliness',\n",
+ " 'review_scores_checkin', 'review_scores_communication',\n",
+ " 'review_scores_location', 'review_scores_value', 'requires_license',\n",
+ " 'license', 'jurisdiction_names', 'instant_bookable',\n",
+ " 'is_business_travel_ready', 'cancellation_policy',\n",
+ " 'require_guest_profile_picture', 'require_guest_phone_verification',\n",
+ " 'calculated_host_listings_count', 'reviews_per_month'],\n",
+ " dtype='object')"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Checking the names of the columns in this dataframe.\n",
+ "\n",
+ "berlin.columns"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "Td7LcShBOMIq"
+ },
+ "source": [
+ "# Preprocessing"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "BAjhX-dob-p0"
+ },
+ "source": [
+ "## Deciding what columns to keep"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "lUWZIKpg3w8E"
+ },
+ "outputs": [],
+ "source": [
+ "# Creating the first df with dropping the columns which I don't think we will need at all.\n",
+ "# Dropped columns are those with mainly high cardinality.\n",
+ "# Keeping that columns which a new renter can normally directly influence.\n",
+ "\n",
+ "columns_to_keep = ['id', 'space', 'description', 'host_response_time', \n",
+ " 'host_response_rate', 'host_has_profile_pic', \n",
+ " 'neighbourhood_group_cleansed', 'latitude', 'longitude', \n",
+ " 'property_type', 'room_type', 'accommodates', 'bathrooms', \n",
+ " 'bedrooms', 'bed_type', 'amenities', 'square_feet', 'price', \n",
+ " 'cleaning_fee', 'security_deposit', 'extra_people', \n",
+ " 'guests_included', 'minimum_nights', 'maximum_nights', 'instant_bookable', \n",
+ " 'is_business_travel_ready', 'cancellation_policy']\n",
+ "\n",
+ "berlin_preprocess = berlin[columns_to_keep].set_index('id')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 561
+ },
+ "colab_type": "code",
+ "id": "C7UsfY8R4VJs",
+ "outputId": "6f53d638-9234-4061-abff-90636921c69d"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " space | \n",
+ " description | \n",
+ " host_response_time | \n",
+ " host_response_rate | \n",
+ " host_has_profile_pic | \n",
+ " neighbourhood_group_cleansed | \n",
+ " latitude | \n",
+ " longitude | \n",
+ " property_type | \n",
+ " room_type | \n",
+ " accommodates | \n",
+ " bathrooms | \n",
+ " bedrooms | \n",
+ " bed_type | \n",
+ " amenities | \n",
+ " square_feet | \n",
+ " price | \n",
+ " cleaning_fee | \n",
+ " security_deposit | \n",
+ " extra_people | \n",
+ " guests_included | \n",
+ " minimum_nights | \n",
+ " maximum_nights | \n",
+ " instant_bookable | \n",
+ " is_business_travel_ready | \n",
+ " cancellation_policy | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " A+++ location! This „Einliegerwohnung“ is an e... | \n",
+ " Great location! 30 of 75 sq meters. This wood... | \n",
+ " within an hour | \n",
+ " 96% | \n",
+ " t | \n",
+ " Mitte | \n",
+ " 52.534537 | \n",
+ " 13.402557 | \n",
+ " Guesthouse | \n",
+ " Entire home/apt | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Wifi,Kitchen,Gym,Heating,\"Famil... | \n",
+ " NaN | \n",
+ " $60.00 | \n",
+ " $30.00 | \n",
+ " $200.00 | \n",
+ " $28.00 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " In the summertime we are spending most of our ... | \n",
+ " In the summertime we are spending most of our ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.548513 | \n",
+ " 13.404553 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,Kitchen,Elevator,Heating,Washer,Essentia... | \n",
+ " NaN | \n",
+ " $17.00 | \n",
+ " $0.00 | \n",
+ " $0.00 | \n",
+ " $0.00 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 40 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " 1st floor (68m2) apartment on Kollwitzplatz/ P... | \n",
+ " This beautiful first floor apartment is situa... | \n",
+ " within a day | \n",
+ " 100% | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.534996 | \n",
+ " 13.417579 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 4 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... | \n",
+ " 720.0 | \n",
+ " $90.00 | \n",
+ " $50.00 | \n",
+ " $200.00 | \n",
+ " $20.00 | \n",
+ " 2 | \n",
+ " 62 | \n",
+ " 1125 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " Your room is really big and has 26 sqm, is ver... | \n",
+ " First of all: I prefer short-notice bookings. ... | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " t | \n",
+ " Tempelhof - Schöneberg | \n",
+ " 52.498855 | \n",
+ " 13.349065 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " Pull-out Sofa | \n",
+ " {Internet,Wifi,\"Pets allowed\",\"Pets live on th... | \n",
+ " 0.0 | \n",
+ " $26.00 | \n",
+ " $30.00 | \n",
+ " $250.00 | \n",
+ " $18.00 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 360 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " The BrightRoom is an approx. 20 sqm (215ft²), ... | \n",
+ " Cozy and large room in the beautiful district ... | \n",
+ " within an hour | \n",
+ " 100% | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.543157 | \n",
+ " 13.415091 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,Heating,\"Family/kid friendly\",Essentials... | \n",
+ " NaN | \n",
+ " $42.00 | \n",
+ " $0.00 | \n",
+ " $0.00 | \n",
+ " $24.00 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 10 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " space \\\n",
+ "id \n",
+ "2015 A+++ location! This „Einliegerwohnung“ is an e... \n",
+ "2695 In the summertime we are spending most of our ... \n",
+ "3176 1st floor (68m2) apartment on Kollwitzplatz/ P... \n",
+ "3309 Your room is really big and has 26 sqm, is ver... \n",
+ "7071 The BrightRoom is an approx. 20 sqm (215ft²), ... \n",
+ "\n",
+ " description host_response_time \\\n",
+ "id \n",
+ "2015 Great location! 30 of 75 sq meters. This wood... within an hour \n",
+ "2695 In the summertime we are spending most of our ... NaN \n",
+ "3176 This beautiful first floor apartment is situa... within a day \n",
+ "3309 First of all: I prefer short-notice bookings. ... NaN \n",
+ "7071 Cozy and large room in the beautiful district ... within an hour \n",
+ "\n",
+ " host_response_rate host_has_profile_pic neighbourhood_group_cleansed \\\n",
+ "id \n",
+ "2015 96% t Mitte \n",
+ "2695 NaN t Pankow \n",
+ "3176 100% t Pankow \n",
+ "3309 NaN t Tempelhof - Schöneberg \n",
+ "7071 100% t Pankow \n",
+ "\n",
+ " latitude longitude property_type room_type accommodates \\\n",
+ "id \n",
+ "2015 52.534537 13.402557 Guesthouse Entire home/apt 3 \n",
+ "2695 52.548513 13.404553 Apartment Private room 2 \n",
+ "3176 52.534996 13.417579 Apartment Entire home/apt 4 \n",
+ "3309 52.498855 13.349065 Apartment Private room 2 \n",
+ "7071 52.543157 13.415091 Apartment Private room 2 \n",
+ "\n",
+ " bathrooms bedrooms bed_type \\\n",
+ "id \n",
+ "2015 1.0 1.0 Real Bed \n",
+ "2695 1.0 1.0 Real Bed \n",
+ "3176 1.0 1.0 Real Bed \n",
+ "3309 1.0 1.0 Pull-out Sofa \n",
+ "7071 1.0 1.0 Real Bed \n",
+ "\n",
+ " amenities square_feet price \\\n",
+ "id \n",
+ "2015 {TV,\"Cable TV\",Wifi,Kitchen,Gym,Heating,\"Famil... NaN $60.00 \n",
+ "2695 {Wifi,Kitchen,Elevator,Heating,Washer,Essentia... NaN $17.00 \n",
+ "3176 {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... 720.0 $90.00 \n",
+ "3309 {Internet,Wifi,\"Pets allowed\",\"Pets live on th... 0.0 $26.00 \n",
+ "7071 {Wifi,Heating,\"Family/kid friendly\",Essentials... NaN $42.00 \n",
+ "\n",
+ " cleaning_fee security_deposit extra_people guests_included \\\n",
+ "id \n",
+ "2015 $30.00 $200.00 $28.00 1 \n",
+ "2695 $0.00 $0.00 $0.00 1 \n",
+ "3176 $50.00 $200.00 $20.00 2 \n",
+ "3309 $30.00 $250.00 $18.00 1 \n",
+ "7071 $0.00 $0.00 $24.00 1 \n",
+ "\n",
+ " minimum_nights maximum_nights instant_bookable \\\n",
+ "id \n",
+ "2015 4 1125 f \n",
+ "2695 2 40 f \n",
+ "3176 62 1125 t \n",
+ "3309 5 360 f \n",
+ "7071 2 10 f \n",
+ "\n",
+ " is_business_travel_ready cancellation_policy \n",
+ "id \n",
+ "2015 f strict_14_with_grace_period \n",
+ "2695 f flexible \n",
+ "3176 f strict_14_with_grace_period \n",
+ "3309 f strict_14_with_grace_period \n",
+ "7071 f moderate "
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "berlin_preprocess.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "colab_type": "code",
+ "id": "Upbd5MaLOfOG",
+ "outputId": "281d8651-15fd-4157-c77f-50d8fc4accf5"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "There is is 22552 lines and 26 columns, in this set after dropping irrelevant columns.\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(f'There is is {berlin_preprocess.shape[0]} lines and {berlin_preprocess.shape[1]} columns,'\n",
+ " f' in this set after dropping irrelevant columns.')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "vG8f4gq9ReKi"
+ },
+ "source": [
+ "## Cleaning the price columns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 235
+ },
+ "colab_type": "code",
+ "id": "zHYeRqBjRJj0",
+ "outputId": "2969b1d8-9e23-47bf-85db-aea1be0a5d58"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " price | \n",
+ " cleaning_fee | \n",
+ " extra_people | \n",
+ " security_deposit | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " $60.00 | \n",
+ " $30.00 | \n",
+ " $28.00 | \n",
+ " $200.00 | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " $17.00 | \n",
+ " $0.00 | \n",
+ " $0.00 | \n",
+ " $0.00 | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " $90.00 | \n",
+ " $50.00 | \n",
+ " $20.00 | \n",
+ " $200.00 | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " $26.00 | \n",
+ " $30.00 | \n",
+ " $18.00 | \n",
+ " $250.00 | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " $42.00 | \n",
+ " $0.00 | \n",
+ " $24.00 | \n",
+ " $0.00 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " price cleaning_fee extra_people security_deposit\n",
+ "id \n",
+ "2015 $60.00 $30.00 $28.00 $200.00\n",
+ "2695 $17.00 $0.00 $0.00 $0.00\n",
+ "3176 $90.00 $50.00 $20.00 $200.00\n",
+ "3309 $26.00 $30.00 $18.00 $250.00\n",
+ "7071 $42.00 $0.00 $24.00 $0.00"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Reviewing all the monetary columns from this dataframe.\n",
+ "\n",
+ "berlin_preprocess[['price', 'cleaning_fee', 'extra_people', 'security_deposit']].head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 85
+ },
+ "colab_type": "code",
+ "id": "bfBNDe8cR3St",
+ "outputId": "aab8ef20-2f03-4088-bdd6-5cabe2b5b004"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0\n",
+ "7146\n",
+ "0\n",
+ "9361\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Checking how many missing values we have in each of these features.\n",
+ "\n",
+ "print(berlin_preprocess.price.isna().sum())\n",
+ "print(berlin_preprocess.cleaning_fee.isna().sum())\n",
+ "print(berlin_preprocess.extra_people.isna().sum())\n",
+ "print(berlin_preprocess.security_deposit.isna().sum())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "vv8GQTd_Td9v"
+ },
+ "outputs": [],
+ "source": [
+ "# We are making an assumption that missing values mean that landlords don't charge\n",
+ "# for those particular services. Exchaning missing values with $0.\n",
+ "\n",
+ "berlin_preprocess['cleaning_fee'] = berlin_preprocess['cleaning_fee'].fillna('$0.00')\n",
+ "berlin_preprocess['security_deposit'] = berlin_preprocess['security_deposit'].fillna('$0.00')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "HM5qXQ9P7kl8"
+ },
+ "outputs": [],
+ "source": [
+ "# Wrangling strings in these features. Dropping $ signs and commas.\n",
+ "\n",
+ "berlin_preprocess['price'] = berlin_preprocess['price'].str.replace('$', '').str.replace(',', '').astype(float)\n",
+ "berlin_preprocess['cleaning_fee'] = berlin_preprocess['cleaning_fee'].str.replace('$', '').str.replace(',', '').astype(float)\n",
+ "berlin_preprocess['extra_people'] = berlin_preprocess['extra_people'].str.replace('$', '').str.replace(',', '').astype(float)\n",
+ "berlin_preprocess['security_deposit'] = berlin_preprocess['security_deposit'].str.replace('$', '').str.replace(',', '').astype(float)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 170
+ },
+ "colab_type": "code",
+ "id": "hDCHtgvN7nAB",
+ "outputId": "41f84ec2-f017-412d-b4ba-9d8f30cbc40f"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "count 22552.000000\n",
+ "mean 67.143668\n",
+ "std 220.266210\n",
+ "min 0.000000\n",
+ "25% 30.000000\n",
+ "50% 45.000000\n",
+ "75% 70.000000\n",
+ "max 9000.000000\n",
+ "Name: price, dtype: float64"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Checking the layout of the price distribution.\n",
+ "\n",
+ "berlin_preprocess['price'].describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 157
+ },
+ "colab_type": "code",
+ "id": "oG1fxY0-78N3",
+ "outputId": "dd4f25b1-89c3-4bef-998e-17460906413f"
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7IAAACLCAYAAABcHaUMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAARQ0lEQVR4nO3de5BeZX0H8O/77i0kJISpwcuMVjutRys2VYzxVkSGm0LR1qljW6uI9OKoFbFS20GqaEfaqlVray8WEMfWAS2CZITYAipVY7xRQDxYL6OtRaklEMBs9tY/3t3Nu7vv7r4vu8nus3w+f+U9OZfnnPM7Z8/3fc6z25iYmAgAAACUornSDQAAAIBeCLIAAAAURZAFAACgKIIsAAAARRFkAQAAKIogCwAAQFH6V7oBs42Ojk3cddf9K90MWJIjj1wfdcxaoJZZK9Qya4E6Zq3YsmVjY6nrWHU9sv39fSvdBFgydcxaoZZZK9Qya4E6hgNWXZAFAACAhQiyAAAAFEWQBQAAoCiCLAAAAEURZAEAACiKIAsAAEBRBFkAAACKIsgCAABQFEEWAACAogiyAAAAFEWQBQAAoCiCLAAAAEURZAEAACiKIAsAAEBRBFkAAACKIsgCAABQFEEWAACAogiyAAAAFEWQBQAAoCiCLAAAAEURZAEAACiKIAsAAEBRBFkAAACKIsgCAABQFEEWAACAogiyAAAAFEWQBQAAoCiCLAAAAEURZAEAACiKIAsAAEBRBFkAAACKIsgCAABQFEEWAACAogiyAAAAFEWQBQAAoCiCLAAAAEURZAEAACiKIAsAAEBRBFkAAACKIsgCAABQFEEWAACAogiyAAAAFEWQBQAAoCiCLAAAAEXpX+kGrKTXvPszuW/faE/LvOJ7V+UfH3X6srdlw7r+/NXZxy77egEAANaaB3WQvW/faC564/E9LXP7WZf2vEw3zrzwumVfJwAAwFrk1WIAAACKIsgCAABQlFUXZI8++uiVbgLL6Nhjt690EwAAgDVmyUG2qqozqqpatt9+dOutty7XqlgFvvGN21a6CQAAwBqz5F/2VNf1JcvQDtaoHUl+6mGbk/Hx6WkTSbJhQxr33Tc9bTxJHvmoNL//venPzb6+ZGxsxvrGN25Mc+/eA8s85mfS+O530piYmJ62d8ensvH0U9IcG8tEo5H7/uLd2fCGs6fnSZLhF74og1d8NI3x8Yw3m5n42Z9L85u3T88zkWT/y87MwIcuSXNynv2/dUaGPnhRGpPrGDmu9Uu/+j776TQn2zmRTP//kZNtGfjcjRl5xrMyuq3VO73+gvOz7n3vTiPJ+Pr1ueu7d+TwV56VoSv/JRkfz8ixx2X06F/IYe9794z9HHnyUzLwlS+l+V/fz/hDtiRJmv/zg6TZzMixx+Weyz6e/t27svGsl6X5wzsy/tCHZeQZz8rQxy6b3u973/GeVhv+/O1p3ntPhp97WgauvjLN4eHpbY0dd3wad9+dvu9+O6Nbn5Txn350mnWd/vrryfBwRp/6tOlpzf378pPfeGnGHv/zOex970n/l7+Uxvho9r34Jbn//Auy/oLzM7Tjqgyfevr059n73r971/QxSpKBz92Yocs/kr5vfyujT9yau6+9PkkydOnFWffhSzP+sIen71vfTN/t9XSbh199dvpv+Y8Mn/b8DL/05R1rsZP+3bty+LnnpPm972b/Sc/Nve//wJx5hi69OENXX5nRo38hzb33ZCLJ8It+ffp8Tq1n9nlunzb4yR0HzufAQO767x/Pacf6t745/bfdkolNm3P/a8/peT/aj+G6y/65Yzs77dd8x+yIk5+T/q9+OUly5GSbF1tmsXbNPka9mH2MOx3zJDn8lWdl8LpPZf/xJ+be93+g43y97kcv2+/F0KUXZ8MbXpfGxPj09TC1rfZzmDywY7ccbey0zsWumeU0+x7SbRvb93v9Bedn3Uc+nGxYn6HX9HZtrZTZddytg3HOWT2GLr042bkjQyedWkQdH0rd/Bxe7F7Sv3tXhi775zSS7Fvg5ydL0797Vzace05y6817MjGxeSnraky0Pdx3UlXVGUmen2RTkockuSDJW5LcnmQ4SZ3kjiR/n+S9SZ6aZDDJn9R1fWVVVW9Pcmxavb/vquv68gUb1GhM/OhH9yxhl7p35oXXPYDfWnxGHvuBS1ZFW1a7TS96QQZveHD+NuZGJgN7kvT1JQOD2fOxqzL4yR1ZPxlopow1m+lrC/oP1MiTjsnA176SLHJNHxQdvnQYedIxGZgMQp0+J8nY0FD6Gs1kZH9rHWkk+4fnrGffb740G//gtV01Ze873tN1yNr8yyfP+JJl3wtfNOOhcejSiztvd3Awe67YMR1oNr/w9NY+TJ7nJAemNRrJ6Mw/8zXWFmb7d+/K5tNPmXP8etqPqW319bXO/8jInHa2m71fs7d1xMnPmT5XU7U8u04Xa9/MdvW31jI2Nn2Meg1k7cd479suzMbz3jjjmI9u257DX3lW1rV9cbP/uOMz+IXPz5iv77avL7jvS9l+LzrV1tj69dl7+ZXZ/CunHbgO+vuTZl8yNtrTtjrV5VIfyjrV6uxrZjmtv+D8GffL+1999qJhdvZ+7zv1l6drYqqWu722VsrsOu72GB+Mc87qMXXPKKWOD6VFfw4nM+5bne4l/bt3ZfOvnJrsn5x/cCh7rrjaNbTM2p+9GkkyMdFYbJkF19flfIcnOTHJliRfTNKX5K11XX+1qqo3T87z/CQPqev6qVVVPSzJq6uq2p/kMXVdP7OqqnVJvlBV1afqut6z0MYO5Z+i2bJlY0/z3/4AlunWWvsTPJffeGOSAz2UDzbT+z02lmR/jrxpd3LN1XPm61+GEJskgzfftDIhNpkTwpLJ9izwOUn6h4cPhOB5jsPgzTdlcOeOrpuyaeeO5PW/v/iMN+2es83Drv/XHNZ+fc+33ZGR1vl83gmt9Yzsn3mek7Zpc/WPjBy4j9y0u+N8Pe3H1LbGx2fWQHs7283arznbmnWuGplbp4u2b3a7ksm27e/cpoXMOsabdu6Ye8yfd0Jy/b/OWGxo1+fnznfDDb3tRy/b70WH2uq///7WuqYevJLWlyCNsd6PXae67LWNndY5q1bnXDPLadb9csM1V2fDX/3lwsvM2u/DZtVEIz1cWytlVpu7PsYH45yzerTdM4qo40Opx5/DHe8lN+0+8CXw5LKuoYOgw7PXUnQbZD9d1/V4kh9WVXVXksen1RPbrkry+SSp6/qOJOdVVXVukmOqqrphcp6BJD+dZMEge6h6Js+88Lrceefenpd7IMt0Y631yDa+8qzkhuuyQtFqRXXskd26LYOn/Ojg9cg+cevq6pF94taZPbKzPidtPbJZoEf2iVuz76RTs3Hnzq6asvekUzPcxTXav3VbNjebM3tkn3NC7m1bdmi+7Q4MZM/WbRm9c29rPQODrX2YPM9JDkybr0d2cjv9W7dlc4fj19N+TG1rdo9sWzvbzd6v2ds6ou1czdsju0j7ZrZrVo9shzZ1vY8Dg9l70qnZ+JnPpv2Yj965N4c/54SZPbLbn97qkW2br29ww4L7vpTt96JTbY2tX5+9U9uar0e2y211qste29hxnbNqdfY1s5zWn3LazB7ZU07L/T2eq31tNTHdk9XltbVSZtdxt8f4YJxzVo+pe0YpdXwoLfpzOJnZI9vhXtJax8CBHlnX0EHR/uy1HB1d3QbZY5KkqqqHpvWK8Y8yOXSvzW1Jfm1yviOSXJbkr5NcX9f171RV1UzypiTfXoZ2U4B7Lvt4dh+1KafMCgsPhjGyjSRjmTtGduoVFWNkex8jm2RZx8iObtuePZ+4dsHxflPrWmiM7Oi27dnzsavmjM1pn7bQGNnRbduz56prHvAY2dnbTxYfI9u+X52O2d3XXj89RraRA69C9zK2tFO7HujYvU7HeOzxPz9nfVPnb6ExstPjZHsYI9vt9nsxtd1OY2T3XHH1ksfIzleXSzFVq4dqjOzUq3+9jJHttN/jD39E1n3kw+nbsD57Cxgj26mOu3Ewzjmrx1Tdbtq5oxViV3kdH0rd/hxe6F4yum179lyxwxjZg2zq2WvDuedk8Nab717q+rodI/u7Se5PckSS85L8bZLH1XW9b/LV4juS/F1aY2SflFZAfkuSa5K8M8m2tF5PvqKu6wV/Ehkju7YcddSmHKrzuZps2bLxoPXcw6Gkllkr1DJrgTpmrdiyZeOSO2V7ebX4jW2fHz31j7qu39w2/TUdlj2n92YBAABAZ0v+O7LL7QlPeMJKN4Fl9LjHPX6lmwAAAKwxi/bIHuq/E3vLLbd4ZWIN+cxndq10EwAAgDVm1fXIAgAAwEIEWQAAAIrS7S97WrPOvPC6nuZ/xeDmXNjjMt3YsO5BfyoAAAC68qBOTw/sz90cn2cue0sAAADolleLAQAAKIogCwAAQFEEWQAAAIoiyAIAAFAUQRYAAICiCLIAAAAURZAFAACgKIIsAAAARRFkAQAAKIogCwAAQFEEWQAAAIoiyAIAAFAUQRYAAICiCLIAAAAURZAFAACgKIIsAAAARRFkAQAAKIogCwAAQFEEWQAAAIoiyAIAAFAUQRYAAICiCLIAAAAURZAFAACgKIIsAAAARRFkAQAAKIogCwAAQFEEWQAAAIoiyAIAAFAUQRYAAICiCLIAAAAURZAFAACgKIIsAAAARRFkAQAAKIogCwAAQFEEWQAAAIoiyAIAAFAUQRYAAICiCLIAAAAURZAFAACgKIIsAAAARRFkAQAAKIogCwAAQFEEWQAAAIoiyAIAAFCUxsTExEq3AQAAALqmRxYAAICiCLIAAAAURZAFAACgKIIsAAAARRFkAQAAKIogCwAAQFH6V7oBSVJVVTPJ3yTZmmQ4yVl1Xf/nyrYK5ldV1UCSi5I8OslQkrcl+XqSS5JMJLklyavquh6vqupPkpyaZDTJ2XVdf3El2gwLqarqqCRfTnJiWrV6SdQyhamq6o+SnJ5kMK3nik9HLVOQyeeLD6b1fDGW5LfjnkxhqqranuTP6ro+rqqqn02X9TvfvPNtZ7X0yL4gybq6rp+e5I1J3rnC7YHFvCTJj+u6/qUkz03yviTvSnLe5LRGkudXVfXkJM9Osj3Ji5P89Qq1F+Y1+eD0d0l+MjlJLVOcqqqOS/KMJM9Mq1YfGbVMeZ6XpL+u62ckuSDJn0YdU5Cqqs5N8oEk6yYn9VK/c+ZdaFurJcg+K8k1SVLX9ReSPGVlmwOLujzJm9o+jyY5Jq1v/5Pkk0lOSKu2d9Z1PVHX9feS9FdVteWQthQW944kf5vkB5Of1TIlOjnJzUmuSPKJJFdHLVOe29OqyWaSTUlGoo4py7eS/Grb517qt9O881otQXZTkrvbPo9VVbUqXnuGTuq6vreu671VVW1M8tEk5yVp1HU9MTnL3iRHZG5tT02HVaGqqjOS3FnX9bVtk9UyJXpIWl+E/1qS30vy4SRNtUxh7k3rteJvJPmHJO+NezIFqev6Y2l9ATOll/rtNO+8VkuQvSfJxrbPzbquR1eqMdCNqqoemeT6JB+q6/qfkrS/w78xyZ7Mre2p6bBanJnkxKqqbkjyi0kuTXJU2/+rZUrx4yTX1nW9v67rOsm+zHwIUsuU4HVp1fFj0/rdMR9Ma8z3FHVMaXp5Pu4077xWS5D997TGBKSqqqel9WoQrFpVVT00yc4kf1jX9UWTk786OUYraY2b/WxatX1yVVXNqqoeldaXNP97yBsM86jr+ti6rp9d1/VxSb6W5KVJPqmWKdCNSU6pqqpRVdUjkmxI8m9qmcLclQM9Vf+XZCCeLyhbL/Xbad55rZbXd69Iq0fgc2kN7H35CrcHFvPHSY5M8qaqqqbGyr42yXurqhpMcluSj9Z1PVZV1WeTfD6tL45etSKthd68Psk/qGVKUtf11VVVHZvkizlQo9+JWqYsf5nkoskaHUzreeNLUceUq5dnijnzLrTixsTExEL/DwAAAKvKanm1GAAAALoiyAIAAFAUQRYAAICiCLIAAAAURZAFAACgKIIsAAAARRFkAQAAKIogCwAAQFH+H9t7pYjA5SfRAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Graphical presentation of the above listed distribution.\n",
+ "\n",
+ "square = dict(markerfacecolor='r', markeredgecolor='r', marker='.')\n",
+ "berlin_preprocess['price'].plot(kind='box', xlim=(0, 1000), vert=False, flierprops=square, figsize=(16, 2));"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "SXvykVDh8wZQ"
+ },
+ "outputs": [],
+ "source": [
+ "# Finishing initial preprocessing with dropping the values above $400 and equal $0.\n",
+ "\n",
+ "berlin = berlin_preprocess.drop(berlin_preprocess[ (berlin_preprocess.price > 400) | (berlin_preprocess.price == 0) ].index, axis=0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "colab_type": "code",
+ "id": "kB-mUxbG9MHH",
+ "outputId": "758c1b9f-a2eb-43d6-df86-ba32e401846d"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(22441, 26)"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Checking the shape after initial preprocessing.\n",
+ "\n",
+ "berlin.shape"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "fnfUMqyeX40Z"
+ },
+ "source": [
+ "## Dealing with missing values"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 476
+ },
+ "colab_type": "code",
+ "id": "dYLc8nVfX3tf",
+ "outputId": "7eaabe88-9008-4f1b-e073-8ef227788f1e"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "space 8503\n",
+ "description 202\n",
+ "host_response_time 12845\n",
+ "host_response_rate 12846\n",
+ "host_has_profile_pic 25\n",
+ "neighbourhood_group_cleansed 0\n",
+ "latitude 0\n",
+ "longitude 0\n",
+ "property_type 0\n",
+ "room_type 0\n",
+ "accommodates 0\n",
+ "bathrooms 32\n",
+ "bedrooms 18\n",
+ "bed_type 0\n",
+ "amenities 0\n",
+ "square_feet 21996\n",
+ "price 0\n",
+ "cleaning_fee 0\n",
+ "security_deposit 0\n",
+ "extra_people 0\n",
+ "guests_included 0\n",
+ "minimum_nights 0\n",
+ "maximum_nights 0\n",
+ "instant_bookable 0\n",
+ "is_business_travel_ready 0\n",
+ "cancellation_policy 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Listing all the features with missing values.\n",
+ "\n",
+ "berlin.isna().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "9WQz0U0NYVZF"
+ },
+ "outputs": [],
+ "source": [
+ "# Dropping the columns with large number of missing values\n",
+ "\n",
+ "berlin = berlin.drop(columns=['space', 'host_response_time', 'host_response_rate', 'square_feet'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "colab_type": "code",
+ "id": "3-YHMAGLZDxB",
+ "outputId": "3784b349-5e13-4475-dffe-1fa41dfbd734"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " description | \n",
+ " host_has_profile_pic | \n",
+ " neighbourhood_group_cleansed | \n",
+ " latitude | \n",
+ " longitude | \n",
+ " property_type | \n",
+ " room_type | \n",
+ " accommodates | \n",
+ " bathrooms | \n",
+ " bedrooms | \n",
+ " bed_type | \n",
+ " amenities | \n",
+ " price | \n",
+ " cleaning_fee | \n",
+ " security_deposit | \n",
+ " extra_people | \n",
+ " guests_included | \n",
+ " minimum_nights | \n",
+ " maximum_nights | \n",
+ " instant_bookable | \n",
+ " is_business_travel_ready | \n",
+ " cancellation_policy | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 28711 | \n",
+ " Newly renovated, quiet 1-room apartment (appro... | \n",
+ " t | \n",
+ " Neukölln | \n",
+ " 52.486106 | \n",
+ " 13.434817 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 3 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {} | \n",
+ " 60.0 | \n",
+ " 30.0 | \n",
+ " 0.0 | \n",
+ " 10.0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 730 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 55298 | \n",
+ " The couch to sleep on is in the living room. T... | \n",
+ " t | \n",
+ " Tempelhof - Schöneberg | \n",
+ " 52.498379 | \n",
+ " 13.341816 | \n",
+ " Apartment | \n",
+ " Shared room | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Couch | \n",
+ " {} | \n",
+ " 88.0 | \n",
+ " 10.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 138955 | \n",
+ " quiet in the backyard with sunny balcony. slee... | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.490975 | \n",
+ " 13.376910 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " 2.0 | \n",
+ " Real Bed | \n",
+ " {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... | \n",
+ " 75.0 | \n",
+ " 40.0 | \n",
+ " 0.0 | \n",
+ " 10.0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 60 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 189596 | \n",
+ " Hello there, I am renting a very cosy 1,5 room... | \n",
+ " t | \n",
+ " Mitte | \n",
+ " 52.530464 | \n",
+ " 13.398893 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Futon | \n",
+ " {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... | \n",
+ " 80.0 | \n",
+ " 0.0 | \n",
+ " 100.0 | \n",
+ " 100.0 | \n",
+ " 2 | \n",
+ " 4 | \n",
+ " 365 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 245991 | \n",
+ " The 45-square meter apartments are self contai... | \n",
+ " t | \n",
+ " Reinickendorf | \n",
+ " 52.584223 | \n",
+ " 13.231135 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Pets all... | \n",
+ " 23.0 | \n",
+ " 0.0 | \n",
+ " 650.0 | \n",
+ " 0.0 | \n",
+ " 2 | \n",
+ " 30 | \n",
+ " 365 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 246007 | \n",
+ " The 45-square meter apartments are self contai... | \n",
+ " t | \n",
+ " Reinickendorf | \n",
+ " 52.582027 | \n",
+ " 13.230722 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Pets all... | \n",
+ " 19.0 | \n",
+ " 0.0 | \n",
+ " 550.0 | \n",
+ " 0.0 | \n",
+ " 2 | \n",
+ " 30 | \n",
+ " 365 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 260365 | \n",
+ " Wonderful old apartment in Schöneberg between ... | \n",
+ " t | \n",
+ " Tempelhof - Schöneberg | \n",
+ " 52.499264 | \n",
+ " 13.339909 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Kitchen,\"Washer / Drye... | \n",
+ " 69.0 | \n",
+ " 20.0 | \n",
+ " 300.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 90 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 274072 | \n",
+ " Hi! Check out our beautiful studio apartment i... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.549472 | \n",
+ " 13.417323 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Buzzer/w... | \n",
+ " 60.0 | \n",
+ " 30.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 365 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 302167 | \n",
+ " DETAILS: -47 m2 / 2 rooms/ max. of 4 persons ... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.533860 | \n",
+ " 13.427550 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Wifi,Kitchen,Heating,\"... | \n",
+ " 66.0 | \n",
+ " 35.0 | \n",
+ " 0.0 | \n",
+ " 15.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 365 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 323250 | \n",
+ " Die Unterkünfte liegen im Bezirk Neukölln mitt... | \n",
+ " t | \n",
+ " Neukölln | \n",
+ " 52.482506 | \n",
+ " 13.429294 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Internet,Wifi,Kitchen,Heating,\"Family/kid fri... | \n",
+ " 27.0 | \n",
+ " 0.0 | \n",
+ " 100.0 | \n",
+ " 14.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 31 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 323920 | \n",
+ " 2 rooms (1 bedroom and 1 living room/studio) a... | \n",
+ " t | \n",
+ " Neukölln | \n",
+ " 52.486491 | \n",
+ " 13.431478 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 2.0 | \n",
+ " Futon | \n",
+ " {Internet,Wifi,Kitchen,\"Washer / Dryer\",\"Pets ... | \n",
+ " 30.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 30 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 342637 | \n",
+ " Herzlich Willkommen, ich biete eine 2 Zimmerwo... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.541559 | \n",
+ " 13.422995 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Wifi,Kitchen,\"Buzzer/wireless i... | \n",
+ " 65.0 | \n",
+ " 40.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 10 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 507770 | \n",
+ " Beautiful loft with sunny balcony. Only 20 min... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.555459 | \n",
+ " 13.410143 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Internet,Wifi,Kitchen,Heating} | \n",
+ " 37.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 5.0 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 510715 | \n",
+ " Schöne große Wohnung in typischem, alten Berli... | \n",
+ " t | \n",
+ " Treptow - Köpenick | \n",
+ " 52.490040 | \n",
+ " 13.446871 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " 2.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,Kitchen,\"Smoking allowed\",\"Pets live on ... | \n",
+ " 50.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 7 | \n",
+ " 21 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 512476 | \n",
+ " Die Wohnung liegt in einer ruhigen Seitenstraß... | \n",
+ " t | \n",
+ " Tempelhof - Schöneberg | \n",
+ " 52.458851 | \n",
+ " 13.387254 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,Kitchen,Heating,Washer,\"Smoke detecto... | \n",
+ " 55.0 | \n",
+ " 30.0 | \n",
+ " 0.0 | \n",
+ " 16.0 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 1125 | \n",
+ " t | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 555352 | \n",
+ " Caravan House Apartment Seerose We offer an ex... | \n",
+ " t | \n",
+ " Treptow - Köpenick | \n",
+ " 52.345803 | \n",
+ " 13.643682 | \n",
+ " Camper/RV | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,\"Pets allowed\",\"Family/kid friendly\"} | \n",
+ " 60.0 | \n",
+ " 30.0 | \n",
+ " 150.0 | \n",
+ " 15.0 | \n",
+ " 3 | \n",
+ " 2 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 563505 | \n",
+ " Located in the heart of beautiful Charlottenbu... | \n",
+ " t | \n",
+ " Charlottenburg-Wilm. | \n",
+ " 52.503733 | \n",
+ " 13.309323 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Wifi,Kitchen,Heating,W... | \n",
+ " 75.0 | \n",
+ " 45.0 | \n",
+ " 0.0 | \n",
+ " 15.0 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 29 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 577689 | \n",
+ " Short version: Nice spacious apartment in a ce... | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.513119 | \n",
+ " 13.469740 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,Kitchen,\"Pets live on this property\",Ele... | \n",
+ " 65.0 | \n",
+ " 10.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 609459 | \n",
+ " Very nice 4-room apartment in the heart of Ber... | \n",
+ " t | \n",
+ " Tempelhof - Schöneberg | \n",
+ " 52.481203 | \n",
+ " 13.359007 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {} | \n",
+ " 70.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 20.0 | \n",
+ " 1 | \n",
+ " 7 | \n",
+ " 30 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 628727 | \n",
+ " the room looks out onto a tree-lined street, h... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.531721 | \n",
+ " 13.411291 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Internet,Wifi,Kitchen,\"Smoking allowed\",\"Buzz... | \n",
+ " 30.0 | \n",
+ " 20.0 | \n",
+ " 200.0 | \n",
+ " 15.0 | \n",
+ " 1 | \n",
+ " 6 | \n",
+ " 12 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 643058 | \n",
+ " Nettes Zimmer im beliebten Prenzlauer Berg sup... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.529877 | \n",
+ " 13.423125 | \n",
+ " Bed and breakfast | \n",
+ " Private room | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,\"Pets allowed\",\"Buzzer/wireless intercom... | \n",
+ " 25.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 5 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 726236 | \n",
+ " Bright, comfortable. fully equipped and right ... | \n",
+ " t | \n",
+ " Neukölln | \n",
+ " 52.470645 | \n",
+ " 13.446697 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 4 | \n",
+ " NaN | \n",
+ " 2.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Wifi,Kitchen,\"Buzzer/wireless i... | \n",
+ " 47.0 | \n",
+ " 45.0 | \n",
+ " 0.0 | \n",
+ " 10.0 | \n",
+ " 2 | \n",
+ " 30 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 958267 | \n",
+ " My cute and clean apartment is based in a very... | \n",
+ " t | \n",
+ " Mitte | \n",
+ " 52.530251 | \n",
+ " 13.340921 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,\"Free street parking\",\"Buzzer/wireless i... | \n",
+ " 35.0 | \n",
+ " 10.0 | \n",
+ " 0.0 | \n",
+ " 10.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 970871 | \n",
+ " I live in shared flat on a lively street in Kr... | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.500160 | \n",
+ " 13.438403 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,\"Smoking allowed\",\"Free street parking\",... | \n",
+ " 35.0 | \n",
+ " 10.0 | \n",
+ " 0.0 | \n",
+ " 10.0 | \n",
+ " 1 | \n",
+ " 6 | \n",
+ " 15 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 1103355 | \n",
+ " Die Wohnung liegt im Bezirk Berlin- Spandau, d... | \n",
+ " t | \n",
+ " Spandau | \n",
+ " 52.521373 | \n",
+ " 13.190238 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {} | \n",
+ " 77.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 1230836 | \n",
+ " Hallo, ich vermiete meine Einraumwohnung Berli... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.544526 | \n",
+ " 13.440108 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {} | \n",
+ " 77.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 23 | \n",
+ " 23 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 1304376 | \n",
+ " ein Gästezimmer in einer zwei- Zimmerwohnung m... | \n",
+ " t | \n",
+ " Lichtenberg | \n",
+ " 52.509184 | \n",
+ " 13.490027 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {} | \n",
+ " 76.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 1322019 | \n",
+ " You want the best of both worlds? Staying righ... | \n",
+ " t | \n",
+ " Neukölln | \n",
+ " 52.483652 | \n",
+ " 13.430076 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... | \n",
+ " 50.0 | \n",
+ " 0.0 | \n",
+ " 100.0 | \n",
+ " 25.0 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 1339858 | \n",
+ " A modern, cosy flat in Mitte, the most central... | \n",
+ " t | \n",
+ " Mitte | \n",
+ " 52.523152 | \n",
+ " 13.407555 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 3 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Wifi,Kitchen,\"Buzzer/wireless i... | \n",
+ " 90.0 | \n",
+ " 15.0 | \n",
+ " 0.0 | \n",
+ " 15.0 | \n",
+ " 2 | \n",
+ " 7 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 1660112 | \n",
+ " schöne wohnung | \n",
+ " t | \n",
+ " Lichtenberg | \n",
+ " 52.514360 | \n",
+ " 13.490989 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 1 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {} | \n",
+ " 150.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 3023254 | \n",
+ " A quiet location in the heart of Friedrichshai... | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.508610 | \n",
+ " 13.463191 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {Wifi,Kitchen,\"Pets allowed\",Heating,\"Family/k... | \n",
+ " 25.0 | \n",
+ " 10.0 | \n",
+ " 0.0 | \n",
+ " 20.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 30 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 4809108 | \n",
+ " Super zentrale Zimmer am Hackischer Markt in ... | \n",
+ " t | \n",
+ " Mitte | \n",
+ " 52.529419 | \n",
+ " 13.402798 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " NaN | \n",
+ " 1.0 | \n",
+ " Real Bed | \n",
+ " {TV,Internet,Wifi,Kitchen,Heating,\"Family/kid ... | \n",
+ " 59.0 | \n",
+ " 50.0 | \n",
+ " 0.0 | \n",
+ " 50.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 20 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " description \\\n",
+ "id \n",
+ "28711 Newly renovated, quiet 1-room apartment (appro... \n",
+ "55298 The couch to sleep on is in the living room. T... \n",
+ "138955 quiet in the backyard with sunny balcony. slee... \n",
+ "189596 Hello there, I am renting a very cosy 1,5 room... \n",
+ "245991 The 45-square meter apartments are self contai... \n",
+ "246007 The 45-square meter apartments are self contai... \n",
+ "260365 Wonderful old apartment in Schöneberg between ... \n",
+ "274072 Hi! Check out our beautiful studio apartment i... \n",
+ "302167 DETAILS: -47 m2 / 2 rooms/ max. of 4 persons ... \n",
+ "323250 Die Unterkünfte liegen im Bezirk Neukölln mitt... \n",
+ "323920 2 rooms (1 bedroom and 1 living room/studio) a... \n",
+ "342637 Herzlich Willkommen, ich biete eine 2 Zimmerwo... \n",
+ "507770 Beautiful loft with sunny balcony. Only 20 min... \n",
+ "510715 Schöne große Wohnung in typischem, alten Berli... \n",
+ "512476 Die Wohnung liegt in einer ruhigen Seitenstraß... \n",
+ "555352 Caravan House Apartment Seerose We offer an ex... \n",
+ "563505 Located in the heart of beautiful Charlottenbu... \n",
+ "577689 Short version: Nice spacious apartment in a ce... \n",
+ "609459 Very nice 4-room apartment in the heart of Ber... \n",
+ "628727 the room looks out onto a tree-lined street, h... \n",
+ "643058 Nettes Zimmer im beliebten Prenzlauer Berg sup... \n",
+ "726236 Bright, comfortable. fully equipped and right ... \n",
+ "958267 My cute and clean apartment is based in a very... \n",
+ "970871 I live in shared flat on a lively street in Kr... \n",
+ "1103355 Die Wohnung liegt im Bezirk Berlin- Spandau, d... \n",
+ "1230836 Hallo, ich vermiete meine Einraumwohnung Berli... \n",
+ "1304376 ein Gästezimmer in einer zwei- Zimmerwohnung m... \n",
+ "1322019 You want the best of both worlds? Staying righ... \n",
+ "1339858 A modern, cosy flat in Mitte, the most central... \n",
+ "1660112 schöne wohnung \n",
+ "3023254 A quiet location in the heart of Friedrichshai... \n",
+ "4809108 Super zentrale Zimmer am Hackischer Markt in ... \n",
+ "\n",
+ " host_has_profile_pic neighbourhood_group_cleansed latitude \\\n",
+ "id \n",
+ "28711 t Neukölln 52.486106 \n",
+ "55298 t Tempelhof - Schöneberg 52.498379 \n",
+ "138955 t Friedrichshain-Kreuzberg 52.490975 \n",
+ "189596 t Mitte 52.530464 \n",
+ "245991 t Reinickendorf 52.584223 \n",
+ "246007 t Reinickendorf 52.582027 \n",
+ "260365 t Tempelhof - Schöneberg 52.499264 \n",
+ "274072 t Pankow 52.549472 \n",
+ "302167 t Pankow 52.533860 \n",
+ "323250 t Neukölln 52.482506 \n",
+ "323920 t Neukölln 52.486491 \n",
+ "342637 t Pankow 52.541559 \n",
+ "507770 t Pankow 52.555459 \n",
+ "510715 t Treptow - Köpenick 52.490040 \n",
+ "512476 t Tempelhof - Schöneberg 52.458851 \n",
+ "555352 t Treptow - Köpenick 52.345803 \n",
+ "563505 t Charlottenburg-Wilm. 52.503733 \n",
+ "577689 t Friedrichshain-Kreuzberg 52.513119 \n",
+ "609459 t Tempelhof - Schöneberg 52.481203 \n",
+ "628727 t Pankow 52.531721 \n",
+ "643058 t Pankow 52.529877 \n",
+ "726236 t Neukölln 52.470645 \n",
+ "958267 t Mitte 52.530251 \n",
+ "970871 t Friedrichshain-Kreuzberg 52.500160 \n",
+ "1103355 t Spandau 52.521373 \n",
+ "1230836 t Pankow 52.544526 \n",
+ "1304376 t Lichtenberg 52.509184 \n",
+ "1322019 t Neukölln 52.483652 \n",
+ "1339858 t Mitte 52.523152 \n",
+ "1660112 t Lichtenberg 52.514360 \n",
+ "3023254 t Friedrichshain-Kreuzberg 52.508610 \n",
+ "4809108 t Mitte 52.529419 \n",
+ "\n",
+ " longitude property_type room_type accommodates \\\n",
+ "id \n",
+ "28711 13.434817 Apartment Entire home/apt 3 \n",
+ "55298 13.341816 Apartment Shared room 1 \n",
+ "138955 13.376910 Apartment Entire home/apt 4 \n",
+ "189596 13.398893 Apartment Entire home/apt 2 \n",
+ "245991 13.231135 Apartment Entire home/apt 2 \n",
+ "246007 13.230722 Apartment Entire home/apt 2 \n",
+ "260365 13.339909 Apartment Entire home/apt 2 \n",
+ "274072 13.417323 Apartment Entire home/apt 2 \n",
+ "302167 13.427550 Apartment Entire home/apt 4 \n",
+ "323250 13.429294 Apartment Private room 2 \n",
+ "323920 13.431478 Apartment Private room 2 \n",
+ "342637 13.422995 Apartment Entire home/apt 2 \n",
+ "507770 13.410143 Apartment Entire home/apt 2 \n",
+ "510715 13.446871 Apartment Entire home/apt 4 \n",
+ "512476 13.387254 Apartment Entire home/apt 4 \n",
+ "555352 13.643682 Camper/RV Entire home/apt 2 \n",
+ "563505 13.309323 Apartment Entire home/apt 4 \n",
+ "577689 13.469740 Apartment Entire home/apt 2 \n",
+ "609459 13.359007 Apartment Private room 2 \n",
+ "628727 13.411291 Apartment Private room 1 \n",
+ "643058 13.423125 Bed and breakfast Private room 1 \n",
+ "726236 13.446697 Apartment Entire home/apt 4 \n",
+ "958267 13.340921 Apartment Private room 2 \n",
+ "970871 13.438403 Apartment Private room 2 \n",
+ "1103355 13.190238 Apartment Private room 2 \n",
+ "1230836 13.440108 Apartment Private room 1 \n",
+ "1304376 13.490027 Apartment Private room 2 \n",
+ "1322019 13.430076 Apartment Entire home/apt 2 \n",
+ "1339858 13.407555 Apartment Entire home/apt 3 \n",
+ "1660112 13.490989 Apartment Private room 1 \n",
+ "3023254 13.463191 Apartment Private room 2 \n",
+ "4809108 13.402798 Apartment Private room 2 \n",
+ "\n",
+ " bathrooms bedrooms bed_type \\\n",
+ "id \n",
+ "28711 NaN 1.0 Real Bed \n",
+ "55298 NaN 1.0 Couch \n",
+ "138955 NaN 2.0 Real Bed \n",
+ "189596 NaN 1.0 Futon \n",
+ "245991 NaN 1.0 Real Bed \n",
+ "246007 NaN 1.0 Real Bed \n",
+ "260365 NaN 1.0 Real Bed \n",
+ "274072 NaN 1.0 Real Bed \n",
+ "302167 NaN 1.0 Real Bed \n",
+ "323250 NaN 1.0 Real Bed \n",
+ "323920 NaN 2.0 Futon \n",
+ "342637 NaN 1.0 Real Bed \n",
+ "507770 NaN 1.0 Real Bed \n",
+ "510715 NaN 2.0 Real Bed \n",
+ "512476 NaN 1.0 Real Bed \n",
+ "555352 NaN 1.0 Real Bed \n",
+ "563505 NaN 1.0 Real Bed \n",
+ "577689 NaN 1.0 Real Bed \n",
+ "609459 NaN 1.0 Real Bed \n",
+ "628727 NaN 1.0 Real Bed \n",
+ "643058 NaN 1.0 Real Bed \n",
+ "726236 NaN 2.0 Real Bed \n",
+ "958267 NaN 1.0 Real Bed \n",
+ "970871 NaN 1.0 Real Bed \n",
+ "1103355 NaN 1.0 Real Bed \n",
+ "1230836 NaN 1.0 Real Bed \n",
+ "1304376 NaN 1.0 Real Bed \n",
+ "1322019 NaN 1.0 Real Bed \n",
+ "1339858 NaN 1.0 Real Bed \n",
+ "1660112 NaN 1.0 Real Bed \n",
+ "3023254 NaN 1.0 Real Bed \n",
+ "4809108 NaN 1.0 Real Bed \n",
+ "\n",
+ " amenities price \\\n",
+ "id \n",
+ "28711 {} 60.0 \n",
+ "55298 {} 88.0 \n",
+ "138955 {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... 75.0 \n",
+ "189596 {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... 80.0 \n",
+ "245991 {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Pets all... 23.0 \n",
+ "246007 {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Pets all... 19.0 \n",
+ "260365 {TV,\"Cable TV\",Internet,Kitchen,\"Washer / Drye... 69.0 \n",
+ "274072 {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Buzzer/w... 60.0 \n",
+ "302167 {TV,\"Cable TV\",Internet,Wifi,Kitchen,Heating,\"... 66.0 \n",
+ "323250 {Internet,Wifi,Kitchen,Heating,\"Family/kid fri... 27.0 \n",
+ "323920 {Internet,Wifi,Kitchen,\"Washer / Dryer\",\"Pets ... 30.0 \n",
+ "342637 {TV,\"Cable TV\",Wifi,Kitchen,\"Buzzer/wireless i... 65.0 \n",
+ "507770 {Internet,Wifi,Kitchen,Heating} 37.0 \n",
+ "510715 {Wifi,Kitchen,\"Smoking allowed\",\"Pets live on ... 50.0 \n",
+ "512476 {TV,Wifi,Kitchen,Heating,Washer,\"Smoke detecto... 55.0 \n",
+ "555352 {TV,Wifi,\"Pets allowed\",\"Family/kid friendly\"} 60.0 \n",
+ "563505 {TV,\"Cable TV\",Internet,Wifi,Kitchen,Heating,W... 75.0 \n",
+ "577689 {Wifi,Kitchen,\"Pets live on this property\",Ele... 65.0 \n",
+ "609459 {} 70.0 \n",
+ "628727 {Internet,Wifi,Kitchen,\"Smoking allowed\",\"Buzz... 30.0 \n",
+ "643058 {Wifi,\"Pets allowed\",\"Buzzer/wireless intercom... 25.0 \n",
+ "726236 {TV,\"Cable TV\",Wifi,Kitchen,\"Buzzer/wireless i... 47.0 \n",
+ "958267 {Wifi,\"Free street parking\",\"Buzzer/wireless i... 35.0 \n",
+ "970871 {Wifi,\"Smoking allowed\",\"Free street parking\",... 35.0 \n",
+ "1103355 {} 77.0 \n",
+ "1230836 {} 77.0 \n",
+ "1304376 {} 76.0 \n",
+ "1322019 {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... 50.0 \n",
+ "1339858 {TV,\"Cable TV\",Wifi,Kitchen,\"Buzzer/wireless i... 90.0 \n",
+ "1660112 {} 150.0 \n",
+ "3023254 {Wifi,Kitchen,\"Pets allowed\",Heating,\"Family/k... 25.0 \n",
+ "4809108 {TV,Internet,Wifi,Kitchen,Heating,\"Family/kid ... 59.0 \n",
+ "\n",
+ " cleaning_fee security_deposit extra_people guests_included \\\n",
+ "id \n",
+ "28711 30.0 0.0 10.0 2 \n",
+ "55298 10.0 0.0 0.0 1 \n",
+ "138955 40.0 0.0 10.0 2 \n",
+ "189596 0.0 100.0 100.0 2 \n",
+ "245991 0.0 650.0 0.0 2 \n",
+ "246007 0.0 550.0 0.0 2 \n",
+ "260365 20.0 300.0 0.0 1 \n",
+ "274072 30.0 0.0 0.0 1 \n",
+ "302167 35.0 0.0 15.0 1 \n",
+ "323250 0.0 100.0 14.0 1 \n",
+ "323920 0.0 0.0 0.0 1 \n",
+ "342637 40.0 0.0 0.0 1 \n",
+ "507770 0.0 0.0 5.0 1 \n",
+ "510715 0.0 0.0 0.0 1 \n",
+ "512476 30.0 0.0 16.0 2 \n",
+ "555352 30.0 150.0 15.0 3 \n",
+ "563505 45.0 0.0 15.0 2 \n",
+ "577689 10.0 0.0 0.0 1 \n",
+ "609459 0.0 0.0 20.0 1 \n",
+ "628727 20.0 200.0 15.0 1 \n",
+ "643058 0.0 0.0 0.0 1 \n",
+ "726236 45.0 0.0 10.0 2 \n",
+ "958267 10.0 0.0 10.0 1 \n",
+ "970871 10.0 0.0 10.0 1 \n",
+ "1103355 0.0 0.0 0.0 1 \n",
+ "1230836 0.0 0.0 0.0 1 \n",
+ "1304376 0.0 0.0 0.0 1 \n",
+ "1322019 0.0 100.0 25.0 2 \n",
+ "1339858 15.0 0.0 15.0 2 \n",
+ "1660112 0.0 0.0 0.0 1 \n",
+ "3023254 10.0 0.0 20.0 1 \n",
+ "4809108 50.0 0.0 50.0 1 \n",
+ "\n",
+ " minimum_nights maximum_nights instant_bookable \\\n",
+ "id \n",
+ "28711 2 730 f \n",
+ "55298 2 3 f \n",
+ "138955 2 60 f \n",
+ "189596 4 365 f \n",
+ "245991 30 365 t \n",
+ "246007 30 365 t \n",
+ "260365 4 90 f \n",
+ "274072 3 365 t \n",
+ "302167 3 365 f \n",
+ "323250 3 31 f \n",
+ "323920 3 30 f \n",
+ "342637 10 1125 f \n",
+ "507770 5 1125 f \n",
+ "510715 7 21 f \n",
+ "512476 3 1125 t \n",
+ "555352 2 1125 f \n",
+ "563505 3 29 f \n",
+ "577689 2 1125 f \n",
+ "609459 7 30 f \n",
+ "628727 6 12 f \n",
+ "643058 3 5 f \n",
+ "726236 30 1125 f \n",
+ "958267 3 1125 f \n",
+ "970871 6 15 f \n",
+ "1103355 1 1125 f \n",
+ "1230836 23 23 f \n",
+ "1304376 1 1125 f \n",
+ "1322019 2 1125 f \n",
+ "1339858 7 1125 f \n",
+ "1660112 1 1125 f \n",
+ "3023254 1 30 f \n",
+ "4809108 3 20 t \n",
+ "\n",
+ " is_business_travel_ready cancellation_policy \n",
+ "id \n",
+ "28711 f flexible \n",
+ "55298 f moderate \n",
+ "138955 f moderate \n",
+ "189596 f moderate \n",
+ "245991 f strict_14_with_grace_period \n",
+ "246007 f strict_14_with_grace_period \n",
+ "260365 f flexible \n",
+ "274072 f strict_14_with_grace_period \n",
+ "302167 f strict_14_with_grace_period \n",
+ "323250 f strict_14_with_grace_period \n",
+ "323920 f moderate \n",
+ "342637 f moderate \n",
+ "507770 f strict_14_with_grace_period \n",
+ "510715 f strict_14_with_grace_period \n",
+ "512476 f moderate \n",
+ "555352 f strict_14_with_grace_period \n",
+ "563505 f strict_14_with_grace_period \n",
+ "577689 f moderate \n",
+ "609459 f flexible \n",
+ "628727 f strict_14_with_grace_period \n",
+ "643058 f moderate \n",
+ "726236 f strict_14_with_grace_period \n",
+ "958267 f strict_14_with_grace_period \n",
+ "970871 f strict_14_with_grace_period \n",
+ "1103355 f flexible \n",
+ "1230836 f strict_14_with_grace_period \n",
+ "1304376 f flexible \n",
+ "1322019 f flexible \n",
+ "1339858 f strict_14_with_grace_period \n",
+ "1660112 f flexible \n",
+ "3023254 f moderate \n",
+ "4809108 f strict_14_with_grace_period "
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Checking the instances with missing bathroom values.\n",
+ "\n",
+ "berlin.loc[berlin['bathrooms'].isna()]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "colab_type": "code",
+ "id": "DKbsIfW9Z5Lc",
+ "outputId": "3592b3a7-5550-4d1f-cb4e-bb07703401d1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " description | \n",
+ " host_has_profile_pic | \n",
+ " neighbourhood_group_cleansed | \n",
+ " latitude | \n",
+ " longitude | \n",
+ " property_type | \n",
+ " room_type | \n",
+ " accommodates | \n",
+ " bathrooms | \n",
+ " bedrooms | \n",
+ " bed_type | \n",
+ " amenities | \n",
+ " price | \n",
+ " cleaning_fee | \n",
+ " security_deposit | \n",
+ " extra_people | \n",
+ " guests_included | \n",
+ " minimum_nights | \n",
+ " maximum_nights | \n",
+ " instant_bookable | \n",
+ " is_business_travel_ready | \n",
+ " cancellation_policy | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 17904 | \n",
+ " - beautiful studio apt in downtown Berlin - br... | \n",
+ " t | \n",
+ " Neukölln | \n",
+ " 52.495476 | \n",
+ " 13.421821 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,Kitchen,\"Free street parking\",\"Buzzer... | \n",
+ " 49.0 | \n",
+ " 50.0 | \n",
+ " 0.0 | \n",
+ " 15.0 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 90 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 1757613 | \n",
+ " Make yourself comfortable in a beautiful moder... | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.513294 | \n",
+ " 13.459891 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Wifi,\"Wheelchair acces... | \n",
+ " 60.0 | \n",
+ " 30.0 | \n",
+ " 250.0 | \n",
+ " 10.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1125 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 2094536 | \n",
+ " The fine and inviting one-room-apartment is to... | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.513786 | \n",
+ " 13.459694 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Wifi,Kitchen,\"Buzzer/wireless i... | \n",
+ " 65.0 | \n",
+ " 20.0 | \n",
+ " 200.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 25 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 3429176 | \n",
+ " This is an apartment which is directly adheren... | \n",
+ " t | \n",
+ " Mitte | \n",
+ " 52.509086 | \n",
+ " 13.402309 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Wifi,Kitchen,Heating,E... | \n",
+ " 65.0 | \n",
+ " 30.0 | \n",
+ " 0.0 | \n",
+ " 15.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1125 | \n",
+ " t | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 7593011 | \n",
+ " This flat is a quiet, spacious and very bright... | \n",
+ " t | \n",
+ " Tempelhof - Schöneberg | \n",
+ " 52.465299 | \n",
+ " 13.341703 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Buzzer/w... | \n",
+ " 40.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 14 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 7672145 | \n",
+ " The apartment (47m²; kitchen, bathroom, living... | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.521979 | \n",
+ " 13.432972 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {Wifi,Kitchen,Washer} | \n",
+ " 50.0 | \n",
+ " 0.0 | \n",
+ " 100.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1125 | \n",
+ " t | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 8919834 | \n",
+ " Gemütlich und zentral. Direkt im friedrichshai... | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.509925 | \n",
+ " 13.462696 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {Internet,Wifi,Kitchen,Heating,\"Family/kid fri... | \n",
+ " 25.0 | \n",
+ " 0.0 | \n",
+ " 200.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 12134242 | \n",
+ " Die Wohung befindet sich in einer ruhigen Seit... | \n",
+ " t | \n",
+ " Neukölln | \n",
+ " 52.480177 | \n",
+ " 13.433819 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 4 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,Kitchen,\"Buzzer/wireless intercom\",He... | \n",
+ " 29.0 | \n",
+ " 40.0 | \n",
+ " 800.0 | \n",
+ " 16.0 | \n",
+ " 1 | \n",
+ " 25 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 12196527 | \n",
+ " An awesome home near Stegliz Business street i... | \n",
+ " t | \n",
+ " Tempelhof - Schöneberg | \n",
+ " 52.471997 | \n",
+ " 13.330821 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {Kitchen,\"Hot tub\",Heating,\"Family/kid friendl... | \n",
+ " 35.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1125 | \n",
+ " t | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 12999963 | \n",
+ " Das 1 Zimmer Apartment ( geeignet für 3 Erwach... | \n",
+ " t | \n",
+ " Steglitz - Zehlendorf | \n",
+ " 52.437027 | \n",
+ " 13.223444 | \n",
+ " Condominium | \n",
+ " Entire home/apt | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Indoor f... | \n",
+ " 95.0 | \n",
+ " 58.0 | \n",
+ " 150.0 | \n",
+ " 20.0 | \n",
+ " 4 | \n",
+ " 3 | \n",
+ " 1125 | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 17728282 | \n",
+ " Private room in a shared apartment | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.500725 | \n",
+ " 13.409222 | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " 1 | \n",
+ " 1.5 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {Wifi,Kitchen,Elevator,Heating,Washer,Essentia... | \n",
+ " 39.0 | \n",
+ " 36.0 | \n",
+ " 0.0 | \n",
+ " 13.0 | \n",
+ " 1 | \n",
+ " 15 | \n",
+ " 1125 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 28302220 | \n",
+ " You are seeking a home away from home for a fe... | \n",
+ " t | \n",
+ " Lichtenberg | \n",
+ " 52.479620 | \n",
+ " 13.524906 | \n",
+ " Serviced apartment | \n",
+ " Entire home/apt | \n",
+ " 1 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,Kitchen,Heating,Washer,Dryer,\"Smoke d... | \n",
+ " 47.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 7 | \n",
+ " 180 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 28302855 | \n",
+ " You are seeking a home away from home for a fe... | \n",
+ " t | \n",
+ " Lichtenberg | \n",
+ " 52.480511 | \n",
+ " 13.526313 | \n",
+ " Serviced apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,Kitchen,Heating,Washer,Dryer,\"Smoke d... | \n",
+ " 74.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 7 | \n",
+ " 180 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 28324659 | \n",
+ " You are seeking a home away from home for a fe... | \n",
+ " t | \n",
+ " Lichtenberg | \n",
+ " 52.479976 | \n",
+ " 13.524899 | \n",
+ " Serviced apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,Kitchen,Heating,Washer,Dryer,\"Smoke d... | \n",
+ " 57.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 7 | \n",
+ " 180 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 28328056 | \n",
+ " You are seeking a home away from home for a fe... | \n",
+ " t | \n",
+ " Charlottenburg-Wilm. | \n",
+ " 52.507085 | \n",
+ " 13.327583 | \n",
+ " Serviced apartment | \n",
+ " Entire home/apt | \n",
+ " 1 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,Kitchen,\"Paid parking off premises\",H... | \n",
+ " 72.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 180 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 28328620 | \n",
+ " You are seeking a home away from home for a fe... | \n",
+ " t | \n",
+ " Charlottenburg-Wilm. | \n",
+ " 52.506717 | \n",
+ " 13.329147 | \n",
+ " Serviced apartment | \n",
+ " Entire home/apt | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,Kitchen,\"Paid parking off premises\",H... | \n",
+ " 79.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 7 | \n",
+ " 180 | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 28365580 | \n",
+ " The flat is suitable for those, who look for a... | \n",
+ " t | \n",
+ " Friedrichshain-Kreuzberg | \n",
+ " 52.521219 | \n",
+ " 13.434894 | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {Wifi,Kitchen,\"Smoking allowed\",\"Pets allowed\"... | \n",
+ " 34.0 | \n",
+ " 8.0 | \n",
+ " 0.0 | \n",
+ " 8.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 30 | \n",
+ " t | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ " | 28395262 | \n",
+ " helles sehr schönes zimmer mit grißer schlafco... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " 52.545139 | \n",
+ " 13.412284 | \n",
+ " Bed and breakfast | \n",
+ " Private room | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " NaN | \n",
+ " Real Bed | \n",
+ " {TV,Wifi,Kitchen,Breakfast,\"Indoor fireplace\",... | \n",
+ " 50.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1125 | \n",
+ " t | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " description \\\n",
+ "id \n",
+ "17904 - beautiful studio apt in downtown Berlin - br... \n",
+ "1757613 Make yourself comfortable in a beautiful moder... \n",
+ "2094536 The fine and inviting one-room-apartment is to... \n",
+ "3429176 This is an apartment which is directly adheren... \n",
+ "7593011 This flat is a quiet, spacious and very bright... \n",
+ "7672145 The apartment (47m²; kitchen, bathroom, living... \n",
+ "8919834 Gemütlich und zentral. Direkt im friedrichshai... \n",
+ "12134242 Die Wohung befindet sich in einer ruhigen Seit... \n",
+ "12196527 An awesome home near Stegliz Business street i... \n",
+ "12999963 Das 1 Zimmer Apartment ( geeignet für 3 Erwach... \n",
+ "17728282 Private room in a shared apartment \n",
+ "28302220 You are seeking a home away from home for a fe... \n",
+ "28302855 You are seeking a home away from home for a fe... \n",
+ "28324659 You are seeking a home away from home for a fe... \n",
+ "28328056 You are seeking a home away from home for a fe... \n",
+ "28328620 You are seeking a home away from home for a fe... \n",
+ "28365580 The flat is suitable for those, who look for a... \n",
+ "28395262 helles sehr schönes zimmer mit grißer schlafco... \n",
+ "\n",
+ " host_has_profile_pic neighbourhood_group_cleansed latitude \\\n",
+ "id \n",
+ "17904 t Neukölln 52.495476 \n",
+ "1757613 t Friedrichshain-Kreuzberg 52.513294 \n",
+ "2094536 t Friedrichshain-Kreuzberg 52.513786 \n",
+ "3429176 t Mitte 52.509086 \n",
+ "7593011 t Tempelhof - Schöneberg 52.465299 \n",
+ "7672145 t Friedrichshain-Kreuzberg 52.521979 \n",
+ "8919834 t Friedrichshain-Kreuzberg 52.509925 \n",
+ "12134242 t Neukölln 52.480177 \n",
+ "12196527 t Tempelhof - Schöneberg 52.471997 \n",
+ "12999963 t Steglitz - Zehlendorf 52.437027 \n",
+ "17728282 t Friedrichshain-Kreuzberg 52.500725 \n",
+ "28302220 t Lichtenberg 52.479620 \n",
+ "28302855 t Lichtenberg 52.480511 \n",
+ "28324659 t Lichtenberg 52.479976 \n",
+ "28328056 t Charlottenburg-Wilm. 52.507085 \n",
+ "28328620 t Charlottenburg-Wilm. 52.506717 \n",
+ "28365580 t Friedrichshain-Kreuzberg 52.521219 \n",
+ "28395262 t Pankow 52.545139 \n",
+ "\n",
+ " longitude property_type room_type accommodates \\\n",
+ "id \n",
+ "17904 13.421821 Apartment Entire home/apt 2 \n",
+ "1757613 13.459891 Apartment Entire home/apt 2 \n",
+ "2094536 13.459694 Apartment Entire home/apt 2 \n",
+ "3429176 13.402309 Apartment Entire home/apt 2 \n",
+ "7593011 13.341703 Apartment Entire home/apt 2 \n",
+ "7672145 13.432972 Apartment Entire home/apt 2 \n",
+ "8919834 13.462696 Apartment Entire home/apt 3 \n",
+ "12134242 13.433819 Apartment Entire home/apt 4 \n",
+ "12196527 13.330821 Apartment Entire home/apt 3 \n",
+ "12999963 13.223444 Condominium Entire home/apt 3 \n",
+ "17728282 13.409222 Apartment Private room 1 \n",
+ "28302220 13.524906 Serviced apartment Entire home/apt 1 \n",
+ "28302855 13.526313 Serviced apartment Entire home/apt 2 \n",
+ "28324659 13.524899 Serviced apartment Entire home/apt 2 \n",
+ "28328056 13.327583 Serviced apartment Entire home/apt 1 \n",
+ "28328620 13.329147 Serviced apartment Entire home/apt 2 \n",
+ "28365580 13.434894 Apartment Entire home/apt 3 \n",
+ "28395262 13.412284 Bed and breakfast Private room 2 \n",
+ "\n",
+ " bathrooms bedrooms bed_type \\\n",
+ "id \n",
+ "17904 1.0 NaN Real Bed \n",
+ "1757613 1.0 NaN Real Bed \n",
+ "2094536 1.0 NaN Real Bed \n",
+ "3429176 1.0 NaN Real Bed \n",
+ "7593011 1.0 NaN Real Bed \n",
+ "7672145 1.0 NaN Real Bed \n",
+ "8919834 1.0 NaN Real Bed \n",
+ "12134242 1.0 NaN Real Bed \n",
+ "12196527 1.0 NaN Real Bed \n",
+ "12999963 1.0 NaN Real Bed \n",
+ "17728282 1.5 NaN Real Bed \n",
+ "28302220 1.0 NaN Real Bed \n",
+ "28302855 1.0 NaN Real Bed \n",
+ "28324659 1.0 NaN Real Bed \n",
+ "28328056 1.0 NaN Real Bed \n",
+ "28328620 1.0 NaN Real Bed \n",
+ "28365580 1.0 NaN Real Bed \n",
+ "28395262 1.0 NaN Real Bed \n",
+ "\n",
+ " amenities price \\\n",
+ "id \n",
+ "17904 {TV,Wifi,Kitchen,\"Free street parking\",\"Buzzer... 49.0 \n",
+ "1757613 {TV,\"Cable TV\",Internet,Wifi,\"Wheelchair acces... 60.0 \n",
+ "2094536 {TV,\"Cable TV\",Wifi,Kitchen,\"Buzzer/wireless i... 65.0 \n",
+ "3429176 {TV,\"Cable TV\",Internet,Wifi,Kitchen,Heating,E... 65.0 \n",
+ "7593011 {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Buzzer/w... 40.0 \n",
+ "7672145 {Wifi,Kitchen,Washer} 50.0 \n",
+ "8919834 {Internet,Wifi,Kitchen,Heating,\"Family/kid fri... 25.0 \n",
+ "12134242 {TV,Wifi,Kitchen,\"Buzzer/wireless intercom\",He... 29.0 \n",
+ "12196527 {Kitchen,\"Hot tub\",Heating,\"Family/kid friendl... 35.0 \n",
+ "12999963 {TV,\"Cable TV\",Internet,Wifi,Kitchen,\"Indoor f... 95.0 \n",
+ "17728282 {Wifi,Kitchen,Elevator,Heating,Washer,Essentia... 39.0 \n",
+ "28302220 {TV,Wifi,Kitchen,Heating,Washer,Dryer,\"Smoke d... 47.0 \n",
+ "28302855 {TV,Wifi,Kitchen,Heating,Washer,Dryer,\"Smoke d... 74.0 \n",
+ "28324659 {TV,Wifi,Kitchen,Heating,Washer,Dryer,\"Smoke d... 57.0 \n",
+ "28328056 {TV,Wifi,Kitchen,\"Paid parking off premises\",H... 72.0 \n",
+ "28328620 {TV,Wifi,Kitchen,\"Paid parking off premises\",H... 79.0 \n",
+ "28365580 {Wifi,Kitchen,\"Smoking allowed\",\"Pets allowed\"... 34.0 \n",
+ "28395262 {TV,Wifi,Kitchen,Breakfast,\"Indoor fireplace\",... 50.0 \n",
+ "\n",
+ " cleaning_fee security_deposit extra_people guests_included \\\n",
+ "id \n",
+ "17904 50.0 0.0 15.0 1 \n",
+ "1757613 30.0 250.0 10.0 1 \n",
+ "2094536 20.0 200.0 0.0 1 \n",
+ "3429176 30.0 0.0 15.0 1 \n",
+ "7593011 0.0 0.0 0.0 1 \n",
+ "7672145 0.0 100.0 0.0 1 \n",
+ "8919834 0.0 200.0 0.0 1 \n",
+ "12134242 40.0 800.0 16.0 1 \n",
+ "12196527 0.0 0.0 0.0 1 \n",
+ "12999963 58.0 150.0 20.0 4 \n",
+ "17728282 36.0 0.0 13.0 1 \n",
+ "28302220 0.0 0.0 0.0 1 \n",
+ "28302855 0.0 0.0 0.0 1 \n",
+ "28324659 0.0 0.0 0.0 1 \n",
+ "28328056 0.0 0.0 0.0 1 \n",
+ "28328620 0.0 0.0 0.0 1 \n",
+ "28365580 8.0 0.0 8.0 1 \n",
+ "28395262 0.0 0.0 0.0 1 \n",
+ "\n",
+ " minimum_nights maximum_nights instant_bookable \\\n",
+ "id \n",
+ "17904 5 90 f \n",
+ "1757613 1 1125 t \n",
+ "2094536 3 25 f \n",
+ "3429176 1 1125 t \n",
+ "7593011 14 1125 f \n",
+ "7672145 1 1125 t \n",
+ "8919834 1 1125 f \n",
+ "12134242 25 1125 f \n",
+ "12196527 1 1125 t \n",
+ "12999963 3 1125 f \n",
+ "17728282 15 1125 t \n",
+ "28302220 7 180 t \n",
+ "28302855 7 180 t \n",
+ "28324659 7 180 t \n",
+ "28328056 4 180 t \n",
+ "28328620 7 180 t \n",
+ "28365580 3 30 t \n",
+ "28395262 1 1125 t \n",
+ "\n",
+ " is_business_travel_ready cancellation_policy \n",
+ "id \n",
+ "17904 f strict_14_with_grace_period \n",
+ "1757613 f strict_14_with_grace_period \n",
+ "2094536 f strict_14_with_grace_period \n",
+ "3429176 f flexible \n",
+ "7593011 f flexible \n",
+ "7672145 f flexible \n",
+ "8919834 f flexible \n",
+ "12134242 f moderate \n",
+ "12196527 f flexible \n",
+ "12999963 f strict_14_with_grace_period \n",
+ "17728282 f strict_14_with_grace_period \n",
+ "28302220 f strict_14_with_grace_period \n",
+ "28302855 f strict_14_with_grace_period \n",
+ "28324659 f strict_14_with_grace_period \n",
+ "28328056 f strict_14_with_grace_period \n",
+ "28328620 f strict_14_with_grace_period \n",
+ "28365580 f moderate \n",
+ "28395262 f flexible "
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# And with missing bedroom values.\n",
+ "\n",
+ "berlin.loc[berlin['bedrooms'].isna()]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "Lytt2EpKajGW"
+ },
+ "outputs": [],
+ "source": [
+ "# It seems that most common value for bathroom is 1 so we are filling that value with nans.\n",
+ "# Using 0 bedrooms for missing bedroom values - most likely studio apartments.\n",
+ "\n",
+ "berlin['bathrooms'] = berlin['bathrooms'].fillna(1.0)\n",
+ "berlin['bedrooms'] = berlin['bedrooms'].fillna(0.0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "rkEXDe7VbWbj"
+ },
+ "outputs": [],
+ "source": [
+ "# Finally filling out NaN on profile pic with f values.\n",
+ "\n",
+ "berlin['host_has_profile_pic'] = berlin['host_has_profile_pic'].fillna(value='f')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 408
+ },
+ "colab_type": "code",
+ "id": "ymqL9JEgbsD3",
+ "outputId": "5a20e820-dd26-49fa-c3d0-b3e4adeb07f3"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "description 202\n",
+ "host_has_profile_pic 0\n",
+ "neighbourhood_group_cleansed 0\n",
+ "latitude 0\n",
+ "longitude 0\n",
+ "property_type 0\n",
+ "room_type 0\n",
+ "accommodates 0\n",
+ "bathrooms 0\n",
+ "bedrooms 0\n",
+ "bed_type 0\n",
+ "amenities 0\n",
+ "price 0\n",
+ "cleaning_fee 0\n",
+ "security_deposit 0\n",
+ "extra_people 0\n",
+ "guests_included 0\n",
+ "minimum_nights 0\n",
+ "maximum_nights 0\n",
+ "instant_bookable 0\n",
+ "is_business_travel_ready 0\n",
+ "cancellation_policy 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Checking our data after this second step of cleaning.\n",
+ "\n",
+ "berlin.isna().sum()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "AW0FyiL7XNVv"
+ },
+ "source": [
+ "# Baseline and initial model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "colab_type": "code",
+ "id": "Oz2w0vRQXQat",
+ "outputId": "c1d76b6f-9a12-4d99-8d26-17c2144902ba"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "57.58437681030257"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Actual baseline mean of the price.\n",
+ "\n",
+ "berlin['price'].mean()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "77SAD8ZedhFS"
+ },
+ "source": [
+ "## Quick and dirty model using only numerical and categorical data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 117,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "7X9VBEqf-ugM"
+ },
+ "outputs": [],
+ "source": [
+ "# Splitting our original dataframe into numerical and non numerical components.\n",
+ "\n",
+ "berlin_numerical = berlin.select_dtypes(include='number')\n",
+ "berlin_non_numerical = berlin.select_dtypes(exclude='number')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 118,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 235
+ },
+ "colab_type": "code",
+ "id": "GnyvTzGwJeYI",
+ "outputId": "cebd3491-1f1c-42b1-e17d-b7c7bab8328d"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " latitude | \n",
+ " longitude | \n",
+ " accommodates | \n",
+ " bathrooms | \n",
+ " bedrooms | \n",
+ " price | \n",
+ " cleaning_fee | \n",
+ " security_deposit | \n",
+ " extra_people | \n",
+ " guests_included | \n",
+ " minimum_nights | \n",
+ " maximum_nights | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " 52.534537 | \n",
+ " 13.402557 | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 60.0 | \n",
+ " 30.0 | \n",
+ " 200.0 | \n",
+ " 28.0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 1125 | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " 52.548513 | \n",
+ " 13.404553 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 17.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 40 | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " 52.534996 | \n",
+ " 13.417579 | \n",
+ " 4 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 90.0 | \n",
+ " 50.0 | \n",
+ " 200.0 | \n",
+ " 20.0 | \n",
+ " 2 | \n",
+ " 62 | \n",
+ " 1125 | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " 52.498855 | \n",
+ " 13.349065 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 26.0 | \n",
+ " 30.0 | \n",
+ " 250.0 | \n",
+ " 18.0 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 360 | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " 52.543157 | \n",
+ " 13.415091 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 42.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 24.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " latitude longitude accommodates bathrooms bedrooms price \\\n",
+ "id \n",
+ "2015 52.534537 13.402557 3 1.0 1.0 60.0 \n",
+ "2695 52.548513 13.404553 2 1.0 1.0 17.0 \n",
+ "3176 52.534996 13.417579 4 1.0 1.0 90.0 \n",
+ "3309 52.498855 13.349065 2 1.0 1.0 26.0 \n",
+ "7071 52.543157 13.415091 2 1.0 1.0 42.0 \n",
+ "\n",
+ " cleaning_fee security_deposit extra_people guests_included \\\n",
+ "id \n",
+ "2015 30.0 200.0 28.0 1 \n",
+ "2695 0.0 0.0 0.0 1 \n",
+ "3176 50.0 200.0 20.0 2 \n",
+ "3309 30.0 250.0 18.0 1 \n",
+ "7071 0.0 0.0 24.0 1 \n",
+ "\n",
+ " minimum_nights maximum_nights \n",
+ "id \n",
+ "2015 4 1125 \n",
+ "2695 2 40 \n",
+ "3176 62 1125 \n",
+ "3309 5 360 \n",
+ "7071 2 10 "
+ ]
+ },
+ "execution_count": 118,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "berlin_numerical.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "IiKahBGqP3AD"
+ },
+ "source": [
+ "### Engineering couple of features"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "7WiaMOnIJkOd"
+ },
+ "outputs": [],
+ "source": [
+ "# Adding two features using numerical data only.\n",
+ "# One will show what would be an average cost per day at full occupancy.\n",
+ "# Second feature shows what is the minimum expense out of pocket if you decide\n",
+ "# to rent that specific space. \n",
+ "\n",
+ "#berlin_numerical['price_per_person'] = berlin_numerical['price'] / berlin_numerical['accommodates']\n",
+ "#berlin_numerical['minimum_expenditure'] = berlin_numerical['price'] * berlin_numerical['minimum_nights']\n",
+ "\n",
+ "### Using these features created big leakeage into the data and produced r^2 scores of 0.98 - 1."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 235
+ },
+ "colab_type": "code",
+ "id": "2c7uzpXdJ8Yc",
+ "outputId": "068570bc-0a55-4168-8993-d229f5e6041e"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " latitude | \n",
+ " longitude | \n",
+ " accommodates | \n",
+ " bathrooms | \n",
+ " bedrooms | \n",
+ " price | \n",
+ " cleaning_fee | \n",
+ " security_deposit | \n",
+ " extra_people | \n",
+ " guests_included | \n",
+ " minimum_nights | \n",
+ " maximum_nights | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " 52.534537 | \n",
+ " 13.402557 | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 60.0 | \n",
+ " 30.0 | \n",
+ " 200.0 | \n",
+ " 28.0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 1125 | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " 52.548513 | \n",
+ " 13.404553 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 17.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 40 | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " 52.534996 | \n",
+ " 13.417579 | \n",
+ " 4 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 90.0 | \n",
+ " 50.0 | \n",
+ " 200.0 | \n",
+ " 20.0 | \n",
+ " 2 | \n",
+ " 62 | \n",
+ " 1125 | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " 52.498855 | \n",
+ " 13.349065 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 26.0 | \n",
+ " 30.0 | \n",
+ " 250.0 | \n",
+ " 18.0 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 360 | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " 52.543157 | \n",
+ " 13.415091 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 1.0 | \n",
+ " 42.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 24.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 10 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " latitude longitude accommodates bathrooms bedrooms price \\\n",
+ "id \n",
+ "2015 52.534537 13.402557 3 1.0 1.0 60.0 \n",
+ "2695 52.548513 13.404553 2 1.0 1.0 17.0 \n",
+ "3176 52.534996 13.417579 4 1.0 1.0 90.0 \n",
+ "3309 52.498855 13.349065 2 1.0 1.0 26.0 \n",
+ "7071 52.543157 13.415091 2 1.0 1.0 42.0 \n",
+ "\n",
+ " cleaning_fee security_deposit extra_people guests_included \\\n",
+ "id \n",
+ "2015 30.0 200.0 28.0 1 \n",
+ "2695 0.0 0.0 0.0 1 \n",
+ "3176 50.0 200.0 20.0 2 \n",
+ "3309 30.0 250.0 18.0 1 \n",
+ "7071 0.0 0.0 24.0 1 \n",
+ "\n",
+ " minimum_nights maximum_nights \n",
+ "id \n",
+ "2015 4 1125 \n",
+ "2695 2 40 \n",
+ "3176 62 1125 \n",
+ "3309 5 360 \n",
+ "7071 2 10 "
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Making sure that these engineered features are added properly.\n",
+ "\n",
+ "berlin_numerical.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "sbPGJss2Q-Wv"
+ },
+ "source": [
+ "### Running the model on numerical data only"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 119,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "Y-0XK03b9rM9"
+ },
+ "outputs": [],
+ "source": [
+ "# Splitting the data into train, test groups.\n",
+ "\n",
+ "X_train_num, X_test_num = train_test_split(berlin_numerical, train_size=0.8, test_size=0.2, random_state=42)\n",
+ "\n",
+ "target = 'price'\n",
+ "\n",
+ "y_train_num = X_train_num[target]\n",
+ "X_train_num = X_train_num.drop(columns=target)\n",
+ "\n",
+ "y_test_num = X_test_num[target]\n",
+ "X_test_num = X_test_num.drop(columns=target)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "colab_type": "code",
+ "id": "cuMls7Pt-QkR",
+ "outputId": "c34712fd-1995-4be4-8610-f213c00a2d17"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Model based on numerical data only has a r^2 score of: 0.57\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Training the model and getting the initial score.\n",
+ "\n",
+ "berlin_num_pipeline = make_pipeline(\n",
+ " SimpleImputer(),\n",
+ " RandomForestRegressor(n_estimators=100, random_state=42, n_jobs=-1)\n",
+ ")\n",
+ "\n",
+ "berlin_num_pipeline.fit(X_train_num, y_train_num)\n",
+ "\n",
+ "y_pred_num = berlin_num_pipeline.predict(X_test_num)\n",
+ "score_num = r2_score(y_test_num, y_pred_num)\n",
+ "print(f'Model based on numerical data only has a r^2 score of: {round(score_num, 2)}')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 606
+ },
+ "colab_type": "code",
+ "id": "yoT2zahyAPG0",
+ "outputId": "98e10be5-4d6f-4e53-acfc-8f07f28a9314"
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Get feature importances from the initial numerical model.\n",
+ "\n",
+ "rf = berlin_num_pipeline.named_steps['randomforestregressor']\n",
+ "importances = pd.Series(rf.feature_importances_, X_train_num.columns)\n",
+ "\n",
+ "# Plot feature importances.\n",
+ "\n",
+ "n = 20\n",
+ "plt.figure(figsize=(10, 10))\n",
+ "plt.title(f'Top {n} features')\n",
+ "importances.sort_values()[-n:].plot.barh();\n",
+ "\n",
+ "# Based on this data I plan to drop all the data below 0.05 feature importance.\n",
+ "# In this case that would be bathrooms, maxium_nights and security_deposit."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "STYt0yccT8QH"
+ },
+ "source": [
+ "### Running the model on categorical data only"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 120,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 320
+ },
+ "colab_type": "code",
+ "id": "4grSm1KJhrsM",
+ "outputId": "faa3f31b-1977-4b12-d6f6-1a5db9d4e65d"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " description | \n",
+ " host_has_profile_pic | \n",
+ " neighbourhood_group_cleansed | \n",
+ " property_type | \n",
+ " room_type | \n",
+ " bed_type | \n",
+ " amenities | \n",
+ " instant_bookable | \n",
+ " is_business_travel_ready | \n",
+ " cancellation_policy | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " Great location! 30 of 75 sq meters. This wood... | \n",
+ " t | \n",
+ " Mitte | \n",
+ " Guesthouse | \n",
+ " Entire home/apt | \n",
+ " Real Bed | \n",
+ " {TV,\"Cable TV\",Wifi,Kitchen,Gym,Heating,\"Famil... | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " In the summertime we are spending most of our ... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " Real Bed | \n",
+ " {Wifi,Kitchen,Elevator,Heating,Washer,Essentia... | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " This beautiful first floor apartment is situa... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " Real Bed | \n",
+ " {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... | \n",
+ " t | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " First of all: I prefer short-notice bookings. ... | \n",
+ " t | \n",
+ " Tempelhof - Schöneberg | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " Pull-out Sofa | \n",
+ " {Internet,Wifi,\"Pets allowed\",\"Pets live on th... | \n",
+ " f | \n",
+ " f | \n",
+ " strict_14_with_grace_period | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " Cozy and large room in the beautiful district ... | \n",
+ " t | \n",
+ " Pankow | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " Real Bed | \n",
+ " {Wifi,Heating,\"Family/kid friendly\",Essentials... | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " description host_has_profile_pic \\\n",
+ "id \n",
+ "2015 Great location! 30 of 75 sq meters. This wood... t \n",
+ "2695 In the summertime we are spending most of our ... t \n",
+ "3176 This beautiful first floor apartment is situa... t \n",
+ "3309 First of all: I prefer short-notice bookings. ... t \n",
+ "7071 Cozy and large room in the beautiful district ... t \n",
+ "\n",
+ " neighbourhood_group_cleansed property_type room_type \\\n",
+ "id \n",
+ "2015 Mitte Guesthouse Entire home/apt \n",
+ "2695 Pankow Apartment Private room \n",
+ "3176 Pankow Apartment Entire home/apt \n",
+ "3309 Tempelhof - Schöneberg Apartment Private room \n",
+ "7071 Pankow Apartment Private room \n",
+ "\n",
+ " bed_type amenities \\\n",
+ "id \n",
+ "2015 Real Bed {TV,\"Cable TV\",Wifi,Kitchen,Gym,Heating,\"Famil... \n",
+ "2695 Real Bed {Wifi,Kitchen,Elevator,Heating,Washer,Essentia... \n",
+ "3176 Real Bed {Internet,Wifi,Kitchen,\"Buzzer/wireless interc... \n",
+ "3309 Pull-out Sofa {Internet,Wifi,\"Pets allowed\",\"Pets live on th... \n",
+ "7071 Real Bed {Wifi,Heating,\"Family/kid friendly\",Essentials... \n",
+ "\n",
+ " instant_bookable is_business_travel_ready cancellation_policy \n",
+ "id \n",
+ "2015 f f strict_14_with_grace_period \n",
+ "2695 f f flexible \n",
+ "3176 t f strict_14_with_grace_period \n",
+ "3309 f f strict_14_with_grace_period \n",
+ "7071 f f moderate "
+ ]
+ },
+ "execution_count": 120,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "berlin_non_numerical.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 121,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "876dFwIBLYAw"
+ },
+ "outputs": [],
+ "source": [
+ "# Dropping these text features as I'm unable to process them under the current deadline.\n",
+ "\n",
+ "berlin_non_numerical = berlin_non_numerical.drop(columns=['description', 'amenities'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 122,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "q-aA0KzAJM0j"
+ },
+ "outputs": [],
+ "source": [
+ "# Clean up property_type column\n",
+ "\n",
+ "berlin_non_numerical = berlin_non_numerical.replace(['Boutique hotel', 'Hotel',\n",
+ " 'Bungalow', 'Boat', 'Tiny house',\n",
+ " 'Houseboat', 'Camper/RV', 'Villa',\n",
+ " 'Aparthotel', 'Pension (South Korea)',\n",
+ " 'Cabin', 'Cottage', 'Resort',\n",
+ " 'Train', 'Casa particular (Cuba)',\n",
+ " 'Castle', 'Island', 'In-law', 'Chalet',\n",
+ " 'Tipi', 'Cave', 'Barn'], 'Other')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 123,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "KZgLuRMdKfiw"
+ },
+ "outputs": [],
+ "source": [
+ "# Clean up bed_type column\n",
+ "\n",
+ "berlin_non_numerical = berlin_non_numerical.replace(['Pull-out Sofa', 'Futon', 'Couch', 'Airbed'], 'Sofa\\Other')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 124,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "wzMEvIrtG3Zs"
+ },
+ "outputs": [],
+ "source": [
+ "# Clean up cancellation_policy column\n",
+ "\n",
+ "berlin_non_numerical = berlin_non_numerical.replace(['strict_14_with_grace_period', 'super_strict_30', 'super_strict_60'], 'strict')\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 125,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 235
+ },
+ "colab_type": "code",
+ "id": "yau6jEfBym_7",
+ "outputId": "7704b803-a1da-4a0a-d21c-fda5f027b43a"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " host_has_profile_pic | \n",
+ " neighbourhood_group_cleansed | \n",
+ " property_type | \n",
+ " room_type | \n",
+ " bed_type | \n",
+ " instant_bookable | \n",
+ " is_business_travel_ready | \n",
+ " cancellation_policy | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " t | \n",
+ " Mitte | \n",
+ " Guesthouse | \n",
+ " Entire home/apt | \n",
+ " Real Bed | \n",
+ " f | \n",
+ " f | \n",
+ " strict | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " t | \n",
+ " Pankow | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " Real Bed | \n",
+ " f | \n",
+ " f | \n",
+ " flexible | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " t | \n",
+ " Pankow | \n",
+ " Apartment | \n",
+ " Entire home/apt | \n",
+ " Real Bed | \n",
+ " t | \n",
+ " f | \n",
+ " strict | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " t | \n",
+ " Tempelhof - Schöneberg | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " Sofa\\Other | \n",
+ " f | \n",
+ " f | \n",
+ " strict | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " t | \n",
+ " Pankow | \n",
+ " Apartment | \n",
+ " Private room | \n",
+ " Real Bed | \n",
+ " f | \n",
+ " f | \n",
+ " moderate | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " host_has_profile_pic neighbourhood_group_cleansed property_type \\\n",
+ "id \n",
+ "2015 t Mitte Guesthouse \n",
+ "2695 t Pankow Apartment \n",
+ "3176 t Pankow Apartment \n",
+ "3309 t Tempelhof - Schöneberg Apartment \n",
+ "7071 t Pankow Apartment \n",
+ "\n",
+ " room_type bed_type instant_bookable is_business_travel_ready \\\n",
+ "id \n",
+ "2015 Entire home/apt Real Bed f f \n",
+ "2695 Private room Real Bed f f \n",
+ "3176 Entire home/apt Real Bed t f \n",
+ "3309 Private room Sofa\\Other f f \n",
+ "7071 Private room Real Bed f f \n",
+ "\n",
+ " cancellation_policy \n",
+ "id \n",
+ "2015 strict \n",
+ "2695 flexible \n",
+ "3176 strict \n",
+ "3309 strict \n",
+ "7071 moderate "
+ ]
+ },
+ "execution_count": 125,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Checking the cleaned non numerical dataframe.\n",
+ "\n",
+ "berlin_non_numerical.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 126,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 289
+ },
+ "colab_type": "code",
+ "id": "4LS07GM9Da-H",
+ "outputId": "284a3d39-0766-4658-db52-458da643cdfc"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "36 columns\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " host_has_profile_pic_t | \n",
+ " host_has_profile_pic_f | \n",
+ " neighbourhood_group_cleansed_Mitte | \n",
+ " neighbourhood_group_cleansed_Pankow | \n",
+ " neighbourhood_group_cleansed_Tempelhof - Schöneberg | \n",
+ " neighbourhood_group_cleansed_Friedrichshain-Kreuzberg | \n",
+ " neighbourhood_group_cleansed_Neukölln | \n",
+ " neighbourhood_group_cleansed_Charlottenburg-Wilm. | \n",
+ " neighbourhood_group_cleansed_Treptow - Köpenick | \n",
+ " neighbourhood_group_cleansed_Steglitz - Zehlendorf | \n",
+ " neighbourhood_group_cleansed_Reinickendorf | \n",
+ " neighbourhood_group_cleansed_Lichtenberg | \n",
+ " neighbourhood_group_cleansed_Marzahn - Hellersdorf | \n",
+ " neighbourhood_group_cleansed_Spandau | \n",
+ " property_type_Guesthouse | \n",
+ " property_type_Apartment | \n",
+ " property_type_Condominium | \n",
+ " property_type_Loft | \n",
+ " property_type_House | \n",
+ " property_type_Serviced apartment | \n",
+ " property_type_Townhouse | \n",
+ " property_type_Other | \n",
+ " property_type_Bed and breakfast | \n",
+ " property_type_Guest suite | \n",
+ " property_type_Hostel | \n",
+ " room_type_Entire home/apt | \n",
+ " room_type_Private room | \n",
+ " room_type_Shared room | \n",
+ " bed_type_Real Bed | \n",
+ " bed_type_Sofa\\Other | \n",
+ " instant_bookable_f | \n",
+ " instant_bookable_t | \n",
+ " is_business_travel_ready_f | \n",
+ " cancellation_policy_strict | \n",
+ " cancellation_policy_flexible | \n",
+ " cancellation_policy_moderate | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " host_has_profile_pic_t host_has_profile_pic_f \\\n",
+ "id \n",
+ "2015 1 0 \n",
+ "2695 1 0 \n",
+ "3176 1 0 \n",
+ "3309 1 0 \n",
+ "7071 1 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Mitte neighbourhood_group_cleansed_Pankow \\\n",
+ "id \n",
+ "2015 1 0 \n",
+ "2695 0 1 \n",
+ "3176 0 1 \n",
+ "3309 0 0 \n",
+ "7071 0 1 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Tempelhof - Schöneberg \\\n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 1 \n",
+ "7071 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Friedrichshain-Kreuzberg \\\n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Neukölln \\\n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Charlottenburg-Wilm. \\\n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Treptow - Köpenick \\\n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Steglitz - Zehlendorf \\\n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Reinickendorf \\\n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Lichtenberg \\\n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Marzahn - Hellersdorf \\\n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_Spandau property_type_Guesthouse \\\n",
+ "id \n",
+ "2015 0 1 \n",
+ "2695 0 0 \n",
+ "3176 0 0 \n",
+ "3309 0 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " property_type_Apartment property_type_Condominium property_type_Loft \\\n",
+ "id \n",
+ "2015 0 0 0 \n",
+ "2695 1 0 0 \n",
+ "3176 1 0 0 \n",
+ "3309 1 0 0 \n",
+ "7071 1 0 0 \n",
+ "\n",
+ " property_type_House property_type_Serviced apartment \\\n",
+ "id \n",
+ "2015 0 0 \n",
+ "2695 0 0 \n",
+ "3176 0 0 \n",
+ "3309 0 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " property_type_Townhouse property_type_Other \\\n",
+ "id \n",
+ "2015 0 0 \n",
+ "2695 0 0 \n",
+ "3176 0 0 \n",
+ "3309 0 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " property_type_Bed and breakfast property_type_Guest suite \\\n",
+ "id \n",
+ "2015 0 0 \n",
+ "2695 0 0 \n",
+ "3176 0 0 \n",
+ "3309 0 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " property_type_Hostel room_type_Entire home/apt room_type_Private room \\\n",
+ "id \n",
+ "2015 0 1 0 \n",
+ "2695 0 0 1 \n",
+ "3176 0 1 0 \n",
+ "3309 0 0 1 \n",
+ "7071 0 0 1 \n",
+ "\n",
+ " room_type_Shared room bed_type_Real Bed bed_type_Sofa\\Other \\\n",
+ "id \n",
+ "2015 0 1 0 \n",
+ "2695 0 1 0 \n",
+ "3176 0 1 0 \n",
+ "3309 0 0 1 \n",
+ "7071 0 1 0 \n",
+ "\n",
+ " instant_bookable_f instant_bookable_t is_business_travel_ready_f \\\n",
+ "id \n",
+ "2015 1 0 1 \n",
+ "2695 1 0 1 \n",
+ "3176 0 1 1 \n",
+ "3309 1 0 1 \n",
+ "7071 1 0 1 \n",
+ "\n",
+ " cancellation_policy_strict cancellation_policy_flexible \\\n",
+ "id \n",
+ "2015 1 0 \n",
+ "2695 0 1 \n",
+ "3176 1 0 \n",
+ "3309 1 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " cancellation_policy_moderate \n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 1 "
+ ]
+ },
+ "execution_count": 126,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Encoding the categorical values. \n",
+ "\n",
+ "encoder = ce.OneHotEncoder(use_cat_names=True)\n",
+ "\n",
+ "encoded = encoder.fit_transform(berlin_non_numerical)\n",
+ "print(f'{len(encoded.columns)} columns')\n",
+ "encoded.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 127,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "LjeID0A5He71"
+ },
+ "outputs": [],
+ "source": [
+ "# Splitting the data into train, test groups.\n",
+ "\n",
+ "X_train_encoded, X_test_encoded = train_test_split(encoded, train_size=0.8, test_size=0.2, random_state=42)\n",
+ "\n",
+ "y_train_encoded = y_train_num\n",
+ "y_test_encoded = y_test_num"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 128,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "colab_type": "code",
+ "id": "gwMHTrvhHe7_",
+ "outputId": "101f12dd-543d-46eb-9ae1-1f4631210b7c"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Encoded model based on categorical data has r^2 score: 0.28\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Training the model and getting the initial score.\n",
+ "\n",
+ "encoded_pipeline = make_pipeline(\n",
+ " SimpleImputer(),\n",
+ " RandomForestRegressor(n_estimators=100, random_state=42, n_jobs=-1)\n",
+ ")\n",
+ "\n",
+ "encoded_pipeline.fit(X_train_encoded, y_train_encoded)\n",
+ "\n",
+ "y_pred_encoded = encoded_pipeline.predict(X_test_encoded)\n",
+ "score_encoded = r2_score(y_test_encoded, y_pred_encoded)\n",
+ "print(f'Encoded model based on categorical data has r^2 score: {round(score_encoded, 2)}')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 129,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 606
+ },
+ "colab_type": "code",
+ "id": "wh2v8Ck7IuuS",
+ "outputId": "8eedd174-48d5-4f6f-a4e3-d929f12c3246"
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAJMCAYAAAAvw+1HAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeZRdVZn+8W+AYFCCgpQiiEziA5EAigIyKAaZVAjYdsvgEAVCZBBabEkLMgqigja0TQQkjfwQQVlgpBGUKYQYBgUBmR4n0IgEgiAEGQKkfn/sXXIsb1UloZK6VfV81mLVvWfY+91nV2rd9777HEZ0dnYSERERERERxTIDHUBEREREREQ7SZIUERERERHRkCQpIiIiIiKiIUlSREREREREQ5KkiIiIiIiIhiRJERERERERDcsNdAARERExcCSdDry7vh0D3A88U9+/y/YzLU9ctD4+D3wceBF4GDjA9v2SlgX+C9gBWBb4qu2zW5y/FvBj4Hlgou1bFiOGAwBsn7nYA4mIYSNJUkRExDBm+zNdryU9AOxj+xf91b6knYGPURKueZI+A5wDjAMOAtYG3gq8GrhJ0q22b+vWzPbAbNs7v4xQtgX6bVwRMbQlSYqIiIgeSXoP8FVgFDAfONL2TyXtB4wHlgfWBP4EfNz2nG5N/Bk40Pa8+v4XwKH19R7A6bZfBB6T9H3go8DfkyRJ7wOOBV4t6Wrb75O0O/AFYCTwN+Bw2zdLegNwJtABrAY8APwrsB3wfuC9kp4F3gisaPuw2seXut5Lmkmpdm0IfBP4HnAaJZEbCVwFfN72i/W88cBzwKPAJ2w/vBiXOSLaTO5JioiIiJYkdQDfBw6yvQnwKeACSW+qh7yn7hsD3ElZOvcPbN9p+4ba3ijgy8AP6u41gdmNw/9ESWCa518NHA9cVxOkDYDjgJ1svw04ELi0tr03MMP2u4D1KMvz9rF9MWW53tdsf2shhv6o7TG2z6AkSDfa3gx4G/AG4FBJ69S+N7P9DuBaYPOFaDsiBoFUkiIiIqIn7wLu61p+Z/tXkm6mJEcAV9r+bX19NnBTTw1Jej1wMaXi8sW6eRmgs3HYCMp9S73ZEVgDuE5S17ZOYD3bp0p6t6TPAutTqkHX9znKf3ZD4/UHgLd33dMErECpHJ0O3APcJunHwBW2r1uMviKiDSVJioiIiJ4syz8mMVASm5H19QvdtrdMcCRtCvwIuAg4wvaCuuuPwOrArfX96pRqUl8x/cT2Po321wQelHQqsAlwLnAdJaEZ0aKNzm7bl++2/6nG6+WAPWz/pva1MrDA9guStqVUj7YH/lvSj2x/oY/4I2IQyHK7iIiI6MksYCNJ7wCQNBbYGphe9+9Q7wMCOAC4rHsD9cl01wBH2f6PRoIEMA3YV9KyNfn4N+CHfcR0DbCLpLfU9ncDbqfcM7UT8A3b51MqVttTkiooCV1XcjcX2EzSCEkrUe5X6slPgH+vx44C/g+YJOntlCWGd9k+ibIs7519xB4Rg0SSpIiIiGipPoTgI8AUSb8C/h/wMdu/r4f8iXKP0r2UJXCfbdHM0ZSKzmcl3V7/m1X3fZNSTboTuBn4lu2f9RHTncCnge9LuqO2v5vtpyn3Kp0m6U7gUsqyuTfXU68ADpb0H3UcTwC/oVS4eluSdxCwMvAr4A7KQyVOrU/guxS4VdIvKI84/1xvsUfE4DGis7N7FT0iIiKid/Xpdh+0vftAxxIR0d9SSYqIiIiIiGhIJSkiIiIiIqIhlaSIiIiIiIiGJEkRERERERENSZIiIiIiIiIa8j+TjYh+9cILL3Y+/vjTAx1GVCuv/EoyH+0j89FeMh/tJ3PSXobDfHR0jG71P5xOJSki+tdyyy3b90Gx1GQ+2kvmo71kPtpP5qS9DOf5SJIUERERERHRkCQpIiIiIiKiIUlSREREREREQ5KkiIiIiIiIhiRJERERERERDXkEeET0q10PnzbQIURERMQgNnXyuIEOIZWkiIiIiIiIpiRJERERERERDVluF4OWpLHAyrZnLKH21wbuBG7rtmt72y/2cM4ewM3AAuBo2wcuYp/bAZNs77nIAS9aP8sCF9veYxHOGQV81Pa3l1xkEREREQMvSVIMZv8CzAGWSJJU3WN7u0U4/lBKknMfsEgJ0lK2DTBrEc9ZDdgPSJIUERERQ1qSpOgXkiYAn6Is4TyG8oH6MOA54DfAxHroVGA9YFng67YvkjQduAPYCHgKuAHYCXgNsKPtx1v0twYwAZgv6Tbgm7Y3r/suAk4BvlPbeivwGLAXMB/4FrB+jfUo29MXY7zn1rGtDbyhxvIGYFPgPEkfBc6zvaWku4Bf1+MnAecAr61Nfcb2r7o1v76kK4DXAZfZPlbS24D/Bl4EngX2r/FfBMyucVxIuYZvAy63/YVabTsdGAH8BfiU7SeADwJTJb0RmAKMqjEdb/uHku5pce2OBMZIOtr28Yt6zSIiIiIGi9yTFP3pcdvbALcDxwHj6vu/AgfU/x61vRXwPuBLklat595ie3vgFcDTtncA7gHe06oj2w8C51ISrVuAZySNkbQKsI7tnwOvBL5bY7iv9r9fjeHdwHjgf/oY0xhJ0xv/ndrY9wfbO1GSl4m2L69j/zglGeuyInCC7b2ALwDX2H4vJXGc0qLPUcDuwLbAwXXb2cDBtt8DnAF8vW5fF9iXkvScAHwW2KJu6zrvoFoN+zHw+bp9Q9v3AhsAp9brfTBwUN3f6tqdSKmsJUGKiIiIIS2VpOhPrj/XBe62Pa++nwHsSLlP52oA2/NqtWK9ekzXfT9/pSRHAI9TEoaFcTalmvNH4Py67fnG/UqzgF0olZhtJW1Rty8n6bW2/9JDu70tt/tl/Tkb2LqP+LquzVhgnKSP1Pcrtzj2LtvPAUh6oW5b3fbt9fUM4OT6+ve2n5D0HPCw7cfqeZ11/4bAGZIARgK/lrQu8Nu6/yHgKEn7Ap31GGh97SIiIiKWuI6O0QMdQpKk6FcL6s/7KRWYV9n+G6Ua9GvgeUp15FJJoykJw/31nM7ujS1kf13V0IuBz1GWlP1r3TZS0ia276AkMXfX7X+yfZKkFShLyP5pOd9CahVzM6bu26FUZc63fYGk11EqWwvT7p8lbWz7Tl66nj0d22Tg47b/KGlrypLAXYHL6/4TgLNtXyHpk5REE1pfu57GFhEREdFv5s6d1/dB/aSnhCxJUvQ7249KOga4TtICStViMuVD9tmSZgIrAMfZfqRWORbHrcDXJN1r+zpJM4COrmpKdYSkN1EqTEfVbWdLuh5YCTjD9gJ6NqbeM9X0yV6OnwWcx0v3YHV3InCOpIm1/2N7aatpf+CbkkYAL/DScrq+fJpyj9Sy9f2+lPuLupb5/QA4XdIcSkVs1ca53a/dCGB5SV+xfcRC9h8REREx6Izo7FycL/Aj2o+kMyiPtb62vn8A2MD2swMZ12D0cq7drodPyx+ViIiIWGxTJ49ban11dIwe0Wp7KknR1mol47wWu663fUzjuJ8Cf+5KkBaxj6OBVv8aP2n7/hbbIyIiImIISyUpIvpVKkkRERHxcrRDJSk3YUdERERERDSkkhQR/a1zaT6VJnrX0TF6qT4lKHqX+WgvmY/2kzlpL8NhPlJJioiIiIiIWAhJkiIiIiIiIhqSJEVERERERDQkSYqIiIiIiGhIkhQREREREdGQJCkiIiIiIqIhSVJERERERERDkqSIiIiIiIiGJEkRERERERENSZIiIiIiIiIakiRFREREREQ0JEmKiIiIiIhoWG6gA4iIoWXXw6cNdAgv29TJ4wY6hIiIiBhAqSRFREREREQ0JEmKiIiIiIhoSJIUERERERHRkCQphjxJq0jaezHO20PS6ksipm79TJH0y35qa5Sk/fqjrRZtL5XrERERETHQkiTFcLAxsNtinHcosFI/x/IPJL0S2Bq4V9J2/dDkasASSZJYCtcjIiIioh3k6Xax1EmaAIynfOBeFTgeOA74NfAc8Gng/Lp/OeAo29dKuge4AXgr8BiwFzAf+BawPiXpP8r2dEl3NdpbFdhE0kTg88Dmth+T9GlgRdtfaxHjB4BNgfMkfRtY3/Z/SFoWuB34cI3xIeCNwBW2j5S0JnAWMAp4Fphoe3Yvl+PfgGuAK4CDgem1/1ZjXRb4NvCaOqazbU+RNB2YC6wM3A+MkXR0vR5vrseuApwB/AvwFuATtm+SdAiwN9AJXGj7dEnn1uu2NvAGYEL92XU9trE9v5cxRURERAxqSZJioKwI7AB0ALdQEoATbP9S0inAVbZPk7QGMFPSesArge/aniHpq8ABwDPAo7b3lfRaYAYlsVix0d52wCTbZ9X29qQkDB8D9mgVnO3LJd0OTAIeBG6TNBnYGbiOl5KInYAnaoxvB44ATrd9haTtgZOBfXq5DvvVcdwLTJG0hu0HexjrdEoic0ld9nY9MKW2c4HtSyWtDYy1fbykY4FnbO9cY3+/7V0lfRLYU9KTwEeAbShJ0tWSflLb+4PtAyTtT0n0JnVdj+GQIHV0jB7oEPrVUBvPYJf5aC+Zj/aTOWkvw3U+kiTFQLne9gLgYUmPAxsCrvs2BL4LYPvB+mG+A3je9ox6zCxgF+BFYFtJW9Tty9VkiUZ7TecAF0maAcyx/XBfgdqeJ+l6SkL0SUrlC+AO248BSLoZEDAW+IKkI4ARlEpXS5I2BDYCTq2bOilJ2Rd7GOuFwGGSPgQ8CYxshtlDN7fVn38F7qmvH6dUujYC1qJUsqBUot5cX3fdIzWbshxwWJk7d95Ah9BvOjpGD6nxDHaZj/aS+Wg/mZP2Mhzmo6ckMPckxUDZDEDS6ynL6h4BFtR99wLb1v1rUD68/wUYKWmTeszWwN3AfcD3bG9HSSR+QEkCaLS3gPq7bvuPlIThSErC1Ju/nwecTan6vM72nXXbhpJeWZfgbUFJQu4DjqjxHABc3Ev7+wFH2t7Z9s7AOOBTkpbvYayfA260/dE6zhHdYu0eM5TEqyeu7b63xnsu8KtezuvedkRERMSQlA88MVBWk3QNcDlwIKUi1OUkYFyt9vyQstzrhbrvCEkzgTWAM+t/G9RKzyzKMrEF/KPfAWMlHVbfn01Jwq7sI8ZZlHtwVrF9M6XK8t3G/vmUZOVmYJrtOyiJzDE1nvOAO2mhJkJ7Ahd1basJ3B2U+51ajfUy4NC67TDgBUmv6Nb0I8Dykr7Sx9io8V5DWSr4C8p9XQ/2csrfr0dfbUdEREQMZiM6O3v7ojmi/9UHN2xge/IinvdAPe/Zl9n/vwEb2T56Ec5ZBvgZsJPtJ+u9Pxfa3vLlxNJLfw/QD2MdCLsePm3Q/1GZOnncQIfQb4bDUonBJPPRXjIf7Sdz0l6Gw3x0dIwe0Wp77kmKYUXSSZQq0vj6fjfgsy0OPc32pfWYdYBLgTNtP7kYfV5Cebpc0xO2xy9qWxERERGx5KWSFBH9KpWk9jIcvgUcTDIf7SXz0X4yJ+1lOMxHKkkRsVRcdur4If8HNSIiIoa2PLghIiIiIiKiIUlSREREREREQ5KkiIiIiIiIhiRJERERERERDUmSIiIiIiIiGpIkRURERERENCRJioiIiIiIaEiSFBERERER0ZAkKSIiIiIioiFJUkREREREREOSpIiIiIiIiIYkSREREREREQ3LDXQAETG07Hr4tIEOYZFMnTxuoEOIiIiINpNKUkREREREREOSpIiIiIiIiIYkSREREREREQ25JyliMUhaBdjZ9gWLeN4ewM22/7xkIgNJmwAnAysAywPXAcfZni9pLLCy7RmSHgA2sP3skoolIiIiYjBKJSli8WwM7LYY5x0KrNTPsfydpNcD3wMOtb0dsDXwHPCNesi/AGOWVP8RERERQ0EqSTEkSJoAjKckIKsCxwPHAb+mJAmfBs6v+5cDjrJ9raR7gBuAtwKPAXsB84FvAetTvkg4yvZ0SXc12lsV2ETSRODzwOa2H5P0aWBF219rEeMHgE2B8yR9G1jf9n9IWha4HfhwjfEh4I3AFbaPlLQmcBYwCngWmGh7dg+X4mPAVNu/BrDdKekE4PeS1gAmAPMl3VaPnyJpnfp6D+CpvsZue69eJyMiIiJikEuSFEPJisAOQAdwC7AscILtX0o6BbjK9mk1WZgpaT3glcB36/KzrwIHAM8Aj9reV9JrgRmUJGrFRnvbAZNsn1Xb2xM4g5Kk7NEqONuXS7odmAQ8CNwmaTKwM2VJ3HPA2sBOwBM1xrcDRwCn275C0vaUpXT79HAN1gWu6tZvp6Q5wEjgXGCO7VskAZxje6akc+u1e21fY+91Bgahjo7RAx3CEjccxjiYZD7aS+aj/WRO2stwnY8kSTGUXG97AfCwpMeBDQHXfRsC3wWw/aCkJynJ1PO2Z9RjZgG7AC8C20raom5friYMNNprOge4SNIMSgLycF+B2p4n6XpKQvRJSuUL4A7bjwFIuhkQMBb4gqQjgBGUSldPHqQkWn9XK1WrA63iurX+nENJGMeyaGMf9ObOnTfQISxRHR2jh/wYB5PMR3vJfLSfzEl7GQ7z0VMSmHuSYijZDP5+X85KwCPAgrrvXmDbun8NYGXgL8DI+qADKPfv3A3cB3yv3tOzC/AD4PF6zILGz2UAbP8R+CtwJCVh6s3fzwPOBvYDXmf7zrptQ0mvrInNFsA9NZ4jajwHABf30v53gImS1q9jHQEcA/zY9jPd+gfo7Hb+wow9IiIiYkhLkhRDyWqSrgEuBw6kVIS6nASMq9WeH1Lu63mh7jtC0kxgDeDM+t8GtdIzC/hDrVA1/Q4YK+mw+v5sShJ2ZR8xzqLck7SK7ZuBN1MrXNV8SmJyMzDN9h3A54BjajznAXfSA9t/oiz5O6OO6WbKvUxdcd4KHCzpvT00sTBjj4iIiBjSRnR2dv8iOWLwqQ9u2MD25EU87wH64THYkv4N2Mj20YtwzjLAz4CdbD8paW3gQttbvpxYBtquh08bVH9Upk4eN9AhLFHDYanEYJL5aC+Zj/aTOWkvw2E+OjpGj2i1PfckRbxMkk6iVJHG1/e7AZ9tcehpti+tx6wDXAqcafvJxejzEmCVbpufsD1+UduKiIiIiH+USlJE9KtUktrLcPgWcDDJfLSXzEf7yZy0l+EwH6kkRcRScdmp44f8H9SIiIgY2vLghoiIiIiIiIYkSREREREREQ1JkiIiIiIiIhqSJEVERERERDQkSYqIiIiIiGhIkhQREREREdGQJCkiIiIiIqIhSVJERERERERDkqSIiIiIiIiGJEkRERERERENSZIiIiIiIiIakiRFREREREQ0JEmKiIiIiIhoWG6gA4iIoWXXw6cNdAj/ZOrkcQMdQkRERAwiqSRFREREREQ0JEmKiIiIiIhoSJIUQ5qkcyXtLGmCpJN7OW4VSXvX15Mlbb70ovx7DBMknSxpNUlnLMF+Jkoa2WL7hZKW7+GcN0nadUnFFBEREdFOck9SRLExsBtwge0ek6mlwfYc4MAl2MUXgPOA57v1u2cv54wDNgAuW4JxRURERLSFJEkxICStAPwvsBYwEjgcOAh4DbAqcLbtKZKmA7cDGwErAf9q+w+SjgJ2p/wOT7F9pqRDgL2BTuBC26f30PeXgXcAo4F7bX8SOBLYRNJEYCvgQuAaYCqwHrAs8HXbF/UUUw99HUtJLl4HrAwcYnumpH2Aw4DngN8AExvnrF3j31LSB4Fj6q5fAqcA59vevB57EXCK7Z+36LsDuIhSMR4JTAI2B1YDLpT0X8BXgPnAWcAJNdY1gW8DywNP12s6GXilpFm2f9RqrBERERFDRZKkGCiTgAds7ylpI2BHSmJwiaTVgeuBKfXYW2wfJulEYC9JPwF2AbYAXgF8WdJbgY8A21CSpKvrcf9A0krA47Z3kLQMcLekNYATgUm2z5K0VT38AOBR2x+TNBq4TdI1rWICeqs+PW17XI3xAknjgOOAt9meJ+kbta+nusW6HPBNYHPbj0g6GngWeEbSGGAOsE6rBKnaHHiCkuSMAVayfY6kLwJ7AlsCo2xvUfs7oZ53CvBl21dK+jdgkzq+DQZrgtTRMXqgQxhQw3387Sbz0V4yH+0nc9Jehut8JEmKgSLgCgDbd0l6DDhZ0oeAJymVjy6/rD9nU6ogoiQpL1IqHYfWD/NrUao/UKo2b27R7zPA6yR9j5KUrNitr6YNgatrjPMk3UOpKrWKqTfX1jbulrQasC5wt+15df8MSpJ4c7fzVqUkdI/U848HkHQ2MAH4I3B+L/1eAawPTKMsrftSi2PcYpuAG2uf3699TuhtgO1u7tx5fR80RHV0jB7W4283mY/2kvloP5mT9jIc5qOnJDAPboiBci/wTgBJ61IqJjfa/ijwA2BE49jObufeB7xd0jKSRkq6ivJh/27gvba3A84FftWi312ANW3vRbk3Z4Xa1wL++d/DvcC2NcbRwFjg/h5i6s1mtY2NgAdrG2Mkvarufw/w6xbnPQK8RtIq9fzT6wMlLqYkVXvQe5K0HfCQ7R0pCdJJdXtzrAtanNecm33qMsZW1yciIiJiSMqHnhgoZwLrSrqe8hCBGykVoZmUe3VekPSKVifavh24EvgZMBP4ru07KFWkmZJ+QamgPNji9FtqvzdRko3fA6sDvwPGSjqscexZwGtrTNOB47qqOovobXWZ3reB/W0/SrnP6Loax6q8tLSwOc4FlAc4XF5jGAH83PazlOrTI7Yf66XfO4D9Jd0IfA34ct1+A/Bj/jERbfoP4D/rvVf7AN+lJJzjJfX2cIeIiIiIIWFEZ+eifCEeEYuiPrhhju1v9XO7ZwAX2762P9vtD7sePq3t/qhMnTxuoEMYMMNhqcRgkvloL5mP9pM5aS/DYT46Oka3/NI49yRF9ANJlwCrdNv8BC/du9Sfff0U+HNXglQf6NAqC/ik7ftbbI+IiIiIXiRJiugHtj+0FPvasdv744Hjl1b/EREREUNdkqSI6FeXnTp+yJfmIyIiYmjLgxsiIiIiIiIakiRFREREREQ0JEmKiIiIiIhoSJIUERERERHRkCQpIiIiIiKiIUlSREREREREQ5KkiIiIiIiIhiRJERERERERDUmSIiIiIiIiGpIkRURERERENCRJioiIiIiIaEiSFBERERER0ZAkKSIiIiIiomG5gQ4gIoaWXQ+fNtAhADB18riBDiEiIiIGqVSSIiIiIiIiGpIkRURERERENCRJGoQkbSrp6F72T5B0covtD0ga1Y9xTJe0QT+2d6Gk7fqrvSWtp+u8lGOYJOnYXvZPkNQpaYvGtpGSHpV0rKTVJJ1Rt79b0sb19R6SVl/iA4iIiIhoQ7knaRCyfTtw+0DHEYPGfcBewM31/c7AEwC25wAH1u2fAi4E7gQOBSYBf16qkUZERES0gSRJbUTSBOD9wCuB9YCvALcCpwMjgL9QPsi+DZhke09J+wIHA48B84GLanNbSvop0AFMsX1W3X6mpLWBh4FPAC8AU2t/ywJft32RpOm1j/skTQJWA84FLqtx/Li2d4yk1wOvAvay/XtJpwLb1P0X2D6t9nkOMBLoBD5j+w5JBwH7AQ8Br+vj+mwO/A8wD3gEeBY4tltMVwH/DbxY9+9PqZheaHvL2s5NwJ7ABGCD2u/KwCG2Z/bQ9wrA/wJr1TEc0m3/IcDedWwX2j5d0kbA12v/r6ljniXpN8DPANV5+Jd6/c8FnqfMycdtPyjpy8C7axtft/0DSdsAp1Hm/EXgpt6uG3AFsJOkZWwvoCRM36txr01JjA6iJE9vr/O5KXBe7euA7mPro7+IiIiIQS3L7drPq21/ENgNmAycDRxkeztKEvD5rgMlrQocAWwN7EhJVLo8D+wE7AEc1tg+xfZ7gAcoCcQBwKO2twLeB3ypttuT1YAdbX+1vr/c9jjKB/EPS/ogsA6wJSVR2lvSWOAU4HTb76ZUKc6R9Or6ektgPLB8H9fmW8CE2t/veojpbODgOsYzKElKb56u7X2UkoD1ZBLwgO13UZKr5vK1McBH6ni3AXaXJOCtwOG231fj+GQ9ZV3gi7WtDuCdwA6UhPh9wInAypJ2AdaxvTXwXuBISa8BvkFJSHcA7u9jfFCS5xuB90gaDawE/Kl5gO1bgSuBz9v+DqVS+XHgzT2MLSIiImLISiWp/XQto5sNjAI2BM6on0tHAr9uHPtm4B7bTwNImtXYd5vtTklzKJUpgPm2u6oOsygfzAGuBrA9T9I9lKpG04jG6/ttz2+8v7X+nENJVjYEbrDdCTxfqzZj6vYZtZ/bJa1JqeLcbfu5Gv8tvV4ZWN323fX1DZRqUPeYVq/LEan9tbpnqDmea2tMd0tarZe+RUkEsX0XcFet/AFsRKkwXVPfr0yZmweBL0p6BhgNPFn3P2p7dn3dNc/nUBLeKylL4b4AjAU2q1U9KPO/FrCG7a7fg5/VvvpyAaWC9CbgEvpOSLv0NDYv5PkDpqNj9ECH0DZyLdpL5qO9ZD7aT+akvQzX+UiS1H46u703ZenVHyVtDbyhse+3wAZ1KdhzwOaU+09atQOwvKRNaxKxLXAXZYndtsCltcowllKdeLb2dR/wdsoHfoAFfcR7L6Vi8g1JI4GtgO/U7dsCP5K0KSWp+j0wpsY/n7KM8PyeLgwwW9IY2/dQqk9dmjH9WdLGtu8E3kNJKp8FXidpWUqysk7j+M2A8+vSuAfp2b2Uis80SesCXwJ+WvcZuBvYpSam/w78CvghsI/teyUdB6xdj281N+MpyeVxkvaiJEyXAtfZnihpGeCLlGs2R9KGtrtieryXuLtMB/4LWJ2ydG7vFscs4KXqctfrnsbW9ubOnTfQIbSFjo7RuRZtJPPRXjIf7Sdz0l6Gw3z0lARmuV37+zTl3pAbKFWRO7t22H6Uct/SDZQKxAqUZXY9eQ44RNIMyn043wbOAl4raSblg/Rxth+h3Af1P5J+QkmkFort/wPul3Qj5V6Zi23fBnyu0fcUYF/bc4GjKVWtK4C/9dH8gcBUSVdTEsJWY90f+Ga9XocC/14fTnAV8PM63t82jn+bpGvqtdi/l77PBNaVdD1wHo1lfLbvoFRaZkr6BbA+JeE6n5JU3QC8hZKg9OQXwIn12EmU+6ouA56q224FOm3Po3LwkeIAACAASURBVCwN/E6Ne61e2vy7ei/SVZTlhU/2cNjNwMmSNqTMyXmUSlersUVEREQMWSM6O1t9qR2DgaTlgCNsn1jfzwCOsj1jYCNbMupDHr5ve66kL1GWDx7/Mto7Fphj+1v9FWPArodPa4s/KlMnjxvoENrCcPgWcDDJfLSXzEf7yZy0l+EwHx0do0e02p7ldoOY7RckvUrSbZTlajdTqkqDlqQ3USoY3V1PWeb1U0lPUe7b+cQS6P8Myj1U3e1i+5n+7q+/SLoEWKXb5idsjx+IeCIiIiIGs1SSIqJfpZLUXobDt4CDSeajvWQ+2k/mpL0Mh/lIJSkilorLTh0/5P+gRkRExNCWBzdEREREREQ0JEmKiIiIiIhoSJIUERERERHRkCQpIiIiIiKiIUlSREREREREQ5KkiIiIiIiIhiRJERERERERDUmSIiIiIiIiGpIkRURERERENCRJioiIiIiIaEiSFBERERER0ZAkKSIiIiIioiFJUkRERERERMNyAx1ARAwtux4+ban2N3XyuKXaX0RERAx9qSRFREREREQ0JEmKiIiIiIhoSJIUERERERHRkCQphgVJO0uauAjHj5K032L2dXAf+6dL2mBx2m60MWchj5sg6eQW2x+QNGoR+3yNpBsl/XRRzouIiIgYbJIkxbBg+0rbZy3CKasBi5UkAUct5nntbiPgz7Z3HOhAIiIiIpakPN0uhgVJE4CdgbWA2cB6wC22Py1pa+BU4HngcWAf4EhgjKSjganAFGAU8FrgeNs/lHQncD2wMdAJjAcOBlaRdIbtA3sJ6XhJqwLPAR+3PVfSqcA2df8Ftk+TtDZwDjCy9vEZ23c0xnUS8Ora70HAh+qxT9TXAO+SdA2wEnCs7csb568JnFXH9iww0fbsFtdveeCbwOqSjrN9TC9ji4iIiBjUkiTFcPMWYEfgaeD3klYDdgcuAU4BdgNWBk4Exto+XtL7gFNtT5e0FXAc8ENK0vE924dI+i6wi+0TJR3SR4IEcIntCyUdCPynpGuBdYAtKf8uZ9ZtxwCn254maVNKwvQOAEmnAAtsHyRpGUoC9z7bCyT9BHhn7etvwAeADuBmSVc04jiltn+FpO2BkylJ4j+wPV/SYcCkdkuQOjpGD3QIbS/XqL1kPtpL5qP9ZE7ay3CdjyRJMdz81vY8AEkPUSooJ1EqR9cADwI3A69onPMQcJSkfSnVnJGNfb+sP2fXthbWjPpzFiWBeQi4wXYn8Lykm4AxwIZdx9q+vVZ+AF5PqWD9tu5bIGk+8D1JTwFvbMQ5s7b7iKQnKMlUl7HAFyQdAYwA5i/CGNrC3LnzBjqEttbRMTrXqI1kPtpL5qP9ZE7ay3CYj56SwNyTFMNNZ4tt+wDn2n4vcDcwEVjAS/8+TgDOs/0x4DpKMtFbeyNabOtu8/pzW+Au4F7qUjtJI4GtgN/U7dvW7ZsCXQ9seBjYCXhrfSjFxsDutj8CHFJj74rjnfX81YAVgUcbcdwHHGF7O+AA4OKFiD0iIiJiSEuSFAE/B74j6XpgHHAe8AiwvKSvAD8ATpd0A7ADsGof7d0j6fw+jtld0vTa3sm2/w+4X9KNwE3AxbZvAz4HHCJpBuW+qH27GqjVoU9R7hX6C/A3Sb8ArqJUplavh65Ql+79CDigntflc8AxdeznAXf2EXdERETEkDeis7PVF+EREYtn18OnLdU/KlMnj1ua3Q06w2GpxGCS+WgvmY/2kzlpL8NhPjo6RrdcAZR7kiKWAElvolRmuru+3R580J2kS4BVum1+wvb4gYgnIiIiYmlLJSki+lvnUP/WaTAZDt8CDiaZj/aS+Wg/mZP2Mhzmo6dKUu5JioiIiIiIaEiSFBERERER0ZAkKSIiIiIioiFJUkREREREREOSpIiIiIiIiIYkSREREREREQ1JkiIiIiIiIhqSJEVERERERDQkSYqIiIiIiGhIkhQREREREdGQJCkiIiIiIqIhSVJERERERERDkqSIiIiIiIiG5QY6gIgYWnY9fNpS6Wfq5HFLpZ+IiIgYflJJioiIiIiIaEiSFBERERER0ZAkKSIiIiIioiFJUgwLknaWNHERjh8lab/F7OvgPvZPl7TB4rTdaGPOQh43QdLJLbY/IGnUIva5iqS9F+WciIiIiMEoSVIMC7avtH3WIpyyGrBYSRJw1GKe1+42BnYb6CAiIiIilrQ83S6GBUkTgJ2BtYDZwHrALbY/LWlr4FTgeeBxYB/gSGCMpKOBqcAUYBTwWuB42z+UdCdwPSV56ATGAwcDq0g6w/aBvYR0vKRVgeeAj9ueK+lUYJu6/wLbp0laGzgHGFn7+IztOxrjOgl4de33IOBD9dgn6muAd0m6BlgJONb25Y3z1wTOqmN7Fphoe3YPMR8JbCJp4iImnBERERGDSpKkGG7eAuwIPA38XtJqwO7AJcAplErJysCJwFjbx0t6H3Cq7emStgKOA35ISTq+Z/sQSd8FdrF9oqRD+kiQAC6xfaGkA4H/lHQtsA6wJeXf5cy67RjgdNvTJG1KSZjeASDpFGCB7YMkLUNJ4N5ne4GknwDvrH39DfgA0AHcLOmKRhyn1PavkLQ9cDIlSWzlRGBSuyRIHR2jBzqEQSPXqr1kPtpL5qP9ZE7ay3CdjyRJMdz81vY8AEkPUSooJ1GqJNcADwI3A69onPMQcJSkfSnVnJGNfb+sP2fXthbWjPpzFiWBeQi4wXYn8Lykm4AxwIZdx9q+vVZ+AF5PqWD9tu5bIGk+8D1JTwFvbMQ5s7b7iKQnKMlUl7HAFyQdAYwA5i/CGAbU3LnzBjqEQaGjY3SuVRvJfLSXzEf7yZy0l+EwHz0lgbknKYabzhbb9gHOtf1e4G5gIrCAl/59nACcZ/tjwHWUZKK39ka02Nbd5vXntsBdwL3UpXaSRgJbAb+p27et2zcFuh7Y8DCwE/DW+lCKjYHdbX8EOKTG3hXHO+v5qwErAo824rgPOML2dsABwMW9xNy8JhERERFDVj7wRMDPge9Iuh4YB5wHPAIsL+krwA+A0yXdAOwArNpHe/dIOr+PY3aXNL22d7Lt/wPul3QjcBNwse3bgM8Bh0iaQbkvat+uBmp16FPAN4G/AH+T9AvgKkplavV66Ap16d6PgAPqeV0+BxxTx34ecGcvMf8OGCvpsD7GFhERETGojejsbPVFeETE4tn18GlL5Y/K1MnjlkY3g95wWCoxmGQ+2kvmo/1kTtrLcJiPjo7RLVcA5Z6kiCVA0psolZnurrd9zNKOZ1FIugRYpdvmJ2yPH4h4IiIiIpa2JEkRS4DtPwLbDXQci8P2h/o+KiIiImLoSpIUEf3qslPHD/nSfERERAxteXBDREREREREQ5KkiIiIiIiIhiRJERERERERDUmSIiIiIiIiGpIkRURERERENCRJioiIiIiIaEiSFBERERER0ZAkKSIiIiIioiFJUkREREREREOSpIiIiIiIiIYkSREREREREQ1JkiIiIiIiIhqWG+gAImJo2fXwaUu0/amTxy3R9iMiIiJSSYqIiIiIiGhIkhQREREREdGQJCkiIiIiIqKhrZIkSZtKOrqX/RMkndxi+wOSRvVjHNMlbdCP7V0oabv+am9J6+k6L+UYJkk6to9jtpF0VZ2vn0s6sG5f7Pj7+l2StIek1evriZJGLmL7a0u6aXFiW4i2XyFpjqRl6/t3SVog6R31/ShJD0paXdIZdVu//tuJiIiIGAraKkmyfbvt4wc6jmh/ktYF/hv4qO3tgHcDH5e08xLu+lBgpfr6C8CyS7i/hWb7OeB2YNO66f3AD4AP1PfvAmbY/rPtAwcgxIiIiIhBYak83U7SBMoHtlcC6wFfAW4FTgdGAH8BPgW8DZhke09J+wIHA48B84GLanNbSvop0AFMsX1W3X6mpLWBh4FPAC8AU2t/ywJft32RpOm1j/skTQJWA84FLqtx/Li2d4yk1wOvAvay/XtJpwLb1P0X2D6t9nkOMBLoBD5j+w5JBwH7AQ8Br+vj+mwO/A8wD3gEeBY4tltMV1GSghfr/v0pSe6Ftres7dwE7AlMADao/a4MHGJ7Zg99rwD8L7BWHcMh3fYfAuxdx3ah7dMlbQR8vfb/mjrmWZJ+A/wMUJ2Hf6nX/1zgecqcfNz2g5K+TElslqHMzQ8kbQOcRpnzF4HeKi4fA86z/TCA7Wck7QQ8Vff90++JpA8DB1F+5wA+DGxE+X2cD3T9LtFqXoE3UhKQ8ySdQ/nduRDYvYfxTKckLRtREqt/rc13SPoRZX4ut32CpHPr9b2yJnp72p4g6Q/AfcC9wDcb1/IPwNo1QWy6CtiW8u9re+CjwAXAccB2wJV1bH//vanj7Wp3LeAVdVy7Am8Cxtv+XS9zERERETGkLM1HgL/a9k6S1qd8+P8r8Cnb99SE6POUD3hIWhU4gvKB9DngukY7zwM7UT7M/ZiXPthOsX2TpK9SEogFwKO2PyZpNHCbpGt6iW81YDPb8yW9n/Lh9fy65OvDku4B1gG2pFy3mZKuBY4BTrc9TdKmwDmStqdUHMbWOG7t49p8C/iY7bslnQis0SKmXwD72b5d0nhKkvK5Xtp82vY4SW+lfEjepIfjJgEP1MR0I+B9lLlB0hjgI5TEsBO4WtJPgLcCh9v+laS9gU8Cs4B1gXG2Z0v6GfBOYLM6/s9SPryvLGljYB3bW9elXjdJugr4BiUh/bWkKX1cs9UpCcjf2X6ixg2tf0/eAnzA9tOSzqz7HwRG2d6inntCbe4Uus2r7XdIup2Xkuz/BPaUtEsP4wG4xfZhdV73oiQfK1ISuaeAG2rC1JM1gbfb/oukS4GTbP9Y0v7A2i2Ov4qS4H8P+FtN7kdI6qAkcVOAnpbXPWB7f0nfquN5v6TjKMnSf/US41LV0TF6oEMYdHLN2kvmo71kPtpP5qS9DNf5WJpJUtcH2tmUD2kbAmfUD7QjgV83jn0zcI/tpwEkzWrsu812p6Q5lMoUwHzbXVWHWcAO9fXVALbn1SRnvW4xjWi8vt/2/Mb7rsRmDiVZ2RC4wXYn8Hyt2oyp22fUfm6XtCalinN3Xf6EpFt6vTKwuu276+sbKNWg7jGtbrvrGs4AWt1z0xzPtTWmuyWt1kvfAq6ox94F3FUrf1AqIGsBXcnlypS5eRD4oqRngNHAk3X/o7Zn19dd83wOJeG9EniCskRtLLBZrbRAmf+1gDVsd/0e/Kz21ZM/UBKIlwYibdK4Bq1+Tx4BviPpKcoc3Vi3u0X7rea1Jz2NB+CX9edsyu8RwB2NhO4WSvLW1JzHR23/pRFT17+FG4B9avXtS3Xb1ygJ4frAzpRrDvATShVplO05tZLUym31518p1SuAx+k5qRoQc+fOG+gQBpWOjtG5Zm0k89FeMh/tJ3PSXobDfPSUBC7Ne5I6u703ZenVdpQq0uWNfb8FNpC0gqRlgM17aQdg+fptP5RqxV2U5UnbAtRK0ljgfspStTfUY9/eaGNBH/HeS11qV2/W3wr4Tbd+NqUkVb8HxtT4l6UsI+zN7Fq1gVKpahXTn2sFBuA9lKTyWeB1kpaV9BpKpavLZjWmjShJTU/upVR8kLSupAsa+wzcDby3ztO5wK8oyySPsf2J+r7rQ32ruRlPSS63p9wfcwTlA/h1tc1xwPcp12yOpA3ree/sJWYo1bH9aoUESSsCZ1IqTP8Ui6RXU5ac7UlZBvlMI+7ucw+t57Xr2GW6ve5pPP8UR7WhpBUlLQdsQbnGC/N7eRflviKovye2Z9rerv53eU3i76xjvKIeewWlsjm9RSxNrWKNiIiIGHYG8sENn6bc23EDpSpyZ9cO249S7hO5gfJt+AqU5VM9eQ44RNIMyn0e36Ysr3qtpJmUD4fH2X6E8gH/f+qysYW+6d72/wH3S7qRcq/MxbZvoyx56+p7CrCv7bnA0ZRv/a8A/tZH8wcCUyVdTUkIW411f+Cb9XodCvy77TmU5VU/r+P9beP4t9Xlhd+u5/bkTGBdSdcD51GW8XWN+Q5KFWlmXe63PiXhOh+YVmN5Cy8lJq38AjixHjuJcl/VZcBTddutQKfteZT7Z75T416rpwZrbA9QkutLagXneuA7tn/cwylPUqpTt1F+r57pI+5/mte6fRbl93aV2s6PexlPTx6j3GM3i/J7dA9lnv69/g6s0cN5RwCT6/XZjZ7/TVwFrFnbBbiFUoW6sofjF4qkn0pa/uW0ERERETEYjOjsbL8vj+s37EfYPrG+nwEcZXvGwEa2ZKg85OH7tudK+hJl+eBiP+Wv3kc1x/a3+ivGGHiS9gFutv1bSfsBW9n+1EDH1d2uh09bon9Upk4etySbH3KGw1KJwSTz0V4yH+0nc9JehsN8dHSMHtFq+9K8J2mh2X5B0qsk3UZ56tjNlG/tBy1Jb6JUarq7nrJk7af1XpknKE/n6+/+z6DcQ9XdLraf6e/++oukS4BVum1+wvb4gYhngM0GLpT0NOXpf/v2cXxERERELIa2rCRFxOCVSlJ7GQ7fAg4mmY/2kvloP5mT9jIc5mNQVZIiYvC67NTxQ/4PakRERAxtA/nghoiIiIiIiLaTJCkiIiIiIqIhSVJERERERERDkqSIiIiIiIiGJEkRERERERENSZIiIiIiIiIakiRFREREREQ0JEmKiIiIiIhoSJIUERERERHRkCQpIiIiIiKiIUlSREREREREQ5KkiIiIiIiIhuUGOoCIGFp2PXzaEml36uRxS6TdiIiIiO5SSYqIiIiIiGhIkhQREREREdGQJCkiIiIiIqIh9yTFoCXpXOBCYDVgA9uTezhuFWBn2xdImgxca/uWpRcpSJoAbAD8F3C07QP7oc3zgLcA5wJr9zT+Hs6dDFwLjKHFtZP0QN3+7MuNMyIiImKwSZIUw8HGwG7ABbZPHshAbM8BXnaCVO1k+/U1AVvUOE4GkDSmn2KJiIiIGDKSJEW/k7QC8L/AWsBI4HDgIOA1wKrA2banSJoO3A5sBKwE/KvtP0g6Ctid8vs5xfaZkg4B9gY6gQttn95D318G3gGMBu61/UngSGATSROBrSjVp2uAqcB6wLLA121f1FNMPfR1LKU69DpgZeAQ2zMl7QMcBjwH/AaY2Dhn7Rr/lpI+CBxTd/0SOAU43/bm9diLgFNs/7xF32cAK0uaBlza2P5P10nSD4CrgPOBmcC+wKH1OgC8S9I1dbzH2r680d6awFnAKOBZYKLt2a2uR0RERMRQkSQploRJwAO295S0EbAj5QP7JZJWB64HptRjb7F9mKQTgb0k/QTYBdgCeAXwZUlvBT4CbEP58H91Pe4fSFoJeNz2DpKWAe6WtAZwIjDJ9lmStqqHHwA8avtjkkYDt9VE4Z9iAnqrPj1te1yN8QJJ44DjgLfZnifpG7Wvp7rFuhzwTWBz24/8f/buPN6qsvz//wsFczrldAzxUypqb0EwjVSciRw+VoaV31IbxClJIzP8JpkDmn7SPg6JiTiRmhoOP43MIUcmURwIlelywuSHIZCmmAOo5/vHfe9cbvfeh+Ec2Oec9/Px8MHea61939e67wWPde3rXltJp5GSkLdzdWcesEWlBAkgIo6V9M2IGFCqJOXPVRqno0nJ0X7AZRHxN0nF5v4NfBVoBCZLuquw7zxgeETcJenLeSy+W2M8Wk1jY8Oq6LZd8NjVF89HffF81B/PSX3pqPPhJMlag4C7ACJimqRXgXMkfRN4g1RdKvlb/nMO6dkikZKU94G3gOMlfZtUlSolMesDW1Xo921gY0l/JCUl65b1VdQDuC/HuEjSDFJVqVJMtTyQ25guqSvQHZgeEYvy/vGkJHFy2ec2IiV08/PnzwSQdAUwEHiJVPlZFr2oME4REZKuA35G5QRnYkQ0AfMlvQ5sWNjXGzhZ0klAJ2DxMsbUYhYsWNT8QfYxjY0NHrs64vmoL56P+uM5qS8dYT6qJYH+dTtrDTOBHQEkdSdVTB6OiO8BN5Nutkuayj47C/iCpNUkdZF0LxDAdOBLEdGP9EMFT1fod3/gMxFxCHAysFbu6wM+fq3PBPbIMTaQkoHZVWKqpU9uoxcwN7fRU9I6ef9ewDMVPjcfWC//qASShkvaCbiFlFR9g2VPkiqOU56Dg4HhpMpQudJcdSUllgsL+2YBJ+X2jsnxmZmZmbVrTpKsNVwGdJc0DrgWeJhUEZpIelbnPUmfqPTBiJgK3A08RFoidn1EPEmqjkyU9DiwNSkhKfdo7vcR0s38C0A34Hmgt6SfFo69HNgwxzQWOKNU1VlGO+RlelcCR0fEQtJzRg/mODbiw6WFxfP8gPQDDnfkGDoBj+VfkxsPzI+IV5clkCrj9ApwPfAT0rLDHpIGlH10LUkPAH8GjslVpZITgdMLc/nUssRkZmZm1hZ1ampali/Nzawk/3DDvIgY2cLtjgBuiYgHWrLdleWAIWNa5R+VUUP7t0az7V5HWCrRlng+6ovno/54TupLR5iPxsaGTpW2+5kks2ZIuhXYoGzz63z47FJL9nUP8HIpQco/6FApOzg8ImZX2G5mZmZmK8hJklkzIuKbK7GvfcvenwmcubL6NzMzMzMnSWbWwm4/f0C7L82bmZlZ++YfbjAzMzMzMytwkmRmZmZmZlbgJMnMzMzMzKzASZKZmZmZmVmBkyQzMzMzM7MCJ0lmZmZmZmYFTpLMzMzMzMwKnCSZmZmZmZkVOEkyMzMzMzMrcJJkZmZmZmZW4CTJzMzMzMyswEmSmZmZmZlZgZMkMzMzMzOzgs6rOgAza18OGDJmhT4/amj/ForEzMzMbPm4kmRmZmZmZlbgJMnMzMzMzKzASZLVDUlXS/pvSQMlnVPjuA0kHZpfD5W008qL8j8xDJR0jqSukkas7P6rkTSvBdr4oaQuLRGPmZmZWVvkZ5KsLdoO+DpwQ0RUTaZWhoiYBxy7KmNoBScD1wJLVnUgZmZmZquCkyRrlqS1gN8DmwFdgCHAccB6wEbAFRFxqaSxwFSgF/BJ4P9ExN8lnQIcSLreLo2IyyQNBg4FmoDRETG8St+/Br4INAAzI+Jw4JfA5yX9ENgVGA3cD4wCtgRWBy6IiBurxVSlr2HANsDGwPrA4IiYKOm7wE+Bd4FngR8WPrN5jr+vpK8Bp+ddfwPOA66LiJ3ysTcC50XEYxX67gf8IvfxGWAk0B/4PHBRHt99gLOAd4B/AkcAi4DLgW2B54FP5PY+k7evmY//YR6X2/Nn7wQmF+JdG/gBsAfQNY/pgXn89yRVnS+IiJsrjZ2ZmZlZe+IkyZbGIODFiDhYUi9gX1JicKukbsA44NJ87KMR8VNJZwOHSPorsD+wM+kG/teStgW+A+xOSpLuy8d9hKRPAq9FxD6SVgOmS9oUOBsYFBGXS9o1H34MsDAivi+pAZgi6f5KMQG1qk9vRUT/HOMNkvoDZwA7RMQiSRfmvt4si7Uz8Dtgp4iYL+k0UnLytqSewDxgi0oJUsF/AdsDfYCbSQnfpsBtkkaSkp7dI2KupOOBU4CxwJo5SfsscFBu6zxgeETcJenL+Zx/SUqA+kTEYknHAt+LiJclnUxKIM+WdCpwsKT9c8y7SVoTeETSvRHxrxrnsMIaGxtas/kOyWNaXzwf9cXzUX88J/Wlo86HkyRbGgLuAoiIaZJeBc6R9E3gDVJ1qeRv+c85pBtykZKU94G3gOMlfZtUlSolMesDW1Xo921gY0l/JCUl65b1VdQDuC/HuEjSDFKSUSmmWh7IbUyX1BXoDkyPiEV5/3hSkji57HMbkRK6+fnzZwJIugIYCLwEXNdM39MiYomkfwHP50TmNVI1aCPgjYiYW4jjf4AFwKO5z5ckzcn7ewMnSzoJ6AQszttnR0Tp9VxguKQ3ScnYQ2Xx9Ab65GocpLHfDGjVJGnBgkXNH2RLrbGxwWNaRzwf9cXzUX88J/WlI8xHtSTQP9xgS2MmsCOApO6kisnDEfE9UsWjU+HYprLPzgK+IGk1SV0k3QsEMB34UkT0A64Gnq7Q7/7AZyLiENJzMmvlvj7g49fuTNJSMXIlqTcwu0pMtfTJbfQiJRGzgZ6S1sn79wKeqfC5+cB6kjbInx+ef1DiFlJS9Q2aT5JqxbkQ+KSkTcrimAXskvvsRkp2yNtPyuN7TI4D0tiVXAkcHhEDgZf5cB5L4zsLeDC30R+4CXihmXMwMzMza/OcJNnSuAzoLmkc6YH+h0kVoYmkZ3Xek/SJSh+MiKnA3aQqxUTg+oh4klRFmijpcWBrUkJS7tHc7yOkm/wXgG6kZ296S/pp4djLgQ1zTGOBM0pVnWW0Q16mdyVwdEQsJD2382COYyM+XFpYPM8PSD/gcEeOoRPwWES8Q6r6zI+IV5cjnlL7TcDRwK2SHgL2Bn4VEWOAOZImA78lJVMAJwKnF+bsqQrN/gGYnNtrII0twATSM0u3A29KmgA8ATQVKmpmZmZm7VanpqZl+ZLdrP3KP9wwLyJGtnC7I4BbIuKBlmy3Xh0wZMwK/aMyamj/lgrF6BhLJdoSz0d98XzUH89JfekI89HY2NCp0nY/k2QdjqRbgQ3KNr/Oh88utWRf9wAvlxKk/IMOlbKAwyNidoXtZmZmZraSOUmyDicivrkS+9q37P2ZwJkrq38zMzMzW3ZOksysRd1+/oB2X5o3MzOz9s0/3GBmZmZmZlbgJMnMzMzMzKzASZKZmZmZmVmBkyQzMzMzM7MCJ0lmZmZmZmYFTpLMzMzMzMwKnCSZmZmZmZkVOEkyMzMzMzMrcJJkZmZmZmZW4CTJzMzMzMyswEmSmZmZmZlZgZMkMzMzMzOzAidJZmZmZmZmBZ1XdQBm1r4cMGTMCn1+1ND+LRSJmZmZ2fJxJcnMzMzMzKzASZKZmZmZmVmBk6SVSNL2kk6rsX+gpHMqbH9R0potGMdYSdu0YHujJfVrqfZaW7VxXskxDJI0rMb+gXneP1nYtszjLGlzSY9U2L67hlKB+AAAIABJREFUpP8r6fuSDsrbhuW4+kkavSz9mJmZmbUnfiZpJYqIqcDUVR2HtRlrAxcCR7Z0wxExEZjY0u2amZmZtQdOklqApIHAV0g3tVsC5wJPAMOBTsA/gSOAHYBBEXGwpCOBHwOvAouBG3NzfSXdAzQCl0bE5Xn7ZZI2B14BDgPeA0bl/lYHLoiIGyWNzX3MkjQI6ApcDdye47gzt3e6pE8D6wCHRMQLks4Hds/7b4iIi3KfVwFdgCbgJxHxpKTjgKOAfwAbNzM+OwGXAIuA+cA7wLCymO4FLgbez/uPJlU6R0dE39zOI8DBwEBgm9zv+sDgfNNfqe+1gN8Dm+VzGFy2fzBwaD630RExXFIv4ILc/3r5nCdJehZ4CFCeh2/l8b8aWEKakx9ExFxJvwb2zG1cEBE3S9oduIg05+8DH6vwlLkG2E3S1yLiL2VxV2p/LJXnHkmr59fTIuJcSUPyWL4HjI+Ik6qM38fOOSLebyZuMzMzszbNy+1azqci4mvA14GhwBXAcRHRj5QE/Lx0oKSNgJOA3YB9SYlKyRJgP+AbwE8L2y+NiL2AF0kJxDHAwojYFdgbOCu3W01XYN+I+E1+f0dE9AfuAg6S9DVgC6AvKVE6VFJv4DxgeETsCRwPXCXpU/l1X2AAsEYzYzMSGJj7e75KTFcAP87nOIKUpNTyVm7ve6QErJpBwIsRsQspudq5tENST+A7+Xx3Bw6UJGBbYEhE7J3jODx/pDtwam6rEdgR2IeUEO8NnA2sL2l/YIuI2A34EvBLSeuRqkKHRMQ+wOxmzg9SInUY8FtJGxbirtZ+NZ2B64GHc4LUG/g2sGv+b+s8/5VUOmczMzOzds2VpJZTWkY3B1gT6AGMSPfcdAGeKRy7FTAjIt4CkDSpsG9KRDRJmkeqTAEsjohS1WES6cYc4D6AiFgkaQapqlHUqfB6dkQsLrx/Iv85j5Ss9AAmREQTsCRXbXrm7eNzP1MlfYZUxZkeEe/m+B+tOTLQLSKm59cTSBWM8pi65eWI5P4qPTNUPJ8HckzTJXWt0bdIiSARMQ2Ylit/AL1IFab78/v1SXMzFzhV0ttAA/BG3r8wIubk16V5voqU8N4NvA6cDPQG+uTKDqT53wzYNCJK18FDua+aIuJZSReREsemvLla+0XFsfp8Pod18/ttgEciYgmApAmkxLCSSufcqhobG1q7iw7HY1pfPB/1xfNRfzwn9aWjzoeTpJbTVPY+SEuvXpK0G7BJYd9zwDZ5Kdi7wE7ArCrtAKwhafucROwBTCMtsdsDuE1SA+nGeTZpqdomub0vkG74AT5oJt6ZpIrJhZK6kCoM1+TtewB/lrQ9Kal6AeiZ419MWkZ4XbWBAeZI6hkRM0jVp5JiTC9L2i4ingL2IiWV7wAb56ViDaRKV0kf4Lq8NG4u1c0kVT/GSOoOnAXck/cFMB3YPyemJwBPA38CvhsRMyWdAWyej680NwNIyeUZkg4hJUy3AQ9GxA8lrQacShqzeZJ6REQpptdqxF30u9zPdqSq3Kwq7Veb+yeArwKPSro77x8iqTOpWrUncC0pmSpX6Zxb1YIFi1Z2l+1aY2ODx7SOeD7qi+ej/nhO6ktHmI9qSaCX27WeHwHX5m/pzwGeKu2IiIWk55YmkCoQa5GW2VXzLjBY0njSczhXApcDG0qaCIwFzoiI+aTnoC6R9FdSIrVU8jMvsyU9THpW5paImAKcWOj7UuDIiFgAnEaqat0F/LuZ5o8FRkm6j5QQVjrXo4Hf5fE6HjghIuaRnlV6LJ/vc4Xjd5B0fx6Lo2v0fRnQXdI4UiLwn2V8EfEkqYo0UdLjwNakxOI6UlI1Afgc0K1G+48DZ+djB5Geq7odeDNvewJoiohFpKWB1+S4yys/VeXq3hHAJ/Kmau1XnfuIeDvHdy0pAb2JVM16lLSE809LG4+ZmZlZe9epqWmlf1Hc4eVv8E+KiLPz+/HAKRExftVG1jryjzzcFBELJJ1FWj545gq0NwyYFxEjWypGazkHDBmzQv+ojBrav6VCMTrGt4Btieejvng+6o/npL50hPlobGzoVGm7l9utAhHxnqR1JE0hLVebTKoqtVmSPkuqUpQbR1rCdo+kN0nP7RzWCv2PID1DVW7/XEWpS5JuBTYo2/x6RAxYFfGYmZmZmStJZtbCXEmqLx3hW8C2xPNRXzwf9cdzUl86wny4kmRmK8Xt5w9o9/+gmpmZWfvmH24wMzMzMzMrcJJkZmZmZmZW4CTJzMzMzMyswEmSmZmZmZlZgZMkMzMzMzOzAidJZmZmZmZmBU6SzMzMzMzMCpwkmZmZmZmZFThJMjMzMzMzK3CSZGZmZmZmVuAkyczMzMzMrMBJkpmZmZmZWYGTJDMzMzMzs4LOqzoAM2tfDhgyZoU+P2po/xaKxMzMzGz5uJJkZmZmZmZW4CTJzMzMzMysoFWW20naHvh6RJxZZf9AYJuIGFq2/cW8/Z0WimMsMCgiZrVQe6OBkRExtiXaa23VxnklxzAI6BoRw6rsvx7YFNgcWAy8DDwdEYNXQmxnAS/m/wZGxPeW8nPnAl8GToiICUtx/C+BLwEf5P9+ERF/q3LsxBzLc2XbvwOsDnwWGBcRDy9NrIXPnwW8GBFXLsvnzMzMzDqiVkmSImIqMLU12rb2JSK+CyBpGDAvIkau2oiWyneAHhHxdnMHStoO+G9gz4hokvRF4Eqgz7J0GBE3LlekZmZmZrbMljpJylWJrwBrA1sC50bE1ZJ6A8OBTsA/gSOAHUgVnIMlHQn8GHiVVCko3ez1lXQP0AhcGhGX5+2XSdoceAU4DHgPGJX7XB24ICJuLFaJStUK4Grg9hzHnbm90yV9GlgHOCQiXpB0PrB73n9DRFyU+7wK6AI0AT+JiCclHQccBfwD2LiZMdoJuARYBMwH3gGGlcV0L3Ax8H7efzRp2ePoiOib23kEOBgYCGyT+10fGBwRE6v0vRbwe2CzfA6Dy/YPBg7N5zY6IoZL6gVckPtfL5/zJEnPAg8ByvPwrTz+VwNLSHPyg4iYK+nXwJ65jQsi4mZJuwMXkeb8feCRWuNW5XzWAC4DupPm/RcRMUHSNGAC0AuYnvvYHXgb+CppvLcEPp3H7NiIeFjSwcDxOZ5xEfHLj3epu0nX458i4lc5obkon+/bpLk6CtgEuFvSPhGxuJlTeYVUJRso6a8R8bikXXOHuwAXkv7uzAFKlawzJXUl/V07OCJelPRbYJe8/w8R8TtJ1wFvAluQrv8f5Gu22rkeJOlQYC3StfR4pWNz1WknYF3SNXgocACwAGgATqp2HZqZmZm1B8v6TNKnIuJrwNeB0hKuK4DjIqIfKQn4eelgSRsBJwG7AfuSEpWSJcB+wDeAnxa2XxoRe5GWQB0NHAMsjIhdgb2Bs3K71XQF9o2I3+T3d0REf+Au0k3i10g3lX1JN9eH5kTvPGB4ROxJumm8StKn8uu+wABgjWbGZyRpqVR/4PkqMV0B/Dif4whSklLLW7m975ESsGoGkZZT7UK6sd25tENST1L1Y/f834GSBGwLDImIvXMch+ePdAdOzW01AjsC+wBPkObgbGB9SfsDW0TEbqTlZL+UtB7pxv+QiNgHmN3M+VVzDPByHqcDgUvz9vWAqyNijxzL2Dxn65ISSoBFecwOAy6R1AicAvSPiN2B7pK+VNbfJ0jX9Z7AT/K2K0iJ+F759f9GxOmkZOHLS5EgERGvkK7xPYHJkmYA++fdlwOHRcTOwDhSUgrw5xz/fcA3JR0IdCNdh3uQEq6e+dgXImI/0rV3dDPn+lxu9xhgRDPHPp3/zjWQlhbuBHwzx2FmZmbWri3rcrvSEro5wJr5dQ/SDRekCsYzheO3AmZExFsAkiYV9k3Jy4/mkb4xB1gcEaWqwyTSjTmkm0UiYlG+ydyyLK5Ohdezy25en8h/ziMlKz2ACRHRBCzJVZueefv43M9USZ8h3XRPj4h3c/yPVh2ZpFtETM+vJ5CqQeUxdcvLEcn9nVOhneL5PJBjmp6rC9WIlAgSEdOAabn6B6nqshlwf36/Pmlu5gKnSnqbdDP8Rt6/MCLm5Nelub6KlPDeDbwOnAz0Bvrkqh6k+d8M2DQiStfBQ7mvZdWbVG3cLb9fIydgAFPyn/8CZuTXr/HhNVkas6ckbQpsTarG3ZWv00/y8Wvo6TxHiyW9n7d9OiKezq/Hk6pUFUn6PSn5nhcRBxe2bw28GhGH5/c7AXfkMdsoIiLHenHeDx+9Ztfjo9fsYkmT8zaA0rNNc0hL+Gqda+n6fkrSfzVzbOQ/ewCTI+J94C1JpdhaTWNjQ2t30eF4TOuL56O+eD7qj+ekvnTU+VjWJKmpwrYgLfN5Kd/QblLY9xywTV4K9i7p2+jSjyhUamsNSdvnJGIPYBppqdUewG2SGkg3z7NJS9U2ye19gXTDD+nB+FoxzyRVTC6U1AXYFbgmb98D+HP+4Yl5wAtAzxz/YtIywusqDUw2R1LPiJhB+ta/pBjTy5K2i4ingL1ISeU7wMaSViclK1sUju8DXJeXxs2lupmkis8YSd2Bs4B78r4gLU3bPyemJwBPA38CvhsRMyWdQVoWBpXnZgDpRv0MSYeQEqbbgAcj4oeSVgNOJY3ZPEk9IqIU02s14q5mFqny8RtJa5OSstdrxFfUBxgt6fPA30lVvZeAfSJiiaQjgMcK51utzVckbZsT39JcVVRKgirYAThC0oH5B0meyefxHjBfUve8BPRk0vVeKZaZwCHAxXkZ4i6kpYiVjq11rjsBN0nagfR3qNaxpWt2GlCa3zWA7auNQUtZsGBRa3fRoTQ2NnhM64jno754PuqP56S+dIT5qJYEtsRPgP8IuFbSBFJV5KnSjohYCJxLqqrcTXoWYkmNtt4FBksaT/qG+0rSkqQN869+jQXOiIj5pOegLpH0V1IitVQi4i/AbEkPk56VuSUipgAnFvq+FDgyIhYAp5GqWncB/26m+WOBUZLuI92QVjrXo4Hf5fE6nvQLafNIzyo9ls+3+MtmO0i6P4/F0TX6voy0XGoccC2FZXwR8SSpijRR0uOkCsJcUsI3JsfyOWovpXocODsfO4j0XNXtwJt52xNAU0QsIi0NvCbHvVmNNmu5FNgun89DpGVlzSVHJV/MfY8EjslL3i4GxuUqzD58dIyrOQoYmc/vWGDIsp5ERNxEun4mS3qItCT1hIh4k7Ts7Zp8jr1If0cqGUNKricBD5Oeo3uq0oHNnOtWkh7I+wctzbjkLyzuz/3+f6QvC2r9HTYzMzNr8zo1NS3tfeeyk9SZ9JD32fn9eOCUiBjfap2uQvlHHm6KiAX54ffFUeVn0JeyvWG0nV98qwvyT123qLzE88CIGClpTVJVa/eIqFrVPGDImBX6R2XU0P4r8nEr0xG+BWxLPB/1xfNRfzwn9aUjzEdjY0OnSttb5SfASyLiPUnrSJpC+gZ6Mqmq1GZJ+iypUlNuHGkJ2z2S3iQtqTqsFfofQXqGqtz+sRQ/Sb2qSLoV2KBs8+sRMWBVxGNLbQGwS16K1wkYUStBMjMzM2sPWrWSZGYdjytJ9aUjfAvYlng+6ovno/54TupLR5iPapWklngmyczMzMzMrN1o1eV2Ztbx3H7+gHb/rZOZmZm1b64kmZmZmZmZFThJMjMzMzMzK3CSZGZmZmZmVuAkyczMzMzMrMBJkpmZmZmZWYGTJDMzMzMzswInSWZmZmZmZgVOkszMzMzMzAqcJJmZmZmZmRU4STIzMzMzMytwkmRmZmZmZlbgJMnMzMzMzKyg86oOwMzalwOGjFmhz48a2r+FIjEzMzNbPq4kmZmZmZmZFThJMjMzMzMzK3CStApJ2l7SaTX2D5R0ToXtL0paswXjGCtpmxZsb7Skfi3VXmurNs4rOYZBkobV2D9Q0kt5rh6U9LCkby9HP1dL+u8VCtbMzMysnfMzSatQREwFpq7qOKzNuCEihgJI2gB4StLNEdG0iuMyMzMza1ecJLUCSQOBrwBrA1sC5wJPAMOBTsA/gSOAHYBBEXGwpCOBHwOvAouBG3NzfSXdAzQCl0bE5Xn7ZZI2B14BDgPeA0bl/lYHLoiIGyWNzX3MkjQI6ApcDdye47gzt3e6pE8D6wCHRMQLks4Hds/7b4iIi3KfVwFdgCbgJxHxpKTjgKOAfwAbNzM+OwGXAIuA+cA7wLCymO4FLgbez/uPJlU+R0dE39zOI8DBwEBgm9zv+sDgiJhYpe+1gN8Dm+VzGFy2fzBwaD630RExXFIv4ILc/3r5nCdJehZ4CFCeh2/l8b8aWEKakx9ExFxJvwb2zG1cEBE3S9oduIg05+8Dj9QatzLrAW9HRJOkg4DjSNcWwEFAL+Ak0rW0BXBjRJxdOM+dSdfjQaTr5SNzCnwJ6BwR50m6DHgnIo6XdArwQkTcsAyxmpmZmbUpXm7Xej4VEV8Dvg4MBa4AjouIfqQk4OelAyVtRLqh3Q3Yl5SolCwB9gO+Afy0sP3SiNgLeJGUQBwDLIyIXYG9gbNyu9V0BfaNiN/k93dERH/gLuAgSV8j3Vz3JSVKh0rqDZwHDI+IPYHjgaskfSq/7gsMANZoZmxGAgNzf89XiekK4Mf5HEeQkpRa3srtfY+UgFUzCHgxInYhJVc7l3ZI6gl8J5/v7sCBkgRsCwyJiL1zHIfnj3QHTs1tNQI7AvuQEuK9gbOB9SXtD2wREbuRko9fSloPuJCUkO4DzG7m/CDNwVhJD5ASnO/n7Z8DvpqvrSBdL5ASwW8Bu1C43oBd83kcEBFzqDCnwK1AaVne50hzS277L0sRq5mZmVmb5UpS6ykto5sDrAn0AEake266AM8Ujt0KmBERbwFImlTYNyVXC+aRKlMAiyOiVHWYRLoxB7gPICIWSZpBqmoUdSq8nh0Riwvvn8h/ziMlKz2ACXkp15JctemZt4/P/UyV9BlSFWd6RLyb43+05shAt4iYnl9PIFWDymPqlpcjkvur9MxQ8XweyDFNl9S1Rt8iJYJExDRgWq78Qaq+bAbcn9+vT5qbucCpkt4GGoA38v6FOcmAD+f5KlLCezfwOnAy0Bvok6t6kOZ/M2DTiChdBw/lvmr5z3K7MvOBayS9SZqLh/P2pyPiPeC9HHvJvvk8luT3H5vTiHhJ0tq56jcT2EzSjsDrEfEGraixsaE1m++QPKb1xfNRXzwf9cdzUl866nw4SWo95c+JBGnp1UuSdgM2Kex7DtgmLwV7F9gJmFWlHYA1JG2fk4g9gGmkJVN7ALdJaiDdmM8mLVXbJLf3BdINP8AHzcQ7k1QxuVBSF1L14Zq8fQ/gz5K2JyVVLwA9c/yLScsIr6s2MMAcST0jYgYfVijKY3pZ0nYR8RSwFympfAfYWNLqpJv8LQrH9wGuy0vj5lLdTFLFZ4yk7sBZwD15XwDTgf1zYnoC8DTwJ+C7ETFT0hnA5vn4SnMzgJRcniHpEFLCdBvwYET8UNJqwKmkMZsnqUdElGJ6rUbcFeUq3hnAZ/Ome/kweaz2rNIw4L+AS0kJaqU5BbgD+A3w29z+xaQKX6tasGBRa3fRoTQ2NnhM64jno754PuqP56S+dIT5qJYEerndyvMj4FpJE0hVkadKOyJiIem5pQmkCsRafPgtfyXvAoMljSc9h3MlcDmwoaSJwFjgjIiYT1qWdYmkv5ISqaUSEX8BZkt6mPSszC0RMQU4sdD3pcCREbEAOI1U1boL+HczzR8LjJJ0HykhrHSuRwO/y+N1PHBCRMwjJQGP5fN9rnD8DpLuz2NxdI2+LwO6SxoHXEthGV9EPEmqIk2U9DiwNSnhuo6UVE0gLT3rVqP9x4Gz87GDSInF7cCbedsTQFNELCItDbwmx71ZjTZreYNUhZpCun7ebiY+ACLiSmA9SYdSYU7zYbeSloA+APwV+CKwYv+nWDMzM7M2oFNTk38Ya1WT1Bk4qfRgfb5ZPSUixq/ayFpH/pGHmyJigaSzSMsHz1yB9oYB8yJiZEvFaMvvgCFjVugflVFD+7dUKEbH+BawLfF81BfPR/3xnNSXjjAfjY0NnSpt93K7OhAR70laR9IU0nK1yaSqQJsl6bOkSk25caQlbPfkZ2heJ/06X0v3P4L0DFW5/SPi7Qrb64KkW4ENyja/HhEDVkU8ZmZmZh2RK0lm1qJcSaovHeFbwLbE81FfPB/1x3NSXzrCfFSrJPmZJDMzMzMzswIvtzOzFnX7+QPa/bdOZmZm1r65kmRmZmZmZlbgJMnMzMzMzKzASZKZmZmZmVmBkyQzMzMzM7MCJ0lmZmZmZmYFTpLMzMzMzMwKnCSZmZmZmZkVOEkyMzMzMzMrcJJkZmZmZmZW4CTJzMzMzMyswEmSmZmZmZlZgZMkMzMzMzOzgs6rOgAza18OGDJmuT43amj/Fo7EzMzMbPm4kmRmZmZmZlbgJMnMzMzMzKzASZKZmZmZmVlBiyVJkraXdFqN/QMlnVNh+4uS1mzBOMZK2qYF2xstqV9Ltdfaqo3zSo5hkKRhNfb3kzQ/z1Xpvx9WOO7WZehzXoVtzV2TH/tMleOWekyb67PC8f+5/iV1lfSUpO8t7eeXpx8zMzMzq63FfrghIqYCU1uqPWv3HoiIg2sdEBHfXJEOVsU1ubx9StoUuBM4LSL+1OKBmZmZmdlSazZJkjQQ+AqwNrAlcC7wBDAc6AT8EzgC2AEYFBEHSzoS+DHwKrAYuDE311fSPUAjcGlEXJ63XyZpc+AV4DDgPWBU7m914IKIuFHS2NzHLEmDgK7A1cDtOY47c3unS/o0sA5wSES8IOl8YPe8/4aIuCj3eRXQBWgCfhIRT0o6DjgK+AewcTPjsxNwCbAImA+8Awwri+le4GLg/bz/aFIVb3RE9M3tPAIcDAwEtsn9rg8MjoiJVfpeC/g9sFk+h8Fl+wcDh+ZzGx0RwyX1Ai7I/a+Xz3mSpGeBhwDlefhWHv+rgSWkOflBRMyV9Gtgz9zGBRFxs6TdgYtIc/4+8EitcatyPgNJ19JqwOnA9RHRVVJvPn69vQlcDmwLPA98IrdxNbBh/u9/ge8Urskfka6nMRExDPiEpBuAz+Z2DwJ2As7P5/wa8N0c3seuXUkHAcfluMif78WHfw8+NqYR8X6FU/8s8CfSXNxXZSw2AH5GGtuJETE0V+vmRcTIXD0dCewP3JXb7Qz0zf1D5b9nI4Gtcz+nRMRYSdOAZ4B3SdfUDXl8A+gfEVtVOAczMzOzdmNpK0mfioj9JG1Nuvn/F3BERMzIN58/JyUCSNoIOAnYnnST9WChnSXAfqSb+jtJN7mQbjofkfQbUgLxAbAwIr4vqQGYIun+GvF1BfpExGJJXwHuiIjr8k3kQZJmAFuQbhg7AxMlPUC6+RweEWMkbQ9cJenLwPFA7xzHE82MzUjg+xExXdLZwKYVYnocOCoipkoaQEpSTqzR5lsR0V/StqQb1M9XOW4Q8GK+Ie8F7E2aGyT1BL5DSgybgPsk/ZWUVAyJiKclHQocDkwCupNugOdIegjYEeiTz/9nwB7A+pK2A7aIiN3y8q1HJN0LXEhKSJ+RdGkzYwbQPye9JV/Of74WEQPyOZT2XcHHr7eHgTUjoq+kz5ISlJIHIuLC0jJJSRsDQ4HtSNfk+ZLWBdYFTo6IF3MsOwAHArcC5wFfJyWqUPna/Rzw1Yh4S9Jlef/cQhyVxrRS8ngL8DYfT8hfi4gBkjYAJgJfzH39QdI+FdohIt4G+knqBPwBuDYins9jWf73bAnp79mRkjYExpOuj3WBX0XE3yRdCPwpIkbkPvet1G9LaGxsaK2mOzyPbX3xfNQXz0f98ZzUl446H0ubJJWWD80B1gR6ACPyjVcX0rfOJVsBMyLiLQBJkwr7pkREU34WZO28bXFElG4cJwGlm7/7ACJiUU5ytiyLqVPh9eyIWFx4X0ps5pGSlR7AhIhoApbkqk3PvH187meqpM+QqjjTI+LdHP+jNUcGukXE9Px6AqkaVB5Tt7wMi9xfpedbiufzQI5puqSuNfoWuWoQEdOAabkCAamisRlQSi7XJ83NXOBUSW8DDcAbef/CiJiTX5fm+SpSwns38DpwMil57FNIcLrkfjaNiNJ18FDuq5aPLbfL11NUOLbS9bYt8Gg+95ckzSkcX95Gd2BaTiAATsj9vRoRL+ZtpWvyf4BfksZtLjA576907c4HrpH0Jum6ebis34+NqaSz+LCiWUoMjyBVdx6SNCUiZpWdx1akCtadeQwa8jkVdSp7fzEQhWptpb9nnYA9JO2ct3fOyVKx7x7ANfn1BFrRggWLWrP5DquxscFjW0c8H/XF81F/PCf1pSPMR7UkcGl/uKGp7H2Qll71I32rf0dh33PANpLWkrQaaflStXYA1shVHEjVimnAzPyaXEnqDcwmLVXbJB/7hUIbHzQT70zyjamkLsCuwLNl/WxPulF+AeiZ41+dVF2oZU6u2kCqVFWK6eVcgQHYi3ST/w6wsaTVJa1HqnSV9Mkx9eKjlYlyM0nVCSR1z0vHSgKYDnwpz9PVwNOkZWunR8Rh+X3p5rrS3AwgJZdfBm4mJUyzgAdzm/2Bm0hjNk9Sj/y5HWvE3JzyuSydS/n1NgvYBUBSNz6s4FVq43nSNVlakndLfgao0jl/F7g6Ir5EGr/SD0p85FhJnwLOICXFR5EqQeWJysfaj4hTIqJf/q+09G5aTqZ+Btycl1EWz2M2KcnaJ4/BxaTkreLfB0m/AjpFxK8KXVf6ezYL+GNuc3/SHL9W1vc08jjz0evbzMzMrN1a3l+3+xFwraQJpKrIU6UdEbGQ9NzSBFIFYi3Ssp5q3gUGSxpPWm50JWkp04aSJgJjgTMiYj7pBv+SvGxs9aUNNiL+AsyW9DBpudMtETGFtOSt1PelwJERsQA4jfRt+13Av5tp/lhglKT7SAlhpXM9GvhdHq/jgRMiYh5pieJj+XyfKxy/Q15eeGXnkYfmAAAgAElEQVT+bDWXAd0ljQOuJS3jK53zk6RqyMS83G9rUsJ1HTAmx/I5oFuN9h8Hzs7HDiLdnN8OvJm3PQE0RcQi4Hukqsr9pMpSS/rY9RYRY0gJ6mTgt8DCah/Oc3ouMC5fA1Miolry+RjpPMaRksBrqxz3BqliNoV0rb9N7bFsVkTcQkp+RlSI/4Ic/2RSQvMM6Vm/r0h6kJzMS9oR+EV6+Z9fDuxP5b9nl5GSx3Gk6/3vEVGeYJ4DfD33UVqiZ2ZmZtaudWpqqvRl+vKT1Bk4KSLOzu/Hkx4IH9+iHdUJpR95uCkiFuSlVIsj4swVaG8Y+WH8lorRbHnlZ/wWRMRjkvYmPcPVv9ZnDhgyZrn+URk1tGaztpw6wlKJtsTzUV88H/XHc1JfOsJ8NDY2lK8EAlrwJ8BLIuI9SetImkL6ZbvJtPKzDK0t/zBApYrCONKStXvycymvk341rKX7H0F6hqrc/oXnbOqO0v/naIOyza+XfpjB2oTZpErpe6Tq7U9WcTxmZmZmra7FK0lm1rG5klRfOsK3gG2J56O+eD7qj+ekvnSE+VhplSQz69huP39Au/8H1czMzNq35f3hBjMzMzMzs3bJSZKZmZmZmVmBkyQzMzMzM7MCJ0lmZmZmZmYFTpLMzMzMzMwKnCSZmZmZmZkVOEkyMzMzMzMrcJJkZmZmZmZW4CTJzMzMzMyswEmSmZmZmZlZgZMkMzMzMzOzAidJZmZmZmZmBU6SzMzMzMzMCjqv6gDMrH05YMiY5frcqKH9WzgSMzMzs+XjSpKZmZmZmVmBkyQzMzMzM7MCJ0lmS0HSBpIOXY7PfUNSt9aIKbc/UNI5ZdtGS+rXWn2amZmZtXdOksyWznbA15fjc8cDn2zhWMzMzMysFfmHG6xNkjQQGEBKQDYCzgTOAJ4B3gV+BFyX93cGTomIByTNACYA2wKvAocAi4GRwNakLw5OiYixkqYV2tsI+LykHwI/B3aKiFcl/QhYNyL+t0KMXwW2B66VdCWwdUT8X0mrA1OBg3KM/wD+C7grIn4p6TPA5cCawDvADyNiznKMURdgFLAlsDpwQUTcKGksMCgiZkkaBHQFzgFuAj4FrAX8PI/B/wF+BrwPTIyIocsah5mZmVlb4yTJ2rJ1gX2ARuBRUiLwq4j4m6TzgHsj4iJJmwITJW0JrA1cHxHjJf0GOAZ4G1gYEUdK2hAYT0qi1i2014+UWFye2zsYGAF8H/hGpeAi4g5JU4FBwFxgiqShwH8DD5KSr82B/YDXc4xfAE4ChkfEXZK+TEpgvltjHA6V1Lfwvicp6Tsmn9f3JTXk/u+v0saWpGRpb2Bj4HOSNiAlnl+MiLck/UHSPhFxb41YlltjY0NrNGt4bOuN56O+eD7qj+ekvnTU+XCSZG3ZuIj4AHhF0mtADyDyvh7A9QARMVfSG6RkaklEjM/HTAL2J1VJ9pC0c97eOSdLFNorugq4UdJ4YF5EvNJcoBGxSNI4UkJ0OKnyBfBkRLwKIGkyIKA3cLKkk4BOpEpXLTcUKzySRhfG4L5C/zNIyVBRp7x/uqRLgD8CXYDhwFakMbtTEkAD0L25c11eCxYsaq2mO7TGxgaPbR3xfNQXz0f98ZzUl44wH9WSQD+TZG1ZHwBJnyYtq5sPfJD3zQT2yPs3BdYH/gl0kfT5fMxuwHRgFvDHiOhHSppuBl7Lx3xQ+HM1gIh4CfgX8EtSwlTLfz4HXAEcBWwcEU/lbT0krZ2X4O0MzMjxnJTjOQa4ZalG4+OKY9BASr5mk5bwbZKP+ULe3xtoiIivAocBF+dj5wD75FguBiYvZyxmZmZmbYaTJGvLuublY3cAx5IqQiX/A/TP1Z4/kZ7reS/vO0nSRGBT4LL83za50jMJ+HuuUBU9D/SW9NP8/gpSAnJ3MzFOIj2TtEFETCZVZ64v7F9MSsomA2Mi4kngROD0HM+1wFMsn8uBDfO5jgXOiIj5pCrRJZL+SlqiCPAs0E/Sozme0yJiAXABMC5XufYnPaNlZmZm1q51ampqWtUxmC2z/MMN2yzrDwlIejF/7p0V7P/bQK+IOG0ZPrMa8BCwX0S8IWlzYHRE9K39ybblgCFjlusflVFD+7d0KEbHWCrRlng+6ovno/54TupLR5iPxsaGTpW2+5kks2Uk6X9IVaQB+f3XSb8AV+6iiLgtH7MFcBtwWUS8sRx93gpsULb59YgYsKxtmZmZmVltriSZWYtyJam+dIRvAdsSz0d98XzUH89JfekI8+FKkpmtFLefP6Dd/4NqZmZm7Zt/uMHMzMzMzKzASZKZmZmZmVmBkyQzMzMzM7MCJ0lmZmZmZmYFTpLMzMzMzMwKnCSZmZmZmZkVOEkyMzMzMzMrcJJkZmZmZmZW4CTJzMzMzMyswEmSmZmZmZlZgZMkMzMzMzOzAidJZmZmZmZmBU6SzMzMzMzMCjqv6gDMrH05YMiYZTp+1ND+rRSJmZmZ2fJxJcnMzMzMzKzASZKZmZmZmVmBk6TlJGl7SafV2D9Q0jkVtr8oac0WjGOspG1asL3Rkvq1VHutrdo4r+QYBkkaVmN/tWvh1hqfqTivkn68HPH1kzR6WT9nZmZm1lH5maTlFBFTgamrOg5ruyLim8vxsVOA37V0LGZmZmb2ISdJZSQNBL4CrA1sCZwLPAEMBzoB/wSOAHYABkXEwZKOBH4MvAosBm7MzfWVdA/QCFwaEZfn7ZdJ2hx4BTgMeA8YlftbHbggIm6UNDb3MUvSIKArcDVwe47jztze6ZI+DawDHBIRL0g6H9g9778hIi7KfV4FdAGagJ9ExJOSjgOOAv4BbNzM+OwEXAIsAuYD7wDDymK6F7gYeD/vP5pUtRwdEX1zO48ABwMDgW1yv+sDgyNiYpW+1wJ+D2yWz2Fw2f7BwKH53EZHxHBJvYALcv/r5XOeJOlZ4CFAeR6+lcf/amAJaU5+EBFzJf0a2DO3cUFE3Cxpd+Ai0py/DzxSa9yqnM+8iOgqaefcVidgLvDdfMhH5jX/t4GkEcDxwEhg6xzXKRExVtJTwDhguzwOA3JbW0v6K7Ah6Vq8SlJvKl/X55Ku48uB14Azgdfz66ciYtiynquZmZlZW+IkqbJPRcR+krYm3fz/CzgiImbkhOjnpEQASRsBJwHbA+8CDxbaWQLsR7qpv5N00wnpJvURSb8hJRAfAAsj4vuSGoApku6vEV9XoE9ELJb0FeCOiLguL/k6SNIMYAugL2mOJ0p6ADgdGB4RYyRtD1wl6cukG+7eOY4nmhmbkcD3I2K6pLOBTSvE9DhwVERMlTSAlKScWKPNtyKiv6RtgRuAz1c5bhDwYk5MewF7k+YGST2B75ASwybgvpwUbAsMiYinJR0KHA5MAroD/SNijqSHgB2BPvn8fwbsAawvaTtgi4jYLS+TfETSvcCFpIT0GUmXNjNmzbkcODgiZko6FuiRt39kXiPibEmDI+JYST8iXTNHStoQGJ/P9ZPAHyNisKTrgf2BeaSk8gBSEv6kpD8DV1D5ul4zInaWtDrwLLBLRLyS22txjY0NrdGsFXiM64vno754PuqP56S+dNT5cJJUWWkZ3RxgTdJN6whJkG42nykcuxUwIyLeApA0qbBvSkQ0SZpHqkwBLI6IUtVhErBPfn0fQEQsyknOlmUxdSq8nh0RiwvvS4nNPFKy0gOYEBFNwJJctemZt4/P/UyV9BlSFWd6RLyb43+05shAt4iYnl9PIFWDymPqlpcjkvur9MxQ8XweyDFNl9S1Rt8C7srHTgOm5cofQC9SMlpKLtcnzc1c4FRJbwMNwBt5/8KImJNfl+b5KlLCezepcnIyKXnsk6t6kOZ/M2DTiChdBw/lvpbXpyNiZj6vEQD5Wiuf16LewB65CgXQOSdLAH8rOy+AR0rzk6+vzal+XUf+sxF4IyJeye8nVIhjhS1YsKilm7SCxsYGj3Ed8XzUF89H/fGc1JeOMB/VkkD/cENlTWXvg7T0qh/p2/Y7CvueA7aRtJak1YCdarQDsEau4kCqVkwDZubX5EpSb2A2aanaJvnYLxTa+KCZeGeSl9pJ6gLsSqoIFPvZnnTz/QLQM8e/Omm5VS1zctUGUqWqUkwv5woMwF6km+93gI0lrS5pPVKlq6RPjqkXKampZiap4oOk7pJuKOwLYDrwpTxPVwNPk5aTnR4Rh+X3peSs0twMICWXXwZuJiVMs4AHc5v9gZtIYzZPUqnis2ONmJfGy7lqiaSTJH2jRoyl+GeRKkb9SNWim0nL4ap9bgdJnSWtQ0qOnqf6dV2ay/lAg6TG/L4432ZmZmbtlitJS+dHwLU5iQA4EugGEBELJZ1L+pb9VWAt0jK7LlXaehcYnG+K/w4MJd34XiFpYv78GRExX9Jw4BJJc6idPHxERPwl/6LZw8AawE0RMUXSibmfE3N8R0bEAqVf6ZsELAD+3UzzxwKjJL1Jem6lUlxHA7+T1In0bM+RETEvL1N7jJRYPlc4foe8vHCd/NlqLst9jyMtG/spqYJEfrbqftLSwk8Aj+bYrgPGSHoF+P+BjWq0/zhwnaT3SInCCaSqTD9JE4B1gdtyte97wDWSFpGez3qtWqPZYZL2LrzvV3h9TD6vD0jPhf2WtASykhmSriNdg1fksfgkMCIiPshVoUreIVXh1gOGRcSreclexesaILf3Y+BOSa+TvlR5tpnzNDMzM2vzOjU1VfrS2ZaWpM7ASRFxdn4/nvQQ/fhVG1nryD/ycFNOrs4iLR88cwXaGwbMi4iRLRWjtRxJvyD9WMW7OTm7JyKurfWZA4aMWaZ/VEYN7b8iIVozOsJSibbE81FfPB/1x3NSXzrCfDQ2NnSqtN2VpBUUEe9JWkfSFFJlZTKpqtRmSfosUOlGeBxpydo9uZL0OunX+Vq6///X3r3HbTbX+x9/DSPEdJA7YleI/Z7BOEaK0JRQP8aOQkUIoRzCj9ll51DEDv1M27mZZCOxt5rtuJPTYMKW8+CNMu2JxpmZyGHM/P74fu/d6t73fc/Bfbjmvt7Px2Mermut7/quz1rf675an+vzXaszKPdQdbWt7b/09f76isr/79FyXRa/ZHtsd+0XEbMoD6t4BZjGX5/cGBERETFkpZIUEX0qlaTW0g6/Ai5KMh6tJePRejImraUdxiOVpIgYEJefMnbIf6FGRETE0Jan20VERERERDQkSYqIiIiIiGhIkhQREREREdGQJCkiIiIiIqIhSVJERERERERDkqSIiIiIiIiGJEkRERERERENSZIiIiIiIiIakiRFREREREQ0JEmKiIiIiIhoSJIUERERERHRkCQpIiIiIiKiIUlSREREREREw/DBDiAihpbtDps0320njhvTj5FERERELJxUkiIiIiIiIhqSJEVERERERDRkul1EP5G0HLCN7YsWcLt/AG63/WQ/xbUHMNL2uPlouzhwFbAMMBbYekGPJyIiImJRk0pSRP9ZB9h+IbY7GHhHH8eysN4HLG97M2A0C3c8EREREYuUVJKibdQKylhKArI8cBxwLPAI8BqwP3BBXT8cOMr29ZIeBG4G1gKeB3YFXgfOAtag/NhwlO0bJT3Q6G95YF1J+wJHABvbfl7S/sCytn/QTYyfBdYDzpf0Y2AN2/+3VnTuAXaqMf4J+DvgatvflvR+4BxgKeBVYF/b0xfw/HwJOKTG/iiwb+1zDUlnA6t1Ho/tcxak74iIiIhFSSpJ0W6WBbYCPg2cCrwL+K7tXYGjgGttbw58HpggaTHg7cCFtZryMPA1YG/g2dp2LHB6o//O/o4Hrq8JxYXALrXNbsD53QVn+0pKMrQ78DNgh5ogbQPcQElgVgH2ADYCxkjaADgZGG/7E/X1iQtyUiS9h5IwjqnH+WI9zgOAB21/rcvxRERERAxZqSRFu7nJ9hzgKUkvAKMA13WjKMkMtp+QNBPoAN6wPbm2mQJsC7wJfFzSR+ry4TXRoNFf0wTg55ImAzNsPzWvQG3PknQTsDWwJ6XyBXCv7ecBJN0OiDIV7luSjgSGUSpdC2I1YKrtWfX9ZEoiecUC9rNAOjpG9Gf3UeU8t5aMR2vJeLSejElradfxSJIU7WZDAEkrUKbVPQ3MqeseAj4O3C1pZeDdwHPAEpLWtX0vsCkwtbb/o+0TJC0NfBt4oS6f0/jvYgC2/1vSi7XdhHnE+D/bAecCR1LuC7pP0irAKElvp1SVPgL8hFLhOtn2FEkjgS0W7LTwOLCmpGVsv1y3f6SXuPrEM8/MmnejeEs6OkbkPLeQjEdryXi0noxJa2mH8egpCcx0u2g3K0q6DriSMpXszca6EyjT1yYDv6Tc1zO7rjtS0i3AysDZ9d/IWumZAvyhVqiafgeMlnRIfX8uJQm7Zh4xTqHck7Sc7duB1akVrup14FLgdmBSTd4OB46u8ZwP3DePfXxF0p2d/yj3MR0N3CDpNsr9VGfO43giIiIihqRUkqLd3NTl0derdL6oU9h26GG7vWy/2mXZ7l0b2W729wRlCl+n4cBE22923a5LH0dR7o+i3hP1MuX+pE5P2f5sl21+T5mWN0+2zwPO62bVRfVf0zRgk7pd1+OJiIiIGJKSJEUMAEknUKpIY+v77YFDu2l6mu1f1DarAr8AzrY9cyH2eRmwXJfFL9keu6B9RURERLSTYXPnzh3sGCJiCNnusEnz/aUycdyY/gwlaI/55IuSjEdryXi0noxJa2mH8ejoGDGsu+WpJEVEn7r8lLFD/gs1IiIihrY8uCEiIiIiIqIhSVJERERERERDkqSIiIiIiIiGJEkRERERERENSZIiIiIiIiIakiRFREREREQ0JEmKiIiIiIhoSJIUERERERHRkCQpIiIiIiKiIUlSREREREREQ5KkiIiIiIiIhiRJERERERERDUmSIiIiIiIiGoYPdgARMbRsd9ik+W47cdyYfowkIiIiYuGkkhQREREREdGQJCkiIiIiIqIhSVK8ZZKWk/TFhdjuHySt1B8x1f4Xk3SqpGsl/aekyyWt9hb7vOwtbj/jrWw/n/sYLWnzfuh3KUl793W/EREREa0mSVL0hXWA7Rdiu4OBd/RxLE3bACvZ3sr21sAE4IdvpUPbn+uTyPrXjsCa/dDvikCSpIiIiBjy8uCGIUbSHsBYSvKxPHCc7X+X9ADwCPAasD9wQW0zHDjK9vWSHgRuBtYCngd2BV4HzgLWoCTVR9m+sUt/ywPrStoXOALY2PbzkvYHlrX9g27i/CywHnC+pB8Da9j+v5IWB+4Bdqox/gn4O+Bq29+W9H7gHGAp4FVgX9vTezgd04EPS9oZuA6YBFxV978FcDzwJvA74GvAl4C96nH+ANjB9p61/d3A1sB9tleU9BHgNGAY8ETddnVgfF32XO3rzzXetep+luzmXOwEfL1uRz32tYFvA3Moyck5tk+vcR9d270d2L2O0eV1nzcAewCvS7qLkhhOBkYDBp4CNqeM22dqHxOA99Q+D7J9v6RHgVsB1W12rPGsKek7to/r4ZxHRERELPJSSRqalgW2Aj4NnCppeF32Xdu7AkcB19reHPg8MEHSYpQL5gttbwY8TEkc9gaerW3HAqc39tHZ3/HA9bbPAS4EdqltdgPO7y5A21dSkqHdgZ8BO9QEaRvKhf5rwCqUC/6NgDGSNgBOBsbb/kR9fWJPJ8H2/cA+wA7AVOBO4KOShgHnAp+zvQUlydmjbvZCPf4rattlJG0E/M72043uzwH2tP0R4NfAqNrn121vSUnGjgC2BZayvQnwj/Ucd/X3wGfrdqYkYwArUyp0mwDflPReSrL1ZdtjgP+gjB+UROrTto8FzgNOtX0HMAK4qI7fx4Ep9fXbal/fAq6r53Nf4Mza32rAP9n+KNBRx+B44MEkSBERETHUpZI0NN1kew7wlKQXKBe5UC7AoVzQXwhg+wlJM2ubN2xPrm2mUC7w3wQ+XisnAMMlvadLf00TgJ9LmgzMsP3UvIK1PUvSTZTkYE+g8yL8XtvPA0i6nVLVGA18S9KRlMrL6z31K2md0r13rYnRVsAllOmB7wMukQSwNPArSqXHNaY3Jf0b8Dngo5QEqGkF2w/VtmfU/Y0Czqh9LkGptK0F3FHb/bek7qpeTwM/lfRnYCTwm7p8iu3Xat8PAB+iJHTja9uVKdUegMdt93Qu7qr/fRF4sL5+gVKNG01JQHeuy99d//tso0I3vbbtcx0dI/qj2+gi57m1ZDxaS8aj9WRMWku7jkeSpKFpQwBJK1Cm1HVWQObU/z5EqSrcLWllyoXxc8ASkta1fS+wKaX6AvBH2ydIWpoy5eqFLv3NoVYlayLwYm03YR5x/s92lCTkSGB52/dJWgUYJentlKrSR4CfUCpcJ9ueImkksEUv/X+KMg1wr5r0TAVeBp4B/giMtf2SpO0p0+I+0DgmavxnU6YTfqNL309KWsP2ozVhe4SSYO1ez8GmlETsDcq0xdPqQypWbnYi6Z3AsXXfANfy12l369Xq2pKUZOtRSvVotZpY/rTRthl387wCzO3lHD0MXGD7olqp2ruXbbr2+5Y988ysvuwuutHRMSLnuYVkPFpLxqP1ZExaSzuMR09JYKbbDU0rSroOuBI4wPabXdafQKkeTAZ+SbmvZ3Zdd6SkWygX82fXfyNrpWcK8IdapWr6HTBa0iH1/bmUJOyaecQ5hXJP0nK2b6fc03NhY/3rwKXA7cCkmrwdDhxd4zkfuK+X/sdTErq76zH9DNitxn8wcKWkKcABwANdN7b9eH35y26O+WvAxBrH+pTpdfvX47mZMg3wPtuTgOm1Evb/gGe79DOTUg26i3I/2F+Azif+LQFcXZd/z/azwL8Ct0u6lTKVrrunA/4W+IakT/RybjodD3xB0o2U8fpf56HhaeBtkk6aj34jIiIiFlnD5s7t7UfmWNTUBzeMtD1uIbadVrd99S3G8AVgbdvfWYBtFqMkC1vbnlkrSRfXe3najqQtgf1s7zKvtq1mu8MmzfeXysRxY/ozlKA9fgVclGQ8WkvGo/VkTFpLO4xHR8eIYd0tz3S76FOSTqBUkcbW99sDh3bT9DTbv6htVgV+AZxte+ZC7PMyYLkui1+yPXZB+4qIiIiISCUpIvpUKkmtpR1+BVyUZDxaS8aj9WRMWks7jEdPlaTckxQREREREdGQ6XYR0acuP2XskP/VKSIiIoa2VJIiIiIiIiIakiRFREREREQ0JEmKiIiIiIhoSJIUERERERHRkCQpIiIiIiKiIUlSREREREREQ5KkiIiIiIiIhiRJERERERERDUmSIiIiIiIiGpIkRURERERENCRJioiIiIiIaEiSFBERERER0TB8sAOIiKFlu8MmzVe7iePG9HMkEREREQsnlaSIiIiIiIiGJEkRERERERENSZIiIiIiIiIaFol7kiStB2xv+7ge1u8BjLQ9rsvyaXX5q30Ux43AfrYf7qP+LgbOsn1jX/TX33o6zwMcw37AiraP6WH9YsDJwGhgDvA6cLDt30vaHHjR9n0LuM9pwEjgEOB64D7gy7Z/vJCHgaSDgX9oLFobmGD7yB7az7C9YpdlxwAzbJ/1FuK4DdjF9rT5aPsu4Gpglu1PL+w+IyIiIlrdIpEk2b4HuGew44hFwjbASra3ApC0A/BDYCywF3AxJclZYLZPrH2uAuwNLHSSZPs04LTa3xbAucAPFra/AbI28KTtHQc7kIiIiIj+NGhJUq1KfAZ4O/Ah4CTb50kaDYwHhgHPUS5s16dUcHaR9FXgG8DzlCrBz2uXm0j6FdABnGn7nLr87HpR+xTwFWA2MLHuc3HgVNs/b1aJOqsVwHnA5TWOq2p/R0taAVgG2LVWKE4BNqvrL7J9Wt3nBGAJYC5wkO17JX2dcoH9J+C98zhHGwOnA7OAp4FXgWO6xHQt8CPgzbp+H8o0yottb1L7uQ3YBdiDUhF5L/Bu4EDbt/Sw76WBnwAfrMdwYJf1BwJfrMd2se3xktYGTq37f1c95imSHgVuBVTHYcd6/s8D3qCMye62n5D0fWDz2septi+VtBkloXi+HudtvZy26cCHJe0MXAdMAq6StCElgdpA0oPAR4BDa3+32B4naXngImBJwMAY26s3jvk8SpK1I7CmpO9QPkNb1CZrAz+yfWwv8f0NSR8AfgrsYPtZSe+kfG7eU5scZPt+YElJFwEfoIz9Tl366e683Uj5cWFt4B3A523/QdLx9VxMB5av278LuKC2Gw4cZft6SQ8AjwCvAaOAlSQda/vo+T3GiIiIiEXNYFeS3ml7a0lrUC78z6P8or6X7QdrQnQEJRGgXsQeCaxHuWi7odHXG8DWlIv6q4DOJOlM27dJ+mdKAjEHeNb2bpJGAHdJuq6XGFcENrT9uqTPAFfavqBOddqpXnCvCmxCOZ+3SLoeOBoYb3tSnS44QdIngYP561Sw387j/JwF7GZ7ar2wXbmbmO4E9rZ9j6SxlCTl8F76fMX2GElrURKCdXtotx8wrSamawOfAl4EkLQmsDMlMZwL/FrSfwJrAYfZvl/SF4E9gSnAapSEY7qkW4GNgA3r8R8KfBx4t6R1gFVtbyppKeA2SddSKkG72n5E0pm9nbC6732AfSnJ9h+BQ23fJOkaSpLzZ+BY4MO2X5H0r5K2oiTtv7R9Rn3f05Sy44HRzemfkj4LHASc2Ft8TfUYLwPG1WopwLeA62yfWf8ufkI5z8sC37I9rSY/6zf62ZbuzxvAHbYPqZ+fXSVdQUmmNqp9PlrbHQVcWxP8lSmf4w/VNt+1fbekLSk/JPRJgtTRMaIvuon5kHPdWjIerSXj0XoyJq2lXcdjsJOkzgvD6cBS9fUo4AxJUCoYjzTarw48aPsVAElTGuvusj1X0gxKdQrgddudVYcpwFb19a8BbM+qSc6HusQ1rPH6cduvN953JjYzKMnKKOBm23OBN2rVZs26fHLdzz2S3k+p4ky1/VqN/44ez0yxku2p9YZ9qCEAABBGSURBVPXNlGpQ15hWalxgT6b7i/Tm8VxfY5oqacVu2nYS5f4TbD8APFCrf1AqEx+kVGqgVKVWB54A/knSX4ARwMy6/lnb0+vrzrGeQEl4rwFeoiQHo4ENaxIAZfw/CKxsu/NzcGvdV/dBl0TLtneVNIwy5pd0OdbVKRXHq+rnbAQlkRtFqepAOd/zRdLHgW8D23SObV2+LHBFfXut7eO7bHo2JSG6uLFsNDCmVsKgnFuA5xv3DTU/453bdHfeAO6u/51O+byuBdxpew4wU9L9df0o4EKAWtGbSTlHUKpqfe6ZZ2b1R7fRRUfHiJzrFpLxaC0Zj9aTMWkt7TAePSWBg/10u7ndLDNl6tWWlCrSlY11jwEjJS1db9DfeB59va1WcaBUKx4AHqqvqZWk0cDjlKlq76ttN2j0MWceMT9EnWonaQngY5Rf55v7WY9yYft7yjStpSUtTqMa0IPptWoDpVLVXUxP1sQAyrSvR+qxvFfS4nUa1aqN9hvWmNamJDU9eYhSbUDSanWqVycDU4FP1HE6D7ifUrk52vZX6vvO5Ky7sRlLSS4/CVxKSZgeBm6ofY4BLqGcsxmSRtXtNuolZigVr+9LWrwmrlOBl+vrOZTP/OOUpGGruq8fAbdTPh8frf1s0rXjhs5+kLQ+ZSrg52zPbDay/WfbW9Z/f5MgSToIWAH4xy59Pwz8sMb1BWriQvfnsLlNd+etu+0MbCxpMUnLUBJ6+NvP68qU5Oy5xvFGREREtI3BriR1Z3/g/JpEAHwVWAmg3rNxEuVX/ueBpSnT7Jbooa/XgAPrtKU/AOMoF+7nSrqlbn+s7acljQdOlzSd3pOHv2H7CklbSvoN8DbgEtt3STq87ufwGt9XbT9T72OZAjwDvDyP7g8AJkr6M+X+q+7i2gf4l1o1mV33M6NOt/ovSmL5WKP9+nV64TJ1256cXfd9E+W+m0MoFSTqvVXXUaZkLQncUWO7AJgk6SnKNLfle+n/TuACSbMpF+HfpFQ9tpR0M2Wa1y9qte/LwE8lzaLcn/VCL/2Opzzd7u5aDZkD7FbX3U6ptO1MmZZ4U/2cTaMkFicC/yrpC8CTlM9Wd56mJOAnAf+Hct5/VsfgDttH9BJfp1OAe4HrazUL4BbKVL4Jkval3B90zHz0dTndn7f/1bBWNS+lfDaerMcCcAJlvHei/F3sa3t2d31EREREDHXD5s7t7Qfq1iJpOHBk56/ykiZTbjCfPLiR9Q+VhzxcUpOr71GmD3b7GPT57O8Y3uIjo4eyes/ZM7b/S9KnKPcAjRnsuBY12x02ab6+VCaOy6kdCO0wVWJRkvFoLRmP1pMxaS3tMB4dHSOGdbe8FStJPaq/bC8j6S5KZeV2FuDekVak8nSz87tZdRNlytqvaiXpJcrT+fp6/2fw1ylXTdva/ktf76+vSLoMWK7L4pdsj30L3T5OqabMplTPDnoLfUVERETEImqRqiRFROtLJam1tMOvgIuSjEdryXi0noxJa2mH8RgSlaSIaH2XnzJ2yH+hRkRExNA22E+3i4iIiIiIaClJkiIiIiIiIhqSJEVERERERDQkSYqIiIiIiGhIkhQREREREdGQJCkiIiIiIqIhSVJERERERERDkqSIiIiIiIiGJEkRERERERENSZIiIiIiIiIakiRFREREREQ0JEmKiIiIiIhoGD7YAUTE0LLdYZPmq93EcWP6OZKIiIiIhZNKUkREREREREOSpIiIiIiIiIYkSREREREREQ25J2mASFoP2N72cT2s3wMYaXtcl+XT6vJX+yiOG4H9bD/cR/1dDJxl+8a+6K+/9XSeBziG/YAVbR/Tw/rFgJOB0cAc4HXgYNu/74dYbgN2sT2tr/uOiIiIWFQlSRogtu8B7hnsOGKRsA2wku2tACTtAPwQGDuoUUVERES0iSRJb1GtTHwGeDvwIeAk4LfAeGAY8BywF7A+pYKzi6SvAt8AnqdUCX5eu9tE0q+ADuBM2+fU5WdLWgV4CvgKMBuYWPe3OHCq7Z83q0Sd1QrgPODyGsdVtb+jJa0ALAPsavv3kk4BNqvrL7J9Wt3nBGAJYC5wkO17JX0d2Bv4E/DeeZyfjYHTgVnA08CrwDFdYroW+BHwZl2/D2Uq6MW2N6n93AbsAuwBjKz7fTdwoO1betj30sBPgA/WYziwy/oDgS/WY7vY9nhJawOn1v2/qx7zFEmPArcCquOwYz3/5wFvUMZkd9tPSPo+sHnt41Tbl0raDDiNMuZvArf1ctqmAx+WtDNwHTCpnickPQjcDKxV+9qV8hn4cY13eeBc22fWz8M9wNrAO4DP2/6DpOMpidj02h5JfwecCSwFvAc4zvYvm5VMSScCD9s+r5fYIyIiIhZ5SZL6xjttby1pDcrF/4vAXrYfrAnREZREAEnLA0cC6wGvATc0+nkD2JpyUX8V0JkknWn7Nkn/TEkg5gDP2t5N0gjgLknX9RLfisCGtl+X9BngStsXSDoG2KleeK8KbEL5TNwi6XrgaGC87Ul1uuAESZ8EDuavU8F+O49zcxawm+2p9eJ85W5iuhPY2/Y9ksZSkpTDe+nzFdtjJK0FXASs20O7/YBpNTFdG/gUZWyQtCawMyUxnAv8WtJ/UpKPw2zfL+mLwJ7AFGA1YIzt6ZJuBTYCNqzHfyjwceDdktYBVrW9qaSlgNskXUupBO1q+xFJZ/Z2wuq+9wH2pSTbf6z7uImSjF9oe3L9PHwNuJGS5F0maaXarnMfd9g+pJ77XSVdQUngNgKWBR6t7UYCp9i+UdLHgGOBX/YW51vV0TGiP7uPhpzr1pLxaC0Zj9aTMWkt7ToeSZL6Ruc0uumUX+JHAWdIglLBeKTRdnXgQduvAEia0lh3l+25kmZQLoYBXrfdWXWYAmxVX/8awPasmuR8qEtMwxqvH7f9euN9Z2Izg5KsjAJutj0XeKNWbdasyyfX/dwj6f2Ui+mptl+r8d/R65kp08am1tc3U6pBXWNaqU5HpO7vxG76aR7P9TWmqZJW7GXfAq6ubR8AHqiVPyjVlQ9SKjVQqlKrA08A/yTpL8AIYGZd/6zt6fV15zhPoCS81wAvAd+iJI8b1ioOlPH/ILCy7c7Pwa11X90HXRIt295V0jDKmF9Sj/UN25Nr0ynAtsDFwCGSPlfjXaLR3d2NmFekJIF32p4DzJR0f13/J+ComtTP7dJHp2HdLFtozzwzqy+7ix50dIzIuW4hGY/WkvFoPRmT1tIO49FTEpin2/WNuV3emzL1aktKFenKxrrHgJGSlq436G/cSz8Ab6tVHCjVigeAh+praiVpNPA4Zara+2rbDRp9zJlHvA9Rp9pJWgL4GKXC0NzPepSk6vfAmjX+xSnTCHszvVZtoFSquovpyZoYAGxBSSpfBd4raXFJ76JUujptWGNam5LU9OQhSsUESatJuqixzsBU4BN1nM4D7qdUbo62/ZX6vjMx6G5sxlKSy08Cl1ISpoeBG2qfY4BLKOdshqRRdbuNeokZSsXr+5IWr4nrVODl+noJSZ2Vs03rusOB39j+co2jmcx099ncWNJikpahJMMA3wXOt70bpbrZ2cerwPtqsrYeEREREW0glaT+sT9wfk0iAL4KrARg+1lJJ1GqKs8DS1Om2XX3yz2UKXkH1ql8fwDGUS5gz5V0S93+WNtPSxoPnC5pOr0nD3/D9hWStpT0G+BtwCW275J0eN3P4TW+r9p+RtJ3KFWMZ4CX59H9AcBESX+m3H/VXVz7AP9SL8Rn1/3MqNPU/ouSWD7WaL9+nV64TN22J2fXfd9EuW/nEEoFiXpv1XWUqYVLAnfU2C4AJkl6ijLNbfle+r8TuEDSbErS901K5WZLSTdTprP9olb7vgz8VNIsyv1ZL/TS73jK0+3uljSz9r1bY/2Rkj4A/DdwFCWpPVPSlyj3ec2ux/S/1IrgpZTz+iTlPjEoydX4WsX8n3uVgH+mTP2cNo+YIyIiIoaMYXPndvcDefQXScOBI20fX99PBo5qTKEaUupDHi6pydX3KNMHu30M+nz2dwwww/ZZfRXjokR9/Ej4/rDdYZPm60tl4rgx/R1K0B5TJRYlGY/WkvFoPRmT1tIO49HRMaLb2wlSSRpgtmdLWkbSXZTKyu2UqtIiq1Y1zu9m1U2UKWu/qpWklyhP5+vr/Z/BX6eNNW1r+y99vb++IukyYLkui1+ynUd9R0RERAyiVJIiok+lktRa2uFXwEVJxqO1ZDxaT8aktbTDeKSSFBED4vJTxg75L9SIiIgY2vJ0u4iIiIiIiIYkSREREREREQ1JkiIiIiIiIhqSJEVERERERDQkSYqIiIiIiGhIkhQREREREdGQ/5+kiIiIiIiIhlSSIiIiIiIiGpIkRURERERENCRJioiIiIiIaEiSFBERERER0ZAkKSIiIiIioiFJUkRERERERMPwwQ4gIhY9khYDzgDWBV4D9rb9WGP9PsDXgNnA92xfMSiBtol5jUdt0wFMAUbbfnXgo2wv8/E38k1gl/r2KtvHDnyU7WM+xuPrwB7AXOC4fGf1r/n8zloMuBKYZPusgY+yfczH38d4YFNgVl001vZLAx7oAEslKSIWxg7AUrY/CowDTulcIWlF4CDKF+rWwPclLTkoUbaPHscDQNLWwK+AFQYhtnbV29/IasCXgI8BHwU+LWmdQYmyffQ2HssDB1DG45PAmZKGDUqU7aPX76zqe8ByAxpV+5rXeGwAbG17y/pvyCdIkCQpIhbOZsA1ALZvAz7cWLcxcKvt1+oX6WNALgD7V2/jATAH+BTw/ADH1c56G5PpwDa237Q9B1gCSHWvf/U4HrafBda1/QawIvCi7bmDEmX76PU7S9JOlO+tqwc+tLbU43jUKtMawDmSbpW01+CEOPCSJEXEwngH0Pwl6U1Jw3tYNwt450AF1qZ6Gw9sX2v7uYEPq631OCa237D9rKRhkk4G7rb9yKBE2T7m9TcyW9I3gNuAfxvo4NpQj+MhaW3gi8B3BiOwNtXb38cywI+ALwPbAAe0S+U7SVJELIyZwIjG+8Vsz+5h3QjgxYEKrE31Nh4xOHodE0lLARfWNgcMcGztaJ5/I7b/BXgfsLmkTwxkcG2ot/HYHVgZuJ5yn9ihkrYZ2PDaTm/j8Qpwmu1XbM+ijMu6Ax3gYMiDGyJiYdwKbAdcImkT4P7GujuA4+tF4JLAKOCBgQ+xrfQ2HjE4ehyTer/LJOB62ycNUnztprfxEPB9YEfgDcqN63MGI8g20uN42D6i87WkY4AZtq8Z8AjbS2//G/L3wMWSNqAUVzYDfjrwIQ68YXPnZtptRCyYxpNw1gGGAXsCnwEes/0f9el2+1K+UE+w/e+DFmwbmNd4NNpNA0bm6Xb9r7cxARYHfkaZ2tXpH23/ZqDjbBfz8Z11NLAt5el2V9s+btCCbQML8J11DCVJytPt+tF8/H0cAXye8iPC+e0yHkmSIiIiIiIiGnJPUkREREREREOSpIiIiIiIiIYkSREREREREQ1JkiIiIiIiIhqSJEVERERERDQkSYqIiIiIiGhIkhQREREREdGQJCkiIiIiIqLh/wPYwZpqqFBh6AAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Get feature importances for categorical data.\n",
+ "\n",
+ "rf = encoded_pipeline.named_steps['randomforestregressor']\n",
+ "importances = pd.Series(rf.feature_importances_, X_train_encoded.columns)\n",
+ "\n",
+ "# Plot feature importances.\n",
+ "\n",
+ "n = 20\n",
+ "plt.figure(figsize=(10, 10))\n",
+ "plt.title(f'Top {n} features')\n",
+ "importances.sort_values()[-n:].plot.barh();\n",
+ "\n",
+ "# It seems that these are very fragmented. From the top 20 we will keep\n",
+ "# property_type, cancellation_policy and instant_bookable. \n",
+ "# Neighbourhoud will be dropped since we are keeping the coordinates from the numerical set."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "vlYj7z-3V7mn"
+ },
+ "source": [
+ "### Dropping the less important features and merging the final dataframe"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 130,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "H3kP_zfOEFD3"
+ },
+ "outputs": [],
+ "source": [
+ "# Dropping the unimoportant columns.\n",
+ "\n",
+ "berlin_numerical = berlin_numerical.drop(columns=['bathrooms', 'maximum_nights', 'security_deposit'])\n",
+ "berlin_non_numerical = berlin_non_numerical.drop(columns=['is_business_travel_ready'])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 172,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 289
+ },
+ "colab_type": "code",
+ "id": "VHIcxbhOXbCS",
+ "outputId": "f42e44a0-dccd-4d4d-f64d-2e9b1e2c33a3"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "35 columns\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " host_has_profile_pic_1 | \n",
+ " host_has_profile_pic_2 | \n",
+ " neighbourhood_group_cleansed_1 | \n",
+ " neighbourhood_group_cleansed_2 | \n",
+ " neighbourhood_group_cleansed_3 | \n",
+ " neighbourhood_group_cleansed_4 | \n",
+ " neighbourhood_group_cleansed_5 | \n",
+ " neighbourhood_group_cleansed_6 | \n",
+ " neighbourhood_group_cleansed_7 | \n",
+ " neighbourhood_group_cleansed_8 | \n",
+ " neighbourhood_group_cleansed_9 | \n",
+ " neighbourhood_group_cleansed_10 | \n",
+ " neighbourhood_group_cleansed_11 | \n",
+ " neighbourhood_group_cleansed_12 | \n",
+ " property_type_1 | \n",
+ " property_type_2 | \n",
+ " property_type_3 | \n",
+ " property_type_4 | \n",
+ " property_type_5 | \n",
+ " property_type_6 | \n",
+ " property_type_7 | \n",
+ " property_type_8 | \n",
+ " property_type_9 | \n",
+ " property_type_10 | \n",
+ " property_type_11 | \n",
+ " room_type_1 | \n",
+ " room_type_2 | \n",
+ " room_type_3 | \n",
+ " bed_type_1 | \n",
+ " bed_type_2 | \n",
+ " instant_bookable_1 | \n",
+ " instant_bookable_2 | \n",
+ " cancellation_policy_1 | \n",
+ " cancellation_policy_2 | \n",
+ " cancellation_policy_3 | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " host_has_profile_pic_1 host_has_profile_pic_2 \\\n",
+ "id \n",
+ "2015 1 0 \n",
+ "2695 1 0 \n",
+ "3176 1 0 \n",
+ "3309 1 0 \n",
+ "7071 1 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_1 neighbourhood_group_cleansed_2 \\\n",
+ "id \n",
+ "2015 1 0 \n",
+ "2695 0 1 \n",
+ "3176 0 1 \n",
+ "3309 0 0 \n",
+ "7071 0 1 \n",
+ "\n",
+ " neighbourhood_group_cleansed_3 neighbourhood_group_cleansed_4 \\\n",
+ "id \n",
+ "2015 0 0 \n",
+ "2695 0 0 \n",
+ "3176 0 0 \n",
+ "3309 1 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_5 neighbourhood_group_cleansed_6 \\\n",
+ "id \n",
+ "2015 0 0 \n",
+ "2695 0 0 \n",
+ "3176 0 0 \n",
+ "3309 0 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_7 neighbourhood_group_cleansed_8 \\\n",
+ "id \n",
+ "2015 0 0 \n",
+ "2695 0 0 \n",
+ "3176 0 0 \n",
+ "3309 0 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_9 neighbourhood_group_cleansed_10 \\\n",
+ "id \n",
+ "2015 0 0 \n",
+ "2695 0 0 \n",
+ "3176 0 0 \n",
+ "3309 0 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " neighbourhood_group_cleansed_11 neighbourhood_group_cleansed_12 \\\n",
+ "id \n",
+ "2015 0 0 \n",
+ "2695 0 0 \n",
+ "3176 0 0 \n",
+ "3309 0 0 \n",
+ "7071 0 0 \n",
+ "\n",
+ " property_type_1 property_type_2 property_type_3 property_type_4 \\\n",
+ "id \n",
+ "2015 1 0 0 0 \n",
+ "2695 0 1 0 0 \n",
+ "3176 0 1 0 0 \n",
+ "3309 0 1 0 0 \n",
+ "7071 0 1 0 0 \n",
+ "\n",
+ " property_type_5 property_type_6 property_type_7 property_type_8 \\\n",
+ "id \n",
+ "2015 0 0 0 0 \n",
+ "2695 0 0 0 0 \n",
+ "3176 0 0 0 0 \n",
+ "3309 0 0 0 0 \n",
+ "7071 0 0 0 0 \n",
+ "\n",
+ " property_type_9 property_type_10 property_type_11 room_type_1 \\\n",
+ "id \n",
+ "2015 0 0 0 1 \n",
+ "2695 0 0 0 0 \n",
+ "3176 0 0 0 1 \n",
+ "3309 0 0 0 0 \n",
+ "7071 0 0 0 0 \n",
+ "\n",
+ " room_type_2 room_type_3 bed_type_1 bed_type_2 instant_bookable_1 \\\n",
+ "id \n",
+ "2015 0 0 1 0 1 \n",
+ "2695 1 0 1 0 1 \n",
+ "3176 0 0 1 0 0 \n",
+ "3309 1 0 0 1 1 \n",
+ "7071 1 0 1 0 1 \n",
+ "\n",
+ " instant_bookable_2 cancellation_policy_1 cancellation_policy_2 \\\n",
+ "id \n",
+ "2015 0 1 0 \n",
+ "2695 0 0 1 \n",
+ "3176 1 1 0 \n",
+ "3309 0 1 0 \n",
+ "7071 0 0 0 \n",
+ "\n",
+ " cancellation_policy_3 \n",
+ "id \n",
+ "2015 0 \n",
+ "2695 0 \n",
+ "3176 0 \n",
+ "3309 0 \n",
+ "7071 1 "
+ ]
+ },
+ "execution_count": 172,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Encoding the categorical values. \n",
+ "\n",
+ "encoder = ce.OneHotEncoder()\n",
+ "\n",
+ "encoded = encoder.fit_transform(berlin_non_numerical)\n",
+ "print(f'{len(encoded.columns)} columns')\n",
+ "encoded.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 173,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "Er9wWfmhXZ68"
+ },
+ "outputs": [],
+ "source": [
+ "# Creating the final dataframe.\n",
+ "\n",
+ "berlin_final = pd.merge(berlin_numerical, encoded, left_index=True, right_index=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "PhuYoTcRXuBj"
+ },
+ "source": [
+ "# Final model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 163,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 272
+ },
+ "colab_type": "code",
+ "id": "OQVJBOw_Eaqe",
+ "outputId": "0e58889a-f5b3-4d18-fdce-83c772f8637d"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " latitude | \n",
+ " longitude | \n",
+ " accommodates | \n",
+ " bedrooms | \n",
+ " price | \n",
+ " cleaning_fee | \n",
+ " extra_people | \n",
+ " guests_included | \n",
+ " minimum_nights | \n",
+ " host_has_profile_pic | \n",
+ " neighbourhood_group_cleansed | \n",
+ " property_type | \n",
+ " room_type | \n",
+ " bed_type | \n",
+ " instant_bookable | \n",
+ " cancellation_policy | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " 52.534537 | \n",
+ " 13.402557 | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " 60.0 | \n",
+ " 30.0 | \n",
+ " 28.0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " 52.548513 | \n",
+ " 13.404553 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 17.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " 52.534996 | \n",
+ " 13.417579 | \n",
+ " 4 | \n",
+ " 1.0 | \n",
+ " 90.0 | \n",
+ " 50.0 | \n",
+ " 20.0 | \n",
+ " 2 | \n",
+ " 62 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " 52.498855 | \n",
+ " 13.349065 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 26.0 | \n",
+ " 30.0 | \n",
+ " 18.0 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " 52.543157 | \n",
+ " 13.415091 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 42.0 | \n",
+ " 0.0 | \n",
+ " 24.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " latitude longitude accommodates bedrooms price cleaning_fee \\\n",
+ "id \n",
+ "2015 52.534537 13.402557 3 1.0 60.0 30.0 \n",
+ "2695 52.548513 13.404553 2 1.0 17.0 0.0 \n",
+ "3176 52.534996 13.417579 4 1.0 90.0 50.0 \n",
+ "3309 52.498855 13.349065 2 1.0 26.0 30.0 \n",
+ "7071 52.543157 13.415091 2 1.0 42.0 0.0 \n",
+ "\n",
+ " extra_people guests_included minimum_nights host_has_profile_pic \\\n",
+ "id \n",
+ "2015 28.0 1 4 1 \n",
+ "2695 0.0 1 2 1 \n",
+ "3176 20.0 2 62 1 \n",
+ "3309 18.0 1 5 1 \n",
+ "7071 24.0 1 2 1 \n",
+ "\n",
+ " neighbourhood_group_cleansed property_type room_type bed_type \\\n",
+ "id \n",
+ "2015 1 1 1 1 \n",
+ "2695 2 2 2 1 \n",
+ "3176 2 2 1 1 \n",
+ "3309 3 2 2 2 \n",
+ "7071 2 2 2 1 \n",
+ "\n",
+ " instant_bookable cancellation_policy \n",
+ "id \n",
+ "2015 1 1 \n",
+ "2695 1 2 \n",
+ "3176 2 1 \n",
+ "3309 1 1 \n",
+ "7071 1 3 "
+ ]
+ },
+ "execution_count": 163,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "berlin_final.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " latitude | \n",
+ " longitude | \n",
+ " accommodates | \n",
+ " bedrooms | \n",
+ " price | \n",
+ " cleaning_fee | \n",
+ " extra_people | \n",
+ " guests_included | \n",
+ " minimum_nights | \n",
+ " host_has_profile_pic | \n",
+ " neighbourhood_group_cleansed | \n",
+ " property_type | \n",
+ " room_type | \n",
+ " bed_type | \n",
+ " instant_bookable | \n",
+ " cancellation_policy | \n",
+ "
\n",
+ " \n",
+ " | id | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 2015 | \n",
+ " 52.534537 | \n",
+ " 13.402557 | \n",
+ " 3 | \n",
+ " 1.0 | \n",
+ " 60.0 | \n",
+ " 30.0 | \n",
+ " 28.0 | \n",
+ " 1 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 2695 | \n",
+ " 52.548513 | \n",
+ " 13.404553 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 17.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 3176 | \n",
+ " 52.534996 | \n",
+ " 13.417579 | \n",
+ " 4 | \n",
+ " 1.0 | \n",
+ " 90.0 | \n",
+ " 50.0 | \n",
+ " 20.0 | \n",
+ " 2 | \n",
+ " 62 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 3309 | \n",
+ " 52.498855 | \n",
+ " 13.349065 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 26.0 | \n",
+ " 30.0 | \n",
+ " 18.0 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 7071 | \n",
+ " 52.543157 | \n",
+ " 13.415091 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 42.0 | \n",
+ " 0.0 | \n",
+ " 24.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 29856708 | \n",
+ " 52.533865 | \n",
+ " 13.400731 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 60.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 29857108 | \n",
+ " 52.496211 | \n",
+ " 13.341738 | \n",
+ " 6 | \n",
+ " 1.0 | \n",
+ " 20.0 | \n",
+ " 0.0 | \n",
+ " 10.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 29864272 | \n",
+ " 52.531800 | \n",
+ " 13.411999 | \n",
+ " 2 | \n",
+ " 0.0 | \n",
+ " 85.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 3 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 29866805 | \n",
+ " 52.520802 | \n",
+ " 13.378688 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 99.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 8 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 29867352 | \n",
+ " 52.473762 | \n",
+ " 13.424447 | \n",
+ " 2 | \n",
+ " 1.0 | \n",
+ " 45.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
22441 rows × 16 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " latitude longitude accommodates bedrooms price cleaning_fee \\\n",
+ "id \n",
+ "2015 52.534537 13.402557 3 1.0 60.0 30.0 \n",
+ "2695 52.548513 13.404553 2 1.0 17.0 0.0 \n",
+ "3176 52.534996 13.417579 4 1.0 90.0 50.0 \n",
+ "3309 52.498855 13.349065 2 1.0 26.0 30.0 \n",
+ "7071 52.543157 13.415091 2 1.0 42.0 0.0 \n",
+ "... ... ... ... ... ... ... \n",
+ "29856708 52.533865 13.400731 2 1.0 60.0 0.0 \n",
+ "29857108 52.496211 13.341738 6 1.0 20.0 0.0 \n",
+ "29864272 52.531800 13.411999 2 0.0 85.0 0.0 \n",
+ "29866805 52.520802 13.378688 2 1.0 99.0 0.0 \n",
+ "29867352 52.473762 13.424447 2 1.0 45.0 0.0 \n",
+ "\n",
+ " extra_people guests_included minimum_nights host_has_profile_pic \\\n",
+ "id \n",
+ "2015 28.0 1 4 1 \n",
+ "2695 0.0 1 2 1 \n",
+ "3176 20.0 2 62 1 \n",
+ "3309 18.0 1 5 1 \n",
+ "7071 24.0 1 2 1 \n",
+ "... ... ... ... ... \n",
+ "29856708 0.0 1 2 1 \n",
+ "29857108 10.0 1 1 1 \n",
+ "29864272 0.0 1 3 1 \n",
+ "29866805 0.0 1 1 1 \n",
+ "29867352 0.0 1 5 1 \n",
+ "\n",
+ " neighbourhood_group_cleansed property_type room_type bed_type \\\n",
+ "id \n",
+ "2015 1 1 1 1 \n",
+ "2695 2 2 2 1 \n",
+ "3176 2 2 1 1 \n",
+ "3309 3 2 2 2 \n",
+ "7071 2 2 2 1 \n",
+ "... ... ... ... ... \n",
+ "29856708 1 2 1 1 \n",
+ "29857108 3 2 3 1 \n",
+ "29864272 2 4 1 1 \n",
+ "29866805 1 8 2 1 \n",
+ "29867352 5 2 2 1 \n",
+ "\n",
+ " instant_bookable cancellation_policy \n",
+ "id \n",
+ "2015 1 1 \n",
+ "2695 1 2 \n",
+ "3176 2 1 \n",
+ "3309 1 1 \n",
+ "7071 1 3 \n",
+ "... ... ... \n",
+ "29856708 1 2 \n",
+ "29857108 2 2 \n",
+ "29864272 1 2 \n",
+ "29866805 1 2 \n",
+ "29867352 1 2 \n",
+ "\n",
+ "[22441 rows x 16 columns]"
+ ]
+ },
+ "execution_count": 68,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "berlin_final"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 134,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Index(['latitude', 'longitude', 'accommodates', 'bedrooms', 'price',\n",
+ " 'cleaning_fee', 'extra_people', 'guests_included', 'minimum_nights',\n",
+ " 'host_has_profile_pic_t', 'host_has_profile_pic_f',\n",
+ " 'neighbourhood_group_cleansed_Mitte',\n",
+ " 'neighbourhood_group_cleansed_Pankow',\n",
+ " 'neighbourhood_group_cleansed_Tempelhof - Schöneberg',\n",
+ " 'neighbourhood_group_cleansed_Friedrichshain-Kreuzberg',\n",
+ " 'neighbourhood_group_cleansed_Neukölln',\n",
+ " 'neighbourhood_group_cleansed_Charlottenburg-Wilm.',\n",
+ " 'neighbourhood_group_cleansed_Treptow - Köpenick',\n",
+ " 'neighbourhood_group_cleansed_Steglitz - Zehlendorf',\n",
+ " 'neighbourhood_group_cleansed_Reinickendorf',\n",
+ " 'neighbourhood_group_cleansed_Lichtenberg',\n",
+ " 'neighbourhood_group_cleansed_Marzahn - Hellersdorf',\n",
+ " 'neighbourhood_group_cleansed_Spandau', 'property_type_Guesthouse',\n",
+ " 'property_type_Apartment', 'property_type_Condominium',\n",
+ " 'property_type_Loft', 'property_type_House',\n",
+ " 'property_type_Serviced apartment', 'property_type_Townhouse',\n",
+ " 'property_type_Other', 'property_type_Bed and breakfast',\n",
+ " 'property_type_Guest suite', 'property_type_Hostel',\n",
+ " 'room_type_Entire home/apt', 'room_type_Private room',\n",
+ " 'room_type_Shared room', 'bed_type_Real Bed', 'bed_type_Sofa\\Other',\n",
+ " 'instant_bookable_f', 'instant_bookable_t',\n",
+ " 'cancellation_policy_strict', 'cancellation_policy_flexible',\n",
+ " 'cancellation_policy_moderate'],\n",
+ " dtype='object')"
+ ]
+ },
+ "execution_count": 134,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "berlin_final.columns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 164,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# With OrdinalEncoder\n",
+ "berlin_ord = berlin_final[['accommodates', 'bedrooms', 'price',\n",
+ " 'cleaning_fee', 'extra_people', 'guests_included', 'minimum_nights',\n",
+ " 'neighbourhood_group_cleansed', 'property_type', 'room_type',\n",
+ " 'bed_type', 'instant_bookable', 'cancellation_policy']]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 174,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "KeyError",
+ "evalue": "\"['cancellation_policy_strict', 'neighbourhood_group_cleansed_Tempelhof - Schöneberg', 'neighbourhood_group_cleansed_Treptow - Köpenick', 'neighbourhood_group_cleansed_Mitte', 'neighbourhood_group_cleansed_Spandau', 'property_type_House', 'property_type_Hostel', 'neighbourhood_group_cleansed_Steglitz - Zehlendorf', 'neighbourhood_group_cleansed_Reinickendorf', 'property_type_Bed and breakfast', 'room_type_Shared room', 'bed_type_Sofa\\\\\\\\Other', 'instant_bookable_f', 'property_type_Other', 'instant_bookable_t', 'property_type_Guest suite', 'neighbourhood_group_cleansed_Marzahn - Hellersdorf', 'neighbourhood_group_cleansed_Lichtenberg', 'cancellation_policy_flexible', 'room_type_Private room', 'bed_type_Real Bed', 'property_type_Apartment', 'property_type_Loft', 'neighbourhood_group_cleansed_Friedrichshain-Kreuzberg', 'property_type_Condominium', 'property_type_Serviced apartment', 'neighbourhood_group_cleansed_Pankow', 'property_type_Townhouse', 'cancellation_policy_moderate', 'neighbourhood_group_cleansed_Neukölln', 'room_type_Entire home/apt', 'neighbourhood_group_cleansed_Charlottenburg-Wilm.', 'property_type_Guesthouse'] not in index\"",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 23\u001b[0m \u001b[1;34m'instant_bookable_f'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'instant_bookable_t'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 24\u001b[0m \u001b[1;34m'cancellation_policy_strict'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'cancellation_policy_flexible'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 25\u001b[1;33m 'cancellation_policy_moderate']]\n\u001b[0m",
+ "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 2999\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mis_iterator\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3000\u001b[0m \u001b[0mkey\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3001\u001b[1;33m \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_convert_to_indexer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mraise_missing\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3002\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3003\u001b[0m \u001b[1;31m# take() does not accept boolean indexers\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\indexing.py\u001b[0m in \u001b[0;36m_convert_to_indexer\u001b[1;34m(self, obj, axis, is_setter, raise_missing)\u001b[0m\n\u001b[0;32m 1283\u001b[0m \u001b[1;31m# When setting, missing keys are not allowed, even with .loc:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1284\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m{\u001b[0m\u001b[1;34m\"raise_missing\"\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;32mTrue\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mis_setter\u001b[0m \u001b[1;32melse\u001b[0m \u001b[0mraise_missing\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1285\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_listlike_indexer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1286\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1287\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\indexing.py\u001b[0m in \u001b[0;36m_get_listlike_indexer\u001b[1;34m(self, key, axis, raise_missing)\u001b[0m\n\u001b[0;32m 1090\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1091\u001b[0m self._validate_read_indexer(\n\u001b[1;32m-> 1092\u001b[1;33m \u001b[0mkeyarr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mo\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_axis_number\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mraise_missing\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mraise_missing\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1093\u001b[0m )\n\u001b[0;32m 1094\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mkeyarr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindexer\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\pandas\\core\\indexing.py\u001b[0m in \u001b[0;36m_validate_read_indexer\u001b[1;34m(self, key, indexer, axis, raise_missing)\u001b[0m\n\u001b[0;32m 1183\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m\"loc\"\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mraise_missing\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1184\u001b[0m \u001b[0mnot_found\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mset\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mset\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1185\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"{} not in index\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnot_found\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1186\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1187\u001b[0m \u001b[1;31m# we skip the warning on Categorical/Interval\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;31mKeyError\u001b[0m: \"['cancellation_policy_strict', 'neighbourhood_group_cleansed_Tempelhof - Schöneberg', 'neighbourhood_group_cleansed_Treptow - Köpenick', 'neighbourhood_group_cleansed_Mitte', 'neighbourhood_group_cleansed_Spandau', 'property_type_House', 'property_type_Hostel', 'neighbourhood_group_cleansed_Steglitz - Zehlendorf', 'neighbourhood_group_cleansed_Reinickendorf', 'property_type_Bed and breakfast', 'room_type_Shared room', 'bed_type_Sofa\\\\\\\\Other', 'instant_bookable_f', 'property_type_Other', 'instant_bookable_t', 'property_type_Guest suite', 'neighbourhood_group_cleansed_Marzahn - Hellersdorf', 'neighbourhood_group_cleansed_Lichtenberg', 'cancellation_policy_flexible', 'room_type_Private room', 'bed_type_Real Bed', 'property_type_Apartment', 'property_type_Loft', 'neighbourhood_group_cleansed_Friedrichshain-Kreuzberg', 'property_type_Condominium', 'property_type_Serviced apartment', 'neighbourhood_group_cleansed_Pankow', 'property_type_Townhouse', 'cancellation_policy_moderate', 'neighbourhood_group_cleansed_Neukölln', 'room_type_Entire home/apt', 'neighbourhood_group_cleansed_Charlottenburg-Wilm.', 'property_type_Guesthouse'] not in index\""
+ ]
+ }
+ ],
+ "source": [
+ "# With OneHotEncoder\n",
+ "berlin_rev = berlin_final[['accommodates', 'bedrooms', 'price',\n",
+ " 'cleaning_fee', 'extra_people', 'guests_included', 'minimum_nights',\n",
+ " 'neighbourhood_group_cleansed_Mitte',\n",
+ " 'neighbourhood_group_cleansed_Pankow',\n",
+ " 'neighbourhood_group_cleansed_Tempelhof - Schöneberg',\n",
+ " 'neighbourhood_group_cleansed_Friedrichshain-Kreuzberg',\n",
+ " 'neighbourhood_group_cleansed_Neukölln',\n",
+ " 'neighbourhood_group_cleansed_Charlottenburg-Wilm.',\n",
+ " 'neighbourhood_group_cleansed_Treptow - Köpenick',\n",
+ " 'neighbourhood_group_cleansed_Steglitz - Zehlendorf',\n",
+ " 'neighbourhood_group_cleansed_Reinickendorf',\n",
+ " 'neighbourhood_group_cleansed_Lichtenberg',\n",
+ " 'neighbourhood_group_cleansed_Marzahn - Hellersdorf',\n",
+ " 'neighbourhood_group_cleansed_Spandau', 'property_type_Guesthouse',\n",
+ " 'property_type_Apartment', 'property_type_Condominium',\n",
+ " 'property_type_Loft', 'property_type_House',\n",
+ " 'property_type_Serviced apartment', 'property_type_Townhouse',\n",
+ " 'property_type_Other', 'property_type_Bed and breakfast',\n",
+ " 'property_type_Guest suite', 'property_type_Hostel',\n",
+ " 'room_type_Entire home/apt', 'room_type_Private room',\n",
+ " 'room_type_Shared room', 'bed_type_Real Bed', 'bed_type_Sofa\\Other',\n",
+ " 'instant_bookable_f', 'instant_bookable_t',\n",
+ " 'cancellation_policy_strict', 'cancellation_policy_flexible',\n",
+ " 'cancellation_policy_moderate']]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "colab_type": "code",
+ "id": "0F3OT_DrVemN",
+ "outputId": "e49b4d3f-cb0e-4027-cdce-e63eb4c3812a"
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.figure(figsize=(25, 25))\n",
+ "cor = berlin_ord.corr()\n",
+ "sns.heatmap(cor, annot=True, cmap=plt.cm.Reds)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 165,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "HJqjyPI0Fjk2"
+ },
+ "outputs": [],
+ "source": [
+ "X_train_final, X_test_final = train_test_split(berlin_ord, train_size=0.8, test_size=0.2, random_state=42)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 166,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ True, True, True, True, True, True, True, True, True,\n",
+ " True, True, True, True])"
+ ]
+ },
+ "execution_count": 166,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_test_final.columns==X_train_final.columns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 167,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "rN0ZexYHFugk"
+ },
+ "outputs": [],
+ "source": [
+ "target_final = 'price'\n",
+ "\n",
+ "y_train_final = X_train_final[target_final]\n",
+ "X_train_final = X_train_final.drop(columns=target_final)\n",
+ "\n",
+ "y_test_final = X_test_final[target_final]\n",
+ "X_test_final = X_test_final.drop(columns=target_final)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,\n",
+ " max_features='auto', max_leaf_nodes=None,\n",
+ " min_impurity_decrease=0.0, min_impurity_split=None,\n",
+ " min_samples_leaf=1, min_samples_split=2,\n",
+ " min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=-1,\n",
+ " oob_score=False, random_state=42, verbose=0,\n",
+ " warm_start=False)"
+ ]
+ },
+ "execution_count": 63,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# # Break into steps so we can just grab the model\n",
+ "\n",
+ "# imputer = SimpleImputer()\n",
+ "\n",
+ "# X_train_imputed = imputer.fit_transform(X_train_final)\n",
+ "# X_test_imputed = imputer.fit_transform(X_test_final)\n",
+ "\n",
+ "# model = RandomForestRegressor(n_estimators=100, random_state=42, n_jobs=-1)\n",
+ "\n",
+ "# model.fit(X_train_imputed, y_train_final)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# import pickle\n",
+ "# pickle.dump(model, open('model.pkl', 'wb'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 168,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 34
+ },
+ "colab_type": "code",
+ "id": "CTnl7APRGHV5",
+ "outputId": "6ad40616-44a2-45cb-a893-4f6093ffb8e7"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Final model r^2 score: 0.55\n"
+ ]
+ }
+ ],
+ "source": [
+ "berlin_pipeline_final = make_pipeline(\n",
+ " SimpleImputer(),\n",
+ " RandomForestRegressor(n_estimators=100, random_state=42, n_jobs=-1)\n",
+ ")\n",
+ "\n",
+ "berlin_pipeline_final.fit(X_train_final, y_train_final)\n",
+ "\n",
+ "y_pred_final = berlin_pipeline_final.predict(X_test_final)\n",
+ "score_final = r2_score(y_test_final, y_pred_final)\n",
+ "print(f'Final model r^2 score: {round(score_final, 2)}')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 169,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 606
+ },
+ "colab_type": "code",
+ "id": "iiRpABhtG4P_",
+ "outputId": "d9e30d41-36da-4862-b4b2-528873ea337e"
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Get feature importances\n",
+ "\n",
+ "rf = berlin_pipeline_final.named_steps['randomforestregressor']\n",
+ "importances = pd.Series(rf.feature_importances_, X_train_final.columns)\n",
+ "\n",
+ "# Plot feature importances\n",
+ "\n",
+ "n = 50\n",
+ "plt.figure(figsize=(10, 10))\n",
+ "plt.title(f'Top {n} features')\n",
+ "importances.sort_values()[-n:].plot.barh();"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 79,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Getting a better accuracy\n",
+ "from sklearn.model_selection import cross_val_score, GridSearchCV, RandomizedSearchCV\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 170,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "MAE for 3 folds: [18.79096622 18.61571982 18.14390912]\n",
+ "Mean score 18.516865053599975\n"
+ ]
+ }
+ ],
+ "source": [
+ "pipeline = make_pipeline(\n",
+ " SimpleImputer(),\n",
+ " RandomForestRegressor(n_estimators=100, n_jobs=-1, random_state=42)\n",
+ ")\n",
+ "\n",
+ "k = 3\n",
+ "scores = cross_val_score(pipeline, X_train_final, y_train_final, cv=k,\n",
+ " scoring='neg_mean_absolute_error')\n",
+ "print(f'MAE for {k} folds:', -scores)\n",
+ "print('Mean score', -scores.mean())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 171,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Pipeline(memory=None,\n",
+ " steps=[('simpleimputer',\n",
+ " SimpleImputer(add_indicator=False, copy=True, fill_value=None,\n",
+ " missing_values=nan, strategy='mean',\n",
+ " verbose=0)),\n",
+ " ('randomforestregressor',\n",
+ " RandomForestRegressor(bootstrap=True, criterion='mse',\n",
+ " max_depth=None, max_features='auto',\n",
+ " max_leaf_nodes=None,\n",
+ " min_impurity_decrease=0.0,\n",
+ " min_impurity_split=None,\n",
+ " min_samples_leaf=1, min_samples_split=2,\n",
+ " min_weight_fraction_leaf=0.0,\n",
+ " n_estimators=100, n_jobs=-1,\n",
+ " oob_score=False, random_state=42,\n",
+ " verbose=0, warm_start=False))],\n",
+ " verbose=False)"
+ ]
+ },
+ "execution_count": 171,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pipeline.fit(X_train_final, y_train_final)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 113,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "encoder = ce.OneHotEncoder(use_cat_names=True)\n",
+ "\n",
+ "X_train_encoded = encoder.fit_transform(X_train_final)\n",
+ "X_test_encoded = encoder.fit_transform(X_test_final)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 142,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Final model r^2 score: 0.56\n"
+ ]
+ }
+ ],
+ "source": [
+ "y_pred_final = pipeline.predict(X_test_final)\n",
+ "score_final = r2_score(y_test_final, y_pred_final)\n",
+ "print(f'Final model r^2 score: {round(score_final, 2)}')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 146,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Index(['accommodates', 'bedrooms', 'cleaning_fee', 'extra_people',\n",
+ " 'guests_included', 'minimum_nights',\n",
+ " 'neighbourhood_group_cleansed_Mitte',\n",
+ " 'neighbourhood_group_cleansed_Pankow',\n",
+ " 'neighbourhood_group_cleansed_Tempelhof - Schöneberg',\n",
+ " 'neighbourhood_group_cleansed_Friedrichshain-Kreuzberg',\n",
+ " 'neighbourhood_group_cleansed_Neukölln',\n",
+ " 'neighbourhood_group_cleansed_Charlottenburg-Wilm.',\n",
+ " 'neighbourhood_group_cleansed_Treptow - Köpenick',\n",
+ " 'neighbourhood_group_cleansed_Steglitz - Zehlendorf',\n",
+ " 'neighbourhood_group_cleansed_Reinickendorf',\n",
+ " 'neighbourhood_group_cleansed_Lichtenberg',\n",
+ " 'neighbourhood_group_cleansed_Marzahn - Hellersdorf',\n",
+ " 'neighbourhood_group_cleansed_Spandau', 'property_type_Guesthouse',\n",
+ " 'property_type_Apartment', 'property_type_Condominium',\n",
+ " 'property_type_Loft', 'property_type_House',\n",
+ " 'property_type_Serviced apartment', 'property_type_Townhouse',\n",
+ " 'property_type_Other', 'property_type_Bed and breakfast',\n",
+ " 'property_type_Guest suite', 'property_type_Hostel',\n",
+ " 'room_type_Entire home/apt', 'room_type_Private room',\n",
+ " 'room_type_Shared room', 'bed_type_Real Bed', 'bed_type_Sofa\\Other',\n",
+ " 'instant_bookable_f', 'instant_bookable_t',\n",
+ " 'cancellation_policy_strict', 'cancellation_policy_flexible',\n",
+ " 'cancellation_policy_moderate'],\n",
+ " dtype='object')"
+ ]
+ },
+ "execution_count": 146,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train_final.columns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 98,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from scipy import stats\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 154,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Fitting 5 folds for each of 10 candidates, totalling 50 fits\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n",
+ "[Parallel(n_jobs=-1)]: Done 5 tasks | elapsed: 5.8s\n",
+ "[Parallel(n_jobs=-1)]: Done 10 tasks | elapsed: 13.7s\n",
+ "[Parallel(n_jobs=-1)]: Done 17 tasks | elapsed: 22.4s\n",
+ "[Parallel(n_jobs=-1)]: Done 24 tasks | elapsed: 26.8s\n",
+ "[Parallel(n_jobs=-1)]: Done 33 tasks | elapsed: 32.2s\n",
+ "[Parallel(n_jobs=-1)]: Done 42 tasks | elapsed: 44.6s\n",
+ "[Parallel(n_jobs=-1)]: Done 50 out of 50 | elapsed: 54.1s finished\n"
+ ]
+ }
+ ],
+ "source": [
+ "param_distributions = {\n",
+ " 'simpleimputer__strategy': ['mean', 'median'],\n",
+ " 'randomforestregressor__n_estimators': stats.randint(50, 500),\n",
+ " 'randomforestregressor__max_depth': [5, 10, 15, 20, None],\n",
+ " 'randomforestregressor__max_features': stats.uniform(0,1)\n",
+ "}\n",
+ "\n",
+ "search = RandomizedSearchCV(\n",
+ " pipeline,\n",
+ " param_distributions=param_distributions,\n",
+ " n_iter=10,\n",
+ " cv=5,\n",
+ " scoring='neg_mean_absolute_error',\n",
+ " verbose=10,\n",
+ " return_train_score=True,\n",
+ " n_jobs=-1\n",
+ ")\n",
+ "\n",
+ "search.fit(X_train_final, y_train_final);"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 155,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Best hyperparameters: {'randomforestregressor__max_depth': 15, 'randomforestregressor__max_features': 0.45249895164499965, 'randomforestregressor__n_estimators': 387, 'simpleimputer__strategy': 'mean'}\n",
+ "Cross-Validation MAE: 17.303924299839892\n"
+ ]
+ }
+ ],
+ "source": [
+ "print('Best hyperparameters:', search.best_params_)\n",
+ "print('Cross-Validation MAE:', -search.best_score_)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 156,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pipeline = search.best_estimator_"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 157,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.metrics import mean_absolute_error"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 158,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Train R^2 Score: 0.810881129705256\n",
+ "Train MAE: $12\n",
+ "Test R^2 Score: 0.5990658774386055\n",
+ "Test MAE: $17\n"
+ ]
+ }
+ ],
+ "source": [
+ "y_pred = pipeline.predict(X_train_final)\n",
+ "mae = mean_absolute_error(y_train_final, y_pred)\n",
+ "print(f'Train R^2 Score: {pipeline.score(X_train_final, y_train_final)}')\n",
+ "print(f'Train MAE: ${mae:,.0f}')\n",
+ "\n",
+ "y_pred = pipeline.predict(X_test_final)\n",
+ "mae = mean_absolute_error(y_test_final, y_pred)\n",
+ "print(f'Test R^2 Score: {pipeline.score(X_test_final, y_test_final)}')\n",
+ "print(f'Test MAE: ${mae:,.0f}')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 159,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=15,\n",
+ " max_features=0.45249895164499965, max_leaf_nodes=None,\n",
+ " min_impurity_decrease=0.0, min_impurity_split=None,\n",
+ " min_samples_leaf=1, min_samples_split=2,\n",
+ " min_weight_fraction_leaf=0.0, n_estimators=387, n_jobs=-1,\n",
+ " oob_score=False, random_state=42, verbose=0,\n",
+ " warm_start=False)"
+ ]
+ },
+ "execution_count": 159,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Break into steps so we can just grab the model\n",
+ "\n",
+ "imputer = SimpleImputer()\n",
+ "\n",
+ "X_train_imputed = imputer.fit_transform(X_train_final)\n",
+ "X_test_imputed = imputer.fit_transform(X_test_final)\n",
+ "\n",
+ "model = pipeline.named_steps['randomforestregressor']\n",
+ "\n",
+ "model.fit(X_train_imputed, y_train_final)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 160,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pickle\n",
+ "pickle.dump(model, open('berlin_model.pkl', 'wb'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 176,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import joblib"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 179,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "joblib.dump(model, open('berlin_model.gz', 'wb'), compress='gzip')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "collapsed_sections": [],
+ "name": "Airbnb.ipynb",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/app.py b/app.py
new file mode 100644
index 0000000..4d5afff
--- /dev/null
+++ b/app.py
@@ -0,0 +1,134 @@
+import pandas as pd
+from pandas.io.json import json_normalize
+from flask import Flask, jsonify, request, render_template
+import joblib ## TO unpack
+import pickle ## To use .pkl model
+import json ## To load in 'features.json'
+# from flask_sqlalchemy import SQLAlchemy ## Use with db
+# from flask_migrate import Migrate ## Use with db
+# import psycopg2 ## To connect to PostgreSQL Database
+# from dotenv import load_dotenv ## To get .env
+# import os ## To get .env
+
+# load_dotenv()
+
+# db = SQLAlchemy()
+
+# migrate = Migrate()
+
+# DB_NAME=os.getenv('DB_NAME', default='OOPS')
+# DB_USER=os.getenv('DB_USER', default='OOPS')
+# DB_PASS=os.getenv('DB_PASS', default='OOPS')
+# DB_HOST=os.getenv('DB_HOST', default='OOPS')
+
+# conn = psycopg2.connect(dbname='DB_NAME', user='DB_USER',
+# password='DB_PASS', host='DB_HOST')
+# cur = conn.cursor()
+
+# Load the model from 'berlin_model.pkl' file or 'berlin_model.gz'
+# model = pickle.load(open('berlin_model.pkl', 'rb'))
+model = joblib.load(open('berlin_model.gz', 'rb'))
+
+# App
+app = Flask(__name__)
+
+# Could Remove: vvvv
+# Setting this to True makes the returned JSON look not-so-jumbled
+app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True
+
+### FOR DATABASE ###
+# class AirBnB_features(db.Model):
+# id = db.Column(db.BigInteger, primary_key=True)
+# accommodates = db.Column(db.Integer)
+# bedrooms = db.Column(db.Integer)
+# cleaning_fee = db.Column(db.Integer)
+# extra_people = db.Column(db.Integer)
+# guests_included = db.Column(db.Integer)
+# minimum_nights = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Mitte = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Pankow = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Tempelhof-Schoneberg = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Friedrichshain-Kreuzberg = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Neukolln = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Charlottenburg-Wilm. = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Treptow_Kopenick = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Steglitz-Zehlendorf = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Reinickendorf = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Lichtenberg = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Marzahn-Hellersdorf = db.Column(db.Integer)
+# neighbourhood_group_cleansed_Spandau = db.Column(db.Integer)
+# property_type_Guesthouse = db.Column(db.Integer)
+# property_type_Apartment = db.Column(db.Integer)
+# property_type_Condominium = db.Column(db.Integer)
+# property_type_Loft = db.Column(db.Integer)
+# property_type_House = db.Column(db.Integer)
+# property_type_Serviced_apartment = db.Column(db.Integer)
+# property_type_Townhouse = db.Column(db.Integer)
+# property_type_Other = db.Column(db.Integer)
+# property_type_Bed_and_breakfast = db.Column(db.Integer)
+# property_type_Guest_suite = db.Column(db.Integer)
+# property_type_Hostel = db.Column(db.Integer)
+# room_type_Entire_home/apt = db.Column(db.Integer)
+# room_type_Private_room = db.Column(db.Integer)
+# room_type_Shared_room = db.Column(db.Integer)
+# bed_type_Real_Bed = db.Column(db.Integer)
+# bed_type_Sofa_Other = db.Column(db.Integer)
+# instant_bookable_f = db.Column(db.Integer)
+# instant_bookable_t = db.Column(db.Integer)
+# cancellation_policy_strict = db.Column(db.Integer)
+# cancellation_policy_flexible = db.Column(db.Integer)
+# cancellation_policy_moderate = db.Column(db.Integer)
+# feat_id = relationship('AirBnB_prices', uselist=False, back_populates='price_id')
+
+# class AirBnB_prices(db.Model):
+# id = db.Column(db.BigInteger, primary_key=True)
+# price = db.Column(db.Integer)
+# price_id = relationship('AirBnB_features', uselist=False, back_populates='feat_id')
+
+# Routes
+@app.route('/')
+def index():
+ return render_template('feature_input.html')
+
+@app.route('/price', methods=['POST'])
+def predict_price():
+
+ # Takes data entered at index route via the 'feature_input.html' template
+ data = dict(request.form)
+
+ # Parse the file 'features.json' containing a skeleton JSON of feature variables with
+ # default values set to '0'. This block of code compares the data from the request form
+ # to the default values from the JSON file and makes changes depending on what the input
+ # was. For features that have multiple permutations (neighbourhood_group_cleansed, etc),
+ # whichever was chosen in the drop-down list will be reassigned as an integer(1) while
+ # the others remain an integer(0) which denotes that the listing is not a particular
+ # feature permutation and thus, can be ran through the model.
+ with open('features.json', 'r') as f:
+ features_dict = json.load(f)
+ for key, value in data.items():
+ if key in features_dict:
+ try:
+ features_dict[key] = float(value)
+ except:
+ features_dict[key] = 0
+ elif value in features_dict:
+ features_dict[value] = 1
+ # print(features_dict)
+ data = features_dict
+
+ # This code will take the variable 'data' and convert it from JSON into a Pandas
+ # Dataframe which can be used with the next line of code
+ df = pd.json_normalize(data)
+
+ # Prediction based on the Dataframe containing feature values.
+ # model.predict(df) returns the prediction as an n-dimensional array which is not able
+ # to be 'jsonified' so you must grab the index at [0] to take it out of the array and
+ # convert to JSON. The prediction is rounded to the nearest integer.
+ results = int(model.predict(df)[0])
+
+ # Return the features and predicted price as JSON
+ # return jsonify(features=data, price=results)
+ return jsonify(price=results)
+
+if __name__ == "__main__":
+ app.run(port=5000, debug=True)
diff --git a/berlin_model.gz b/berlin_model.gz
new file mode 100644
index 0000000..e00d63b
Binary files /dev/null and b/berlin_model.gz differ
diff --git a/features.json b/features.json
new file mode 100644
index 0000000..4aa1b6e
--- /dev/null
+++ b/features.json
@@ -0,0 +1,41 @@
+{
+ "accommodates": 0,
+ "bed_type_Real_Bed": 0,
+ "bed_type_Sofa_Other": 0,
+ "bedrooms": 0,
+ "cancellation_policy_flexible": 0,
+ "cancellation_policy_moderate": 0,
+ "cancellation_policy_strict": 0,
+ "cleaning_fee": 0,
+ "extra_people": 0,
+ "guests_included": 0,
+ "instant_bookable_f": 0,
+ "instant_bookable_t": 0,
+ "minimum_nights": 0,
+ "neighbourhood_group_cleansed_Charlottenburg_Wilm": 0,
+ "neighbourhood_group_cleansed_Friedrichshain_Kreuzberg": 0,
+ "neighbourhood_group_cleansed_Lichtenberg": 0,
+ "neighbourhood_group_cleansed_Marzahn_Hellersdorf": 0,
+ "neighbourhood_group_cleansed_Mitte": 0,
+ "neighbourhood_group_cleansed_Neukolln": 0,
+ "neighbourhood_group_cleansed_Pankow": 0,
+ "neighbourhood_group_cleansed_Reinickendorf": 0,
+ "neighbourhood_group_cleansed_Spandau": 0,
+ "neighbourhood_group_cleansed_Steglitz_Zehlendorf": 0,
+ "neighbourhood_group_cleansed_Tempelhof_Schoneberg": 0,
+ "neighbourhood_group_cleansed_Treptow_Kopenick": 0,
+ "property_type_Apartment": 0,
+ "property_type_Bed_and_breakfast": 0,
+ "property_type_Condominium": 0,
+ "property_type_Guest_suite": 0,
+ "property_type_Guesthouse": 0,
+ "property_type_Hostel": 0,
+ "property_type_House": 0,
+ "property_type_Loft": 0,
+ "property_type_Other": 0,
+ "property_type_Serviced_apartment": 0,
+ "property_type_Townhouse": 0,
+ "room_type_Entire_home/apt": 0,
+ "room_type_Private_room": 0,
+ "room_type_Shared_room": 0
+}
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..94a0989
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,29 @@
+alembic==1.4.1
+certifi==2019.11.28
+chardet==3.0.4
+Click==7.0
+Flask==1.1.1
+Flask-Migrate==2.5.2
+Flask-SQLAlchemy==2.4.1
+gunicorn==20.0.4
+idna==2.9
+itsdangerous==1.1.0
+Jinja2==2.11.1
+joblib==0.14.1
+Mako==1.1.2
+MarkupSafe==1.1.1
+numpy==1.18.1
+pandas==1.0.1
+psycopg2-binary==2.8.4
+python-dateutil==2.8.1
+python-dotenv==0.12.0
+python-editor==1.0.4
+pytz==2019.3
+requests==2.23.0
+scikit-learn==0.22.2.post1
+scipy==1.4.1
+six==1.14.0
+sklearn==0.0
+SQLAlchemy==1.3.13
+urllib3==1.25.8
+Werkzeug==1.0.0
diff --git a/runtime.txt b/runtime.txt
new file mode 100644
index 0000000..c5d7ce3
--- /dev/null
+++ b/runtime.txt
@@ -0,0 +1 @@
+python-3.8.1
diff --git a/templates/feature_input.html b/templates/feature_input.html
new file mode 100644
index 0000000..9e92b71
--- /dev/null
+++ b/templates/feature_input.html
@@ -0,0 +1,91 @@
+
+
+
+
+
+ Input Parameters Here
+
+
+
+ THIS IS THE PREDICTION PAGE
+
+
+
+