diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..fe1f5acb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Ignore the following directories +.ipynb_checkpoints* \ No newline at end of file diff --git a/scripts/Businesses/1-PreProcessing/BackupRawFiles.ipynb b/scripts/Businesses/1-PreProcessing/BackupRawFiles.ipynb new file mode 100644 index 00000000..4873b44c --- /dev/null +++ b/scripts/Businesses/1-PreProcessing/BackupRawFiles.ipynb @@ -0,0 +1,69 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# BackupRawFiles.ipynb\n", + "This notebook compresses all non-archived files under `1-PreProcessing/raw` into the `odbiz_raw_backup.zip` file.\n", + "\n", + "This provides a convenient way for us to backup our raw datasets. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'/home/jovyan/ODBiz/1-PreProcessing/odbiz_raw_backup.zip'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import shutil\n", + "\n", + "dir_to_compress = '/home/jovyan/ODBiz/1-PreProcessing/raw'\n", + "output_filename = '/home/jovyan/ODBiz/1-PreProcessing/odbiz_raw_backup'\n", + "\n", + "shutil.make_archive(output_filename, 'zip', dir_to_compress)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:root] *", + "language": "python", + "name": "conda-root-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/1-PreProcessing/README_preprocessing.md b/scripts/Businesses/1-PreProcessing/README_preprocessing.md new file mode 100644 index 00000000..59268228 --- /dev/null +++ b/scripts/Businesses/1-PreProcessing/README_preprocessing.md @@ -0,0 +1,20 @@ +# 1-PreProcessing +The purpose of this step is to do some basic data cleaning, especially if certain datasets are especially troublesome for the rest of our pipeline to deal with. + +## `preprocessing_main.ipynb` +Hitting "Run all" on this Jupyter notebook will run all the necessary scripts in the correct order. A lot of the documentation was already written in the file `preprocessing_main.ipynb`, so it will not be repeated here. + +## `ODBizSources.csv` +The file `ODBizSources.csv` stores metadata about our source files, including links to the original sources. Our source files are stored in `/home/jovyan/ODBiz/1-PreProcessing/raw`. + +--- + +## Dropped rows +The scripts below will drop entries if they meet certain conditions that we deem as being irrelevant given the scope of this project + +### `process_vancouver.py` +The Vancouver dataset duplicates every approved business year after year. As a result, about 80% of it's entries are duplicates. So, this script detects all duplicate sets based on the following columns: `['BusinessName', 'Province', 'BusinessType', 'Unit', 'House', 'Street', 'City', 'Province', 'PostalCode', 'Country']` + +The script keeps the most recent entry and removes all the other duplicates. + +In addition, this script removes entries that do not have a valid Canadian province code (i.e., they reside in states/provinces outside of Canada) \ No newline at end of file diff --git a/scripts/Businesses/PreProcessing/burn_test.ipynb b/scripts/Businesses/1-PreProcessing/burn_test.ipynb similarity index 99% rename from scripts/Businesses/PreProcessing/burn_test.ipynb rename to scripts/Businesses/1-PreProcessing/burn_test.ipynb index aae245e2..16a32ce3 100644 --- a/scripts/Businesses/PreProcessing/burn_test.ipynb +++ b/scripts/Businesses/1-PreProcessing/burn_test.ipynb @@ -2,14 +2,14 @@ "cells": [ { "cell_type": "code", - "execution_count": 71, + "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2022-03-09T16:13:37.195853Z", - "iopub.status.busy": "2022-03-09T16:13:37.195419Z", - "iopub.status.idle": "2022-03-09T16:13:37.200410Z", - "shell.execute_reply": "2022-03-09T16:13:37.199323Z", - "shell.execute_reply.started": "2022-03-09T16:13:37.195810Z" + "iopub.execute_input": "2022-08-05T19:38:43.114168Z", + "iopub.status.busy": "2022-08-05T19:38:43.113840Z", + "iopub.status.idle": "2022-08-05T19:38:43.121707Z", + "shell.execute_reply": "2022-08-05T19:38:43.120987Z", + "shell.execute_reply.started": "2022-08-05T19:38:43.114075Z" }, "tags": [] }, @@ -21,18 +21,30 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2022-03-10T20:36:04.766397Z", - "iopub.status.busy": "2022-03-10T20:36:04.765776Z", - "iopub.status.idle": "2022-03-10T20:36:05.801784Z", - "shell.execute_reply": "2022-03-10T20:36:05.800840Z", - "shell.execute_reply.started": "2022-03-10T20:36:04.766275Z" + "iopub.execute_input": "2022-08-05T19:38:45.841340Z", + "iopub.status.busy": "2022-08-05T19:38:45.840958Z", + "iopub.status.idle": "2022-08-05T19:38:46.985150Z", + "shell.execute_reply": "2022-08-05T19:38:46.983742Z", + "shell.execute_reply.started": "2022-08-05T19:38:45.841289Z" }, "tags": [] }, - "outputs": [], + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'geopandas'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [2]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpd\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mgeopandas\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mgpd\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mfolium\u001b[39;00m\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'geopandas'" + ] + } + ], "source": [ "import pandas as pd\n", "import geopandas as gpd\n", @@ -191,7 +203,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, diff --git a/scripts/Businesses/1-PreProcessing/burnaby_york.ipynb b/scripts/Businesses/1-PreProcessing/burnaby_york.ipynb new file mode 100644 index 00000000..d6d1fd1b --- /dev/null +++ b/scripts/Businesses/1-PreProcessing/burnaby_york.ipynb @@ -0,0 +1,132 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-09T19:33:50.959950Z", + "iopub.status.busy": "2022-08-09T19:33:50.959370Z", + "iopub.status.idle": "2022-08-09T19:33:52.917541Z", + "shell.execute_reply": "2022-08-09T19:33:52.916006Z", + "shell.execute_reply.started": "2022-08-09T19:33:50.959879Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR 1: PROJ: proj_create_from_database: Open of /opt/conda/envs/odbiz/share/proj failed\n" + ] + }, + { + "ename": "DriverError", + "evalue": "/home/jovyan/ODBiz/1-PreProcessing/raw/shapefiles/Business_Licences.geojson: No such file or directory", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mCPLE_OpenFailedError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32mfiona/_shim.pyx:83\u001b[0m, in \u001b[0;36mfiona._shim.gdal_open_vector\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mfiona/_err.pyx:291\u001b[0m, in \u001b[0;36mfiona._err.exc_wrap_pointer\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mCPLE_OpenFailedError\u001b[0m: /home/jovyan/ODBiz/1-PreProcessing/raw/shapefiles/Business_Licences.geojson: No such file or directory", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mDriverError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [1]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 9\u001b[0m name \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mBC_Burnaby_shapefile\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 10\u001b[0m fp \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mraw_shp_dir\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m/Business_Licences.geojson\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m---> 12\u001b[0m city \u001b[38;5;241m=\u001b[39m \u001b[43mgpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_file\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfp\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;66;03m#city = city.set_crs(, allow_override=True)\u001b[39;00m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;66;03m#city = city.to_crs()\u001b[39;00m\n\u001b[1;32m 17\u001b[0m city\u001b[38;5;241m.\u001b[39mexplore()\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/geopandas/io/file.py:253\u001b[0m, in \u001b[0;36m_read_file\u001b[0;34m(filename, bbox, mask, rows, engine, **kwargs)\u001b[0m\n\u001b[1;32m 250\u001b[0m path_or_bytes \u001b[38;5;241m=\u001b[39m filename\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m engine \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfiona\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 253\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_read_file_fiona\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 254\u001b[0m \u001b[43m \u001b[49m\u001b[43mpath_or_bytes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrom_bytes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbbox\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbbox\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmask\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmask\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrows\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrows\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\n\u001b[1;32m 255\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 256\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m engine \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpyogrio\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 257\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _read_file_pyogrio(\n\u001b[1;32m 258\u001b[0m path_or_bytes, bbox\u001b[38;5;241m=\u001b[39mbbox, mask\u001b[38;5;241m=\u001b[39mmask, rows\u001b[38;5;241m=\u001b[39mrows, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 259\u001b[0m )\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/geopandas/io/file.py:294\u001b[0m, in \u001b[0;36m_read_file_fiona\u001b[0;34m(path_or_bytes, from_bytes, bbox, mask, rows, **kwargs)\u001b[0m\n\u001b[1;32m 291\u001b[0m reader \u001b[38;5;241m=\u001b[39m fiona\u001b[38;5;241m.\u001b[39mopen\n\u001b[1;32m 293\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m fiona_env():\n\u001b[0;32m--> 294\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mreader\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath_or_bytes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m features:\n\u001b[1;32m 295\u001b[0m \n\u001b[1;32m 296\u001b[0m \u001b[38;5;66;03m# In a future Fiona release the crs attribute of features will\u001b[39;00m\n\u001b[1;32m 297\u001b[0m \u001b[38;5;66;03m# no longer be a dict, but will behave like a dict. So this should\u001b[39;00m\n\u001b[1;32m 298\u001b[0m \u001b[38;5;66;03m# be forwards compatible\u001b[39;00m\n\u001b[1;32m 299\u001b[0m crs \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 300\u001b[0m features\u001b[38;5;241m.\u001b[39mcrs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minit\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 301\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m features\u001b[38;5;241m.\u001b[39mcrs \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minit\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01min\u001b[39;00m features\u001b[38;5;241m.\u001b[39mcrs\n\u001b[1;32m 302\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m features\u001b[38;5;241m.\u001b[39mcrs_wkt\n\u001b[1;32m 303\u001b[0m )\n\u001b[1;32m 305\u001b[0m \u001b[38;5;66;03m# handle loading the bounding box\u001b[39;00m\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/fiona/env.py:408\u001b[0m, in \u001b[0;36mensure_env_with_credentials..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 405\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[1;32m 406\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 407\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m local\u001b[38;5;241m.\u001b[39m_env:\n\u001b[0;32m--> 408\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 409\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 410\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(args[\u001b[38;5;241m0\u001b[39m], \u001b[38;5;28mstr\u001b[39m):\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/fiona/__init__.py:264\u001b[0m, in \u001b[0;36mopen\u001b[0;34m(fp, mode, driver, schema, crs, encoding, layer, vfs, enabled_drivers, crs_wkt, **kwargs)\u001b[0m\n\u001b[1;32m 261\u001b[0m path \u001b[38;5;241m=\u001b[39m parse_path(fp)\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mode \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[0;32m--> 264\u001b[0m c \u001b[38;5;241m=\u001b[39m \u001b[43mCollection\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdriver\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdriver\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 265\u001b[0m \u001b[43m \u001b[49m\u001b[43mlayer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlayer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43menabled_drivers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43menabled_drivers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 266\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m mode \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mw\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[1;32m 267\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m schema:\n\u001b[1;32m 268\u001b[0m \u001b[38;5;66;03m# Make an ordered dict of schema properties.\u001b[39;00m\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/fiona/collection.py:162\u001b[0m, in \u001b[0;36mCollection.__init__\u001b[0;34m(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, ignore_fields, ignore_geometry, **kwargs)\u001b[0m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmode \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msession \u001b[38;5;241m=\u001b[39m Session()\n\u001b[0;32m--> 162\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstart\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 163\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmode \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mw\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 164\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msession \u001b[38;5;241m=\u001b[39m WritingSession()\n", + "File \u001b[0;32mfiona/ogrext.pyx:540\u001b[0m, in \u001b[0;36mfiona.ogrext.Session.start\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mfiona/_shim.pyx:90\u001b[0m, in \u001b[0;36mfiona._shim.gdal_open_vector\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mDriverError\u001b[0m: /home/jovyan/ODBiz/1-PreProcessing/raw/shapefiles/Business_Licences.geojson: No such file or directory" + ] + } + ], + "source": [ + "import os\n", + "import geopandas as gpd\n", + "import pandas as pd\n", + "\n", + "raw_shp_dir = '/home/jovyan/ODBiz/1-PreProcessing/raw/shapefiles'\n", + "out_dir = '/home/jovyan/ODBiz/1-PreProcessing' # Default\n", + "\n", + "\n", + "name = \"BC_Burnaby_shapefile\"\n", + "fp = f\"{raw_shp_dir}/Business_Licences.geojson\"\n", + "\n", + "city = gpd.read_file(fp)\n", + "\n", + "#city = city.set_crs(, allow_override=True)\n", + "#city = city.to_crs()\n", + "\n", + "city.explore()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2022-06-27T14:45:18.340157Z", + "iopub.status.busy": "2022-06-27T14:45:18.339952Z", + "iopub.status.idle": "2022-06-27T14:45:18.365361Z", + "shell.execute_reply": "2022-06-27T14:45:18.343352Z", + "shell.execute_reply.started": "2022-06-27T14:45:18.340131Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BC_Burnaby_shapefile\n", + "epsg:4326\n" + ] + } + ], + "source": [ + "print(name)\n", + "print(city.crs)\n", + "#city = city.to_crs(epsg=4326)\n", + "#print(city.crs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + " # sub_city = city.head(500)\n", + "\n", + "city['lon'] = city.centroid.x\n", + "city['lat'] = city.centroid.y" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:root] *", + "language": "python", + "name": "conda-root-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/1-PreProcessing/compress_raw_data.py b/scripts/Businesses/1-PreProcessing/compress_raw_data.py new file mode 100644 index 00000000..5e8cffe0 --- /dev/null +++ b/scripts/Businesses/1-PreProcessing/compress_raw_data.py @@ -0,0 +1,63 @@ +''' +This script is incomplete and made obsolete by other scripts + +I believe it just pretty prints the PreProcessing/raw directory +''' + +import os + +input_dir = '/home/jovyan/NewServer/ODBiz/1-PreProcessing/raw' + +exclude_dirs = [ + '.ipynb_checkpoints', + 'archive', + 'testing' +] + +exclude_files = [ + 'Business_Licences.geojson' +] + + +print(f'{input_dir}/') +ori_white_space = '| ' +for root, dirs, files in os.walk(input_dir): + if root == input_dir: + cur_dir = '' + else: + start_char = root.rfind('/') + 1 + cur_dir = root[start_char:] + + levels = cur_dir.count('/') + 1 + white_space = ori_white_space * levels + + # Print current directory + if cur_dir != '': + print(f'{white_space}|___{cur_dir}/') + white_space += ori_white_space + + for f in files: + filename = os.path.join(root, f) + include = True + for ef in exclude_files: + if ef in filename: + include = False + + # Print file names in current directory + if include: + # stuff + print(f'{white_space}|___{f}') + else: + print(f'{white_space}|___XXX {f}') + + dirs_copy = dirs.copy() + for d in dirs_copy: + include = True + if d in exclude_dirs: + include = False + + # Print excluded directories + if not(include): + dirs.remove(d) + print(f'{white_space}|___XXX {d}/') + diff --git a/scripts/Businesses/PreProcessing/data_viewing.ipynb b/scripts/Businesses/1-PreProcessing/data_viewing.ipynb similarity index 82% rename from scripts/Businesses/PreProcessing/data_viewing.ipynb rename to scripts/Businesses/1-PreProcessing/data_viewing.ipynb index a37bb701..cb3a1d3a 100644 --- a/scripts/Businesses/PreProcessing/data_viewing.ipynb +++ b/scripts/Businesses/1-PreProcessing/data_viewing.ipynb @@ -1,8 +1,21 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# data_viewing.ipynb\n", + "\n", + "Different ways we tried to get an overview or summary of the data,\n", + "particularly the column names of each dataset. \n", + "This notebook was eventually replaced by \n", + "\n", + "`../2-OpenTabulate/update_mapping_summary.py`\n" + ] + }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2022-05-17T21:20:50.088569Z", @@ -15,9 +28,634 @@ }, "outputs": [], "source": [ + "# Import required packages\n", "import pandas as pd\n", "import numpy as np\n", - "import os" + "import os\n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading data: 100%|██████████| 127/127 [00:00<00:00, 127.85it/s]\n" + ] + } + ], + "source": [ + "# vancou_df = pd.read_csv('/home/jovyan/ODBiz/1-PreProcessing/raw/BC_Vancouver_Business_Licences.csv', low_memory = True)\n", + "\n", + "localfile = 'BC_Vancouver_Business_Licences.csv'\n", + "inputFileName = f'/home/jovyan/ODBiz/1-PreProcessing/processed/{localfile}'\n", + "total_lines = 126483\n", + "chunksize = 1000\n", + "df = pd.concat([chunk for chunk in tqdm(pd.read_csv(inputFileName, chunksize=chunksize), desc='Loading data', total=total_lines//chunksize+1)])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(126483, 28)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0FOLDERYEARLicenceRSNLicenceNumberLicenceRevisionNumberBusinessNameBusinessTradeNameStatusIssuedDateExpiredDateBusinessTypeBusinessSubTypeUnitUnitTypeHouseStreetCityProvinceCountryPostalCodeLocalAreaNumberofEmployeesFeePaidExtractDateGeombus_idxlonglat
062400122391984922-1078920xMatters IncNaNIssued2021-12-29T18:56:03-05:002022-12-31Computer ServicesSoftware200Unit510BURRARD STVancouverBCCAV6C 3A8Downtown76.0163.02022-02-15T03:09:04-05:00{\"coordinates\": [-123.11758014442, 49.28605162...xMatters Inc_BC_Computer Services_200_510_BURR...-123.1175849.286052
112798719323298619-1074800xMatters IncNaNInactive2019-03-19T17:17:21-04:002019-12-31Computer ServicesSoftware1450Unit700W PENDER STVancouverBCCAV6C 1G8Downtown45.0151.02022-01-01T05:32:00-05:00{\"coordinates\": [-123.115619724804, 49.2848045...xMatters Inc_BC_Computer Services_1450_700_W P...-123.1156249.284805
233542016256463716-1058290xMatters IncNaNInactive2016-01-08T12:55:34-05:002016-12-31Computer ServicesSoftware1201Unit700W PENDER STVancouverBCCAV6C 1G8Downtown0.0136.02019-07-21T16:49:18-04:00{\"coordinates\": [-123.115619724804, 49.2848045...xMatters Inc_BC_Computer Services_1201_700_W P...-123.1156249.284805
360862022391990722-1079500x3D Technologies IncAddiformIssued2021-11-25T14:21:09-05:002022-12-31Computer ServicesDesignNaNNaNNaNNaNVancouverBCCANaNDowntown2.0163.02022-02-15T03:09:04-05:00NaNx3D Technologies Inc_BC_Computer Services____V...NaNNaN
443647919341804119-2792360withinUs Natural HealthNaNCancelledNaNNaNExhibitions/Shows/ConcertsOther110Unit3480Gilmore WayBurnabyBCCAV5G 4W7Mount Pleasant0.0NaN2022-01-01T05:31:59-05:00NaNwithinUs Natural Health_BC_Exhibitions/Shows/C...NaNNaN
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 FOLDERYEAR LicenceRSN LicenceNumber LicenceRevisionNumber \\\n", + "0 624001 22 3919849 22-107892 0 \n", + "1 127987 19 3232986 19-107480 0 \n", + "2 335420 16 2564637 16-105829 0 \n", + "3 608620 22 3919907 22-107950 0 \n", + "4 436479 19 3418041 19-279236 0 \n", + "\n", + " BusinessName BusinessTradeName Status \\\n", + "0 xMatters Inc NaN Issued \n", + "1 xMatters Inc NaN Inactive \n", + "2 xMatters Inc NaN Inactive \n", + "3 x3D Technologies Inc Addiform Issued \n", + "4 withinUs Natural Health NaN Cancelled \n", + "\n", + " IssuedDate ExpiredDate BusinessType \\\n", + "0 2021-12-29T18:56:03-05:00 2022-12-31 Computer Services \n", + "1 2019-03-19T17:17:21-04:00 2019-12-31 Computer Services \n", + "2 2016-01-08T12:55:34-05:00 2016-12-31 Computer Services \n", + "3 2021-11-25T14:21:09-05:00 2022-12-31 Computer Services \n", + "4 NaN NaN Exhibitions/Shows/Concerts \n", + "\n", + " BusinessSubType Unit UnitType House Street City Province \\\n", + "0 Software 200 Unit 510 BURRARD ST Vancouver BC \n", + "1 Software 1450 Unit 700 W PENDER ST Vancouver BC \n", + "2 Software 1201 Unit 700 W PENDER ST Vancouver BC \n", + "3 Design NaN NaN NaN NaN Vancouver BC \n", + "4 Other 110 Unit 3480 Gilmore Way Burnaby BC \n", + "\n", + " Country PostalCode LocalArea NumberofEmployees FeePaid \\\n", + "0 CA V6C 3A8 Downtown 76.0 163.0 \n", + "1 CA V6C 1G8 Downtown 45.0 151.0 \n", + "2 CA V6C 1G8 Downtown 0.0 136.0 \n", + "3 CA NaN Downtown 2.0 163.0 \n", + "4 CA V5G 4W7 Mount Pleasant 0.0 NaN \n", + "\n", + " ExtractDate \\\n", + "0 2022-02-15T03:09:04-05:00 \n", + "1 2022-01-01T05:32:00-05:00 \n", + "2 2019-07-21T16:49:18-04:00 \n", + "3 2022-02-15T03:09:04-05:00 \n", + "4 2022-01-01T05:31:59-05:00 \n", + "\n", + " Geom \\\n", + "0 {\"coordinates\": [-123.11758014442, 49.28605162... \n", + "1 {\"coordinates\": [-123.115619724804, 49.2848045... \n", + "2 {\"coordinates\": [-123.115619724804, 49.2848045... \n", + "3 NaN \n", + "4 NaN \n", + "\n", + " bus_idx long lat \n", + "0 xMatters Inc_BC_Computer Services_200_510_BURR... -123.11758 49.286052 \n", + "1 xMatters Inc_BC_Computer Services_1450_700_W P... -123.11562 49.284805 \n", + "2 xMatters Inc_BC_Computer Services_1201_700_W P... -123.11562 49.284805 \n", + "3 x3D Technologies Inc_BC_Computer Services____V... NaN NaN \n", + "4 withinUs Natural Health_BC_Exhibitions/Shows/C... NaN NaN " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(df.shape)\n", + "pd.options.display.max_columns = None\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([470.0, 138.0, nan, ..., 30722.0, 3999.0, 16284.0], dtype=object)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Find out why street_no gets converted to float\n", + "var_map = pd.read_csv('/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv')\n", + "var_map = var_map.set_index('localfile')\n", + "street_no = var_map.loc['BC_Vancouver_Business_Licences.csv', 'street_no']\n", + "pd.unique(df[street_no])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
FOLDERYEARLicenceRSNLicenceNumberLicenceRevisionNumberBusinessNameBusinessTradeNameStatusIssuedDateExpiredDateBusinessTypeBusinessSubTypeUnitUnitTypeHouseStreetCityProvinceCountryPostalCodeLocalAreaNumberofEmployeesFeePaidExtractDateGeom
1813198907213-3256120(Chunguang Sun)NaNGone Out of Business2013-03-19T19:32:22-04:002013-12-31Health ServicesAcupuncturistNaNNaN8640GRANVILLE STVancouverBCCAV6P 5A1Marpole0.0158.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.140158104053, 49.2079021...
9313199362213-3301410Manjit Singh Sidhu (Manjit Sidhu)Pressed 4 Time DrycleaningGone Out of Business2013-03-27T17:42:24-04:002013-12-31Laundry DepotNaN103Unit1625HORNBY STVancouverBCCAV6Z 2M2Downtown0.0158.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.133773867535, 49.2751103...
18913199679713-3331840Ellingson Brothers Bargreen LLCBargreen Ellingson CanadaGone Out of BusinessNaNNaNWholesale DealerNaNNaNNaN1040PARKER STVancouverBCCAV6A 4B9Strathcona15.050.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.08034772838, 49.27534641...
19713199698713-1622421The Immigrant Services Society Of BCNaNGone Out of BusinessNaNNaNCommunity AssociationNaN501Unit333TERMINAL AVVancouverBCCAV6A 4C1Strathcona139.0NaN2019-07-21T16:49:09-04:00{\"coordinates\": [-123.095707091628, 49.2724448...
25113199818613-1629781(Kathryn Marucot)Bianchelo's Skin CareGone Out of Business2013-06-03T19:00:36-04:002013-12-31Health and BeautyBeauty and Wellness Centre201Unit8268GRANVILLE STVancouverBCCAV6P 4Z4Marpole0.072.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.140028432622, 49.2114901...
\n", + "
" + ], + "text/plain": [ + " FOLDERYEAR LicenceRSN LicenceNumber LicenceRevisionNumber \\\n", + "18 13 1989072 13-325612 0 \n", + "93 13 1993622 13-330141 0 \n", + "189 13 1996797 13-333184 0 \n", + "197 13 1996987 13-162242 1 \n", + "251 13 1998186 13-162978 1 \n", + "\n", + " BusinessName BusinessTradeName \\\n", + "18 (Chunguang Sun) NaN \n", + "93 Manjit Singh Sidhu (Manjit Sidhu) Pressed 4 Time Drycleaning \n", + "189 Ellingson Brothers Bargreen LLC Bargreen Ellingson Canada \n", + "197 The Immigrant Services Society Of BC NaN \n", + "251 (Kathryn Marucot) Bianchelo's Skin Care \n", + "\n", + " Status IssuedDate ExpiredDate \\\n", + "18 Gone Out of Business 2013-03-19T19:32:22-04:00 2013-12-31 \n", + "93 Gone Out of Business 2013-03-27T17:42:24-04:00 2013-12-31 \n", + "189 Gone Out of Business NaN NaN \n", + "197 Gone Out of Business NaN NaN \n", + "251 Gone Out of Business 2013-06-03T19:00:36-04:00 2013-12-31 \n", + "\n", + " BusinessType BusinessSubType Unit UnitType House \\\n", + "18 Health Services Acupuncturist NaN NaN 8640 \n", + "93 Laundry Depot NaN 103 Unit 1625 \n", + "189 Wholesale Dealer NaN NaN NaN 1040 \n", + "197 Community Association NaN 501 Unit 333 \n", + "251 Health and Beauty Beauty and Wellness Centre 201 Unit 8268 \n", + "\n", + " Street City Province Country PostalCode LocalArea \\\n", + "18 GRANVILLE ST Vancouver BC CA V6P 5A1 Marpole \n", + "93 HORNBY ST Vancouver BC CA V6Z 2M2 Downtown \n", + "189 PARKER ST Vancouver BC CA V6A 4B9 Strathcona \n", + "197 TERMINAL AV Vancouver BC CA V6A 4C1 Strathcona \n", + "251 GRANVILLE ST Vancouver BC CA V6P 4Z4 Marpole \n", + "\n", + " NumberofEmployees FeePaid ExtractDate \\\n", + "18 0.0 158.0 2019-07-21T16:49:09-04:00 \n", + "93 0.0 158.0 2019-07-21T16:49:09-04:00 \n", + "189 15.0 50.0 2019-07-21T16:49:09-04:00 \n", + "197 139.0 NaN 2019-07-21T16:49:09-04:00 \n", + "251 0.0 72.0 2019-07-21T16:49:09-04:00 \n", + "\n", + " Geom \n", + "18 {\"coordinates\": [-123.140158104053, 49.2079021... \n", + "93 {\"coordinates\": [-123.133773867535, 49.2751103... \n", + "189 {\"coordinates\": [-123.08034772838, 49.27534641... \n", + "197 {\"coordinates\": [-123.095707091628, 49.2724448... \n", + "251 {\"coordinates\": [-123.140028432622, 49.2114901... " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Display all Out of Business entries\n", + "var_map = pd.read_csv('/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv')\n", + "var_map = var_map.set_index('localfile')\n", + "status = var_map.loc['BC_Vancouver_Business_Licences.csv', 'status']\n", + "van_outOfBiz = vancou_df[vancou_df[status] == 'Gone Out of Business']\n", + "pd.set_option('display.max_columns', None)\n", + "van_outOfBiz.head()\n", + "# count = van_outOfBiz.count()\n", + "# print(count)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "453116 20 - 07\n", + "461771 20 - 07\n", + "601077 20 - 07\n", + "Name: City, dtype: object" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# vancou_df.columns\n", + "vancou_df.City[vancou_df['Province'] == 'Lakeview Estates']" ] }, { @@ -44,7 +682,6 @@ ], "source": [ "# Store the file name of all csvs in processed\n", - "\n", "filepaths = [f for f in os.listdir(\"/home/jovyan/ODBiz/1-PreProcessing/processed/\") if f.endswith('.csv') and not(f.startswith('.'))]\n", "print(f\"Indicies of filepaths: 0...{len(filepaths)-1}\")\n", "filepaths.sort()" diff --git a/scripts/Businesses/PreProcessing/date_formats.ipynb b/scripts/Businesses/1-PreProcessing/date_formats.ipynb similarity index 100% rename from scripts/Businesses/PreProcessing/date_formats.ipynb rename to scripts/Businesses/1-PreProcessing/date_formats.ipynb diff --git a/scripts/Businesses/1-PreProcessing/findNonCanadianBiz.ipynb b/scripts/Businesses/1-PreProcessing/findNonCanadianBiz.ipynb new file mode 100644 index 00000000..8fb88bd0 --- /dev/null +++ b/scripts/Businesses/1-PreProcessing/findNonCanadianBiz.ipynb @@ -0,0 +1,277 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# findNonCanadianBiz.ipynb\n", + "\n", + "This script was used to find non-Canadian Businesses, mainly based on the value in their respective `province` columns." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['',\n", + " 'MA',\n", + " 'ID',\n", + " 'KS',\n", + " 'US',\n", + " 'RJ',\n", + " 'NY',\n", + " 'IL',\n", + " 'GA',\n", + " 'MI',\n", + " 'CO',\n", + " 'IN',\n", + " 'VA',\n", + " 'OH',\n", + " 'SP',\n", + " 'LAKEVIEW ESTATES',\n", + " 'MD',\n", + " 'MT',\n", + " 'ARIZONA',\n", + " 'WA',\n", + " 'AL',\n", + " 'WI',\n", + " ' ',\n", + " 'NJ',\n", + " 'CT',\n", + " 'SC',\n", + " 'MO',\n", + " 'TEHRAN',\n", + " 'TN',\n", + " 'TX',\n", + " 'DE',\n", + " 'HB',\n", + " 'FL',\n", + " 'NV',\n", + " 'MN',\n", + " 'PA',\n", + " 'OK',\n", + " 'OR',\n", + " 'UT',\n", + " 'NC',\n", + " 'CHESHITE',\n", + " 'AZ']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "filenames = ['BC_Vancouver_Business_Licences.csv',\n", + " 'ON_Durham_Business_Directory.csv',\n", + " 'BC_Nanaimo_Business_Licences.csv',\n", + " 'ON_York_Region_Business_Directory.csv',\n", + " 'ON_Pickering_Business_Directory.csv']\n", + "\n", + "nonCanProvCodes = ['WA',\n", + " 'NC',\n", + " 'IL',\n", + " 'CA',\n", + " 'TX',\n", + " 'NY',\n", + " 'PQ',\n", + " 'CO',\n", + " 'NV',\n", + " 'AL',\n", + " 'GA',\n", + " 'AZ',\n", + " 'NJ',\n", + " 'FL',\n", + " 'US',\n", + " 'MA',\n", + " 'PA',\n", + " 'OH',\n", + " 'KS',\n", + " 'WI',\n", + " 'VA',\n", + " 'UT',\n", + " 'DE',\n", + " 'OR',\n", + " '78',\n", + " '`',\n", + " 'SC',\n", + " 'MI',\n", + " 'MD',\n", + " 'CT',\n", + " 'QB',\n", + " 'NF',\n", + " 'ID',\n", + " 'MN',\n", + " 'MO',\n", + " 'SP',\n", + " 'RJ',\n", + " 'IN',\n", + " 'HB',\n", + " 'TN',\n", + " 'LAKEVIEW ESTATES',\n", + " 'TEHRAN',\n", + " 'MT',\n", + " 'OK',\n", + " 'CHESHITE',\n", + " 'ARIZONA', np.nan, ' ', '']\n", + "knownProvs = ['78', '`', 'QB', 'NF', 'PQ', 'CA', np.nan]\n", + "nonCanProvCodes = list(set(nonCanProvCodes) - set(knownProvs))\n", + "nonCanProvCodes" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['BC' 'WA' nan 'bc' 'AB' 'ON' 'NC' 'QC' 'IL' 'NS' 'CA' 'TX' 'NY' 'PQ' 'CO'\n", + " 'NV' 'AL' 'GA' 'NB' 'MB' 'AZ' 'NJ' 'FL' 'US' 'MA' 'PA' 'OH' 'KS' 'WI'\n", + " 'SK' 'Wa' 'VA' 'UT' 'On' 'DE' 'British Columbia' 'OR' '78' '`' 'YT' 'SC'\n", + " 'MI' 'MD' 'CT' 'QB' 'Quebec' 'Ontario' 'NF' 'Or' 'ID' 'on' 'MN' 'MO' 'SP'\n", + " 'RJ' 'IN' 'Ab' 'HB' 'TN' 'Il' 'Fl' 'Lakeview Estates' 'Alberta' 'Tehran'\n", + " 'MT' 'OK' 'Cheshite' 'Arizona']\n", + "Saved df to /home/jovyan/ODBiz/1-PreProcessing/nonCadBiz/BC_Vancouver_Business_Licences_nonCAD.csv\n", + "\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from tqdm import tqdm\n", + "\n", + "pd.set_option('display.max_columns', None)\n", + "\n", + "i = 0\n", + "localfile = filenames[i]\n", + "# for localfile in filenames:\n", + "filepath = f'/home/jovyan/ODBiz/1-PreProcessing/raw/{localfile}'\n", + "\n", + "# if (localfile == 'BC_Vancouver_Business_Licences.csv'):\n", + "# chunksize, total_lines = 1000, 636855\n", + "# df = pd.concat([chunk for chunk in tqdm(pd.read_csv(filepath, chunksize=chunksize), \n", + "# desc=f'Loading data for {localfile}', \n", + "# total=total_lines//chunksize+1)])\n", + "# else:\n", + "# df = pd.read_csv(filepath)\n", + "\n", + "var_map = pd.read_csv('/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv')\n", + "var_map = var_map.set_index('localfile')\n", + "province = var_map.loc[localfile, 'province']\n", + "if localfile == 'ON_York_Region_Business_Directory.csv':\n", + " print(pd.unique(df[province]))\n", + "non_cad_df = df.loc[df[province].isin(nonCanProvCodes)]\n", + "print(pd.unique(df[province]))\n", + "outFileName = f'/home/jovyan/ODBiz/1-PreProcessing/nonCadBiz/{localfile}'.replace('.csv', '_nonCAD.csv')\n", + "non_cad_df.to_csv(outFileName, index = False)\n", + "print(f'Saved df to {outFileName}')\n", + "print('')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BC_Vancouver_Business_Licences.csv\n", + "ON_Durham_Business_Directory.csv\n", + "BC_Nanaimo_Business_Licences.csv\n", + "ON_York_Region_Business_Directory.csv\n", + "ON_Pickering_Business_Directory.csv\n" + ] + } + ], + "source": [ + "\n", + "USA_states = [ 'AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA',\n", + " 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME',\n", + " 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM',\n", + " 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX',\n", + " 'UT', 'VA', 'VT', 'WA', 'WI', 'WV', 'WY', 'ARIZONA']\n", + "\n", + "\n", + "i = 4\n", + "localfile = filenames[i]\n", + "for localfile in filenames:\n", + " print(localfile)\n", + " filePathName = f'/home/jovyan/ODBiz/1-PreProcessing/nonCadBiz/{localfile}'.replace('.csv', '_nonCAD.csv')\n", + " df = pd.read_csv(filePathName)\n", + " var_map = pd.read_csv('/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv')\n", + " var_map = var_map.set_index('localfile')\n", + " province = var_map.loc[localfile, 'province']\n", + " non_cad_provs = pd.unique(df[province])\n", + " foreign_prov_codes = list(set(non_cad_provs) - set(USA_states) - set(knownProvs))\n", + " np.sort(foreign_prov_codes)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([nan])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "non_cad_provs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:root] *", + "language": "python", + "name": "conda-root-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/PreProcessing/geospatial_prep.ipynb b/scripts/Businesses/1-PreProcessing/geospatial_prep.ipynb similarity index 100% rename from scripts/Businesses/PreProcessing/geospatial_prep.ipynb rename to scripts/Businesses/1-PreProcessing/geospatial_prep.ipynb diff --git a/scripts/Businesses/PreProcessing/pm_test.ipynb b/scripts/Businesses/1-PreProcessing/pm_test.ipynb similarity index 100% rename from scripts/Businesses/PreProcessing/pm_test.ipynb rename to scripts/Businesses/1-PreProcessing/pm_test.ipynb diff --git a/scripts/Businesses/1-PreProcessing/preprocessing_main.ipynb b/scripts/Businesses/1-PreProcessing/preprocessing_main.ipynb new file mode 100644 index 00000000..ae85ebeb --- /dev/null +++ b/scripts/Businesses/1-PreProcessing/preprocessing_main.ipynb @@ -0,0 +1,3498 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# preprocessing_main.ipynb\n", + "\n", + "## Overview\n", + "This notebook is for cleaning and other data preprocessing of all the datasets in `/home/jovyan/ODBiz/1-PreProcessing/raw`\n", + "\n", + "This notebook includes cells that do the following:\n", + "- Converts .shp files to .csv files\n", + "- Extracts lat/lon coordinates from cells that recorded them as JSON strings. Seems like the only dataset this applies to is `BC_Vancouver_Business_Licences.csv`\n", + "- Fixes `Indigenous_Business_Directory.csv`, which contained commas inside their cells\n", + "- Removes leading and trailing whitespaces from `NT_Yellowknife_Business_Directory.csv` and also fixes it's weirdly formatted phone numbers\n", + "- Standardizes dates for the `date_established` variables\n", + "- Moves processed datasets into the `2-OpenTabulate` folder\n", + "\n", + "## External custom scripts\n", + "A few cells run external scripts have been written as .py files. Here's a list of links to those scripts:\n", + "- `process_shp_files.py`: Converts .shp files to .csv files\n", + "- `standardize_dates.py`: Standardizes dates for the `date_established` variables\n", + "- `process_vancouver.py`: Performs a lot of cleaning for the Vancouver dataset, including: Filtering out non-Canadian businesses, extracting lat/lon coordinates from JSON string format, removes older duplicates\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "execution": { + "iopub.execute_input": "2022-06-22T19:58:08.362443Z", + "iopub.status.busy": "2022-06-22T19:58:08.362183Z", + "iopub.status.idle": "2022-06-22T19:58:09.318204Z", + "shell.execute_reply": "2022-06-22T19:58:09.317525Z", + "shell.execute_reply.started": "2022-06-22T19:58:08.362416Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# Import required packages\n", + "import os\n", + "from pathlib import Path\n", + "import shutil\n", + "import pandas as pd\n", + "import glob\n", + "import geopandas as gpd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "execution": { + "iopub.execute_input": "2022-05-19T22:34:07.979627Z", + "iopub.status.busy": "2022-05-19T22:34:07.979352Z", + "iopub.status.idle": "2022-05-19T22:34:08.818584Z", + "shell.execute_reply": "2022-05-19T22:34:08.817590Z", + "shell.execute_reply.started": "2022-05-19T22:34:07.979601Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['BC_Victoria_Business_Licences.csv', 'AB_Banff_Business_Licences.csv', 'NB_Saint_John_Grocery_Stores.csv', 'compress_vancouver', 'BC_Burnaby_Business_Licences_2.csv', 'BC_New_Westminster_Business_Licences_(Residents).csv', 'BC_Indigenous_Business_Listings.csv', 'BC_Liquor_licences.csv', 'BC_Port_Moody_Business_Directory.csv', 'NB_Moncton_Grocery_Stores.csv', 'ON_Hamilton_Licenced_Public_Halls.csv', 'BC_Surrey_Business_Licences.csv', 'BC_Squamish_Business_Licence_Annual_2021.csv', 'BC_Wineries.csv', 'ON_Pickering_Business_Directory.csv', 'BC_Vancouver_Business_Licences.csv', 'ON_Hamilton_Licenced_Places_of_Amusement.csv', 'BC_New_Westminster_Business_Licences_(New_this_Year).csv', 'BC_Burnaby_Business_Licences.csv', 'ON_Cambridge_Business_Directory.csv', 'QC_Sherbrooke_Entreprises.csv', 'AB_Calgary_Business_Licences.csv', 'BC_Chilliwack_Business_Licences.csv', 'ON_Brampton_Business_Directory.csv', 'QC_Etablissements.csv', 'ON_Hamilton_Licenced_Kennels_and_Pet_Shops.csv', 'BC_Nanaimo_Business_Licences.csv', 'ON_Toronto_Business_Licences.csv', 'ON_Hamilton_Licenced_Basic_Food_Shops.csv', 'ON_Ottawa_Street_Food_Vendors.csv', 'NT_Yellowknife_Business_Directory.csv', 'ON_Hamilton_Licenced_Public_Garages.csv', 'ON_York_Region_Business_Directory.csv', 'NU_Indigenous_Business.csv', 'ON_Hamilton_Licenced_Residential_Care_Facilities.csv', 'MB_Indigenous_AFOA.csv', 'ON_Caledon_Business_Directory.csv', 'ON_Kitchener_Business_Directory.csv', 'AB_Chestermere_Businesses.csv', 'AB_Edmonton_Business_Licences.csv', 'BC_Richmond_Based_Businesses.csv', 'ON_Hamilton_Licenced_Second_Hand_Shops.csv', 'ON_Hamilton_Licenced_Lodging_Houses.csv', 'ON_Mississauga_Business_Directory.csv', 'BC_Kelowna_Business_Licence.csv', 'ON_Hamilton_Licenced_Food_Establishments.csv', 'ON_Durham_Business_Directory.csv', 'BC_New_Westminster_Business_Licences_(Childcare).csv', 'ON_oebd.csv', 'BC_New_Westminster_Business_Licences_(Nonresidents).csv', 'AB_Strathcona_Business_Directory.csv', 'BC_Prince_George_Business_Licence.csv', 'BC_Langley_Business_Licences.csv', 'NB_Moncton_Ph_Pharmacies.csv', 'Indigenous_Business_Directory.csv', 'BC_Maple_Ridge_Business_Licences.csv', 'ON_Greater_Sudbury_Business_Licences.csv', 'ON_Ottawa_Cultural_Businesses.csv', 'BC_New_Westminster_Business_Licences_(Intermunicipal).csv', 'shapefiles', 'ON_Hamilton_Licenced_Salvage_Yards.csv', 'ON_Welland_Business_Directory.csv', 'BC_New_Westminster_Business_Licences.csv']\n" + ] + } + ], + "source": [ + "# First bring all raw files into processed. \n", + "# We do this because more files won't need any cleaning work, so this is quicker than moving them manually. \n", + "# Any files that require processing work will simply replace the raw files in the processed folder later\n", + "\n", + "cur_dir = os.getcwd()\n", + "src = f'{cur_dir}/raw'\n", + "dst = f'{cur_dir}/processed'\n", + "\n", + "if not(os.path.exists(dst)):\n", + " os.makedirs(dst)\n", + "shutil.rmtree(dst)\n", + "x = os.listdir(src)\n", + "print(x)\n", + "shutil.copytree(src, dst, ignore=shutil.ignore_patterns('compress_vancouver', 'shapefiles'))\n", + "\n", + " \n", + "files_in_directory = os.listdir(dst)\n", + "filtered_files = [file for file in files_in_directory if not file.endswith(\".csv\")]\n", + "for file in filtered_files:\n", + " try:\n", + " path_to_file = os.path.join(dst, file)\n", + " os.remove(path_to_file)\n", + " except:\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "execution": { + "iopub.execute_input": "2022-05-19T22:34:11.877709Z", + "iopub.status.busy": "2022-05-19T22:34:11.877455Z", + "iopub.status.idle": "2022-05-19T22:34:31.491598Z", + "shell.execute_reply": "2022-05-19T22:34:31.490762Z", + "shell.execute_reply.started": "2022-05-19T22:34:11.877683Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ON_Brampton_Business_Directory\n", + "epsg:3857\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "--------------------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "COMPANY_NA -> COMPANY_NAME | 10\n", + "OPERATIONA -> OPERATIONAL | 10\n", + "STREET_NUM -> STREET_NUM | 10\n", + "STREET_NAM -> STREET_NAME | 10\n", + "STREET_TYP -> STREET_TYPE | 10\n", + "STREET_DIR -> STREET_DIRECTION | 10\n", + "UNIT -> UNIT | 4\n", + "BUSINESS_F -> BUSINESS_FULL_ADDRESS | 10\n", + "CITY -> CITY | 4\n", + "PROVINCE -> PROVINCE | 8\n", + "POSTAL_COD -> POSTAL_CODE | 10\n", + "PHONE -> PHONE | 5\n", + "FAX -> FAX | 3\n", + "WEBURL -> WEBURL | 6\n", + "DATE_EST_I -> DATE_EST_IN_CITY | 10\n", + "STARTED_IN -> STARTED_IN_CITY | 10\n", + "HEAD_OFFIC -> HEAD_OFFICE_LOCATION | 10\n", + "TOTAL_EMPL -> TOTAL_EMPLOYEE | 10\n", + "SHIFTS -> SHIFTS | 6\n", + "SHIFT_NUMB -> SHIFT_NUMBER | 10\n", + "GFA_SQUARE -> GFA_SQUARE_FEET | 10\n", + "GFA_SQUA_1 -> GFA_SQUARE_METER | 8\n", + "NAIC_2 -> NAIC_2 | 6\n", + "NAIC_3 -> NAIC_3 | 6\n", + "NAIC_4 -> NAIC_4 | 6\n", + "NAIC_6 -> NAIC_6 | 6\n", + "PRODUCT_DE -> PRODUCT_DESC | 10\n", + "EXPORTS -> EXPORTS | 7\n", + "EXPORT_PER -> EXPORT_PERCENTAGE | 10\n", + "EXPORT_COU -> EXPORT_COUNTRY1 | 10\n", + "EXPORT_C_1 -> EXPORT_COUNTRY2 | 8\n", + "EXPORT_C_2 -> EXPORT_COUNTRY3 | 8\n", + "UPDATE_DAT -> UPDATE_DATE | 10\n", + "UPDATED_BY -> UPDATED_BY | 10\n", + "NAICS_DETA -> NAICS_DETAIL | 10\n", + "CREATED_BY -> CREATED_BY | 10\n", + "CREATE_DAT -> CREATE_DATE | 10\n", + "FACEBOOK -> FACEBOOK | 8\n", + "TWITTER -> TWITTER | 7\n", + "LINKEDIN -> LINKEDIN | 8\n", + "YOUTUBE -> YOUTUBE | 7\n", + "INSTAGRAM -> INSTAGRAM | 9\n", + "GLOBALID -> GLOBALID | 8\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/ON_Brampton_Business_Directory.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/ON_Brampton_Business_Directory.csv\n", + "NB_Moncton_Ph_Pharmacies\n", + "epsg:2953\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "---------------------------------\n", + "FID -> FID | 3\n", + "Name -> Name | 4\n", + "Type -> Type | 4\n", + "Manager -> Manager | 7\n", + "Address -> Address | 7\n", + "Phone -> Phone | 5\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/NB_Moncton_Ph_Pharmacies.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/NB_Moncton_Ph_Pharmacies.csv\n", + "BC_Squamish_Business_Licence_Annual_2021\n", + "epsg:26910\n", + "epsg:4326\n", + "\n", + "\n", + "gpd -> pd | shared_chars\n", + "------------------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "GIS_ID -> GIS_ID | 6\n", + "Business_L -> Business_Licence | 10\n", + "Business_N -> Business_Name | 10\n", + "Date_Opene -> Date_Opened | 10\n", + "Licence_St -> Licence_Status | 10\n", + "Licence_Ty -> Licence_Type | 10\n", + "Licence_De -> Licence_Description | 10\n", + "NAICS -> NAICS | 5\n", + "NAICS_Sect -> NAICS_Sector | 10\n", + "NAICS_Desc -> NAICS_Description | 10\n", + "NonResiden -> NonResident | 10\n", + "Zoning -> Zoning | 6\n", + "Neighbourh -> Neighbourhood | 10\n", + "Licence_Co -> Licence_Code | 10\n", + "Business_1 -> Business_Location | 9\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/BC_Squamish_Business_Licence_Annual_2021.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/BC_Squamish_Business_Licence_Annual_2021.csv\n", + "BC_Port_Moody_Business_Directory\n", + "epsg:3857\n", + "epsg:4326\n", + "error with file above\n", + "AB_Chestermere_Businesses\n", + "epsg:4326\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "-----------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "facilityid -> facilityid | 10\n", + "name -> name | 4\n", + "factype -> factype | 7\n", + "fulladdr -> fulladdr | 8\n", + "municipali -> municipality | 10\n", + "agencytype -> agencytype | 10\n", + "phone -> phone | 5\n", + "agencyurl -> agencyurl | 9\n", + "operhours -> operhours | 9\n", + "pocphone -> pocphone | 8\n", + "comments -> comments | 8\n", + "CreationDa -> CreationDate | 10\n", + "EditDate -> EditDate | 8\n", + "Delivery -> Delivery | 8\n", + "GlobalID -> GlobalID | 8\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/AB_Chestermere_Businesses.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/AB_Chestermere_Businesses.csv\n", + "NB_Saint_John_Grocery_Stores\n", + "epsg:2953\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "-------------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "Name -> Name | 4\n", + "Address -> Address | 7\n", + "Adresse -> Adresse | 7\n", + "Telephone -> Telephone | 9\n", + "Website -> Website | 7\n", + "Classifica -> Classification | 10\n", + "GlobalID -> GlobalID | 8\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/NB_Saint_John_Grocery_Stores.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/NB_Saint_John_Grocery_Stores.csv\n", + "ON_Durham_Business_Directory\n", + "epsg:26917\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "-------------------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "Fax_Number -> Fax_Number | 10\n", + "City -> City | 4\n", + "Province -> Province | 8\n", + "Geo_X -> Geo_X | 5\n", + "Geo_Y -> Geo_Y | 5\n", + "Business_I -> Business_Id | 10\n", + "Business_N -> Business_Name | 10\n", + "Site_Posta -> Site_Postal_Code | 10\n", + "Created_Da -> Created_Date | 10\n", + "Updated_Da -> Updated_Date | 10\n", + "NAICSCode -> NAICSCode | 9\n", + "NAICSCode_ -> NAICSCode_Desc | 10\n", + "Telephone_ -> Telephone_Number | 10\n", + "Web_Addres -> Web_Address | 10\n", + "Mailing_Ad -> Mailing_Address1 | 10\n", + "Mailing__1 -> Mailing_Address2 | 8\n", + "Mailing_Ci -> Mailing_City | 10\n", + "Mailing_Pr -> Mailing_Province | 10\n", + "Mailing_Co -> Mailing_Country | 10\n", + "Mailing_Po -> Mailing_Postal_Code | 10\n", + "Unit_Numbe -> Unit_Number | 10\n", + "Business_D -> Business_Description | 10\n", + "Street_Num -> Street_Number | 10\n", + "Street_Nam -> Street_Name | 10\n", + "Street_Typ -> Street_Type | 10\n", + "Street_Dir -> Street_Direction | 10\n", + "Municipali -> Municipality | 10\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/ON_Durham_Business_Directory.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/ON_Durham_Business_Directory.csv\n", + "BC_Maple_Ridge_Business_Licences\n", + "epsg:26910\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "----------------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "BusinessID -> BusinessID | 10\n", + "Unit -> Unit | 4\n", + "House -> House | 5\n", + "Street -> Street | 6\n", + "PostalCode -> PostalCode | 10\n", + "BusinessNa -> BusinessName | 10\n", + "BusinessTy -> BusinessType | 10\n", + "BusinessSu -> BusinessSubType | 10\n", + "SHAPE -> SHAPE | 5\n", + "Phone1 -> Phone1 | 6\n", + "Keywords -> Keywords | 8\n", + "IssueDate -> IssueDate | 9\n", + "LicenceCat -> LicenceCategory | 10\n", + "WebsiteAdd -> WebsiteAddress | 10\n", + "Phone1Desc -> Phone1Description | 10\n", + "\n", + "Unused columns from csv added to gdf:\n", + "BusinessDescription\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/BC_Maple_Ridge_Business_Licences.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/BC_Maple_Ridge_Business_Licences.csv\n", + "ON_Pickering_Business_Directory\n", + "epsg:26917\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "-------------------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "Fax_Number -> Fax_Number | 10\n", + "City -> City | 4\n", + "Province -> Province | 8\n", + "Geo_X -> Geo_X | 5\n", + "Geo_Y -> Geo_Y | 5\n", + "Business_I -> Business_Id | 10\n", + "Business_N -> Business_Name | 10\n", + "Site_Posta -> Site_Postal_Code | 10\n", + "Created_Da -> Created_Date | 10\n", + "Updated_Da -> Updated_Date | 10\n", + "NAICSCode -> NAICSCode | 9\n", + "NAICSCode_ -> NAICSCode_Desc | 10\n", + "Telephone_ -> Telephone_Number | 10\n", + "Web_Addres -> Web_Address | 10\n", + "Mailing_Ad -> Mailing_Address1 | 10\n", + "Mailing__1 -> Mailing_Address2 | 8\n", + "Mailing_Ci -> Mailing_City | 10\n", + "Mailing_Pr -> Mailing_Province | 10\n", + "Mailing_Co -> Mailing_Country | 10\n", + "Mailing_Po -> Mailing_Postal_Code | 10\n", + "Unit_Numbe -> Unit_Number | 10\n", + "Business_D -> Business_Description | 10\n", + "Street_Num -> Street_Number | 10\n", + "Street_Nam -> Street_Name | 10\n", + "Street_Typ -> Street_Type | 10\n", + "Street_Dir -> Street_Direction | 10\n", + "Municipali -> Municipality | 10\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/ON_Pickering_Business_Directory.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/ON_Pickering_Business_Directory.csv\n", + "ON_Cambridge_Business_Directory\n", + "epsg:26917\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "--------------------------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "COMPANY_NA -> COMPANY_NAME | 10\n", + "STREET_NUM -> STREET_NUMBER | 10\n", + "STREET_NAM -> STREET_NAME | 10\n", + "UNIT -> UNIT | 4\n", + "POSTAL_COD -> POSTAL_CODE | 10\n", + "BUSINESS_P -> BUSINESS_PARKBIA | 10\n", + "IN_CIP -> IN_CIP | 6\n", + "DOWNTOWN -> DOWNTOWN | 8\n", + "DOWNTOWN_P -> DOWNTOWN_PLANNING_DISTRICT | 10\n", + "SPACE_SIZE -> SPACE_SIZE_SQFT | 10\n", + "TOTAL_EMPL -> TOTAL_EMPLOYEES | 10\n", + "PROFILE -> PROFILE | 7\n", + "PRIMARY_NA -> PRIMARY_NAICS | 10\n", + "PRIMARY__1 -> PRIMARY_NAICS_SECTOR | 8\n", + "PRIMARY__2 -> PRIMARY_NAICS_DESCRIPTION | 8\n", + "SECONDARY_ -> SECONDARY_NAICS | 10\n", + "YEAR_ESTAB -> YEAR_ESTABLISHED_ORIGINALLY | 10\n", + "EXPORTING -> EXPORTING | 9\n", + "PHONE -> PHONE | 5\n", + "TOLL_FREE -> TOLL_FREE | 9\n", + "EMAIL -> EMAIL | 5\n", + "WEBSITE -> WEBSITE | 7\n", + "FIRST_NAME -> FIRST_NAME_1 | 10\n", + "LAST_NAME_ -> LAST_NAME_1 | 10\n", + "TITLE_1 -> TITLE_1 | 7\n", + "FIRST_NA_1 -> FIRST_NAME_2 | 8\n", + "LAST_NAM_1 -> LAST_NAME_2 | 8\n", + "TITLE_2 -> TITLE_2 | 7\n", + "ID -> ID | 2\n", + "THE -> THE | 3\n", + "NAME_SUFFI -> NAME_SUFFIX | 10\n", + "GlobalID -> GlobalID | 8\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/ON_Cambridge_Business_Directory.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/ON_Cambridge_Business_Directory.csv\n", + "ON_Kitchener_Business_Directory\n", + "epsg:26917\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "--------------------------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "COMPANY_NA -> COMPANY_NAME | 10\n", + "STREET_NUM -> STREET_NUMBER | 10\n", + "STREET_NAM -> STREET_NAME | 10\n", + "UNIT -> UNIT | 4\n", + "POSTAL_COD -> POSTAL_CODE | 10\n", + "BUSINESS_P -> BUSINESS_PARKBIA | 10\n", + "IN_CIP -> IN_CIP | 6\n", + "DOWNTOWN -> DOWNTOWN | 8\n", + "DOWNTOWN_P -> DOWNTOWN_PLANNING_DISTRICT | 10\n", + "SPACE_SIZE -> SPACE_SIZE_SQFT | 10\n", + "TOTAL_EMPL -> TOTAL_EMPLOYEES | 10\n", + "PROFILE -> PROFILE | 7\n", + "PRIMARY_NA -> PRIMARY_NAICS | 10\n", + "PRIMARY__1 -> PRIMARY_NAICS_SECTOR | 8\n", + "PRIMARY__2 -> PRIMARY_NAICS_DESCRIPTION | 8\n", + "SECONDARY_ -> SECONDARY_NAICS | 10\n", + "YEAR_ESTAB -> YEAR_ESTABLISHED_ORIGINALLY | 10\n", + "EXPORTING -> EXPORTING | 9\n", + "PHONE -> PHONE | 5\n", + "TOLL_FREE -> TOLL_FREE | 9\n", + "EMAIL -> EMAIL | 5\n", + "WEBSITE -> WEBSITE | 7\n", + "FIRST_NAME -> FIRST_NAME_1 | 10\n", + "LAST_NAME_ -> LAST_NAME_1 | 10\n", + "TITLE_1 -> TITLE_1 | 7\n", + "FIRST_NA_1 -> FIRST_NAME_2 | 8\n", + "LAST_NAM_1 -> LAST_NAME_2 | 8\n", + "TITLE_2 -> TITLE_2 | 7\n", + "ID -> ID | 2\n", + "THE -> THE | 3\n", + "NAME_SUFFI -> NAME_SUFFIX | 10\n", + "GlobalID -> GlobalID | 8\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/ON_Kitchener_Business_Directory.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/ON_Kitchener_Business_Directory.csv\n", + "BC_Burnaby_Business_Licences\n", + "epsg:4326\n", + "\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "--------------------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "UNIT -> UNIT | 4\n", + "PROPERTY_N -> PROPERTY_NUMBER | 10\n", + "LICENCE_NU -> LICENCE_NUMBER | 10\n", + "TRADE_NAME -> TRADE_NAME | 10\n", + "LICENCE_TY -> LICENCE_TYPE_NAME | 10\n", + "COVERS_FRO -> COVERS_FROM | 10\n", + "COVERS_TO -> COVERS_TO | 9\n", + "ACCOUNT_NA -> ACCOUNT_NAME | 10\n", + "HOUSE -> HOUSE | 5\n", + "STREET -> STREET | 6\n", + "LEGACY_LIC -> LEGACY_LICENCE_NUMBER | 10\n", + "LEGAL_TYPE -> LEGAL_TYPE | 10\n", + "LICENCE_ST -> LICENCE_STATUS | 10\n", + "LGLLOT_PRO -> LGLLOT_PROPNUM | 10\n", + "GEO_ID -> GEO_ID | 6\n", + "PARENT_PRO -> PARENT_PROPNUM | 10\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/BC_Burnaby_Business_Licences.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/BC_Burnaby_Business_Licences.csv\n", + "NB_Moncton_Grocery_Stores\n", + "epsg:2953\n", + "epsg:4326\n", + "gpd -> pd | shared_chars\n", + "-----------------------------------------\n", + "OBJECTID -> OBJECTID | 8\n", + "Name -> Name | 4\n", + "Address -> Address | 7\n", + "Category -> Category | 8\n", + "Jurisdicti -> Jurisdiction | 10\n", + "Comment -> Comment | 7\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/NB_Moncton_Grocery_Stores.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/NB_Moncton_Grocery_Stores.csv\n", + "BC_Port_Moody_Business_Directory\n", + "epsg:3857\n", + "epsg:4326\n", + "/home/jovyan/ODBiz/1-PreProcessing/process_shp_files.py:150: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", + "\n", + " city['lon'] = city.centroid.x\n", + "/home/jovyan/ODBiz/1-PreProcessing/process_shp_files.py:151: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", + "\n", + " city['lat'] = city.centroid.y\n", + "gpd -> pd | shared_chars\n", + "-------------------------------------------------\n", + "Business_C -> Business_Category | 10\n", + "Business_N -> Business_Name | 10\n", + "Business_D -> Business_Description | 10\n", + "Website_ -> Website_ | 8\n", + "Phone_ -> Phone_ | 6\n", + "Address -> Address | 7\n", + "Email -> Email | 5\n", + "Y_LAT -> Y_LAT | 5\n", + "X_LONG -> X_LONG | 6\n", + "Coordinate -> Coordinates | 10\n", + "OBJECTID -> OBJECTID | 8\n", + "SHAPE__Are -> SHAPE__Area | 10\n", + "SHAPE__Len -> SHAPE__Length | 10\n", + "\n", + "Unused columns from csv added to gdf:\n", + "\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/raw/BC_Port_Moody_Business_Directory.csv\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/BC_Port_Moody_Business_Directory.csv\n" + ] + } + ], + "source": [ + "# Shapefile processing has been replaced with process_shp_files.py \n", + "# This script includes Port Moody!\n", + "import process_shp_files\n", + "process_shp_files.main()\n", + "\n", + "# # All shapefiles (except Port Moody)\n", + "\n", + "# import os\n", + "# for root, dirs, files in os.walk(\"../1-PreProcessing/raw/shapefiles\"):\n", + "# for file in files:\n", + "# if file.endswith(\".shp\"):\n", + "# try:\n", + "# head, tail = os.path.split(os.path.join(root, file))\n", + "# head = head.replace('shapefile', '')\n", + "# head = head.replace(\"/home/jovyan/ODBiz/1-PreProcessing/raw/shapefiles/\", '')\n", + "# head = head.replace(\"/\", '') \n", + "# tail = tail.replace('.shp', '')\n", + "# name = head + tail\n", + "# print(name)\n", + "\n", + "# fp = (os.path.join(root, file))\n", + "# city = gpd.read_file(fp)\n", + "# print(city.crs)\n", + "# city = city.to_crs(epsg=4326)\n", + "# print(city.crs)\n", + "# sub_city = city.head(500)\n", + "# city['lon'] = city.geometry.x\n", + "# city['lat'] = city.geometry.y\n", + "\n", + "# city.to_csv(\"../1-PreProcessing/raw/\"+name+\".csv\")\n", + "# city.to_csv(\"../1-PreProcessing/processed/\"+name+\".csv\")\n", + "\n", + "# except:\n", + "# print('error with file above')\n", + "# pass" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "execution": { + "iopub.execute_input": "2022-05-19T22:34:31.493089Z", + "iopub.status.busy": "2022-05-19T22:34:31.492881Z", + "iopub.status.idle": "2022-05-19T22:34:32.295234Z", + "shell.execute_reply": "2022-05-19T22:34:32.294498Z", + "shell.execute_reply.started": "2022-05-19T22:34:31.493065Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# # BC Port Moody Shapefile\n", + "\n", + "# fp = \"../1-PreProcessing/raw/shapefiles/BC_Port_Moody_shapefile/Business_Directory.shp\"\n", + "# name = \"port moody\"\n", + "\n", + "# city = gpd.read_file(fp)\n", + "\n", + "# print(city.crs)\n", + "# city = city.to_crs(epsg=4326)\n", + "# print(city.crs)\n", + "\n", + "# sub_city = city.head(500)\n", + "\n", + "# city['lon'] = city.centroid.x\n", + "# city['lat'] = city.centroid.y\n", + "\n", + "# #print(city.head)\n", + "\n", + "# city.to_csv(\"../1-PreProcessing/raw/BC_Port_Moody_Business_Directory.csv\")\n", + "# city.to_csv(\"../1-PreProcessing/processed/BC_Port_Moody_Business_Directory.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "execution": { + "iopub.execute_input": "2022-05-19T22:34:34.026681Z", + "iopub.status.busy": "2022-05-19T22:34:34.026411Z", + "iopub.status.idle": "2022-05-19T22:34:46.125761Z", + "shell.execute_reply": "2022-05-19T22:34:46.124800Z", + "shell.execute_reply.started": "2022-05-19T22:34:34.026653Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading data: 100%|██████████| 637/637 [00:03<00:00, 167.10it/s]\n", + "Removing non-Canadian businesses\n", + "Done in 0 s\n", + "Removing obvious duplicates\n", + "Done in 9 s\n", + "Extracting geocoordinates: 100%|██████████| 126483/126483 [00:00<00:00, 520014.26it/s]\n", + "File saved to /home/jovyan/ODBiz/1-PreProcessing/processed/BC_Vancouver_Business_Licences.csv\n" + ] + } + ], + "source": [ + "# A lot of data cleaning had to be done for Vancouver, so this cell\n", + "# has been replaced with the process_vancouver.py script\n", + "import process_vancouver\n", + "process_vancouver.main()\n", + "# # BC vancouver lat/long\n", + "\n", + "# df = pd.read_csv('../1-PreProcessing/raw/BC_Vancouver_Business_Licences.csv')\n", + "\n", + "# def strip_point(x): \n", + "# try:\n", + "# t = x.strip(r'{\"\"coordinates\"\": [')\n", + "# t = t.rstrip('], \"\"type\"\": \"\"Point\"\"}')\n", + "# t = t.replace(',', '')\n", + "# return t.split()\n", + "# except:\n", + "# return np.nan\n", + "\n", + "# LONGS=[]\n", + "# LATS=[]\n", + "# for i in df[\"Geom\"]:\n", + "# try:\n", + "# LONGS.append(strip_point(i)[0])\n", + "# LATS.append(strip_point(i)[1])\n", + "# except:\n", + "# LONGS.append(np.nan)\n", + "# LATS.append(np.nan)\n", + "\n", + "# df[\"long\"]=LONGS\n", + "# df[\"lat\"]=LATS\n", + "\n", + "# df.to_csv('../1-PreProcessing/processed/BC_Vancouver_Business_Licences.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "execution": { + "iopub.execute_input": "2022-05-19T22:34:46.127390Z", + "iopub.status.busy": "2022-05-19T22:34:46.127184Z", + "iopub.status.idle": "2022-05-19T22:34:46.350796Z", + "shell.execute_reply": "2022-05-19T22:34:46.350116Z", + "shell.execute_reply.started": "2022-05-19T22:34:46.127365Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# NT Yellowknife whitespaces and phone numbers\n", + "\n", + "df = pd.read_csv('../1-PreProcessing/raw/NT_Yellowknife_Business_Directory.csv')\n", + "\n", + "cols = ['BUSINESSNAME', 'MUNICIPAL ADDRESS3', 'BUSINESSTYPE', 'PHONE', 'EMAILADDRESS']\n", + "df[cols] = df[cols].apply(lambda x: x.str.strip())\n", + "\n", + "df['PHONE'] = df['PHONE'].str.extract(r'(\\d{3}[-\\.\\s]??\\d{3}[-\\.\\s]??\\d{4}|\\(\\d{3}\\)\\s*\\d{3}[-\\.\\s]??\\d{4}|\\d{3}[-\\.\\s]??\\d{4})')\n", + "\n", + "df.to_csv('../1-PreProcessing/processed/NT_Yellowknife_Business_Directory.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "execution": { + "iopub.execute_input": "2022-05-19T22:34:46.352182Z", + "iopub.status.busy": "2022-05-19T22:34:46.351998Z", + "iopub.status.idle": "2022-05-19T22:34:46.486451Z", + "shell.execute_reply": "2022-05-19T22:34:46.485691Z", + "shell.execute_reply.started": "2022-05-19T22:34:46.352158Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING, DELETED VALUE: Column19\n", + "0 : 18\n", + "1 : 18\n", + "2 : 18\n", + "3 : 18\n", + "4 : 18\n", + "5 : 18\n", + "6 : 18\n", + "7 : 18\n", + "8 : 18\n", + "9 : 18\n", + "10 : 18\n", + "11 : 18\n", + "12 : 18\n", + "13 : 18\n", + "14 : 18\n", + "15 : 18\n", + "16 : 18\n", + "17 : 18\n", + "18 : 18\n", + "19 : 18\n", + "20 : 18\n", + "21 : 18\n", + "22 : 18\n", + "23 : 18\n", + "24 : 18\n", + "25 : 18\n", + "26 : 18\n", + "27 : 18\n", + "28 : 18\n", + "29 : 18\n", + "30 : 18\n", + "31 : 18\n", + "32 : 18\n", + "33 : 18\n", + "34 : 18\n", + "35 : 18\n", + "36 : 18\n", + "37 : 18\n", + "38 : 18\n", + "39 : 18\n", + "40 : 18\n", + "41 : 18\n", + "42 : 18\n", + "43 : 18\n", + "44 : 18\n", + "45 : 18\n", + "46 : 18\n", + "47 : 18\n", + "48 : 18\n", + "49 : 18\n", + "50 : 18\n", + "51 : 18\n", + "52 : 18\n", + "53 : 18\n", + "54 : 18\n", + "55 : 18\n", + "56 : 18\n", + "57 : 18\n", + "58 : 18\n", + "59 : 18\n", + "60 : 18\n", + "61 : 18\n", + "62 : 18\n", + "63 : 18\n", + "64 : 18\n", + "65 : 18\n", + "66 : 18\n", + "67 : 18\n", + "68 : 18\n", + "69 : 18\n", + "70 : 18\n", + "71 : 18\n", + "72 : 18\n", + "73 : 18\n", + "74 : 18\n", + "75 : 18\n", + "76 : 18\n", + "77 : 18\n", + "78 : 18\n", + "79 : 18\n", + "80 : 18\n", + "81 : 18\n", + "82 : 17\n", + "83 : 18\n", + "84 : 18\n", + "85 : 18\n", + "86 : 18\n", + "87 : 18\n", + "88 : 18\n", + "89 : 18\n", + "90 : 18\n", + "91 : 18\n", + "92 : 18\n", + "93 : 18\n", + "94 : 18\n", + "95 : 18\n", + "96 : 18\n", + "97 : 18\n", + "98 : 18\n", + "99 : 18\n", + "100 : 18\n", + "101 : 18\n", + "102 : 18\n", + "103 : 18\n", + "104 : 18\n", + "105 : 18\n", + "106 : 18\n", + "107 : 18\n", + "108 : 18\n", + "109 : 18\n", + "110 : 18\n", + "111 : 18\n", + "112 : 18\n", + "113 : 18\n", + "114 : 18\n", + "115 : 17\n", + "116 : 18\n", + "117 : 18\n", + "118 : 18\n", + "119 : 17\n", + "120 : 18\n", + "121 : 18\n", + "122 : 18\n", + "123 : 18\n", + "124 : 18\n", + "125 : 18\n", + "126 : 18\n", + "127 : 18\n", + "128 : 18\n", + "129 : 18\n", + "130 : 18\n", + "131 : 18\n", + "132 : 18\n", + "133 : 18\n", + "134 : 18\n", + "135 : 18\n", + "136 : 18\n", + "137 : 18\n", + "138 : 18\n", + "139 : 18\n", + "140 : 18\n", + "141 : 18\n", + "142 : 17\n", + "143 : 18\n", + "144 : 18\n", + "145 : 18\n", + "146 : 18\n", + "147 : 18\n", + "148 : 18\n", + "149 : 18\n", + "150 : 18\n", + "151 : 18\n", + "152 : 18\n", + "153 : 18\n", + "154 : 18\n", + "155 : 18\n", + "156 : 18\n", + "157 : 18\n", + "158 : 18\n", + "159 : 18\n", + "160 : 18\n", + "161 : 18\n", + "162 : 18\n", + "163 : 18\n", + "164 : 18\n", + "165 : 18\n", + "166 : 18\n", + "167 : 18\n", + "168 : 18\n", + "169 : 18\n", + "170 : 18\n", + "171 : 18\n", + "172 : 18\n", + "173 : 18\n", + "174 : 18\n", + "175 : 18\n", + "176 : 18\n", + "177 : 18\n", + "178 : 18\n", + "179 : 18\n", + "180 : 18\n", + "181 : 18\n", + "182 : 18\n", + "183 : 18\n", + "184 : 18\n", + "185 : 18\n", + "186 : 18\n", + "187 : 18\n", + "188 : 18\n", + "189 : 18\n", + "190 : 18\n", + "191 : 18\n", + "192 : 18\n", + "193 : 18\n", + "194 : 18\n", + "195 : 18\n", + "196 : 18\n", + "197 : 18\n", + "198 : 18\n", + "199 : 18\n", + "200 : 18\n", + "201 : 18\n", + "202 : 18\n", + "203 : 18\n", + "204 : 18\n", + "205 : 18\n", + "206 : 18\n", + "207 : 18\n", + "208 : 18\n", + "209 : 18\n", + "210 : 18\n", + "211 : 18\n", + "212 : 18\n", + "213 : 18\n", + "214 : 18\n", + "215 : 18\n", + "216 : 18\n", + "217 : 18\n", + "218 : 18\n", + "219 : 17\n", + "220 : 17\n", + "221 : 18\n", + "222 : 18\n", + "223 : 18\n", + "224 : 18\n", + "225 : 18\n", + "226 : 18\n", + "227 : 18\n", + "228 : 18\n", + "229 : 18\n", + "230 : 18\n", + "231 : 18\n", + "232 : 18\n", + "233 : 18\n", + "234 : 18\n", + "235 : 18\n", + "236 : 18\n", + "237 : 18\n", + "238 : 18\n", + "239 : 18\n", + "240 : 18\n", + "241 : 18\n", + "242 : 18\n", + "243 : 18\n", + "244 : 18\n", + "245 : 18\n", + "246 : 18\n", + "247 : 18\n", + "248 : 18\n", + "249 : 18\n", + "250 : 18\n", + "251 : 18\n", + "252 : 18\n", + "253 : 18\n", + "254 : 18\n", + "255 : 18\n", + "256 : 18\n", + "257 : 18\n", + "258 : 18\n", + "259 : 18\n", + "260 : 18\n", + "261 : 18\n", + "262 : 18\n", + "263 : 18\n", + "264 : 18\n", + "265 : 18\n", + "266 : 18\n", + "267 : 18\n", + "268 : 18\n", + "269 : 18\n", + "270 : 18\n", + "271 : 18\n", + "272 : 18\n", + "273 : 18\n", + "274 : 18\n", + "275 : 18\n", + "276 : 18\n", + "277 : 18\n", + "278 : 18\n", + "279 : 18\n", + "280 : 18\n", + "281 : 18\n", + "282 : 18\n", + "283 : 18\n", + "284 : 18\n", + "285 : 18\n", + "286 : 18\n", + "287 : 18\n", + "288 : 18\n", + "289 : 18\n", + "290 : 18\n", + "291 : 18\n", + "292 : 18\n", + "293 : 18\n", + "294 : 18\n", + "295 : 18\n", + "296 : 17\n", + "297 : 18\n", + "298 : 18\n", + "299 : 18\n", + "300 : 18\n", + "301 : 18\n", + "302 : 18\n", + "303 : 18\n", + "304 : 18\n", + "305 : 18\n", + "306 : 18\n", + "307 : 18\n", + "308 : 18\n", + "309 : 18\n", + "310 : 18\n", + "311 : 18\n", + "312 : 18\n", + "313 : 18\n", + "314 : 18\n", + "315 : 18\n", + "316 : 18\n", + "317 : 18\n", + "318 : 18\n", + "319 : 18\n", + "320 : 18\n", + "321 : 18\n", + "322 : 18\n", + "323 : 18\n", + "324 : 18\n", + "325 : 18\n", + "326 : 18\n", + "327 : 18\n", + "328 : 17\n", + "329 : 18\n", + "330 : 18\n", + "331 : 18\n", + "332 : 18\n", + "333 : 18\n", + "334 : 18\n", + "335 : 18\n", + "336 : 18\n", + "337 : 18\n", + "338 : 18\n", + "339 : 18\n", + "340 : 18\n", + "341 : 18\n", + "342 : 18\n", + "343 : 18\n", + "344 : 18\n", + "345 : 18\n", + "346 : 18\n", + "347 : 18\n", + "348 : 18\n", + "349 : 18\n", + "350 : 18\n", + "351 : 18\n", + "352 : 18\n", + "353 : 18\n", + "354 : 18\n", + "355 : 18\n", + "356 : 18\n", + "357 : 18\n", + "358 : 18\n", + "359 : 18\n", + "360 : 18\n", + "361 : 18\n", + "362 : 18\n", + "363 : 18\n", + "364 : 18\n", + "365 : 18\n", + "366 : 18\n", + "367 : 18\n", + "368 : 18\n", + "369 : 18\n", + "370 : 18\n", + "371 : 18\n", + "372 : 18\n", + "373 : 18\n", + "374 : 18\n", + "375 : 18\n", + "376 : 18\n", + "377 : 18\n", + "378 : 18\n", + "379 : 18\n", + "380 : 18\n", + "381 : 18\n", + "382 : 18\n", + "383 : 18\n", + "384 : 18\n", + "385 : 18\n", + "386 : 18\n", + "387 : 18\n", + "388 : 18\n", + "389 : 18\n", + "390 : 18\n", + "391 : 18\n", + "392 : 18\n", + "393 : 18\n", + "394 : 18\n", + "395 : 18\n", + "396 : 18\n", + "397 : 18\n", + "398 : 18\n", + "399 : 18\n", + "400 : 18\n", + "401 : 18\n", + "402 : 18\n", + "403 : 18\n", + "404 : 18\n", + "405 : 18\n", + "406 : 18\n", + "407 : 18\n", + "408 : 18\n", + "409 : 17\n", + "410 : 18\n", + "411 : 18\n", + "412 : 18\n", + "413 : 18\n", + "414 : 18\n", + "415 : 18\n", + "416 : 18\n", + "417 : 18\n", + "418 : 18\n", + "419 : 18\n", + "420 : 18\n", + "421 : 18\n", + "422 : 18\n", + "423 : 18\n", + "424 : 18\n", + "425 : 18\n", + "426 : 18\n", + "427 : 18\n", + "428 : 18\n", + "429 : 18\n", + "430 : 18\n", + "431 : 18\n", + "432 : 18\n", + "433 : 18\n", + "434 : 18\n", + "435 : 18\n", + "436 : 18\n", + "437 : 18\n", + "438 : 18\n", + "439 : 18\n", + "440 : 18\n", + "441 : 18\n", + "442 : 18\n", + "443 : 18\n", + "444 : 18\n", + "445 : 18\n", + "446 : 18\n", + "447 : 18\n", + "448 : 18\n", + "449 : 18\n", + "450 : 18\n", + "451 : 18\n", + "452 : 18\n", + "453 : 18\n", + "454 : 18\n", + "455 : 18\n", + "456 : 18\n", + "457 : 18\n", + "458 : 18\n", + "459 : 18\n", + "460 : 18\n", + "461 : 18\n", + "462 : 18\n", + "463 : 18\n", + "464 : 18\n", + "465 : 18\n", + "466 : 18\n", + "467 : 18\n", + "468 : 18\n", + "469 : 18\n", + "470 : 18\n", + "471 : 18\n", + "472 : 18\n", + "473 : 18\n", + "474 : 18\n", + "475 : 18\n", + "476 : 18\n", + "477 : 18\n", + "478 : 18\n", + "479 : 18\n", + "480 : 18\n", + "481 : 18\n", + "482 : 18\n", + "483 : 18\n", + "484 : 18\n", + "485 : 18\n", + "486 : 18\n", + "487 : 18\n", + "488 : 18\n", + "489 : 18\n", + "490 : 18\n", + "491 : 18\n", + "492 : 18\n", + "493 : 18\n", + "494 : 18\n", + "495 : 18\n", + "496 : 18\n", + "497 : 18\n", + "498 : 18\n", + "499 : 18\n", + "500 : 18\n", + "501 : 18\n", + "502 : 18\n", + "503 : 17\n", + "504 : 18\n", + "505 : 18\n", + "506 : 18\n", + "507 : 18\n", + "508 : 18\n", + "509 : 18\n", + "510 : 18\n", + "511 : 18\n", + "512 : 18\n", + "513 : 18\n", + "514 : 18\n", + "515 : 18\n", + "516 : 18\n", + "517 : 18\n", + "518 : 18\n", + "519 : 18\n", + "520 : 18\n", + "521 : 18\n", + "522 : 18\n", + "523 : 18\n", + "524 : 18\n", + "525 : 18\n", + "526 : 18\n", + "527 : 18\n", + "528 : 18\n", + "529 : 18\n", + "530 : 18\n", + "531 : 18\n", + "532 : 18\n", + "533 : 18\n", + "534 : 18\n", + "535 : 18\n", + "536 : 18\n", + "537 : 18\n", + "538 : 18\n", + "539 : 18\n", + "540 : 18\n", + "541 : 18\n", + "542 : 18\n", + "543 : 18\n", + "544 : 18\n", + "545 : 18\n", + "546 : 18\n", + "547 : 18\n", + "548 : 18\n", + "549 : 18\n", + "550 : 18\n", + "551 : 18\n", + "552 : 18\n", + "553 : 18\n", + "554 : 18\n", + "555 : 18\n", + "556 : 18\n", + "557 : 18\n", + "558 : 18\n", + "559 : 18\n", + "560 : 18\n", + "561 : 18\n", + "562 : 18\n", + "563 : 18\n", + "564 : 18\n", + "565 : 18\n", + "566 : 18\n", + "567 : 18\n", + "568 : 18\n", + "569 : 18\n", + "570 : 18\n", + "571 : 18\n", + "572 : 18\n", + "573 : 18\n", + "574 : 18\n", + "575 : 18\n", + "576 : 18\n", + "577 : 18\n", + "578 : 18\n", + "579 : 18\n", + "580 : 18\n", + "581 : 18\n", + "582 : 18\n", + "583 : 18\n", + "584 : 18\n", + "585 : 18\n", + "586 : 18\n", + "587 : 18\n", + "588 : 18\n", + "589 : 18\n", + "590 : 18\n", + "591 : 18\n", + "592 : 18\n", + "593 : 18\n", + "594 : 18\n", + "595 : 18\n", + "596 : 18\n", + "597 : 18\n", + "598 : 18\n", + "599 : 18\n", + "600 : 18\n", + "601 : 18\n", + "602 : 18\n", + "603 : 18\n", + "604 : 18\n", + "605 : 18\n", + "606 : 18\n", + "607 : 18\n", + "608 : 18\n", + "609 : 18\n", + "610 : 18\n", + "611 : 18\n", + "612 : 18\n", + "613 : 18\n", + "614 : 18\n", + "615 : 18\n", + "616 : 18\n", + "617 : 18\n", + "618 : 18\n", + "619 : 18\n", + "620 : 17\n", + "621 : 18\n", + "622 : 18\n", + "623 : 18\n", + "624 : 18\n", + "625 : 18\n", + "626 : 18\n", + "627 : 18\n", + "628 : 18\n", + "629 : 18\n", + "630 : 18\n", + "631 : 18\n", + "632 : 18\n", + "633 : 18\n", + "634 : 18\n", + "635 : 18\n", + "636 : 18\n", + "637 : 18\n", + "638 : 18\n", + "639 : 18\n", + "640 : 18\n", + "641 : 18\n", + "642 : 18\n", + "643 : 18\n", + "644 : 18\n", + "645 : 18\n", + "646 : 17\n", + "647 : 18\n", + "648 : 18\n", + "649 : 18\n", + "650 : 17\n", + "651 : 18\n", + "652 : 18\n", + "653 : 18\n", + "654 : 18\n", + "655 : 18\n", + "656 : 18\n", + "657 : 18\n", + "658 : 18\n", + "659 : 18\n", + "660 : 18\n", + "661 : 18\n", + "662 : 18\n", + "663 : 18\n", + "664 : 18\n", + "665 : 18\n", + "666 : 18\n", + "667 : 18\n", + "668 : 18\n", + "669 : 18\n", + "670 : 18\n", + "671 : 18\n", + "672 : 18\n", + "673 : 18\n", + "674 : 18\n", + "675 : 18\n", + "676 : 18\n", + "677 : 18\n", + "678 : 18\n", + "679 : 18\n", + "680 : 18\n", + "681 : 18\n", + "682 : 18\n", + "683 : 18\n", + "684 : 18\n", + "685 : 18\n", + "686 : 18\n", + "687 : 18\n", + "688 : 18\n", + "689 : 18\n", + "690 : 18\n", + "691 : 18\n", + "692 : 18\n", + "693 : 18\n", + "694 : 18\n", + "695 : 18\n", + "696 : 18\n", + "697 : 18\n", + "698 : 18\n", + "699 : 18\n", + "700 : 18\n", + "701 : 18\n", + "702 : 18\n", + "703 : 18\n", + "704 : 18\n", + "705 : 18\n", + "706 : 18\n", + "707 : 18\n", + "708 : 18\n", + "709 : 18\n", + "710 : 18\n", + "711 : 18\n", + "712 : 18\n", + "713 : 18\n", + "714 : 18\n", + "715 : 18\n", + "716 : 18\n", + "717 : 18\n", + "718 : 18\n", + "719 : 18\n", + "720 : 18\n", + "721 : 18\n", + "722 : 18\n", + "723 : 18\n", + "724 : 18\n", + "725 : 18\n", + "726 : 18\n", + "727 : 18\n", + "728 : 18\n", + "729 : 18\n", + "730 : 18\n", + "731 : 18\n", + "732 : 18\n", + "733 : 17\n", + "734 : 18\n", + "735 : 18\n", + "736 : 18\n", + "737 : 18\n", + "738 : 18\n", + "739 : 18\n", + "740 : 18\n", + "741 : 18\n", + "742 : 18\n", + "743 : 18\n", + "744 : 18\n", + "745 : 18\n", + "746 : 18\n", + "747 : 18\n", + "748 : 18\n", + "749 : 18\n", + "750 : 18\n", + "751 : 18\n", + "752 : 18\n", + "753 : 18\n", + "754 : 17\n", + "755 : 18\n", + "756 : 18\n", + "757 : 18\n", + "758 : 18\n", + "759 : 18\n", + "760 : 18\n", + "761 : 18\n", + "762 : 18\n", + "763 : 18\n", + "764 : 18\n", + "765 : 18\n", + "766 : 18\n", + "767 : 18\n", + "768 : 18\n", + "769 : 18\n", + "770 : 18\n", + "771 : 18\n", + "772 : 18\n", + "773 : 18\n", + "774 : 18\n", + "775 : 18\n", + "776 : 18\n", + "777 : 18\n", + "778 : 18\n", + "779 : 18\n", + "780 : 18\n", + "781 : 18\n", + "782 : 18\n", + "783 : 18\n", + "784 : 18\n", + "785 : 18\n", + "786 : 18\n", + "787 : 18\n", + "788 : 18\n", + "789 : 18\n", + "790 : 18\n", + "791 : 18\n", + "792 : 18\n", + "793 : 18\n", + "794 : 18\n", + "795 : 18\n", + "796 : 18\n", + "797 : 18\n", + "798 : 18\n", + "799 : 18\n", + "800 : 18\n", + "801 : 18\n", + "802 : 18\n", + "803 : 18\n", + "804 : 18\n", + "805 : 18\n", + "806 : 18\n", + "807 : 18\n", + "808 : 18\n", + "809 : 18\n", + "810 : 18\n", + "811 : 18\n", + "812 : 18\n", + "813 : 18\n", + "814 : 18\n", + "815 : 18\n", + "816 : 18\n", + "817 : 18\n", + "818 : 18\n", + "819 : 18\n", + "820 : 18\n", + "821 : 18\n", + "822 : 18\n", + "823 : 18\n", + "824 : 18\n", + "825 : 18\n", + "826 : 18\n", + "827 : 18\n", + "828 : 18\n", + "829 : 18\n", + "830 : 18\n", + "831 : 18\n", + "832 : 18\n", + "833 : 18\n", + "834 : 18\n", + "835 : 18\n", + "836 : 18\n", + "837 : 18\n", + "838 : 18\n", + "839 : 18\n", + "840 : 18\n", + "841 : 18\n", + "842 : 18\n", + "843 : 18\n", + "844 : 18\n", + "845 : 18\n", + "846 : 18\n", + "847 : 18\n", + "848 : 18\n", + "849 : 18\n", + "850 : 18\n", + "851 : 18\n", + "852 : 18\n", + "853 : 18\n", + "854 : 18\n", + "855 : 17\n", + "856 : 18\n", + "857 : 18\n", + "858 : 18\n", + "859 : 18\n", + "860 : 18\n", + "861 : 18\n", + "862 : 18\n", + "863 : 18\n", + "864 : 18\n", + "865 : 18\n", + "866 : 18\n", + "867 : 18\n", + "868 : 18\n", + "869 : 18\n", + "870 : 18\n", + "871 : 18\n", + "872 : 18\n", + "873 : 18\n", + "874 : 18\n", + "875 : 18\n", + "876 : 18\n", + "877 : 18\n", + "878 : 18\n", + "879 : 18\n", + "880 : 18\n", + "881 : 18\n", + "882 : 18\n", + "883 : 18\n", + "884 : 18\n", + "885 : 17\n", + "886 : 18\n", + "887 : 18\n", + "888 : 18\n", + "889 : 18\n", + "890 : 18\n", + "891 : 18\n", + "892 : 18\n", + "893 : 18\n", + "894 : 18\n", + "895 : 18\n", + "896 : 18\n", + "897 : 18\n", + "898 : 18\n", + "899 : 18\n", + "900 : 18\n", + "901 : 18\n", + "902 : 18\n", + "903 : 18\n", + "904 : 18\n", + "905 : 18\n", + "906 : 18\n", + "907 : 18\n", + "908 : 18\n", + "909 : 18\n", + "910 : 18\n", + "911 : 18\n", + "912 : 18\n", + "913 : 18\n", + "914 : 18\n", + "915 : 18\n", + "916 : 18\n", + "917 : 18\n", + "918 : 18\n", + "919 : 18\n", + "920 : 18\n", + "921 : 18\n", + "922 : 18\n", + "923 : 18\n", + "924 : 18\n", + "925 : 18\n", + "926 : 18\n", + "927 : 18\n", + "928 : 18\n", + "929 : 18\n", + "930 : 18\n", + "931 : 18\n", + "932 : 18\n", + "933 : 18\n", + "934 : 18\n", + "935 : 18\n", + "936 : 18\n", + "937 : 18\n", + "938 : 18\n", + "939 : 18\n", + "940 : 18\n", + "941 : 18\n", + "942 : 18\n", + "943 : 18\n", + "944 : 18\n", + "945 : 18\n", + "946 : 18\n", + "947 : 18\n", + "948 : 18\n", + "949 : 18\n", + "950 : 18\n", + "951 : 18\n", + "952 : 18\n", + "953 : 18\n", + "954 : 18\n", + "955 : 18\n", + "956 : 18\n", + "957 : 18\n", + "958 : 18\n", + "959 : 18\n", + "960 : 18\n", + "961 : 18\n", + "962 : 18\n", + "963 : 18\n", + "964 : 18\n", + "965 : 18\n", + "966 : 18\n", + "967 : 18\n", + "968 : 18\n", + "969 : 18\n", + "970 : 18\n", + "971 : 18\n", + "972 : 18\n", + "973 : 18\n", + "974 : 18\n", + "975 : 18\n", + "976 : 18\n", + "977 : 18\n", + "978 : 18\n", + "979 : 18\n", + "980 : 18\n", + "981 : 18\n", + "982 : 18\n", + "983 : 18\n", + "984 : 18\n", + "985 : 18\n", + "986 : 18\n", + "987 : 18\n", + "988 : 18\n", + "989 : 18\n", + "990 : 18\n", + "991 : 18\n", + "992 : 18\n", + "993 : 18\n", + "994 : 18\n", + "995 : 18\n", + "996 : 18\n", + "997 : 18\n", + "998 : 18\n", + "999 : 18\n", + "1000 : 18\n", + "1001 : 18\n", + "1002 : 18\n", + "1003 : 18\n", + "1004 : 18\n", + "1005 : 18\n", + "1006 : 18\n", + "1007 : 18\n", + "1008 : 18\n", + "1009 : 18\n", + "1010 : 18\n", + "1011 : 18\n", + "1012 : 18\n", + "1013 : 18\n", + "1014 : 18\n", + "1015 : 18\n", + "1016 : 18\n", + "1017 : 18\n", + "1018 : 18\n", + "1019 : 18\n", + "1020 : 18\n", + "1021 : 18\n", + "1022 : 18\n", + "1023 : 18\n", + "1024 : 18\n", + "1025 : 18\n", + "1026 : 18\n", + "1027 : 18\n", + "1028 : 18\n", + "1029 : 18\n", + "1030 : 18\n", + "1031 : 18\n", + "1032 : 18\n", + "1033 : 18\n", + "1034 : 18\n", + "1035 : 18\n", + "1036 : 18\n", + "1037 : 18\n", + "1038 : 18\n", + "1039 : 18\n", + "1040 : 18\n", + "1041 : 18\n", + "1042 : 18\n", + "1043 : 18\n", + "1044 : 18\n", + "1045 : 18\n", + "1046 : 18\n", + "1047 : 18\n", + "1048 : 18\n", + "1049 : 18\n", + "1050 : 18\n", + "1051 : 18\n", + "1052 : 18\n", + "1053 : 18\n", + "1054 : 18\n", + "1055 : 18\n", + "1056 : 18\n", + "1057 : 18\n", + "1058 : 18\n", + "1059 : 18\n", + "1060 : 18\n", + "1061 : 18\n", + "1062 : 18\n", + "1063 : 18\n", + "1064 : 18\n", + "1065 : 18\n", + "1066 : 18\n", + "1067 : 18\n", + "1068 : 18\n", + "1069 : 18\n", + "1070 : 18\n", + "1071 : 18\n", + "1072 : 17\n", + "1073 : 18\n", + "1074 : 18\n", + "1075 : 18\n", + "1076 : 18\n", + "1077 : 18\n", + "1078 : 18\n", + "1079 : 18\n", + "1080 : 18\n", + "1081 : 18\n", + "1082 : 18\n", + "1083 : 18\n", + "1084 : 18\n", + "1085 : 18\n", + "1086 : 18\n", + "1087 : 18\n", + "1088 : 18\n", + "1089 : 18\n", + "1090 : 18\n", + "1091 : 18\n", + "1092 : 18\n", + "1093 : 18\n", + "1094 : 18\n", + "1095 : 18\n", + "1096 : 18\n", + "1097 : 18\n", + "1098 : 18\n", + "1099 : 18\n", + "1100 : 18\n", + "1101 : 18\n", + "1102 : 18\n", + "1103 : 18\n", + "1104 : 18\n", + "1105 : 18\n", + "1106 : 18\n", + "1107 : 18\n", + "1108 : 18\n", + "1109 : 18\n", + "1110 : 18\n", + "1111 : 18\n", + "1112 : 18\n", + "1113 : 18\n", + "1114 : 18\n", + "1115 : 18\n", + "1116 : 18\n", + "1117 : 18\n", + "1118 : 18\n", + "1119 : 18\n", + "1120 : 18\n", + "1121 : 18\n", + "1122 : 18\n", + "1123 : 18\n", + "1124 : 18\n", + "1125 : 18\n", + "1126 : 18\n", + "1127 : 18\n", + "1128 : 18\n", + "1129 : 18\n", + "1130 : 18\n", + "1131 : 18\n", + "1132 : 18\n", + "1133 : 18\n", + "1134 : 18\n", + "1135 : 18\n", + "1136 : 18\n", + "1137 : 18\n", + "1138 : 18\n", + "1139 : 18\n", + "1140 : 18\n", + "1141 : 18\n", + "1142 : 18\n", + "1143 : 18\n", + "1144 : 18\n", + "1145 : 18\n", + "1146 : 18\n", + "1147 : 18\n", + "1148 : 18\n", + "1149 : 18\n", + "1150 : 18\n", + "1151 : 18\n", + "1152 : 18\n", + "1153 : 18\n", + "1154 : 18\n", + "1155 : 18\n", + "1156 : 18\n", + "1157 : 18\n", + "1158 : 18\n", + "1159 : 18\n", + "1160 : 18\n", + "1161 : 18\n", + "1162 : 18\n", + "1163 : 18\n", + "1164 : 18\n", + "1165 : 18\n", + "1166 : 18\n", + "1167 : 18\n", + "1168 : 18\n", + "1169 : 18\n", + "1170 : 18\n", + "1171 : 18\n", + "1172 : 18\n", + "1173 : 18\n", + "1174 : 18\n", + "1175 : 18\n", + "1176 : 18\n", + "1177 : 18\n", + "1178 : 18\n", + "1179 : 17\n", + "1180 : 18\n", + "1181 : 18\n", + "1182 : 18\n", + "1183 : 18\n", + "1184 : 18\n", + "1185 : 18\n", + "1186 : 18\n", + "1187 : 18\n", + "1188 : 18\n", + "1189 : 18\n", + "1190 : 18\n", + "1191 : 18\n", + "1192 : 17\n", + "1193 : 18\n", + "1194 : 18\n", + "1195 : 18\n", + "1196 : 18\n", + "1197 : 18\n", + "1198 : 18\n", + "1199 : 18\n", + "1200 : 18\n", + "1201 : 18\n", + "1202 : 17\n", + "1203 : 18\n", + "1204 : 18\n", + "1205 : 18\n", + "1206 : 18\n", + "1207 : 18\n", + "1208 : 17\n", + "1209 : 18\n", + "1210 : 18\n", + "1211 : 18\n", + "1212 : 18\n", + "1213 : 18\n", + "1214 : 18\n", + "1215 : 18\n", + "1216 : 18\n", + "1217 : 18\n", + "1218 : 18\n", + "1219 : 18\n", + "1220 : 18\n", + "1221 : 18\n", + "1222 : 18\n", + "1223 : 18\n", + "1224 : 18\n", + "1225 : 18\n", + "1226 : 18\n", + "1227 : 17\n", + "1228 : 18\n", + "1229 : 18\n", + "1230 : 18\n", + "1231 : 18\n", + "1232 : 18\n", + "1233 : 18\n", + "1234 : 18\n", + "1235 : 18\n", + "1236 : 18\n", + "1237 : 18\n", + "1238 : 18\n", + "1239 : 18\n", + "1240 : 18\n", + "1241 : 18\n", + "1242 : 18\n", + "1243 : 18\n", + "1244 : 18\n", + "1245 : 18\n", + "1246 : 18\n", + "1247 : 18\n", + "1248 : 18\n", + "1249 : 18\n", + "1250 : 18\n", + "1251 : 18\n", + "1252 : 18\n", + "1253 : 18\n", + "1254 : 18\n", + "1255 : 18\n", + "1256 : 18\n", + "1257 : 18\n", + "1258 : 18\n", + "1259 : 18\n", + "1260 : 18\n", + "1261 : 18\n", + "1262 : 18\n", + "1263 : 18\n", + "1264 : 18\n", + "1265 : 18\n", + "1266 : 18\n", + "1267 : 18\n", + "1268 : 18\n", + "1269 : 18\n", + "1270 : 18\n", + "1271 : 18\n", + "1272 : 18\n", + "1273 : 18\n", + "1274 : 18\n", + "1275 : 18\n", + "1276 : 18\n", + "1277 : 18\n", + "1278 : 18\n", + "1279 : 18\n", + "1280 : 18\n", + "1281 : 18\n", + "1282 : 18\n", + "1283 : 18\n", + "1284 : 18\n", + "1285 : 17\n", + "1286 : 18\n", + "1287 : 18\n", + "1288 : 18\n", + "1289 : 18\n", + "1290 : 18\n", + "1291 : 18\n", + "1292 : 18\n", + "1293 : 18\n", + "1294 : 18\n", + "1295 : 18\n", + "1296 : 18\n", + "1297 : 18\n", + "1298 : 18\n", + "1299 : 18\n", + "1300 : 18\n", + "1301 : 18\n", + "1302 : 18\n", + "1303 : 18\n", + "1304 : 18\n", + "1305 : 18\n", + "1306 : 18\n", + "1307 : 18\n", + "1308 : 18\n", + "1309 : 18\n", + "1310 : 18\n", + "1311 : 18\n", + "1312 : 18\n", + "1313 : 18\n", + "1314 : 18\n", + "1315 : 18\n", + "1316 : 18\n", + "1317 : 18\n", + "1318 : 18\n", + "1319 : 18\n", + "1320 : 18\n", + "1321 : 18\n", + "1322 : 17\n", + "1323 : 18\n", + "1324 : 18\n", + "1325 : 18\n", + "1326 : 18\n", + "1327 : 18\n", + "1328 : 18\n", + "1329 : 18\n", + "1330 : 18\n", + "1331 : 18\n", + "1332 : 18\n", + "1333 : 18\n", + "1334 : 18\n", + "1335 : 18\n", + "1336 : 18\n", + "1337 : 18\n", + "1338 : 18\n", + "1339 : 18\n", + "1340 : 18\n", + "1341 : 18\n", + "1342 : 18\n", + "1343 : 18\n", + "1344 : 18\n", + "1345 : 18\n", + "1346 : 17\n", + "1347 : 18\n", + "1348 : 18\n", + "1349 : 18\n", + "1350 : 17\n", + "1351 : 18\n", + "1352 : 18\n", + "1353 : 18\n", + "1354 : 18\n", + "1355 : 18\n", + "1356 : 18\n", + "1357 : 18\n", + "1358 : 18\n", + "1359 : 18\n", + "1360 : 18\n", + "1361 : 18\n", + "1362 : 18\n", + "1363 : 18\n", + "1364 : 18\n", + "1365 : 18\n", + "1366 : 18\n", + "1367 : 18\n", + "1368 : 18\n", + "1369 : 18\n", + "1370 : 18\n", + "1371 : 18\n", + "1372 : 18\n", + "1373 : 18\n", + "1374 : 18\n", + "1375 : 18\n", + "1376 : 18\n", + "1377 : 18\n", + "1378 : 18\n", + "1379 : 18\n", + "1380 : 18\n", + "1381 : 18\n", + "1382 : 18\n", + "1383 : 18\n", + "1384 : 18\n", + "1385 : 18\n", + "1386 : 18\n", + "1387 : 18\n", + "1388 : 18\n", + "1389 : 18\n", + "1390 : 18\n", + "1391 : 18\n", + "1392 : 18\n", + "1393 : 18\n", + "1394 : 18\n", + "1395 : 18\n", + "1396 : 18\n", + "1397 : 18\n", + "1398 : 18\n", + "1399 : 18\n", + "1400 : 18\n", + "1401 : 18\n", + "1402 : 18\n", + "1403 : 18\n", + "1404 : 18\n", + "1405 : 18\n", + "1406 : 18\n", + "1407 : 18\n", + "1408 : 18\n", + "1409 : 18\n", + "1410 : 18\n", + "1411 : 18\n", + "1412 : 18\n", + "1413 : 18\n", + "1414 : 18\n", + "1415 : 18\n", + "1416 : 18\n", + "1417 : 18\n", + "1418 : 18\n", + "1419 : 18\n", + "1420 : 18\n", + "1421 : 18\n", + "1422 : 18\n", + "1423 : 18\n", + "1424 : 18\n", + "1425 : 18\n", + "1426 : 18\n", + "1427 : 18\n", + "1428 : 18\n", + "1429 : 18\n", + "1430 : 18\n", + "1431 : 18\n", + "1432 : 18\n", + "1433 : 18\n", + "1434 : 18\n", + "1435 : 18\n", + "1436 : 18\n", + "1437 : 18\n", + "1438 : 18\n", + "1439 : 18\n", + "1440 : 18\n", + "1441 : 18\n", + "1442 : 18\n", + "1443 : 18\n", + "1444 : 18\n", + "1445 : 18\n", + "1446 : 18\n", + "1447 : 18\n", + "1448 : 18\n", + "1449 : 18\n", + "1450 : 18\n", + "1451 : 18\n", + "1452 : 18\n", + "1453 : 18\n", + "1454 : 18\n", + "1455 : 18\n", + "1456 : 18\n", + "1457 : 18\n", + "1458 : 18\n", + "1459 : 18\n", + "1460 : 18\n", + "1461 : 18\n", + "1462 : 18\n", + "1463 : 18\n", + "1464 : 18\n", + "1465 : 18\n", + "1466 : 18\n", + "1467 : 18\n", + "1468 : 18\n", + "1469 : 18\n", + "1470 : 18\n", + "1471 : 18\n", + "1472 : 18\n", + "1473 : 18\n", + "1474 : 18\n", + "1475 : 18\n", + "1476 : 18\n", + "1477 : 18\n", + "1478 : 18\n", + "1479 : 18\n", + "1480 : 18\n", + "1481 : 18\n", + "1482 : 18\n", + "1483 : 18\n", + "1484 : 18\n", + "1485 : 18\n", + "1486 : 18\n", + "1487 : 18\n", + "1488 : 18\n", + "1489 : 18\n", + "1490 : 18\n", + "1491 : 18\n", + "1492 : 18\n", + "1493 : 18\n", + "1494 : 18\n", + "1495 : 17\n", + "1496 : 18\n", + "1497 : 18\n", + "1498 : 18\n", + "1499 : 18\n", + "1500 : 18\n", + "1501 : 18\n", + "1502 : 18\n", + "1503 : 18\n", + "1504 : 18\n", + "1505 : 18\n", + "1506 : 18\n", + "1507 : 18\n", + "1508 : 18\n", + "1509 : 18\n", + "1510 : 18\n", + "1511 : 18\n", + "1512 : 18\n", + "1513 : 18\n", + "1514 : 18\n", + "1515 : 18\n", + "1516 : 18\n", + "1517 : 18\n", + "1518 : 18\n", + "1519 : 18\n", + "1520 : 18\n", + "1521 : 18\n", + "1522 : 18\n", + "1523 : 18\n", + "1524 : 18\n", + "1525 : 18\n", + "1526 : 18\n", + "1527 : 18\n", + "1528 : 18\n", + "1529 : 18\n", + "1530 : 18\n", + "1531 : 18\n", + "1532 : 18\n", + "1533 : 18\n", + "1534 : 18\n", + "1535 : 18\n", + "1536 : 18\n", + "1537 : 18\n", + "1538 : 17\n", + "1539 : 18\n", + "1540 : 18\n", + "1541 : 18\n", + "1542 : 18\n", + "1543 : 18\n", + "1544 : 18\n", + "1545 : 18\n", + "1546 : 18\n", + "1547 : 18\n", + "1548 : 18\n", + "1549 : 18\n", + "1550 : 18\n", + "1551 : 18\n", + "1552 : 18\n", + "1553 : 18\n", + "1554 : 18\n", + "1555 : 18\n", + "1556 : 18\n", + "1557 : 18\n", + "1558 : 18\n", + "1559 : 18\n", + "1560 : 18\n", + "1561 : 18\n", + "1562 : 18\n", + "1563 : 18\n", + "1564 : 18\n", + "1565 : 18\n", + "1566 : 18\n", + "1567 : 18\n", + "1568 : 18\n", + "1569 : 18\n", + "1570 : 18\n", + "1571 : 18\n", + "1572 : 18\n", + "1573 : 18\n", + "1574 : 18\n", + "1575 : 18\n", + "1576 : 18\n", + "1577 : 18\n", + "1578 : 18\n", + "1579 : 18\n", + "1580 : 18\n", + "1581 : 18\n", + "1582 : 18\n", + "1583 : 18\n", + "1584 : 18\n", + "1585 : 17\n", + "1586 : 18\n", + "1587 : 18\n", + "1588 : 18\n", + "1589 : 18\n", + "1590 : 18\n", + "1591 : 18\n", + "1592 : 18\n", + "1593 : 18\n", + "1594 : 18\n", + "1595 : 18\n", + "1596 : 18\n", + "1597 : 18\n", + "1598 : 18\n", + "1599 : 18\n", + "1600 : 18\n", + "1601 : 18\n", + "1602 : 18\n", + "1603 : 18\n", + "1604 : 18\n", + "1605 : 18\n", + "1606 : 18\n", + "1607 : 18\n", + "1608 : 18\n", + "1609 : 18\n", + "1610 : 18\n", + "1611 : 18\n", + "1612 : 18\n", + "1613 : 18\n", + "1614 : 18\n", + "1615 : 18\n", + "1616 : 18\n", + "1617 : 18\n", + "1618 : 18\n", + "1619 : 17\n", + "1620 : 18\n", + "1621 : 18\n", + "1622 : 18\n", + "1623 : 18\n", + "1624 : 18\n", + "1625 : 18\n", + "1626 : 18\n", + "1627 : 18\n", + "1628 : 18\n", + "1629 : 18\n", + "1630 : 18\n", + "1631 : 18\n", + "1632 : 18\n", + "1633 : 18\n", + "1634 : 18\n", + "1635 : 18\n", + "1636 : 18\n", + "1637 : 18\n", + "1638 : 18\n", + "1639 : 18\n", + "1640 : 18\n", + "1641 : 18\n", + "1642 : 18\n", + "1643 : 18\n", + "1644 : 18\n", + "1645 : 18\n", + "1646 : 18\n", + "1647 : 18\n", + "1648 : 18\n", + "1649 : 18\n", + "1650 : 18\n", + "1651 : 18\n", + "1652 : 18\n", + "1653 : 18\n", + "1654 : 18\n", + "1655 : 18\n", + "1656 : 18\n", + "1657 : 18\n", + "1658 : 18\n", + "1659 : 18\n", + "1660 : 18\n", + "1661 : 18\n", + "1662 : 18\n", + "1663 : 18\n", + "1664 : 18\n", + "1665 : 18\n", + "1666 : 18\n", + "1667 : 18\n", + "1668 : 18\n", + "1669 : 18\n", + "1670 : 18\n", + "1671 : 18\n", + "1672 : 18\n", + "1673 : 18\n", + "1674 : 18\n", + "1675 : 18\n", + "1676 : 18\n", + "1677 : 18\n", + "1678 : 18\n", + "1679 : 18\n", + "1680 : 18\n", + "1681 : 18\n", + "1682 : 18\n", + "1683 : 18\n", + "1684 : 18\n", + "1685 : 18\n", + "1686 : 18\n", + "1687 : 18\n", + "1688 : 18\n", + "1689 : 18\n", + "1690 : 18\n", + "1691 : 18\n", + "1692 : 18\n", + "1693 : 18\n", + "1694 : 18\n", + "1695 : 18\n", + "1696 : 18\n", + "1697 : 18\n", + "1698 : 18\n", + "1699 : 18\n", + "1700 : 18\n", + "1701 : 18\n", + "1702 : 18\n", + "1703 : 18\n", + "1704 : 18\n", + "1705 : 18\n", + "1706 : 18\n", + "1707 : 18\n", + "1708 : 18\n", + "1709 : 18\n", + "1710 : 18\n", + "1711 : 18\n", + "1712 : 18\n", + "1713 : 18\n", + "1714 : 18\n", + "1715 : 18\n", + "1716 : 18\n", + "1717 : 18\n", + "1718 : 18\n", + "1719 : 18\n", + "1720 : 18\n", + "1721 : 18\n", + "1722 : 18\n", + "1723 : 18\n", + "1724 : 18\n", + "1725 : 18\n", + "1726 : 18\n", + "1727 : 18\n", + "1728 : 18\n", + "1729 : 18\n", + "1730 : 18\n", + "1731 : 18\n", + "1732 : 18\n", + "1733 : 18\n", + "1734 : 18\n", + "1735 : 18\n", + "1736 : 18\n", + "1737 : 18\n", + "1738 : 18\n", + "1739 : 18\n", + "1740 : 18\n", + "1741 : 18\n", + "1742 : 18\n", + "1743 : 18\n", + "1744 : 18\n", + "1745 : 18\n", + "1746 : 18\n", + "1747 : 18\n", + "1748 : 18\n", + "1749 : 18\n", + "1750 : 18\n", + "1751 : 18\n", + "1752 : 18\n", + "1753 : 18\n", + "1754 : 18\n", + "1755 : 18\n", + "1756 : 18\n", + "1757 : 18\n", + "1758 : 18\n", + "1759 : 18\n", + "1760 : 18\n", + "1761 : 18\n", + "1762 : 18\n", + "1763 : 18\n", + "1764 : 18\n", + "1765 : 18\n", + "1766 : 18\n", + "1767 : 18\n", + "1768 : 18\n", + "1769 : 18\n", + "1770 : 18\n", + "1771 : 18\n", + "1772 : 18\n", + "1773 : 18\n", + "1774 : 18\n", + "1775 : 18\n", + "1776 : 18\n", + "1777 : 18\n", + "1778 : 18\n", + "1779 : 18\n", + "1780 : 18\n", + "1781 : 18\n", + "1782 : 18\n", + "1783 : 18\n", + "1784 : 18\n", + "1785 : 18\n", + "1786 : 18\n", + "1787 : 18\n", + "1788 : 18\n", + "1789 : 18\n", + "1790 : 18\n", + "1791 : 18\n", + "1792 : 18\n", + "1793 : 18\n", + "1794 : 18\n", + "1795 : 18\n", + "1796 : 18\n", + "1797 : 18\n", + "1798 : 18\n", + "1799 : 18\n", + "1800 : 18\n", + "1801 : 18\n", + "1802 : 18\n", + "1803 : 18\n", + "1804 : 18\n", + "1805 : 18\n", + "1806 : 18\n", + "1807 : 18\n", + "1808 : 18\n", + "1809 : 18\n", + "1810 : 18\n", + "1811 : 18\n", + "1812 : 18\n", + "1813 : 18\n", + "1814 : 18\n", + "1815 : 18\n", + "1816 : 18\n", + "1817 : 18\n", + "1818 : 18\n", + "1819 : 18\n", + "1820 : 18\n", + "1821 : 18\n", + "1822 : 18\n", + "1823 : 18\n", + "1824 : 17\n", + "1825 : 18\n", + "1826 : 18\n", + "1827 : 18\n", + "1828 : 18\n", + "1829 : 18\n", + "1830 : 18\n", + "1831 : 18\n", + "1832 : 18\n", + "1833 : 18\n", + "1834 : 18\n", + "1835 : 18\n", + "1836 : 18\n", + "1837 : 18\n", + "1838 : 18\n", + "1839 : 18\n", + "1840 : 18\n", + "1841 : 18\n", + "1842 : 18\n", + "1843 : 18\n", + "1844 : 18\n", + "1845 : 18\n", + "1846 : 18\n", + "1847 : 18\n", + "1848 : 18\n", + "1849 : 18\n", + "1850 : 18\n", + "1851 : 18\n", + "1852 : 18\n", + "1853 : 18\n", + "1854 : 18\n", + "1855 : 18\n", + "1856 : 18\n", + "1857 : 18\n", + "1858 : 18\n", + "1859 : 18\n", + "1860 : 18\n", + "1861 : 18\n", + "1862 : 18\n", + "1863 : 18\n", + "1864 : 18\n", + "1865 : 18\n", + "1866 : 18\n", + "1867 : 18\n", + "1868 : 18\n", + "1869 : 18\n", + "1870 : 18\n", + "1871 : 18\n", + "1872 : 18\n", + "1873 : 18\n", + "1874 : 18\n", + "1875 : 18\n", + "1876 : 18\n", + "1877 : 18\n", + "1878 : 18\n", + "1879 : 18\n", + "1880 : 18\n", + "1881 : 18\n", + "1882 : 18\n", + "1883 : 18\n", + "1884 : 18\n", + "1885 : 18\n", + "1886 : 18\n", + "1887 : 18\n", + "1888 : 18\n", + "1889 : 18\n", + "1890 : 18\n", + "1891 : 18\n", + "1892 : 18\n", + "1893 : 18\n", + "1894 : 18\n", + "1895 : 18\n", + "1896 : 18\n", + "1897 : 18\n", + "1898 : 18\n", + "1899 : 18\n", + "1900 : 18\n", + "1901 : 17\n", + "1902 : 18\n", + "1903 : 18\n", + "1904 : 18\n", + "1905 : 18\n", + "1906 : 18\n", + "1907 : 18\n", + "1908 : 18\n", + "1909 : 18\n", + "1910 : 18\n", + "1911 : 18\n", + "1912 : 18\n", + "1913 : 18\n", + "1914 : 18\n", + "1915 : 18\n", + "1916 : 18\n", + "1917 : 18\n", + "1918 : 18\n", + "1919 : 18\n", + "1920 : 18\n", + "1921 : 18\n", + "1922 : 18\n", + "1923 : 18\n", + "1924 : 18\n", + "1925 : 18\n", + "1926 : 18\n", + "1927 : 18\n", + "1928 : 18\n", + "1929 : 18\n", + "1930 : 18\n", + "1931 : 18\n", + "1932 : 18\n", + "1933 : 18\n", + "1934 : 18\n", + "1935 : 18\n", + "1936 : 18\n", + "1937 : 18\n", + "1938 : 18\n", + "1939 : 18\n", + "1940 : 17\n", + "1941 : 18\n", + "1942 : 18\n", + "1943 : 18\n", + "1944 : 18\n", + "1945 : 18\n", + "1946 : 18\n", + "1947 : 18\n", + "1948 : 18\n", + "1949 : 18\n", + "1950 : 18\n", + "1951 : 18\n", + "1952 : 18\n", + "1953 : 18\n", + "1954 : 18\n", + "1955 : 18\n", + "1956 : 18\n", + "1957 : 18\n", + "1958 : 18\n", + "1959 : 18\n", + "1960 : 18\n", + "1961 : 18\n", + "1962 : 18\n", + "1963 : 18\n", + "1964 : 18\n", + "1965 : 18\n", + "1966 : 18\n", + "1967 : 18\n", + "1968 : 18\n", + "1969 : 18\n", + "1970 : 18\n", + "1971 : 18\n", + "1972 : 18\n", + "1973 : 18\n", + "1974 : 18\n", + "1975 : 18\n", + "1976 : 18\n", + "1977 : 18\n", + "1978 : 18\n", + "1979 : 18\n", + "1980 : 18\n", + "1981 : 18\n", + "1982 : 18\n", + "1983 : 18\n", + "1984 : 18\n", + "1985 : 18\n", + "1986 : 18\n", + "1987 : 18\n", + "1988 : 18\n", + "1989 : 18\n", + "1990 : 18\n", + "1991 : 18\n", + "1992 : 18\n", + "1993 : 18\n", + "1994 : 18\n", + "1995 : 18\n", + "1996 : 18\n", + "1997 : 18\n", + "1998 : 18\n", + "1999 : 18\n", + "2000 : 17\n", + "2001 : 18\n", + "2002 : 18\n", + "2003 : 18\n", + "2004 : 18\n", + "2005 : 18\n", + "2006 : 18\n", + "2007 : 18\n", + "2008 : 18\n", + "2009 : 18\n", + "2010 : 18\n", + "2011 : 18\n", + "2012 : 18\n", + "2013 : 18\n", + "2014 : 18\n", + "2015 : 18\n", + "2016 : 18\n", + "2017 : 18\n", + "2018 : 18\n", + "2019 : 18\n", + "2020 : 18\n", + "2021 : 18\n", + "2022 : 18\n", + "2023 : 18\n", + "2024 : 18\n", + "2025 : 18\n", + "2026 : 18\n", + "2027 : 17\n", + "2028 : 18\n", + "2029 : 18\n", + "2030 : 18\n", + "2031 : 18\n", + "2032 : 18\n", + "2033 : 18\n", + "2034 : 18\n", + "2035 : 18\n", + "2036 : 18\n", + "2037 : 18\n", + "2038 : 18\n", + "2039 : 18\n", + "2040 : 18\n", + "2041 : 18\n", + "2042 : 18\n", + "2043 : 18\n", + "2044 : 18\n", + "2045 : 18\n", + "2046 : 18\n", + "2047 : 18\n", + "2048 : 18\n", + "2049 : 18\n", + "2050 : 18\n", + "2051 : 18\n", + "2052 : 18\n", + "2053 : 18\n", + "2054 : 18\n", + "2055 : 18\n", + "2056 : 18\n", + "2057 : 18\n", + "2058 : 18\n", + "2059 : 18\n", + "2060 : 18\n", + "2061 : 18\n", + "2062 : 18\n", + "2063 : 18\n", + "2064 : 18\n", + "2065 : 18\n", + "2066 : 18\n", + "2067 : 18\n", + "2068 : 18\n", + "2069 : 18\n", + "2070 : 18\n", + "2071 : 18\n", + "2072 : 18\n", + "2073 : 18\n", + "2074 : 18\n", + "2075 : 18\n", + "2076 : 18\n", + "2077 : 18\n", + "2078 : 18\n", + "2079 : 18\n", + "2080 : 18\n", + "2081 : 18\n", + "2082 : 18\n", + "2083 : 18\n", + "2084 : 17\n", + "2085 : 18\n", + "2086 : 18\n", + "2087 : 18\n", + "2088 : 18\n", + "2089 : 18\n", + "2090 : 18\n", + "2091 : 18\n", + "2092 : 18\n", + "2093 : 18\n", + "2094 : 18\n", + "2095 : 18\n", + "2096 : 18\n", + "2097 : 18\n", + "2098 : 18\n", + "2099 : 18\n", + "2100 : 18\n", + "2101 : 18\n", + "2102 : 18\n", + "2103 : 18\n", + "2104 : 18\n", + "2105 : 18\n", + "2106 : 18\n", + "2107 : 18\n", + "2108 : 18\n", + "2109 : 18\n", + "2110 : 18\n", + "2111 : 18\n", + "2112 : 18\n", + "2113 : 18\n", + "2114 : 18\n", + "2115 : 18\n", + "2116 : 18\n", + "2117 : 18\n", + "2118 : 18\n", + "2119 : 18\n", + "2120 : 18\n", + "2121 : 18\n", + "2122 : 18\n", + "2123 : 18\n", + "2124 : 18\n", + "2125 : 18\n", + "2126 : 18\n", + "2127 : 18\n", + "2128 : 18\n", + "2129 : 18\n", + "2130 : 18\n", + "2131 : 18\n", + "2132 : 18\n", + "2133 : 18\n", + "2134 : 18\n", + "2135 : 18\n", + "2136 : 17\n", + "2137 : 18\n", + "2138 : 18\n", + "2139 : 18\n", + "2140 : 18\n", + "2141 : 18\n", + "2142 : 18\n", + "2143 : 18\n", + "2144 : 18\n", + "2145 : 18\n", + "2146 : 18\n", + "2147 : 18\n", + "2148 : 18\n", + "2149 : 18\n", + "2150 : 18\n", + "2151 : 18\n", + "2152 : 18\n", + "2153 : 18\n", + "2154 : 18\n", + "2155 : 18\n", + "2156 : 18\n", + "2157 : 18\n", + "2158 : 18\n", + "2159 : 18\n", + "2160 : 18\n", + "2161 : 18\n", + "2162 : 18\n", + "2163 : 18\n", + "2164 : 18\n", + "2165 : 18\n", + "2166 : 18\n", + "2167 : 18\n", + "2168 : 18\n", + "2169 : 18\n", + "2170 : 18\n", + "2171 : 18\n", + "2172 : 18\n", + "2173 : 18\n", + "2174 : 18\n", + "2175 : 18\n", + "2176 : 18\n", + "2177 : 18\n", + "2178 : 18\n", + "2179 : 18\n", + "2180 : 18\n", + "2181 : 18\n", + "2182 : 18\n", + "2183 : 18\n", + "2184 : 18\n", + "2185 : 18\n", + "2186 : 18\n", + "2187 : 18\n", + "2188 : 18\n", + "2189 : 18\n", + "2190 : 18\n", + "2191 : 18\n", + "2192 : 18\n", + "2193 : 18\n", + "2194 : 18\n", + "2195 : 18\n", + "2196 : 18\n", + "2197 : 18\n", + "2198 : 18\n", + "2199 : 18\n", + "2200 : 18\n", + "2201 : 18\n", + "2202 : 17\n", + "2203 : 18\n", + "2204 : 18\n", + "2205 : 18\n", + "2206 : 18\n", + "2207 : 18\n", + "2208 : 18\n", + "2209 : 18\n", + "2210 : 18\n", + "2211 : 18\n", + "2212 : 18\n", + "2213 : 18\n", + "2214 : 18\n", + "2215 : 18\n", + "2216 : 18\n", + "2217 : 18\n", + "2218 : 18\n", + "2219 : 18\n", + "2220 : 18\n", + "2221 : 18\n", + "2222 : 18\n", + "2223 : 18\n", + "2224 : 18\n", + "2225 : 18\n", + "2226 : 18\n", + "2227 : 18\n", + "2228 : 18\n", + "2229 : 18\n", + "2230 : 18\n", + "2231 : 18\n", + "2232 : 18\n", + "2233 : 18\n", + "2234 : 18\n", + "2235 : 18\n", + "2236 : 18\n", + "2237 : 18\n", + "2238 : 18\n", + "2239 : 18\n", + "2240 : 18\n", + "2241 : 18\n", + "2242 : 18\n", + "2243 : 18\n", + "2244 : 18\n", + "2245 : 18\n", + "2246 : 18\n", + "2247 : 18\n", + "2248 : 18\n", + "2249 : 18\n", + "2250 : 18\n", + "2251 : 18\n", + "2252 : 18\n", + "2253 : 18\n", + "2254 : 18\n", + "2255 : 18\n", + "2256 : 18\n", + "2257 : 18\n", + "2258 : 18\n", + "2259 : 18\n", + "2260 : 18\n", + "2261 : 18\n", + "2262 : 18\n", + "2263 : 18\n", + "2264 : 18\n", + "2265 : 18\n", + "2266 : 18\n", + "2267 : 18\n", + "2268 : 18\n", + "2269 : 18\n", + "2270 : 18\n", + "2271 : 18\n", + "2272 : 18\n", + "2273 : 18\n", + "2274 : 18\n", + "2275 : 18\n", + "2276 : 18\n", + "2277 : 18\n", + "2278 : 18\n", + "2279 : 18\n", + "2280 : 18\n", + "2281 : 18\n", + "2282 : 18\n", + "2283 : 18\n", + "2284 : 18\n", + "2285 : 18\n", + "2286 : 18\n", + "2287 : 18\n", + "2288 : 18\n", + "2289 : 18\n", + "2290 : 18\n", + "2291 : 18\n", + "2292 : 18\n", + "2293 : 18\n", + "2294 : 18\n", + "2295 : 18\n", + "2296 : 18\n", + "2297 : 18\n", + "2298 : 18\n", + "2299 : 18\n", + "2300 : 18\n", + "2301 : 18\n", + "2302 : 17\n", + "2303 : 18\n", + "2304 : 18\n", + "2305 : 18\n", + "2306 : 18\n", + "2307 : 18\n", + "2308 : 18\n", + "2309 : 18\n", + "2310 : 18\n", + "2311 : 18\n", + "2312 : 18\n", + "2313 : 18\n", + "2314 : 18\n", + "2315 : 18\n", + "2316 : 18\n", + "2317 : 18\n", + "2318 : 18\n", + "2319 : 18\n", + "2320 : 18\n", + "2321 : 18\n", + "2322 : 18\n", + "2323 : 18\n", + "2324 : 18\n", + "2325 : 18\n", + "2326 : 18\n", + "2327 : 18\n", + "2328 : 18\n", + "2329 : 18\n", + "2330 : 18\n", + "2331 : 18\n", + "2332 : 18\n", + "2333 : 18\n", + "2334 : 18\n", + "2335 : 18\n", + "2336 : 18\n", + "2337 : 18\n", + "2338 : 18\n", + "2339 : 18\n", + "2340 : 18\n", + "2341 : 18\n", + "2342 : 18\n", + "2343 : 18\n", + "2344 : 18\n", + "2345 : 18\n", + "2346 : 18\n", + "2347 : 18\n", + "2348 : 18\n", + "2349 : 18\n", + "2350 : 18\n", + "2351 : 18\n", + "2352 : 18\n", + "2353 : 18\n", + "2354 : 18\n", + "2355 : 18\n", + "2356 : 18\n", + "2357 : 18\n", + "2358 : 18\n", + "2359 : 18\n", + "2360 : 18\n", + "2361 : 18\n", + "2362 : 18\n", + "2363 : 18\n", + "2364 : 18\n", + "2365 : 18\n", + "2366 : 18\n", + "2367 : 18\n", + "2368 : 18\n", + "2369 : 18\n", + "2370 : 18\n", + "2371 : 18\n", + "2372 : 18\n", + "2373 : 18\n", + "2374 : 18\n", + "2375 : 18\n", + "2376 : 18\n", + "2377 : 18\n", + "2378 : 18\n", + "2379 : 18\n", + "2380 : 18\n", + "2381 : 18\n", + "2382 : 18\n", + "2383 : 18\n", + "2384 : 18\n", + "2385 : 18\n", + "2386 : 18\n", + "2387 : 18\n", + "2388 : 18\n", + "2389 : 18\n", + "2390 : 18\n", + "2391 : 18\n", + "2392 : 18\n", + "2393 : 18\n", + "2394 : 18\n", + "2395 : 18\n", + "2396 : 18\n", + "2397 : 18\n", + "2398 : 18\n", + "2399 : 18\n", + "2400 : 18\n", + "2401 : 18\n", + "2402 : 18\n", + "2403 : 18\n", + "2404 : 18\n", + "2405 : 18\n", + "2406 : 18\n", + "2407 : 18\n", + "2408 : 18\n", + "2409 : 18\n", + "2410 : 18\n", + "2411 : 18\n", + "2412 : 18\n", + "2413 : 18\n", + "2414 : 18\n", + "2415 : 18\n", + "2416 : 18\n", + "2417 : 18\n", + "2418 : 18\n", + "2419 : 18\n", + "2420 : 18\n", + "2421 : 18\n", + "2422 : 18\n", + "2423 : 18\n", + "2424 : 18\n", + "2425 : 18\n", + "2426 : 18\n", + "2427 : 18\n", + "2428 : 18\n", + "2429 : 18\n", + "2430 : 18\n", + "2431 : 18\n", + "2432 : 18\n", + "2433 : 18\n", + "2434 : 18\n", + "2435 : 18\n", + "2436 : 18\n", + "2437 : 18\n", + "2438 : 18\n", + "2439 : 18\n", + "2440 : 18\n", + "2441 : 18\n", + "2442 : 18\n", + "2443 : 18\n", + "2444 : 18\n", + "2445 : 18\n", + "2446 : 18\n", + "2447 : 18\n", + "2448 : 18\n", + "2449 : 18\n", + "2450 : 18\n", + "2451 : 18\n", + "2452 : 18\n", + "2453 : 18\n", + "2454 : 18\n", + "2455 : 18\n", + "2456 : 18\n", + "2457 : 18\n", + "2458 : 18\n", + "2459 : 18\n", + "2460 : 18\n", + "2461 : 18\n", + "2462 : 18\n", + "2463 : 18\n", + "2464 : 18\n", + "2465 : 18\n", + "2466 : 18\n", + "2467 : 18\n", + "2468 : 18\n", + "2469 : 18\n", + "2470 : 18\n", + "2471 : 18\n", + "2472 : 18\n", + "2473 : 18\n", + "2474 : 18\n", + "2475 : 18\n", + "2476 : 17\n", + "2477 : 18\n", + "2478 : 18\n", + "2479 : 18\n", + "2480 : 18\n", + "2481 : 18\n", + "2482 : 18\n", + "2483 : 18\n", + "2484 : 18\n", + "2485 : 18\n", + "2486 : 18\n", + "2487 : 18\n", + "2488 : 18\n", + "2489 : 18\n", + "2490 : 18\n", + "2491 : 18\n", + "2492 : 18\n", + "2493 : 18\n", + "2494 : 18\n", + "2495 : 18\n", + "2496 : 18\n", + "2497 : 18\n", + "2498 : 18\n", + "2499 : 18\n", + "2500 : 18\n", + "2501 : 18\n", + "2502 : 18\n", + "2503 : 18\n", + "2504 : 18\n", + "2505 : 18\n", + "2506 : 18\n", + "2507 : 18\n", + "2508 : 18\n", + "2509 : 18\n", + "2510 : 18\n", + "2511 : 18\n", + "2512 : 18\n", + "2513 : 18\n", + "2514 : 18\n", + "2515 : 18\n", + "2516 : 18\n", + "2517 : 18\n", + "2518 : 18\n", + "2519 : 18\n", + "2520 : 18\n", + "2521 : 18\n", + "2522 : 18\n", + "2523 : 18\n", + "2524 : 18\n", + "2525 : 18\n", + "2526 : 18\n", + "2527 : 18\n", + "2528 : 18\n", + "2529 : 18\n", + "2530 : 18\n", + "2531 : 18\n", + "2532 : 18\n", + "2533 : 18\n", + "2534 : 18\n", + "2535 : 18\n", + "2536 : 18\n", + "2537 : 18\n", + "2538 : 18\n", + "2539 : 17\n", + "2540 : 18\n", + "2541 : 18\n", + "2542 : 18\n", + "2543 : 18\n", + "2544 : 18\n", + "2545 : 18\n", + "2546 : 18\n", + "2547 : 18\n", + "2548 : 18\n", + "2549 : 18\n", + "2550 : 18\n", + "2551 : 18\n", + "2552 : 18\n", + "2553 : 18\n", + "2554 : 18\n", + "2555 : 18\n", + "2556 : 18\n", + "2557 : 18\n", + "2558 : 18\n", + "2559 : 18\n", + "2560 : 18\n", + "2561 : 18\n", + "2562 : 18\n", + "2563 : 18\n", + "2564 : 18\n", + "2565 : 18\n", + "2566 : 18\n", + "2567 : 18\n", + "2568 : 18\n", + "2569 : 18\n", + "2570 : 18\n", + "2571 : 18\n", + "2572 : 18\n", + "2573 : 18\n", + "2574 : 18\n", + "2575 : 18\n", + "2576 : 18\n", + "2577 : 18\n", + "2578 : 18\n", + "2579 : 18\n", + "2580 : 18\n", + "2581 : 18\n", + "2582 : 18\n", + "2583 : 18\n", + "2584 : 18\n", + "2585 : 18\n", + "2586 : 18\n", + "2587 : 18\n", + "Saving the newcsv to ../1-PreProcessing/processed/Indigenous_Business_Directory.csv ...\n", + "Saved newcsv to ../1-PreProcessing/processed/Indigenous_Business_Directory.csv\n" + ] + } + ], + "source": [ + "# Fix the cells with commas in them in the Indigenous_Business_Directory.csv file\n", + "\n", + "import csv\n", + "\n", + "# Define csv file path\n", + "in_file = '../1-PreProcessing/raw/Indigenous_Business_Directory.csv'\n", + "out_file = '../1-PreProcessing/processed/Indigenous_Business_Directory.csv'\n", + "\n", + "# Initialize a list that will be our new corrected csv\n", + "newcsv = []\n", + "\n", + "# Open a read only copy of the csv file\n", + "with open(in_file, mode = 'r', newline='', encoding='utf8') as csvfile:\n", + " csvreader = csv.reader(csvfile)\n", + "\n", + " # For each row in the csv...\n", + " i = 0\n", + " for row in csvreader:\n", + "\n", + " # For each cell in each row...\n", + " j = 0\n", + " for val in row:\n", + "\n", + " # If the known anomoly is found...\n", + " if '$25' in val:\n", + "\n", + " # Then perform the fixing operation\n", + " newval = ','.join(row[j:j+3]) # Concat the 3 cells that make up the sentence\n", + " del row[j:j+3] # Delete the 3 cells from the list\n", + " row.insert(j, newval) # Insert the concat'd value back into the list\n", + " j += 1\n", + "\n", + " # Append the row to the newcsv file\n", + " newcsv.append(row)\n", + "\n", + " # Delete the unnecessary 19th column\n", + " row_len = len(row)\n", + " if row_len == 19:\n", + "\n", + " # Give a warning message if non-empty values are deleted\n", + " if row[-1] != '':\n", + " print('WARNING, DELETED VALUE:', row[-1])\n", + "\n", + " # Delete extra column\n", + " del row[-1]\n", + "\n", + " # Add extra commas if they're missing\n", + " row_len = len(row)\n", + " print(i,':', row_len)\n", + " while(len(row) < 18):\n", + " row.append('')\n", + "\n", + " i += 1\n", + "\n", + "# Delete the first row\n", + "del newcsv[0]\n", + "\n", + "# Delete that one empty row after the header row\n", + "del newcsv[1]\n", + "\n", + "# Save newcsv to a .csv file\n", + "with open(out_file, mode = 'w', newline='', encoding='utf-8') as f:\n", + " writer = csv.writer(f)\n", + " print(f'Saving the newcsv to {out_file} ...')\n", + " writer.writerows(newcsv)\n", + "print(f'Saved newcsv to {out_file}')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Updated /home/jovyan/ODBiz/1-PreProcessing/processed/AB_Banff_Business_Licences.csv\n" + ] + } + ], + "source": [ + "# Standardize the dates of the csvs with non-empty date_established fields using standardize_dates.py\n", + "import standardize_dates\n", + "standardize_dates.main()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "execution": { + "iopub.execute_input": "2022-06-22T19:58:11.891235Z", + "iopub.status.busy": "2022-06-22T19:58:11.890957Z", + "iopub.status.idle": "2022-06-22T19:58:13.634760Z", + "shell.execute_reply": "2022-06-22T19:58:13.634011Z", + "shell.execute_reply.started": "2022-06-22T19:58:11.891205Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Directory successfully copied!\n" + ] + } + ], + "source": [ + "# transfer files directly from PreProcessing/processed to opentabulate/data/input\n", + "src = '../1-PreProcessing/processed'\n", + "dst = '../2-OpenTabulate/data/input'\n", + "\n", + "if os.path.exists(dst):\n", + " shutil.rmtree(dst)\n", + " shutil.copytree(src, dst)\n", + "print('Directory successfully copied!')" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-13T16:23:26.970934Z", + "iopub.status.busy": "2022-04-13T16:23:26.970602Z", + "iopub.status.idle": "2022-04-13T16:23:26.978405Z", + "shell.execute_reply": "2022-04-13T16:23:26.977479Z", + "shell.execute_reply.started": "2022-04-13T16:23:26.970904Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "63\n", + "61\n", + "61\n", + "0\n" + ] + } + ], + "source": [ + "# List the number of files(/folders?) in each directory listed below\n", + "raw = '../1-PreProcessing/raw'\n", + "pro = '../1-PreProcessing/processed'\n", + "input_ = '../2-OpenTabulate/data/input'\n", + "output_ = '../2-OpenTabulate/data/output'\n", + "print(len(os.listdir(raw)))\n", + "print(len(os.listdir(pro)))\n", + "print(len(os.listdir(input_)))\n", + "print(len(os.listdir(output_)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:root] *", + "language": "python", + "name": "conda-root-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + }, + "metadata": { + "interpreter": { + "hash": "3f6acfd5c7a89dd4516208ed2cd5283b5177bf58d22f895010c388a779688e5d" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/scripts/Businesses/PreProcessing/process_shp_files.py b/scripts/Businesses/1-PreProcessing/process_shp_files.py similarity index 63% rename from scripts/Businesses/PreProcessing/process_shp_files.py rename to scripts/Businesses/1-PreProcessing/process_shp_files.py index 028213ee..0daa9327 100644 --- a/scripts/Businesses/PreProcessing/process_shp_files.py +++ b/scripts/Businesses/1-PreProcessing/process_shp_files.py @@ -1,3 +1,12 @@ +''' +process_shp_files.py + +Converts .shp files into .csv files. +All shape file variable names are truncated to 10 characters. +This script uses supplementary .csv files that come along with the .shp files +in order to correct all variable names. +''' + import os import geopandas as gpd import pandas as pd @@ -30,12 +39,16 @@ def fix_variable_names(gdf: gpd.GeoDataFrame, root: str, name: str) -> gpd.GeoDa A GeoDataFrame with the corrected column names ''' + # Was for testing, forgot to remove, probably not necessary if root == '/home/jovyan/ODBiz/1-PreProcessing/raw/shapefiles/BC_Squamish_shapefile': print('') # Load in the column names df = pd.read_csv(f'{root}/{name}.csv') df_cols = df.columns + + # Drop the columns ['X','Y'] if present as these often shift + # over the order of the columns try: df_cols = df_cols.drop(['X','Y']) except: @@ -67,8 +80,12 @@ def fix_variable_names(gdf: gpd.GeoDataFrame, root: str, name: str) -> gpd.GeoDa df_cols = df_cols.drop(i) break - shared_chars = shared_prefix(i,j) # If the mapping makes sense, then add it to the rename_dict + # Checks if the shp variable name is a substring of the csv variable name + # Or if the two strings are equal (yes, I could've coded this condition more concisely...) + # Or if it looks like the last two chars of the shp variable name were placed there to + # indicate a duplicate 10 char substring and the first 8 chars are a substring of the csv variable name + shared_chars = shared_prefix(i,j) if shared_chars == 10 or (shared_chars == len(i) and shared_chars == len(j)) or (shared_chars >= 8 and j[8] == '_'): rename_dict[j] = i df_cols = df_cols.drop(i) @@ -80,7 +97,7 @@ def fix_variable_names(gdf: gpd.GeoDataFrame, root: str, name: str) -> gpd.GeoDa max_col_len_pd = max(list(map(len, rename_dict.values()))) spacing = (max_col_len_gpd-3) * ' ' spacing2 = (max_col_len_pd-2) * ' ' - header = f'gpd{spacing} -> pd{spacing2} | shared_chars' + header = f'shp{spacing} -> csv{spacing2} | shared_chars' print(header) print('-' * len(header)) for k,v in rename_dict.items(): @@ -97,17 +114,30 @@ def fix_variable_names(gdf: gpd.GeoDataFrame, root: str, name: str) -> gpd.GeoDa print(i) print('') # Newline to make the table look better + # Perform the variable name mapping gdf = gdf.rename(rename_dict, axis = 1) + # Convert NAICS column values to integers + if 'NAICS' in gdf.columns: + gdf['NAICS'] = gdf['NAICS'].astype('Int64') + return gdf def port_moody_shp(): - # For processing the BC Port Moody Shapefile + ''' + For processing the BC Port Moody Shapefile, copied directly from + preprocessing.ipynb with modifications to ensure the variable + names are fixed + ''' + + # Define name and filepath name = "BC_Port_Moody_Business_Directory" fp = f"{raw_shp_dir}/BC_Port_Moody_shapefile/Business_Directory.shp" + # Read in the .shp file as a geopandas dataframe city = gpd.read_file(fp) + # Convert the projection to lat/lon print(name) print(city.crs) city = city.to_crs(epsg=4326) @@ -115,22 +145,35 @@ def port_moody_shp(): # sub_city = city.head(500) + # Extract the lat/lon coordinates. + # This is the part that appears to be different from every other .shp file city['lon'] = city.centroid.x city['lat'] = city.centroid.y + # Fix the truncated variable names city = fix_variable_names(city, f"{raw_shp_dir}/BC_Port_Moody_shapefile", name) + # Write the dataframe to a csv file city.to_csv(f"{out_dir}/raw/BC_Port_Moody_Business_Directory.csv", index = False) + print(f"File saved to {out_dir}/raw/BC_Port_Moody_Business_Directory.csv") city.to_csv(f"{out_dir}/processed/BC_Port_Moody_Business_Directory.csv", index = False) + print(f"File saved to {out_dir}/processed/BC_Port_Moody_Business_Directory.csv") def main(): - # Redesign this function so that it'll apply 'fix_variable_names()' to Port Moody too! - # All shapefiles (except Port Moody) + # Iterate through the ../raw/shapefiles folder for root, dirs, files in os.walk(raw_shp_dir): - if 'testing' in root: - continue + # if 'testing' in root: # Ignore the files used for testing + # continue + + # Skip the archive directory + if 'archive' in dirs: + dirs.remove('archive') + + # Iterate through all files in a folder for file in files: + # Only process the .shp file if file.endswith(".shp"): + # Rename the file and extract the root name that is used to identify the file head, tail = os.path.split(os.path.join(root, file)) head = head.replace("/home/jovyan/ODBiz/1-PreProcessing/raw/shapefiles/", '') head = head.replace('shapefile', '') @@ -139,12 +182,26 @@ def main(): name = head + tail print(name) + # Read in the .shp file as a geopandas dataframe fp = (os.path.join(root, file)) city = gpd.read_file(fp) print(city.crs) - city = city.to_crs(epsg=4326) + + # Convert the projection to lat/lon. + if 'burnaby' in name.lower(): + # This if/else statement was just for testing, + # but I forgot to take it out + # It's probably not needed + city = city.to_crs(epsg=4326) + print('') + else: + # This is needed though + city = city.to_crs(epsg=4326) print(city.crs) # sub_city = city.head(500) + + # Try to convert the extract lat/lon coordinates, + # otherwise raise an error try: city['lon'] = city.geometry.x city['lat'] = city.geometry.y @@ -152,10 +209,16 @@ def main(): print('error with file above') continue + # Fix the truncated variable names city = fix_variable_names(city, root, name) + # Write the dataframe to a csv file city.to_csv(f"{out_dir}/raw/{name}.csv", index = False) + print(f"File saved to {out_dir}/raw/{name}.csv") city.to_csv(f"{out_dir}/processed/{name}.csv", index = False) + print(f"File saved to {out_dir}/processed/{name}.csv") + + # Execute the script that fixes Port Moody's data port_moody_shp() if __name__ == '__main__': diff --git a/scripts/Businesses/1-PreProcessing/process_vancouver.py b/scripts/Businesses/1-PreProcessing/process_vancouver.py new file mode 100644 index 00000000..49726399 --- /dev/null +++ b/scripts/Businesses/1-PreProcessing/process_vancouver.py @@ -0,0 +1,131 @@ +''' +process_vancouver.py + +The BC_Vancouver_Business_Licences.csv dataset had an intense cleaning process. +Modifications made to the Vancouver dataset include: +1. Filtering out all non-Canadian business (determined by location of HQ) +2. Extracting lat/lon coordinates from JSON str format +3. Removes duplicates, keeps the most recent entry +# (This step is no longer performed) 3. Creating a new column to more accurately record the business names of each business. +''' + +import numpy as np +import pandas as pd +from tqdm import tqdm +from datetime import datetime as dt + +def strip_point(x: str) -> list: + ''' + Converts a JSON formatted geomarker into a (lon, lat) list. + + Arguments: + - x (str): A JSON string containing the lat/lon coordinates of the business + + Returns: + - A list of 2 strings [lon, lat] + ''' + try: + t = x.strip(r'{""coordinates"": [') + t = t.rstrip('], ""type"": ""Point""}') + t = t.replace(',', '') + return t.split() + except: + return np.nan + +def main(): + # Define file path names + inputFileName = '/home/jovyan/ODBiz/1-PreProcessing/raw/BC_Vancouver_Business_Licences.csv' + outputFileName = '/home/jovyan/ODBiz/1-PreProcessing/processed/BC_Vancouver_Business_Licences.csv' + + rm_provs_file_name = '/home/jovyan/ODBiz/1-PreProcessing/double_check/filter_non_CAD_provs_comparison.csv' + + # # Load in variablemap to help with column names + # var_map = pd.read_csv('/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv') + # var_map = var_map.set_index('localfile') + # street_no = var_map.loc['BC_Vancouver_Business_Licences.csv', 'street_no'] + + # Load in the csv + total_lines = 636855 + chunksize = 1000 + # types_dict = {street_no: str} # Read in street numbers as strs since some of them are formatted weirdly + df = pd.concat([chunk for chunk in tqdm(pd.read_csv(inputFileName, chunksize=chunksize, dtype = str, keep_default_na = False), desc='Loading data', total=total_lines//chunksize+1)]) + rm_provs_df = pd.DataFrame({'original': df['Province'].value_counts()}) + rm_provs_df.index.name = 'Province Code' + # print('Filling in NA with empty string') + # old_time = dt.now() + # df = df.fillna('') + # new_time = dt.now() + # exetime = new_time - old_time + # print(f'Done in {exetime.seconds} s') + + # Filter out non-Canadian businesses + print('Removing non-Canadian businesses') + old_time = dt.now() + nonCAD_provs = [ 'AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA', + 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', + 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', + 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', + 'UT', 'VA', 'VT', 'WA', 'WI', 'WV', 'WY', + # 'LAKEVIEW ESTATES', + 'TEHRAN', + 'CHESHITE', + 'ARIZONA', + 'US', 'HB', 'SP', 'RJ' + ] + df = df[~(df['Province'].str.upper().isin(nonCAD_provs))] + rm_provs_df['post_filter'] = df['Province'].value_counts() + rm_provs_df['post_filter'] = rm_provs_df['post_filter'].astype('Int64') + rm_provs_df.to_csv(rm_provs_file_name) + print(f'Saved file {rm_provs_file_name}') + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Remove duplicates, keep the most recent entry + print('Removing obvious duplicates') + dup_keys_van = ['BusinessName', 'Province', 'BusinessType', 'Unit', 'House', 'Street', 'City', 'Province', 'PostalCode', 'Country'] + df['bus_idx'] = df[dup_keys_van].agg('_'.join, axis = 1, ) + df = df.sort_values(by = ['bus_idx', 'FOLDERYEAR', 'IssuedDate'], ascending=False) + df = df.drop_duplicates('bus_idx') + old_time = new_time + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # BC vancouver lat/long + LONGS=[] + LATS=[] + for i in tqdm(df["Geom"], desc='Extracting geocoordinates'): + try: + stripped_point = strip_point(i) + LONGS.append(stripped_point[0]) + LATS.append(stripped_point[1]) + except: + LONGS.append(np.nan) + LATS.append(np.nan) + + df["long"]=LONGS + df["lat"]=LATS + + # # Creating a new column to more accurately record the business names of each business + # df['business_name'] = df['BusinessName'] + # df['business_name'] = df['business_name'].fillna('') + # df['BusinessTradeName'] = df['BusinessTradeName'].fillna('') + # row_count = df.shape[0] + # for i, row in tqdm(df.iterrows(), desc='Creating new business_name column', total=row_count): + # business_name = row['business_name'] + # if business_name != '': + # first_char = business_name[0] + # last_char = business_name[-1] + # if first_char == '(' and last_char == ')' and df.loc[i, 'BusinessTradeName'] != '': + # # print(df.loc[i, 'BusinessTradeName']) + # df.loc[i, 'business_name'] = df.loc[i, 'BusinessTradeName'] + # else: + # df.loc[i, 'business_name'] = df.loc[i, 'BusinessTradeName'] + # df['business_name'] = df['BusinessName'] + + df.to_csv(outputFileName) + print(f'File saved to {outputFileName}') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/Businesses/PreProcessing/shapefile_to_csv.ipynb b/scripts/Businesses/1-PreProcessing/shapefile_to_csv.ipynb similarity index 100% rename from scripts/Businesses/PreProcessing/shapefile_to_csv.ipynb rename to scripts/Businesses/1-PreProcessing/shapefile_to_csv.ipynb diff --git a/scripts/Businesses/1-PreProcessing/standardize_dates.py b/scripts/Businesses/1-PreProcessing/standardize_dates.py new file mode 100644 index 00000000..2dd0cf1e --- /dev/null +++ b/scripts/Businesses/1-PreProcessing/standardize_dates.py @@ -0,0 +1,58 @@ +''' +standardize_dates.py + +For all datasets that have a `date_established` or equivalent column +(as determined by variablemap.csv), this script will try to convert the +date format into YYYY-MM-DD if it's not already in that format. If not +enough info is provided (e.g. only the year is provided), then it will +leave the data as-is. +''' + +from datetime import datetime as dt +import pandas as pd + +def standardize_dates(date_series: pd.Series, date_format: str) -> pd.Series: + ''' + Takes in a series of dates, converts them to strs, then into datetime objects, then back to strs + Returns a series of strings of the form 'YYYY-MM-DD' + ''' + + date_series = date_series.map(str) + date_series = date_series.map(lambda x: dt.strptime(x, date_format)) + date_series = date_series.map(lambda x: x.strftime('%Y-%m-%d')) + + return date_series + +def main(): + # Define file paths + ODBizSources_path = '/home/jovyan/ODBiz/1-PreProcessing/ODBizSources.csv' + variablemap_path = '/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv' + raw_folder_path = '/home/jovyan/ODBiz/1-PreProcessing/raw' + processed_folder_path = '/home/jovyan/ODBiz/1-PreProcessing/processed' + + # Load csvs + df_sources = pd.read_csv(ODBizSources_path) + df_varmap = pd.read_csv(variablemap_path) + df_varmap = df_varmap.fillna('') + + # Set indicies + df_sources = df_sources.set_index('localfile') + df_varmap = df_varmap.set_index('localfile') + + # Iterate through the rows of varmap + for i, row in df_varmap.iterrows(): + if row.date_established != '': + date_format = df_sources.date_format[i] + # print(i, F'({row.date_established}) :' , date_format) + + if not(date_format in ['%Y-%m-%d', '%Y']): + # Read in the corresponding csv from raw + city_df = pd.read_csv(f'{raw_folder_path}/{i}', keep_default_na = False) + old_dates = city_df[row.date_established] + new_dates = standardize_dates(old_dates, date_format) + city_df[row.date_established] = new_dates + city_df.to_csv(f'{processed_folder_path}/{i}') + print(f'Updated {processed_folder_path}/{i}') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/Businesses/PreProcessing/test.py b/scripts/Businesses/1-PreProcessing/test.py similarity index 100% rename from scripts/Businesses/PreProcessing/test.py rename to scripts/Businesses/1-PreProcessing/test.py diff --git a/scripts/Businesses/1-PreProcessing/vancouver_dedup_testing.ipynb b/scripts/Businesses/1-PreProcessing/vancouver_dedup_testing.ipynb new file mode 100644 index 00000000..984d0af8 --- /dev/null +++ b/scripts/Businesses/1-PreProcessing/vancouver_dedup_testing.ipynb @@ -0,0 +1,607 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd \n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading data: 100%|██████████| 64/64 [00:05<00:00, 12.28it/s]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0FOLDERYEARLicenceRSNLicenceNumberLicenceRevisionNumberBusinessNameBusinessTradeNameStatusIssuedDateExpiredDateBusinessTypeBusinessSubTypeUnitUnitTypeHouseStreetCityProvinceCountryPostalCodeLocalAreaNumberofEmployeesFeePaidExtractDateGeomlonglatbusiness_name
0013198856713-3251190Beyond Sound Event Productions LtdBeyond SoundIssued2013-03-15T17:56:12-04:002013-12-31Entertainment ServicesDisc Jockey106+107Unit470KINGSWAYVancouverBCCAV5T 3J9Mount Pleasant1.0158.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.093530332101, 49.2576936...-123.09353033210149.2576936787665Beyond Sound Event Productions Ltd
1113198858913-3251380J Robert Thibodeau Architecture + Design IncIssued2013-05-02T13:30:53-04:002013-12-31OfficeArchitect138W 8TH AVVancouverBCCAV5Y 1N2Mount Pleasant7.0147.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.108309208116, 49.2635872...-123.10830920811649.2635872409021J Robert Thibodeau Architecture + Design Inc
2213198860013-3251480(Narinder Gill)Issued2013-03-15T17:52:44-04:002013-12-31Secondary Suite - PermanentVancouverBCCASunset0.097.02019-07-21T16:49:09-04:00(Narinder Gill)
3313198863213-1872111MLF Event Architecture IncIssued2013-03-19T18:17:17-04:002013-12-31OfficeArchitect215Unit1080MAINLAND STVancouverBCCAV6B 2T4Downtown1.022.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.120093418192, 49.2755430...-123.12009341819249.2755430466569MLF Event Architecture Inc
4413198876813-1863721Ocean West Financial Group IncIssued2013-03-26T18:09:00-04:002013-12-31OfficeInsurance Company1507Unit1030W GEORGIA STVancouverBCCAV6E 2Y3West End6.022.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.122008869142, 49.2845352...-123.12200886914249.2845352944803Ocean West Financial Group Inc
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 FOLDERYEAR LicenceRSN LicenceNumber LicenceRevisionNumber \\\n", + "0 0 13 1988567 13-325119 0 \n", + "1 1 13 1988589 13-325138 0 \n", + "2 2 13 1988600 13-325148 0 \n", + "3 3 13 1988632 13-187211 1 \n", + "4 4 13 1988768 13-186372 1 \n", + "\n", + " BusinessName BusinessTradeName Status \\\n", + "0 Beyond Sound Event Productions Ltd Beyond Sound Issued \n", + "1 J Robert Thibodeau Architecture + Design Inc Issued \n", + "2 (Narinder Gill) Issued \n", + "3 MLF Event Architecture Inc Issued \n", + "4 Ocean West Financial Group Inc Issued \n", + "\n", + " IssuedDate ExpiredDate BusinessType \\\n", + "0 2013-03-15T17:56:12-04:00 2013-12-31 Entertainment Services \n", + "1 2013-05-02T13:30:53-04:00 2013-12-31 Office \n", + "2 2013-03-15T17:52:44-04:00 2013-12-31 Secondary Suite - Permanent \n", + "3 2013-03-19T18:17:17-04:00 2013-12-31 Office \n", + "4 2013-03-26T18:09:00-04:00 2013-12-31 Office \n", + "\n", + " BusinessSubType Unit UnitType House Street City \\\n", + "0 Disc Jockey 106+107 Unit 470 KINGSWAY Vancouver \n", + "1 Architect 138 W 8TH AV Vancouver \n", + "2 Vancouver \n", + "3 Architect 215 Unit 1080 MAINLAND ST Vancouver \n", + "4 Insurance Company 1507 Unit 1030 W GEORGIA ST Vancouver \n", + "\n", + " Province Country PostalCode LocalArea NumberofEmployees FeePaid \\\n", + "0 BC CA V5T 3J9 Mount Pleasant 1.0 158.0 \n", + "1 BC CA V5Y 1N2 Mount Pleasant 7.0 147.0 \n", + "2 BC CA Sunset 0.0 97.0 \n", + "3 BC CA V6B 2T4 Downtown 1.0 22.0 \n", + "4 BC CA V6E 2Y3 West End 6.0 22.0 \n", + "\n", + " ExtractDate \\\n", + "0 2019-07-21T16:49:09-04:00 \n", + "1 2019-07-21T16:49:09-04:00 \n", + "2 2019-07-21T16:49:09-04:00 \n", + "3 2019-07-21T16:49:09-04:00 \n", + "4 2019-07-21T16:49:09-04:00 \n", + "\n", + " Geom long \\\n", + "0 {\"coordinates\": [-123.093530332101, 49.2576936... -123.093530332101 \n", + "1 {\"coordinates\": [-123.108309208116, 49.2635872... -123.108309208116 \n", + "2 \n", + "3 {\"coordinates\": [-123.120093418192, 49.2755430... -123.120093418192 \n", + "4 {\"coordinates\": [-123.122008869142, 49.2845352... -123.122008869142 \n", + "\n", + " lat business_name \n", + "0 49.2576936787665 Beyond Sound Event Productions Ltd \n", + "1 49.2635872409021 J Robert Thibodeau Architecture + Design Inc \n", + "2 (Narinder Gill) \n", + "3 49.2755430466569 MLF Event Architecture Inc \n", + "4 49.2845352944803 Ocean West Financial Group Inc " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "# Define file path names\n", + "inputFileName = '/home/jovyan/ODBiz/1-PreProcessing/processed/BC_Vancouver_Business_Licences.csv'\n", + "outputFileName = '/home/jovyan/ODBiz/1-PreProcessing/vancouver_dedup/BC_Vancouver_Business_Licences.csv'\n", + "\n", + "# Load in variablemap to help with column names\n", + "# var_map = pd.read_csv('/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv')\n", + "# var_map = var_map.set_index('localfile')\n", + "# street_no = var_map.loc['BC_Vancouver_Business_Licences.csv', 'street_no']\n", + "\n", + "# Load in the csv\n", + "total_lines = 636855\n", + "chunksize = 10000\n", + "# types_dict = {street_no: str} # Read in street numbers as strs since some of them are formatted weirdly\n", + "types_dict = str\n", + "df = pd.concat([chunk for chunk in tqdm(pd.read_csv(inputFileName, chunksize=chunksize, dtype = types_dict), desc='Loading data', total=total_lines//chunksize+1)])\n", + "df = df.fillna('')\n", + "\n", + "# Display first few rows of df\n", + "pd.options.display.max_columns = None\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dict_values(['BusinessName', 'Province', 'BusinessType', 'Unit', 'House', 'Street', 'City', 'PostalCode', 'Country'])\n" + ] + } + ], + "source": [ + "# Define columns to identify duplicates\n", + "dup_keys = ['business_name',\n", + " 'province',\n", + " 'business_sector',\n", + " 'unit',\n", + " 'street_no',\n", + " 'street_name',\n", + " 'city',\n", + " 'province',\n", + " 'postal_code',\n", + " 'country'\n", + " ]\n", + "\n", + "# Load in variablemap to help with column names\n", + "var_map = pd.read_csv('/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv')\n", + "var_map = var_map.set_index('localfile')\n", + "dup_keys_van = var_map.loc['BC_Vancouver_Business_Licences.csv', dup_keys].to_dict()\n", + "print(dup_keys_van.values())" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 9/9 [00:03<00:00, 2.74it/s]\n" + ] + } + ], + "source": [ + "# Create column concatenating dup_keys columns\n", + "df['bus_idx'] = ''\n", + "# for row in tqdm(df.itertuples(), total = total_lines):\n", + "for v in tqdm(dup_keys_van.values()):\n", + " val = df[v]\n", + " # val = getattr(row, v)\n", + " # if val is not np.nan:\n", + " # i = row.Index\n", + " # print('')\n", + " # print(i)\n", + " # print(val)\n", + " df['bus_idx'] += val\n", + " df['bus_idx'] += '_'\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# Sort by time, most recent first\n", + "df_sorted = df.sort_values(by = ['bus_idx', 'FOLDERYEAR', 'IssuedDate'], ascending=False)\n", + "time_sorted_path = '/home/jovyan/ODBiz/1-PreProcessing/vancouver_dedup/time_sorted.csv'\n", + "df_sorted.to_csv(time_sorted_path, index = False)\n", + "print(f'File saved to {time_sorted_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File saved to /home/jovyan/ODBiz/1-PreProcessing/vancouver_dedup/Vancouver_dedup.csv\n" + ] + } + ], + "source": [ + "# Deduplicate using the keys\n", + "df_dedup = df_sorted.drop_duplicates('bus_idx')\n", + "df_dedup_path = '/home/jovyan/ODBiz/1-PreProcessing/vancouver_dedup/Vancouver_dedup.csv'\n", + "df_dedup.to_csv(df_dedup_path, index = False)\n", + "print(f'File saved to {df_dedup_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(636061, 29)\n", + "(125842, 29)\n" + ] + } + ], + "source": [ + "# Number of entries\n", + "print(df.shape[0])\n", + "print(df_dedup.shape[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(299068, 29)\n", + "(56086, 29)\n" + ] + } + ], + "source": [ + "# Number of blank coordinate entries\n", + "df_blank_coords = df[df['lat'] == '']\n", + "print(df_blank_coords.shape[0])\n", + "\n", + "df_dedup_blank_coords = df_dedup[df_dedup['lat'] == '']\n", + "print(df_dedup_blank_coords.shape[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('T', bus_idx FOLDERYEAR\n", + "!Exotics BySIYTHE Corporation_BC_Design Company_170_422_RICHARDS ST_Vancouver_V6B 2Z4_CA_ 18 1\n", + " 19 1\n", + "#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_ 13 1\n", + " 14 1\n", + " 15 1\n", + " ..\n", + "xMatters Inc_BC_Software_1450_700_W PENDER ST_Vancouver_V6C 1G8_CA_ 19 1\n", + "xMatters Inc_BC_Software_200_510_BURRARD ST_Vancouver_V6C 3A8_CA_ 19 1\n", + " 20 1\n", + " 21 1\n", + " 22 1\n", + "Name: business_name, Length: 591609, dtype: int64)\n", + "('array', \n", + "[1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " ...\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", + "Length: 591609, dtype: int64)\n", + "('at', )\n", + "('attrs', {})\n", + "('axes', [MultiIndex([( '!Exotics BySIYTHE Corporation_BC_Design Company_170_422_RICHARDS ST_Vancouver_V6B 2Z4_CA_', ...),\n", + " ( '!Exotics BySIYTHE Corporation_BC_Design Company_170_422_RICHARDS ST_Vancouver_V6B 2Z4_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ...\n", + " ( 'xMatters Inc_BC_Software_1201_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1201_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1450_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1450_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1450_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1450_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_200_510_BURRARD ST_Vancouver_V6C 3A8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_200_510_BURRARD ST_Vancouver_V6C 3A8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_200_510_BURRARD ST_Vancouver_V6C 3A8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_200_510_BURRARD ST_Vancouver_V6C 3A8_CA_', ...)],\n", + " names=['bus_idx', 'FOLDERYEAR'], length=591609)])\n", + "('dtype', dtype('int64'))\n", + "('dtypes', dtype('int64'))\n", + "('empty', False)\n", + "('flags', )\n", + "('hasnans', False)\n", + "('iat', )\n", + "('iloc', )\n", + "('index', MultiIndex([( '!Exotics BySIYTHE Corporation_BC_Design Company_170_422_RICHARDS ST_Vancouver_V6B 2Z4_CA_', ...),\n", + " ( '!Exotics BySIYTHE Corporation_BC_Design Company_170_422_RICHARDS ST_Vancouver_V6B 2Z4_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ('#1 Antique Warehouse Furnishings Ltd_BC_Antique Dealer__226_SW MARINE DRIVE_Vancouver_V5X 2R5_CA_', ...),\n", + " ...\n", + " ( 'xMatters Inc_BC_Software_1201_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1201_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1450_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1450_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1450_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_1450_700_W PENDER ST_Vancouver_V6C 1G8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_200_510_BURRARD ST_Vancouver_V6C 3A8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_200_510_BURRARD ST_Vancouver_V6C 3A8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_200_510_BURRARD ST_Vancouver_V6C 3A8_CA_', ...),\n", + " ( 'xMatters Inc_BC_Software_200_510_BURRARD ST_Vancouver_V6C 3A8_CA_', ...)],\n", + " names=['bus_idx', 'FOLDERYEAR'], length=591609))\n", + "('is_monotonic', False)\n", + "('is_monotonic_decreasing', False)\n", + "('is_monotonic_increasing', False)\n", + "('is_unique', False)\n", + "('loc', )\n", + "('name', 'business_name')\n", + "('nbytes', 4732872)\n", + "('ndim', 1)\n", + "('plot', )\n", + "('shape', (591609,))\n", + "('size', 591609)\n", + "('values', array([1, 1, 1, ..., 1, 1, 1]))\n" + ] + } + ], + "source": [ + "import inspect \n", + "for i in inspect.getmembers(grp_count):\n", + " if not i[0].startswith('_'):\n", + " if not inspect.ismethod(i[1]): \n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# Greater Vancouver Floating Home Co-Op\n", + "gvfhc_df = df[df['business_name'] == 'Greater Vancouver Floating Home Co-Op']\n", + "gvfhc_df.to_csv('/home/jovyan/ODBiz/1-PreProcessing/vancouver_dedup/Greater Vancouver Floating Home Co-Op.csv')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:root] *", + "language": "python", + "name": "conda-root-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/2-OpenTabulate/README_opentab.md b/scripts/Businesses/2-OpenTabulate/README_opentab.md new file mode 100644 index 00000000..d11ae259 --- /dev/null +++ b/scripts/Businesses/2-OpenTabulate/README_opentab.md @@ -0,0 +1,67 @@ +# 2-OpenTabulate + +## What is opentab? ## + +Opentabulate is a script that is used to standardize column names across different datasets. Looking at all the datasets in /data/input, the same information in two datasets will have two different column names. Opentab is here to remedy this issue. + + +## The variable map ## + +The first step is creating a variable map (variablemap.csv). This is quite simple, the column headers in this file are the column names you want for a specific information, such as "facility_name" and "phone" (not all datasets need to contain this information). Each row in the variable map is a different dataset taken from /data/input/. So, for example, let's assume dataset_1 has a column header "HOSPITAL_NAME". In the variable map, in the row for that dataset, under the column "facility_name", we write "HOSPITAL_NAME". This will tell the program what information is what in each dataset (it can't guess for us... yet). By viewing the variable map, this explanation becomes clearer + +--- + +## openTabulate_main.ipynb ## +Hitting "Run all" on this Jupyter notebook will run all the necessary commands in the correct order as explained below + +## JSON Generator ## + +Run the first code block cell in `openTabulate_main.ipynb` to create the JSONs necessary to run opentabulate. This code block converts the `variablemap.csv` into several JSON files (one for each dataset) that opentabulate uses to perform the column mappings. + +## Opentabulate ## + +### 1. `data/input` +The files in `data/input` are a copy of all files from `1-PreProcessing/processed` + +### 2. Configuration +The configuration file in this directory (`opentab.conf`) is just a copy of the one actually used by opentabulate. To run opentabulate, you will need to add or edit certain things to the configuration, but you must do this at the root of the system. + +To copy all your edits from `opentab.conf` to the file that's actually used by opentabulate, go into the terminal and enter: +`cp ~/ODBiz/2-OpenTabulate/opentab.conf ~/.config/opentabulate.conf` +This is the easier editing option + +Or, to directly access the script at the root, go into the terminal and enter: +`nano ~/.config/opentabulate.conf`. + +You can edit multiple things in opentab, but probably the most essential is the last section "labels". Here you can edit what column headers you want in the output, but it's very important that they must be the same as in the variable map. (You don't need to put all the labels that are in the variable map, but you cannot add any that are not in the variable map) +For more details on the different opentabulate settings as well as installation, visit: [https://opentabulate.readthedocs.io/en/latest/] + +### 3. Running opentabulate +The variable map is done and the jsongenerator was run (with the JSON files are in /sources/), we are ready to run opentabulate. +To get the output of only one dataset, enter in the terminal: `opentab sources/src-PE_Hospitals.json` +To get the output of all sources, enter in the terminal: `for file in sources/*; do opentab $file; done` + +NOTE: For ODBiz, an alternative is to run the following commands in terminal: +``` +$ cd /home/jovyan/ODBiz/2-OpenTabulate/sources +$ opentab * +``` + +Note: These opentabulate commands are performed automatically by `1-openTabulate.ipynb` if you hit "run all". + +### 4. The output +After running opentabulate, you will find the CSV files with the new column headers in /data/output + +--- + +## `update_mapping_summary.py` +In order to ensure that columns get properly mapped by opentab, especially when dealing with a large number of datasets, the script `update_mapping_summary.py` will generate `mapping_summary.txt` and `unmapped_vars.csv`. + +- `mapping_summary.txt` provides a summary of the column mappings that `variablemap.csv` will produce. It will also flag unmapped columns and unrecognized variables, which are variables present in variablemap, but not in the original dataset. + +- `unmapped_vars.csv` displays unmapped columns in a slightly more readable format if opened in Excel. + +## `add_filename.ipynb` ## +With the outputs, you can then run add_filename.ipynb to add a column with the name of the file this dataset comes from. This makes it easier to locate different facilities and where errors might come from later in the process. + +NOTE: For ODBiz, `1-openTabulate.ipynb` has been modified to tell opentab to perform what `add_filename.ipynb` does automatically. \ No newline at end of file diff --git a/scripts/Businesses/OpenTabulate/edu_sample.json b/scripts/Businesses/2-OpenTabulate/edu_sample.json similarity index 100% rename from scripts/Businesses/OpenTabulate/edu_sample.json rename to scripts/Businesses/2-OpenTabulate/edu_sample.json diff --git a/scripts/Businesses/OpenTabulate/json_generator.ipynb b/scripts/Businesses/2-OpenTabulate/json_generator.ipynb similarity index 100% rename from scripts/Businesses/OpenTabulate/json_generator.ipynb rename to scripts/Businesses/2-OpenTabulate/json_generator.ipynb diff --git a/scripts/Businesses/2-OpenTabulate/openTabulate_main.ipynb b/scripts/Businesses/2-OpenTabulate/openTabulate_main.ipynb new file mode 100644 index 00000000..6992e57e --- /dev/null +++ b/scripts/Businesses/2-OpenTabulate/openTabulate_main.ipynb @@ -0,0 +1,380 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1-openTabulate.ipynb\n", + "\n", + "1. Creates JSON source files for opentabulate according to a variable map csv.\n", + "\n", + "2. After generating all the source files, the notebook runs the following commands in terminal:\n", + " ```\n", + " $ cd /home/jovyan/ODBiz/2-OpenTabulate/sources\n", + " $ opentab *\n", + " ```\n", + " In order to run opentabulate on all the generated .json files.\n", + "\n", + "3. Compresses the output files into a .zip file so that it can be easily moved into another server with more RAM" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. json-generator\n", + "\n", + "The cell below creates JSON source files for opentabulate according to a variable map csv.\n", + "Modified for use with ODBiz data sources by Skye Chen" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-15T16:59:23.441518Z", + "iopub.status.busy": "2022-08-15T16:59:23.440438Z", + "iopub.status.idle": "2022-08-15T16:59:23.567847Z", + "shell.execute_reply": "2022-08-15T16:59:23.566868Z", + "shell.execute_reply.started": "2022-08-15T16:59:23.441412Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/AB_Banff_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/AB_Calgary_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/AB_Chestermere_Businesses.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/AB_Edmonton_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/AB_Strathcona_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Burnaby_Business_Licences_2.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Chilliwack_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Indigenous_Business_Listings.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Kelowna_Business_Licence.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Langley_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Liquor_licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Maple_Ridge_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Nanaimo_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_New_Westminster_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_New_Westminster_Business_Licences_(Childcare).json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_New_Westminster_Business_Licences_(Intermunicipal).json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_New_Westminster_Business_Licences_(New_this_Year).json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_New_Westminster_Business_Licences_(Nonresidents).json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_New_Westminster_Business_Licences_(Residents).json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Port_Moody_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Prince_George_Business_Licence.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Richmond_Based_Businesses.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Squamish_Business_Licence_Annual_2021.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Surrey_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Vancouver_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Victoria_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/BC_Wineries.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/Indigenous_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/MB_Indigenous_AFOA.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/NB_Moncton_Grocery_Stores.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/NB_Moncton_Ph_Pharmacies.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/NB_Saint_John_Grocery_Stores.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/NT_Yellowknife_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/NU_Indigenous_Business.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Brampton_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Caledon_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Cambridge_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Durham_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Greater_Sudbury_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Basic_Food_Shops.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Food_Establishments.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Kennels_and_Pet_Shops.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Lodging_Houses.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Places_of_Amusement.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Public_Garages.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Public_Halls.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Residential_Care_Facilities.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Salvage_Yards.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Hamilton_Licenced_Second_Hand_Shops.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Kitchener_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Mississauga_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_oebd.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Ottawa_Cultural_Businesses.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Ottawa_Street_Food_Vendors.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Pickering_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Toronto_Business_Licences.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_Welland_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/ON_York_Region_Business_Directory.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/QC_Etablissements.json\n", + "File saved to /home/jovyan/ODBiz/2-OpenTabulate/sources/QC_Sherbrooke_Entreprises.json\n" + ] + } + ], + "source": [ + "'''\n", + "1. json-generator \n", + "\n", + "Creates JSON source files for opentabulate according to a variable map csv.\n", + "Modified for use with ODBiz data sources by Skye Chen\n", + "''' \n", + "\n", + "import csv\n", + "import json\n", + "from tqdm import tqdm\n", + "\n", + "# Define file path name\n", + "opentabDir = '/home/jovyan/data_exploration/ODBiz/2-OpenTabulate'\n", + "\n", + "# input variable map file\n", + "input_file = csv.DictReader(open(f'{opentabDir}/variablemap.csv', encoding = 'utf-8-sig')) \n", + "\n", + "# define schema objects (Forced for all features in data source)\n", + "metadataFields = ('localfile',)\n", + "\n", + "geoFields = ('longitude', 'latitude')\n", + "\n", + "bizFields = ('business_name',\n", + " 'business_sector',\n", + " 'business_subsector',\n", + " 'business_description',\n", + " 'alt_business_name',\n", + " 'business_id_no',\n", + " 'licence_number',\n", + " 'licence_type',\n", + " 'primary_NAICS',\n", + " 'secondary_NAICS',\n", + " 'NAICS_descr',\n", + " 'alt_econ_act_code',\n", + " 'alt_econ_act_descrip',\n", + " 'business_website',\n", + " 'email',\n", + " 'telephone',\n", + " 'telephone_extension',\n", + " 'toll_free_telephone',\n", + " 'fax',\n", + " 'total_no_employees',\n", + " 'no_full_time',\n", + " 'no_part_time',\n", + " 'no_seasonal',\n", + " 'date_established',\n", + " 'indigenous',\n", + " 'status')\n", + "\n", + "addressFields = ('full_address',\n", + " 'full_address_2',\n", + " 'mailing_address',\n", + " 'unit',\n", + " 'street_no',\n", + " 'street_name',\n", + " 'street_direction',\n", + " 'street_type',\n", + " 'city',\n", + " 'province',\n", + " 'postal_code',\n", + " 'country')\n", + "\n", + "for row in (input_file): # Each row is a data source\n", + "\n", + " filename = f\"{row['localfile']}\"\n", + " json_filename = filename.replace(\".csv\", \".json\")\n", + " OP = open(f\"{opentabDir}/sources/{json_filename}\", \"w\")\n", + " \n", + " \n", + " # Dictionaries for schema json field\n", + " metadata_dict = {}\n", + " geo_dict = {}\n", + " address_dict = {}\n", + " biz_dict = {}\n", + "\n", + " # Only adding k,v pairs that are not blank\n", + " for f in metadataFields:\n", + " if row[f] != '':\n", + " metadata_dict[f] = row[f]\n", + " for f in geoFields:\n", + " if row[f] != '':\n", + " geo_dict[f] = row[f]\n", + " for f in addressFields:\n", + " if row[f] != '':\n", + " address_dict[f] = row[f]\n", + " for f in bizFields:\n", + " if row[f] != '':\n", + " biz_dict[f] = row[f]\n", + " \n", + " # function to add force to a string\n", + "\n", + " # SL define json structure and static fields\n", + " jsondict = {\n", + " \"localfile\": filename,\n", + " \"schema_groups\": [\"metadata\", \"geocoordinates\", \"address\", \"biz\"],\n", + " \"source\": row['source_url'],\n", + " \"licence\": row['licence'],\n", + " \"provider\": row['provider'],\n", + " \"format\": {\n", + " \"type\": \"csv\",\n", + " \"delimiter\": \",\",\n", + " \"quote\": \"\\\"\"\n", + " }, \n", + " \"schema\": {\n", + " \"metadata\": {\n", + " 'localfile': f'force:{filename}'\n", + " },\n", + " \"geocoordinates\": geo_dict,\n", + " \"biz\": biz_dict,\n", + " \"address\": address_dict\n", + " } \n", + " } \n", + " \n", + " # Create the dictionary for the json output and write to file\n", + " json_data = json.dumps(jsondict, indent=4) # Formatting\n", + " OP.write(json_data) # Write to json\n", + " print(f'File saved to {OP.name}')\n", + " OP.close()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. opentab \n", + "\n", + "The cell below runs the following commands in terminal:\n", + "```\n", + "$ cd /home/jovyan/ODBiz/2-OpenTabulate/sources\n", + "$ opentab *\n", + "```\n", + "In order to run opentabulate on all the generated .json files.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-15T16:59:23.577060Z", + "iopub.status.busy": "2022-08-15T16:59:23.576612Z", + "iopub.status.idle": "2022-08-15T17:00:02.613353Z", + "shell.execute_reply": "2022-08-15T17:00:02.612294Z", + "shell.execute_reply.started": "2022-08-15T16:59:23.577033Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Beginning data processing.\n", + "Completed processing in 37.817878804169595 seconds.\n" + ] + } + ], + "source": [ + "%%bash\n", + "cd /home/jovyan/ODBiz/2-OpenTabulate/sources\n", + "opentab *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. Move Output Files to Merging\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-15T17:00:25.847534Z", + "iopub.status.busy": "2022-08-15T17:00:25.846232Z", + "iopub.status.idle": "2022-08-15T17:00:26.494861Z", + "shell.execute_reply": "2022-08-15T17:00:26.493978Z", + "shell.execute_reply.started": "2022-08-15T17:00:25.847455Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Directory successfully copied!\n" + ] + } + ], + "source": [ + "# transfer files directly from OpenTab/data/output to Merging/input\n", + "import shutil\n", + "import os\n", + "src = '../2-OpenTabulate/data/output'\n", + "dst = '../3-Merging/input'\n", + "\n", + "if os.path.exists(dst):\n", + " shutil.rmtree(dst)\n", + " shutil.copytree(src, dst)\n", + "print('Directory successfully copied!')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DEPRECATED 3. compressOutputFiles\n", + "\n", + "The cell below compresses the output files to make it easier to export to the server with more RAM.\n", + "The compressed file is named `OpenTabCompressedOutput.tar.gz`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.status.busy": "2022-08-15T17:00:03.109630Z", + "iopub.status.idle": "2022-08-15T17:00:03.109958Z", + "shell.execute_reply": "2022-08-15T17:00:03.109818Z", + "shell.execute_reply.started": "2022-08-15T17:00:03.109802Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# '''\n", + "# DEPRECATED\n", + "# 3. compressOutputFiles\n", + "\n", + "# Run this cell to compress the output files to make it easier to export to the server with more RAM.\n", + "# The compressed file is named `OpenTabCompressedOutput.tar.gz`\n", + "# '''\n", + "\n", + "# import shutil\n", + "\n", + "# dir_to_compress = '/home/jovyan/ODBiz/2-OpenTabulate/data/output'\n", + "# output_filename = '/home/jovyan/ODBizOpenTabCompressedOutput/OpenTabCompressedOutput'\n", + "\n", + "# outName = shutil.make_archive(output_filename, 'zip', dir_to_compress)\n", + "# print(f'Output saved to {outName}')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:odbiz]", + "language": "python", + "name": "conda-env-odbiz-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/OpenTabulate/opentab.conf b/scripts/Businesses/2-OpenTabulate/opentab.conf similarity index 61% rename from scripts/Businesses/OpenTabulate/opentab.conf rename to scripts/Businesses/2-OpenTabulate/opentab.conf index 6ffccfc6..7c4b15ce 100644 --- a/scripts/Businesses/OpenTabulate/opentab.conf +++ b/scripts/Businesses/2-OpenTabulate/opentab.conf @@ -2,20 +2,18 @@ # When running opentab, it uses the version of this file located at # ~/.config/opentabulate.conf - - # OpenTabulate (OT) configuration file. - # # File comments are written by starting a line with '#' or ';'. [general] + # The root data processing directory of OT (required). This is where the # --initialize command flag creates hard-coded processing directories that # OT uses. -root_directory = /home/jovyan/data-vol-1/ODHF/LODE-ECDO/scripts/HealthFacilities/V2/2-OpenTabulate/opentabulate +root_directory = /home/jovyan/ODBiz/2-OpenTabulate # Add a positive integer index column for the tabulated output. Defaults # to 'false'. @@ -29,7 +27,7 @@ add_index = true # for further details. As of 2.0, the program currently supports 'utf-8' # and 'cp1252'. Defaults to 'utf-8'. -#target_encoding = utf-8 +target_encoding = utf-8 # How to handle output encoding errors. Sometimes converting from one # character encoding to another is not possible due to a set of bytes @@ -37,7 +35,6 @@ add_index = true # # This parameter tells us how to handle it; the options are 'strict', # 'replace' and 'ignore'. - # # - 'strict' throws an error upon a failed encoding and ceases processing # - 'replace' substitutes failed encodings with ? @@ -49,6 +46,7 @@ output_encoding_errors = strict clean_whitespace = true lowercase_output = false +# lowercase_entries = false # Verbosity level of OT command, with integer values from 0 to 3 inclusive. # The lower the value, the more detailed the output is. @@ -65,16 +63,48 @@ lowercase_output = false # # where each string is an output column name. -geocoordinates = ('longitude', 'latitude') +#health = ('name', 'type', 'health_authority') -address = ('street_no', 'street_name', 'street_addr', - 'city', 'province', 'postal_code', 'country', - 'address_str', 'telephone', 'email','fax') +metadata = ('localfile',) -edu = ('facility_name', 'ISCED020','ISCED010','ISCED1','ISCED2','ISCED3', - 'ISCED4+','authority_type','grade_range','grade_type', 'source_id', 'facility_type', - 'geo_source', 'authority_name', 'language', 'enrolment') +geocoordinates = ('longitude', 'latitude') -biz = ('business_name', 'trade_name', 'company_name', 'business_id', 'bus_desc', 'lic_no', 'lic_type', 'lic_desc', - 'naics_code', 'naics_desc', 'naics_title', 'industry', 'type', 'employee_range', 'employees', 'employees_ft', - 'employees_pt', 'employees_seasonal') \ No newline at end of file +biz = ('business_name', + 'business_sector', + 'business_subsector', + 'business_description', + 'alt_business_name', + 'business_id_no', + 'licence_number', + 'licence_type', + 'primary_NAICS', + 'secondary_NAICS', + 'NAICS_descr', + 'alt_econ_act_code', + 'alt_econ_act_descrip', + 'business_website', + 'email', + 'telephone', + 'telephone_extension', + 'toll_free_telephone', + 'fax', + 'total_no_employees', + 'no_full_time', + 'no_part_time', + 'no_seasonal', + 'date_established', + 'indigenous', + 'status') + +address = ('full_address', + 'full_address_2', + 'mailing_address', + 'unit', + 'street_no', + 'street_name', + 'street_direction', + 'street_type', + 'city', + 'province', + 'postal_code', + 'country') \ No newline at end of file diff --git a/scripts/Businesses/2-OpenTabulate/opentab_data_viewing.ipynb b/scripts/Businesses/2-OpenTabulate/opentab_data_viewing.ipynb new file mode 100644 index 00000000..2c995244 --- /dev/null +++ b/scripts/Businesses/2-OpenTabulate/opentab_data_viewing.ipynb @@ -0,0 +1,497 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loading data: 100%|██████████| 637/637 [00:07<00:00, 84.21it/s] \n", + "636061\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0FOLDERYEARLicenceRSNLicenceNumberLicenceRevisionNumberBusinessNameBusinessTradeNameStatusIssuedDateExpiredDate...CountryPostalCodeLocalAreaNumberofEmployeesFeePaidExtractDateGeomlonglatbusiness_name
0013198856713-3251190Beyond Sound Event Productions LtdBeyond SoundIssued2013-03-15T17:56:12-04:002013-12-31...CAV5T 3J9Mount Pleasant1.0158.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.093530332101, 49.2576936...-123.09353049.257694Beyond Sound Event Productions Ltd
1113198858913-3251380J Robert Thibodeau Architecture + Design IncNaNIssued2013-05-02T13:30:53-04:002013-12-31...CAV5Y 1N2Mount Pleasant7.0147.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.108309208116, 49.2635872...-123.10830949.263587J Robert Thibodeau Architecture + Design Inc
2213198860013-3251480(Narinder Gill)NaNIssued2013-03-15T17:52:44-04:002013-12-31...CANaNSunset0.097.02019-07-21T16:49:09-04:00NaNNaNNaN(Narinder Gill)
3313198863213-1872111MLF Event Architecture IncNaNIssued2013-03-19T18:17:17-04:002013-12-31...CAV6B 2T4Downtown1.022.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.120093418192, 49.2755430...-123.12009349.275543MLF Event Architecture Inc
4413198876813-1863721Ocean West Financial Group IncNaNIssued2013-03-26T18:09:00-04:002013-12-31...CAV6E 2Y3West End6.022.02019-07-21T16:49:09-04:00{\"coordinates\": [-123.122008869142, 49.2845352...-123.12200949.284535Ocean West Financial Group Inc
..................................................................
63605663685022395962522-1476670Wimaan Thai Restaurant LtdWimaan Thai RestaurantIssued2021-12-24T17:29:10-05:002022-12-31...CAV6R 2B8Kitsilano10.01392.02022-02-15T03:09:42-05:00{\"coordinates\": [-123.184479662511, 49.2645862...-123.18448049.264586Wimaan Thai Restaurant Ltd
63605763685122395962722-14766900909551 BC LtdKishimoto Japanese RestaurantIssued2021-12-01T22:56:36-05:002022-12-31...CAV5N 4A9Grandview-Woodland15.01174.02022-02-15T03:09:42-05:00{\"coordinates\": [-123.069351978091, 49.2665092...-123.06935249.2665090909551 BC Ltd
63605863685222395963522-1476770(Andre Barrett)Riddim and SpicePendingNaNNaN...CAV5N 4A8Grandview-Woodland0.0NaN2022-02-15T03:09:42-05:00{\"coordinates\": [-123.070030204642, 49.2673831...-123.07003049.267383Riddim and Spice
63605963685322395963722-1476790Healthbridge Wellness Centres IncYaletown L'AntipastoIssued2021-12-30T15:49:19-05:002022-12-31...CAV6B 5P2Downtown10.01087.02022-02-15T03:09:42-05:00{\"coordinates\": [-123.121328560504, 49.2754477...-123.12132949.275448Healthbridge Wellness Centres Inc
63606063685422395963922-1476810The Dirty Apron Delicatessen CorpNaNPendingNaNNaN...CAV6B 2L3Downtown18.01370.02022-02-15T03:09:42-05:00{\"coordinates\": [-123.109080265212, 49.2805012...-123.10908049.280501The Dirty Apron Delicatessen Corp
\n", + "

636061 rows × 28 columns

\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 FOLDERYEAR LicenceRSN LicenceNumber \\\n", + "0 0 13 1988567 13-325119 \n", + "1 1 13 1988589 13-325138 \n", + "2 2 13 1988600 13-325148 \n", + "3 3 13 1988632 13-187211 \n", + "4 4 13 1988768 13-186372 \n", + "... ... ... ... ... \n", + "636056 636850 22 3959625 22-147667 \n", + "636057 636851 22 3959627 22-147669 \n", + "636058 636852 22 3959635 22-147677 \n", + "636059 636853 22 3959637 22-147679 \n", + "636060 636854 22 3959639 22-147681 \n", + "\n", + " LicenceRevisionNumber BusinessName \\\n", + "0 0 Beyond Sound Event Productions Ltd \n", + "1 0 J Robert Thibodeau Architecture + Design Inc \n", + "2 0 (Narinder Gill) \n", + "3 1 MLF Event Architecture Inc \n", + "4 1 Ocean West Financial Group Inc \n", + "... ... ... \n", + "636056 0 Wimaan Thai Restaurant Ltd \n", + "636057 0 0909551 BC Ltd \n", + "636058 0 (Andre Barrett) \n", + "636059 0 Healthbridge Wellness Centres Inc \n", + "636060 0 The Dirty Apron Delicatessen Corp \n", + "\n", + " BusinessTradeName Status IssuedDate \\\n", + "0 Beyond Sound Issued 2013-03-15T17:56:12-04:00 \n", + "1 NaN Issued 2013-05-02T13:30:53-04:00 \n", + "2 NaN Issued 2013-03-15T17:52:44-04:00 \n", + "3 NaN Issued 2013-03-19T18:17:17-04:00 \n", + "4 NaN Issued 2013-03-26T18:09:00-04:00 \n", + "... ... ... ... \n", + "636056 Wimaan Thai Restaurant Issued 2021-12-24T17:29:10-05:00 \n", + "636057 Kishimoto Japanese Restaurant Issued 2021-12-01T22:56:36-05:00 \n", + "636058 Riddim and Spice Pending NaN \n", + "636059 Yaletown L'Antipasto Issued 2021-12-30T15:49:19-05:00 \n", + "636060 NaN Pending NaN \n", + "\n", + " ExpiredDate ... Country PostalCode LocalArea \\\n", + "0 2013-12-31 ... CA V5T 3J9 Mount Pleasant \n", + "1 2013-12-31 ... CA V5Y 1N2 Mount Pleasant \n", + "2 2013-12-31 ... CA NaN Sunset \n", + "3 2013-12-31 ... CA V6B 2T4 Downtown \n", + "4 2013-12-31 ... CA V6E 2Y3 West End \n", + "... ... ... ... ... ... \n", + "636056 2022-12-31 ... CA V6R 2B8 Kitsilano \n", + "636057 2022-12-31 ... CA V5N 4A9 Grandview-Woodland \n", + "636058 NaN ... CA V5N 4A8 Grandview-Woodland \n", + "636059 2022-12-31 ... CA V6B 5P2 Downtown \n", + "636060 NaN ... CA V6B 2L3 Downtown \n", + "\n", + " NumberofEmployees FeePaid ExtractDate \\\n", + "0 1.0 158.0 2019-07-21T16:49:09-04:00 \n", + "1 7.0 147.0 2019-07-21T16:49:09-04:00 \n", + "2 0.0 97.0 2019-07-21T16:49:09-04:00 \n", + "3 1.0 22.0 2019-07-21T16:49:09-04:00 \n", + "4 6.0 22.0 2019-07-21T16:49:09-04:00 \n", + "... ... ... ... \n", + "636056 10.0 1392.0 2022-02-15T03:09:42-05:00 \n", + "636057 15.0 1174.0 2022-02-15T03:09:42-05:00 \n", + "636058 0.0 NaN 2022-02-15T03:09:42-05:00 \n", + "636059 10.0 1087.0 2022-02-15T03:09:42-05:00 \n", + "636060 18.0 1370.0 2022-02-15T03:09:42-05:00 \n", + "\n", + " Geom long \\\n", + "0 {\"coordinates\": [-123.093530332101, 49.2576936... -123.093530 \n", + "1 {\"coordinates\": [-123.108309208116, 49.2635872... -123.108309 \n", + "2 NaN NaN \n", + "3 {\"coordinates\": [-123.120093418192, 49.2755430... -123.120093 \n", + "4 {\"coordinates\": [-123.122008869142, 49.2845352... -123.122009 \n", + "... ... ... \n", + "636056 {\"coordinates\": [-123.184479662511, 49.2645862... -123.184480 \n", + "636057 {\"coordinates\": [-123.069351978091, 49.2665092... -123.069352 \n", + "636058 {\"coordinates\": [-123.070030204642, 49.2673831... -123.070030 \n", + "636059 {\"coordinates\": [-123.121328560504, 49.2754477... -123.121329 \n", + "636060 {\"coordinates\": [-123.109080265212, 49.2805012... -123.109080 \n", + "\n", + " lat business_name \n", + "0 49.257694 Beyond Sound Event Productions Ltd \n", + "1 49.263587 J Robert Thibodeau Architecture + Design Inc \n", + "2 NaN (Narinder Gill) \n", + "3 49.275543 MLF Event Architecture Inc \n", + "4 49.284535 Ocean West Financial Group Inc \n", + "... ... ... \n", + "636056 49.264586 Wimaan Thai Restaurant Ltd \n", + "636057 49.266509 0909551 BC Ltd \n", + "636058 49.267383 Riddim and Spice \n", + "636059 49.275448 Healthbridge Wellness Centres Inc \n", + "636060 49.280501 The Dirty Apron Delicatessen Corp \n", + "\n", + "[636061 rows x 28 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd \n", + "from tqdm import tqdm\n", + "\n", + "# inputFileName = '/home/jovyan/ODBiz/2-OpenTabulate/data/output/BC_Vancouver_Business_Licences.csv'\n", + "inputFileName = '/home/jovyan/ODBiz/1-PreProcessing/processed/BC_Vancouver_Business_Licences.csv'\n", + "total_lines = 636076\n", + "chunksize = 1000\n", + "# df = pd.read_csv(mergedFilePathName, low_memory=False)\n", + "df = pd.concat([chunk for chunk in tqdm(pd.read_csv(inputFileName, chunksize=chunksize), desc='Loading data', total=total_lines//chunksize+1)])\n", + "num_of_rows = df.shape[0]\n", + "print(num_of_rows)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['BC', nan, 'bc', 'AB', 'ON', 'QC', 'NS', 'PQ', 'NB', 'MB', 'SK',\n", + " 'On', 'British Columbia', '78', '`', 'YT', 'QB', 'Quebec',\n", + " 'Ontario', 'NF', 'on', 'Ab', 'Lakeview Estates', 'Alberta'],\n", + " dtype=object)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.unique(df.Province)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:odbiz]", + "language": "python", + "name": "conda-env-odbiz-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/OpenTabulate/update_mapping_summary.py b/scripts/Businesses/2-OpenTabulate/update_mapping_summary.py similarity index 75% rename from scripts/Businesses/OpenTabulate/update_mapping_summary.py rename to scripts/Businesses/2-OpenTabulate/update_mapping_summary.py index c3ab1de7..2a9d57b5 100644 --- a/scripts/Businesses/OpenTabulate/update_mapping_summary.py +++ b/scripts/Businesses/2-OpenTabulate/update_mapping_summary.py @@ -1,6 +1,13 @@ +''' +update_mapping_summary.py + +Outputs a txt file with the mapping summary described in variablemap.csv in a slightly more human readable form +''' + import pandas as pd import numpy as np import os +from tqdm import tqdm # Store the file name of all csvs in processed @@ -23,12 +30,19 @@ def write_and_print(filepath: str, text: str, mode = 'a'): with open(filepath, mode) as f: f.write(text + '\n') -# Read in variablemap.csv -vm_csv_path = "/home/jovyan/ODBiz/2-OpenTabulate/variablemap2.csv" +# Define file paths +vm_csv_path = "/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv" txt_path = '/home/jovyan/ODBiz/2-OpenTabulate/mapping_summary.txt' +unmapped_path = '/home/jovyan/ODBiz/2-OpenTabulate/unmapped_vars.csv' + +# Read in variablemap.csv vm_df = pd.read_csv(vm_csv_path) vm_df = vm_df.set_index('localfile') +# Create the unmapped_path csv +um_df = pd.DataFrame(columns=['localfile', 'Unmapped_Variables']) +um_df = um_df.set_index('localfile') + # Overwrite the summary file with open(txt_path, 'w') as f: f.write('') @@ -36,14 +50,15 @@ def write_and_print(filepath: str, text: str, mode = 'a'): # Loop through all csv file names no_of_files = len(filepaths) -for i in range(no_of_files): +print('Updating file...') +for i in tqdm(range(no_of_files)): write_and_print(txt_path, '\n========================================================\n') localfile = filepaths[i] write_and_print(txt_path, f"Now viewing summary of [{i+1}] {localfile}:\n") csv_path = f"/home/jovyan/ODBiz/1-PreProcessing/processed/{localfile}" # Import the csv as dataframe - df = pd.read_csv(csv_path) + df = pd.read_csv(csv_path, low_memory=False) # Extract the necessary column/row df_cols = df.columns @@ -58,9 +73,9 @@ def write_and_print(filepath: str, text: str, mode = 'a'): write_and_print(txt_path, f'{tot_mapped} out of {tot_cols} columns were mapped:') # Display the mappings - max_col_len = max(list(map(len, shared_cols))) + max_col_len = max(list(map(len, shared_cols.to_list() + [i for i in mapped_cols if (type(i) == str and 'force:' in i)]))) for idx, val in mapped_cols.iteritems(): - if val in shared_cols: + if val in shared_cols or (type(val) == str and 'force:' in val): val_len = len(val) val += (max_col_len-val_len) * ' ' write_and_print(txt_path, f'{val} -> {idx}') @@ -78,6 +93,9 @@ def write_and_print(filepath: str, text: str, mode = 'a'): for i in missing: write_and_print(txt_path, i) + # Save unknown variables to a csv + um_df.loc[localfile, 'Unmapped_Variables'] = ',\n'.join(missing) + # Display variables in variablemap.csv that aren't in the processed dataset mapped_cols2 = mapped_cols.drop(['source_url', 'provider', 'licence', 'last_updated', 'update_frequency', 'notes']) unk_var_idx = [] @@ -87,6 +105,8 @@ def write_and_print(filepath: str, text: str, mode = 'a'): unk_var_idx.append(idx) unk_var_val.append(val) unk_var_len = len(unk_var_idx) + + # Print out the unknown variables write_and_print(txt_path, '\n-----------------------') write_and_print(txt_path, f'There are {unk_var_len} unknown variables:') # if unk_var_idx == []: @@ -103,13 +123,15 @@ def write_and_print(filepath: str, text: str, mode = 'a'): val += (max_col_len-val_len) * ' ' write_and_print(txt_path, f'{val} -> {idx}') - write_and_print(txt_path, f'\n Flagging messages:') + write_and_print(txt_path, f'\nFlagging messages:') flag_msg = '' if tot_mapped != tot_cols: - flag_msg += '- NOT_ALL_COLS_MAPPED\n' + flag_msg += '- NOT_ALL_COLS_MAPPED\n' # Not all columns were mapped if unk_var_len != 0: - flag_msg += '- UNK_VARS_EXIST\n' + flag_msg += '- UNK_VARS_EXIST\n' # Unknown variables exist write_and_print(txt_path, f'{flag_msg}') # print(f'Summary successfully appended to {txt_path}') +um_df.to_csv(unmapped_path) +print(f'Saved unmapped variables to {unmapped_path}') print('DONE') \ No newline at end of file diff --git a/scripts/Businesses/OpenTabulate/variablemap2.csv b/scripts/Businesses/2-OpenTabulate/variablemap.csv similarity index 60% rename from scripts/Businesses/OpenTabulate/variablemap2.csv rename to scripts/Businesses/2-OpenTabulate/variablemap.csv index a6812092..a6e0964f 100644 --- a/scripts/Businesses/OpenTabulate/variablemap2.csv +++ b/scripts/Businesses/2-OpenTabulate/variablemap.csv @@ -1,61 +1,61 @@ -localfile,source_url,provider,licence,last_updated,update_frequency,notes,business_name,business_sector,business_subsector,business_description,business_id_no,account_name,licence_number,licence_type,primary_NAICS,secondary_NAICS,NAICS_descr,alt_econ_act_code,alt_econ_act_descrip,latitude,longitude,x,y,full_address,full_address_2,mailing_address,unit,street_no,street_name,street_direction,street_type,city,province,postal_code,business_website,email,telephone,telephone_extension,toll_free_telephone,fax,total_no_employees,no_full_time,no_part_time,no_seasonal,date_established,indigenous -AB_Banff_Business_Licences.csv,https://maps.banff.ca/opendata/,Town of Banff,,,,,BUSINESS_NAME,PROPOSED_BUSINESS,,,,,LICENSE_NUMBER,,,,,,,,,,,,,,UNIT,STREET_NUMBER,STREET_NAME,,,force:Banff,force:AB,,,,BUSINESS_NUMBER,,,,,,,,START_DATE,force:no -AB_Calgary_Business_Licences.csv,https://data.calgary.ca/Business-and-Economic-Activity/Calgary-Business-Licences/vdjc-pybd,City of Calgary,https://data.calgary.ca/stories/s/Open-Calgary-Terms-of-Use/u45n-7awa,18-01-2022,Daily,,TRADENAME,,,,,,,LICENCETYPES,,,,,,latitude,longitude,,,ADDRESS,,,,,,,,force:Calgary,force:AB,,,,,,,,,,,,JOBCREATED,force:no -AB_Chestermere_Businesses.csv,https://data-chestermere.opendata.arcgis.com/datasets/businesses-2/explore?location=51.036600%2C-113.824000%2C13.01&showTable=true,City of Chestermere,,26-01-2021,,,name,factype,,,,,,,,,,,,lat,lon,x,y,fulladdr,,,,,,,,force:Chestermere,force:AB,,agencyurl,,pocphone,,,,,,,,,force:no -AB_Edmonton_Business_Licences.csv,https://data.edmonton.ca/Sustainable-Development/City-of-Edmonton-Business-Licenses/qhi4-bdpu,City of Edmonton,https://data.edmonton.ca/stories/s/City-of-Edmonton-Open-Data-Terms-of-Use/msh8-if28/,16-11-2021,,,Trade Name,Category,,,,,Licence Number,,,,,,,Latitude,Longitude,,,Address,,,,,,,,force:Edmonton,force:AB,,,,,,,,,,,,,force:no -AB_Strathcona_Business_Directory.csv,https://data.strathcona.ca/Business-Economy/Business-Directory/mbdk-4nqc/data,Stathcona County,https://open.canada.ca/en/open-government-licence-canada,13-11-2021,,,Name,Sector,Industry,Group,,,,,NAICS_Code,,,,,Lat,Long,,,Address,,,,,,,,force:Strathcona,force:AB,,Website,,Phone,,,,,,,,,force:no -BC_Burnaby_Business_Licences.csv,https://data.burnaby.ca/datasets/business-licences,City of Burnaby,https://data.burnaby.ca/pages/open-government-licence,14-09-2021,,,TRADE_NAME,,,,,ACCOUNT_NAME,LICENCE_NUMBER,LICENCE_TYPE_NAME,,,,,,,,,,,,,UNIT,HOUSE,STREET,,,force:Burnaby,force:BC,,,,,,,,,,,,,force:no -BC_Chilliwack_Business_Licences.csv,https://www.chilliwack.com/main/page.cfm?id=2331&odAction=viewItem&odID=142,City of Chilliwack,https://www.chilliwack.com/main/page.cfm?id=2391,18-01-2022,Weekly,,TRADE_NAME,LICENSE_DESCRIPTION,,,,,,,,,,,,,,,,ADDRESS,,,,,,,,force:Chilliwack,force:BC,,,,PHONE,,,,,,,,,force:no -BC_Indigenous_Business_Listings.csv,https://catalogue.data.gov.bc.ca/dataset/bc-indigenous-business-listings,Government of British Columbia,https://www2.gov.bc.ca/gov/content/data/open-data/open-government-licence-bc,25-10-2021,,,Business Name,Industry Sector,Type,Description,,,,,,,,,,Latitude,Longitude,,,Address,,Mailing Address,,,,,,City,force:BC,Postal Code,Web Site,Email,Phone,,,Fax,Number of Employees,,,,Year Formed,force:Yes -BC_Kelowna_Business_Licence.csv,https://opendata.kelowna.ca/datasets/business-licence/explore?location=49.899750%2C-119.458400%2C11.15,City of Kelowna,http://apps.kelowna.ca/images/opendata/opengovernmentlicence.pdf,07-12-2021,,,NAME,TYPE_DESCRIPTION,,BUSINESS_DESC,,,LICENCE_ACCOUNT_NUMBER,,,,,,,,,,,LICENSE_LOCATION,,,,,,,,force:Kelowna,force:BC,,,,,,,,,,,,,force:no -BC_Langley_Business_Licences.csv,https://data-tol.opendata.arcgis.com/datasets/business-licenses,Township of Langley,https://www.tol.ca/opengovlicense,16-02-2018,,,Business_Name,Category_Desc,Licence_Desc,,,,,,NAICS_Primary,,NAICS_Primary_Desc,,,Latitude,Longitude,,,,,Mailing_Address,Civic_Unit,Civic_House,Civic_Street,,,force:Township of Langley,force:BC,,,,Phone,,,,,FullTime_Employees,PartTime_Employees,Seasonal_Employees,,force:no -BC_Liquor_licences.csv,https://catalogue.data.gov.bc.ca/dataset/licensed-establishments-in-b-c,Government of British Columbia,https://www2.gov.bc.ca/gov/content/data/open-data/open-government-licence-bc,,,,establishment name,,,,,,licence number,licence type,,,,,,,,,,location address line 1,location address line 2,,,,,,,location address city,force:BC,location postal code,,,,,,,,,,,,force:no -BC_Maple_Ridge_Business_Licences.csv,https://opengov.mapleridge.ca/datasets/business-licences/data,City of Maple Ridge,https://opengov.mapleridge.ca/pages/open-government-licence,10-08-2021,,,BusinessName,BusinessType,BusinessSubType,,,,,LicenceCategory,,,,,,lat,lon,X,Y,,,,Unit,House,Street,,,force:Maple Ridge,force:BC,PostalCode,WebsiteAddress,,Phone1,,,,,,,,,force:no -BC_Nanaimo_Business_Licences.csv,https://www.nanaimo.ca/open-data-catalogue/DataBrowser/nanaimo/BusinessLicences#,City of Nanaimo,https://www.nanaimo.ca/your-government/maps-data/open-data-catalogue/open-data-catalogue-licence,28-12-2010,,,TradeName,BusinessDescription,,,LEGAL_ID,,Licence,,NAICSCategory,NAICSDetail,EDO_NAICS_Desc,,,Latitude,Longitude,,,,,,CivicAddressUnit,CivicAddressHouse,CivicAddressStreet,,,force:Nanaimo,force:BC,,,,,,,,,,,,,force:no -BC_New_Westminster_Business_Licences.csv,http://opendata.newwestcity.ca/datasets/business-licenses-all,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,Daily,,BUSINESS_NAME,,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,,CIVIC_ADDRESS,,,,,,,,force:New West City,force:BC,,,,,,,,,,,,YEAR_OPENED,force:no -BC_New_Westminster_Business_Licences_(Childcare).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-childcare/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,,CIVIC_ADDRESS,,,,,,,,force:New West City,force:BC,,,,,,,,,,,,YEAR_OPENED,force:no -BC_New_Westminster_Business_Licences_(Intermunicipal).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-intermunicipal/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,,CIVIC_ADDRESS,,,,,,,,force:New West City,force:BC,,,,,,,,,,,,YEAR_OPENED,force:no -BC_New_Westminster_Business_Licences_(New_this_Year).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-new-this-year/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,,CIVIC_ADDRESS,,,,,,,,force:New West City,force:BC,,,,,,,,,,,,YEAR_OPENED,force:no -BC_New_Westminster_Business_Licences_(Nonresidents).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-nonresidents/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,,CIVIC_ADDRESS,,,,,,,,force:New West City,force:BC,,,,,,,,,,,,YEAR_OPENED,force:no -BC_New_Westminster_Business_Licences_(Residents).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-residents/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,,CIVIC_ADDRESS,,,,,,,,force:New West City,force:BC,,,,,,,,,,,,YEAR_OPENED,force:no -BC_Port_Moody_Business_Directory.csv,https://data.portmoody.ca/maps/3579528aad9d40bd89db1a8bb98bfe35/explore?location=49.289850%2C-122.851150%2C14.07,City of Port Moody,https://www.portmoody.ca/en/city-hall/open-data-terms-of-use.aspx,21-02-2022,,,Business_Name,Business_Category,Business_Description,,,,,,,,,,,lat,lon,X_LONG,Y_LAT,Address,,,,,,,,force:Port Moody,force:BC,,Website_,Email,Phone_,,,,,,,,,force:no -BC_Prince_George_Business_Licence.csv,https://data-cityofpg.opendata.arcgis.com/datasets/business-license-1/explore,City of Prince George ,https://pgmap.princegeorge.ca/opendata/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf,19-01-2022,Daily,,TradeName,LicenceCategory,LicenceDesc,,,,LicenceNumber,,,,,,,,,,,,,,Unit,Address,StreeName,,,force:Prince George,force:BC,,,,,,,,,,,,,force:no -BC_Richmond_Based_Businesses.csv,https://www.richmond.ca/busdev/directory/search/bddownload.aspx,City of Richmond,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BusinessName,BusinessType,BusinessDescription,,,,,,Naics,,NaicsDescription,,,,,,,Address,,,,,,,,force:Richmond,force:BC,,,,Phone,,,,,FullTime,PartTime,,,force:no -BC_Squamish_Business_Licence_Annual_2021.csv,https://data.squamish.ca/datasets/business-licence-annual-2020/explore?location=49.752423%2C-123.140961%2C11.50,City of Squamish,https://squamish.ca/discover-squamish/maps-and-data/open-data/,15-11-2021,,,Business_Name,Licence_Type,,Licence_Description,,,Business_Licence,Licence_Type,NAICS,,NAICS_Description,,,lat,lon,X,Y,Business_Location,,,,,,,,force:Squamish,force:BC,,,,,,,,,,,,Date_Opened,force:no -BC_Surrey_Business_Licences.csv,https://data.surrey.ca/dataset/business-licences,City of Surrey,https://data.surrey.ca/pages/open-government-licence-surrey,13-10-2021,Yearly,,Business Name,Products or Services,,,,,,,,,,,,Latitude,Longitude,,,,,,Unit,House Number,Road,,,force:Surrey,force:BC,Postal Code,,,Phone,,,,,,,,,force:no -BC_Vancouver_Business_Licences.csv,https://opendata.vancouver.ca/explore/dataset/business-licences/export/?disjunctive.status&disjunctive.businesssubtype,City of Vancouver,https://opendata.vancouver.ca/pages/licence/,18-01-2022,Daily,,BusinessName,BusinessSubType,BusinessType,,,,LicenceNumber,,,,,,,lat,long,,,,,,Unit,House,Street,,,City,Province,PostalCode,,,,,,,NumberofEmployees,,,,,force:no -BC_Victoria_Business_Licences.csv,https://opendata.victoria.ca/datasets/business-licences-past-5-years/data,City of Victoria,https://opendata.victoria.ca/pages/open-data-licence,03-12-2020,,,TradeName,Category,,Description,,,LicenceNo,,,,,,,LAT,LONG,X,Y,FullAddress,,,Unit,House,Street,,,force:Victoria,force:BC,,,,,,,,,,,,,force:no -BC_Wineries.csv,https://catalogue.data.gov.bc.ca/dataset/bc-winery-locations,Government of British Columbia,https://www2.gov.bc.ca/gov/content/data/open-data/open-government-licence-bc,,,,NAME,,,,,,,,,,,,,,,,,ADDRESS,,,,,,,,CITY,force:BC,POSTALCODE,,,,,,,,,,,,force:no -Indigenous_Business_Directory.csv,https://www.sac-isc.gc.ca/rea-ibd,Indigenous Services Canada,https://www.canada.ca/en/transparency/terms.html,04-01-2019,,,Company Operating Name,,,Company Description,Company ID,,,,Primary Industry NAICS Code,Alternate NAICS Codes,,,,,,,,Address 1,Address 2,,,,,,,City,Province,Postal Code,URL,Email,Phone Number,,,Fax Number,,,,,,force:yes -MB_Indigenous_AFOA.csv,https://www.afoamb.ca/about-us/corporate-members/,Aboriginal Financial Officers Association of Manitoba,,,,,name,,,,,,,,,,,,,,,,,,,,unit,street_number,street_name,,,city,province,postal_code,,email,phone ,,,fax,,,,,,force:yes -NB_Moncton_Grocery_Stores.csv,https://open.moncton.ca/datasets/grocery-stores/explore?location=46.089028%2C-64.771766%2C12.79&showTable=true,City of Moncton,https://ago-item-storage.s3.us-east-1.amazonaws.com/3ec310926cbd436cbaa609d8ee9fac15/Open_Data_Terms_of_Use.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAwaCXVzLWVhc3QtMSJHMEUCIQD4OImUnBbQKt7fZxWv7W%2B6Ll0XjtmL3AJFM2MgqBEWPQIgAzcTJ%2FZGwLoVaxScWIa8Sp8k3JLeFgbc7TDun%2BxNJiwqgwQIxP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2MDQ3NTgxMDI2NjUiDFaxpYcL1tc8NXa24irXA3PowJXr4ouiYvG0dCqHGbt0I4WJFf6cZaNkaY%2BN8D11SK8%2BefibeqQtIh3Vbm5M4rK0FpVgqOdlIqHi3A%2FBlys7iqKsTXSPlU0aI1b9vxLxDChYI4a9FFLv%2FifmtnLS84fmbf1HDVBRy5CIEzGNZhFL%2FRYinnmqOA1WrTdsDZtRJebU3iVAlRSBE%2B4ZFLGnmyejK6G8R2wA4jfI380x8c92oqz1gBaXAxpZRBTTYx2JvwwJFh0vwgGWY9WBpprFORFfILvOHYfGUVjucs1jzD3Ns4B5A%2FZ84ikRUQisC7towimIKF8R%2F3tBfHVImuKreqT3Vnk5oACFrjkGRJk8F4gJrjUNgKiEWbx2PPM6ER9SbJPcRijS9RaxG5VrQTeA4yhIUNxBcMd4SLkcBsLMTf4SAI7RxouJ%2Bv4jQAchSvu%2Bv4UCGobhKeu3ywfR5NFf7HFj3k78Ach%2Bsgqv2dDMeHVgUguHQwb%2BzgnyXe5EPfn9dNT5O4rjry%2BPnsDpTdRnA%2B98ruE7%2BrJP0ODPql4IzAPUE79BlUwr5MkEtgJPmbBtfvDnpk63fXLUoXL3Ifzs35OExv5Rkjk6Tc%2FWfs1STi0TksF9UTpeDKyYTW%2Fv13z6qXoLA1LPIjCZy9qMBjqlAWmFyJvYgkmrxwrcmJ1IjWo2yuzazKK%2F1wqwwJHiDn0Z8oq1k%2FcxbCKaO9v4bw5i6HBAANQR0Ds%2BGYhhu%2FK2C8N3sg4bxlfPI1zcBKyRL1ILBQ7J5MPSY4msMEnvGuFmJ8XecSWgKzcBEIdSSUWpcEyQiyg5reVVCEr%2F8DnpdAHspHZqIu8O1uldDuzl11VinPZUcdbOgTeZAn4jIPqAVBd6o8YpUA%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20211118T204142Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Credential=ASIAYZTTEKKE6PXCSKHH%2F20211118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=68ce5006077d3f204724edbd917e13fabdd01748d36d04b7abc01ce236d3ad01,23-03-2020,,,Name,Comment,,,,,,,,,,,,lat,lon,X,Y,Address,,,,,,,,force:Moncton,force:NB,,,,,,,,,,,,,force:no -NB_Moncton_Ph_Pharmacies.csv,https://open.moncton.ca/datasets/pharmacies/explore?location=46.092990%2C-64.785448%2C12.68&showTable=true,City of Moncton,https://ago-item-storage.s3.us-east-1.amazonaws.com/3ec310926cbd436cbaa609d8ee9fac15/Open_Data_Terms_of_Use.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAwaCXVzLWVhc3QtMSJIMEYCIQCAdW%2Bag2UJXkrHPQH%2BrLi%2FNNPneGBq%2BkOzIFdY%2By%2FqyAIhAMEdtTZ2pqazx8FE7lsk3tvIMwSKdZxeBJ97AQEAks3tKoMECMX%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNjA0NzU4MTAyNjY1IgxK%2BkPSVpdRdQEV%2Fcwq1wMoLNv5Oqpdi%2BKbtXaVqt5PVe%2BNuO74Dku8vxIWorVwOVkhHLw1j9xlXFhYEoHVXnbdfjXdpO1JE4xaPUpv7P5wIP3epNOsiPDz2lyZaVgbGciBx3KyqJ%2B3CMuO5%2BqJlFfU3a2OsdI5RKRZMOD6rZmMs8wCtUfEYW3XfDjcc3fQEnMRvBsW9ACh4HTWlyHU7D1%2FWA1NlappMu0qFuSYm9nQfcXY9EmDSsS4aEDIyDeVGOGjS3LNaqzsDQqx82eAFZnd1v7%2BGBO0182Ik9I5Zbqo1jN1VZPfRN284rqCAsU95zo%2BP21NGNKLAnIU0xcTPd3b9%2BVBdzs3IUbF6ZaMqGZgBUt9ctBLFNppDSCQb4bNrWgcs%2FtHRqLK4Nd57w1FGFmpAq87yaTFY19ocm%2Bu0gGOAk0aeu1ihws4QtY%2B12%2BmHdsyy9E%2BYjO8hOp%2Bc4utSUExjTLcaGydxCxchveYlZ9GhiKqWiFLqutWQhZNL%2BwbEb04UPS0J%2FGH5csPeq7GHz7YRwAuQ27BiVDB3V4SIqDbflvCqhhkv7I4Qi79gmseXewGKnu4rDjWQdk5HCrddYxmADLwHxtYuDiJCHeZmSGgk1%2FUs9WYx1jS%2F%2FIQBBfy3b96SOJYKmkw9t7ajAY6pAFgjdaIMyNTraXpqkja443w0r6BKp9VtaIHgc9mrxl4i5XypAVYBHXvbtQKpAnc7u74ShGfBfkQI1eJMKsFf4ofaeN5qkkLLKiU6w2edrtIbArcB5RT1pbHigE7%2F7z2tr7dWoBXyEC8UmdDMjO6jxYKEQMs0FEATg3X%2FwxFhWKdP9kecXRzZWh%2BqkukycGH9qbyHzkd2I%2BQtXxMAHKOR2PTQrom1g%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20211118T204555Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Credential=ASIAYZTTEKKERCR5V7F5%2F20211118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=1031a04a5935401192056b030c256cfda974db29d168ca94628ae49000d13d83,19-03-2020,,,Name,Type,,,,,,,,,,,,lat,lon,X,Y,Address,,,,,,,,force:Moncton,force:NB,,,,Phone,,,,,,,,,force:no -NB_Saint_John_Grocery_Stores.csv,https://catalogue-saintjohn.opendata.arcgis.com/datasets/grocery-stores/explore?location=45.278564%2C-66.049994%2C12.00&showTable=true,City of Saint John,,25-05-2020,,,Name,,,,,,,,,,,,,lat,lon,X,Y,Address,,,,,,,,force:Saint John,force:NB,,Website,,Telephone,,,,,,,,,force:no -NT_Yellowknife_Business_Directory.csv,https://opendata.yellowknife.ca/home/details/0ead7112-bafe-4c0d-b0ca-b2220cc6d2a9,City of Yellowknife,https://www.yellowknife.ca/en/discovering-yellowknife/resources/geomatic_services/City_of_Yellowknife_Open_Data_LIcence__Terms_of_Use.pdf,No data,,,BUSINESSNAME,BUSINESSTYPE,,,,,,,,,,,,,,,,,,,MUNICIPAL ADDRESS,MUNICIPAL ADDRESS2,MUNICIPAL ADDRESS3,,,force:Yellowknife,force:NT,,,EMAILADDRESS,PHONE,,,,,,,,,force:no -NU_Indigenous_Business.csv,https://nni.gov.nu.ca/business/search/results/community,Government of Nunavut,https://nni.gov.nu.ca/privacy,,,,Name,,,,,,,,,,,,,,,,,,,,,,,,,Community,force:NU,,,,,,,,,,,,,force:yes -ON_Brampton_Business_Directory.csv,https://geohub.brampton.ca/datasets/brampton-business-directory/explore?location=43.730712%2C-79.750850%2C10.00,City of Brampton,https://creativecommons.org/licenses/by/4.0/,22-11-2021,,,COMPANY_NAME,PRODUCT_DESC,,,,,,,NAICS_DETAIL,,,,,lat,lon,X,Y,BUSINESS_FULL_ADDRESS,,,UNIT,STREET_NUM,STREET_NAME,STREET_DIRECTION,STREET_TYPE,force:Brampton,force:ON,POSTAL_CODE,WEBURL,,PHONE,,,FAX,TOTAL_EMPLOYEE,,,,DATE_EST_IN_CITY,force:no -ON_Caledon_Business_Directory.csv,Caledon Business Directory 2018 | Caledon Business Directory 2018 | Data Portal - Region of Peel (peelregion.ca) | https://data.peelregion.ca/datasets/caledon-business-directory-2018/explore,Regional Municipality of Peel,License | Data Portal - Region of Peel (peelregion.ca),29-03-2021,,,Name,,,,,,,,Bus_NAICS,NAICS_2,NAICS2desc,,,Latitude,Longitude,X,Y,Address,,,Unit,,,,,force:Caledon,force:ON,PostalCode,Website,Email,Telephone,,,Fax,EmplRange,,,,,force:no -ON_Cambridge_Business_Directory.csv,https://geohub.cambridge.ca/datasets/KitchenerGIS::business-directory/explore?location=43.431511%2C-80.473736%2C12.77,City of Kitchener,https://geohub.cambridge.ca/datasets/KitchenerGIS::business-directory/explore?location=43.431492%2C-80.473736%2C12.77,18-01-2022,Daily,,COMPANY_NAME,PRIMARY_NAICS_SECTOR,,PROFILE,ID,,,,PRIMARY_NAICS,SECONDARY_NAICS,PRIMARY_NAICS_DESCRIPTION,,,lat,lon,X,Y,,,,UNIT,STREET_NUMBER,STREET_NAME,,,force:Cambridge,force:ON,POSTAL_CODE,WEBSITE,EMAIL,PHONE,,TOLL_FREE,,TOTAL_EMPLOYEES,,,,YEAR_ESTABLISHED_ORIGINALLY,force:no -ON_Durham_Business_Directory.csv,https://opendata.durham.ca/datasets/business-directory/explore?location=44.131050%2C-78.898350%2C10.23,Regional Municipality of Durham,https://www.durham.ca/en/regional-government/resources/Documents/OpenDataLicenceAgreement.pdf,30-11-2020,Anually,,Business_Name,,,Business_Description,Business_Id,,,,NAICSCode,,NAICSCode_Desc,,,lat,lon,X,Y,,,,Unit_Number,Street_Number,Street_Name,Street_Direction,Street_Type,City,force:ON,Site_Postal_Code,Web_Address,,Telephone_Number,,,Fax_Number,,,,,,force:no -ON_Greater_Sudbury_Business_Licences.csv,https://opendata.greatersudbury.ca/datasets/0da48286504549e9b26d0572ac6f22c2/explore?showTable=true,City of Greater Sudbury,,22-01-2018,,,BUSINESS,CATEGORY,,,VENDORID,,,,,,,,,,,,,,,,,,,,,force:Greater Sudbury,force:ON,,,,WORK_PHONE_NO,,,,,,,,,force:no -ON_Hamilton_Licenced_Basic_Food_Shops.csv,https://open.hamilton.ca/datasets/59afd6534e4849ccae93c9ed0049a445_14/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,SUB_DESCRIPTION,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Hamilton_Licenced_Food_Establishments.csv,https://open.hamilton.ca/datasets/85c1b5c9e931470d94f0c9ff5acaa341_2/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,SUB_DESCRIPTION,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Hamilton_Licenced_Kennels_and_Pet_Shops.csv,https://open.hamilton.ca/datasets/c5a848d9c40f4e83acb1cd73ab9f4508_3/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Hamilton_Licenced_Lodging_Houses.csv,https://open.hamilton.ca/datasets/981c055e3c2448b3be3a4644993f59fc_4/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Hamilton_Licenced_Places_of_Amusement.csv,https://open.hamilton.ca/datasets/5de18a38cd37457dae49f22c0a9b76b3_7/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,SUB_DESCRIPTION,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Hamilton_Licenced_Public_Garages.csv,https://open.hamilton.ca/datasets/c1e7c884bbea4f26a32118ecf830b764_8/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,SUB_DESCRIPTION,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Hamilton_Licenced_Public_Halls.csv,https://open.hamilton.ca/datasets/044e4d91ba0f4fb2ba162dcd327e6dcc_9/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Hamilton_Licenced_Residential_Care_Facilities.csv,https://open.hamilton.ca/datasets/e37b13a002544e359350c31b2d48ee47_10/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Hamilton_Licenced_Salvage_Yards.csv,https://open.hamilton.ca/datasets/04317a5ccfe04dad98f8b7a35f3388d1_11/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Hamilton_Licenced_Second_Hand_Shops.csv,https://open.hamilton.ca/datasets/b1f09efe93a549d3b3f600d1d93b5305_12/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,force:no -ON_Kitchener_Business_Directory.csv,https://geohub.cambridge.ca/datasets/KitchenerGIS::business-directory/explore?location=43.431239%2C-80.473736%2C11.00,City of Cambridge,https://www.kitchener.ca/en/council-and-city-administration/open-data-licence.aspx,23-11-2021,,,COMPANY_NAME,PRIMARY_NAICS_SECTOR,,PROFILE,ID,,,,PRIMARY_NAICS,SECONDARY_NAICS,PRIMARY_NAICS_DESCRIPTION,,,lat,lon,X,Y,,,,UNIT,STREET_NUMBER,STREET_NAME,,,force:Kitchener,force:ON,POSTAL_CODE,WEBSITE,EMAIL,PHONE,,TOLL_FREE,,TOTAL_EMPLOYEES,,,,YEAR_ESTABLISHED_ORIGINALLY,force:no -ON_Mississauga_Business_Directory.csv,https://data.mississauga.ca/datasets/mississauga::2019-mississauga-business-directory/about,City of Mississauga,http://www5.mississauga.ca/research_catalogue/CityofMississauga_TermsofUse.pdf,03-03-2020,,,Name,NAICSTitle,,,ID,,,,NAICSCode,,NAICSDescr,,,,,,,Address,,,UnitNo,StreetNo,StreetName,,,force:Mississauga,force:ON,PostalCode,WebAddress,EMail,Phone,,TollFree,Fax,EmplRange,,,,,force:no -ON_oebd.csv,https://data.ontario.ca/dataset/ontario-environment-business-directory,Province of Ontario,https://www.ontario.ca/page/copyright-information-c-queens-printer-ontario,04-05-2020,,,Company Name,Sectors,,Description,,,,,,,,,,,,,,,,,,,,,,Location,force:ON,,Website,,,,,,,,,,,force:no -ON_Ottawa_Cultural_Businesses.csv,https://open.ottawa.ca/datasets/cultural-businesses,City of Ottawa,https://ottawa.ca/en/city-hall/open-transparent-and-accountable-government/open-data#open-data-licence-version-2-0,13-02-2021,,,NAME,SUB,,,ID,,,,,,,,,,,,,ADDRESS,,,,,,,,CITY,PROVINCE,PC,WEB_1,EMAIL,PHONE,,,,,,,,,force:no -ON_Ottawa_Street_Food_Vendors.csv,https://open.ottawa.ca/datasets/street-food-vendors/explore?location=45.398751%2C-75.710140%2C3.83&showTable=true,City of Ottawa,https://ottawa.ca/en/city-hall/open-transparent-and-accountable-government/open-data#open-data-licence-version-2-0,02-03-2020,,,Trade_Name,,,Concept,,,,,,,,,,Y,X,,,,,,,,,,,force:Ottawa,force:ON,,Website,,,,,,,,,,,force:no -ON_Pickering_Business_Directory.csv,https://opendata.pickering.ca/datasets/DurhamRegion::business-directory/explore?location=44.131050%2C-78.898350%2C10.23,Regional Municipality of Durham,https://www.durham.ca/en/regional-government/resources/Documents/OpenDataLicenceAgreement.pdf,30-11-2020,Anually,,Business_Name,Business_Description,,,Business_Id,,,,NAICSCode,,NAICSCode_Desc,,,lat,lon,Geo_X,Geo_Y,,,,Unit_Number,Street_Number,Street_Name,Street_Direction,Street_Type,City,force:ON,Site_Postal_Code,Web_Address,,Telephone_Number,,,Fax_Number,,,,,,force:no -ON_Toronto_Business_Licences.csv,https://open.toronto.ca/dataset/municipal-licensing-and-standards-business-licences-and-permits/,City of Toronto,https://open.toronto.ca/open-data-license/,19-01-2022,Daily,,Operating Name,Category,,,,,Licence No.,,,,,,,,,,,Licence Address Line 1,,,,,,,,Licence Address Line 2,force:ON,Licence Address Line 3,,,Business Phone,,,,,,,,,force:no -ON_Welland_Business_Directory.csv,https://open.welland.ca/datasets/83cab91d949a48fdbc26763dbe6c3778_2/explore,City of Welland,https://open.welland.ca/pages/terms-of-use,20-02-2021,,,Company,SectorDescription,,,ID,,,,,,,,,,,,,Address,,,,,,,,City,force:ON,PC,WebSite,Email,Telephone,Extension,,Fax,,FullTime,PartTime,Seasonal,Estab,force:no -ON_York_Region_Business_Directory.csv,https://insights-york.opendata.arcgis.com/documents/york::york-region-2019-business-directory/about,Regional Municipality of York,https://insights-york.opendata.arcgis.com/documents/york-region-open-data-licence/explore,13-08-2021,,,NAME,,,BUS_ACTIVITY_DESC,BUSINESSID,,,,PRIM_NAICS,SEC_NAICS,PRIM_NAICS_DESC,,,,,X_Coord,Y_Coord,FULL_ADDRESS,,MAIL_FULL_ADDRESS,UNIT_NUM,STREET_NUM,STREET_NAME,STREET_DIR,STREET_TYPE,force:York,force:ON,POST_CODE,WEBSITE,GEN_BUS_EMAIL,PHONE_NO,,TOLLFREE_NO,FAX_NO,EMPLOYEE_RANGE,,,,,force:no -QC_Etablissements.csv,https://www.donneesquebec.ca/recherche/dataset/registre-des-entreprises,Gouvernement du Québec,https://www.donneesquebec.ca/fr/licence/#CC-BY-SA-NC-4.0,02-01-2022,,,NOM_ETAB,DESC_ACT_ECON_ETAB,DESC_ACT_ECON_ETAB2,,NEQ,,,,,,,,,,,,,LIGN1_ADR,,,,,,,,LIGN2_ADR,force:QC,LIGN4_ADR,,,,,,,,,,,,force:no -QC_Sherbrooke_Entreprises.csv,https://www.donneesquebec.ca/recherche/dataset/repertoire-des-entreprises,Ville de Sherbrooke,https://www.donneesquebec.ca/licence/#cc-by,09-11-2021,,,entreprise,,,scian_principal,,,,,,,,,,,,,,,,,,no_civique,rue_local,,,force:Sherbrooke,force:QC,code_postal,,,entreprise_tel,,,,,,,,,force:no +localfile,source_url,provider,licence,last_updated,update_frequency,notes,business_name,business_sector,business_subsector,business_description,business_id_no,licence_number,licence_type,primary_NAICS,secondary_NAICS,NAICS_descr,alt_econ_act_code,alt_business_name,alt_econ_act_descrip,latitude,longitude,full_address,full_address_2,mailing_address,unit,street_no,street_name,street_direction,street_type,city,province,postal_code,country,business_website,email,telephone,telephone_extension,toll_free_telephone,fax,total_no_employees,no_full_time,no_part_time,no_seasonal,date_established,indigenous,status +AB_Banff_Business_Licences.csv,https://maps.banff.ca/opendata/,Town of Banff,,,,,BUSINESS_NAME,PROPOSED_BUSINESS,,,,LICENSE_NUMBER,,,,,,,,,,,,,UNIT,STREET_NUMBER,STREET_NAME,,,force:Banff,force:AB,,,,,BUSINESS_NUMBER,,,,,,,,START_DATE,force:no,ACTIVE +AB_Calgary_Business_Licences.csv,https://data.calgary.ca/Business-and-Economic-Activity/Calgary-Business-Licences/vdjc-pybd,City of Calgary,https://data.calgary.ca/stories/s/Open-Calgary-Terms-of-Use/u45n-7awa,18-01-2022,Daily,,TRADENAME,,,,,,LICENCETYPES,,,,,,,latitude,longitude,ADDRESS,,,,,,,,force:Calgary,force:AB,,,,,,,,,,,,,JOBCREATED,force:no,JOBSTATUSDESC +AB_Chestermere_Businesses.csv,https://data-chestermere.opendata.arcgis.com/datasets/businesses-2/explore?location=51.036600%2C-113.824000%2C13.01&showTable=true,City of Chestermere,,26-01-2021,,,name,factype,,,,,,,,,,,,lat,lon,fulladdr,,,,,,,,municipality,force:AB,,,agencyurl,,pocphone,,,,,,,,,force:no, +AB_Edmonton_Business_Licences.csv,https://data.edmonton.ca/Sustainable-Development/City-of-Edmonton-Business-Licenses/qhi4-bdpu,City of Edmonton,https://data.edmonton.ca/stories/s/City-of-Edmonton-Open-Data-Terms-of-Use/msh8-if28/,16-11-2021,,,Trade Name,Category,,,,Licence Number,,,,,,,,Latitude,Longitude,Address,,,,,,,,force:Edmonton,force:AB,,,,,,,,,,,,,,force:no,Licence Status +AB_Strathcona_Business_Directory.csv,https://data.strathcona.ca/Business-Economy/Business-Directory/mbdk-4nqc/data,Stathcona County,https://open.canada.ca/en/open-government-licence-canada,13-11-2021,,,Name,Sector,Industry,Group,,,,NAICS_Code,,,,,,Lat,Long,Address,,,,,,,,force:Strathcona,force:AB,,,Website,,Phone,,,,,,,,,force:no, +BC_Burnaby_Business_Licences_2.csv,https://data.burnaby.ca/datasets/business-licences,City of Burnaby,https://data.burnaby.ca/pages/open-government-licence,14-09-2021,,,TRADE_NAME,,,,,LICENCE_NUMBER,LICENCE_TYPE_NAME,,,,,ACCOUNT_NAME,,Y,X,,,,UNIT,HOUSE,STREET,,,force:Burnaby,force:BC,,,,,,,,,,,,,,force:no,LICENCE_STATUS +BC_Chilliwack_Business_Licences.csv,https://www.chilliwack.com/main/page.cfm?id=2331&odAction=viewItem&odID=142,City of Chilliwack,https://www.chilliwack.com/main/page.cfm?id=2391,18-01-2022,Weekly,,TRADE_NAME,LICENSE_DESCRIPTION,,,,,,,,,,,,,,ADDRESS,,,,,,,,force:Chilliwack,force:BC,,,,,PHONE,,,,,,,,,force:no, +BC_Indigenous_Business_Listings.csv,https://catalogue.data.gov.bc.ca/dataset/bc-indigenous-business-listings,Government of British Columbia,https://www2.gov.bc.ca/gov/content/data/open-data/open-government-licence-bc,25-10-2021,,,Business Name,Industry Sector,Type,Description,,,,,,,,,,Latitude,Longitude,Address,,Mailing Address,,,,,,City,force:BC,Postal Code,,Web Site,Email,Phone,,,Fax,Number of Employees,,,,Year Formed,Indigenous Ownership, +BC_Kelowna_Business_Licence.csv,https://opendata.kelowna.ca/datasets/business-licence/explore?location=49.899750%2C-119.458400%2C11.15,City of Kelowna,http://apps.kelowna.ca/images/opendata/opengovernmentlicence.pdf,07-12-2021,,,NAME,,,BUSINESS_DESC,,LICENCE_ACCOUNT_NUMBER,,,,,TYPE_CODE,,TYPE_DESCRIPTION,,,LICENSE_LOCATION,,,,,,,,force:Kelowna,force:BC,,,,,,,,,,,,,,force:no, +BC_Langley_Business_Licences.csv,https://data-tol.opendata.arcgis.com/datasets/business-licenses,Township of Langley,https://www.tol.ca/opengovlicense,16-02-2018,,,Business_Name,Licence_Desc,,,,,,NAICS_Primary,,NAICS_Primary_Desc,Category,,Category_Desc,Latitude,Longitude,,,Mailing_Address,Civic_Unit,Civic_House,Civic_Street,,,force:Township of Langley,force:BC,,,,,Phone,,,,,FullTime_Employees,PartTime_Employees,Seasonal_Employees,,force:no, +BC_Liquor_licences.csv,https://catalogue.data.gov.bc.ca/dataset/licensed-establishments-in-b-c,Government of British Columbia,https://www2.gov.bc.ca/gov/content/data/open-data/open-government-licence-bc,,,,establishment name,,,,,licence number,licence type,,,,,,,,,location address line 1,location address line 2,,,,,,,location address city,force:BC,location postal code,,,,,,,,,,,,,force:no, +BC_Maple_Ridge_Business_Licences.csv,https://opengov.mapleridge.ca/datasets/business-licences/data,City of Maple Ridge,https://opengov.mapleridge.ca/pages/open-government-licence,10-08-2021,,,BusinessName,BusinessType,BusinessSubType,BusinessDescription,BusinessID,,LicenceCategory,,,,,,,lat,lon,,,,Unit,House,Street,,,force:Maple Ridge,force:BC,PostalCode,,WebsiteAddress,,Phone1,,,,,,,,,force:no, +BC_Nanaimo_Business_Licences.csv,https://www.nanaimo.ca/open-data-catalogue/DataBrowser/nanaimo/BusinessLicences#,City of Nanaimo,https://www.nanaimo.ca/your-government/maps-data/open-data-catalogue/open-data-catalogue-licence,28-12-2010,,,TradeName,BusinessDescription,NAICSCategoryDescription,NAICSDetailDescription,LEGAL_ID,Licence,,NAICSCategory,NAICSDetail,EDO_NAICS_Desc,,,,Latitude,Longitude,,,,CivicAddressUnit,CivicAddressHouse,CivicAddressStreet,,,CivicAddressCity,CivicAddressProvince,,,,,,,,,,,,,,force:no, +BC_New_Westminster_Business_Licences.csv,http://opendata.newwestcity.ca/datasets/business-licenses-all,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,Daily,,BUSINESS_NAME,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,CIVIC_ADDRESS,,,,,,,,force:New Westminster,force:BC,,,,,,,,,,,,,YEAR_OPENED,force:no, +BC_New_Westminster_Business_Licences_(Childcare).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-childcare/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,CIVIC_ADDRESS,,,,,,,,force:New Westminster,force:BC,,,,,,,,,,,,,YEAR_OPENED,force:no, +BC_New_Westminster_Business_Licences_(Intermunicipal).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-intermunicipal/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,CIVIC_ADDRESS,,,,,,,,force:New Westminster,force:BC,,,,,,,,,,,,,YEAR_OPENED,force:no, +BC_New_Westminster_Business_Licences_(New_this_Year).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-new-this-year/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,CIVIC_ADDRESS,,,,,,,,force:New Westminster,force:BC,,,,,,,,,,,,,YEAR_OPENED,force:no, +BC_New_Westminster_Business_Licences_(Nonresidents).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-nonresidents/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,CIVIC_ADDRESS,,,,,,,,force:New Westminster,force:BC,,,,,,,,,,,,,YEAR_OPENED,force:no, +BC_New_Westminster_Business_Licences_(Residents).csv,https://data-60320-newwestcity.opendata.arcgis.com/datasets/business-licenses-residents/explore,City of New Westminster,http://opendata.newwestcity.ca/licence,19-01-2022,,,BUSINESS_NAME,,,,,LICENCE,,NAICS_CODE,,NAICS_DESCRIPTION,,,,,,CIVIC_ADDRESS,,,,,,,,force:New Westminster,force:BC,,,,,,,,,,,,,YEAR_OPENED,force:no, +BC_Port_Moody_Business_Directory.csv,https://data.portmoody.ca/maps/3579528aad9d40bd89db1a8bb98bfe35/explore?location=49.289850%2C-122.851150%2C14.07,City of Port Moody,https://www.portmoody.ca/en/city-hall/open-data-terms-of-use.aspx,21-02-2022,,,Business_Name,Business_Category,Business_Description,,,,,,,,,,,lat,lon,Address,,,,,,,,force:Port Moody,force:BC,,,Website_,Email,Phone_,,,,,,,,,force:no, +BC_Prince_George_Business_Licence.csv,https://data-cityofpg.opendata.arcgis.com/datasets/business-license-1/explore,City of Prince George ,https://pgmap.princegeorge.ca/opendata/CityofPrinceGeorge_Open_Government_License_Open_Data.pdf,19-01-2022,Daily,,TradeName,LicenceCategory,LicenceDesc,,,LicenceNumber,,,,,,,,,,,,,Unit,Address,StreeName,,,force:Prince George,force:BC,,,,,,,,,,,,,,force:no, +BC_Richmond_Based_Businesses.csv,https://www.richmond.ca/busdev/directory/search/bddownload.aspx,City of Richmond,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BusinessName,BusinessType,BusinessDescription,,,,,Naics,,NaicsDescription,,,,,,Address,,,,,,,,force:Richmond,force:BC,,,,,Phone,,,,,FullTime,PartTime,,,force:no, +BC_Squamish_Business_Licence_Annual_2021.csv,https://data.squamish.ca/datasets/business-licence-annual-2020/explore?location=49.752423%2C-123.140961%2C11.50,City of Squamish,https://squamish.ca/discover-squamish/maps-and-data/open-data/,15-11-2021,,,Business_Name,Licence_Type,,Licence_Description,,Business_Licence,Licence_Type,NAICS,NAICS_Sector,NAICS_Description,,,,lat,lon,Business_Location,,,,,,,,force:Squamish,force:BC,,,,,,,,,,,,,Date_Opened,force:no,Licence_Status +BC_Surrey_Business_Licences.csv,https://data.surrey.ca/dataset/business-licences,City of Surrey,https://data.surrey.ca/pages/open-government-licence-surrey,13-10-2021,Yearly,,Business Name,Products or Services,,,,,,,,,,,,Latitude,Longitude,,,,Unit,House Number,Road,,,force:Surrey,force:BC,Postal Code,,,,Phone,,,,,,,,,force:no, +BC_Vancouver_Business_Licences.csv,https://opendata.vancouver.ca/explore/dataset/business-licences/export/?disjunctive.status&disjunctive.businesssubtype,City of Vancouver,https://opendata.vancouver.ca/pages/licence/,18-01-2022,Daily,,BusinessName,BusinessType,BusinessSubType,,,LicenceNumber,,,,,,BusinessTradeName,,lat,long,,,,Unit,House,Street,,,City,Province,PostalCode,Country,,,,,,,NumberofEmployees,,,,,force:no,Status +BC_Victoria_Business_Licences.csv,https://opendata.victoria.ca/datasets/business-licences-past-5-years/data,City of Victoria,https://opendata.victoria.ca/pages/open-data-licence,03-12-2020,,,TradeName,Category,,Description,,LicenceNo,,,,,,,,LAT,LONG,FullAddress,,,Unit,House,Street,,,force:Victoria,force:BC,,,,,,,,,,,,,,force:no, +BC_Wineries.csv,https://catalogue.data.gov.bc.ca/dataset/bc-winery-locations,Government of British Columbia,https://www2.gov.bc.ca/gov/content/data/open-data/open-government-licence-bc,,,,NAME,force:Wineries,,,,,,,,,,,,,,ADDRESS,,,,,,,,CITY,force:BC,POSTALCODE,,,,,,,,,,,,,force:no, +Indigenous_Business_Directory.csv,https://www.sac-isc.gc.ca/rea-ibd,Indigenous Services Canada,https://www.canada.ca/en/transparency/terms.html,04-01-2019,,,Company Operating Name,,,Company Description,Company ID,,,Primary Industry NAICS Code,Alternate NAICS Codes,,,Company Legal Name,,,,Address 1,Address 2,,,,,,,City,Province,Postal Code,,URL,Email,Phone Number,,,Fax Number,,,,,,force:yes, +MB_Indigenous_AFOA.csv,https://www.afoamb.ca/about-us/corporate-members/,Aboriginal Financial Officers Association of Manitoba,,,,,name,,,,,,,,,,,,,,,,,,unit,street_number,street_name,,,city,province,postal_code,,,email,phone ,,,fax,,,,,,force:yes, +NB_Moncton_Grocery_Stores.csv,https://open.moncton.ca/datasets/grocery-stores/explore?location=46.089028%2C-64.771766%2C12.79&showTable=true,City of Moncton,https://ago-item-storage.s3.us-east-1.amazonaws.com/3ec310926cbd436cbaa609d8ee9fac15/Open_Data_Terms_of_Use.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAwaCXVzLWVhc3QtMSJHMEUCIQD4OImUnBbQKt7fZxWv7W%2B6Ll0XjtmL3AJFM2MgqBEWPQIgAzcTJ%2FZGwLoVaxScWIa8Sp8k3JLeFgbc7TDun%2BxNJiwqgwQIxP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2MDQ3NTgxMDI2NjUiDFaxpYcL1tc8NXa24irXA3PowJXr4ouiYvG0dCqHGbt0I4WJFf6cZaNkaY%2BN8D11SK8%2BefibeqQtIh3Vbm5M4rK0FpVgqOdlIqHi3A%2FBlys7iqKsTXSPlU0aI1b9vxLxDChYI4a9FFLv%2FifmtnLS84fmbf1HDVBRy5CIEzGNZhFL%2FRYinnmqOA1WrTdsDZtRJebU3iVAlRSBE%2B4ZFLGnmyejK6G8R2wA4jfI380x8c92oqz1gBaXAxpZRBTTYx2JvwwJFh0vwgGWY9WBpprFORFfILvOHYfGUVjucs1jzD3Ns4B5A%2FZ84ikRUQisC7towimIKF8R%2F3tBfHVImuKreqT3Vnk5oACFrjkGRJk8F4gJrjUNgKiEWbx2PPM6ER9SbJPcRijS9RaxG5VrQTeA4yhIUNxBcMd4SLkcBsLMTf4SAI7RxouJ%2Bv4jQAchSvu%2Bv4UCGobhKeu3ywfR5NFf7HFj3k78Ach%2Bsgqv2dDMeHVgUguHQwb%2BzgnyXe5EPfn9dNT5O4rjry%2BPnsDpTdRnA%2B98ruE7%2BrJP0ODPql4IzAPUE79BlUwr5MkEtgJPmbBtfvDnpk63fXLUoXL3Ifzs35OExv5Rkjk6Tc%2FWfs1STi0TksF9UTpeDKyYTW%2Fv13z6qXoLA1LPIjCZy9qMBjqlAWmFyJvYgkmrxwrcmJ1IjWo2yuzazKK%2F1wqwwJHiDn0Z8oq1k%2FcxbCKaO9v4bw5i6HBAANQR0Ds%2BGYhhu%2FK2C8N3sg4bxlfPI1zcBKyRL1ILBQ7J5MPSY4msMEnvGuFmJ8XecSWgKzcBEIdSSUWpcEyQiyg5reVVCEr%2F8DnpdAHspHZqIu8O1uldDuzl11VinPZUcdbOgTeZAn4jIPqAVBd6o8YpUA%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20211118T204142Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Credential=ASIAYZTTEKKE6PXCSKHH%2F20211118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=68ce5006077d3f204724edbd917e13fabdd01748d36d04b7abc01ce236d3ad01,23-03-2020,,,Name,Comment,,,,,,,,,,,,lat,lon,Address,,,,,,,,force:Moncton,force:NB,,,,,,,,,,,,,,force:no, +NB_Moncton_Ph_Pharmacies.csv,https://open.moncton.ca/datasets/pharmacies/explore?location=46.092990%2C-64.785448%2C12.68&showTable=true,City of Moncton,https://ago-item-storage.s3.us-east-1.amazonaws.com/3ec310926cbd436cbaa609d8ee9fac15/Open_Data_Terms_of_Use.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAwaCXVzLWVhc3QtMSJIMEYCIQCAdW%2Bag2UJXkrHPQH%2BrLi%2FNNPneGBq%2BkOzIFdY%2By%2FqyAIhAMEdtTZ2pqazx8FE7lsk3tvIMwSKdZxeBJ97AQEAks3tKoMECMX%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQABoMNjA0NzU4MTAyNjY1IgxK%2BkPSVpdRdQEV%2Fcwq1wMoLNv5Oqpdi%2BKbtXaVqt5PVe%2BNuO74Dku8vxIWorVwOVkhHLw1j9xlXFhYEoHVXnbdfjXdpO1JE4xaPUpv7P5wIP3epNOsiPDz2lyZaVgbGciBx3KyqJ%2B3CMuO5%2BqJlFfU3a2OsdI5RKRZMOD6rZmMs8wCtUfEYW3XfDjcc3fQEnMRvBsW9ACh4HTWlyHU7D1%2FWA1NlappMu0qFuSYm9nQfcXY9EmDSsS4aEDIyDeVGOGjS3LNaqzsDQqx82eAFZnd1v7%2BGBO0182Ik9I5Zbqo1jN1VZPfRN284rqCAsU95zo%2BP21NGNKLAnIU0xcTPd3b9%2BVBdzs3IUbF6ZaMqGZgBUt9ctBLFNppDSCQb4bNrWgcs%2FtHRqLK4Nd57w1FGFmpAq87yaTFY19ocm%2Bu0gGOAk0aeu1ihws4QtY%2B12%2BmHdsyy9E%2BYjO8hOp%2Bc4utSUExjTLcaGydxCxchveYlZ9GhiKqWiFLqutWQhZNL%2BwbEb04UPS0J%2FGH5csPeq7GHz7YRwAuQ27BiVDB3V4SIqDbflvCqhhkv7I4Qi79gmseXewGKnu4rDjWQdk5HCrddYxmADLwHxtYuDiJCHeZmSGgk1%2FUs9WYx1jS%2F%2FIQBBfy3b96SOJYKmkw9t7ajAY6pAFgjdaIMyNTraXpqkja443w0r6BKp9VtaIHgc9mrxl4i5XypAVYBHXvbtQKpAnc7u74ShGfBfkQI1eJMKsFf4ofaeN5qkkLLKiU6w2edrtIbArcB5RT1pbHigE7%2F7z2tr7dWoBXyEC8UmdDMjO6jxYKEQMs0FEATg3X%2FwxFhWKdP9kecXRzZWh%2BqkukycGH9qbyHzkd2I%2BQtXxMAHKOR2PTQrom1g%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20211118T204555Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Credential=ASIAYZTTEKKERCR5V7F5%2F20211118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=1031a04a5935401192056b030c256cfda974db29d168ca94628ae49000d13d83,19-03-2020,,,Name,Type,,,,,,,,,,,,lat,lon,Address,,,,,,,,force:Moncton,force:NB,,,,,Phone,,,,,,,,,force:no, +NB_Saint_John_Grocery_Stores.csv,https://catalogue-saintjohn.opendata.arcgis.com/datasets/grocery-stores/explore?location=45.278564%2C-66.049994%2C12.00&showTable=true,City of Saint John,,25-05-2020,,,Name,force:Grocery Store,,,,,,,,,,,,lat,lon,Address,,,,,,,,force:Saint John,force:NB,,,Website,,Telephone,,,,,,,,,force:no, +NT_Yellowknife_Business_Directory.csv,https://opendata.yellowknife.ca/home/details/0ead7112-bafe-4c0d-b0ca-b2220cc6d2a9,City of Yellowknife,https://www.yellowknife.ca/en/discovering-yellowknife/resources/geomatic_services/City_of_Yellowknife_Open_Data_LIcence__Terms_of_Use.pdf,No data,,,BUSINESSNAME,BUSINESSTYPE,,,,,,,,,,,,,,,,,MUNICIPAL ADDRESS,MUNICIPAL ADDRESS2,MUNICIPAL ADDRESS3,,,force:Yellowknife,force:NT,,,,EMAILADDRESS,PHONE,,,,,,,,,force:no, +NU_Indigenous_Business.csv,https://nni.gov.nu.ca/business/search/results/community,Government of Nunavut,https://nni.gov.nu.ca/privacy,,,,Name,,,,,,,,,,,,,,,,,,,,,,,Community,force:NU,,,,,,,,,,,,,,force:yes, +ON_Brampton_Business_Directory.csv,https://geohub.brampton.ca/datasets/brampton-business-directory/explore?location=43.730712%2C-79.750850%2C10.00,City of Brampton,https://creativecommons.org/licenses/by/4.0/,22-11-2021,,,COMPANY_NAME,PRODUCT_DESC,,,,,,NAICS_DETAIL,,,,,,lat,lon,BUSINESS_FULL_ADDRESS,,,UNIT,STREET_NUM,STREET_NAME,STREET_DIRECTION,STREET_TYPE,CITY,PROVINCE,POSTAL_CODE,,WEBURL,,PHONE,,,FAX,TOTAL_EMPLOYEE,,,,DATE_EST_IN_CITY,force:no, +ON_Caledon_Business_Directory.csv,Caledon Business Directory 2018 | Caledon Business Directory 2018 | Data Portal - Region of Peel (peelregion.ca) | https://data.peelregion.ca/datasets/caledon-business-directory-2018/explore,Regional Municipality of Peel,License | Data Portal - Region of Peel (peelregion.ca),29-03-2021,,,Name,,,,,,,Bus_NAICS,NAICS_2,NAICS2desc,,,,Latitude,Longitude,Address,,,Unit,,,,,MUN,force:ON,PostalCode,,Website,Email,Telephone,,,Fax,EmplRange,,,,,force:no, +ON_Cambridge_Business_Directory.csv,https://geohub.cambridge.ca/datasets/KitchenerGIS::business-directory/explore?location=43.431511%2C-80.473736%2C12.77,City of Kitchener,https://geohub.cambridge.ca/datasets/KitchenerGIS::business-directory/explore?location=43.431492%2C-80.473736%2C12.77,18-01-2022,Daily,,COMPANY_NAME,PRIMARY_NAICS_SECTOR,,PROFILE,ID,,,PRIMARY_NAICS,SECONDARY_NAICS,PRIMARY_NAICS_DESCRIPTION,,,,lat,lon,,,,UNIT,STREET_NUMBER,STREET_NAME,,,force:Cambridge,force:ON,POSTAL_CODE,,WEBSITE,EMAIL,PHONE,,TOLL_FREE,,TOTAL_EMPLOYEES,,,,YEAR_ESTABLISHED_ORIGINALLY,force:no, +ON_Durham_Business_Directory.csv,https://opendata.durham.ca/datasets/business-directory/explore?location=44.131050%2C-78.898350%2C10.23,Regional Municipality of Durham,https://www.durham.ca/en/regional-government/resources/Documents/OpenDataLicenceAgreement.pdf,30-11-2020,Anually,,Business_Name,,,Business_Description,Business_Id,,,NAICSCode,,NAICSCode_Desc,,,,lat,lon,,,,Unit_Number,Street_Number,Street_Name,Street_Direction,Street_Type,City,Province,Site_Postal_Code,,Web_Address,,Telephone_Number,,,Fax_Number,,,,,,force:no, +ON_Greater_Sudbury_Business_Licences.csv,https://opendata.greatersudbury.ca/datasets/0da48286504549e9b26d0572ac6f22c2/explore?showTable=true,City of Greater Sudbury,,22-01-2018,,,BUSINESS,CATEGORY,,,VENDORID,,,,,,,,,,,,,,,,,,,force:Greater Sudbury,force:ON,,,,,WORK_PHONE_NO,,,,,,,,,force:no, +ON_Hamilton_Licenced_Basic_Food_Shops.csv,https://open.hamilton.ca/datasets/59afd6534e4849ccae93c9ed0049a445_14/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,SUB_DESCRIPTION,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Hamilton_Licenced_Food_Establishments.csv,https://open.hamilton.ca/datasets/85c1b5c9e931470d94f0c9ff5acaa341_2/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,SUB_DESCRIPTION,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Hamilton_Licenced_Kennels_and_Pet_Shops.csv,https://open.hamilton.ca/datasets/c5a848d9c40f4e83acb1cd73ab9f4508_3/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Hamilton_Licenced_Lodging_Houses.csv,https://open.hamilton.ca/datasets/981c055e3c2448b3be3a4644993f59fc_4/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Hamilton_Licenced_Places_of_Amusement.csv,https://open.hamilton.ca/datasets/5de18a38cd37457dae49f22c0a9b76b3_7/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,SUB_DESCRIPTION,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Hamilton_Licenced_Public_Garages.csv,https://open.hamilton.ca/datasets/c1e7c884bbea4f26a32118ecf830b764_8/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,SUB_DESCRIPTION,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Hamilton_Licenced_Public_Halls.csv,https://open.hamilton.ca/datasets/044e4d91ba0f4fb2ba162dcd327e6dcc_9/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Hamilton_Licenced_Residential_Care_Facilities.csv,https://open.hamilton.ca/datasets/e37b13a002544e359350c31b2d48ee47_10/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Hamilton_Licenced_Salvage_Yards.csv,https://open.hamilton.ca/datasets/04317a5ccfe04dad98f8b7a35f3388d1_11/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Hamilton_Licenced_Second_Hand_Shops.csv,https://open.hamilton.ca/datasets/b1f09efe93a549d3b3f600d1d93b5305_12/explore,City of Hamilton,https://www.hamilton.ca/city-initiatives/strategies-actions/open-data-licence-terms-and-conditions,15-10-2021,,,BUSINESS_NAME,,,,,LICENSE_NUMBER,LICENSE_TYPE,,,,,,,,,BUSINESS_ADDRESS,,,,,,,,force:Hamilton,force:ON,,,,,,,,,,,,,,force:no, +ON_Kitchener_Business_Directory.csv,https://geohub.cambridge.ca/datasets/KitchenerGIS::business-directory/explore?location=43.431239%2C-80.473736%2C11.00,City of Cambridge,https://www.kitchener.ca/en/council-and-city-administration/open-data-licence.aspx,23-11-2021,,,COMPANY_NAME,PRIMARY_NAICS_SECTOR,,PROFILE,ID,,,PRIMARY_NAICS,SECONDARY_NAICS,PRIMARY_NAICS_DESCRIPTION,,,,lat,lon,,,,UNIT,STREET_NUMBER,STREET_NAME,,,force:Kitchener,force:ON,POSTAL_CODE,,WEBSITE,EMAIL,PHONE,,TOLL_FREE,,TOTAL_EMPLOYEES,,,,YEAR_ESTABLISHED_ORIGINALLY,force:no, +ON_Mississauga_Business_Directory.csv,https://data.mississauga.ca/datasets/mississauga::2019-mississauga-business-directory/about,City of Mississauga,http://www5.mississauga.ca/research_catalogue/CityofMississauga_TermsofUse.pdf,03-03-2020,,,Name,NAICSTitle,,,ID,,,NAICSCode,,NAICSDescr,,,,,,Address,,,UnitNo,StreetNo,StreetName,,,force:Mississauga,force:ON,PostalCode,,WebAddress,EMail,Phone,,TollFree,Fax,EmplRange,,,,,force:no, +ON_oebd.csv,https://data.ontario.ca/dataset/ontario-environment-business-directory,Province of Ontario,https://www.ontario.ca/page/copyright-information-c-queens-printer-ontario,04-05-2020,,,Company Name,Sectors,,Description,,,,,,,,,,,,,,,,,,,,Location,force:ON,,,Website,,,,,,,,,,,force:no, +ON_Ottawa_Cultural_Businesses.csv,https://open.ottawa.ca/datasets/cultural-businesses,City of Ottawa,https://ottawa.ca/en/city-hall/open-transparent-and-accountable-government/open-data#open-data-licence-version-2-0,13-02-2021,,,NAME,SUB,,,ID,,,,,,,NAME_FR,,,,ADDRESS,,,,,,,,CITY,PROVINCE,PC,,WEB_1,EMAIL,PHONE,,,,,,,,,force:no, +ON_Ottawa_Street_Food_Vendors.csv,https://open.ottawa.ca/datasets/street-food-vendors/explore?location=45.398751%2C-75.710140%2C3.83&showTable=true,City of Ottawa,https://ottawa.ca/en/city-hall/open-transparent-and-accountable-government/open-data#open-data-licence-version-2-0,02-03-2020,,,Trade_Name,,,Concept,,,,,,,,,,Y,X,,,,,,,,,force:Ottawa,force:ON,,,Website,,,,,,,,,,,force:no, +ON_Pickering_Business_Directory.csv,https://opendata.pickering.ca/datasets/DurhamRegion::business-directory/explore?location=44.131050%2C-78.898350%2C10.23,Regional Municipality of Durham,https://www.durham.ca/en/regional-government/resources/Documents/OpenDataLicenceAgreement.pdf,30-11-2020,Anually,,Business_Name,Business_Description,,,Business_Id,,,NAICSCode,,NAICSCode_Desc,,,,lat,lon,,,,Unit_Number,Street_Number,Street_Name,Street_Direction,Street_Type,City,Province,Site_Postal_Code,,Web_Address,,Telephone_Number,,,Fax_Number,,,,,,force:no, +ON_Toronto_Business_Licences.csv,https://open.toronto.ca/dataset/municipal-licensing-and-standards-business-licences-and-permits/,City of Toronto,https://open.toronto.ca/open-data-license/,19-01-2022,Daily,,Operating Name,Category,,,,Licence No.,,,,,,,,,,Licence Address Line 1,,,,,,,,Licence Address Line 2,force:ON,Licence Address Line 3,,,,Business Phone,,,,,,,,,force:no, +ON_Welland_Business_Directory.csv,https://open.welland.ca/datasets/83cab91d949a48fdbc26763dbe6c3778_2/explore,City of Welland,https://open.welland.ca/pages/terms-of-use,20-02-2021,,,Company,SectorDescription,,,ID,,,,,,,,,,,Address,,,,,,,,City,Prov,PC,,WebSite,Email,Telephone,Extension,,Fax,,FullTime,PartTime,Seasonal,Estab,force:no, +ON_York_Region_Business_Directory.csv,https://insights-york.opendata.arcgis.com/documents/york::york-region-2019-business-directory/about,Regional Municipality of York,https://insights-york.opendata.arcgis.com/documents/york-region-open-data-licence/explore,13-08-2021,,,NAME,,,BUS_ACTIVITY_DESC,BUSINESSID,,,PRIM_NAICS,SEC_NAICS,PRIM_NAICS_DESC,,,,,,FULL_ADDRESS,,MAIL_FULL_ADDRESS,UNIT_NUM,STREET_NUM,STREET_NAME,STREET_DIR,STREET_TYPE,MUNICIPALITY,PROVINCE,POST_CODE,COUNTRY,WEBSITE,GEN_BUS_EMAIL,PHONE_NO,,TOLLFREE_NO,FAX_NO,EMPLOYEE_RANGE,,,,,force:no, +QC_Etablissements.csv,https://www.donneesquebec.ca/recherche/dataset/registre-des-entreprises,Gouvernement du Québec,https://www.donneesquebec.ca/fr/licence/#CC-BY-SA-NC-4.0,02-01-2022,,,NOM_ETAB,DESC_ACT_ECON_ETAB2,,,NEQ,,,,,,COD_ACT_ECON,,DESC_ACT_ECON_ETAB,,,LIGN1_ADR,,,,,,,,LIGN2_ADR,force:QC,LIGN4_ADR,,,,,,,,,,,,,force:no, +QC_Sherbrooke_Entreprises.csv,https://www.donneesquebec.ca/recherche/dataset/repertoire-des-entreprises,Ville de Sherbrooke,https://www.donneesquebec.ca/licence/#cc-by,09-11-2021,,,entreprise,,,scian_principal,,,,,,,,,,,,,,,,no_civique,rue_local,,,force:Sherbrooke,force:QC,code_postal,,,,entreprise_tel,,,,,,,,,force:no, diff --git a/scripts/Businesses/2-OpenTabulate/verify_dtypes.ipynb b/scripts/Businesses/2-OpenTabulate/verify_dtypes.ipynb new file mode 100644 index 00000000..bf96f27e --- /dev/null +++ b/scripts/Businesses/2-OpenTabulate/verify_dtypes.ipynb @@ -0,0 +1,385 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Import packages\n", + "import pandas as pd\n", + "from tqdm import tqdm\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# Load in variablemap\n", + "var_map = pd.read_csv('/home/jovyan/ODBiz/2-OpenTabulate/variablemap.csv')\n", + "localfiles = var_map['localfile'].values\n", + "var_map = var_map.set_index('localfile')\n", + "# street_no = var_map.loc['BC_Vancouver_Business_Licences.csv', 'street_no']\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "expected_dtypes = {\n", + "'localfile': None,\n", + "'source_url': None,\n", + "'provider': None,\n", + "'licence': None,\n", + "'last_updated': None,\n", + "'update_frequency': None,\n", + "'notes': None,\n", + "'business_name': None,\n", + "'business_sector': None,\n", + "'business_subsector': None,\n", + "'business_description': None,\n", + "'business_id_no': None,\n", + "'licence_number': None,\n", + "'licence_type': None,\n", + "'primary_NAICS': int,\n", + "'secondary_NAICS': int,\n", + "'NAICS_descr': None,\n", + "'alt_econ_act_code': None,\n", + "'alt_econ_act_descrip': None,\n", + "'latitude': float,\n", + "'longitude': float,\n", + "'full_address': None,\n", + "'full_address_2': None,\n", + "'mailing_address': None,\n", + "'unit': None,\n", + "'street_no': int,\n", + "'street_name': None,\n", + "'street_direction': None,\n", + "'street_type': None,\n", + "'city': None,\n", + "'province': None,\n", + "'postal_code': None,\n", + "'country': None,\n", + "'business_website': None,\n", + "'email': None,\n", + "'telephone': None,\n", + "'telephone_extension': None,\n", + "'toll_free_telephone': None,\n", + "'fax': None,\n", + "'total_no_employees': None,\n", + "'no_full_time': None,\n", + "'no_part_time': None,\n", + "'no_seasonal': None,\n", + "'date_established': None,\n", + "'indigenous': None,\n", + "'status': None\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loaded in /home/jovyan/ODBiz/2-OpenTabulate/data/output/AB_Strathcona_Business_Directory.csv\n", + "\n", + "----------------------------------------------------------------------------\n", + "\n" + ] + } + ], + "source": [ + "csv_dir = '/home/jovyan/ODBiz/2-OpenTabulate/data/output'\n", + "i = 0\n", + "localfile = localfiles[i]\n", + "localfile = 'AB_Strathcona_Business_Directory.csv'\n", + "# for localfile in localfiles:\n", + "if True:\n", + " filename = f'{csv_dir}/{localfile}'\n", + " df = pd.read_csv(filename, dtype = {'primary_NAICS': 'Int64'})\n", + " print(f'Loaded in {filename}')\n", + " for k in expected_dtypes:\n", + " if k in df.columns:\n", + " k_dtype = df[k].dtype\n", + " conditions = [\n", + " df[k].dtype == expected_dtypes[k], # column's dtype matches expected\n", + " expected_dtypes[k] is None, # Expected dtype was left blank\n", + " expected_dtypes[k] == int and df[k].dtype == 'Int64', # pandas alias for the int dtype to include nan\n", + " ]\n", + " if not(any(conditions)):\n", + " print(f'WARNING: The column `{k}` has dtype `{str(k_dtype)}`. Expected `{str(expected_dtypes[k])}`')\n", + " print('\\n----------------------------------------------------------------------------\\n')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idxlocalfilelongitudelatitudebusiness_namebusiness_sectorbusiness_subsectorbusiness_descriptionprimary_NAICSbusiness_websitetelephoneindigenousfull_addresscityprovinceprovider
00AB_Strathcona_Business_Directory.csv-113.35067253.558726Petro-Canada IncNaNNaNNaNNaNNaNNaNno401 PETROLEUM WAYStrathconaABStathcona County
11AB_Strathcona_Business_Directory.csv-113.22089453.526966Caldon Management Associates LtdNaNNaNNaNNaNNaN780-464-5569no52501 RNG RD 225StrathconaABStathcona County
22AB_Strathcona_Business_Directory.csv-112.97833353.465523Bushman IncNaNNaNNaNNaNhttp://www.bushman-inc.caNaNno21061A WYE RDStrathconaABStathcona County
33AB_Strathcona_Business_Directory.csv-113.07917353.777201PembinaNaNNaNNaNNaNNaNNaNno55418 RNG RD 214StrathconaABStathcona County
44AB_Strathcona_Business_Directory.csv-113.31784953.563241VacantNaNNaNNaN0.0NaNNaNnoNaNStrathconaABStathcona County
\n", + "
" + ], + "text/plain": [ + " idx localfile longitude latitude \\\n", + "0 0 AB_Strathcona_Business_Directory.csv -113.350672 53.558726 \n", + "1 1 AB_Strathcona_Business_Directory.csv -113.220894 53.526966 \n", + "2 2 AB_Strathcona_Business_Directory.csv -112.978333 53.465523 \n", + "3 3 AB_Strathcona_Business_Directory.csv -113.079173 53.777201 \n", + "4 4 AB_Strathcona_Business_Directory.csv -113.317849 53.563241 \n", + "\n", + " business_name business_sector business_subsector \\\n", + "0 Petro-Canada Inc NaN NaN \n", + "1 Caldon Management Associates Ltd NaN NaN \n", + "2 Bushman Inc NaN NaN \n", + "3 Pembina NaN NaN \n", + "4 Vacant NaN NaN \n", + "\n", + " business_description primary_NAICS business_website \\\n", + "0 NaN NaN NaN \n", + "1 NaN NaN NaN \n", + "2 NaN NaN http://www.bushman-inc.ca \n", + "3 NaN NaN NaN \n", + "4 NaN 0.0 NaN \n", + "\n", + " telephone indigenous full_address city province \\\n", + "0 NaN no 401 PETROLEUM WAY Strathcona AB \n", + "1 780-464-5569 no 52501 RNG RD 225 Strathcona AB \n", + "2 NaN no 21061A WYE RD Strathcona AB \n", + "3 NaN no 55418 RNG RD 214 Strathcona AB \n", + "4 NaN no NaN Strathcona AB \n", + "\n", + " provider \n", + "0 Stathcona County \n", + "1 Stathcona County \n", + "2 Stathcona County \n", + "3 Stathcona County \n", + "4 Stathcona County " + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.set_option('display.max_columns', None)\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "[ , 0, 441210, 621210, 541215, 238350, 561730, 112110, 484110,\n", + " 611690,\n", + " ...\n", + " 484120, 486910, 531110, 562210, 418410, 414460, 524290, 712120, 339110,\n", + " 484239]\n", + "Length: 413, dtype: Int64" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.unique(df['primary_NAICS'])" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "print(df['primary_NAICS'].dtype == 'Int64')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "data_exploration (odbiz)", + "language": "python", + "name": "myenv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/3-Merging/1-ExtractOpenTabOutput.py b/scripts/Businesses/3-Merging/1-ExtractOpenTabOutput.py new file mode 100644 index 00000000..509f2174 --- /dev/null +++ b/scripts/Businesses/3-Merging/1-ExtractOpenTabOutput.py @@ -0,0 +1,11 @@ +import shutil as su + +def main(): + in_dir_name = '/home/jovyan/ODBizOpenTabCompressedOutput/OpenTabCompressedOutput.zip' + out_dir_name = '/home/jovyan/ODBiz/3-Merging/input' + + su.unpack_archive(in_dir_name, out_dir_name) + print(f'Files unzipped to {out_dir_name}') + +if __name__ == '__main__': + main() diff --git a/scripts/Businesses/3-Merging/FilterNoAddrInfo.py b/scripts/Businesses/3-Merging/FilterNoAddrInfo.py new file mode 100644 index 00000000..93998b07 --- /dev/null +++ b/scripts/Businesses/3-Merging/FilterNoAddrInfo.py @@ -0,0 +1,89 @@ +''' +FilterNoAddrInfo.py + +Filters out entries with insufficient address info for geocoding +''' + +import pandas as pd +import numpy as np +from tqdm import tqdm +from pytz import timezone +from datetime import datetime as dt + +def main(): + # Retrieve today's date + ET = 'Canada/Eastern' + start_time = dt.now(timezone(ET)) + today = str(start_time)[:10] + inputFileDate = today + # inputFileDate = '2022-07-04' + + # File path names + inputFileName = f"/home/jovyan/ODBiz/3-Merging/output/2-ODBiz_merged_{inputFileDate}.csv" + outputFileName = f"/home/jovyan/ODBiz/3-Merging/output/3-ODBiz_merged_{today}.csv" + df_no_info_path = f'/home/jovyan/ODBiz/3-Merging/double_check/no_addr_info.csv' + + # Load in the csv + total_lines = 802564 + chunksize = 100000 + df = pd.concat([chunk for chunk in tqdm(pd.read_csv(inputFileName, chunksize=chunksize, dtype = str), desc='Loading data', total=total_lines//chunksize+1)]) + print('Filling in NA as empty string') + old_time = dt.now(timezone(ET)) + df = df.fillna('') + new_time = dt.now(timezone(ET)) + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Check each row to see if there's are addresses/geocoord info + print('Concatenating address info') + addr_keys = ['full_address', + 'full_address_2', + 'mailing_address', + 'unit', + 'street_no', + 'street_name', + 'street_direction', + 'street_type', + 'city', + 'postal_code'] + df['addr_info'] = df[addr_keys].agg('_'.join, axis = 1, ) + old_time = new_time + new_time = dt.now(timezone(ET)) + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Mark entries with insufficient address info + print('Checking for blanks') + blank_match = '_' * (len(addr_keys)-1) + df['has_addr_info'] = df['addr_info'] != blank_match + old_time = new_time + new_time = dt.now(timezone(ET)) + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Drop entries with insufficient address info + print('Dropping entries with insufficient address info') + df_no_info = df[df['has_addr_info'] == False] + df_no_info.to_csv(df_no_info_path, index = False) + print(f'Saving df_no_info to {df_no_info_path}') + + df = df[df['has_addr_info'] == True] + old_time = new_time + new_time = dt.now(timezone(ET)) + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Drop the temp columns + df = df.drop(['addr_info', 'has_addr_info'], axis = 'columns') + + # Save the df to csv + print(f'Saving df to {outputFileName}') + df.to_csv(outputFileName, index = False) + old_time = new_time + new_time = dt.now(timezone(ET)) + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + print(f'df saved to {outputFileName}') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/Businesses/3-Merging/MergingBiz.py b/scripts/Businesses/3-Merging/MergingBiz.py new file mode 100644 index 00000000..cdb5cce9 --- /dev/null +++ b/scripts/Businesses/3-Merging/MergingBiz.py @@ -0,0 +1,322 @@ +''' +merging_biz.py + +This script reads in, then merges all the output data from the 2-OpenTabulate/Output folder except for specified excluded files. + +This script also standardizes the following values: + - postal codes + - province names + - country names + +A unique index is generated and assigned to every entry to help with data processing further along the pipeline beyond this point. +As a result, some basic deduplication is performed. If two rows have an exact match with ALL of the following columns, then only the first row is kept: + 'business_name', + 'licence_number', + 'business_id_no', + 'primary_NAICS', + 'full_address', + 'full_address_2', + 'province', + 'business_sector', + 'licence_type' + +Output: +A .csv file, both containing the same merged data. +''' + +# Import required packages +import pandas as pd +from os import listdir +from hashlib import blake2b +from datetime import datetime as dt +from pytz import timezone +import openpyxl +from tqdm import tqdm # For status bars + +# Memory viewer +# import os, psutil +# process = psutil.Process(os.getpid()) +# # print(process.memory_info().rss) # in bytes +# ram_time = 10 +# print(psutil.cpu_percent(ram_time)) + +def GetHash(x): + ''' + Output the hash of the string x + ''' + h=blake2b(digest_size=10) + h.update(x.encode()) + return h.hexdigest() + +def main(): + print('----------------------------------------------------------------------------------------------------------------------------') + # Toggle a "double checking" mode + double_check_mode = True + + # Retrieve today's date + ET = 'Canada/Eastern' + start_time = dt.now(timezone(ET)) + today = str(start_time)[:10] + + # File path names + pdir="/home/jovyan/ODBiz/3-Merging/input" + outName = f"/home/jovyan/ODBiz/3-Merging/output/1-ODBiz_merged_{today}" + csv_rows_path = f'/home/jovyan/ODBiz/3-Merging/double_check/csv_rows' + std_prov_path = f'/home/jovyan/ODBiz/3-Merging/double_check/standardized_province_names.csv' + dups_only_path = f"/home/jovyan/ODBiz/3-Merging/double_check/ODBiz_dups_only.csv" + + if double_check_mode: + csv_rows_cols = ['localfile', 'num_rows'] + csv_rows_df = pd.DataFrame(columns = csv_rows_cols) + + # Duplicate keys + # Use these columns to determine obvious duplicates and + # to generate our indices + dup_keys = ['business_name', + 'licence_number', + 'business_id_no', + 'primary_NAICS', + 'full_address', + 'full_address_2', + 'province', + 'business_sector', + 'licence_type' + ] + + # List files to exclude from merging (by listing the file names) + excluded_files = [] + + # Begin merging csvs + DFS=[] + files=[f for f in listdir(pdir) if f.endswith('.csv')] + for f in tqdm(files, desc='Merging files'): + if f in excluded_files: + continue + df_temp=pd.read_csv(f'{pdir}/{f}',dtype=str, low_memory=False) + DFS.append(df_temp) + + # Count the number of rows in each csv + if double_check_mode: + num_rows = df_temp.shape[0] + new_row = pd.DataFrame(data = {'localfile': [f], 'num_rows': [num_rows]}) + csv_rows_df = pd.concat([csv_rows_df,new_row]) + + if double_check_mode: + new_row = pd.DataFrame(data = {'localfile': ['Total'], 'num_rows': [csv_rows_df['num_rows'].sum()]}) + csv_rows_df = pd.concat([csv_rows_df,new_row]) + csv_rows_df.to_csv(f'{csv_rows_path}.csv', index = False) + print(f'File saved to {csv_rows_path}.csv') + csv_rows_df = csv_rows_df.sort_values('num_rows', ascending = False) + csv_rows_df.to_csv(f'{csv_rows_path}_sorted.csv', index = False) + print(f'File saved to {csv_rows_path}_sorted.csv') + + + # Reorder the columns + print('Reordering columns...') + old_time = dt.now() + df_unordered=pd.concat(DFS, ignore_index = True) + del DFS + col_order = [ 'idx', + 'localfile', + 'business_name', + 'alt_business_name', + 'business_sector', + 'business_subsector', + 'business_description', + 'business_id_no', + 'licence_number', + 'licence_type', + 'primary_NAICS', + 'secondary_NAICS', + 'NAICS_descr', + 'alt_econ_act_code', + 'alt_econ_act_descrip', + 'latitude', + 'longitude', + 'full_address', + 'full_address_2', + 'mailing_address', + 'unit', + 'street_no', + 'street_name', + 'street_direction', + 'street_type', + 'city', + 'province', + 'postal_code', + 'country', + 'business_website', + 'email', + 'telephone', + 'telephone_extension', + 'toll_free_telephone', + 'fax', + 'total_no_employees', + 'no_full_time', + 'no_part_time', + 'no_seasonal', + 'date_established', + 'indigenous', + 'status', + 'provider' + ] + df=df_unordered[col_order] + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Standardize province names + print('Standardizing Province Names...') + provs_dict={ + 'Province of Alberta': 'AB', + 'Province of British Columbia': 'BC', + 'Province of Ontario': 'ON', + 'Province of Québec': 'QC', + 'Province of Saskatchewan': 'SK', + 'Province of Nova Scotia': 'NS', + 'Province of Prince Edward Island': 'PE', + 'Alberta':'AB', + 'British Columbia':'BC', + '`': 'BC', # 1 business keeps setting their province to ` and I have determined that they’re located in BC + 'Manitoba':'MB', + 'New Brunswick':'NB', + 'Newfoundland and Labrador':'NL', + 'Newfoundland And Labrador':'NL', + 'NF':'NL', + 'Nova Scotia':'NS', + 'Northwest Territories':'NT', + 'Nunavut':'NU', + 'Ontario':'ON', + 'ONTARIO':'ON', + 'Prince Edward Island':'PE', + 'Quebec':'QC', + 'QB':'QC', + 'PQ':'QC', + 'Saskatchewan':'SK', + 'Yukon Territories':'YT', + 'Yukon':'YT'} + + df['province'] = df['province'].replace(provs_dict) + df['province'] = df['province'].str.upper() + if double_check_mode: + std_prov_df = pd.DataFrame({'post_standarization_count': df['province'].value_counts()}) + std_prov_df.index.name = 'prov_code' + std_prov_df.to_csv(std_prov_path) + print(f'File saved to {std_prov_path}') + old_time = new_time + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Standardize Country Names + print('Standardizing Country Names...') + country_dict = { + '^CA$': 'CANADA' + } + for key in (country_dict): + df['country'] = df['country'].str.replace(key, country_dict[key], regex = True) + df['country'] = df['country'].str.upper() + old_time = new_time + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + #make postal codes consistent + print('Making Postal Codes consistent...') + df['postal_code']=(df['postal_code'].str.replace(' ','').str.upper()) + old_time = new_time + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # #excel turns ranges with hyphens to dates, so replace with double hyphens + print('Fixing hyphens...') + df['unit']=df['unit'].str.replace('-','--') + df['unit']=df['unit'].str.replace('---','--') + df['total_no_employees']=df['total_no_employees'].str.replace('-','--') + df['total_no_employees']=df['total_no_employees'].str.replace('---','--') + old_time = new_time + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + #finally, replace index with fresh index + df['idx_basic']=range(1,1+len(df)) + + def make_temp_col(df): + print('Creating temp column:') + df_temp=df.copy() + cols=dup_keys + # del_list=[" ","-","'","."] + del_list = r"[\s\-'\.]" # Regex equivalent of above (this is faster) + + for col in tqdm(cols, desc='Capitalize values and remove punctuation characters'): + df_temp[col]=df_temp[col].str.upper() # ~ 1.5s + df_temp[col]=df_temp[col].str.replace(del_list,'',regex=True) # ~ 2s + + print('Fill blanks with NULL...') + old_time = dt.now() + df_temp[cols]=df_temp[cols].fillna('NULL') # ~ 5s + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + df_temp['temp'] = '' + for col in tqdm(cols, desc='Appending dup_key columns together and assign to temp column'): + df_temp['temp'] += df_temp[col] + if col != cols[-1]: + df_temp['temp'] += '-' + + return df_temp['temp'] + + df['temp']=make_temp_col(df) + print('Applying hashing to get new indicies...') + df['idx']=(df['temp'].apply(GetHash)) + + # Fill in geo_source. + print('Filling in geo_source column') + if ~('geo_source' in df.columns): + df['geo_source'] = '' + df.loc[~df.latitude.isnull() & ((df.geo_source.isnull()) | (df.geo_source == '')), 'geo_source']='Source' + + # Mark duplicates + print('Marking Duplicates...') + old_time = dt.now() + dup_keys = 'idx' + df['duplicated'] = df.duplicated(subset=dup_keys, keep='first') + dup_count = df['duplicated'].sum() + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Drop duplicates + print('Dropping duplicates') + old_time = dt.now() + df_dups_only = df[df.duplicated(subset=dup_keys, keep=False)] + df = df.drop_duplicates(dup_keys) + print(f'{dup_count} duplicate rows dropped') + new_time = dt.now() + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Remove temporary columns + df = df.drop( labels = [ 'duplicated', + 'idx_basic', + 'temp'], + axis = 'columns') + + # Write dataframe to csv + print(f'Writing {len(df)} dataframe entries to csv. This will take a while and unfortunately no easy progress bar solutions were available here...') + old_time = dt.now() + df_dups_only.to_csv(f'{dups_only_path}',index=False) + print(f'Duplicates only csv saved to {dups_only_path}') + df.to_csv(f'{outName}.csv',index=False) + print(f'File saved to {outName}.csv') + new_time = dt.now() + exetime = new_time - old_time + print(f'csv took {exetime.seconds} s to save') + tot_exe_time = dt.now(timezone(ET)) - start_time + print(f'Execution finished in {tot_exe_time.total_seconds()} seconds') + +if __name__ == '__main__': + main() diff --git a/scripts/Businesses/3-Merging/README_merging.md b/scripts/Businesses/3-Merging/README_merging.md new file mode 100644 index 00000000..6ff15eb0 --- /dev/null +++ b/scripts/Businesses/3-Merging/README_merging.md @@ -0,0 +1,56 @@ +# 3-Merging +The purpose of this step is to combine all our datasets, which are currently spread throughout multiple csvs, into one csv. Some more cleaning is also performed at this step since it's a lot easier to clean our entire dataset than it is to clean several csvs individually first and then merge them together + +# merging_main.ipynb +Hitting "Run all" on this Jupyter notebook will run all the necessary scripts in the correct order as explained below + +## `MergingBiz.py` +This script reads in, then merges all the output data from the 2-OpenTabulate/Output folder except for specified excluded files. It cleans and standardizes some columns and performs basic deduplication. + +## `RemoveInvalidCoordinates.py` +Sets invalid coordinates to blank values to indicate that an entry needs to be geocoded. + +## `FilterNoAddrInfo` +Removes entries with insufficient address info for geocoding + +## `fix_NAICS_codes` +Cleans up the primary NAICS code column + +--- + +## Dropped rows +The scripts below will drop entries if they meet certain conditions that we deem as being irrelevant given the scope of this project + +### `MergingBiz.py` +This script performs basic deduplication. If a set of rows have exact matches with ALL of the following columns, then only one row is kept in the set, the script tries to keep the most recent row: +- 'business_name', +- 'licence_number', +- 'business_id_no', +- 'primary_NAICS', +- 'full_address', +- 'full_address_2', +- 'province', +- 'business_sector', +- 'licence_type' + +### `RemoveInvalidCoordinates.py` +This script doesn't drop any rows, it simply flags rows that have invalid coordinates by setting their coordinate values as blank. + +### `FilterNoAddrInfo` +This script checks the following columns: +- 'full_address', +- 'full_address_2', +- 'mailing_address', +- 'unit', +- 'street_no', +- 'street_name', +- 'street_direction', +- 'street_type', +- 'city', +- 'postal_code' + +If ALL of the above columns are blank/NA, then the row is removed. + +### `fix_NAICS_codes` +This script doesn't drop any rows. + diff --git a/scripts/Businesses/3-Merging/RemoveInvalidCoordinates.py b/scripts/Businesses/3-Merging/RemoveInvalidCoordinates.py new file mode 100644 index 00000000..d6f28e9c --- /dev/null +++ b/scripts/Businesses/3-Merging/RemoveInvalidCoordinates.py @@ -0,0 +1,108 @@ +''' +RemoveInvalidCoordinates.py + +Sets invalid coordinates to nan +''' + +import pandas as pd +import numpy as np +from tqdm import tqdm +from pytz import timezone +from datetime import datetime as dt + +def main(): + double_check_mode = True + + # Retrieve today's date + ET = 'Canada/Eastern' + start_time = dt.now(timezone(ET)) + today = str(start_time)[:10] + inputFileDate = today + # inputFileDate = '2022-07-04' + + # File path names + inputFileName = f"/home/jovyan/ODBiz/3-Merging/output/1-ODBiz_merged_{inputFileDate}.csv" + outputFileName = f"/home/jovyan/ODBiz/3-Merging/output/2-ODBiz_merged_{today}.csv" + inv_coords_csv = f'/home/jovyan/ODBiz/3-Merging/double_check/invalid_coords_affected_rows.csv' + coord_ranges_csv = f'/home/jovyan/ODBiz/3-Merging/double_check/coord_ranges.csv' + + # Load in the csv + total_lines = 802564 + chunksize = 10000 + df = pd.concat([chunk for chunk in tqdm(pd.read_csv(inputFileName, chunksize=chunksize, dtype = str), desc='Loading data', total=total_lines//chunksize+1)]) + + # Force lat/lon to be floats + df[["latitude", "longitude"]] = df[["latitude", "longitude"]].apply(pd.to_numeric, errors = 'coerce') + df['valid_coord'] = False + # df_copy = df.copy() # For debugging + + if double_check_mode: + coord_ranges_df = pd.DataFrame(columns = ['coord', 'min', 'max']) + new_rows = pd.DataFrame({ 'coord': ['original latitude', 'original longitude'], + 'min': [df['latitude'].min(), df['longitude'].min()], + 'max': [df['latitude'].max(), df['longitude'].max()] + }) + coord_ranges_df = pd.concat([coord_ranges_df, new_rows]) + print('') + + # Fix invalid longitudes + print('Fixing invalid coordinates and marking valid ones') + old_time = dt.now(timezone(ET)) + wrong_lons = [123.0058404, 120.8552187] + invalid_lons = df['longitude'].isin(wrong_lons) + df_inval_lons = df[invalid_lons] + df.loc[invalid_lons, 'longitude'] = -df_inval_lons['longitude'] + df.loc[invalid_lons, 'valid_coord'] = True + + # Mark valid coordinates + is_valid_coords = ((df['latitude'] > 0) & (df['longitude'] < 0)) | (df['latitude'] is np.nan) + df.loc[is_valid_coords, 'valid_coord'] = True + + # old_time = new_time + new_time = dt.now(timezone(ET)) + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + export_idx = False + + # df = df.set_index('idx') + # export_idx = True + + + # Force invalid coords to be blank + print('Forcing invalid coords to be blank') + df_invalid_coords = df[~df['valid_coord']].copy() + df_invalid_coords.to_csv(inv_coords_csv, index = export_idx) + print(f'Affected rows saved to {inv_coords_csv}') + df.loc[df_invalid_coords.index, ['longitude', 'latitude']] = np.nan + old_time = new_time + new_time = dt.now(timezone(ET)) + exetime = new_time - old_time + print(f'Done in {exetime.seconds} s') + + # Output a file to do a sanity check on coordinate ranges + if double_check_mode: + new_rows = pd.DataFrame({ 'coord': ['new latitude', 'new longitude'], + 'min': [df['latitude'].min(), df['longitude'].min()], + 'max': [df['latitude'].max(), df['longitude'].max()] + }) + coord_ranges_df = pd.concat([coord_ranges_df, new_rows]) + + new_rows = pd.DataFrame({ 'coord': ['expected latitude', 'expected longitude'], + 'min': [40 , -141], + 'max': [84 , -50] + }) + coord_ranges_df = pd.concat([coord_ranges_df, new_rows]) + + coord_ranges_df.to_csv(coord_ranges_csv, index = False) + print(f'File saved to {coord_ranges_csv}') + + # Drop the valid_coord column + df = df.drop('valid_coord', axis = 'columns') + + # Save df to csv + df.to_csv(outputFileName, index = export_idx) + print(f'df saved to {outputFileName}') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/Businesses/3-Merging/fix_NAICS_codes.py b/scripts/Businesses/3-Merging/fix_NAICS_codes.py new file mode 100644 index 00000000..a52a911f --- /dev/null +++ b/scripts/Businesses/3-Merging/fix_NAICS_codes.py @@ -0,0 +1,59 @@ +''' +fix_NAICS_codes.py + +Removes trailing zeros for all primary NAICS code values with strictly less than 6 digits +This is because those NAICS codes would cause NAICS queries to return empty +''' + +import pandas as pd +import numpy as np +from tqdm import tqdm +from pytz import timezone +from datetime import datetime as dt + +def main(): + # Retrieve today's date + ET = 'Canada/Eastern' + start_time = dt.now(timezone(ET)) + today = str(start_time)[:10] + inputFileDate = today + + # File path names + inputFileName = f"/home/jovyan/ODBiz/3-Merging/output/3-ODBiz_merged_{inputFileDate}.csv" + outputFileName = f"/home/jovyan/ODBiz/3-Merging/output/4-ODBiz_merged_{today}.csv" + + # Load in the csv + total_lines = 802383 + chunksize = 100000 + df = pd.concat([chunk for chunk in tqdm(pd.read_csv(inputFileName, chunksize=chunksize, dtype = str), desc='Loading data', total=total_lines//chunksize+1)]) + print(f'Loaded in {df.shape[0]} rows') + + # Remove invalid NAICS values + df['primary_NAICS'] = df['primary_NAICS'].str.replace('.0', '', regex = False) + df['primary_NAICS'] = df['primary_NAICS'].replace('TBD', np.nan, regex = False) + df['primary_NAICS'] = df['primary_NAICS'].replace('tbd', np.nan, regex = False) + df['primary_NAICS'] = df['primary_NAICS'].replace('-', np.nan, regex = False) + temp = df['primary_NAICS'].str.split(r'\s\-\s*', n = 1, regex = True, expand = True) + df[['primary_NAICS', 'NAICS_descr2']] = temp + df['primary_NAICS'] = df['primary_NAICS'].astype('Int64') + df['primary_NAICS'] = df['primary_NAICS'].abs() + + # Trailing zero and strictly less than 6 digits results in empty query, truncate! + df['invalid_NAICS_query'] = (df['primary_NAICS'] % 10 == 0) & (df['primary_NAICS'] // 100000 == 0) + df.loc[df['invalid_NAICS_query'] == True, 'primary_NAICS'] = df.loc[df['invalid_NAICS_query'] == True, 'primary_NAICS']//10 + + # Drop the temp columns + df = df.drop('invalid_NAICS_query', axis = 'columns') + + # Save df to file + df.to_csv(outputFileName, index = False) + print(f'Resulting df has {df.shape[0]} rows') + print(f'File saved to {outputFileName}') + + # Display execution time + end_time = dt.now(timezone(ET)) + exetime = end_time - start_time + print(f'Execution finished in {exetime.seconds} s') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/Businesses/3-Merging/merging_biz.py b/scripts/Businesses/3-Merging/merging_biz.py deleted file mode 100644 index f480fe09..00000000 --- a/scripts/Businesses/3-Merging/merging_biz.py +++ /dev/null @@ -1,272 +0,0 @@ -''' -merging_biz.py - -This script reads in, then merges all the output data from the 2-OpenTabulate/Output folder except for specified excluded files. - -This script also standardizes the following values: - - NAICS values - - province names - - Telephone? - - ... - -This script also filters out datasets of the following criteria: - - ... - -A unique index is generated and assigned to every entry to help with data processing further along the pipeline beyond this point. - -Output: -A .csv file, both containing the same merged data. -''' - -# Import required packages -import pandas as pd -from os import listdir -from hashlib import blake2b -from datetime import datetime as dt -from pytz import timezone -import openpyxl - -# Memory viewer -import os, psutil -process = psutil.Process(os.getpid()) -# print(process.memory_info().rss) # in bytes -ram_time = 10 -# print(psutil.cpu_percent(ram_time)) - -def GetHash(x): - ''' - Output the hash of the string x - ''' - h=blake2b(digest_size=10) - h.update(x.encode()) - return h.hexdigest() - -def main(): - # Retrieve today's date - # today = dt.date.today() - today = dt.now(timezone('Canada/Eastern')) - today = str(today)[:10] - - # File path names - pdir="/home/jovyan/ODBiz/2-OpenTabulate/data/output" - outName = f"/home/jovyan/ODBiz/3-Merging/ODBiz_merged_{today}" - - # Duplicate keys - # Use these columns to determine obvious duplicates and - # to generate our indices - dup_keys = ['business_name', - 'licence_number', - 'business_id_no', - 'primary_NAICS', - 'full_address', - 'full_address_2', - 'province' - ] - - #read in all parsed files and concatenate together - # sources=['ab','bc','mb','nb','nl','ns','nt','nu','on','pe','qc','sk','yt', 'supplementary_files'#,'esdc' - # ] - excluded_files = [] - - DFS=[] - # for s in sources: - files=[f for f in listdir(pdir) if f.endswith('.csv')] - for f in files: - if f in excluded_files: - continue - # df_temp=pd.read_csv("{}/{}/{}".format(pdir,s,f),dtype=str, low_memory=False) - df_temp=pd.read_csv(f'{pdir}/{f}',dtype=str, low_memory=False) - DFS.append(df_temp) - - print('A') - df_unordered=pd.concat(DFS, ignore_index = True) - del DFS - col_order = [ 'idx', - 'localfile', - 'business_name', - 'business_sector', - 'business_subsector', - 'business_description', - 'business_id_no', - 'licence_number', - 'licence_type', - 'primary_NAICS', - 'secondary_NAICS', - 'NAICS_descr', - 'alt_econ_act_code', - 'alt_econ_act_descrip', - 'latitude', - 'longitude', - 'full_address', - 'full_address_2', - 'mailing_address', - 'unit', - 'street_no', - 'street_name', - 'street_direction', - 'street_type', - 'city', - 'province', - 'postal_code', - 'business_website', - 'email', - 'telephone', - 'telephone_extension', - 'toll_free_telephone', - 'fax', - 'total_no_employees', - 'no_full_time', - 'no_part_time', - 'no_seasonal', - 'date_established', - 'indigenous', - 'provider' - ] - # test = -39 - # print(col_order[test]) - print('B') - # print(psutil.cpu_percent(ram_time)) # in bytes - df = pd.DataFrame() - for i in col_order: - print(i) - df[i]=df_unordered[i] - del df_unordered[i] - # df=df_unordered[col_order] - print('C') - # print(psutil.cpu_percent(ram_time)) # in bytes - - # #standardise ISCEDs: - # ISCEDS=['ISCED010','ISCED020','ISCED1','ISCED2','ISCED3','ISCED4+',] - # for I in ISCEDS: - # df[I]=df[I].str.replace('Y','1', regex=False) - # df[I]=df[I].str.replace('N','0', regex=False) - # df[I]=df[I].str.replace('1.0','1', regex=False) - # df[I]=df[I].str.replace('0.0','0', regex=False) - - # #standardise province names - # df.loc[df.provider=='Province of Alberta','province']='AB' - # df.loc[df.provider=='Province of British Columbia','province']='BC' - # df.loc[df.provider=='Province of Ontario','province']='ON' - # df.loc[df.provider=='Province of Québec','province']='QC' - # df.loc[df.provider=='Province of Saskatchewan','province']='SK' - # df.loc[df.provider=='Province of Nova Scotia','province']='NS' - # df.loc[df.provider=='Province of Prince Edward Island','province']='PE' - - # provs_dict={'Alberta':'AB', - # 'British Columbia':'BC', - # 'Manitoba':'MB', - # 'New Brunswick':'NB', - # 'Newfoundland and Labrador':'NL', - # 'Nova Scotia':'NS', - # 'Northwest Territories':'NT', - # 'Nunavut':'NU', - # 'Ontario':'ON', - # 'Prince Edward Island':'PE', - # 'Quebec':'QC', - # 'Saskatchewan':'SK', - # 'Yukon Territories':'YT', - # 'Yukon':'YT'} - - - # for key in provs_dict: - # df['province'] = df['province'].str.replace(key, provs_dict[key],regex=False) - - # #standardise language entries - # df['language']=df['language'].str.replace('Intensive French Integrated French','French', regex=False) - # df['language']=df['language'].str.replace('Late Immersion Integrated French','French', regex=False) - # df['language']=df['language'].str.replace('Intensive French Intergrated French','French', regex=False) - # df['language']=df['language'].str.replace('Francophone','French', regex=False) - # df['language']=df['language'].str.replace('French','French', regex=False) - # df['language']=df['language'].str.replace('Intensive French','French', regex=False) - # df['language']=df['language'].str.replace('Integrated French','French', regex=False) - # df['language']=df['language'].str.replace('Intergrated French','French', regex=False) - # df['language']=df['language'].str.replace('Inregrated French','French', regex=False) - # df['language']=df['language'].str.replace('Franco','French', regex=False) - # df['language']=df['language'].str.replace('Anglo','English', regex=False) - # # raise NotImplementedError('Language standardization not yet implemented') - - # #fix NS city field with "NS" appended to it - # df.loc[df.province=='NS','city']=df.loc[df.province=='NS','city'].str.rstrip(' NS') - - #make postal codes consistent - df['postal_code']=df['postal_code'].str.replace(' ','').str.upper() - - # #excel turns grade ranges with hyphens to dates, so replace with double hyphens - # df['grade_range']=df['grade_range'].str.replace('-','--') - # df['grade_range']=df['grade_range'].str.replace('---','--') - # df['grade_range']=df['grade_range'].str.replace('Pre--K','Pre-K') - - # #Drop entries that shouldn't be included - # drop_list=['Home-based School', 'Home Based School', 'StrongStart BC'] - - # for d in drop_list: - # df.drop(df.loc[df['facility_name']==d].index, inplace=True) - - # # If the school doesn't offer K--12 education, drop it - # df['is_trade_school'] = False - # grade_cols = ['ISCED020','ISCED1','ISCED2','ISCED3'] - # for i, row in df.iterrows(): - # sum_so_far = 0 - # for j in row[grade_cols]: - # if not(pd.isna(j)): - # sum_so_far += int(j) - # # print(sum_so_far) - # if sum_so_far == 0: - # # print(i) - # df.loc[i, 'is_trade_school'] = True - - # df.drop(df.loc[df['is_trade_school']==True].index, inplace=True) - - # # Drop adult schools - # qc_adult_schools = '9_OrgImm_Anglo_Adu' - # df.drop(df.loc[df['facility_type']==qc_adult_schools].index, inplace=True) - - # Drop duplicates - df['duplicated'] = df.duplicated(subset=dup_keys, keep='first') - dup_exists = True in df['duplicated'] - print(f'Does at least 1 obvious duplicate exist? {dup_exists}') - - # # Drop temp columns - # df = df.drop(columns = ['is_trade_school', 'duplicated']) - - #finally, replace index with fresh index - df['idx_basic']=range(1,1+len(df)) - - def make_temp_col(df): - df_temp=df.copy() - cols=dup_keys - del_list=[" ","-","'","."] - for col in cols: - - df_temp[col]=df_temp[col].str.upper() - df_temp[col]=df_temp[col].fillna('NULL') - - for i in del_list: - df_temp[col]=df_temp[col].str.replace(i,'',regex=False) - - df_temp['temp'] = '' - for col in cols: - df_temp['temp'] += df_temp[col] - if col != cols[-1]: - df_temp['temp'] += '-' - - # df_temp['temp']=df_temp['source_id']+'-'+df_temp['facility_name']+'-'+df_temp['address_str']+'-'+df_temp['provider'] - return df_temp['temp'] - - df['temp']=make_temp_col(df) - df['idx']=df['temp'].apply(GetHash) - - #fill in geo_method. - if ~('geo_source' in df.columns): - df['geo_source'] = '' - df.loc[~df.latitude.isnull() & df.geo_source.isnull(), 'geo_source']='Source' - - #print(len(df), 'entries in database') - - # Write dataframe to csv - df.to_csv(f'{outName}.csv',index=False) - print(f'File saved to {outName}.csv') - print('Done') - -if __name__ == '__main__': - main() diff --git a/scripts/Businesses/3-Merging/merging_main.ipynb b/scripts/Businesses/3-Merging/merging_main.ipynb new file mode 100644 index 00000000..aa716fd8 --- /dev/null +++ b/scripts/Businesses/3-Merging/merging_main.ipynb @@ -0,0 +1,291 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import MergingBiz\n", + "import RemoveInvalidCoordinates\n", + "import FilterNoAddrInfo\n", + "import fix_NAICS_codes\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# ExtractOpenTabOutput.main()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "----------------------------------------------------------------------------------------------------------------------------\n", + "Merging files: 100%|██████████| 61/61 [00:04<00:00, 14.78it/s]\n", + "File saved to /home/jovyan/ODBiz/3-Merging/double_check/csv_rows.csv\n", + "File saved to /home/jovyan/ODBiz/3-Merging/double_check/csv_rows_sorted.csv\n", + "Reordering columns...\n", + "Done in 1 s\n", + "Standardizing Province Names...\n", + "File saved to /home/jovyan/ODBiz/3-Merging/double_check/standardized_province_names.csv\n", + "Done in 1 s\n", + "Standardizing Country Names...\n", + "Done in 0 s\n", + "Making Postal Codes consistent...\n", + "Done in 0 s\n", + "Fixing hyphens...\n", + "Done in 1 s\n", + "Creating temp column:\n", + "Capitalize values and remove punctuation characters: 100%|██████████| 9/9 [00:10<00:00, 1.12s/it]\n", + "Fill blanks with NULL...\n", + "Done in 5 s\n", + "Appending dup_key columns together and assign to temp column: 100%|██████████| 9/9 [00:02<00:00, 3.62it/s]\n", + "Applying hashing to get new indicies...\n", + "Filling in geo_source column\n", + "Marking Duplicates...\n", + "Done in 0 s\n", + "Dropping duplicates\n", + "60204 duplicate rows dropped\n", + "Done in 2 s\n", + "Writing 803765 dataframe entries to csv. This will take a while and unfortunately no easy progress bar solutions were available here...\n", + "Duplicates only csv saved to /home/jovyan/ODBiz/3-Merging/double_check/ODBiz_dups_only.csv\n", + "File saved to /home/jovyan/ODBiz/3-Merging/output/1-ODBiz_merged_2022-08-29.csv\n", + "csv took 12 s to save\n", + "Execution finished in 46.937354 seconds\n" + ] + } + ], + "source": [ + "MergingBiz.main()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Loading data: 100%|██████████| 81/81 [00:04<00:00, 17.61it/s]\n", + "\n", + "Fixing invalid coordinates and marking valid ones\n", + "Done in 0 s\n", + "Forcing invalid coords to be blank\n", + "Affected rows saved to /home/jovyan/ODBiz/3-Merging/double_check/invalid_coords_affected_rows.csv\n", + "Done in 8 s\n", + "File saved to /home/jovyan/ODBiz/3-Merging/double_check/coord_ranges.csv\n", + "df saved to /home/jovyan/ODBiz/3-Merging/output/2-ODBiz_merged_2022-08-29.csv\n" + ] + } + ], + "source": [ + "RemoveInvalidCoordinates.main()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Loading data: 100%|██████████| 9/9 [00:04<00:00, 2.05it/s]\n", + "Filling in NA as empty string\n", + "Done in 4 s\n", + "Concatenating address info\n", + "Done in 7 s\n", + "Checking for blanks\n", + "Done in 0 s\n", + "Dropping entries with insufficient address info\n", + "Saving df_no_info to /home/jovyan/ODBiz/3-Merging/double_check/no_addr_info.csv\n", + "Done in 1 s\n", + "Saving df to /home/jovyan/ODBiz/3-Merging/output/3-ODBiz_merged_2022-08-29.csv\n", + "Done in 11 s\n", + "df saved to /home/jovyan/ODBiz/3-Merging/output/3-ODBiz_merged_2022-08-29.csv\n" + ] + } + ], + "source": [ + "FilterNoAddrInfo.main()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Loading data: 100%|██████████| 9/9 [00:04<00:00, 2.04it/s]\n", + "Loaded in 803584 rows\n", + "Resulting df has 803584 rows\n", + "File saved to /home/jovyan/ODBiz/3-Merging/output/4-ODBiz_merged_2022-08-29.csv\n", + "Execution finished in 19 s\n" + ] + } + ], + "source": [ + "fix_NAICS_codes.main()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "most_recent_filepath = /home/jovyan/ODBiz/3-Merging/output/4-ODBiz_merged_2022-08-29.csv\nMost recent merged file saved to /home/jovyan/ODBiz/4-Parsing/input/ODBiz_Merged.csv\n" + ] + } + ], + "source": [ + "# Move the most recent merged file to 4-Parsing\n", + "import re \n", + "import os \n", + "import shutil\n", + "import pandas as pd\n", + "from tqdm import tqdm\n", + "from datetime import datetime\n", + "from dateutil.parser import parse\n", + "\n", + "# Find the latest merged file\n", + "most_recent_date = datetime.min\n", + "most_recent_iter = 0\n", + "merged_output_dir = '/home/jovyan/ODBiz/3-Merging/output'\n", + "parsing_input_dir = '/home/jovyan/ODBiz/4-Parsing/input'\n", + "for f in os.listdir(merged_output_dir):\n", + " if f.endswith('.csv'):\n", + " date_search = re.search('(\\d*)-ODBiz_merged_(\\d{4}-\\d{2}-\\d{2})', f)\n", + " if date_search:\n", + " iteration = date_search.group(1)\n", + " file_date = parse(date_search.group(2))\n", + " if file_date > most_recent_date:\n", + " most_recent_date = (file_date)\n", + " most_recent_iter = iteration\n", + " elif file_date == most_recent_date and iteration > most_recent_iter:\n", + " most_recent_iter = iteration\n", + "\n", + "most_recent_filename = f'{most_recent_iter}-ODBiz_merged_{most_recent_date.date()}.csv'\n", + "most_recent_filepath = f'{merged_output_dir}/{most_recent_filename}'\n", + "\n", + "# Update the parsing/input directory to have the latest merged file\n", + "if os.path.exists(parsing_input_dir):\n", + " shutil.rmtree(parsing_input_dir)\n", + "os.makedirs(parsing_input_dir)\n", + "output_filepath = f'{parsing_input_dir}/ODBiz_Merged.csv'\n", + " \n", + "# # Copy over only a subset of the df\n", + "# chunksize = 100000\n", + "# for df in pd.read_csv(most_recent_filepath, chunksize=chunksize, dtype = str):\n", + "# df.to_csv(output_filepath, index = False)\n", + "# print(f'A subset of the most recent merged file has been saved to {output_filepath}')\n", + "# break\n", + "\n", + "# Copy over the entire df\n", + "shutil.copyfile(most_recent_filepath, output_filepath)\n", + "print(f'most_recent_filepath = {most_recent_filepath}')\n", + "print(f'Most recent merged file saved to {output_filepath}')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/tmp/ipykernel_27461/1156949041.py:1: DtypeWarning: Columns (3,4,5,6,7,8,9,11,12,13,14,17,18,19,20,21,22,23,24,27,28,29,30,31,33,34,35,39,41,43,44) have mixed types. Specify dtype option on import or set low_memory=False.\n df = pd.read_csv('/home/jovyan/ODBiz/4-Parsing/input/ODBiz_Merged.csv')\n" + ] + } + ], + "source": [ + "df = pd.read_csv('/home/jovyan/ODBiz/4-Parsing/input/ODBiz_Merged.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Index(['idx', 'localfile', 'business_name', 'alt_business_name',\n", + " 'business_sector', 'business_subsector', 'business_description',\n", + " 'business_id_no', 'licence_number', 'licence_type', 'primary_NAICS',\n", + " 'secondary_NAICS', 'NAICS_descr', 'alt_econ_act_code',\n", + " 'alt_econ_act_descrip', 'latitude', 'longitude', 'full_address',\n", + " 'full_address_2', 'mailing_address', 'unit', 'street_no', 'street_name',\n", + " 'street_direction', 'street_type', 'city', 'province', 'postal_code',\n", + " 'country', 'business_website', 'email', 'telephone',\n", + " 'telephone_extension', 'toll_free_telephone', 'fax',\n", + " 'total_no_employees', 'no_full_time', 'no_part_time', 'no_seasonal',\n", + " 'date_established', 'indigenous', 'status', 'provider', 'geo_source',\n", + " 'NAICS_descr2'],\n", + " dtype='object')" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "name": "python3813jvsc74a57bd0e14a6e65307f8f691692612d68f6800491e991619d81311b752057c43593328e", + "display_name": "Python 3.8.13 64-bit ('odbiz': conda)" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + }, + "metadata": { + "interpreter": { + "hash": "3f6acfd5c7a89dd4516208ed2cd5283b5177bf58d22f895010c388a779688e5d" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/scripts/Businesses/3-Merging/postMergedDataViewing.ipynb b/scripts/Businesses/3-Merging/postMergedDataViewing.ipynb new file mode 100644 index 00000000..52d4314f --- /dev/null +++ b/scripts/Businesses/3-Merging/postMergedDataViewing.ipynb @@ -0,0 +1,4690 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:23:32.692744Z", + "iopub.status.busy": "2022-07-28T17:23:32.692109Z", + "iopub.status.idle": "2022-07-28T17:23:33.140238Z", + "shell.execute_reply": "2022-07-28T17:23:33.139446Z", + "shell.execute_reply.started": "2022-07-28T17:23:32.692673Z" + } + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from tqdm import tqdm\n", + "from datetime import datetime as dt\n", + "from pytz import timezone\n", + "from IPython.display import display\n", + "import numpy as np\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:23:33.141721Z", + "iopub.status.busy": "2022-07-28T17:23:33.141228Z", + "iopub.status.idle": "2022-07-28T17:23:41.030247Z", + "shell.execute_reply": "2022-07-28T17:23:41.029366Z", + "shell.execute_reply.started": "2022-07-28T17:23:33.141694Z" + } + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Loading data: 100%|██████████| 81/81 [00:09<00:00, 8.87it/s]Successfully loaded /home/jovyan/ODBiz/3-Merging/output/3-ODBiz_merged_2022-08-12.csv\n", + "df has 803584 rows\n", + "\n" + ] + } + ], + "source": [ + "# Load in the merged dataframe\n", + "\n", + "ET = 'Canada/Eastern'\n", + "start_time = dt.now(timezone(ET))\n", + "today = str(start_time)[:10]\n", + "inputFileDate = today\n", + "inputFileDate = '2022-08-12'\n", + "\n", + "mergedFilePathName = f'/home/jovyan/ODBiz/3-Merging/output/3-ODBiz_merged_{inputFileDate}.csv'\n", + "total_lines = 802383\n", + "chunksize = 10000\n", + "# df = pd.read_csv(mergedFilePathName, low_memory=False)\n", + "df = pd.concat([chunk for chunk in tqdm(pd.read_csv(mergedFilePathName, chunksize=chunksize, dtype=str), \n", + " desc='Loading data', \n", + " total=total_lines//chunksize+1)\n", + " ])\n", + "num_of_rows = df.shape[0]\n", + "\n", + "print(f'Successfully loaded {mergedFilePathName}')\n", + "print(f'df has {num_of_rows} rows')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "File saved to /home/jovyan/ODBiz/3-Merging/double_check/NAICS_description_confirmations.csv\n" + ] + } + ], + "source": [ + "# For verifying that removed text in NAICS formatting is redundant\n", + "# Generates a csv of NAICS codes with descriptions attached\n", + "NAICS_match = df['primary_NAICS'].str.contains(r'\\s\\-\\s.*', '', regex = True, na = False)\n", + "NAICS_df = pd.unique(df.loc[NAICS_match, 'primary_NAICS'])\n", + "NAICS_df = pd.DataFrame(data = {'NAICS': NAICS_df})\n", + "x = NAICS_df['NAICS'].str.split('-', expand = True, n = 2)\n", + "for i in x.columns:\n", + " x[i] = x[i].str.strip()\n", + "NAICS_df[['code', 'descrip', 'spill']] = x\n", + "\n", + "pd.options.display.max_columns = None\n", + "max_rows = 100\n", + "pd.options.display.max_rows = max_rows\n", + "# x\n", + "NAICS_csv_path = '/home/jovyan/ODBiz/3-Merging/double_check/NAICS_description_confirmations.csv'\n", + "NAICS_df.to_csv(NAICS_csv_path, index = False)\n", + "print(f'File saved to {NAICS_csv_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " idx business_name \\\n", + "59470 d2cceab844c620d243a9 THE SQUAMISH REPORTER \n", + "59756 2a67fd911885f79d0f80 PINKBIKE FIREROAD HOLDINGS INC. \n", + "60495 24202eb043b68a6d2f2f BLINDFOLD BOOKS \n", + "60642 29208db0e3b8831c9c58 THE WHOLE HUMAN FOUNDATION \n", + "198593 0e276fa4a4cee06b2e1b Google Kitchener-Waterloo \n", + "200101 560072f7c9cc4b301497 Vidyard \n", + "732567 5383eac9b1aa8a375e23 Canada Today Media Group Inc \n", + "732954 b044fcee62c520cd76a3 ChinaBridge Media Group \n", + "735456 312c31b697d735d0c7e6 IFHT Films Inc \n", + "736634 a2a3a205e252ee02d55b Look4Tutor Inc \n", + "740851 9d1d2b753ca8639705fe Vancouver No 1 Investment Group Inc \n", + "742554 6fed30cc4f171cc98897 Cj's Equipment Sales Inc. \n", + "744913 9107f92395e1981da309 Fivel Systems Corp. \n", + "747014 2b1f9ecc264fe8b8a17e Carpages.ca \n", + "752021 ae41a897e848050f7140 Netzone Internet Cafe \n", + "757617 49cb4db1bfe6024bc9fb DigiHype Media Inc. \n", + "781602 ddfb97e4f7ee6b516b4a Techweavers Inc. \n", + "783127 73a334f5618ea3b779c8 Digital Race Media \n", + "788616 d57ae1af1ae53505dc97 ALSUE SALES \n", + "791589 b1493c9c782fc6d9328c HEY TOMMY INC \n", + "791616 d5c5cd5465cf50926c3e DS90 MEDIA \n", + "791979 b621a6241266ba30cf77 CHADWICK STREAMING \n", + "792229 22f2f3c34f5e7ef72645 ESOLUTIONS GROUP LIMITED \n", + "\n", + " localfile primary_NAICS \\\n", + "59470 BC_Squamish_Business_Licence_Annual_2021.csv 519130 \n", + "59756 BC_Squamish_Business_Licence_Annual_2021.csv 519130 \n", + "60495 BC_Squamish_Business_Licence_Annual_2021.csv 519130 \n", + "60642 BC_Squamish_Business_Licence_Annual_2021.csv 519130 \n", + "198593 ON_Cambridge_Business_Directory.csv 519130 \n", + "200101 ON_Cambridge_Business_Directory.csv 519130 \n", + "732567 BC_Richmond_Based_Businesses.csv 519130 \n", + "732954 BC_Richmond_Based_Businesses.csv 519130 \n", + "735456 BC_Richmond_Based_Businesses.csv 519130 \n", + "736634 BC_Richmond_Based_Businesses.csv 519130 \n", + "740851 BC_Richmond_Based_Businesses.csv 519130 \n", + "742554 ON_Mississauga_Business_Directory.csv 519130 \n", + "744913 ON_Mississauga_Business_Directory.csv 519130 \n", + "747014 ON_Mississauga_Business_Directory.csv 519130 \n", + "752021 ON_Mississauga_Business_Directory.csv 519130 \n", + "757617 ON_Mississauga_Business_Directory.csv 519130 \n", + "781602 AB_Strathcona_Business_Directory.csv 519130 \n", + "783127 AB_Strathcona_Business_Directory.csv 519130 \n", + "788616 BC_Langley_Business_Licences.csv 519130 \n", + "791589 BC_Langley_Business_Licences.csv 519130 \n", + "791616 BC_Langley_Business_Licences.csv 519130 \n", + "791979 BC_Langley_Business_Licences.csv 519130 \n", + "792229 BC_Langley_Business_Licences.csv 519130 \n", + "\n", + " NAICS_descr \n", + "59470 Internet Publishing And Broadcasting And Web S... \n", + "59756 Internet Publishing And Broadcasting And Web S... \n", + "60495 Internet Publishing And Broadcasting And Web S... \n", + "60642 Internet Publishing And Broadcasting And Web S... \n", + "198593 Internet publishing and broadcasting and web s... \n", + "200101 Internet publishing and broadcasting and web s... \n", + "732567 Internet publishing and broadcasting and web s... \n", + "732954 Internet publishing and broadcasting and web s... \n", + "735456 Internet publishing and broadcasting and web s... \n", + "736634 Internet publishing and broadcasting and web s... \n", + "740851 Internet publishing and broadcasting and web s... \n", + "742554 Internet Brodcasting, and Web Search Portals \n", + "744913 Internet Brodcasting, and Web Search Portals \n", + "747014 Internet Brodcasting, and Web Search Portals \n", + "752021 Internet Brodcasting, and Web Search Portals \n", + "757617 Internet Brodcasting, and Web Search Portals \n", + "781602 NaN \n", + "783127 NaN \n", + "788616 Information & cultural industries / Other info... \n", + "791589 Information & cultural industries / Other info... \n", + "791616 Information & cultural industries / Other info... \n", + "791979 Information & cultural industries / Other info... \n", + "792229 Information & cultural industries / Other info... " + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
idxbusiness_namelocalfileprimary_NAICSNAICS_descr
59470d2cceab844c620d243a9THE SQUAMISH REPORTERBC_Squamish_Business_Licence_Annual_2021.csv519130Internet Publishing And Broadcasting And Web S...
597562a67fd911885f79d0f80PINKBIKE FIREROAD HOLDINGS INC.BC_Squamish_Business_Licence_Annual_2021.csv519130Internet Publishing And Broadcasting And Web S...
6049524202eb043b68a6d2f2fBLINDFOLD BOOKSBC_Squamish_Business_Licence_Annual_2021.csv519130Internet Publishing And Broadcasting And Web S...
6064229208db0e3b8831c9c58THE WHOLE HUMAN FOUNDATIONBC_Squamish_Business_Licence_Annual_2021.csv519130Internet Publishing And Broadcasting And Web S...
1985930e276fa4a4cee06b2e1bGoogle Kitchener-WaterlooON_Cambridge_Business_Directory.csv519130Internet publishing and broadcasting and web s...
200101560072f7c9cc4b301497VidyardON_Cambridge_Business_Directory.csv519130Internet publishing and broadcasting and web s...
7325675383eac9b1aa8a375e23Canada Today Media Group IncBC_Richmond_Based_Businesses.csv519130Internet publishing and broadcasting and web s...
732954b044fcee62c520cd76a3ChinaBridge Media GroupBC_Richmond_Based_Businesses.csv519130Internet publishing and broadcasting and web s...
735456312c31b697d735d0c7e6IFHT Films IncBC_Richmond_Based_Businesses.csv519130Internet publishing and broadcasting and web s...
736634a2a3a205e252ee02d55bLook4Tutor IncBC_Richmond_Based_Businesses.csv519130Internet publishing and broadcasting and web s...
7408519d1d2b753ca8639705feVancouver No 1 Investment Group IncBC_Richmond_Based_Businesses.csv519130Internet publishing and broadcasting and web s...
7425546fed30cc4f171cc98897Cj's Equipment Sales Inc.ON_Mississauga_Business_Directory.csv519130Internet Brodcasting, and Web Search Portals
7449139107f92395e1981da309Fivel Systems Corp.ON_Mississauga_Business_Directory.csv519130Internet Brodcasting, and Web Search Portals
7470142b1f9ecc264fe8b8a17eCarpages.caON_Mississauga_Business_Directory.csv519130Internet Brodcasting, and Web Search Portals
752021ae41a897e848050f7140Netzone Internet CafeON_Mississauga_Business_Directory.csv519130Internet Brodcasting, and Web Search Portals
75761749cb4db1bfe6024bc9fbDigiHype Media Inc.ON_Mississauga_Business_Directory.csv519130Internet Brodcasting, and Web Search Portals
781602ddfb97e4f7ee6b516b4aTechweavers Inc.AB_Strathcona_Business_Directory.csv519130NaN
78312773a334f5618ea3b779c8Digital Race MediaAB_Strathcona_Business_Directory.csv519130NaN
788616d57ae1af1ae53505dc97ALSUE SALESBC_Langley_Business_Licences.csv519130Information & cultural industries / Other info...
791589b1493c9c782fc6d9328cHEY TOMMY INCBC_Langley_Business_Licences.csv519130Information & cultural industries / Other info...
791616d5c5cd5465cf50926c3eDS90 MEDIABC_Langley_Business_Licences.csv519130Information & cultural industries / Other info...
791979b621a6241266ba30cf77CHADWICK STREAMINGBC_Langley_Business_Licences.csv519130Information & cultural industries / Other info...
79222922f2f3c34f5e7ef72645ESOLUTIONS GROUP LIMITEDBC_Langley_Business_Licences.csv519130Information & cultural industries / Other info...
\n
" + }, + "metadata": {}, + "execution_count": 60 + } + ], + "source": [ + "x = df['primary_NAICS'] == '519130'\n", + "df.loc[x, ['idx', 'business_name', 'localfile', 'primary_NAICS', 'NAICS_descr']]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " 2022 NAICS US Code 2022 NAICS US Title \\\n", + "Seq. No. \n", + "1 11 Agriculture, Forestry, Fishing and Hunting \n", + "2 111 Crop Production \n", + "3 1111 Oilseed and Grain Farming \n", + "4 11111 Soybean Farming \n", + "5 111110 Soybean Farming \n", + "... ... ... \n", + "2121 9281 National Security and International Affairs \n", + "2122 92811 National Security \n", + "2123 928110 National Security \n", + "2124 92812 International Affairs \n", + "2125 928120 International Affairs \n", + "\n", + " Description code \n", + "Seq. No. \n", + "1 The Sector as a Whole\\n\\nThe Agriculture, Fore... 11 \n", + "2 Industries in the Crop Production subsector gr... 111 \n", + "3 This industry group comprises establishments p... 1111 \n", + "4 See industry description for 111110. 11111 \n", + "5 This industry comprises establishments primari... 111110 \n", + "... ... ... \n", + "2121 NaN 9281 \n", + "2122 See industry description for 928110. 92811 \n", + "2123 This industry comprises government establishme... 928110 \n", + "2124 See industry description for 928120. 92812 \n", + "2125 This industry comprises establishments of U.S.... 928120 \n", + "\n", + "[2125 rows x 4 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
2022 NAICS US Code2022 NAICS US TitleDescriptioncode
Seq. No.
111Agriculture, Forestry, Fishing and HuntingThe Sector as a Whole\\n\\nThe Agriculture, Fore...11
2111Crop ProductionIndustries in the Crop Production subsector gr...111
31111Oilseed and Grain FarmingThis industry group comprises establishments p...1111
411111Soybean FarmingSee industry description for 111110.11111
5111110Soybean FarmingThis industry comprises establishments primari...111110
...............
21219281National Security and International AffairsNaN9281
212292811National SecuritySee industry description for 928110.92811
2123928110National SecurityThis industry comprises government establishme...928110
212492812International AffairsSee industry description for 928120.92812
2125928120International AffairsThis industry comprises establishments of U.S....928120
\n

2125 rows × 4 columns

\n
" + }, + "metadata": {}, + "execution_count": 48 + } + ], + "source": [ + "# Load in the NAICS reference xl file\n", + "import openpyxl\n", + "NAICS_reference_data_path = '/home/jovyan/ODBiz/3-Merging/double_check/2022-NAICS-Codes-listed-numerically-2-Digit-through-6-Digit.xlsx'\n", + "ref_df = pd.read_excel(NAICS_reference_data_path, \n", + " sheet_name = 'Two-Six Digit NAICS',\n", + " index_col = 'Seq. No.'\n", + " )\n", + "code_col = '2022 NAICS US Code'\n", + "title_col = '2022 NAICS US Title'\n", + "# ref_df.loc[1, title_col][-1] == 'T'\n", + "ref_df[title_col] = ref_df[title_col].str.rstrip(to_strip = 'T')\n", + "ref_df['code'] = ref_df[code_col].astype(str)\n", + "ref_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'311710'" + ] + }, + "metadata": {}, + "execution_count": 49 + } + ], + "source": [ + "x = ref_df['code'].str.contains('311710', na = False)\n", + "ref_df.loc[321, 'code']" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "File saved to /home/jovyan/ODBiz/3-Merging/double_check/NAICS_description_confirmations.csv\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "False 254\n", + "True 139\n", + "Name: valid, dtype: int64" + ] + }, + "metadata": {}, + "execution_count": 55 + } + ], + "source": [ + "# Compare my truncated NAICS descriptions to the reference file\n", + "result = NAICS_df.merge(ref_df, how = 'left', on = 'code')\n", + "result['valid'] = result['descrip'] == result[title_col]\n", + "result.to_csv(NAICS_csv_path, index = False)\n", + "print(f'File saved to {NAICS_csv_path}')\n", + "result['valid'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:23:41.032885Z", + "iopub.status.busy": "2022-07-28T17:23:41.032585Z", + "iopub.status.idle": "2022-07-28T17:23:41.074278Z", + "shell.execute_reply": "2022-07-28T17:23:41.073323Z", + "shell.execute_reply.started": "2022-07-28T17:23:41.032859Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "802383\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idxlocalfilebusiness_namebusiness_sectorbusiness_subsectorbusiness_descriptionbusiness_id_nolicence_numberlicence_typeprimary_NAICSsecondary_NAICSNAICS_descralt_econ_act_codealt_econ_act_descriplatitudelongitudefull_addressfull_address_2mailing_addressunitstreet_nostreet_namestreet_directionstreet_typecityprovincepostal_codecountrybusiness_websiteemailtelephonetelephone_extensiontoll_free_telephonefaxtotal_no_employeesno_full_timeno_part_timeno_seasonaldate_establishedindigenousstatusprovidergeo_sourcevalid_coordaddr_infohas_addr_infoinvalid_NAICS_query
01352c00083568dfebe65BC_Victoria_Business_Licences.csvKURVA DESIGNINTERMUNICIPAL - MOBILE SERVICESNaNConstruction / Specialty trade contractorsNaN25071NaNNaNNaNNaNNaNNaN48.4310107-123.34120791417 PEMBROKE ST VICTORIA BC V8R 1V7NaNNaNNaN1417PEMBROKE STNaNNaNVictoriaBCNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNnoNaNCity of VictoriaSourceTrue1417 PEMBROKE ST VICTORIA BC V8R 1V7____1417_P...TrueNaN
185b2584ba2eaa631d414BC_Victoria_Business_Licences.csvPARACHUTE ICE CREAMRESTAURANT - GENERALNaNAccommodation & food services / Food services ...NaN31145NaNNaNNaNNaNNaNNaN48.43653971-123.3734922105-2626 BRIDGE ST VICTORIA BC V8T 4S9NaNNaN1052626BRIDGE STNaNNaNVictoriaBCNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNnoNaNCity of VictoriaSourceTrue105-2626 BRIDGE ST VICTORIA BC V8T 4S9___105_2...TrueNaN
221307e1f41eb27227271BC_Victoria_Business_Licences.csvPIC-A-FLIC VIDEORENTALS & SALES - VARIOUSNaNRetail trade / Misc. store retailersNaN30415NaNNaNNaNNaNNaNNaN48.42598245-123.33899621519 PANDORA AVE VICTORIA BC V8R 6P9NaNNaNNaN1519PANDORA AVENaNNaNVictoriaBCNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNnoNaNCity of VictoriaSourceTrue1519 PANDORA AVE VICTORIA BC V8R 6P9____1519_P...TrueNaN
3abb26454eabba5f3ee70BC_Victoria_Business_Licences.csvCRAIGDARROCH CASTLE HISTORICAL MUSEUM SOCIETYNON PROFIT SOCIETY - GENERALNaNOther services (exc. Public administration) / ...NaN34109NaNNaNNaNNaNNaNNaN48.4230248-123.34368251070 JOAN CRES VICTORIA BC V8S 3L5NaNNaNNaN1070JOAN CRESNaNNaNVictoriaBCNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNnoNaNCity of VictoriaSourceTrue1070 JOAN CRES VICTORIA BC V8S 3L5____1070_JOA...TrueNaN
42ff1e557764ea6205464BC_Victoria_Business_Licences.csvINSUREBIZZ FINANCIAL INCBUSINESS SERVICES - FINANCIALNaNFinance & insurance / Insurance carriers & rel...NaN29261NaNNaNNaNNaNNaNNaN48.42598245-123.33899621540 FORT ST VICTORIA BC V8S 5J2NaNNaNNaN1540FORT STNaNNaNVictoriaBCNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNnoNaNCity of VictoriaSourceTrue1540 FORT ST VICTORIA BC V8S 5J2____1540_FORT ...TrueNaN
\n", + "
" + ], + "text/plain": [ + " idx localfile \\\n", + "0 1352c00083568dfebe65 BC_Victoria_Business_Licences.csv \n", + "1 85b2584ba2eaa631d414 BC_Victoria_Business_Licences.csv \n", + "2 21307e1f41eb27227271 BC_Victoria_Business_Licences.csv \n", + "3 abb26454eabba5f3ee70 BC_Victoria_Business_Licences.csv \n", + "4 2ff1e557764ea6205464 BC_Victoria_Business_Licences.csv \n", + "\n", + " business_name \\\n", + "0 KURVA DESIGN \n", + "1 PARACHUTE ICE CREAM \n", + "2 PIC-A-FLIC VIDEO \n", + "3 CRAIGDARROCH CASTLE HISTORICAL MUSEUM SOCIETY \n", + "4 INSUREBIZZ FINANCIAL INC \n", + "\n", + " business_sector business_subsector \\\n", + "0 INTERMUNICIPAL - MOBILE SERVICES NaN \n", + "1 RESTAURANT - GENERAL NaN \n", + "2 RENTALS & SALES - VARIOUS NaN \n", + "3 NON PROFIT SOCIETY - GENERAL NaN \n", + "4 BUSINESS SERVICES - FINANCIAL NaN \n", + "\n", + " business_description business_id_no \\\n", + "0 Construction / Specialty trade contractors NaN \n", + "1 Accommodation & food services / Food services ... NaN \n", + "2 Retail trade / Misc. store retailers NaN \n", + "3 Other services (exc. Public administration) / ... NaN \n", + "4 Finance & insurance / Insurance carriers & rel... NaN \n", + "\n", + " licence_number licence_type primary_NAICS secondary_NAICS NAICS_descr \\\n", + "0 25071 NaN NaN NaN NaN \n", + "1 31145 NaN NaN NaN NaN \n", + "2 30415 NaN NaN NaN NaN \n", + "3 34109 NaN NaN NaN NaN \n", + "4 29261 NaN NaN NaN NaN \n", + "\n", + " alt_econ_act_code alt_econ_act_descrip latitude longitude \\\n", + "0 NaN NaN 48.4310107 -123.3412079 \n", + "1 NaN NaN 48.43653971 -123.3734922 \n", + "2 NaN NaN 48.42598245 -123.3389962 \n", + "3 NaN NaN 48.4230248 -123.3436825 \n", + "4 NaN NaN 48.42598245 -123.3389962 \n", + "\n", + " full_address full_address_2 mailing_address unit \\\n", + "0 1417 PEMBROKE ST VICTORIA BC V8R 1V7 NaN NaN NaN \n", + "1 105-2626 BRIDGE ST VICTORIA BC V8T 4S9 NaN NaN 105 \n", + "2 1519 PANDORA AVE VICTORIA BC V8R 6P9 NaN NaN NaN \n", + "3 1070 JOAN CRES VICTORIA BC V8S 3L5 NaN NaN NaN \n", + "4 1540 FORT ST VICTORIA BC V8S 5J2 NaN NaN NaN \n", + "\n", + " street_no street_name street_direction street_type city province \\\n", + "0 1417 PEMBROKE ST NaN NaN Victoria BC \n", + "1 2626 BRIDGE ST NaN NaN Victoria BC \n", + "2 1519 PANDORA AVE NaN NaN Victoria BC \n", + "3 1070 JOAN CRES NaN NaN Victoria BC \n", + "4 1540 FORT ST NaN NaN Victoria BC \n", + "\n", + " postal_code country business_website email telephone telephone_extension \\\n", + "0 NaN NaN NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN NaN NaN \n", + "\n", + " toll_free_telephone fax total_no_employees no_full_time no_part_time \\\n", + "0 NaN NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN NaN \n", + "\n", + " no_seasonal date_established indigenous status provider geo_source \\\n", + "0 NaN NaN no NaN City of Victoria Source \n", + "1 NaN NaN no NaN City of Victoria Source \n", + "2 NaN NaN no NaN City of Victoria Source \n", + "3 NaN NaN no NaN City of Victoria Source \n", + "4 NaN NaN no NaN City of Victoria Source \n", + "\n", + " valid_coord addr_info \\\n", + "0 True 1417 PEMBROKE ST VICTORIA BC V8R 1V7____1417_P... \n", + "1 True 105-2626 BRIDGE ST VICTORIA BC V8T 4S9___105_2... \n", + "2 True 1519 PANDORA AVE VICTORIA BC V8R 6P9____1519_P... \n", + "3 True 1070 JOAN CRES VICTORIA BC V8S 3L5____1070_JOA... \n", + "4 True 1540 FORT ST VICTORIA BC V8S 5J2____1540_FORT ... \n", + "\n", + " has_addr_info invalid_NAICS_query \n", + "0 True NaN \n", + "1 True NaN \n", + "2 True NaN \n", + "3 True NaN \n", + "4 True NaN " + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(num_of_rows)\n", + "pd.options.display.max_columns = None\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idxlocalfileprimary_NAICS
6811885db06b87af86d5a895aaON_York_Region_Business_Directory.csv0
6811918ba730197c3dffcbff8aON_York_Region_Business_Directory.csv0
681358530c1c1c81516205e85bON_York_Region_Business_Directory.csv0
68157469fd1acdb9dcb9582d89ON_York_Region_Business_Directory.csv0
6820004aa2abbdf212e367b63cON_York_Region_Business_Directory.csv0
682376c3decc80440c07173b71ON_York_Region_Business_Directory.csv0
682480934e5fb43378b3ba5d3aON_York_Region_Business_Directory.csv0
682482b38e70716972ec32bc17ON_York_Region_Business_Directory.csv0
68252180f6b5023e892f987aa7ON_York_Region_Business_Directory.csv0
68273654628774b586e9d967c6ON_York_Region_Business_Directory.csv0
682756341c73b8e778465ddb20ON_York_Region_Business_Directory.csv0
682758a594b3fff74b2c65e200ON_York_Region_Business_Directory.csv0
6829298a7453a062aa33780a6eON_York_Region_Business_Directory.csv0
68358838ee86b0ca66eb3486b3ON_York_Region_Business_Directory.csv0
683611af12f47dff57bcaeee52ON_York_Region_Business_Directory.csv0
683645b2bca783fd2fc176a5b8ON_York_Region_Business_Directory.csv0
683811d14cf3e2c6a26e1edc18ON_York_Region_Business_Directory.csv0
684022abeafbc0807b1cc721bbON_York_Region_Business_Directory.csv0
6841696a6ac45c7025917d3c15ON_York_Region_Business_Directory.csv0
68418630671ce75cd828bb8ee0ON_York_Region_Business_Directory.csv0
68428503e98d08992a8201368cON_York_Region_Business_Directory.csv0
68432588e10554dddd3030396fON_York_Region_Business_Directory.csv0
684398b752c6d1845f2ee70baaON_York_Region_Business_Directory.csv0
684527f969920c10f449929170ON_York_Region_Business_Directory.csv0
6846229933c425ad4370b6d8d1ON_York_Region_Business_Directory.csv0
684670f7be4c6d2e5ed105c3e4ON_York_Region_Business_Directory.csv0
6848927dcdc653bd35229cf992ON_York_Region_Business_Directory.csv0
6849227d4d99e550b9cbea7d65ON_York_Region_Business_Directory.csv0
684928c630c2c9d6fc862f23daON_York_Region_Business_Directory.csv0
68493107fd079016ff909f1288ON_York_Region_Business_Directory.csv0
684987d2c6157d21cbc91d043eON_York_Region_Business_Directory.csv0
68517609245112cdd3ac707fa2ON_York_Region_Business_Directory.csv0
685230637796720ccec1c04138ON_York_Region_Business_Directory.csv0
685382d75f21f7e94e6b3af0c2ON_York_Region_Business_Directory.csv0
6854102ed47290feaa061c39fbON_York_Region_Business_Directory.csv0
6854389a3e4896bca0af114c05ON_York_Region_Business_Directory.csv0
6855482ad045472404ab5041c5ON_York_Region_Business_Directory.csv0
68557513d2eb2be2d3a9cce09aON_York_Region_Business_Directory.csv0
68559235605c2fe723bd0eaa8bON_York_Region_Business_Directory.csv0
68560593c9320669f7ae901ed3ON_York_Region_Business_Directory.csv0
6856442f43260096e7b1804a23ON_York_Region_Business_Directory.csv0
6857107e65f9fbb73011fe6a5cON_York_Region_Business_Directory.csv0
6857760f4a01e054300ea38399ON_York_Region_Business_Directory.csv0
68582993c212894388f54ef95cON_York_Region_Business_Directory.csv0
6858539ec87282646ee43ab1a9ON_York_Region_Business_Directory.csv0
6858683af9c05c4c9d9ffc951eON_York_Region_Business_Directory.csv0
6859310f188dc0e90d0a5c7449ON_York_Region_Business_Directory.csv0
68598346d10e76e7877aa3e484ON_York_Region_Business_Directory.csv0
6859926cf10949e337b32a118fON_York_Region_Business_Directory.csv0
68603581697dd47347204a2f3bON_York_Region_Business_Directory.csv0
68606861686dd1bf499a1c5bfbON_York_Region_Business_Directory.csv0
686173c4181aaa8efa54268c85ON_York_Region_Business_Directory.csv0
686186399e394bffe9bc8c04f0ON_York_Region_Business_Directory.csv0
68619557ce874cc67afd6ad229ON_York_Region_Business_Directory.csv0
686207b4fa1bdf2b53bb905b40ON_York_Region_Business_Directory.csv0
686245793a67b83b8328d3d350ON_York_Region_Business_Directory.csv0
6862533adc00626f73fdd4df6fON_York_Region_Business_Directory.csv0
6862726b88d9fbc14646d13848ON_York_Region_Business_Directory.csv0
6864012639f198625da10473e8ON_York_Region_Business_Directory.csv0
6864170b4af76a0d7a04501283ON_York_Region_Business_Directory.csv0
6865358661605af18c9ea6a90aON_York_Region_Business_Directory.csv0
686553e81b7d528bafec39c04fON_York_Region_Business_Directory.csv0
686579ed7752348382c9f29fa0ON_York_Region_Business_Directory.csv0
686595d3daa4c0948e78d5d9ffON_York_Region_Business_Directory.csv0
686597b58b0addd1b57e176dbaON_York_Region_Business_Directory.csv0
686658302bb5fb66442d7ba40cON_York_Region_Business_Directory.csv0
686670880f9b5a9d8f62e50f9fON_York_Region_Business_Directory.csv0
686679eaba526f390a4209b43cON_York_Region_Business_Directory.csv0
68674435365a51717b8ec19eb8ON_York_Region_Business_Directory.csv0
6867572f3a440b15fe69d46fe8ON_York_Region_Business_Directory.csv0
686835c369e773af0a23881cceON_York_Region_Business_Directory.csv0
6868376b97d9f4d8a5df06ac6dON_York_Region_Business_Directory.csv0
686902fb6180dfc228a6d38393ON_York_Region_Business_Directory.csv0
68701994622f3f3bb82c89397bON_York_Region_Business_Directory.csv0
687020fbcb6a2c907e74f7c8d2ON_York_Region_Business_Directory.csv0
6870237b981ff60b249a6c81abON_York_Region_Business_Directory.csv0
687025a2212277bf9d9ffa500dON_York_Region_Business_Directory.csv0
6870275377bdd0d94d9d93f432ON_York_Region_Business_Directory.csv0
6870281a498e45d816de71dd8fON_York_Region_Business_Directory.csv0
6870297e7230a1dd7e1a756eecON_York_Region_Business_Directory.csv0
687032b543d9d12d79d5a52717ON_York_Region_Business_Directory.csv0
687038c534900f74d9c8de0aadON_York_Region_Business_Directory.csv0
687039cd7db3dfe4ce66049a50ON_York_Region_Business_Directory.csv0
68704222f7bfead93165f34edfON_York_Region_Business_Directory.csv0
687054c1713bf7dcdbdbb2f6beON_York_Region_Business_Directory.csv0
7799928a89851915311137f44bAB_Strathcona_Business_Directory.csv0
780225fe939207c9f3870dd4e9AB_Strathcona_Business_Directory.csv0
782010339009f3a7242809f8eeAB_Strathcona_Business_Directory.csv0
782036c7ebf2ce497fd25dd671AB_Strathcona_Business_Directory.csv0
782042ff104d44019f3461f25cAB_Strathcona_Business_Directory.csv0
7820643e383bd8a1e03353062cAB_Strathcona_Business_Directory.csv0
782083f1aa8fdeee8f14935b1cAB_Strathcona_Business_Directory.csv0
78210138c59befb04cb8e168aeAB_Strathcona_Business_Directory.csv0
782110c003b6bc96323caacf86AB_Strathcona_Business_Directory.csv0
7822172267f682a8d6c8cd429cAB_Strathcona_Business_Directory.csv0
782219ca17f33ae35fa230650fAB_Strathcona_Business_Directory.csv0
782230f2f575b931dad62cbf5eAB_Strathcona_Business_Directory.csv0
782270f8db4125a8773de7aa8dAB_Strathcona_Business_Directory.csv0
78228270206c7f0f7f043a139dAB_Strathcona_Business_Directory.csv0
782447ef7d44e16f6432c2f36cAB_Strathcona_Business_Directory.csv0
\n", + "
" + ], + "text/plain": [ + " idx localfile \\\n", + "681188 5db06b87af86d5a895aa ON_York_Region_Business_Directory.csv \n", + "681191 8ba730197c3dffcbff8a ON_York_Region_Business_Directory.csv \n", + "681358 530c1c1c81516205e85b ON_York_Region_Business_Directory.csv \n", + "681574 69fd1acdb9dcb9582d89 ON_York_Region_Business_Directory.csv \n", + "682000 4aa2abbdf212e367b63c ON_York_Region_Business_Directory.csv \n", + "682376 c3decc80440c07173b71 ON_York_Region_Business_Directory.csv \n", + "682480 934e5fb43378b3ba5d3a ON_York_Region_Business_Directory.csv \n", + "682482 b38e70716972ec32bc17 ON_York_Region_Business_Directory.csv \n", + "682521 80f6b5023e892f987aa7 ON_York_Region_Business_Directory.csv \n", + "682736 54628774b586e9d967c6 ON_York_Region_Business_Directory.csv \n", + "682756 341c73b8e778465ddb20 ON_York_Region_Business_Directory.csv \n", + "682758 a594b3fff74b2c65e200 ON_York_Region_Business_Directory.csv \n", + "682929 8a7453a062aa33780a6e ON_York_Region_Business_Directory.csv \n", + "683588 38ee86b0ca66eb3486b3 ON_York_Region_Business_Directory.csv \n", + "683611 af12f47dff57bcaeee52 ON_York_Region_Business_Directory.csv \n", + "683645 b2bca783fd2fc176a5b8 ON_York_Region_Business_Directory.csv \n", + "683811 d14cf3e2c6a26e1edc18 ON_York_Region_Business_Directory.csv \n", + "684022 abeafbc0807b1cc721bb ON_York_Region_Business_Directory.csv \n", + "684169 6a6ac45c7025917d3c15 ON_York_Region_Business_Directory.csv \n", + "684186 30671ce75cd828bb8ee0 ON_York_Region_Business_Directory.csv \n", + "684285 03e98d08992a8201368c ON_York_Region_Business_Directory.csv \n", + "684325 88e10554dddd3030396f ON_York_Region_Business_Directory.csv \n", + "684398 b752c6d1845f2ee70baa ON_York_Region_Business_Directory.csv \n", + "684527 f969920c10f449929170 ON_York_Region_Business_Directory.csv \n", + "684622 9933c425ad4370b6d8d1 ON_York_Region_Business_Directory.csv \n", + "684670 f7be4c6d2e5ed105c3e4 ON_York_Region_Business_Directory.csv \n", + "684892 7dcdc653bd35229cf992 ON_York_Region_Business_Directory.csv \n", + "684922 7d4d99e550b9cbea7d65 ON_York_Region_Business_Directory.csv \n", + "684928 c630c2c9d6fc862f23da ON_York_Region_Business_Directory.csv \n", + "684931 07fd079016ff909f1288 ON_York_Region_Business_Directory.csv \n", + "684987 d2c6157d21cbc91d043e ON_York_Region_Business_Directory.csv \n", + "685176 09245112cdd3ac707fa2 ON_York_Region_Business_Directory.csv \n", + "685230 637796720ccec1c04138 ON_York_Region_Business_Directory.csv \n", + "685382 d75f21f7e94e6b3af0c2 ON_York_Region_Business_Directory.csv \n", + "685410 2ed47290feaa061c39fb ON_York_Region_Business_Directory.csv \n", + "685438 9a3e4896bca0af114c05 ON_York_Region_Business_Directory.csv \n", + "685548 2ad045472404ab5041c5 ON_York_Region_Business_Directory.csv \n", + "685575 13d2eb2be2d3a9cce09a ON_York_Region_Business_Directory.csv \n", + "685592 35605c2fe723bd0eaa8b ON_York_Region_Business_Directory.csv \n", + "685605 93c9320669f7ae901ed3 ON_York_Region_Business_Directory.csv \n", + "685644 2f43260096e7b1804a23 ON_York_Region_Business_Directory.csv \n", + "685710 7e65f9fbb73011fe6a5c ON_York_Region_Business_Directory.csv \n", + "685776 0f4a01e054300ea38399 ON_York_Region_Business_Directory.csv \n", + "685829 93c212894388f54ef95c ON_York_Region_Business_Directory.csv \n", + "685853 9ec87282646ee43ab1a9 ON_York_Region_Business_Directory.csv \n", + "685868 3af9c05c4c9d9ffc951e ON_York_Region_Business_Directory.csv \n", + "685931 0f188dc0e90d0a5c7449 ON_York_Region_Business_Directory.csv \n", + "685983 46d10e76e7877aa3e484 ON_York_Region_Business_Directory.csv \n", + "685992 6cf10949e337b32a118f ON_York_Region_Business_Directory.csv \n", + "686035 81697dd47347204a2f3b ON_York_Region_Business_Directory.csv \n", + "686068 61686dd1bf499a1c5bfb ON_York_Region_Business_Directory.csv \n", + "686173 c4181aaa8efa54268c85 ON_York_Region_Business_Directory.csv \n", + "686186 399e394bffe9bc8c04f0 ON_York_Region_Business_Directory.csv \n", + "686195 57ce874cc67afd6ad229 ON_York_Region_Business_Directory.csv \n", + "686207 b4fa1bdf2b53bb905b40 ON_York_Region_Business_Directory.csv \n", + "686245 793a67b83b8328d3d350 ON_York_Region_Business_Directory.csv \n", + "686253 3adc00626f73fdd4df6f ON_York_Region_Business_Directory.csv \n", + "686272 6b88d9fbc14646d13848 ON_York_Region_Business_Directory.csv \n", + "686401 2639f198625da10473e8 ON_York_Region_Business_Directory.csv \n", + "686417 0b4af76a0d7a04501283 ON_York_Region_Business_Directory.csv \n", + "686535 8661605af18c9ea6a90a ON_York_Region_Business_Directory.csv \n", + "686553 e81b7d528bafec39c04f ON_York_Region_Business_Directory.csv \n", + "686579 ed7752348382c9f29fa0 ON_York_Region_Business_Directory.csv \n", + "686595 d3daa4c0948e78d5d9ff ON_York_Region_Business_Directory.csv \n", + "686597 b58b0addd1b57e176dba ON_York_Region_Business_Directory.csv \n", + "686658 302bb5fb66442d7ba40c ON_York_Region_Business_Directory.csv \n", + "686670 880f9b5a9d8f62e50f9f ON_York_Region_Business_Directory.csv \n", + "686679 eaba526f390a4209b43c ON_York_Region_Business_Directory.csv \n", + "686744 35365a51717b8ec19eb8 ON_York_Region_Business_Directory.csv \n", + "686757 2f3a440b15fe69d46fe8 ON_York_Region_Business_Directory.csv \n", + "686835 c369e773af0a23881cce ON_York_Region_Business_Directory.csv \n", + "686837 6b97d9f4d8a5df06ac6d ON_York_Region_Business_Directory.csv \n", + "686902 fb6180dfc228a6d38393 ON_York_Region_Business_Directory.csv \n", + "687019 94622f3f3bb82c89397b ON_York_Region_Business_Directory.csv \n", + "687020 fbcb6a2c907e74f7c8d2 ON_York_Region_Business_Directory.csv \n", + "687023 7b981ff60b249a6c81ab ON_York_Region_Business_Directory.csv \n", + "687025 a2212277bf9d9ffa500d ON_York_Region_Business_Directory.csv \n", + "687027 5377bdd0d94d9d93f432 ON_York_Region_Business_Directory.csv \n", + "687028 1a498e45d816de71dd8f ON_York_Region_Business_Directory.csv \n", + "687029 7e7230a1dd7e1a756eec ON_York_Region_Business_Directory.csv \n", + "687032 b543d9d12d79d5a52717 ON_York_Region_Business_Directory.csv \n", + "687038 c534900f74d9c8de0aad ON_York_Region_Business_Directory.csv \n", + "687039 cd7db3dfe4ce66049a50 ON_York_Region_Business_Directory.csv \n", + "687042 22f7bfead93165f34edf ON_York_Region_Business_Directory.csv \n", + "687054 c1713bf7dcdbdbb2f6be ON_York_Region_Business_Directory.csv \n", + "779992 8a89851915311137f44b AB_Strathcona_Business_Directory.csv \n", + "780225 fe939207c9f3870dd4e9 AB_Strathcona_Business_Directory.csv \n", + "782010 339009f3a7242809f8ee AB_Strathcona_Business_Directory.csv \n", + "782036 c7ebf2ce497fd25dd671 AB_Strathcona_Business_Directory.csv \n", + "782042 ff104d44019f3461f25c AB_Strathcona_Business_Directory.csv \n", + "782064 3e383bd8a1e03353062c AB_Strathcona_Business_Directory.csv \n", + "782083 f1aa8fdeee8f14935b1c AB_Strathcona_Business_Directory.csv \n", + "782101 38c59befb04cb8e168ae AB_Strathcona_Business_Directory.csv \n", + "782110 c003b6bc96323caacf86 AB_Strathcona_Business_Directory.csv \n", + "782217 2267f682a8d6c8cd429c AB_Strathcona_Business_Directory.csv \n", + "782219 ca17f33ae35fa230650f AB_Strathcona_Business_Directory.csv \n", + "782230 f2f575b931dad62cbf5e AB_Strathcona_Business_Directory.csv \n", + "782270 f8db4125a8773de7aa8d AB_Strathcona_Business_Directory.csv \n", + "782282 70206c7f0f7f043a139d AB_Strathcona_Business_Directory.csv \n", + "782447 ef7d44e16f6432c2f36c AB_Strathcona_Business_Directory.csv \n", + "\n", + " primary_NAICS \n", + "681188 0 \n", + "681191 0 \n", + "681358 0 \n", + "681574 0 \n", + "682000 0 \n", + "682376 0 \n", + "682480 0 \n", + "682482 0 \n", + "682521 0 \n", + "682736 0 \n", + "682756 0 \n", + "682758 0 \n", + "682929 0 \n", + "683588 0 \n", + "683611 0 \n", + "683645 0 \n", + "683811 0 \n", + "684022 0 \n", + "684169 0 \n", + "684186 0 \n", + "684285 0 \n", + "684325 0 \n", + "684398 0 \n", + "684527 0 \n", + "684622 0 \n", + "684670 0 \n", + "684892 0 \n", + "684922 0 \n", + "684928 0 \n", + "684931 0 \n", + "684987 0 \n", + "685176 0 \n", + "685230 0 \n", + "685382 0 \n", + "685410 0 \n", + "685438 0 \n", + "685548 0 \n", + "685575 0 \n", + "685592 0 \n", + "685605 0 \n", + "685644 0 \n", + "685710 0 \n", + "685776 0 \n", + "685829 0 \n", + "685853 0 \n", + "685868 0 \n", + "685931 0 \n", + "685983 0 \n", + "685992 0 \n", + "686035 0 \n", + "686068 0 \n", + "686173 0 \n", + "686186 0 \n", + "686195 0 \n", + "686207 0 \n", + "686245 0 \n", + "686253 0 \n", + "686272 0 \n", + "686401 0 \n", + "686417 0 \n", + "686535 0 \n", + "686553 0 \n", + "686579 0 \n", + "686595 0 \n", + "686597 0 \n", + "686658 0 \n", + "686670 0 \n", + "686679 0 \n", + "686744 0 \n", + "686757 0 \n", + "686835 0 \n", + "686837 0 \n", + "686902 0 \n", + "687019 0 \n", + "687020 0 \n", + "687023 0 \n", + "687025 0 \n", + "687027 0 \n", + "687028 0 \n", + "687029 0 \n", + "687032 0 \n", + "687038 0 \n", + "687039 0 \n", + "687042 0 \n", + "687054 0 \n", + "779992 0 \n", + "780225 0 \n", + "782010 0 \n", + "782036 0 \n", + "782042 0 \n", + "782064 0 \n", + "782083 0 \n", + "782101 0 \n", + "782110 0 \n", + "782217 0 \n", + "782219 0 \n", + "782230 0 \n", + "782270 0 \n", + "782282 0 \n", + "782447 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# NAICS Codes that return an empty query\n", + "max_rows = 100\n", + "pd.options.display.max_rows = max_rows\n", + "\n", + "naics_df = df[['idx', 'localfile', 'primary_NAICS']]\n", + "naics_df = naics_df.dropna(subset = ['primary_NAICS'])\n", + "\n", + "\n", + "# # Display only entries with a trailing 0\n", + "naics_df['primary_NAICS'] = naics_df['primary_NAICS'].str.replace('.0', '', regex = False)\n", + "naics_df['primary_NAICS'] = naics_df['primary_NAICS'].replace('TBD', np.nan, regex = False)\n", + "naics_df['primary_NAICS'] = naics_df['primary_NAICS'].replace('tbd', np.nan, regex = False)\n", + "naics_df['primary_NAICS'] = naics_df['primary_NAICS'].replace('-', np.nan, regex = False)\n", + "naics_df['primary_NAICS'] = naics_df['primary_NAICS'].str.replace('\\s\\-\\s.*', '', regex = True)\n", + "\n", + "naics_df = naics_df.dropna(subset = ['primary_NAICS'])\n", + "# display(naics_df.loc[793827])\n", + "# display(naics_df[(naics_df['localfile'] == 'Indigenous_Business_Directory.csv') & (naics_df['primary_NAICS'].str.contains('-', regex = False))])\n", + "\n", + "naics_df['primary_NAICS'] = naics_df['primary_NAICS'].astype('Int64')\n", + "naics_df = naics_df[naics_df['primary_NAICS'] % 10 == 0]\n", + "naics_df = naics_df[naics_df['primary_NAICS'] // 100000 == 0]\n", + "\n", + "# with pd.option_context('display.max_rows', 1000, 'display.max_columns', None): # more options can be specified also\n", + "# print(naics_df.loc[8066, 'localfile'])\n", + "display(naics_df.iloc[-max_rows:])\n", + "# pd.unique(naics_df)" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "1\n", + "11\n", + "21\n", + "22\n", + "23\n", + "31\n", + "32\n", + "33\n", + "41\n", + "42\n", + "44\n", + "45\n", + "48\n", + "49\n", + "51\n", + "52\n", + "53\n", + "54\n", + "55\n", + "56\n", + "61\n", + "62\n", + "71\n", + "72\n", + "81\n", + "91\n", + "113\n", + "236\n", + "237\n", + "238\n", + "313\n", + "315\n", + "316\n", + "321\n", + "322\n", + "323\n", + "325\n", + "326\n", + "331\n", + "332\n", + "333\n", + "334\n", + "336\n", + "337\n", + "339\n", + "413\n", + "414\n", + "415\n", + "416\n", + "417\n", + "418\n", + "441\n", + "442\n", + "443\n", + "444\n", + "445\n", + "446\n", + "447\n", + "448\n", + "451\n", + "452\n", + "453\n", + "454\n", + "482\n", + "484\n", + "485\n", + "488\n", + "491\n", + "492\n", + "493\n", + "511\n", + "512\n", + "517\n", + "519\n", + "522\n", + "523\n", + "524\n", + "526\n", + "531\n", + "532\n", + "533\n", + "541\n", + "561\n", + "562\n", + "611\n", + "621\n", + "623\n", + "624\n", + "711\n", + "713\n", + "722\n", + "811\n", + "812\n", + "813\n", + "814\n", + "912\n", + "2361\n", + "2362\n", + "2381\n", + "2382\n", + "2383\n", + "2389\n", + "3152\n", + "3256\n", + "3323\n", + "3331\n", + "3335\n", + "3339\n", + "4189\n", + "4411\n", + "4421\n", + "4422\n", + "4441\n", + "4451\n", + "4452\n", + "4453\n", + "4471\n", + "4481\n", + "4482\n", + "4513\n", + "4521\n", + "4529\n", + "4531\n", + "4533\n", + "4539\n", + "4541\n", + "4841\n", + "4842\n", + "4882\n", + "4883\n", + "4921\n", + "4922\n", + "5111\n", + "5112\n", + "5122\n", + "5173\n", + "5179\n", + "5191\n", + "5239\n", + "5242\n", + "5312\n", + "5321\n", + "5411\n", + "5412\n", + "5415\n", + "5416\n", + "5418\n", + "5511\n", + "5611\n", + "5613\n", + "5622\n", + "5629\n", + "6111\n", + "6112\n", + "6113\n", + "6115\n", + "6116\n", + "6117\n", + "6211\n", + "6212\n", + "6215\n", + "6216\n", + "6231\n", + "6239\n", + "6244\n", + "7139\n", + "7213\n", + "7224\n", + "7225\n", + "8111\n", + "8112\n", + "8113\n", + "8114\n", + "8122\n", + "8131\n", + "8133\n", + "8134\n", + "8139\n", + "11111\n", + "11121\n", + "11133\n", + "11141\n", + "11142\n", + "11199\n", + "11211\n", + "11232\n", + "11292\n", + "11299\n", + "11511\n", + "11521\n", + "21111\n", + "21222\n", + "21232\n", + "21311\n", + "22111\n", + "22112\n", + "22121\n", + "22131\n", + "22132\n", + "22133\n", + "23611\n", + "23621\n", + "23622\n", + "23711\n", + "23712\n", + "23713\n", + "23721\n", + "23731\n", + "23799\n", + "23811\n", + "23812\n", + "23813\n", + "23814\n", + "23815\n", + "23816\n", + "23817\n", + "23819\n", + "23821\n", + "23822\n", + "23829\n", + "23831\n", + "23832\n", + "23833\n", + "23834\n", + "23835\n", + "23839\n", + "23891\n", + "23899\n", + "31111\n", + "31121\n", + "31134\n", + "31135\n", + "31141\n", + "31142\n", + "31151\n", + "31152\n", + "31161\n", + "31171\n", + "31181\n", + "31182\n", + "31191\n", + "31192\n", + "31193\n", + "31194\n", + "31199\n", + "31211\n", + "31212\n", + "31213\n", + "31214\n", + "31222\n", + "31322\n", + "31331\n", + "31411\n", + "31412\n", + "31491\n", + "31499\n", + "31521\n", + "31522\n", + "31524\n", + "31528\n", + "31599\n", + "31611\n", + "31621\n", + "31699\n", + "32111\n", + "32121\n", + "32191\n", + "32192\n", + "32199\n", + "32211\n", + "32212\n", + "32221\n", + "32222\n", + "32223\n", + "32229\n", + "32311\n", + "32312\n", + "32412\n", + "32513\n", + "32518\n", + "32519\n", + "32521\n", + "32531\n", + "32532\n", + "32541\n", + "32551\n", + "32552\n", + "32561\n", + "32562\n", + "32591\n", + "32599\n", + "32611\n", + "32612\n", + "32613\n", + "32614\n", + "32615\n", + "32616\n", + "32619\n", + "32629\n", + "32711\n", + "32712\n", + "32721\n", + "32731\n", + "32732\n", + "32733\n", + "32739\n", + "32742\n", + "32799\n", + "33111\n", + "33121\n", + "33122\n", + "33131\n", + "33141\n", + "33142\n", + "33151\n", + "33152\n", + "33211\n", + "33221\n", + "33231\n", + "33232\n", + "33241\n", + "33242\n", + "33243\n", + "33251\n", + "33261\n", + "33271\n", + "33272\n", + "33281\n", + "33291\n", + "33299\n", + "33311\n", + "33312\n", + "33313\n", + "33324\n", + "33331\n", + "33341\n", + "33351\n", + "33361\n", + "33391\n", + "33392\n", + "33399\n", + "33411\n", + "33421\n", + "33422\n", + "33429\n", + "33431\n", + "33441\n", + "33451\n", + "33511\n", + "33512\n", + "33521\n", + "33522\n", + "33531\n", + "33592\n", + "33593\n", + "33599\n", + "33611\n", + "33612\n", + "33621\n", + "33631\n", + "33632\n", + "33633\n", + "33634\n", + "33635\n", + "33636\n", + "33637\n", + "33639\n", + "33641\n", + "33699\n", + "33711\n", + "33712\n", + "33721\n", + "33791\n", + "33792\n", + "33911\n", + "33991\n", + "33992\n", + "33993\n", + "33994\n", + "33995\n", + "33999\n", + "41113\n", + "41211\n", + "41311\n", + "41312\n", + "41313\n", + "41314\n", + "41315\n", + "41316\n", + "41319\n", + "41321\n", + "41322\n", + "41331\n", + "41411\n", + "41412\n", + "41413\n", + "41421\n", + "41422\n", + "41431\n", + "41432\n", + "41433\n", + "41439\n", + "41441\n", + "41442\n", + "41443\n", + "41445\n", + "41446\n", + "41447\n", + "41451\n", + "41452\n", + "41511\n", + "41512\n", + "41519\n", + "41521\n", + "41529\n", + "41531\n", + "41611\n", + "41612\n", + "41621\n", + "41631\n", + "41632\n", + "41633\n", + "41634\n", + "41639\n", + "41711\n", + "41721\n", + "41722\n", + "41723\n", + "41731\n", + "41732\n", + "41791\n", + "41792\n", + "41793\n", + "41799\n", + "41811\n", + "41812\n", + "41819\n", + "41821\n", + "41822\n", + "41831\n", + "41832\n", + "41839\n", + "41841\n", + "41892\n", + "41893\n", + "41899\n", + "41911\n", + "41912\n", + "44111\n", + "44112\n", + "44121\n", + "44122\n", + "44131\n", + "44132\n", + "44211\n", + "44221\n", + "44229\n", + "44314\n", + "44411\n", + "44412\n", + "44413\n", + "44419\n", + "44421\n", + "44422\n", + "44511\n", + "44512\n", + "44521\n", + "44522\n", + "44523\n", + "44529\n", + "44531\n", + "44611\n", + "44612\n", + "44613\n", + "44619\n", + "44711\n", + "44719\n", + "44811\n", + "44812\n", + "44813\n", + "44814\n", + "44815\n", + "44819\n", + "44821\n", + "44831\n", + "44832\n", + "45111\n", + "45112\n", + "45113\n", + "45114\n", + "45131\n", + "45211\n", + "45291\n", + "45299\n", + "45311\n", + "45321\n", + "45322\n", + "45331\n", + "45391\n", + "45392\n", + "45393\n", + "45399\n", + "45411\n", + "45431\n", + "45439\n", + "48111\n", + "48121\n", + "48211\n", + "48311\n", + "48411\n", + "48412\n", + "48421\n", + "48422\n", + "48423\n", + "48511\n", + "48521\n", + "48531\n", + "48532\n", + "48541\n", + "48551\n", + "48599\n", + "48621\n", + "48811\n", + "48819\n", + "48821\n", + "48832\n", + "48841\n", + "48849\n", + "48851\n", + "48899\n", + "49111\n", + "49211\n", + "49221\n", + "49311\n", + "49312\n", + "49319\n", + "51111\n", + "51112\n", + "51113\n", + "51114\n", + "51119\n", + "51121\n", + "51211\n", + "51212\n", + "51213\n", + "51219\n", + "51221\n", + "51223\n", + "51224\n", + "51511\n", + "51512\n", + "51711\n", + "51721\n", + "51731\n", + "51741\n", + "51791\n", + "51821\n", + "51911\n", + "51912\n", + "51913\n", + "51919\n", + "52211\n", + "52213\n", + "52222\n", + "52229\n", + "52231\n", + "52232\n", + "52239\n", + "52311\n", + "52312\n", + "52313\n", + "52321\n", + "52391\n", + "52392\n", + "52393\n", + "52399\n", + "52411\n", + "52412\n", + "52421\n", + "52429\n", + "52611\n", + "52691\n", + "52698\n", + "53111\n", + "53112\n", + "53113\n", + "53119\n", + "53121\n", + "53131\n", + "53132\n", + "53139\n", + "53211\n", + "53212\n", + "53221\n", + "53222\n", + "53223\n", + "53228\n", + "53229\n", + "53231\n", + "53241\n", + "53249\n", + "53311\n", + "54111\n", + "54112\n", + "54119\n", + "54121\n", + "54131\n", + "54132\n", + "54133\n", + "54134\n", + "54135\n", + "54136\n", + "54137\n", + "54138\n", + "54141\n", + "54142\n", + "54143\n", + "54149\n", + "54151\n", + "54161\n", + "54162\n", + "54169\n", + "54171\n", + "54172\n", + "54181\n", + "54182\n", + "54184\n", + "54185\n", + "54186\n", + "54187\n", + "54189\n", + "54191\n", + "54192\n", + "54193\n", + "54194\n", + "54199\n", + "55111\n", + "56111\n", + "56121\n", + "56131\n", + "56132\n", + "56133\n", + "56141\n", + "56142\n", + "56143\n", + "56144\n", + "56145\n", + "56149\n", + "56151\n", + "56152\n", + "56159\n", + "56161\n", + "56162\n", + "56171\n", + "56172\n", + "56173\n", + "56174\n", + "56179\n", + "56191\n", + "56192\n", + "56199\n", + "56211\n", + "56221\n", + "56291\n", + "56292\n", + "56299\n", + "61111\n", + "61121\n", + "61141\n", + "61142\n", + "61143\n", + "61151\n", + "61161\n", + "61162\n", + "61163\n", + "61169\n", + "61171\n", + "62111\n", + "62121\n", + "62131\n", + "62132\n", + "62133\n", + "62134\n", + "62139\n", + "62141\n", + "62142\n", + "62149\n", + "62151\n", + "62161\n", + "62191\n", + "62199\n", + "62211\n", + "62221\n", + "62231\n", + "62311\n", + "62321\n", + "62322\n", + "62331\n", + "62399\n", + "62411\n", + "62412\n", + "62419\n", + "62421\n", + "62422\n", + "62423\n", + "62431\n", + "62441\n", + "71111\n", + "71112\n", + "71113\n", + "71119\n", + "71121\n", + "71131\n", + "71132\n", + "71141\n", + "71151\n", + "71211\n", + "71212\n", + "71213\n", + "71219\n", + "71311\n", + "71312\n", + "71321\n", + "71329\n", + "71391\n", + "71393\n", + "71394\n", + "71395\n", + "71399\n", + "72111\n", + "72112\n", + "72119\n", + "72121\n", + "72131\n", + "72231\n", + "72232\n", + "72233\n", + "72241\n", + "72251\n", + "81111\n", + "81112\n", + "81119\n", + "81121\n", + "81131\n", + "81141\n", + "81142\n", + "81143\n", + "81149\n", + "81211\n", + "81219\n", + "81221\n", + "81222\n", + "81231\n", + "81232\n", + "81233\n", + "81291\n", + "81292\n", + "81293\n", + "81299\n", + "81311\n", + "81321\n", + "81331\n", + "81341\n", + "81391\n", + "81392\n", + "81393\n", + "81394\n", + "81399\n", + "81411\n", + "91111\n", + "91123\n", + "91124\n", + "91131\n", + "91132\n", + "91139\n", + "91141\n", + "91191\n", + "91211\n", + "91212\n", + "91213\n", + "91215\n", + "91221\n", + "91291\n", + "91311\n", + "91313\n", + "91314\n", + "91319\n", + "91391\n", + "111110\n", + "111120\n", + "111140\n", + "111150\n", + "111190\n", + "111211\n", + "111219\n", + "111330\n", + "111331\n", + "111411\n", + "111419\n", + "111420\n", + "111421\n", + "111422\n", + "111910\n", + "111940\n", + "111993\n", + "111994\n", + "111998\n", + "111999\n", + "112110\n", + "112111\n", + "112120\n", + "112130\n", + "112210\n", + "112310\n", + "112320\n", + "112330\n", + "112340\n", + "112391\n", + "112399\n", + "112410\n", + "112420\n", + "112510\n", + "112910\n", + "112920\n", + "112930\n", + "112990\n", + "112991\n", + "112999\n", + "113110\n", + "113210\n", + "113311\n", + "113312\n", + "114113\n", + "114210\n", + "115110\n", + "115116\n", + "115210\n", + "115310\n", + "211110\n", + "211113\n", + "212299\n", + "212314\n", + "212323\n", + "212396\n", + "212397\n", + "212398\n", + "213111\n", + "213112\n", + "213117\n", + "213118\n", + "213119\n", + "221111\n", + "221112\n", + "221114\n", + "221119\n", + "221121\n", + "221122\n", + "221210\n", + "221310\n", + "221320\n", + "236110\n", + "236115\n", + "236116\n", + "236117\n", + "236118\n", + "236200\n", + "236210\n", + "236220\n", + "237110\n", + "237120\n", + "237130\n", + "237210\n", + "237310\n", + "237990\n", + "238110\n", + "238120\n", + "238130\n", + "238140\n", + "238150\n", + "238160\n", + "238170\n", + "238190\n", + "238210\n", + "238220\n", + "238290\n", + "238291\n", + "238299\n", + "238310\n", + "238320\n", + "238330\n", + "238340\n", + "238350\n", + "238390\n", + "238910\n", + "238990\n", + "311111\n", + "311119\n", + "311211\n", + "311214\n", + "311224\n", + "311225\n", + "311230\n", + "311320\n", + "311330\n", + "311340\n", + "311351\n", + "311352\n", + "311410\n", + "311420\n", + "311511\n", + "311515\n", + "311520\n", + "311611\n", + "311614\n", + "311615\n", + "311710\n", + "311811\n", + "311814\n", + "311821\n", + "311822\n", + "311823\n", + "311824\n", + "311911\n", + "311919\n", + "311920\n", + "311930\n", + "311940\n", + "311990\n", + "311999\n", + "312110\n", + "312113\n", + "312120\n", + "312130\n", + "312140\n", + "312220\n", + "312310\n", + "313110\n", + "313210\n", + "313220\n", + "313230\n", + "313310\n", + "314110\n", + "314120\n", + "314910\n", + "314990\n", + "315110\n", + "315190\n", + "315210\n", + "315220\n", + "315221\n", + "315222\n", + "315229\n", + "315239\n", + "315241\n", + "315249\n", + "315281\n", + "315289\n", + "315292\n", + "315299\n", + "315990\n", + "316210\n", + "316990\n", + "321111\n", + "321112\n", + "321114\n", + "321210\n", + "321211\n", + "321212\n", + "321215\n", + "321216\n", + "321910\n", + "321911\n", + "321919\n", + "321920\n", + "321990\n", + "321991\n", + "321992\n", + "321999\n", + "322121\n", + "322130\n", + "322211\n", + "322212\n", + "322219\n", + "322220\n", + "322230\n", + "322299\n", + "323111\n", + "323113\n", + "323114\n", + "323115\n", + "323116\n", + "323119\n", + "323120\n", + "324110\n", + "324121\n", + "324122\n", + "324190\n", + "325110\n", + "325120\n", + "325130\n", + "325181\n", + "325189\n", + "325190\n", + "325210\n", + "325220\n", + "325313\n", + "325314\n", + "325320\n", + "325410\n", + "325510\n", + "325520\n", + "325610\n", + "325620\n", + "325910\n", + "325991\n", + "325998\n", + "325999\n", + "326100\n", + "326111\n", + "326114\n", + "326121\n", + "326122\n", + "326130\n", + "326140\n", + "326150\n", + "326160\n", + "326190\n", + "326191\n", + "326193\n", + "326196\n", + "326198\n", + "326199\n", + "326210\n", + "326220\n", + "326290\n", + "327110\n", + "327120\n", + "327210\n", + "327214\n", + "327215\n", + "327310\n", + "327320\n", + "327330\n", + "327390\n", + "327410\n", + "327420\n", + "327910\n", + "327990\n", + "331110\n", + "331111\n", + "331200\n", + "331210\n", + "331221\n", + "331222\n", + "331313\n", + "331317\n", + "331410\n", + "331420\n", + "331490\n", + "331511\n", + "331514\n", + "331523\n", + "331529\n", + "332110\n", + "332113\n", + "332118\n", + "332210\n", + "332300\n", + "332310\n", + "332311\n", + "332312\n", + "332314\n", + "332319\n", + "332321\n", + "332322\n", + "332323\n", + "332329\n", + "332410\n", + "332420\n", + "332430\n", + "332431\n", + "332439\n", + "332510\n", + "332611\n", + "332619\n", + "332710\n", + "332720\n", + "332810\n", + "332910\n", + "332990\n", + "332991\n", + "332999\n", + "333110\n", + "333111\n", + "333120\n", + "333130\n", + "333131\n", + "333200\n", + "333210\n", + "333220\n", + "333245\n", + "333246\n", + "333247\n", + "333248\n", + "333249\n", + "333299\n", + "333310\n", + "333318\n", + "333410\n", + "333413\n", + "333415\n", + "333416\n", + "333510\n", + "333511\n", + "333517\n", + "333519\n", + "333610\n", + "333611\n", + "333619\n", + "333910\n", + "333920\n", + "333990\n", + "333992\n", + "333999\n", + "334110\n", + "334210\n", + "334220\n", + "334290\n", + "334310\n", + "334410\n", + "334511\n", + "334512\n", + "334610\n", + "335110\n", + "335120\n", + "335122\n", + "335210\n", + "335223\n", + "335229\n", + "335300\n", + "335311\n", + "335312\n", + "335315\n", + "335910\n", + "335920\n", + "335930\n", + "335990\n", + "335999\n", + "336110\n", + "336120\n", + "336211\n", + "336212\n", + "336215\n", + "336300\n", + "336310\n", + "336320\n", + "336330\n", + "336340\n", + "336350\n", + "336360\n", + "336370\n", + "336390\n", + "336410\n", + "336510\n", + "336611\n", + "336612\n", + "336990\n", + "336999\n", + "337100\n", + "337110\n", + "337121\n", + "337123\n", + "337126\n", + "337127\n", + "337210\n", + "337213\n", + "337214\n", + "337215\n", + "337910\n", + "337920\n", + "339110\n", + "339113\n", + "339114\n", + "339116\n", + "339910\n", + "339920\n", + "339930\n", + "339940\n", + "339950\n", + "339990\n", + "339991\n", + "339999\n", + "411110\n", + "411120\n", + "411130\n", + "411190\n", + "412110\n", + "413110\n", + "413120\n", + "413130\n", + "413140\n", + "413150\n", + "413160\n", + "413190\n", + "413210\n", + "413220\n", + "413310\n", + "414110\n", + "414120\n", + "414130\n", + "414210\n", + "414220\n", + "414300\n", + "414310\n", + "414320\n", + "414330\n", + "414390\n", + "414410\n", + "414420\n", + "414430\n", + "414440\n", + "414450\n", + "414460\n", + "414470\n", + "414510\n", + "414520\n", + "415110\n", + "415120\n", + "415190\n", + "415200\n", + "415210\n", + "415290\n", + "415310\n", + "416000\n", + "416110\n", + "416120\n", + "416210\n", + "416310\n", + "416320\n", + "416330\n", + "416340\n", + "416390\n", + "417000\n", + "417110\n", + "417210\n", + "417220\n", + "417230\n", + "417300\n", + "417310\n", + "417320\n", + "417910\n", + "417920\n", + "417930\n", + "417990\n", + "418110\n", + "418120\n", + "418190\n", + "418200\n", + "418210\n", + "418220\n", + "418310\n", + "418320\n", + "418390\n", + "418410\n", + "418910\n", + "418920\n", + "418930\n", + "418990\n", + "419110\n", + "419120\n", + "419130\n", + "419150\n", + "419190\n", + "423210\n", + "423510\n", + "423690\n", + "423840\n", + "423930\n", + "424690\n", + "425120\n", + "441110\n", + "441120\n", + "441210\n", + "441220\n", + "441228\n", + "441310\n", + "441320\n", + "442110\n", + "442210\n", + "442291\n", + "442292\n", + "442298\n", + "442299\n", + "443110\n", + "443120\n", + "443130\n", + "443141\n", + "443142\n", + "443143\n", + "443144\n", + "443145\n", + "443146\n", + "444110\n", + "444120\n", + "444130\n", + "444190\n", + "444200\n", + "444210\n", + "444220\n", + "445110\n", + "445120\n", + "445210\n", + "445220\n", + "445230\n", + "445291\n", + "445292\n", + "445299\n", + "445310\n", + "446110\n", + "446120\n", + "446130\n", + "446191\n", + "446199\n", + "447110\n", + "447190\n", + "448110\n", + "448120\n", + "448130\n", + "448140\n", + "448150\n", + "448190\n", + "448191\n", + "448199\n", + "448210\n", + "448310\n", + "448320\n", + "451110\n", + "451111\n", + "451112\n", + "451113\n", + "451119\n", + "451120\n", + "451130\n", + "451140\n", + "451210\n", + "451211\n", + "451220\n", + "451310\n", + "452110\n", + "452112\n", + "452910\n", + "452990\n", + "452991\n", + "452999\n", + "453110\n", + "453210\n", + "453220\n", + "453310\n", + "453910\n", + "453920\n", + "453930\n", + "453991\n", + "453992\n", + "453993\n", + "453998\n", + "453999\n", + "454110\n", + "454111\n", + "454210\n", + "454310\n", + "454311\n", + "454312\n", + "454319\n", + "454390\n", + "481110\n", + "481111\n", + "481214\n", + "481215\n", + "482110\n", + "482113\n", + "482114\n", + "483115\n", + "483116\n", + "483213\n", + "484000\n", + "484100\n", + "484110\n", + "484120\n", + "484121\n", + "484122\n", + "484200\n", + "484210\n", + "484220\n", + "484221\n", + "484222\n", + "484223\n", + "484229\n", + "484230\n", + "484231\n", + "484232\n", + "484233\n", + "484239\n", + "485110\n", + "485210\n", + "485310\n", + "485320\n", + "485410\n", + "485510\n", + "485990\n", + "486110\n", + "486210\n", + "486910\n", + "486990\n", + "487110\n", + "487210\n", + "487990\n", + "488111\n", + "488119\n", + "488190\n", + "488210\n", + "488310\n", + "488320\n", + "488339\n", + "488390\n", + "488410\n", + "488490\n", + "488510\n", + "488511\n", + "488519\n", + "488990\n", + "491110\n", + "492110\n", + "492210\n", + "493110\n", + "493120\n", + "493130\n", + "493190\n", + "511110\n", + "511120\n", + "511130\n", + "511140\n", + "511190\n", + "511210\n", + "511211\n", + "511212\n", + "512110\n", + "512130\n", + "512190\n", + "512210\n", + "512230\n", + "512240\n", + "515110\n", + "515111\n", + "515120\n", + "515210\n", + "516110\n", + "517110\n", + "517111\n", + "517112\n", + "517210\n", + "517310\n", + "517410\n", + "517910\n", + "517911\n", + "517919\n", + "518111\n", + "518210\n", + "519110\n", + "519120\n", + "519121\n", + "519122\n", + "519130\n", + "519190\n", + "521110\n", + "522111\n", + "522112\n", + "522130\n", + "522190\n", + "522210\n", + "522220\n", + "522291\n", + "522299\n", + "522310\n", + "522320\n", + "522321\n", + "522329\n", + "522390\n", + "523110\n", + "523120\n", + "523130\n", + "523140\n", + "523210\n", + "523910\n", + "523920\n", + "523930\n", + "523990\n", + "523999\n", + "524111\n", + "524112\n", + "524121\n", + "524122\n", + "524123\n", + "524124\n", + "524126\n", + "524129\n", + "524131\n", + "524132\n", + "524139\n", + "524210\n", + "524290\n", + "524291\n", + "524299\n", + "525990\n", + "526110\n", + "526913\n", + "526914\n", + "526989\n", + "531110\n", + "531111\n", + "531112\n", + "531120\n", + "531130\n", + "531190\n", + "531210\n", + "531211\n", + "531212\n", + "531310\n", + "531311\n", + "531320\n", + "531390\n", + "532111\n", + "532112\n", + "532120\n", + "532210\n", + "532230\n", + "532280\n", + "532290\n", + "532299\n", + "532310\n", + "532400\n", + "532410\n", + "532420\n", + "532490\n", + "533110\n", + "541110\n", + "541120\n", + "541190\n", + "541199\n", + "541211\n", + "541212\n", + "541213\n", + "541215\n", + "541219\n", + "541310\n", + "541320\n", + "541330\n", + "541340\n", + "541350\n", + "541360\n", + "541370\n", + "541380\n", + "541400\n", + "541410\n", + "541420\n", + "541430\n", + "541490\n", + "541510\n", + "541511\n", + "541514\n", + "541515\n", + "541519\n", + "541610\n", + "541611\n", + "541612\n", + "541613\n", + "541614\n", + "541618\n", + "541619\n", + "541620\n", + "541690\n", + "541710\n", + "541720\n", + "541800\n", + "541810\n", + "541820\n", + "541830\n", + "541840\n", + "541850\n", + "541860\n", + "541870\n", + "541890\n", + "541891\n", + "541899\n", + "541910\n", + "541920\n", + "541921\n", + "541930\n", + "541940\n", + "541990\n", + "551112\n", + "551113\n", + "551114\n", + "561110\n", + "561210\n", + "561300\n", + "561310\n", + "561320\n", + "561330\n", + "561400\n", + "561410\n", + "561420\n", + "561430\n", + "561440\n", + "561450\n", + "561490\n", + "561499\n", + "561510\n", + "561520\n", + "561590\n", + "561611\n", + "561612\n", + "561613\n", + "561620\n", + "561621\n", + "561622\n", + "561700\n", + "561710\n", + "561720\n", + "561721\n", + "561722\n", + "561730\n", + "561740\n", + "561790\n", + "561791\n", + "561799\n", + "561910\n", + "561920\n", + "561990\n", + "562110\n", + "562210\n", + "562910\n", + "562920\n", + "562990\n", + "611110\n", + "611210\n", + "611310\n", + "611410\n", + "611420\n", + "611430\n", + "611510\n", + "611511\n", + "611512\n", + "611519\n", + "611610\n", + "611620\n", + "611630\n", + "611690\n", + "611691\n", + "611692\n", + "611699\n", + "611710\n", + "621110\n", + "621111\n", + "621112\n", + "621210\n", + "621310\n", + "621320\n", + "621330\n", + "621340\n", + "621390\n", + "621399\n", + "621410\n", + "621420\n", + "621494\n", + "621498\n", + "621499\n", + "621510\n", + "621511\n", + "621512\n", + "621610\n", + "621911\n", + "621912\n", + "621990\n", + "621999\n", + "622111\n", + "622210\n", + "622310\n", + "623110\n", + "623210\n", + "623221\n", + "623222\n", + "623310\n", + "623311\n", + "623312\n", + "623991\n", + "623999\n", + "624110\n", + "624120\n", + "624190\n", + "624210\n", + "624220\n", + "624230\n", + "624310\n", + "624410\n", + "711110\n", + "711111\n", + "711112\n", + "711120\n", + "711130\n", + "711190\n", + "711211\n", + "711213\n", + "711214\n", + "711217\n", + "711218\n", + "711310\n", + "711311\n", + "711319\n", + "711320\n", + "711321\n", + "711322\n", + "711329\n", + "711410\n", + "711411\n", + "711510\n", + "711511\n", + "711512\n", + "711513\n", + "712110\n", + "712111\n", + "712115\n", + "712119\n", + "712120\n", + "712130\n", + "712190\n", + "713110\n", + "713120\n", + "713210\n", + "713291\n", + "713299\n", + "713910\n", + "713920\n", + "713930\n", + "713940\n", + "713950\n", + "713990\n", + "713991\n", + "713992\n", + "713999\n", + "721110\n", + "721111\n", + "721112\n", + "721113\n", + "721114\n", + "721120\n", + "721191\n", + "721192\n", + "721198\n", + "721211\n", + "721212\n", + "721213\n", + "721310\n", + "722110\n", + "722210\n", + "722310\n", + "722320\n", + "722330\n", + "722410\n", + "722511\n", + "722512\n", + "722513\n", + "722515\n", + "811110\n", + "811111\n", + "811112\n", + "811118\n", + "811119\n", + "811121\n", + "811122\n", + "811191\n", + "811192\n", + "811198\n", + "811199\n", + "811210\n", + "811211\n", + "811212\n", + "811310\n", + "811411\n", + "811412\n", + "811420\n", + "811430\n", + "811490\n", + "812110\n", + "812111\n", + "812112\n", + "812113\n", + "812114\n", + "812115\n", + "812116\n", + "812190\n", + "812191\n", + "812199\n", + "812210\n", + "812220\n", + "812310\n", + "812320\n", + "812330\n", + "812910\n", + "812921\n", + "812922\n", + "812930\n", + "812990\n", + "813110\n", + "813210\n", + "813219\n", + "813310\n", + "813319\n", + "813410\n", + "813910\n", + "813920\n", + "813930\n", + "813940\n", + "813990\n", + "814110\n", + "911230\n", + "911240\n", + "911290\n", + "911310\n", + "911320\n", + "911390\n", + "911410\n", + "911910\n", + "912110\n", + "912120\n", + "912130\n", + "912140\n", + "912150\n", + "912190\n", + "912210\n", + "912910\n", + "913130\n", + "913140\n", + "913150\n", + "913190\n", + "913910\n", + "914110\n", + "919110\n", + "999999\n" + ] + } + ], + "source": [ + "x = pd.unique(df['primary_NAICS'].dropna()).astype(int)\n", + "x = x[~np.isnan(x)]\n", + "x.sort()\n", + "for i in x:\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idxlocalfilebusiness_namebusiness_sectorbusiness_subsectorbusiness_descriptionbusiness_id_nolicence_numberlicence_typeprimary_NAICSsecondary_NAICSNAICS_descralt_econ_act_codealt_econ_act_descriplatitudelongitudefull_addressfull_address_2mailing_addressunitstreet_nostreet_namestreet_directionstreet_typecityprovincepostal_codecountrybusiness_websiteemailtelephonetelephone_extensiontoll_free_telephonefaxtotal_no_employeesno_full_timeno_part_timeno_seasonaldate_establishedindigenousstatusprovidergeo_sourcevalid_coordaddr_infohas_addr_infoinvalid_NAICS_query
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [idx, localfile, business_name, business_sector, business_subsector, business_description, business_id_no, licence_number, licence_type, primary_NAICS, secondary_NAICS, NAICS_descr, alt_econ_act_code, alt_econ_act_descrip, latitude, longitude, full_address, full_address_2, mailing_address, unit, street_no, street_name, street_direction, street_type, city, province, postal_code, country, business_website, email, telephone, telephone_extension, toll_free_telephone, fax, total_no_employees, no_full_time, no_part_time, no_seasonal, date_established, indigenous, status, provider, geo_source, valid_coord, addr_info, has_addr_info, invalid_NAICS_query]\n", + "Index: []" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df['primary_NAICS'] == '-812910']" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'err' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [105]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43merr\u001b[49m\n", + "\u001b[0;31mNameError\u001b[0m: name 'err' is not defined" + ] + } + ], + "source": [ + "err" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:23:41.075967Z", + "iopub.status.busy": "2022-07-28T17:23:41.075685Z", + "iopub.status.idle": "2022-07-28T17:23:42.014825Z", + "shell.execute_reply": "2022-07-28T17:23:42.013879Z", + "shell.execute_reply.started": "2022-07-28T17:23:41.075942Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idxlocalfilebusiness_namebusiness_sectorbusiness_subsectorbusiness_descriptionbusiness_id_nolicence_numberlicence_typeprimary_NAICSsecondary_NAICSNAICS_descralt_econ_act_codealt_econ_act_descriplatitudelongitudefull_addressfull_address_2mailing_addressunitstreet_nostreet_namestreet_directionstreet_typecityprovincepostal_codecountrybusiness_websiteemailtelephonetelephone_extensiontoll_free_telephonefaxtotal_no_employeesno_full_timeno_part_timeno_seasonaldate_establishedindigenousstatusprovidergeo_sourcevalid_coordaddr_infohas_addr_info
833387a122c15a250341d251aBC_Vancouver_Business_Licences.csvPost The Butcher IncOfficeBrokerNaNNaN19-138327NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNVancouver78NaNCANADANaNNaNNaNNaNNaNNaN1NaNNaNNaNNaNnoGone Out of BusinessCity of VancouverNaNFalse________Vancouver_True
16646469139e8fad512fe66792BC_Vancouver_Business_Licences.csv(Naoko Winther)Health ServicesCounsellingNaNNaN22-123793NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN20 - 07LAKEVIEW ESTATESNaNNaNNaNNaNNaNNaNNaNNaN1NaNNaNNaNNaNnoIssuedCity of VancouverNaNFalse________20 - 07_True
\n", + "
" + ], + "text/plain": [ + " idx localfile \\\n", + "83338 7a122c15a250341d251a BC_Vancouver_Business_Licences.csv \n", + "166464 69139e8fad512fe66792 BC_Vancouver_Business_Licences.csv \n", + "\n", + " business_name business_sector business_subsector \\\n", + "83338 Post The Butcher Inc Office Broker \n", + "166464 (Naoko Winther) Health Services Counselling \n", + "\n", + " business_description business_id_no licence_number licence_type \\\n", + "83338 NaN NaN 19-138327 NaN \n", + "166464 NaN NaN 22-123793 NaN \n", + "\n", + " primary_NAICS secondary_NAICS NAICS_descr alt_econ_act_code \\\n", + "83338 NaN NaN NaN NaN \n", + "166464 NaN NaN NaN NaN \n", + "\n", + " alt_econ_act_descrip latitude longitude full_address full_address_2 \\\n", + "83338 NaN NaN NaN NaN NaN \n", + "166464 NaN NaN NaN NaN NaN \n", + "\n", + " mailing_address unit street_no street_name street_direction \\\n", + "83338 NaN NaN NaN NaN NaN \n", + "166464 NaN NaN NaN NaN NaN \n", + "\n", + " street_type city province postal_code country \\\n", + "83338 NaN Vancouver 78 NaN CANADA \n", + "166464 NaN 20 - 07 LAKEVIEW ESTATES NaN NaN \n", + "\n", + " business_website email telephone telephone_extension \\\n", + "83338 NaN NaN NaN NaN \n", + "166464 NaN NaN NaN NaN \n", + "\n", + " toll_free_telephone fax total_no_employees no_full_time \\\n", + "83338 NaN NaN 1 NaN \n", + "166464 NaN NaN 1 NaN \n", + "\n", + " no_part_time no_seasonal date_established indigenous \\\n", + "83338 NaN NaN NaN no \n", + "166464 NaN NaN NaN no \n", + "\n", + " status provider geo_source valid_coord \\\n", + "83338 Gone Out of Business City of Vancouver NaN False \n", + "166464 Issued City of Vancouver NaN False \n", + "\n", + " addr_info has_addr_info \n", + "83338 ________Vancouver_ True \n", + "166464 ________20 - 07_ True " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The two businesses with weird province codes\n", + "x = df[df['province'].isin(['78', 'LAKEVIEW ESTATES'])]\n", + "# x.iloc[1]\n", + "x" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:23:42.016701Z", + "iopub.status.busy": "2022-07-28T17:23:42.016365Z", + "iopub.status.idle": "2022-07-28T17:23:42.127743Z", + "shell.execute_reply": "2022-07-28T17:23:42.126934Z", + "shell.execute_reply.started": "2022-07-28T17:23:42.016670Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique data sources: 56\n", + "--------------------------------------------------------------\n", + "Unique Non-Canadian Province Entries:\n", + "nan\n", + "78\n", + "LAKEVIEW ESTATES\n" + ] + } + ], + "source": [ + "# Verify that all source files are present in the merged file and extract a list of non-Canadian 'provinces'\n", + "\n", + "print(f'Number of unique data sources: {len(pd.unique(df.localfile))}')\n", + "print('--------------------------------------------------------------')\n", + "print('Unique Non-Canadian Province Entries:')\n", + "can_prov_lst = ['AB', 'BC', 'MB', 'NB', 'NL', 'NS', 'NT', 'NU', 'ON', 'PE', 'QC', 'SK', 'YT']\n", + "provinces = pd.unique(df.province)\n", + "non_cad_provs = []\n", + "for i in provinces:\n", + " if not(i in can_prov_lst):\n", + " non_cad_provs.append(i)\n", + " print(i)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:23:42.129491Z", + "iopub.status.busy": "2022-07-28T17:23:42.128847Z", + "iopub.status.idle": "2022-07-28T17:24:17.579137Z", + "shell.execute_reply": "2022-07-28T17:24:17.578311Z", + "shell.execute_reply.started": "2022-07-28T17:23:42.129460Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 802383/802383 [00:35<00:00, 22687.54it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of non-Canadian entries found: 3382\n", + "/home/jovyan/ODBiz/3-Merging/output/nonCanadianEntries.csv saved\n" + ] + } + ], + "source": [ + "# Extract a list of indices corresponding to non-Canadian entries and obtain the subset of the df that contains these entries\n", + "non_cad_idx= []\n", + "for i, row in tqdm(df.iterrows(), total = num_of_rows):\n", + " if row.province in non_cad_provs:\n", + " non_cad_idx.append(i)\n", + "print(f'Number of non-Canadian entries found: {len(non_cad_idx)}')\n", + "\n", + "non_cad_df = df.loc[non_cad_idx]\n", + "nonCanadianEntriesFileName = '/home/jovyan/ODBiz/3-Merging/double_check/nonCanadianEntries.csv'\n", + "non_cad_df.to_csv(nonCanadianEntriesFileName)\n", + "print(f'{nonCanadianEntriesFileName} saved')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:24:17.580647Z", + "iopub.status.busy": "2022-07-28T17:24:17.580196Z", + "iopub.status.idle": "2022-07-28T17:24:17.586972Z", + "shell.execute_reply": "2022-07-28T17:24:17.586071Z", + "shell.execute_reply.started": "2022-07-28T17:24:17.580621Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['ON_Pickering_Business_Directory.csv',\n", + " 'BC_Vancouver_Business_Licences.csv',\n", + " 'BC_Nanaimo_Business_Licences.csv',\n", + " 'ON_York_Region_Business_Directory.csv',\n", + " 'ON_Durham_Business_Directory.csv'], dtype=object)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.unique(non_cad_df.localfile)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:24:17.588975Z", + "iopub.status.busy": "2022-07-28T17:24:17.588263Z", + "iopub.status.idle": "2022-07-28T17:24:17.956851Z", + "shell.execute_reply": "2022-07-28T17:24:17.956123Z", + "shell.execute_reply.started": "2022-07-28T17:24:17.588941Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 3382/3382 [00:00<00:00, 10863.64it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Number of foreign entries found: 3382\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idxlocalfilebusiness_namebusiness_sectorbusiness_subsectorbusiness_descriptionbusiness_id_nolicence_numberlicence_typeprimary_NAICSsecondary_NAICSNAICS_descralt_econ_act_codealt_econ_act_descriplatitudelongitudefull_addressfull_address_2mailing_addressunitstreet_nostreet_namestreet_directionstreet_typecityprovincepostal_codecountrybusiness_websiteemailtelephonetelephone_extensiontoll_free_telephonefaxtotal_no_employeesno_full_timeno_part_timeno_seasonaldate_establishedindigenousstatusprovidergeo_sourcevalid_coordaddr_infohas_addr_info
44220e6e00a859f66014176feON_Pickering_Business_Directory.csvScugog Council for the ArtsCouncil for the arts. Arts resource centre and...NaNNaN99931.0NaNNaN813410.0NaNCivic and social organizationsNaNNaN44.105207-78.944945NaNNaNNaNg--11266TownlineWestRoadScugogNaNL9L1A7NaNwww.scugogarts.caNaN9059852121.0NaNNaNNaNNaNNaNNaNNaNNaNnoNaNRegional Municipality of DurhamSourceTrue___g--1_1266_Townline_West_Road_Scugog_L9L1A7True
4422672baf502f7054fb7aa98ON_Pickering_Business_Directory.csvForget-Me-Not AlpacasRaise Alpacas, Sell Clothing made of Alpaca fu...NaNNaN552799.0NaNNaN112990.0NaNAll Other Animal ProductionNaNNaN44.406631-79.098971NaNNaNNaNNaN1595Brock Concession Rd 3NaNNaNBeavertonNaNL0K1A0NaNwww.forgetmenotalpacas.caNaN2892216102.0NaNNaNNaNNaNNaNNaNNaNNaNnoNaNRegional Municipality of DurhamSourceTrue____1595_Brock Concession Rd 3___Beaverton_L0K1A0True
4441954db800e79c02fbbf90eON_Pickering_Business_Directory.csvElwill AcresOFA FarmNaNNaN239024.0NaNNaN111999.0NaNAll other miscellaneous crop farmingNaNNaN44.252556-79.010867NaNNaNNaNNaNS13325Brock Concession Rd 4NaNNaNSunderlandNaNL0C1H0NaNNaNNaN7053572677.0NaNNaNNaNNaNNaNNaNNaNNaNnoNaNRegional Municipality of DurhamSourceTrue____S13325_Brock Concession Rd 4___Sunderland_...True
444260f602705e8b0c263e154ON_Pickering_Business_Directory.csvOFA Farm - B33245OFA FarmNaNNaN238726.0NaNNaN111999.0NaNAll other miscellaneous crop farmingNaNNaN44.495985-79.112838NaNNaNNaNNaNB33245Thorah Concession Rd 10NaNNaNBeavertonNaNL0K1A0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNnoNaNRegional Municipality of DurhamSourceTrue____B33245_Thorah Concession Rd 10___Beaverton...True
444404237851db447dec2bc0fON_Pickering_Business_Directory.csvLai & Associates DMCDigital media production and consultancy.NaNNaN569845.0NaNNaN541890.0NaNOther Services Related to AdvertisingNaNNaN43.838945-79.083910NaNNaNNaNNaN606The EsplanadeNorthNaNPickeringNaNL1V6V2NaNwww.laiandassociates.caNaN6476463386.0NaNNaNNaNNaNNaNNaNNaNNaNnoNaNRegional Municipality of DurhamSourceTrue____606_The Esplanade_North__Pickering_L1V6V2True
\n", + "
" + ], + "text/plain": [ + " idx localfile \\\n", + "44220 e6e00a859f66014176fe ON_Pickering_Business_Directory.csv \n", + "44226 72baf502f7054fb7aa98 ON_Pickering_Business_Directory.csv \n", + "44419 54db800e79c02fbbf90e ON_Pickering_Business_Directory.csv \n", + "44426 0f602705e8b0c263e154 ON_Pickering_Business_Directory.csv \n", + "44440 4237851db447dec2bc0f ON_Pickering_Business_Directory.csv \n", + "\n", + " business_name \\\n", + "44220 Scugog Council for the Arts \n", + "44226 Forget-Me-Not Alpacas \n", + "44419 Elwill Acres \n", + "44426 OFA Farm - B33245 \n", + "44440 Lai & Associates DMC \n", + "\n", + " business_sector business_subsector \\\n", + "44220 Council for the arts. Arts resource centre and... NaN \n", + "44226 Raise Alpacas, Sell Clothing made of Alpaca fu... NaN \n", + "44419 OFA Farm NaN \n", + "44426 OFA Farm NaN \n", + "44440 Digital media production and consultancy. NaN \n", + "\n", + " business_description business_id_no licence_number licence_type \\\n", + "44220 NaN 99931.0 NaN NaN \n", + "44226 NaN 552799.0 NaN NaN \n", + "44419 NaN 239024.0 NaN NaN \n", + "44426 NaN 238726.0 NaN NaN \n", + "44440 NaN 569845.0 NaN NaN \n", + "\n", + " primary_NAICS secondary_NAICS NAICS_descr \\\n", + "44220 813410.0 NaN Civic and social organizations \n", + "44226 112990.0 NaN All Other Animal Production \n", + "44419 111999.0 NaN All other miscellaneous crop farming \n", + "44426 111999.0 NaN All other miscellaneous crop farming \n", + "44440 541890.0 NaN Other Services Related to Advertising \n", + "\n", + " alt_econ_act_code alt_econ_act_descrip latitude longitude \\\n", + "44220 NaN NaN 44.105207 -78.944945 \n", + "44226 NaN NaN 44.406631 -79.098971 \n", + "44419 NaN NaN 44.252556 -79.010867 \n", + "44426 NaN NaN 44.495985 -79.112838 \n", + "44440 NaN NaN 43.838945 -79.083910 \n", + "\n", + " full_address full_address_2 mailing_address unit street_no \\\n", + "44220 NaN NaN NaN g--1 1266 \n", + "44226 NaN NaN NaN NaN 1595 \n", + "44419 NaN NaN NaN NaN S13325 \n", + "44426 NaN NaN NaN NaN B33245 \n", + "44440 NaN NaN NaN NaN 606 \n", + "\n", + " street_name street_direction street_type city \\\n", + "44220 Townline West Road Scugog \n", + "44226 Brock Concession Rd 3 NaN NaN Beaverton \n", + "44419 Brock Concession Rd 4 NaN NaN Sunderland \n", + "44426 Thorah Concession Rd 10 NaN NaN Beaverton \n", + "44440 The Esplanade North NaN Pickering \n", + "\n", + " province postal_code country business_website email \\\n", + "44220 NaN L9L1A7 NaN www.scugogarts.ca NaN \n", + "44226 NaN L0K1A0 NaN www.forgetmenotalpacas.ca NaN \n", + "44419 NaN L0C1H0 NaN NaN NaN \n", + "44426 NaN L0K1A0 NaN NaN NaN \n", + "44440 NaN L1V6V2 NaN www.laiandassociates.ca NaN \n", + "\n", + " telephone telephone_extension toll_free_telephone fax \\\n", + "44220 9059852121.0 NaN NaN NaN \n", + "44226 2892216102.0 NaN NaN NaN \n", + "44419 7053572677.0 NaN NaN NaN \n", + "44426 NaN NaN NaN NaN \n", + "44440 6476463386.0 NaN NaN NaN \n", + "\n", + " total_no_employees no_full_time no_part_time no_seasonal \\\n", + "44220 NaN NaN NaN NaN \n", + "44226 NaN NaN NaN NaN \n", + "44419 NaN NaN NaN NaN \n", + "44426 NaN NaN NaN NaN \n", + "44440 NaN NaN NaN NaN \n", + "\n", + " date_established indigenous status provider \\\n", + "44220 NaN no NaN Regional Municipality of Durham \n", + "44226 NaN no NaN Regional Municipality of Durham \n", + "44419 NaN no NaN Regional Municipality of Durham \n", + "44426 NaN no NaN Regional Municipality of Durham \n", + "44440 NaN no NaN Regional Municipality of Durham \n", + "\n", + " geo_source valid_coord \\\n", + "44220 Source True \n", + "44226 Source True \n", + "44419 Source True \n", + "44426 Source True \n", + "44440 Source True \n", + "\n", + " addr_info has_addr_info \n", + "44220 ___g--1_1266_Townline_West_Road_Scugog_L9L1A7 True \n", + "44226 ____1595_Brock Concession Rd 3___Beaverton_L0K1A0 True \n", + "44419 ____S13325_Brock Concession Rd 4___Sunderland_... True \n", + "44426 ____B33245_Thorah Concession Rd 10___Beaverton... True \n", + "44440 ____606_The Esplanade_North__Pickering_L1V6V2 True " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "USA_states = [ 'AK', 'AL', 'AR', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA',\n", + " 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME',\n", + " 'MI', 'MN', 'MO', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM',\n", + " 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX',\n", + " 'UT', 'VA', 'VT', 'WA', 'WI', 'WV', 'WY', 'ARIZONA']\n", + "\n", + "foreign_prov_codes = list(set(non_cad_provs) - set(USA_states))\n", + "# for i in foreign_prov_codes:\n", + "# print(i)\n", + "\n", + "# Extract a list of indices corresponding to foreign code entries and obtain the subset of the df that contains these entries\n", + "foreign_codes_idx = []\n", + "for i, row in tqdm(non_cad_df.iterrows(), total = 3382 ):\n", + " if row.province in foreign_prov_codes:\n", + " foreign_codes_idx.append(i)\n", + "print(f'\\nNumber of foreign entries found: {len(foreign_codes_idx)}')\n", + "\n", + "foreign_codes_df = df.loc[foreign_codes_idx]\n", + "pd.options.display.max_columns = None\n", + "foreign_codes_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:24:17.958570Z", + "iopub.status.busy": "2022-07-28T17:24:17.958008Z", + "iopub.status.idle": "2022-07-28T17:24:18.006299Z", + "shell.execute_reply": "2022-07-28T17:24:18.004945Z", + "shell.execute_reply.started": "2022-07-28T17:24:17.958543Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--------------------------------------------------------------\n", + "Unique Country Entries:\n", + "nan\n", + "CANADA\n" + ] + } + ], + "source": [ + "# Print the unique countries present\n", + "print('--------------------------------------------------------------')\n", + "print('Unique Country Entries:')\n", + "countries = pd.unique(df['country'])\n", + "for i in countries:\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:24:18.008264Z", + "iopub.status.busy": "2022-07-28T17:24:18.007545Z", + "iopub.status.idle": "2022-07-28T17:24:18.082472Z", + "shell.execute_reply": "2022-07-28T17:24:18.081606Z", + "shell.execute_reply.started": "2022-07-28T17:24:18.008232Z" + } + }, + "outputs": [], + "source": [ + "sub_df = df[df.province == 'WA']\n", + "for i,row in sub_df.iterrows():\n", + " print(row)\n", + " break\n", + "# df.loc['idx', '8f6bd3c96413edd33d9d']" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:24:18.084466Z", + "iopub.status.busy": "2022-07-28T17:24:18.083893Z", + "iopub.status.idle": "2022-07-28T17:24:18.108949Z", + "shell.execute_reply": "2022-07-28T17:24:18.108060Z", + "shell.execute_reply.started": "2022-07-28T17:24:18.084437Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "List saved to /home/jovyan/ODBiz/3-Merging/output/nonCadProvCodes.txt\n" + ] + } + ], + "source": [ + "# Write the non-cad prov codes to a file\n", + "filename = '/home/jovyan/ODBiz/3-Merging/double_check/nonCadProvCodes.txt'\n", + "with open(filename, 'w') as f:\n", + " for i in non_cad_provs:\n", + " f.write(f'{i}\\n')\n", + "print(f'List saved to {filename}')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:24:18.111829Z", + "iopub.status.busy": "2022-07-28T17:24:18.111398Z", + "iopub.status.idle": "2022-07-28T17:24:18.131818Z", + "shell.execute_reply": "2022-07-28T17:24:18.130904Z", + "shell.execute_reply.started": "2022-07-28T17:24:18.111801Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['LAKEVIEW ESTATES', '78', nan]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "foreign_prov_codes" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:24:18.133667Z", + "iopub.status.busy": "2022-07-28T17:24:18.132911Z", + "iopub.status.idle": "2022-07-28T17:24:18.198762Z", + "shell.execute_reply": "2022-07-28T17:24:18.197870Z", + "shell.execute_reply.started": "2022-07-28T17:24:18.133638Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nan\n", + "1.0\n", + "OPEN\n", + "Issued\n", + "Inactive\n", + "Cancelled\n", + "Pending\n", + "Gone Out of Business\n", + "Invalid Status Code\n", + "APPROVED\n", + "Renewal Licensed\n", + "Pending Renewal\n", + "Licensed\n", + "Move in Progress\n", + "Renewal Notification Sent\n", + "Close in Progress\n", + "ISSUED\n", + "RENEWAL NOTICE\n" + ] + } + ], + "source": [ + "status_lst = pd.unique(df.status)\n", + "for i in status_lst:\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "execution": { + "iopub.execute_input": "2022-07-28T17:24:18.200256Z", + "iopub.status.busy": "2022-07-28T17:24:18.199975Z", + "iopub.status.idle": "2022-07-28T17:24:18.223081Z", + "shell.execute_reply": "2022-07-28T17:24:18.222209Z", + "shell.execute_reply.started": "2022-07-28T17:24:18.200230Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['BC', 'AB', 'NB', 'ON', nan, 'QC', 'MB', 'SK', 'NS', '78', 'YT',\n", + " 'NL', 'LAKEVIEW ESTATES', 'NT', 'NU', 'PE'], dtype=object)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "provinces" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "name": "python3813jvsc74a57bd0e14a6e65307f8f691692612d68f6800491e991619d81311b752057c43593328e", + "display_name": "Python 3.8.13 64-bit ('odbiz': conda)" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + }, + "metadata": { + "interpreter": { + "hash": "3f6acfd5c7a89dd4516208ed2cd5283b5177bf58d22f895010c388a779688e5d" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/scripts/Businesses/4-Parsing/1-parse_csv.py b/scripts/Businesses/4-Parsing/1-parse_csv.py new file mode 100644 index 00000000..0f784d6c --- /dev/null +++ b/scripts/Businesses/4-Parsing/1-parse_csv.py @@ -0,0 +1,96 @@ +""" +This script reads in a CSV containing an address column, and produces a version +of the csv with parsed address columns appended. +libpostal can separate into many fields, this retains only +[street number, name, postal code, city, and province] + +When run directly, requires three positional arguments: + +python parse_csv name_in addr_col name_out + +name_in: input csv (utf-8) +addr_col: the name of the address column being parsed +name_out: the name of the output file + +-Joseph Kuchar +December 14 2020 +""" + +""" +Quick copy-paste to run this code in terminal: + +cd /home/jovyan/data-vol-1/ODHF/LODE-ECDO/scripts/HealthFacilities/V2/4-Parsing + +python parse_csv.py merged.csv street_addr parsed.csv +python 1-parse_csv.py test_odbiz_merge.csv full_address parsed_biz.csv + +""" + + + + +import sys +import pandas as pd +from postal.parser import parse_address +from argparse import ArgumentParser +import numpy as np + +def parse_csv(df, addr_col): + df[['LP_street_no', 'LP_street_name', 'LP_City', 'LP_Province', 'LP_PostCode','LP_Unit']] = df.apply(lambda x: format_parser(x[addr_col]), axis=1, result_type='expand') + return df + +def format_parser(add): + + # libpostal returns a list of tuples, this just converts it to a dictionary + A = parse_address(add) + B = dict((x, y) for (y, x) in A) + key_list = ['house_number', 'road', 'city', 'state', 'postcode', 'unit'] + parsed = [] + for k in key_list: + if k in B.keys(): + parsed.append(B[k]) + else: + parsed.append('') + return parsed + +if __name__ == "__main__": + parser = ArgumentParser( + description='Apply libpostal address parser to an address column in a csv') + parser.add_argument('name_in', + help='Name/Path of input file') + parser.add_argument('addr_col', + help='Name of address column to pass to parser') + parser.add_argument('name_out', + help='Name/Path of output file') + args = parser.parse_args() + + name_in = args.name_in + addr_col = args.addr_col + name_out = args.name_out + df_in = pd.read_csv(name_in, dtype='str', low_memory=False) + df_in=df_in.fillna('') + df_out = parse_csv(df_in, addr_col) + +#street numbers that include unit number through a dash get split and put into separate columns + df_temp = df_out.loc[df_out['LP_street_no'].str.contains("-")] + df_out[['LP2_unit', 'LP2_street_no']] = df_temp['LP_street_no'].str.split('-', expand=True) + df_out['LP2_unit'] = df_out['LP2_unit'].fillna(df_out['LP_Unit']) + df_out['LP2_street_no'] = df_out['LP2_street_no'].fillna(df_out['LP_street_no']) + +#street numbers that include the word unit get move to new unit column and merged with other unit column + units = df_out['LP2_street_no'].str.contains('unit', case=False) + df_out['LP3_unit']=df_out['LP2_street_no'].where(units, np.nan) + df_out['LP2_street_no']=df_out['LP2_street_no'].mask(units, np.nan) + df_out['LP3_unit'] = df_out['LP3_unit'].fillna(df_out['LP2_unit']) + + #df2_temp = df_out.loc[df_out['LP2_street_no'].str.contains(" ", na)] + #print(df_temp) + #df_out[['LP3_unit', 'LP3_street_no']] = df2_temp['LP2_street_no'].str.split(' ', expand=True) + #df_out['LP3_unit'] = df_out['LP3_unit'].fillna(df_out['LP2_Unit']) + #df_out['LP3_street_no'] = df_out['LP3_street_no'].fillna(df_out['LP2_street_no']) + + df_out.to_csv(name_out, index=False) + + + + diff --git a/scripts/Businesses/4-Parsing/2-combine.py b/scripts/Businesses/4-Parsing/2-combine.py new file mode 100644 index 00000000..81b43342 --- /dev/null +++ b/scripts/Businesses/4-Parsing/2-combine.py @@ -0,0 +1,78 @@ +import pandas as pd +import numpy as np +import sys +from hashlib import blake2b +from hashlib import sha256 + +#np.set_printoptions(threshold=sys.maxsize) + + +f_in = "1-parsed.csv" +f_out = "2-combined.csv" +df=pd.read_csv(f_in, low_memory=False, dtype='str') + + +df['unit'] = np.nan + +# Merge parsed columns with other columns +df['street_no'] = df['street_no'].fillna(df['LP2_street_no']) +df['street_name'] = df['street_name'].fillna(df['LP_street_name']) +df['postal_code'] = df['postal_code'].fillna(df['LP_PostCode'].str.upper()) +df['city'] = df['city'].fillna(df['LP_City'].str.capitalize()) +df['unit'] = df["LP3_unit"].str.capitalize() + +# Reorder columns +df = df[['filename', 'facility_name', 'facility_type', 'health_authority', 'alternative_name', 'number_beds', +'address_str', 'unit', 'street_no', 'street_name', 'street_addr', 'city', 'province', 'postal_code', 'provider', +'latitude', 'longitude', 'geo_source', 'phone', 'email', 'website' ]] + +# Remove all postal codes that are not 6 characters long and that do not follow the format of a postal code +df['postal_code'] = df['postal_code'].str.replace(' ','').str.upper() +df['postal_code'] = df['postal_code'].str.replace('-','').str.upper() +mask = df['postal_code'].astype(str).str.len() != 6 +df.loc[mask, 'postal_code'] = '' +#print(df['postal_code'].tolist()) + +#fill NAs in street_addr +df['temporary'] = df['unit'].astype(str)+' '+df['street_no'].astype(str)+' '+df['street_name'].astype(str) +df['temporary'] = df['temporary'].str.replace('nan','') +df['street_addr'] = df['street_addr'].fillna(df['temporary']) +df = df.drop(['temporary'], axis=1) + + +#Create unique identifiers for each datapoint +def GetHash(x): + h = sha256() + h.update(x.encode()) + return h.hexdigest() + +def make_temp_col(df): + df_temp=df.copy() + cols=['facility_name','street_name','city','latitude','street_no','longitude','facility_type'] + del_list=["-","'","."] + for col in cols: + + df_temp[col]=df_temp[col].str.upper() + df_temp[col]=df_temp[col].fillna('NULL') + + for i in del_list: + df_temp[col]=df_temp[col].str.replace(i,'',regex=False) + df_temp['temp']=df_temp['facility_name']+'-'+df_temp['street_name']+'-'+df_temp['city']+'-'+df_temp['latitude']+'-'+df_temp['street_no']+'-'+df_temp['longitude']+'-'+df_temp['facility_type'] + return df_temp['temp'] + +df['temp']=make_temp_col(df) +df['idx']=df['temp'].apply(GetHash) + +#Any indexes that are the same basically mean that the data points are the same, which is why we drop duplicates +df = df.drop_duplicates(subset=['idx']) +df = df.drop(['temp'], axis=1) +df.insert(0, 'idx', df.pop('idx')) + +df.to_csv(f_out, index=False) +df.to_csv('../5-Geocoding/combined.csv', index=False) +print(df['idx'].value_counts()) + + + + + diff --git a/scripts/Businesses/4-Parsing/README_parsing.md b/scripts/Businesses/4-Parsing/README_parsing.md new file mode 100644 index 00000000..7d4159c4 --- /dev/null +++ b/scripts/Businesses/4-Parsing/README_parsing.md @@ -0,0 +1,50 @@ +# What is the goal of parsing in the project? +We have different formats for addresses. If you take a look at the `input/ODBiz_Merged.csv` file, you will notice that some addresses are all together under the full_address column, while some addresses are split into street_no, street_name, postal_code, etc. + +The objective is to split the addresses that are NOT split (which is the majority), and make individual columns for street number and name, unit number, city and postal code + +## 0. parsing_main.ipynb +Hitting "Run all" on this Jupyter notebook will run all the necessary parsing scripts in the correct order as explained below + +## 1. parse_csv.py +This python script's purpose is to separate the full addresses thanks to the pypostal library. New columns (LP_...) are created with the parsed addresses, WITHOUT including the addresses that were already split. The output of this file is parsed.csv. + +There exists an issue with the LP_street_no column: sometimes, full addresses will have unit number and street number separated with a dash (12-235, for example). The parsing code recognizes this as a full street number, instead of 2 different values, which is why we split these wherever necessary. This is why there are two additional columns in the parsed file: LP2_unit and LP2_street_no. These two columns are created to combine any unit and street number that we already had, plus the ones we split afterwards. Addionally, some entries have multiple values seperated with multiple dashes. We provide a spillover column for whenever this happens and it is later dealt with in `odbiz_custom_parse.py`. + +To run this script, go into terminal and enter: `python parse_csv.py input/ODBiz_Merged.csv full_address output/parsed_biz.csv`. If there is no module named postal, enter `conda install postal` into the terminal + +## 2. odbiz_custom_parse.py +In the `LP_street_no` column, some entries have multiple number and letter values that are seperated by multiple dashes (4-flr-777, for example). This script handles most of these odd cases. + +There are also other various parsing errors that the first script produces for the odbiz dataset that this script attempts to fix as much as possible. Read `parsing_errors_documentation.md` for more details about the errors that were discovered in this step. + +## 3. combine_parsed_cols.py +This script's purpose is to merge columns together. As mentionned previously, some adresses were already split from data collection, so there are already some values in the columns street_no, street_name, etc. This script simply fills NAN values in these columns with values from LP2_street_no, LP_street_name, etc. + +## Dropped rows +The scripts above will drop entries if they meet certain conditions that we deem as being irrelevant given the scope of this project: + +### `parse_csv.py` +This script doesn't drop any rows. + +### `odbiz_custom_parse.py` +If the column `full_address` was a full match with one of the following strings: +``` +[ +'-', +'BUSINESS - OUT OF TOWN SQUAMISH', +'BUSINESS - OUT OF TOWN', +'NON-RESIDENT', +'BUSINESS-NON RESIDENT' +] +``` + +then the entry was removed. + +### `combine_parsed_cols.py` +This script doesn't drop any rows. + + + + + diff --git a/scripts/Businesses/4-Parsing/__init__.py b/scripts/Businesses/4-Parsing/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/Businesses/4-Parsing/combine_parsed_cols.py b/scripts/Businesses/4-Parsing/combine_parsed_cols.py new file mode 100644 index 00000000..6ac1e286 --- /dev/null +++ b/scripts/Businesses/4-Parsing/combine_parsed_cols.py @@ -0,0 +1,152 @@ +import pandas as pd +import numpy as np +import sys +import shutil +from hashlib import blake2b +from hashlib import sha256 +from tqdm import tqdm + +def GetHash(x): + h = sha256() + h.update(x.encode()) + return h.hexdigest() + +def make_temp_col(df): + df_temp=df.copy() + cols=['facility_name','street_name','city','latitude','street_no','longitude','facility_type'] + del_list=["-","'","."] + for col in cols: + + df_temp[col]=df_temp[col].str.upper() + df_temp[col]=df_temp[col].fillna('NULL') + + for i in del_list: + df_temp[col]=df_temp[col].str.replace(i,'',regex=False) + df_temp['temp']=df_temp['facility_name']+'-'+df_temp['street_name']+'-'+df_temp['city']+'-'+df_temp['latitude']+'-'+df_temp['street_no']+'-'+df_temp['longitude']+'-'+df_temp['facility_type'] + return df_temp['temp'] + +def main(): + # Define filepaths + f_in = "/home/jovyan/ODBiz/4-Parsing/output/2-parsed_biz.csv" + f_out = "/home/jovyan/ODBiz/4-Parsing/output/parsed_and_combined_biz.csv" + f_to_geocode = "/home/jovyan/ODBiz/5-Geocoding/data/ODBiz_parsed.csv" + + # Load in the csv + total_lines = 803584 + chunksize = 10000 + df = pd.concat([chunk for chunk in tqdm(pd.read_csv(f_in, + chunksize=chunksize, + dtype=str), + desc='Loading data', + total=total_lines//chunksize+1) + ]) + + # Merge parsed columns with other columns + df['unit'] = np.nan + df['street_no'] = df['street_no'].fillna(df['LP2_street_no']) + df['street_name'] = df['street_name'].fillna(df['LP_street_name']) + df['postal_code'] = df['postal_code'].fillna(df['LP_PostCode'].str.upper()) + df['city'] = df['city'].fillna(df['LP_City'].str.capitalize()) + df['unit'] = df["LP2_unit"].str.capitalize() + df['unit'] = df["unit"].fillna(df['LP3_unit']) + + # Reorder columns + original_cols = df.columns + dropped_cols = ['LP_street_no', 'LP_street_name', 'LP_City', 'LP_Province', + 'LP_PostCode', 'LP_Unit', 'LP_street_no_alt', 'LP2_unit', + 'LP2_street_no', 'spill', 'LP3_unit', 'parsing_err_exists', 'flagged_parsing_err'] + column_reorder = [ + 'idx', + 'localfile', + 'business_name', + 'alt_business_name', + 'business_sector', + 'business_subsector', + 'business_description', + 'business_id_no', + 'licence_number', + 'licence_type', + 'primary_NAICS', + 'secondary_NAICS', + 'NAICS_descr', + 'NAICS_descr2', + 'alt_econ_act_code', + 'alt_econ_act_descrip', + 'latitude', + 'longitude', + 'full_address', + 'full_address_2', + 'mailing_address', + 'postal_code', + 'unit', + 'street_no', + 'street_name', + 'street_direction', + 'street_type', + 'city', + 'province', + 'country', + 'business_website', + 'email', + 'telephone', + 'telephone_extension', + 'toll_free_telephone', + 'fax', + 'total_no_employees', + 'no_full_time', + 'no_part_time', + 'no_seasonal', + 'date_established', + 'indigenous', + 'status', + 'provider', + 'geo_source', + # 'LP_street_no', # + # 'LP_street_name',# + # 'LP_City', # + # 'LP_Province', # + # 'LP_PostCode', # + # 'LP_Unit', # + # 'LP_street_no_alt', # + # 'LP2_unit', # + # 'LP2_street_no', # + # 'spill', # + # 'LP3_unit', # + # 'parsing_err_exists', # + # 'flagged_parsing_err' # + ] + + # Print out unexpected missing columns + missing_cols = original_cols[~original_cols.isin(column_reorder)] + missing_cols = missing_cols[~missing_cols.isin(dropped_cols)] + if len(missing_cols) != 0: + print('WARNING! Missing columns!') + for i in missing_cols: + print(i) + df = df[column_reorder] + + # Remove all postal codes that are not 6 characters long and that do not follow the format of a postal code + df['postal_code'] = df['postal_code'].str.replace(' ','').str.upper() + df['postal_code'] = df['postal_code'].str.replace('-','').str.upper() + mask = df['postal_code'].astype(str).str.len() != 6 + df.loc[mask, 'postal_code'] = '' + + #fill NAs in full_address + df['temporary'] = df['unit'].astype(str)+' '+df['street_no'].astype(str)+' '+df['street_name'].astype(str) + df['temporary'] = df['temporary'].str.replace('nan','') + df['full_address'] = df['full_address'].fillna(df['temporary']) + df = df.drop(['temporary'], axis=1) + + # Save to csv and copy over to geocoding + df.to_csv(f_out, index=False) + print(f'File saved to {f_out}') + shutil.copyfile(f_out, f_to_geocode) + print(f'Above file copied to {f_to_geocode}') + + print(df['idx'].value_counts()) + +if __name__ == '__main__': + main() + + + diff --git a/scripts/Businesses/4-Parsing/odbiz_combine.py b/scripts/Businesses/4-Parsing/odbiz_combine.py new file mode 100644 index 00000000..9b98134b --- /dev/null +++ b/scripts/Businesses/4-Parsing/odbiz_combine.py @@ -0,0 +1,159 @@ +import pandas as pd +import numpy as np +import sys +import shutil +from hashlib import blake2b +from hashlib import sha256 +from tqdm import tqdm + +def GetHash(x): + h = sha256() + h.update(x.encode()) + return h.hexdigest() + +def make_temp_col(df): + df_temp=df.copy() + cols=['facility_name','street_name','city','latitude','street_no','longitude','facility_type'] + del_list=["-","'","."] + for col in cols: + + df_temp[col]=df_temp[col].str.upper() + df_temp[col]=df_temp[col].fillna('NULL') + + for i in del_list: + df_temp[col]=df_temp[col].str.replace(i,'',regex=False) + df_temp['temp']=df_temp['facility_name']+'-'+df_temp['street_name']+'-'+df_temp['city']+'-'+df_temp['latitude']+'-'+df_temp['street_no']+'-'+df_temp['longitude']+'-'+df_temp['facility_type'] + return df_temp['temp'] + +def main(): + # Define filepaths + f_in = "/home/jovyan/ODBiz/4-Parsing/output/2-parsed_biz.csv" + f_out = "/home/jovyan/ODBiz/4-Parsing/output/parsed_and_combined_biz.csv" + f_to_geocode = "/home/jovyan/ODBiz/5-Geocoding/data/ODBiz_parsed.csv" + + # Load in the csv + total_lines = 803584 + chunksize = 10000 + df = pd.concat([chunk for chunk in tqdm(pd.read_csv(f_in, + chunksize=chunksize, + dtype=str), + desc='Loading data', + total=total_lines//chunksize+1) + ]) + + # Merge parsed columns with other columns + df['unit'] = np.nan + df['street_no'] = df['street_no'].fillna(df['LP2_street_no']) + df['street_name'] = df['street_name'].fillna(df['LP_street_name']) + df['postal_code'] = df['postal_code'].fillna(df['LP_PostCode'].str.upper()) + df['city'] = df['city'].fillna(df['LP_City'].str.capitalize()) + df['unit'] = df["LP2_unit"].str.capitalize() + df['unit'] = df["unit"].fillna(df['LP3_unit']) + + # Reorder columns + original_cols = df.columns + dropped_cols = ['LP_street_no', 'LP_street_name', 'LP_City', 'LP_Province', + 'LP_PostCode', 'LP_Unit', 'LP_street_no_alt', 'LP2_unit', + 'LP2_street_no', 'spill', 'LP3_unit', 'parsing_err_exists', 'flagged_parsing_err'] + column_reorder = [ + 'idx', + 'localfile', + 'business_name', + 'business_sector', + 'business_subsector', + 'business_description', + 'business_id_no', + 'licence_number', + 'licence_type', + 'primary_NAICS', + 'secondary_NAICS', + 'NAICS_descr', + 'alt_econ_act_code', + 'alt_econ_act_descrip', + 'latitude', + 'longitude', + 'full_address', + 'full_address_2', + 'mailing_address', + 'postal_code', + 'unit', + 'street_no', + 'street_name', + 'street_direction', + 'street_type', + 'city', + 'province', + 'country', + 'business_website', + 'email', + 'telephone', + 'telephone_extension', + 'toll_free_telephone', + 'fax', + 'total_no_employees', + 'no_full_time', + 'no_part_time', + 'no_seasonal', + 'date_established', + 'indigenous', + 'status', + 'provider', + 'geo_source', + 'LP_street_no', # + 'LP_street_name',# + 'LP_City', # + 'LP_Province', # + 'LP_PostCode', # + 'LP_Unit', # + 'LP_street_no_alt', # + 'LP2_unit', # + 'LP2_street_no', # + 'spill', # + 'LP3_unit', # + 'parsing_err_exists', # + 'flagged_parsing_err' # + ] + + # Print out unexpected missing columns + missing_cols = original_cols[~original_cols.isin(column_reorder)] + missing_cols = missing_cols[~missing_cols.isin(dropped_cols)] + if len(missing_cols) != 0: + print('WARNING! Missing columns!') + for i in missing_cols: + print(i) + df = df[column_reorder] + + # Remove all postal codes that are not 6 characters long and that do not follow the format of a postal code + df['postal_code'] = df['postal_code'].str.replace(' ','').str.upper() + df['postal_code'] = df['postal_code'].str.replace('-','').str.upper() + mask = df['postal_code'].astype(str).str.len() != 6 + df.loc[mask, 'postal_code'] = '' + + #fill NAs in full_address + df['temporary'] = df['unit'].astype(str)+' '+df['street_no'].astype(str)+' '+df['street_name'].astype(str) + df['temporary'] = df['temporary'].str.replace('nan','') + df['full_address'] = df['full_address'].fillna(df['temporary']) + df = df.drop(['temporary'], axis=1) + + + # #Create unique identifiers for each datapoint + # df['temp']=make_temp_col(df) + # df['idx']=df['temp'].apply(GetHash) + + # #Any indexes that are the same basically mean that the data points are the same, which is why we drop duplicates + # df = df.drop_duplicates(subset=['idx']) + # df = df.drop(['temp'], axis=1) + # df.insert(0, 'idx', df.pop('idx')) + + # Save to csv and copy over to geocoding + df.to_csv(f_out, index=False) + shutil.copyfile(f_out, f_to_geocode) + # df.to_csv('../5-Geocoding/combined.csv', index=False) + + print(df['idx'].value_counts()) + +if __name__ == '__main__': + main() + + + diff --git a/scripts/Businesses/4-Parsing/odbiz_custom_parse.py b/scripts/Businesses/4-Parsing/odbiz_custom_parse.py new file mode 100644 index 00000000..872cc80b --- /dev/null +++ b/scripts/Businesses/4-Parsing/odbiz_custom_parse.py @@ -0,0 +1,564 @@ +import pandas as pd +from tqdm import tqdm +import numpy as np +from parse_csv import parsing_df_wrapper + +def duplicate_dashes(df: pd.DataFrame) -> pd.DataFrame: + ''' + Replace dashes to avoid Excel's date conversion + ''' + new_df = df.copy() + + new_df['LP2_unit'] = new_df['LP2_unit'].str.replace('-', '--') + new_df['LP_street_no'] = new_df['LP_street_no'].str.replace('-', '--') + + return new_df + +def save_df_to_csv(df, output_path: str, **kwargs): + ''' + Saves df to_csv and prints a confirmation message + + Arguments: + - df (pd.DataFrame): The main dataframe being parsed + - **kwargs: Optional keyword arguments to pass along to panda's df.to_csv() function + + Side Effects: + - Outputs df as a csv + ''' + + df.to_csv(output_path, **kwargs) + print(f'df saved to {output_path}') + +def simple_parse(df: pd.DataFrame, output_path: str) -> pd.DataFrame: + ''' + Split LP_street_no by dashes (-), set the right most value as LP2_street_no, + set everything else as LP2_unit + + Arguments: + - df (pd.DataFrame): The main dataframe being parsed + - output_path (str): Path of the csv file to output the results of this parsing + + Side Effects: + - Outputs df as a csv + ''' + + new_df = df.copy() + + ### Apply the easiest blanket rule on the specific datasets below + localfiles = [ 'BC_Victoria_Business_Licences.csv', + # 'BC_Indigenous_Business_Listings.csv', + 'BC_Chilliwack_Business_Licences.csv', + 'ON_Brampton_Business_Directory.csv', + 'QC_Etablissements.csv', + # 'ON_Toronto_Business_Licences.csv', + # 'Indigenous_Business_Directory.csv', + ] + localfiles_idx = new_df['localfile'].isin(localfiles) + + # Set right most value as street_no, everything else is unit + temp = new_df.loc[localfiles_idx, 'LP_street_no'].str.rsplit('-', expand = True, n = 1) + new_df.loc[localfiles_idx, ['LP2_unit', 'LP2_street_no']] = temp.rename(columns = {0: 'LP2_unit', 1: 'LP2_street_no'}) + + new_df.to_csv(output_path, index = False) + print(f'Saved new_df to {output_path}') + + return new_df + + +def toronto_parse(df: pd.DataFrame, output_path: str) -> pd.DataFrame: + ''' + Apply a parsing rule specific to several Toronto businesses + + Arguments: + - df (pd.DataFrame): The main dataframe being parsed + - output_path (str): Path of the csv file to output the results of this parsing + + Side Effects: + - Outputs df as a csv + ''' + + new_df = df.copy() + + ### Apply Toronto's modified parsing rule + localfiles_idx = new_df['localfile'] == 'ON_Toronto_Business_Licences.csv' + has_comma = new_df['full_address'].str.contains(',') & localfiles_idx + + # If there's no comma, set right most value as street_no, everything else is unit + new_df.loc[~has_comma, ['LP2_unit', 'LP2_street_no']] = new_df.loc[~has_comma, 'LP_street_no'].str.rsplit('-', expand = True, n = 1).rename(columns = {0: 'LP2_unit', 1: 'LP2_street_no'}) + + # If there is a comma, apply parsing rule + new_df.loc[has_comma, ['LP2_street_no', 'LP2_unit']] = new_df.loc[has_comma, 'full_address'].str.extract(r'(\d+)[A-Z\s]*,\s?(.*)').rename(columns = {0: 'LP2_street_no', 1: 'LP2_unit'}) + + new_df.to_csv(output_path, index = False) + print(f'Saved new_df to {output_path}') + + return new_df + + +def flag_incorrect_QC(df: pd.DataFrame, QC_parsed_wrong_df_path: str) -> pd.DataFrame: + ''' + Identify incorrectly parsed entries in the QC dataset and flag them + by setting LP2_unit and LP2_street_no as nan + + Arguments: + - df (pd.DataFrame): The main dataframe being parsed + - QC_parsed_wrong_df_path (str): Path of the csv file to output the results of this parsing + ''' + df = df.copy() + + ### Identify QC entries with the most common pattern, flag them! + QC_df = pd.read_csv(QC_parsed_wrong_df_path, dtype = str) + common_pats = [ + "- ", + "-, ", + "- , " + ] + QC_wrong_idxs = QC_df.loc[~QC_df['pattern'].isin(common_pats), 'idx'] + df.loc[QC_wrong_idxs, ['LP2_unit', 'LP2_street_no']] = np.nan + + return df + +def detect_street_no_1st(df: pd.DataFrame) -> pd.Index: + ''' + Detects if first number in sequence separated by dashes is the street_no + + Returns: + A pandas Index of boolean values + ''' + + df = df.copy() + + st_no_1st_df = df[['LP_street_no']].copy() + temp = st_no_1st_df['LP_street_no'].str.split('-', expand = True) + second_col_contains_letter = temp[1].str.contains(r'\D', na = False) + for col in tqdm(temp.columns, desc = 'Determining if 1st number in dashes sequence is the max'): + temp[col] = pd.to_numeric(temp[col], errors = 'coerce', downcast = 'integer') + temp[col] = np.floor(temp[col]).astype(pd.Int64Dtype()) + + print('Calculating max col indicies') + temp['max_col'] = temp.max(axis = 1).astype(pd.Int64Dtype()) + temp['first_col_max'] = (~temp[2].isna()) & (temp['max_col'] == temp[0]) + + st_no_1st_df = st_no_1st_df.join(temp) + st_no_1st_df['has_dash_and_1st_col_max'] = st_no_1st_df['LP_street_no'].str.contains('-') & st_no_1st_df['first_col_max'] + has_dash_and_1st_col_max = st_no_1st_df['has_dash_and_1st_col_max'].fillna(False) | second_col_contains_letter + + return has_dash_and_1st_col_max + + +def detect_blank_street_no(df: pd.DataFrame) -> pd.Index: + ''' + Detects if absolutely no street_no info has been parsed + + Returns: + A pandas Index of boolean values + ''' + + df = df.copy() + street_no_conds = [ + (df['full_address'].str.contains(r'\d')), # full_address contains a digit + (df['street_no'].isna()), # street_no is blank + (df['LP_street_no'].isna()), # LP_street_no is blank + (df['LP2_street_no'].isna()), # LP2_street_no is blank + ] + street_no_blank = True + for i in street_no_conds: + street_no_blank = street_no_blank & i + + return street_no_blank + +def detect_unit_starts_non_digit(df: pd.DataFrame, regex_search: str) -> pd.Index: + ''' + Detects if unit starts with a non-digit character + + Arguments: + - df (pd.DataFrame): The main dataframe being parsed + - regex_search (str): A regex string to use in the search function + + Returns: + A pandas Index of boolean values + ''' + + df = df.copy() + unit_starts_non_digit = df['full_address'].str.contains(regex_search, na = False) + return unit_starts_non_digit + +def detect_blank_street_names(df: pd.DataFrame, OUT_OF_TOWN_VARS_LIST: list) -> pd.Index: + ''' + Detects if LP_street_name is blank given non blank full addresses that aren't "out of town" + + Arguments: + - df (pd.DataFrame): The main dataframe being parsed + - OUT_OF_TOWN_VARS_LIST (list): A list of full address values that should be discarded due to not providing enough info + + Returns: + A pandas Index of boolean values + ''' + + new_df = df.copy() + blank_street_names = new_df['full_address'].notnull() & new_df['LP_street_name'].isnull() & ~(new_df['LP_street_name'].isin(OUT_OF_TOWN_VARS_LIST)) + return blank_street_names + +def fix_postcode_errs(parsing_errs_df: pd.DataFrame, usa_postcode_err: pd.Series, postal_code_csv: str = None) -> pd.DataFrame: + ''' + Fixes postal code errors + + Arguments: + - parsing_errs_df (pd.DataFrame): A subset of the main dataframe containing only detected parsing errors. + - usa_postcode_err (pd.Series): A boolean series that indicates which entries has the usa postal code error + - postal_code_csv (str): Default = None. The file path to output the results of this parsing + + Side Effects: + - Outputs usa_postcode_err_df as a csv + ''' + # For these entries, LP parsed the street no as a postal code, and the unit no as a street no. + # This block of code maps the values to their proper column + usa_postcode_err_df = parsing_errs_df.loc[usa_postcode_err].copy() + usa_postcode_err_df = usa_postcode_err_df.fillna('') + usa_postcode_err_df['LP2_unit'] = (usa_postcode_err_df['LP2_unit'] + ' ' + usa_postcode_err_df['LP2_street_no']).str.lstrip() + usa_postcode_err_df['LP2_street_no'] = usa_postcode_err_df['LP_PostCode'] + usa_postcode_err_df['LP_PostCode'] = '' + usa_postcode_err_df = usa_postcode_err_df.replace('', np.nan) + + # Save to csv + if postal_code_csv is not None: + save_df_to_csv(usa_postcode_err_df, postal_code_csv, index = True) + + return usa_postcode_err_df + +def extract_parsing_errs(df: pd.DataFrame, err_idxs_dict: dict, OUT_OF_TOWN_VARS_LIST: list, main_df_output_path: str, parsing_errs_output_path: str) -> pd.DataFrame: + ''' + Extracts all the entries with parsing errors from the main df by applying inclusive OR to + all Index objects stored in err_idxs_dict. + + Side Effects: + - Adds 2 columns to df, a boolean that indicates whether the entry has a parsing error + and a column with a brief description of the errors + - Saves two dfs to file, the main df and the extraction of all detected parsing errors + + Arguments: + - df: The main dataframe + - err_idxs_dict: A dictionary of pandas Index of boolean values to indicate which entries have + a parsing error + - OUT_OF_TOWN_VARS_LIST: A list of full address values that should be discarded due to not providing enough info + - main_df_output_path: File path to save the main df + - parsing_errs_output_path: File path to save the parsing errors df + + Returns: + - parsing_errs_df: A dataframe of the extracted entries with parsing errors + ''' + + # Extract the indicies of all entries with detected parsing errors + err_idxs = False + for v in err_idxs_dict.values(): + err_idxs = err_idxs | v + + parsing_errs_df = df.loc[err_idxs].copy() + parsing_errs_df = parsing_errs_df.loc[~(parsing_errs_df['full_address'].isin(OUT_OF_TOWN_VARS_LIST))] + + # Check for already parsed data from source and remove them + source_parsed = (parsing_errs_df['street_name'].notnull()) & (~err_idxs_dict['invalid_street_no']) # & (parsing_errs_df['street_no'].notnull()) + parsing_errs_df = parsing_errs_df[~source_parsed] + df['parsing_err_exists'] = False + df.loc[parsing_errs_df.index, 'parsing_err_exists'] = True + parsing_errs_df.loc[:,'parsing_err_exists'] = True + + # Add descriptions of the parsing error + parsing_errs_df['parsing_err'] = '' + for k, v in err_idxs_dict.items(): + parsing_errs_df.loc[v, 'parsing_err'] = parsing_errs_df.loc[v, 'parsing_err'] + (k + ',') + + print(f'There are {parsing_errs_df.shape[0]} rows of incorrectly parsed addresses') + + # Save the dfs to csv + save_df_to_csv(parsing_errs_df, parsing_errs_output_path, index = True) + save_df_to_csv(df, main_df_output_path, index = True) + + return parsing_errs_df + +def fix_dashes_with_spaces(parsing_errs_df: pd.DataFrame, dashes_with_spaces_path: str, ORDINAL_NUMBER_DETECTION: str, CAD_POSTCODE_FORMAT: str) -> pd.DataFrame: + ''' + Fixes entries where spaces adjacent to dashes causes parsing errors + + Arguments: + - parsing_errs_df (pd.DataFrame): A dataframe of the extracted entries with parsing errors + - dashes_with_spaces_path (str): The file path used to save the results of this parsing + - ORDINAL_NUMBER_DETECTION (str): A regex string used to detect ordinal numbers in addressses + - CAD_POSTCODE_FORMAT (str): A regex string used to detect valid Canadian postal codes + + Returns: + - dashes_with_spaces_df: A dataframe with some of the dashes_with_spaces errors fixed + + Side Effects: + - Calls fix_postcode_errs() + - Saves parsing_errs_df to dashes_with_spaces_path as a csv + ''' + + # DEBUG_COLS = ['full_address', 'LP2_unit', 'LP2_street_no', 'LP_street_name'] + + # Remove whitespaces, then feed through libpostal again + dashes_with_spaces_df = parsing_errs_df[parsing_errs_df['parsing_err'] == 'dashes_with_spaces,'].copy() + full_address_alt = 'full_address_alt' + dashes_with_spaces_df[full_address_alt] = dashes_with_spaces_df['full_address'].str.replace(r'\s*-\s*', '-', regex = True, n = 1) + dashes_with_spaces_df = parsing_df_wrapper(dashes_with_spaces_df, full_address_alt) + + # Mark everything as parsed, then mark detected anomolies as not parsed + dashes_with_spaces_df['parsing_err_exists'] = True + dws_parsing_errs = [ + dashes_with_spaces_df['LP2_street_no'].str.contains(r'\D', regex = True), # LP2_street_no contains non-digit chars + dashes_with_spaces_df['full_address'].str.contains(',') & (dashes_with_spaces_df['LP2_unit'].str.fullmatch('') | dashes_with_spaces_df['LP2_street_no'].str.fullmatch('')), # full_addr contains comma and one of unit or street_no is empty + dashes_with_spaces_df['LP2_street_no'].str.fullmatch(''), + dashes_with_spaces_df['LP_street_name'].str.fullmatch(''), + dashes_with_spaces_df['LP2_street_no'] == '1', + dashes_with_spaces_df['LP2_street_no'] == '10', + dashes_with_spaces_df['full_address'].str.contains(r'\d\s*(?:avenue|street)', case = False, regex = True) & ~(dashes_with_spaces_df['full_address'].str.contains(ORDINAL_NUMBER_DETECTION, case = False, regex = True)), + dashes_with_spaces_df['full_address'].str.contains(r'^[A-z]{2,}', case = False, regex = True), + ] + parsing_err_idxs = False + for i in dws_parsing_errs: + parsing_err_idxs = parsing_err_idxs | i + dashes_with_spaces_df.loc[~parsing_err_idxs, 'parsing_err_exists'] = False + + # Sometimes, the original parsing was better than without the space + df2 = dashes_with_spaces_df.loc[dashes_with_spaces_df['parsing_err_exists']].copy() + df2 = parsing_df_wrapper(df2, 'full_address') + dashes_with_spaces_df.update(df2) + + # # Fix the new postal code errors that pop up + # usa_postcode_err = dashes_with_spaces_df['LP_PostCode'].str.fullmatch(r'\d+', na = False) + # usa_postcode_err = fix_postcode_errs(dashes_with_spaces_df, usa_postcode_err) + + # LP_street_name contains two numbers seperated by a space + two_nums_with_space_regex = r'^(\d+)\s+(\d+.*)' + two_nums_with_space_bool = dashes_with_spaces_df['LP_street_name'].str.contains(two_nums_with_space_regex, na = False, regex = True) + two_nums_with_space_df = dashes_with_spaces_df['LP_street_name'].str.extract(two_nums_with_space_regex, expand = True) + dashes_with_spaces_df.loc[two_nums_with_space_bool, 'LP2_unit'] = dashes_with_spaces_df.loc[two_nums_with_space_bool, 'LP2_unit'] + dashes_with_spaces_df.loc[two_nums_with_space_bool, 'LP2_street_no'] + dashes_with_spaces_df.loc[two_nums_with_space_bool, 'LP2_street_no'] = two_nums_with_space_df.loc[two_nums_with_space_bool, 0] + dashes_with_spaces_df.loc[two_nums_with_space_bool, 'LP_street_name'] = two_nums_with_space_df.loc[two_nums_with_space_bool, 1] + + return dashes_with_spaces_df + +def main(): + # Define filepaths + input_csv_path = '/home/jovyan/ODBiz/4-Parsing/output/parsed_biz.csv' + df2_path = '/home/jovyan/ODBiz/4-Parsing/double_check/parsed_with_easy_blanket_rule.csv' + dfTO_path = '/home/jovyan/ODBiz/4-Parsing/double_check/parsed_with_spillover_toronto.csv' + QC_parsed_wrong_df_path = '/home/jovyan/ODBiz/4-Parsing/custom_parsing_data/QC_Biz_parsed_wrong.csv' + postal_code_df_path = '/home/jovyan/ODBiz/4-Parsing/custom_parsing_data/postal_code_err.csv' + dashes_with_spaces_path = '/home/jovyan/ODBiz/4-Parsing/custom_parsing_data/dashes_with_space.csv' + main_df_output_path = '/home/jovyan/ODBiz/4-Parsing/custom_parsing_data/main_with_detected_parsing_errors.csv' + parsing_errs_output_path = '/home/jovyan/ODBiz/4-Parsing/custom_parsing_data/extract_detected_parsing_errors.csv' + output_csv_path = '/home/jovyan/ODBiz/4-Parsing/output/2-parsed_biz.csv' + + # Define some useful variables + OUT_OF_TOWN_VARS_LIST = [ # All entries where full_address was a full match with one of the values in this list were removed + '-', + 'BUSINESS - OUT OF TOWN SQUAMISH', + 'BUSINESS - OUT OF TOWN', + 'NON-RESIDENT', + 'BUSINESS-NON RESIDENT' + ] + ORDINAL_NUMBER_DETECTION = r'1st |2nd |3rd |\dth ' + # DEBUG_COLS = ['full_address', 'LP2_unit', 'LP2_street_no', 'LP_street_name'] + CAD_POSTCODE_FORMAT = r'[A-z]\d[A-z]\s*\d[A-z]\d' + + # Load the csv + total_lines = 803584 + chunksize = 10000 + df = pd.concat([chunk for chunk in tqdm(pd.read_csv(input_csv_path, + chunksize=chunksize, + dtype=str), + desc='Loading data', + total=total_lines//chunksize+1) + ]) + # df = pd.read_csv(input_csv, dtype=str) + df = df.set_index('idx') # This line of code is causing the code to halt without error messages. But it is necessary for the rest of the program :( + num_of_rows = df.shape[0] + print(f'Successfully loaded {input_csv_path}') + print(f'df has {num_of_rows} rows') + + # Extract only entries that spillover their unit+street_no values + new_df = df[~df['spill'].isna()].copy() + new_df = new_df[['localfile', 'business_name', 'full_address', 'LP2_unit', 'LP2_street_no', 'spill', 'LP_street_no', 'LP_street_name', 'LP_City', 'LP_Province', 'LP_PostCode', 'LP_Unit', 'LP3_unit']] + + # Apply a simple parsing rule + print('Applying simple_parse') + new_df = simple_parse(new_df, df2_path) + + # Apply a parsing rule specific to Toronto businesses + print('Applying toronto_parse') + new_df = toronto_parse(new_df, dfTO_path) + + # Update main df with changes so far + print('Merging above changes with main df') + # new_df = new_df.set_index('idx') + df.update(new_df) + + # Flag incorrectly parsed QC entries + df = flag_incorrect_QC(df, QC_parsed_wrong_df_path) + + ### Create df of incorrectly parsed addresses (for entries with full_address) + + # Detect if first number in sequence separated by dashes is the street_no + has_dash_and_1st_col_max = detect_street_no_1st(df) + + # Detect values incorrectly parsed as postal codes + usa_postcode_err = df['LP_PostCode'].str.fullmatch(r'\d+', na = False) + + # Detect dashes with spaces, libpostal freaks out when it encounters these + dashes_with_spaces = df['full_address'].str.contains(r'\s+-|-\s+', na = False) & ~(df['LP_street_name'].str.contains(ORDINAL_NUMBER_DETECTION, regex = True) & ((~(df['LP2_unit'].isnull()) | ~(df['LP2_street_no'].str.contains(r'\s', regex = True, na = False))))) & (~(df['full_address'].str.startswith('#', na = False))) + + # Detect if absolutely no street_no info has been parsed + street_no_blank = detect_blank_street_no(df) + + # Detect if first value is a unit separated by a dash, and starts with a non-digit character + unit_regex_group = r'^([^\d\s]+[A-z\d\.#\/]+)\s*-\s*([A-z\d\.#\/]+)\s*' + unit_starts_non_digit = detect_unit_starts_non_digit(df, unit_regex_group) + + # Detect blank street names + blank_street_names = detect_blank_street_names(df, OUT_OF_TOWN_VARS_LIST) + + # Detect invalid street_no + invalid_street_no = df['street_no'].str.contains(r'[\D\s]', regex = True, na = False) + + # Extract only detected patterns + err_idxs_dict = {# All values should be of pd.Index where all indicies are the same as df.index! + 'street_no_blank': street_no_blank, + 'usa_postcode_err': usa_postcode_err, + 'dashes_with_spaces': dashes_with_spaces, + 'has_dash_and_1st_col_max': has_dash_and_1st_col_max, + 'unit_starts_non_digit': unit_starts_non_digit, + 'blank_street_names': blank_street_names, + 'invalid_street_no': invalid_street_no, + # 'street_name_in_city': street_name_in_city + } + parsing_errs_df = extract_parsing_errs(df, err_idxs_dict, OUT_OF_TOWN_VARS_LIST, main_df_output_path, parsing_errs_output_path) + + # Fix usa postal code error + usa_postcode_err_df = fix_postcode_errs(parsing_errs_df, usa_postcode_err, postal_code_df_path) + print('Updating the big parsed csv with postal code error correction...') + df.update(usa_postcode_err_df) + parsing_errs_df.update(usa_postcode_err_df) + + # Fix dashes with space error + dashes_with_spaces_df = fix_dashes_with_spaces(parsing_errs_df, dashes_with_spaces_path, ORDINAL_NUMBER_DETECTION, CAD_POSTCODE_FORMAT) + df.update(dashes_with_spaces_df) + parsing_errs_df.update(dashes_with_spaces_df) + + # Add a column to indicate whether an entry was flagged as a parsing error + df['flagged_parsing_err'] = False + df.loc[parsing_errs_df.index, 'flagged_parsing_err'] = True + + ### For the addresses that I know are parsed from the parsing_errs_df, mark them as parsed (parsing_err_exists == False) + fixed_conds = [ + parsing_errs_df['parsing_err'] == 'usa_postcode_err,', # Only postal codes caused the error + # parsing_errs_df['parsing_err'] == 'dashes_with_spaces,', # Only dashes with spaces caused the error + parsing_errs_df['localfile'] == 'BC_Victoria_Business_Licences.csv', # Victoria was determined to be fully parsed + unit_starts_non_digit & (~parsing_errs_df['LP2_unit'].isna()) & (~(parsing_errs_df['LP2_street_no'].str.contains(r'[\D\s]', na = False))), # New iteration of parse_csv fixed most of the units starting with non-digits + parsing_errs_df['LP_street_name'].str.contains(r'^\d*\s(?:st$|street$|ave)', na = False, regex = True), # if the street name is "num avenue" or "num street" formatted in a particular way, these ones were parsed correctly + ] + fixed_conds_idxs = False + for i in fixed_conds: + fixed_conds_idxs = fixed_conds_idxs | i + fixed_conds_idxs = fixed_conds_idxs & (~parsing_errs_df['LP_street_name'].isna()) + parsed_idxs = parsing_errs_df[fixed_conds_idxs].index + parsing_errs_df.loc[parsed_idxs, 'parsing_err_exists'] = False + print(f'Total {parsing_errs_df.shape[0]}') + print('parsing_errs_df[parsing_err_exists].value_counts():') + parsing_val_counts = parsing_errs_df['parsing_err_exists'].value_counts() + print(parsing_val_counts) + print(f'Success percentage = {np.floor(100 * parsing_val_counts[False] / parsing_errs_df.shape[0])} %') + print('Remaining parsing required (breakdown):') + print(parsing_errs_df.loc[parsing_errs_df['parsing_err_exists'],'parsing_err'].value_counts()) + + ### Apply a custom regex parser for units that start with a letter (This doesn't actually work properly so I didn't keep these results in the final, but removing only this block of code may break other things) + re_mapping = { + 0: 'regex_g1', + 1: 'regex_g2' + } + temp = parsing_errs_df['full_address'].str.extract(unit_regex_group) + parsing_errs_df[['regex_g1', 'regex_g2']] = temp.rename(columns = re_mapping) + for i in re_mapping.values(): + parsing_errs_df[i] = parsing_errs_df[i].str.lower() + + # Reorder parsing_errs_df for easier debugging + parsing_errs_df['idx'] = parsing_errs_df.index + column_reorder = [ + 'full_address', + 'LP_street_name', + 'idx', + 'postal_code', + 'unit', + 'street_no', + 'street_name', + 'LP_Unit', + 'LP_street_no', + 'LP_City', + 'LP_Province', + 'LP_PostCode', + 'LP_street_no_alt', + 'LP2_unit', + 'LP2_street_no', + 'spill', + 'LP3_unit', + 'regex_g1', + 'regex_g2', + 'parsing_err_exists', + 'parsing_err', + 'localfile', + 'business_name', + 'alt_business_name', + 'business_sector', + 'business_subsector', + 'business_description', + 'business_id_no', + 'licence_number', + 'licence_type', + 'primary_NAICS', + 'secondary_NAICS', + 'NAICS_descr', + 'NAICS_descr2', + 'alt_econ_act_code', + 'alt_econ_act_descrip', + 'latitude', + 'longitude', + 'full_address_2', + 'mailing_address', + 'street_direction', + 'street_type', + 'city', + 'province', + 'country', + 'business_website', + 'email', + 'telephone', + 'telephone_extension', + 'toll_free_telephone', + 'fax', + 'total_no_employees', + 'no_full_time', + 'no_part_time', + 'no_seasonal', + 'date_established', + 'indigenous', + 'status', + 'provider', + 'geo_source', + ] + len_column_reorder = len(column_reorder) + parsing_errs_cols = parsing_errs_df.shape[1] + if len_column_reorder != parsing_errs_cols: + print('WARNING! There might be some missing columns!') + print(f'len_column_reorder = {len_column_reorder}') + print(f'parsing_errs_cols = {parsing_errs_cols}') + parsing_errs_df = parsing_errs_df[column_reorder] + + # Save parsing_errs_df + save_df_to_csv(parsing_errs_df, parsing_errs_output_path, index = False) + + # Save the main csv + df.to_csv(output_csv_path, index = True) + print(f'Saved df to {output_csv_path}') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/Businesses/4-Parsing/odhf_1_parse_csv.py b/scripts/Businesses/4-Parsing/odhf_1_parse_csv.py new file mode 100644 index 00000000..218eb7da --- /dev/null +++ b/scripts/Businesses/4-Parsing/odhf_1_parse_csv.py @@ -0,0 +1,97 @@ +""" +This script reads in a CSV containing an address column, and produces a version +of the csv with parsed address columns appended. +libpostal can separate into many fields, this retains only +[street number, name, postal code, city, and province] + +When run directly, requires three positional arguments: + +python parse_csv name_in addr_col name_out + +name_in: input csv (utf-8) +addr_col: the name of the address column being parsed +name_out: the name of the output file + +-Joseph Kuchar +December 14 2020 +""" + +""" +Quick copy-paste to run this code in terminal: + +cd /home/jovyan/data-vol-1/ODHF/LODE-ECDO/scripts/HealthFacilities/V2/4-Parsing + +python parse_csv.py merged.csv street_addr parsed.csv +python 1-parse_csv.py test_odbiz_merge.csv full_address parsed_biz.csv +python odhf_1_parse_csv.py input/ODBiz_Merged.csv full_address output/parsed_biz.csv + +""" + + + + +import sys +import pandas as pd +from postal.parser import parse_address +from argparse import ArgumentParser +import numpy as np + +def parse_csv(df, addr_col): + df[['LP_street_no', 'LP_street_name', 'LP_City', 'LP_Province', 'LP_PostCode','LP_Unit']] = df.apply(lambda x: format_parser(x[addr_col]), axis=1, result_type='expand') + return df + +def format_parser(add): + + # libpostal returns a list of tuples, this just converts it to a dictionary + A = parse_address(add) + B = dict((x, y) for (y, x) in A) + key_list = ['house_number', 'road', 'city', 'state', 'postcode', 'unit'] + parsed = [] + for k in key_list: + if k in B.keys(): + parsed.append(B[k]) + else: + parsed.append('') + return parsed + +if __name__ == "__main__": + parser = ArgumentParser( + description='Apply libpostal address parser to an address column in a csv') + parser.add_argument('name_in', + help='Name/Path of input file') + parser.add_argument('addr_col', + help='Name of address column to pass to parser') + parser.add_argument('name_out', + help='Name/Path of output file') + args = parser.parse_args() + + name_in = args.name_in + addr_col = args.addr_col + name_out = args.name_out + df_in = pd.read_csv(name_in, dtype='str', low_memory=False) + df_in=df_in.fillna('') + df_out = parse_csv(df_in, addr_col) + +#street numbers that include unit number through a dash get split and put into separate columns + df_temp = df_out.loc[df_out['LP_street_no'].str.contains("-")] + df_out[['LP2_unit', 'LP2_street_no']] = df_temp['LP_street_no'].str.split('-', expand=True) + df_out['LP2_unit'] = df_out['LP2_unit'].fillna(df_out['LP_Unit']) + df_out['LP2_street_no'] = df_out['LP2_street_no'].fillna(df_out['LP_street_no']) + +#street numbers that include the word unit get move to new unit column and merged with other unit column + units = df_out['LP2_street_no'].str.contains('unit', case=False) + df_out['LP3_unit']=df_out['LP2_street_no'].where(units, np.nan) + df_out['LP2_street_no']=df_out['LP2_street_no'].mask(units, np.nan) + df_out['LP3_unit'] = df_out['LP3_unit'].fillna(df_out['LP2_unit']) + + #df2_temp = df_out.loc[df_out['LP2_street_no'].str.contains(" ", na)] + #print(df_temp) + #df_out[['LP3_unit', 'LP3_street_no']] = df2_temp['LP2_street_no'].str.split(' ', expand=True) + #df_out['LP3_unit'] = df_out['LP3_unit'].fillna(df_out['LP2_Unit']) + #df_out['LP3_street_no'] = df_out['LP3_street_no'].fillna(df_out['LP2_street_no']) + + df_out.to_csv(name_out, index=False) + + + + diff --git a/scripts/Businesses/4-Parsing/odhf_2-combine.py b/scripts/Businesses/4-Parsing/odhf_2-combine.py new file mode 100644 index 00000000..81b43342 --- /dev/null +++ b/scripts/Businesses/4-Parsing/odhf_2-combine.py @@ -0,0 +1,78 @@ +import pandas as pd +import numpy as np +import sys +from hashlib import blake2b +from hashlib import sha256 + +#np.set_printoptions(threshold=sys.maxsize) + + +f_in = "1-parsed.csv" +f_out = "2-combined.csv" +df=pd.read_csv(f_in, low_memory=False, dtype='str') + + +df['unit'] = np.nan + +# Merge parsed columns with other columns +df['street_no'] = df['street_no'].fillna(df['LP2_street_no']) +df['street_name'] = df['street_name'].fillna(df['LP_street_name']) +df['postal_code'] = df['postal_code'].fillna(df['LP_PostCode'].str.upper()) +df['city'] = df['city'].fillna(df['LP_City'].str.capitalize()) +df['unit'] = df["LP3_unit"].str.capitalize() + +# Reorder columns +df = df[['filename', 'facility_name', 'facility_type', 'health_authority', 'alternative_name', 'number_beds', +'address_str', 'unit', 'street_no', 'street_name', 'street_addr', 'city', 'province', 'postal_code', 'provider', +'latitude', 'longitude', 'geo_source', 'phone', 'email', 'website' ]] + +# Remove all postal codes that are not 6 characters long and that do not follow the format of a postal code +df['postal_code'] = df['postal_code'].str.replace(' ','').str.upper() +df['postal_code'] = df['postal_code'].str.replace('-','').str.upper() +mask = df['postal_code'].astype(str).str.len() != 6 +df.loc[mask, 'postal_code'] = '' +#print(df['postal_code'].tolist()) + +#fill NAs in street_addr +df['temporary'] = df['unit'].astype(str)+' '+df['street_no'].astype(str)+' '+df['street_name'].astype(str) +df['temporary'] = df['temporary'].str.replace('nan','') +df['street_addr'] = df['street_addr'].fillna(df['temporary']) +df = df.drop(['temporary'], axis=1) + + +#Create unique identifiers for each datapoint +def GetHash(x): + h = sha256() + h.update(x.encode()) + return h.hexdigest() + +def make_temp_col(df): + df_temp=df.copy() + cols=['facility_name','street_name','city','latitude','street_no','longitude','facility_type'] + del_list=["-","'","."] + for col in cols: + + df_temp[col]=df_temp[col].str.upper() + df_temp[col]=df_temp[col].fillna('NULL') + + for i in del_list: + df_temp[col]=df_temp[col].str.replace(i,'',regex=False) + df_temp['temp']=df_temp['facility_name']+'-'+df_temp['street_name']+'-'+df_temp['city']+'-'+df_temp['latitude']+'-'+df_temp['street_no']+'-'+df_temp['longitude']+'-'+df_temp['facility_type'] + return df_temp['temp'] + +df['temp']=make_temp_col(df) +df['idx']=df['temp'].apply(GetHash) + +#Any indexes that are the same basically mean that the data points are the same, which is why we drop duplicates +df = df.drop_duplicates(subset=['idx']) +df = df.drop(['temp'], axis=1) +df.insert(0, 'idx', df.pop('idx')) + +df.to_csv(f_out, index=False) +df.to_csv('../5-Geocoding/combined.csv', index=False) +print(df['idx'].value_counts()) + + + + + diff --git a/scripts/Businesses/4-Parsing/parse_csv.py b/scripts/Businesses/4-Parsing/parse_csv.py new file mode 100644 index 00000000..df5404f7 --- /dev/null +++ b/scripts/Businesses/4-Parsing/parse_csv.py @@ -0,0 +1,139 @@ +""" +This script reads in a CSV containing an address column, and produces a version +of the csv with parsed address columns appended. +libpostal can separate into many fields, this retains only +[street number, name, postal code, city, and province] + +When run directly, requires three positional arguments: + +python parse_csv name_in addr_col name_out + +name_in: input csv (utf-8) +addr_col: the name of the address column being parsed +name_out: the name of the output file + +-Joseph Kuchar +December 14 2020 +""" + +""" +Quick copy-paste to run this code in terminal: + +cd /home/jovyan/ODBiz/4-Parsing + +python parse_csv.py input/ODBiz_Merged.csv full_address output/parsed_biz.csv + +""" + +import sys +import pandas as pd +from postal.parser import parse_address +from argparse import ArgumentParser +import numpy as np +from datetime import datetime as dt + +def parse_csv(df, addr_col): + df[['LP_street_no', 'LP_street_name', 'LP_City', 'LP_Province', 'LP_PostCode','LP_Unit', + 'LP_street_no_alt' + ]] = df.apply(lambda x: format_parser(x[addr_col]), axis=1, result_type='expand') + return df + +def format_parser(addr): + # libpostal returns a list of tuples, this just converts it to a dictionary + A = parse_address(addr) + B = dict((x, y) for (y, x) in A) + key_list = ['house_number', 'road', 'city', 'state', 'postcode', 'unit', + 'house' + ] + parsed = [] + for k in key_list: + if k in B.keys(): + parsed.append(B[k]) + else: + parsed.append('') + return parsed + +def parsing_df_wrapper(df_in: pd.DataFrame, addr_col: str): + # Read in df and fill in na's with empty string + start_time = dt.now() + print(f'Begin parsing the `{addr_col}` column') + df_in=df_in.fillna('') + + # Apply Libpostal to parse address + df_out = parse_csv(df_in, addr_col) + + # Update LP_street_no or LP_Unit with LP_street_no_alt if LP_street_no is empty string + LP_street_no_empty = df_out['LP_street_no'] == '' + LP_Unit_empty = df_out['LP_Unit'] == '' + df_out.loc[~LP_street_no_empty & LP_Unit_empty, 'LP_Unit'] = df_out.loc[~LP_street_no_empty & LP_Unit_empty, 'LP_street_no_alt'] + df_out.loc[LP_street_no_empty, 'LP_street_no'] = df_out.loc[LP_street_no_empty, 'LP_street_no_alt'] + + #street numbers that include unit number through a dash get split and put into separate columns + split_chars = r'[\-\s]' + df_temp = df_out.loc[df_out['LP_street_no'].str.contains(split_chars)] + try: + df_out[['LP2_unit', 'LP2_street_no']] = df_temp['LP_street_no'].str.split(split_chars, expand=True, regex = True) + except: + print('Too many dashes, spilling over parsing to extra column.') + df_out[['LP2_unit', 'LP2_street_no', 'spill']] = df_temp['LP_street_no'].str.split(split_chars, expand=True, n=2, regex = True) + + # If the spillover column contains a street name, pre-pend it to LP_street_name + has_street_name = df_out['spill'].str.contains(r'[a-z]$', na = False) + df_out.loc[has_street_name, 'LP_street_name'] = df_out.loc[has_street_name, 'spill'] + ' ' + df_out.loc[has_street_name, 'LP_street_name'] + + df_out['LP2_unit'] = df_out['LP2_unit'].fillna(df_out['LP_Unit']) + df_out['LP2_street_no'] = df_out['LP2_street_no'].fillna(df_out['LP_street_no']) + + #street numbers that include the word unit get move to new unit column and merged with other unit column + units = df_out['LP2_street_no'].str.contains('unit', case=False) + df_out['LP3_unit']=df_out['LP2_street_no'].where(units, np.nan) + df_out['LP2_street_no']=df_out['LP2_street_no'].mask(units, np.nan) + df_out['LP3_unit'] = df_out['LP3_unit'].fillna(df_out['LP2_unit']) + + # This block of code wasn't relevant for ODBiz + #df2_temp = df_out.loc[df_out['LP2_street_no'].str.contains(" ", na)] + #print(df_temp) + #df_out[['LP3_unit', 'LP3_street_no']] = df2_temp['LP2_street_no'].str.split(' ', expand=True) + #df_out['LP3_unit'] = df_out['LP3_unit'].fillna(df_out['LP2_Unit']) + #df_out['LP3_street_no'] = df_out['LP3_street_no'].fillna(df_out['LP2_street_no']) + + exetime = dt.now() - start_time + print(f'Execution finished in {exetime.total_seconds()} seconds') + + return df_out + +def parsing_file_wrapper(name_in: str, addr_col: str, name_out: str): + df_in = pd.read_csv(name_in, dtype='str', low_memory=False) + print(f'File {name_in} loaded') + df_out = parsing_df_wrapper(df_in, addr_col) + + print(f'df has been parsed! Saving file to {name_out}') + df_out.to_csv(name_out, index=False) + print(f'File saved to {name_out}') + +def main(): + parser = ArgumentParser( + description='Apply libpostal address parser to an address column in a csv') + parser.add_argument('name_in', + help='Name/Path of input file') + parser.add_argument('addr_col', + help='Name of address column to pass to parser') + parser.add_argument('name_out', + help='Name/Path of output file') + args = parser.parse_args() + + name_in = args.name_in + addr_col = args.addr_col + name_out = args.name_out + + # The inputs that were used for ODBiz + # name_in = '/home/jovyan/ODBiz/4-Parsing/input/ODBiz_Merged.csv' + # addr_col = 'full_address' + # name_out = '/home/jovyan/ODBiz/4-Parsing/output/parsed_biz.csv' + + parsing_file_wrapper(name_in, addr_col, name_out) + +if __name__ == "__main__": + main() + + diff --git a/scripts/Businesses/4-Parsing/parsing.ipynb b/scripts/Businesses/4-Parsing/parsing.ipynb new file mode 100644 index 00000000..1f757666 --- /dev/null +++ b/scripts/Businesses/4-Parsing/parsing.ipynb @@ -0,0 +1,268 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-03T18:06:27.786148Z", + "iopub.status.busy": "2022-08-03T18:06:27.784965Z", + "iopub.status.idle": "2022-08-03T18:06:27.791409Z", + "shell.execute_reply": "2022-08-03T18:06:27.789945Z", + "shell.execute_reply.started": "2022-08-03T18:06:27.786097Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from odhf_1_parse_csv import parse_csv" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-03T19:41:53.271171Z", + "iopub.status.busy": "2022-08-03T19:41:53.270568Z", + "iopub.status.idle": "2022-08-03T19:42:00.554055Z", + "shell.execute_reply": "2022-08-03T19:42:00.553171Z", + "shell.execute_reply.started": "2022-08-03T19:41:53.271137Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_32021/507013991.py:1: DtypeWarning: Columns (3,4,5,6,7,8,10,11,12,13,16,17,18,19,20,21,22,23,26,27,28,29,30,32,33,34,38,40,42,46) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " df = pd.read_csv('~/ODBiz/3-Merging/output/4-ODBiz_merged_2022-07-28.csv')\n" + ] + } + ], + "source": [ + "df = pd.read_csv('~/ODBiz/3-Merging/output/4-ODBiz_merged_2022-07-28.csv')\n", + "\n", + "# test the parsing function on a sample which have mailing addresses\n", + "df = df[df['mailing_address'].notna()]\n", + "sample = df.sample(100)\n", + "# list(sample)\n", + "sample = sample[['localfile', 'mailing_address', 'street_no', 'street_name']]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-03T19:44:07.764612Z", + "iopub.status.busy": "2022-08-03T19:44:07.764013Z", + "iopub.status.idle": "2022-08-03T19:44:08.064617Z", + "shell.execute_reply": "2022-08-03T19:44:08.063771Z", + "shell.execute_reply.started": "2022-08-03T19:44:07.764572Z" + } + }, + "outputs": [], + "source": [ + "sample.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-03T19:44:30.056636Z", + "iopub.status.busy": "2022-08-03T19:44:30.056299Z", + "iopub.status.idle": "2022-08-03T19:44:30.085900Z", + "shell.execute_reply": "2022-08-03T19:44:30.084994Z", + "shell.execute_reply.started": "2022-08-03T19:44:30.056610Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "test = parse_csv(sample,'mailing_address')" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-03T19:58:56.150482Z", + "iopub.status.busy": "2022-08-03T19:58:56.150030Z", + "iopub.status.idle": "2022-08-03T19:58:56.164838Z", + "shell.execute_reply": "2022-08-03T19:58:56.164110Z", + "shell.execute_reply.started": "2022-08-03T19:58:56.150446Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
localfilemailing_addressstreet_nostreet_nameLP_street_noLP_street_nameLP_CityLP_ProvinceLP_PostCodeLP_Unit
787849BC_Langley_Business_Licences.csv39-4847 219 ST LANGLEY BC V3A 8C14847.0219 ST39-4847219 stlangleybcv3a 8c1
670889ON_York_Region_Business_Directory.csv17075 LESLIE STREET17075LESLIE17075leslie street
657855ON_York_Region_Business_Directory.csv101 EDWARD AVENUE101EDWARD101edward avenue
663120ON_York_Region_Business_Directory.csv60 GREEN LANE60GREEN60green lane
665717ON_York_Region_Business_Directory.csv298 JOHN STREET298JOHN298john street
\n", + "
" + ], + "text/plain": [ + " localfile \\\n", + "787849 BC_Langley_Business_Licences.csv \n", + "670889 ON_York_Region_Business_Directory.csv \n", + "657855 ON_York_Region_Business_Directory.csv \n", + "663120 ON_York_Region_Business_Directory.csv \n", + "665717 ON_York_Region_Business_Directory.csv \n", + "\n", + " mailing_address street_no street_name LP_street_no \\\n", + "787849 39-4847 219 ST LANGLEY BC V3A 8C1 4847.0 219 ST 39-4847 \n", + "670889 17075 LESLIE STREET 17075 LESLIE 17075 \n", + "657855 101 EDWARD AVENUE 101 EDWARD 101 \n", + "663120 60 GREEN LANE 60 GREEN 60 \n", + "665717 298 JOHN STREET 298 JOHN 298 \n", + "\n", + " LP_street_name LP_City LP_Province LP_PostCode LP_Unit \n", + "787849 219 st langley bc v3a 8c1 \n", + "670889 leslie street \n", + "657855 edward avenue \n", + "663120 green lane \n", + "665717 john street " + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "data_exploration (odbiz)", + "language": "python", + "name": "myenv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/4-Parsing/parsing_errors_documentation.md b/scripts/Businesses/4-Parsing/parsing_errors_documentation.md new file mode 100644 index 00000000..eacc8b8e --- /dev/null +++ b/scripts/Businesses/4-Parsing/parsing_errors_documentation.md @@ -0,0 +1,128 @@ +# Parsing Errors +Some patterns have been identified as being too problematic for libpostal to parse. The purpose of this document is to explain what the error codes used in `odbiz_custom_parse.py` mean, what criteria was used to spot entries that were given the code, and what was attempted to solve the error. For all entries, if either `street_name` or a valid `street_no` was already provided (the addresses were already parsed by the source), then it was ignored by the error detection. The script also only applies error detection to entries where a `full_address` is provided. The entire dataset was run through libpostal once before any error detection was applied. `odbiz_custom_parse.py` prints out a frequency summary of all combinations of error codes for all entries at the end of it's execution. + +Note that I focused most of my time fixing the `dashes_with_spaces` error since that was the error that made up an *overwhelming majority* of all errors. Often times, the fix applied to `dashes_with_spaces` would also fix many of the problems in other catagories as well. + +--- + +## street_no_blank + +### *Summary* +Detects if absolutely no street_no info has been parsed. + +### *Conditions* +Check if all of the following columns are blank: +- street_no +- LP_street_no +- LP2_street_no + +### *Attempted Solution* +No solution was attempted for this problem + +--- + +## usa_postcode_err + +### *Summary* +Detect values incorrectly parsed as USA postal codes + +### *Conditions* +For an entry, if every character in `LP_PostCode` is a digit (0-9), then it is classified as a USA postal code + +### *Attempted Solution* +Turns out that libpostal just maps these values to the wrong locations. The solution is to re-map columns as follows: +- Map (`LP2_unit` + `LP2_street_no`) to `LP2_unit` +- Map `LP_PostCode` to `LP2_street_no` +- Set `LP_PostCode` to empty string + +The function `fix_postcode_errs`() executes this solution. + +--- + +## dashes_with_spaces + +### *Summary* +Every time there is a whitespace character adjacent to a dash (-) character, there's a chance that libpostal doesn't parse it properly. But it does parse some of these properly which is annoying to deal with + +### *Conditions* +Detects if all of the following are true: +- `full_address` contains whitespaces adjacent to either side of a dash +- All of the following condition are false: + - `LP_street_name` contains an ordinal number (1st, 2nd, 3rd, 4th...) + - At least one of the following is true: + - `LP2_unit` is not blank + - `LP2_street_no` doesn't contain a whitespace +- `full_address` doesn't start with the `#` character. + +Note: There's a lot of negated conditionals here because it turns out that if the entry does have spaces adjacent to a whitespace AND one of the negated conditions, libpostal likely parses it properly the first time. + +### *Attempted Solution* +First, remove any whitespaces that are adjacent to a dash, then feed the entries through libpostal again. + +Then, detect any parsing anomolies in the set of re-parsed data using any of the conditions specified by the list `dws_parsing_errs`. If an entry doesn't have any detected anomolies, mark it as "parsed correctly". Note that this may not be true since this method is not 100% thorough. + +If a parsing anomoly was detected after running an entry through libpostal a second time, then keep the values that libpostal assigned to it the first time. These values appear to be better for the ones that weren't improved by passing them through libpostal twice. + +If LP_street_name contains two numerical values seperated by a space, then a re-mapping is necessary: +- Map (`LP2_unit` + `LP2_street_no`) to `LP2_unit` +- Map the leftmost number in `LP_street_name` to `LP2_street_no` +- Set `LP_street_name` to be everything to the right of the leftmost number. + +The function `fix_dashes_with_spaces`() executes this solution. + +--- + +## has_dash_and_1st_col_max + +### *Summary* +If `LP_street_no` happens to be a sequence of numbers seperated by dashes, then this detects whether the first number in the sequence is the street number. + +### *Conditions* +If the first number is the max of the sequence, then it is considered to be the `street_no` + +### *Attempted Solution* +Beyond detecting the street_no, no attempt has been made at solving the error as I couldn't figure out what to do with the rest of the sequence. + +--- + +## unit_starts_non_digit + +### *Summary* +Detects if the unit (the first few characters of `full_address`) starts with a non-digit character + +### *Conditions* +Detects if all of the following are true: +- `full_address` contains a dash +- `full_address` starts with a non-digit character + +### *Attempted Solution* +No solution was attempted for this problem + +--- + +## blank_street_names + +### *Summary* +Detects if libpostal was able to parse a street_name from non-blank full addresses. This is because, in theory, the street_name should be the easiest thing for libpostal to parse, so if it didn't find it, then something went really wrong. Ignores addresses that are "out of town". + +### *Conditions* +All of the following conditions are true: +- `full_address` is not blank +- `LP_street_name` is blank +- `LP_street_name` is not one of the values specified in `OUT_OF_TOWN_VARS_LIST` + +### *Attempted Solution* +No solution was attempted for this problem + +--- + +## invalid_street_no + +### *Summary* +Detects if the `street_no` contains any non-digit characters + +### *Conditions* +See summary + +### *Attempted Solution* +No solution was attempted for this problem diff --git a/scripts/Businesses/4-Parsing/parsing_main.ipynb b/scripts/Businesses/4-Parsing/parsing_main.ipynb new file mode 100644 index 00000000..f6d68713 --- /dev/null +++ b/scripts/Businesses/4-Parsing/parsing_main.ipynb @@ -0,0 +1,109 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-31T23:12:38.751153Z", + "iopub.status.busy": "2022-08-31T23:12:38.750832Z", + "iopub.status.idle": "2022-08-31T23:12:45.569532Z", + "shell.execute_reply": "2022-08-31T23:12:45.568682Z", + "shell.execute_reply.started": "2022-08-31T23:12:38.751089Z" + } + }, + "outputs": [], + "source": [ + "import parse_csv\n", + "import odbiz_custom_parse\n", + "import combine_parsed_cols\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-31T23:12:45.571559Z", + "iopub.status.busy": "2022-08-31T23:12:45.571125Z", + "iopub.status.idle": "2022-08-31T23:14:13.020323Z", + "shell.execute_reply": "2022-08-31T23:14:13.019381Z", + "shell.execute_reply.started": "2022-08-31T23:12:45.571532Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "%%bash\n", + "python parse_csv.py input/ODBiz_Merged.csv full_address output/parsed_biz.csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-31T23:14:13.022440Z", + "iopub.status.busy": "2022-08-31T23:14:13.022042Z", + "iopub.status.idle": "2022-08-31T23:15:39.827000Z", + "shell.execute_reply": "2022-08-31T23:15:39.826136Z", + "shell.execute_reply.started": "2022-08-31T23:14:13.022405Z" + } + }, + "outputs": [], + "source": [ + "odbiz_custom_parse.main()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-31T23:15:39.828513Z", + "iopub.status.busy": "2022-08-31T23:15:39.828130Z", + "iopub.status.idle": "2022-08-31T23:16:07.926525Z", + "shell.execute_reply": "2022-08-31T23:16:07.925708Z", + "shell.execute_reply.started": "2022-08-31T23:15:39.828484Z" + } + }, + "outputs": [], + "source": [ + "combine_parsed_cols.main()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:odbiz]", + "language": "python", + "name": "conda-env-odbiz-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + }, + "metadata": { + "interpreter": { + "hash": "3f6acfd5c7a89dd4516208ed2cd5283b5177bf58d22f895010c388a779688e5d" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/scripts/Businesses/4-Parsing/post_parsed_data_viewing.ipynb b/scripts/Businesses/4-Parsing/post_parsed_data_viewing.ipynb new file mode 100644 index 00000000..514e395b --- /dev/null +++ b/scripts/Businesses/4-Parsing/post_parsed_data_viewing.ipynb @@ -0,0 +1,281 @@ +{ + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + }, + "orig_nbformat": 2, + "kernelspec": { + "name": "python3105jvsc74a57bd03f6acfd5c7a89dd4516208ed2cd5283b5177bf58d22f895010c388a779688e5d", + "display_name": "Python 3.10.5 64-bit" + }, + "metadata": { + "interpreter": { + "hash": "3f6acfd5c7a89dd4516208ed2cd5283b5177bf58d22f895010c388a779688e5d" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2, + "cells": [ + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd \n", + "from tqdm import tqdm\n", + "import numpy as np\n", + "from IPython.display import display" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Loading data: 100%|██████████| 81/81 [00:06<00:00, 12.38it/s]Successfully loaded /home/jovyan/ODBiz/4-Parsing/output/parsed_biz.csv\n", + "df has 803658 rows\n", + "\n" + ] + } + ], + "source": [ + "# Load the csv\n", + "input_csv = '/home/jovyan/ODBiz/4-Parsing/output/parsed_biz.csv'\n", + "total_lines = 803658\n", + "chunksize = 10000\n", + "df = pd.concat([chunk for chunk in tqdm(pd.read_csv(input_csv,\n", + " chunksize=chunksize, \n", + " dtype=str), \n", + " desc='Loading data', \n", + " total=total_lines//chunksize+1)\n", + " ])\n", + "num_of_rows = df.shape[0]\n", + "print(f'Successfully loaded {input_csv}')\n", + "print(f'df has {num_of_rows} rows')" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saved new_df to /home/jovyan/ODBiz/4-Parsing/double_check/parsed_with_spillover.csv\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": " idx localfile \\\n608 1aaf470769d4d02c2ba8 BC_Victoria_Business_Licences.csv \n1054 bf927f38280978c45d52 BC_Victoria_Business_Licences.csv \n1239 cb0576b2e074711fe258 BC_Victoria_Business_Licences.csv \n1340 150bd858e17adf5796d9 BC_Victoria_Business_Licences.csv \n1582 23f92529e3b00f5220a1 BC_Victoria_Business_Licences.csv \n1584 9311d646bd8abc777a19 BC_Victoria_Business_Licences.csv \n2474 e511e2d61a76ea455da3 BC_Victoria_Business_Licences.csv \n2770 16f296dee2880a32b64c BC_Victoria_Business_Licences.csv \n2793 c3fdfac470e53a586ee3 BC_Victoria_Business_Licences.csv \n2798 ba8ff3b4a123d49a10c1 BC_Victoria_Business_Licences.csv \n3395 5d7c902a4485da28ba3b BC_Victoria_Business_Licences.csv \n3579 3433be4ccd81035db6b6 BC_Victoria_Business_Licences.csv \n3705 f3715c160a1f36c95aab BC_Victoria_Business_Licences.csv \n4658 058bea397fdbdc57b1e4 BC_Victoria_Business_Licences.csv \n5279 3097014846a21fc4b6f4 BC_Victoria_Business_Licences.csv \n6010 2347fda8a3762b9da41d BC_Victoria_Business_Licences.csv \n6165 7ea34407aeebac77311e BC_Victoria_Business_Licences.csv \n6616 9572258fefc677a8fc68 BC_Victoria_Business_Licences.csv \n6751 2efffd1553dcecba0b50 BC_Victoria_Business_Licences.csv \n6782 72af67acc6c8992e9f07 BC_Victoria_Business_Licences.csv \n30572 a59afc90ecc84c2c7cb4 BC_Indigenous_Business_Listings.csv \n240496 d9b59b89b7c9f71edf66 BC_Chilliwack_Business_Licences.csv \n245607 6952f27f8f32e812cf03 ON_Brampton_Business_Directory.csv \n245626 02d77f2c59136d3a6d7b ON_Brampton_Business_Directory.csv \n246571 afa96e09bc0c8c987326 ON_Brampton_Business_Directory.csv \n246989 6b4c488878da758a5c79 ON_Brampton_Business_Directory.csv \n247248 209073c9a1cd06244595 ON_Brampton_Business_Directory.csv \n248440 8358f31c9442316598fc ON_Brampton_Business_Directory.csv \n248835 05eeeeaa06ba099aff82 ON_Brampton_Business_Directory.csv \n248852 067f5b3bd0cb413d016e ON_Brampton_Business_Directory.csv \n248963 6593b2db7cf5a05a86f1 ON_Brampton_Business_Directory.csv \n249117 7ba728c2c0c81fe8893b ON_Brampton_Business_Directory.csv \n249386 7d356a4136837f0e16db ON_Brampton_Business_Directory.csv \n249461 4b96bb9fb8a61074b43c ON_Brampton_Business_Directory.csv \n249663 89d9379007bfc34d86ec ON_Brampton_Business_Directory.csv \n250547 d72f56efc2da07bcbef9 ON_Brampton_Business_Directory.csv \n250840 d868cb6db85e2024cff4 ON_Brampton_Business_Directory.csv \n250848 0b746cf821087d844de7 ON_Brampton_Business_Directory.csv \n250960 05073f05b6004cd5ba82 ON_Brampton_Business_Directory.csv \n250961 621f07a335bf5ddd9c83 ON_Brampton_Business_Directory.csv \n250970 566dd2abb1680fe0b447 ON_Brampton_Business_Directory.csv \n251215 282ae5e0efc353a3cbd5 ON_Brampton_Business_Directory.csv \n251597 f923bb2fd5ab5f41d605 ON_Brampton_Business_Directory.csv \n251929 f324da0c70c43fdac329 ON_Brampton_Business_Directory.csv \n252331 74d4b6b3410c918c2817 ON_Brampton_Business_Directory.csv \n252417 2ce85444ef716093acb4 ON_Brampton_Business_Directory.csv \n252451 2a80d5f48781f0b2c8ea ON_Brampton_Business_Directory.csv \n252566 de4bd5c4e23c74fc3045 ON_Brampton_Business_Directory.csv \n252648 82ee061c0f9bd1874004 ON_Brampton_Business_Directory.csv \n253338 41a9d66adbf64ed0be7e QC_Etablissements.csv \n253992 b311a3888f6e6f80e7b7 QC_Etablissements.csv \n254295 34ecc47c62e630151736 QC_Etablissements.csv \n254306 284c6081b54e67aa8f9c QC_Etablissements.csv \n254389 c9d155034ba230360ab7 QC_Etablissements.csv \n255528 c54d9ea15b2719771e63 QC_Etablissements.csv \n256392 b0320015e3acdbe50a04 QC_Etablissements.csv \n259332 69084816edfbe952916a QC_Etablissements.csv \n259747 b544048a73c9c2ba8ae0 QC_Etablissements.csv \n260734 42dafeaf9b73b5f52256 QC_Etablissements.csv \n262508 8e9023e47fa70550ba10 QC_Etablissements.csv \n263749 87966648005e979010da QC_Etablissements.csv \n264095 2ce4d8802fbd7dcb8163 QC_Etablissements.csv \n264277 5a6cb82d7cb1243723d7 QC_Etablissements.csv \n264337 851bfa0c3b7902f24682 QC_Etablissements.csv \n264338 d6981c9b09817435aba1 QC_Etablissements.csv \n264341 d5a3c29ef5045f88b04c QC_Etablissements.csv \n264880 2b86920fa2a7cdbc7bd4 QC_Etablissements.csv \n264889 a68a060ca32adc8828cc QC_Etablissements.csv \n265981 4cea6d535b0305b718ac QC_Etablissements.csv \n270029 c4a5f5bc4cc9dfaa6e53 QC_Etablissements.csv \n270915 afad0166434fa6684f2d QC_Etablissements.csv \n272656 338b97e202f529e281a0 QC_Etablissements.csv \n273236 e5313a1799370fc833c2 QC_Etablissements.csv \n273241 617c02fc3f4adb2bffb1 QC_Etablissements.csv \n273366 049ab01f21736d49b4df QC_Etablissements.csv \n273597 10daa17a4d3c43ddd864 QC_Etablissements.csv \n273642 7b35bbf5d82b813fe389 QC_Etablissements.csv \n273710 8be2a01feda26b4aa82d QC_Etablissements.csv \n273827 5366c979703d051e6835 QC_Etablissements.csv \n274251 8bb9b86958fe66098568 QC_Etablissements.csv \n275219 9b70b5da3d5a2ad5c178 QC_Etablissements.csv \n276047 07dc69cf130343459715 QC_Etablissements.csv \n276416 79a84d3c6056a40b2150 QC_Etablissements.csv \n278957 0e49d839b7445e9031e7 QC_Etablissements.csv \n279103 18d58f0bde9e34848ba8 QC_Etablissements.csv \n279577 6f25db6f4dc9cac0221f QC_Etablissements.csv \n280582 27d97b36025ea3653764 QC_Etablissements.csv \n280584 cef9e013da8f28673a80 QC_Etablissements.csv \n281406 6a5f015bccb7f719cd4d QC_Etablissements.csv \n282234 aa9f37eb5ea24d83cb5f QC_Etablissements.csv \n282958 cdbc7c90cbe3e493c2a9 QC_Etablissements.csv \n282982 cb20a9047b0141883b0d QC_Etablissements.csv \n283143 0cf8202844e090ef3dfa QC_Etablissements.csv \n284026 d697631db71e5b348482 QC_Etablissements.csv \n284082 1f1e23b75267db371a4b QC_Etablissements.csv \n284593 d18f9621b160900f0e57 QC_Etablissements.csv \n285206 4ada2b03b5ba60c71f71 QC_Etablissements.csv \n285840 afddf9c141f4bf62a50d QC_Etablissements.csv \n285841 779ce5c210cdcedea94a QC_Etablissements.csv \n285842 7d30c3454c0ec33298b2 QC_Etablissements.csv \n285944 357878bc979dcb1dfe91 QC_Etablissements.csv \n285961 076148e6294aefe02c0b QC_Etablissements.csv \n286084 daae9d89de86bc1e2208 QC_Etablissements.csv \n286558 e5652fe52933bbdbf680 QC_Etablissements.csv \n287191 3081f6ccdef05e0eb772 QC_Etablissements.csv \n290414 bee6ab7ec1a494149ac9 QC_Etablissements.csv \n292294 7e08a6fa9956d3238ea5 QC_Etablissements.csv \n298001 d548140cf18d81cd7ba0 QC_Etablissements.csv \n301122 cdce5d659eeaffa888bd QC_Etablissements.csv \n302866 465140fb12eb4b9b162f QC_Etablissements.csv \n303674 73b6bb406fd2ed3edb05 QC_Etablissements.csv \n303741 66dca5085aef7df6000e QC_Etablissements.csv \n306226 d22f10f268a59e28eddf QC_Etablissements.csv \n307927 58a3b82f5f579f83ecac QC_Etablissements.csv \n308259 dfa1567bc2b728ad6e58 QC_Etablissements.csv \n309766 497a9fe988ca5013fa90 QC_Etablissements.csv \n310816 e49f1183e75dcdd2fb87 QC_Etablissements.csv \n312291 bdc85bf25e6c43876bde QC_Etablissements.csv \n313893 a3f5e055f288f67737fd QC_Etablissements.csv \n313910 c78aa52ad180da56d98c QC_Etablissements.csv \n317585 eff0d8a1c4bc43b957de QC_Etablissements.csv \n319168 6f6f7a143c184535b7a1 QC_Etablissements.csv \n319952 9a366fe26f45f8764adb QC_Etablissements.csv \n325668 170c960fd28d450ee437 QC_Etablissements.csv \n325792 cf19d39f31560b0878b7 QC_Etablissements.csv \n327122 583fdedc1920af74f281 QC_Etablissements.csv \n327914 f8441eae3bf14f0c230f QC_Etablissements.csv \n327977 b18949f249e6bf0bf35e QC_Etablissements.csv \n327999 30b73779c3211a867103 QC_Etablissements.csv \n328226 e88faf32bb88c781acf8 QC_Etablissements.csv \n328410 6c0ff76fc493153b9db6 QC_Etablissements.csv \n330145 4cef9377474fba3b8808 QC_Etablissements.csv \n331661 cad2408c0e5485b47ca8 QC_Etablissements.csv \n332385 3d559275d8f6a93f4b6f QC_Etablissements.csv \n332806 18cf4844cf065c7a7991 QC_Etablissements.csv \n333892 14e0fd9d6bba70050087 QC_Etablissements.csv \n334253 b6176fcdd76028a00ff8 QC_Etablissements.csv \n335295 ca7ddd26b61764f74d53 QC_Etablissements.csv \n335687 6aa5059e1dfb4e18614a QC_Etablissements.csv \n335996 2be8c0dda26ed93d9e19 QC_Etablissements.csv \n336904 3c1ba4d049f2d2b0d589 QC_Etablissements.csv \n337020 612a25fbba15bbb3206e QC_Etablissements.csv \n337481 e0f4ed516b752957f9cb QC_Etablissements.csv \n337582 190a49f20bdd2ded8750 QC_Etablissements.csv \n339315 abfc30ed6b1c0aa9b15f QC_Etablissements.csv \n339366 8a810808d14448bdf2bd QC_Etablissements.csv \n339652 c89302272aa66f238ec6 QC_Etablissements.csv \n339769 6819ff7a6e151b55c40c QC_Etablissements.csv \n340107 2a60ee8ca53028a7d0be QC_Etablissements.csv \n340319 94bbf237c9ea582fe100 QC_Etablissements.csv \n340707 1137d4535f5a0d622ce7 QC_Etablissements.csv \n343280 7dacb95b366ddc50a793 QC_Etablissements.csv \n343525 e440b4993d7baf8fe29e QC_Etablissements.csv \n343850 5f706a3d347d708ef376 QC_Etablissements.csv \n344124 4b9b02f060b0a862f9a8 QC_Etablissements.csv \n344394 dbad2ece1a1c832985d9 QC_Etablissements.csv \n344465 a1242073196ee7899fd6 QC_Etablissements.csv \n344635 3138a005fe5d9abc9fb7 QC_Etablissements.csv \n344716 2ee00320f96a49361cc4 QC_Etablissements.csv \n345491 880e64dc026ca2deb149 QC_Etablissements.csv \n345576 584378b42344c83c00f6 QC_Etablissements.csv \n345911 7e9e42e3d3113a622f51 QC_Etablissements.csv \n345989 3110aa496d0b9006bbd1 QC_Etablissements.csv \n346440 a69da26cd6107a9ee449 QC_Etablissements.csv \n346913 aa87a3112bdc031c86eb QC_Etablissements.csv \n348359 a44719949b179f9f5359 QC_Etablissements.csv \n348615 603e2ead89dc15135561 QC_Etablissements.csv \n348675 8d518fe2e164ce771c2d QC_Etablissements.csv \n353563 02f543b200484034ef1b QC_Etablissements.csv \n354559 8379899ddf1d100acd1e QC_Etablissements.csv \n355455 ac22bcc0d602cd1ff3a6 QC_Etablissements.csv \n356010 b1484ff360c56cb9ebeb QC_Etablissements.csv \n356716 57d5cf62872b8ff08014 QC_Etablissements.csv \n357106 64ddfec11a2151764f89 QC_Etablissements.csv \n357120 a0e8c8880507bb5904fe QC_Etablissements.csv \n357325 ce2dbf9249a60e5d4a4a QC_Etablissements.csv \n357361 b2a3d860e2212d5c1cc4 QC_Etablissements.csv \n357438 4a5159feea6f849630a6 QC_Etablissements.csv \n357488 d1f1adab32880a8210f5 QC_Etablissements.csv \n359480 5261f774f0395436e511 QC_Etablissements.csv \n359558 e68ec1250c813654fb35 QC_Etablissements.csv \n359611 4e718b5287094fb6a5bd QC_Etablissements.csv \n359683 2cfc83fe2cb58b05012c QC_Etablissements.csv \n360914 a39e526349ad7e6e01b7 QC_Etablissements.csv \n360915 6516c22baed935e16a6d QC_Etablissements.csv \n360921 7b25b9b4d314dd38e691 QC_Etablissements.csv \n360922 561a4fb4d5918e719b03 QC_Etablissements.csv \n360924 3e0d10b4e429e39fe546 QC_Etablissements.csv \n360925 58dd6bac28df2452d900 QC_Etablissements.csv \n360926 4ac83758c6844fce7e32 QC_Etablissements.csv \n361176 67f85483a24b9cad8e8e QC_Etablissements.csv \n361293 15c83567d030730218d7 QC_Etablissements.csv \n361431 d93b6e88fc1be654ce57 QC_Etablissements.csv \n362109 88dd89414cdb4adaa3a4 QC_Etablissements.csv \n362213 35c90d4f808a9d8026f4 QC_Etablissements.csv \n362398 3658fcf27f6879f98fe0 QC_Etablissements.csv \n363134 8425a218c0155c813d30 QC_Etablissements.csv \n364403 a463974e6fa8a3be857e QC_Etablissements.csv \n364772 4249a879464006faf961 QC_Etablissements.csv \n365727 e53d3a38dc4b5381a9d1 QC_Etablissements.csv \n367267 45a9e95c102cad3e5db9 QC_Etablissements.csv \n367325 8f80225d6342601caa83 QC_Etablissements.csv \n367381 772d3dc3885f741a21dd QC_Etablissements.csv \n367680 7e6b3ca26b78bcd215d7 QC_Etablissements.csv \n368107 ac3bf716c68d9eba94d1 QC_Etablissements.csv \n368807 b10befb0244abc2c2a8c QC_Etablissements.csv \n368968 12074b21a97c990eb01c QC_Etablissements.csv \n369141 5609ef75374f9fc95c9e QC_Etablissements.csv \n370848 fb9105dcc041cfd3e16b QC_Etablissements.csv \n371481 8179ddcdbb7b13e54791 QC_Etablissements.csv \n371910 f011a82ba3d6abf3a824 QC_Etablissements.csv \n372030 a5e414d8b70a0d80edfd QC_Etablissements.csv \n372087 593ca78ed6569257b29c QC_Etablissements.csv \n372951 890e4abd435325003310 QC_Etablissements.csv \n373381 a4a46c9c7975d22f15f4 QC_Etablissements.csv \n374459 8da87d452f9ccd5d6545 QC_Etablissements.csv \n374676 177035089feadf6db9c4 QC_Etablissements.csv \n374973 5053d94174d7f2b4b4ba QC_Etablissements.csv \n375259 fdd92852c1e3ca9a971f QC_Etablissements.csv \n375466 20ffb322c2f24ae29b7c QC_Etablissements.csv \n376977 4a790c19b59f693d15e9 QC_Etablissements.csv \n377994 d0896e7b829aa5cdcd38 QC_Etablissements.csv \n379965 5c2a2a37ce603a4b62d0 QC_Etablissements.csv \n380781 b435916ab7a0ba44cb4c QC_Etablissements.csv \n384775 00402963c194b5079056 QC_Etablissements.csv \n384832 c49afc7f981d8f9f91f5 QC_Etablissements.csv \n385984 cc303b5b1382e8c81432 QC_Etablissements.csv \n385997 445cafe67023ef39bc34 QC_Etablissements.csv \n385999 b05f06214a2893effe8a QC_Etablissements.csv \n386049 22492ea45589e38e9c59 QC_Etablissements.csv \n386050 8bcf5a7b7ec91310f51b QC_Etablissements.csv \n388183 fdbbffa78139688f1dd9 QC_Etablissements.csv \n389035 5efe7cb40b05e6bff31b QC_Etablissements.csv \n400103 6ba6d4f882933532a7a6 QC_Etablissements.csv \n408893 06093219ba73ae9864ee QC_Etablissements.csv \n409484 cd647fd2f72072be5a58 QC_Etablissements.csv \n415072 a9d1f0cb35d28b7dfbb8 QC_Etablissements.csv \n415730 850dfa7196f2ba118e7e QC_Etablissements.csv \n419806 6902a33acfa33bf8b27d QC_Etablissements.csv \n424608 7c791688dbb50a4cb382 QC_Etablissements.csv \n434924 3d280cc07ebf908dc59c QC_Etablissements.csv \n440020 360b7ee14ad9578dd953 QC_Etablissements.csv \n440663 4cb979e0e2d460c93179 QC_Etablissements.csv \n441997 1d9e6a6c8870e1e4f00c QC_Etablissements.csv \n443465 07f8c376eb65ad679b4d QC_Etablissements.csv \n445048 7b7045f37039cf87c5a1 QC_Etablissements.csv \n445339 bd060d2e92869214f2bd QC_Etablissements.csv \n445855 3f7867061df0b5002292 QC_Etablissements.csv \n446304 3dd41c829a73ce24775c QC_Etablissements.csv \n446381 e704d14474d25ed0c095 QC_Etablissements.csv \n446903 f91172554175112fcef4 QC_Etablissements.csv \n448007 fb9fa9161008007283af QC_Etablissements.csv \n448901 577ddeedbd1d52428e5d QC_Etablissements.csv \n449503 77d91f095838c140378b QC_Etablissements.csv \n450051 e090b64635aa174b8c62 QC_Etablissements.csv \n450540 dcd895c29e56802e998f QC_Etablissements.csv \n450884 aecd6922e9e194c8b982 QC_Etablissements.csv \n453264 544ec05ed23932002ac2 QC_Etablissements.csv \n453546 9cbe66b9a097d08223c4 QC_Etablissements.csv \n455293 5a8293e53b1aec51aabd QC_Etablissements.csv \n457011 90d49387929a22606cd6 QC_Etablissements.csv \n458216 4efe70bf4937933c84c9 QC_Etablissements.csv \n458370 4a07872ce03c2f306eb1 QC_Etablissements.csv \n464745 06f14f29c3733b82bfa7 QC_Etablissements.csv \n466375 35f09bb7e88965e92d48 QC_Etablissements.csv \n469348 a0b1c3092eeb256f89a7 QC_Etablissements.csv \n472786 fb90f3455a528cafabe7 QC_Etablissements.csv \n473226 5cf51debfb4feb5698a4 QC_Etablissements.csv \n474079 85b604d5c336a774e4e9 QC_Etablissements.csv \n481144 eed543a8e5e2f46ee59f QC_Etablissements.csv \n481252 b3c030d22183affbb84e QC_Etablissements.csv \n481692 75523155ac3757ccd85c QC_Etablissements.csv \n481876 c57cc04195591a81712b QC_Etablissements.csv \n484116 b7bdc5d7c3fff17cbf89 QC_Etablissements.csv \n485147 79ff4e844641ad1bd8ac QC_Etablissements.csv \n485177 88a34fdee09a056116ba QC_Etablissements.csv \n486671 b5ac59ff53552de3eeb0 QC_Etablissements.csv \n486792 7f215c592b0ccba1dd29 QC_Etablissements.csv \n486793 9d6117ca09404a211313 QC_Etablissements.csv \n486794 0f7dc5946ca4bdd75ea6 QC_Etablissements.csv \n487028 c7b6c147e788f759368e QC_Etablissements.csv \n491858 e8a43c4c35ec3031d652 QC_Etablissements.csv \n492111 8d38863e9cadf00179c7 QC_Etablissements.csv \n498975 14ddc42ab7745c011a08 ON_Toronto_Business_Licences.csv \n512638 c223662af8bd86429b29 ON_Toronto_Business_Licences.csv \n518844 94688ebbc933c2444697 ON_Toronto_Business_Licences.csv \n520248 75e041034c50f8bff384 ON_Toronto_Business_Licences.csv \n520980 6af1aac415c94d591bfd ON_Toronto_Business_Licences.csv \n527705 a325b83cae61ddf3582e ON_Toronto_Business_Licences.csv \n543237 aefe1a197f93839f6aee ON_Toronto_Business_Licences.csv \n572395 afcc8281423927eb1c16 ON_Toronto_Business_Licences.csv \n573386 47793f681cce51eb6810 ON_Toronto_Business_Licences.csv \n575854 872f773ff13571cf4e96 ON_Toronto_Business_Licences.csv \n577801 e0697e9e02b0d5973985 ON_Toronto_Business_Licences.csv \n584756 96d1af2e4374f9c385db ON_Toronto_Business_Licences.csv \n589546 3cc97a867e0fd2477d3d ON_Toronto_Business_Licences.csv \n592915 496822dcb8b71ef460be ON_Toronto_Business_Licences.csv \n595950 16761be1ad528f0d5495 ON_Toronto_Business_Licences.csv \n596563 816586df70741d20d4b5 ON_Toronto_Business_Licences.csv \n795724 b8aabcd6434adc0b09da Indigenous_Business_Directory.csv \n\n business_name \\\n608 VICTORIA ADVANCED TECHNOLOGY COUNCIL (VIATEC) \n1054 GROUND CONTROL CAFE \n1239 RUMBLE NUTRITION LTD \n1340 BLENZ COFFEE \n1582 VICTORIA PIE COMPANY \n1584 CTC TRAINCANADA \n2474 LA FIESTA CAFE \n2770 ALTA BERING \n2793 HANK'S \n2798 NOWHERE A RESTAURANT \n3395 AVIS CANADA \n3579 DOWNTOWN VICTORIA OPTOMETRY \n3705 MARLIN TRAVEL \n4658 EDWARD JONES \n5279 CRESCENDO FOR HAIR \n6010 ROAST \n6165 RFDM SOLUTIONS INC \n6616 TESSERACT 2.0 COMPUTING \n6751 WAFFLEBEAST \n6782 GLOBAL KNOWLEDGE NETWORK (CANADA) \n30572 Tomahawk Industrial Services \n240496 COOKIES GRILL \n245607 SIDHU AUTO AND TRUCK REPAIR SERVICES \n245626 COPPER RIDGE PHARMACY \n246571 DAVROC AND ASSOCIATES LTD. \n246989 BRAMPTON COSMETIC \n247248 ST. GEORGE MEDICAL CENTRE \n248440 INDIA RAINBOW COMMUNITY SERVICES OF PEEL \n248835 DYNACARE \n248852 MAXPOWER FRICTION INC. \n248963 KUMON MATH AND READING CENTRE \n249117 JCR WOODWORKING \n249386 CANTRINA FREEZER \n249461 DOLLAR POWER \n249663 FOODASIA \n250547 ALTUM HEALTH CLINIC \n250840 MCLEANS LEARNING ACADEMY \n250848 DHABA EXPRESS \n250960 DENTISTRY DR. ANDHAWA \n250961 JOHAL SWEETS AND RESTAURANT \n250970 A2Z KITCHEN CABINETS \n251215 MENASHA PACKAGING \n251597 CLAREVILLE DISTINCTIVE KITCHENS AND BATHS \n251929 MODHANI INC. \n252331 PVC ENTERPRISES LTD. \n252417 KLOMAN STUDIO \n252451 GLOBAL STAFFING AND DRIVERS SERVICES LTD \n252566 DESIGNER JEWELLERY BY TINA \n252648 HOPE CANDLE COMPANY LTD. \n253338 MAHEU & MAHEU INC. \n253992 TECNIC MOTO GATINEAU (AYLMER) \n254295 SYNDICAT DE LA COPROPRIÉTÉ LE MONT ST- GRÉGOIR... \n254306 LE GROUPE AMYOT, GÉLINAS INC. \n254389 CLUB C \n255528 ÉGLISE ÉVANGÉLIQUE DE LA NOUVELLE ALLIANCE \n256392 CENTRE D'ASSISTANCE ET D'ACCOMPAGNEMENT AUX PL... \n259332 CENTRE DESRANLEAU \n259747 MUSÉE DES ONDES ÉMILE BERLINER \n260734 SOLLIO GROUPE COOPÉRATIF \n262508 Édifice CSQ Québec \n263749 AUTOMOBILE RIMEK INC. \n264095 ECOLE DE CONDUITE LAUZON ST-JOSEPH ENR \n264277 G., J., M. NAUD LTEE \n264337 DARMIEUX INC \n264338 DARMIEUX INC \n264341 DARMIEUX INC \n264880 COOPÉRATIVE D'HABITATION CONCERTO DE MONTRÉAL \n264889 COOPÉRATIVE D'HABITATION CONCERTO DE MONTRÉAL \n265981 INDUSTRIELLE ALLIANCE, ASSURANCE AUTO ET HABIT... \n270029 LNLC INC. \n270915 LES SERVICES PARAJUDICIAIRES AUTOCHTONES DU QU... \n272656 L'ASSOCIATION GENERALE DES ETUDIANTS DU C.E.G.... \n273236 LE GRENIER \n273241 LE GRENIER \n273366 LES ÉDITIONS MANUKA \n273597 MARIE CLAIRE \n273642 TERRA NOSTRA (TMA) \n273710 129270 CANADA LTÉE \n273827 Signaleurs de la Capitale \n274251 COOPÉRATIVE D'HABITATION LABADIE (MONTRÉAL) \n275219 COOP LOGEMENT BARQUE \n276047 COOP À L'ÉTAGE \n276416 CO-OP D'HABITATION MASKOU DE ST-HYACINTHE \n278957 SYNDICAT DE LA COPROPRIÉTÉ LE MONT ST-GRÉGOIRE... \n279103 PLACE DES COMPAGNONS \n279577 LES AGENCES PRODEX \n280582 CENTRE D'ASSISTANCE ET D'ACCOMPAGNEMENT AUX PL... \n280584 CENTRE D'ASSISTANCE ET D'ACCOMPAGNEMENT AUX PL... \n281406 COOPÉRATIVE D'HABITATION \"CHEZ NOUS\" DE QUÉBEC \n282234 REGULVAR INC. \n282958 A.G.É.CO.V. ASSOCIATION GÉNÉRALE DES ÉTUDIANTS... \n282982 SYNDICAT DE LA COPROPRIÉTÉ LE ALEXIS-LEBERT 111 \n283143 ESPACE BLEU \n284026 HIMALAYA SÉNIORS DU QUÉBEC \n284082 CAFÉ DE LA MONTÉRÉGIE INC. \n284593 GESTION VAN GEENHOVEN LTÉE \n285206 HÉMA-QUÉBEC \n285840 BAR LE BAROMÈTRE \n285841 CAFÉ L'AURICULAIRE \n285842 ASSOCIATION GÉNÉRALE ÉTUDIANTE DU CAMPUS DE RI... \n285944 A. BÉDARD & ASSOCIÉS INC. \n285961 IVANHOÉ CAMBRIDGE INC. \n286084 SYNDICAT DE LA COPROPRIÉTÉ CARRÉ ST-JACQUES 3C \n286558 CENTRE MÉDICAL WESTMOUNT SQUARE \n287191 COOPÉRATIVE D'HABITATION L'AFFICHE ROUGE (MTL) \n290414 SEEA CHAPITRE DE MONTRÉAL \n292294 SYNDICAT DE COPROPRIÉTÉ DE L'IMMEUBLE 7013 \n298001 THAI EXPRESS \n301122 SYNDICAT DE LA COPROPRIÉTÉ FAUBOURG SAINT-BASI... \n302866 Physio Atlas Complexe de la Santé \n303674 Institut PH \n303741 OCCASION VR \n306226 RÉÉÉMI \n307927 SYNDICAT DE LA COPROPRIÉTÉ ROBERVAL 2680 \n308259 SYNDICAT DE LA COPROPRIÉTÉ ROBERVAL 2677 \n309766 SYNDICAT DE LA COPROPRIÉTÉ ROBERVAL 2676 \n310816 9182-9481 QUÉBEC INC. \n312291 IMMEUBLES DESJARDINS GAUTHIER INC. \n313893 SYNDICAT DE COPROPRIÉTÉ 135-137-139 KING-GEORGE \n313910 BAMBOO GROUPE FINANCIER \n317585 ASSURANCES KARINE LEGAULT INC. \n319168 Grand Cru V \n319952 PHOENIXX STRATÉGIES ET SOLUTIONS D'AFFAIRES \n325668 BOUTIQUE PRFKT PAR EUROPA \n325792 NSE AUTOMATECH INC. \n327122 Farhat Drummondville \n327914 Centre Innova Soins \n327977 PROJET OUVERTURE INC. \n327999 NOHA BESTAWROS ET CHRISTIAN SHEFTESHY PHARMACI... \n328226 Clinique de kinésiologie Vsquare \n328410 PRESSE CAFE \n330145 KIN SANG AGENCE DE VOYAGES INC. \n331661 TRATTORIA TEVERE À PLACE VICTORIA \n332385 Fabienne Parente M.D. inc. \n332806 SYSTÈMES NUMÉRIQUES CHRISTIE CANADA \n333892 Lib. aménagement de bureau inc. \n334253 École de Conduite DeLuxe \n335295 La Confiserie Sweet Factory \n335687 Industrielle Alliance, Assurance et services f... \n335996 9266-6726 Québec inc. \n336904 Thaï Express (MC) \n337020 LES INVESTISSEMENTS VINSTEVE INC. \n337481 Amyot Gélinas Conseils Inc. \n337582 accessoires mode Cléopâtre \n339315 Tabagie Lulu \n339366 SANCTUAIRE DE L'ABONDANCE \n339652 SYSTÈMES STUDIOTEC INC. \n339769 RESTAURANT SUBWAY SHERBROOKE OUEST \n340107 Coopérative de l'Université de Sherbrooke - Su... \n340319 AMARIS CONSEIL INC. \n340707 Au Vieux Duluth Beauport \n343280 KASA LIVING ® \n343525 Immigration Keleny Inc. \n343850 Clinique de Chirurgie de Chicoutimi \n344124 INDUSTRIA BRASSERIE ITALIENNE \n344394 Dre Marie-Natacha Pilotte Inc. \n344465 Salon G \n344635 Fromagerie-Charcuterie Juliette \n344716 CARAVELLE II \n345491 RESTAURANT BAGUETTES DE SZECHUAN \n345576 DROITS ET RECOURS EN SANTÉ MENTALE DE LA CÔTE-... \n345911 Gestion C.R.D. et associés Inc. \n345989 SANTÉ CANNABIS \n346440 DigiCommerce Inc. \n346913 RESTAURANT MITSUKI SUSHI BAR \n348359 IMMEUBLES GASTON GINGRAS INC. \n348615 UNI Vieux Montréal \n348675 SERVICES DE CONSULTATION ALCANCE \n353563 9335-2391 Québec inc. \n354559 Café plein cup inc. \n355455 Pizzéria No900 SH King Ouest \n356010 9343-3779 Québec inc. \n356716 LE GROUPE VÊTEMENTS PISTACHE \n357106 SOLIDARITÉ HUMAINE CANADA \n357120 9347-4658 Québec inc. \n357325 Éditions de L'Estuaire \n357361 DISTRIBUTIONS BUBBLEMANIAC INC. \n357438 Saccade Analytiques Inc. \n357488 LA CABINE T \n359480 Téléphonie Mobile Siyata \n359558 A L'ETAT PUR \n359611 L'entreprise Technologique du Groupe DigiCommerce \n359683 Syndicat de la copropriété 125 A-E Lapointe \n360914 FIQ-Syndicat des professionnelles en soins des... \n360915 FIQ-Syndicat des professionnelles en soins des... \n360921 FIQ-Syndicat des professionnelles en soins des... \n360922 FIQ-Syndicat des professionnelles en soins des... \n360924 FIQ-Syndicat des professionnelles en soins des... \n360925 FIQ-Syndicat des professionnelles en soins des... \n360926 FIQ-Syndicat des professionnelles en soins des... \n361176 Syndicat des professionnelles en soins de la C... \n361293 Société de philosophie des régions au coeur du... \n361431 Association des gens d’affaires du Vieux-Port ... \n362109 Westley - Artisans restaurateurs inc. \n362213 OverHop Bières Artisanales \n362398 SYNDICAT CANADIEN DE LA FONCTION PUBLIQUE, SEC... \n363134 2867-8118 QUÉBEC INC. \n364403 SUBWAY # 26176 \n364772 L'Abeille impériale inc. \n365727 Fenghua Média Groupe du Canada \n367267 AIESEC de l'École des sciences de la gestion d... \n367325 FRANÇOIS GOUGEON INC. \n367381 JITNEY EN LIGNE \n367680 Sushi Haru Haru \n368107 Comptabilité Incloud \n368807 Puzzle Dispositifs Médicaux \n368968 Les Productions NewA inc. \n369141 GESTION IMMOBILIÈRE SBL INC. \n370848 Les Ingrédients Potentia \n371481 LES SYSTÈMES BLUBRIM INC. \n371910 Pizzeria Heirloom Le Central \n372030 ORGANISATION CANADIENNE POUR LE DEVELOPPEMENT ... \n372087 Axya Inc. \n372951 Dépanneur LaRose \n373381 Clinique Multidisciplinaire d'Aylmer inc. \n374459 Institut d'éthique en IA de Montréal \n374676 Les cuisiniers différents \n374973 9404-4567 Québec inc. \n375259 2760061 Canada Inc. \n375466 Groupe DJ Santé Inc. \n376977 La Canting \n377994 Zéro émission \n379965 COOPSCO CÉGEP DE GRANBY \n380781 TECHNOLOGIE PATRON LTÉE \n384775 iA Gestion privée de patrimoine inc. \n384832 iA Gestion privée de patrimoine inc. \n385984 LUNETTERIE NEW LOOK \n385997 Greiche & Scaff \n385999 Greiche & Scaff \n386049 Greiche & Scaff \n386050 Greiche & Scaff \n388183 BENNY & CO. (MC) - ESPACE MONTMORENCY \n389035 La Clef de la Réussite Inc. \n400103 ELMALEH, DAVID \n408893 CLINIQUE CHIROPRATIQUE ST-CHARLES \n409484 veillette, serge \n415072 Nico Suave \n415730 SIGNATURE INVITATIONS \n419806 LA COUTELLERIE \n424608 Spa Dépot \n434924 RAPHAEL BARAZIN, CPA \n440020 MARIO LAMPRON INFIRMIER EN SOINS PODOLOGIQUES \n440663 Restaurant Japote \n441997 V.R.B Studio \n443465 KRACAUER, JOSEPH \n445048 Studio Kidz \n445339 CABINET D'IMMIGRATION RESIDER O CANADA \n445855 Cabinet d'orthophonie - Jessica Bélisle Macquart \n446304 Artiste Genest de Brière \n446381 Chenil Doggy Doc \n446903 Clinique d'Ostéopathie et Thérapie de Sport Le... \n448007 Serrano, Diana \n448901 Petit, Myriam \n449503 Sam le rembourreur \n450051 Extermination Wildlife Outaouais \n450540 Espace Mêve \n450884 Clinique de Masso Kinésithérapie Lebourgneuf \n453264 Centre Des Ongles \n453546 FERME ADJULO \n455293 Atelier Express \n457011 Tanguay , Eric \n458216 Atelier DNHN \n458370 Platinum Spa & Beauté \n464745 VINTAGE MUSTS \n466375 LUXENCHANTE \n469348 Young, Christopher \n472786 AMYOT GÉLINAS, s.e.n.c.r.l. \n473226 IMMEUBLES MAXIBEL ENR. \n474079 LES PLACEMENTS LOPRÉ S.E.C. \n481144 Fiducie Gestion Immodo \n481252 ATIS PORTES ET FENÊTRES \n481692 Jeux de la Communication - UQÀM \n481876 Le Borgne Rizk Architecture \n484116 Syndicat des chargés et chargées de cours de l... \n485147 Institut québécois d'ébénisterie \n485177 Le Département bar et bouffe \n486671 OFFICE DES PERSONNES HANDICAPEES DU QUEBEC \n486792 Ministère de l’Énergie et des Ressources natur... \n486793 Ministère de l’Énergie et des Ressources natur... \n486794 Ministère de l’Énergie et des Ressources natur... \n487028 DI Bas-Saint-Laurent et Gaspésie-îles-de-la-Ma... \n491858 Centre externe de néphrologie Saint-Lambert \n492111 GMF-R Collectif Médica \n498975 O B N SECURITY MANAGEMENT SERVICES \n512638 PERIYA KADAI \n518844 WEST INDIAN FINE FOODS \n520248 WEST INDIAN FINE FOODS \n520980 SUNRISE CARIBBEAN RESTAURANT \n527705 SUNRISE CARIBBEAN RESTAURANT \n543237 FREDDY'S CAR SALES \n572395 EL SIPOTE \n573386 SUGAR LOUNGE \n575854 DADDY'S LOUNGE \n577801 FALAFEL EXPRESS \n584756 REMELY'S RESTAURANT \n589546 CENTRAL BAR & GRILL \n592915 REMELY'S RESTAURANT \n595950 R T FINE JEWELLERS INC \n596563 R T FINE JEWELLERS \n795724 DELORME ENTERPRISES LTD \n\n full_address LP2_unit LP2_street_no \\\n608 4-FLR-777 FORT ST VICTORIA BC V8W 1G9 4 flr \n1054 G-FLR-777 FORT ST VICTORIA BC V8W 1G9 g flr \n1239 3-FLR-777 FORT ST VICTORIA BC V8W 1G9 3 flr \n1340 G-1-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 1 \n1582 6-S10-1701 DOUGLAS ST VICTORIA BC V8W 0C1 6 s10 \n1584 2-FLR-777 FORT ST VICTORIA BC V8W 1G9 2 flr \n2474 G-12-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 12 \n2770 3-FLR-777 FORT ST VICTORIA BC V8W 1G9 3 flr \n2793 G-2-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 2 \n2798 G-4-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 4 \n3395 G-2-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 2 \n3579 G-9-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 9 \n3705 G-3-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 3 \n4658 G-10-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 10 \n5279 G-5-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 5 \n6010 6-S5-1701 DOUGLAS ST VICTORIA BC V8W 0C1 6 s5 \n6165 3-FLR-777 FORT ST VICTORIA BC V8W 1G9 3 flr \n6616 G-11-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g 11 \n6751 6-S8-1701 DOUGLAS ST VICTORIA BC V8W 0C1 6 s8 \n6782 2-FLR-777 FORT ST VICTORIA BC V8W 1G9 2 flr \n30572 RR-2 S-60 C-58 rr 2 s \n240496 A-3-44335 YALE RD, CHILLIWACK BC V2R 4H2 a 3 \n245607 13-14-28 MELANIE DR 13 14 \n245626 B-2-8015 FINANCIAL DR b 2 \n246571 19-21-2051 WILLIAMS PKY 19 21 \n246989 2-4-111 QUEEN ST E 2 4 \n247248 8-9-50 SKY HARBOUR DR 8 9 \n248440 3000-B1-180 SANDALWOOD PKY E 3000 b1 \n248835 8-9-9525 MISSISSAUGA RD 8 9 \n248852 46-47-2500 WILLIAMS PKY 46 47 \n248963 E-102-65 MONTPELIER ST e 102 \n249117 44-45-2500 WILLIAMS PKY 44 45 \n249386 1-3-4 WILKINSON RD 1 3 \n249461 20-21-380 BOVAIRD DR E 20 21 \n249663 12-14-791 BOVAIRD DR W 12 14 \n250547 1-4-10545 BRAMALEA RD 1 4 \n250840 1-4-15 ASHBY FIELD RD 1 4 \n250848 7-8-380 BOVAIRD DR E 7 8 \n250960 5-6-10 SQUIRE ELLIS DR 5 6 \n250961 12-14-10 SQUIRE ELLIS DR 12 14 \n250970 17-18-227 ADVANCE BLVD 17 18 \n251215 C-D-9150 AIRPORT RD c d \n251597 9-11-253 SUMMERLEA RD 9 11 \n251929 F-G-21 REGAN RD f g \n252331 10-12-2084 STEELES AVE E 10 12 \n252417 26-B-2074 STEELES AVE E 26 b \n252451 2-F-90 KENNEDY RD S 2 f \n252566 44-45-53 PARKHURST SQ 44 45 \n252648 15-16-28 MELANIE DR 15 16 \n253338 F-G-1390 RUE Newton f g \n253992 C-6-B-181 RUE Principale c 6 \n254295 487-489-491, RUE ST-JOSEPH 487 489 \n254306 3-4-55 RUE De Martigny 3 4 \n254389 H-022-3333 RUE du Carrefour h 022 \n255528 3455-3457-3459, RUE BÉLAIR 3455 3457 \n256392 E-010-94 RUE Monseigneur-Blanche e 010 \n259332 324-C-71 RUE de Ramezay 324 c \n259747 E-206-1001 RUE Lenoir e 206 \n260734 RUE BÉCANCOUR PARTIE 15-F-1 RANG 5 15 f \n262508 RC-105-320 RUE Saint-Joseph E rc 105 \n263749 2-4-6-222 RUE Poirier 2 4 \n264095 C-6B-181 RUE Principale c 6b \n264277 197-199-201, RUE ST-DOMINIQUE 197 199 \n264337 2929-2939-2949, RUE PICARD 2929 2939 \n264338 781-785-789-791, RUE HÉLÈNE BOULLÉ 781 785 \n264341 595-625-655, BOUL. CASAVANT EST 595 625 \n264880 3548A-B-C, RUE STE-FAMILLE 3548a b \n264889 3540-42-44A-B-C, RUE STE-FAMILLE 3540 42 \n265981 A-200-3200 RUE King O a 200 \n270029 18-19-1111 BOUL. Jutras E 18 19 \n270915 RC24-2-700 RUE 7e Rue rc24 2 \n272656 C-126G-455 RUE Fournier c 126g \n273236 7373 boul. Langelier, Local F03-04-05 local f03 04 \n273241 B5-B6-181 rue Principale b5 b6 \n273366 38-2-222 BOUL. Henri-Bourassa E 38 2 \n273597 M-2/6-1100 BOUL. Maloney O m 2/6 \n273642 1100 Boul. Maloney Z9-10-11-12 O z9 10 \n273710 1015-1017-1019, RUE ATWATER 1015 1017 \n273827 SS-09-650 RUE Graham-Bell ss 09 \n274251 367-369-371-373, RUE LABADIE 367 369 \n275219 840-850-860, DESPRÉS 840 850 \n276047 134-136-138, 10E RUE 134 136 \n276416 730-740-750, CHOQUETTE 730 740 \n278957 517-519-521, ST-JOSEPH 517 519 \n279103 838-844-850, RUE GRAND-JEAN 838 844 \n279577 600-F-18005 RUE Lapointe 600 f \n280582 L-1-447 RUE des Bouvreuils l 1 \n280584 L-22-37 RUE Chrétien l 22 \n281406 754-758-762, RAOUL JOBIN 754 758 \n282234 F-1-60 RUE ÉVÊCHÉ O f 1 \n282958 C-120-169 RUE Champlain SO c 120 \n282982 1252-1254-1256, RUE ALEXIS-LEBERT 1252 1254 \n283143 268-270-272, DES PINS EST 268 270 \n284026 SS-14-419 RUE Saint Roch ss 14 \n284082 A-1-3125 RUE Bernard Pilon a 1 \n284593 2506-2508-2510 RUE BEAUBIEN 2506 2508 \n285206 A-170-3200 RUE King O a 170 \n285840 E-220-300 Allée des Ursulines e 220 \n285841 E-220-300 Allée des Ursulines e 220 \n285842 E-220-300 Allée des Ursulines e 220 \n285944 S.-SOL-178 RUE HOULE s. sol \n285961 C-500-1001 RUE Square Victoria c 500 \n286084 9990-9992-9994, CROISSANT ROCHELLE 9990 9992 \n286558 550-2-1 Carré Westmount 550 2 \n287191 4431-4451-4461, 18E AVENUE 4431 4451 \n290414 A-6055-1255 RUE St-Denis a 6055 \n292294 3902-04-06, RUE NOTRE-DAME OUEST 3902 04 \n298001 C-28-1001 RUE UNIVERSITY c 28 \n301122 32-14-34 RUE SAVARIA 32 14 \n302866 A-210-15 RUE J-A Bombardier a 210 \n303674 7-313-695 CH. Avila 7 313 \n303741 C-D-170 RUE des Entreprises c d \n306226 A-1303-101 RUE ST-Jean Bosco a 1303 \n307927 1650-1652-1654 BOULEVARD ROBERVAL EST 1650 1652 \n308259 1622-1620-1622-1624, BOUL. ROBERVAL E. 1622 1620 \n309766 1610-1612-1614, BOUL. ROBERVAL EST 1610 1612 \n310816 SS-08-650 RUE Graham-Bell ss 08 \n312291 600-F-18005 RUE LAPOINTE 600 f \n313893 135-137-139, KING GEORGE 135 137 \n313910 G-102-360 RUE St-Jacques O g 102 \n317585 4-B-118B RUE Principale E 4 b \n319168 50-b-15 RUE Merry Sud 50 b \n319952 310-3-725 BOUL. Lebourgneuf 310 3 \n325668 W-103-380 RUE Saint-Antoine w 103 \n325792 #31-32-260 RUE ST-Urbain #31 32 \n327122 B-6-520 BOUL. St-Joseph b 6 \n327914 A-288-3333 RUE du Carrefour a 288 \n327977 B-111-900 RUE Lacasse b 111 \n327999 RC-02-9080 RUE Hochelaga rc 02 \n328226 S-170-360 RUE St-Jacques s 170 \n328410 NR-01-1717 RUE BERRI nr 01 \n330145 2-12-998 BOUL. St-Laurent 2 12 \n331661 C-12A-800 RUE SQUARE VICTORIA c 12a \n332385 C-447-2300 RUE Tupper c 447 \n332806 B-528-1001 RUE Lenoir b 528 \n333892 A-410b-1001 RUE Lenoir a 410b \n334253 200-2-298 RUE Labelle 200 2 \n335295 B-01-401 BOUL. Labelle b 01 \n335687 A-200-3200-A RUE King O a 200 \n335996 F-1-75 CH. de la Gare f 1 \n336904 #FC-06-401 BOUL. Labelle #fc 06 \n337020 900-28-1980 Sherbrooke Street W. 900 28 \n337481 3-4-255 RUE De Martigny O 3 4 \n337582 M-32-555 RUE Chabanel O m 32 \n339315 G-03-276 RUE St-Jacques g 03 \n339366 308-7-695 CH. AVILA 308 7 \n339652 C-305-1 Carré Westmount c 305 \n339769 F-15-1000 RUE SHERBROOKE O f 15 \n340107 C-140-195 RUE Marquette c 140 \n340319 M-201-360 rue Saint Jacques O m 201 \n340707 A-55-3333 RUE du Carrefour a 55 \n343280 1-08-401 BOUL. Labelle 1 08 \n343525 900-21-1980 RUE Sherbrooke O 900 21 \n343850 C-700-930 RUE Jacques-Cartier c 700 \n344124 C-112-100 RUE Peel c 112 \n344394 C-700-930 RUE Jacques Cartier c 700 \n344465 J-M870-315 RUE Sainte-Catherine E j m870 \n344635 15-16-1200 CH. Saint-Jean 15 16 \n344716 C-136-747 , rue du Square-Victoria c 136 \n345491 G-H-I-1950 CH. du Fer-à-Cheval g h \n345576 E-010-94 RUE Monseigneur-Blanche e 010 \n345911 2-197-2 RUE Paré 2 197 \n345989 A-260-15 RUE J.A. Bombardier a 260 \n346440 C-215-1001 RUE Lenoir c 215 \n346913 30-8840 Local F15C-F15B Boul. Leduc 30 8840 local f15c \n348359 132-134 -136-138 rue Principale N 132 134 \n348615 SS-100-507 RUE Place D'Armes ss 100 \n348675 204-1-765 RUE JARRY O 204 1 \n353563 C-314-1747 RUE CUNARD c 314 \n354559 E-1-181 RUE Principale e 1 \n355455 A-130-3200 RUE King Ouest a 130 \n356010 45-d-190-B RUE Dorchester 45 d \n356716 M-07-555 RUE Chabanel O m 07 \n357106 218-B-6615 CH. COTE-DES-NEIGES 218 b \n357120 Ah-So-200 RUE promenade du Portage ah so \n357325 B-301-300 allée des Ursulines b 301 \n357361 1-2-155 BOUL. Labbé N 1 2 \n357438 C-0220-400 RUE Montfort c 0220 \n357488 2-115A-705 RUE Sainte-Catherine O 2 115a \n359480 A-414-1001 RUE Lenoir a 414 \n359558 NR-01-1717 RUE BERRI nr 01 \n359611 C-215-1001 RUE Lenoir c 215 \n359683 A-E-125 RUE Lapointe a e \n360914 S-309-100 rue du Chanoine-Lionel-Groulx s 309 \n360915 GS-18-185 rue Durand gs 18 \n360921 A-0102-2561 ch. de la Lièvre S a 0102 \n360922 N-761-1525 rue L'Annonciation N n 761 \n360924 RC-139-29 Vieux chemin d'Oka rc 139 \n360925 ES-195-55 rue Chénier es 195 \n360926 3-130-9100 rue Dumouchel 3 130 \n361176 F-0878-2601 CH. de la Canardière f 0878 \n361293 R-4052-3351 RUE des Forges r 4052 \n361431 SS-3-109 rue Dalhousie ss 3 \n362109 A-140-3200 RUE King Ouest a 140 \n362213 5-6-650 RUE Gaudette 5 6 \n362398 111-A-107E RUE Rue 111 a \n363134 CM-08-5440 RUE Sherbrooke E cm 08 \n364403 100-5-900 BOUL. Grignon 100 5 \n364772 A-291-3333 RUE du Carrefour a 291 \n365727 #00-04-200 BOUL. René-Lévesque O #00 04 \n367267 R-M213-315 RUE Sainte-Catherine E r m213 \n367325 7e-F-1051 RUE Sanguinet 7e f \n367381 g-102-360 RUE Saint-Jacques O g 102 \n367680 E-7-181 RUE Principale e 7 \n368107 100-06-7140 RUE Albert-Einstein 100 06 \n368807 A-419-1001 RUE Lenoir a 419 \n368968 A-13-39 RUE Kenosi a 13 \n369141 210-6-44 RTE du Président-Kennedy 210 6 \n370848 353-101-15 BLVD Don Quichotte 353 101 \n371481 J-1120-400 RUE Montfort j 1120 \n371910 K-10-30 rue Sainte-Catherine O k 10 \n372030 360-07-55 RUE LOUVAIN O 360 07 \n372087 J-2140-400 RUE Montfort j 2140 \n372951 A1-225-10 RUE DE L'ESPINAY a1 225 \n373381 B-102-745 CH. Aylmer b 102 \n374459 B-111-1001 RUE Lenoir b 111 \n374676 P-11-4200 CH. De la savanne p 11 \n374973 241-7-695 CH. Avila 241 7 \n375259 B-123-215 RUE Peel b 123 \n375466 200-A-1388 RUE Fleury E 200 a \n376977 R-7-1751 RUE Richardson r 7 \n377994 A-8440-3101 CH. DE LA TOUR a 8440 \n379965 C-104-235 RUE Saint-Jacques c 104 \n380781 B-252-1001 rue Lenoir b 252 \n384775 R-10-200 RUE Montcalm r 10 \n384832 A-200-3200-A RUE King O a 200 \n385984 B-30-A-95 RUE Sainte-Catherine O b 30 \n385997 18-19-1111 BOUL. Jutras E 18 19 \n385999 3-110-705 RUE Sainte-Catherine O 3 110 \n386049 4-5-300 RUE Barkoff 4 5 \n386050 S10-12-6000 RUE Henri-Bourassa E s10 12 \n388183 2-0107-1900 RUE Jacques-Tétreault 2 0107 \n389035 203-28-460 RUE Du Parc 203 28 \n400103 C-114-1001 RUE LENOIR c 114 \n408893 B-8-101 RUE Amherst b 8 \n409484 401 1er-et-10e Rang O 401 1er et \n415072 #R-5-174 BOUL. Greber #r 5 \n415730 1123-B-433 RUE Chabanel O 1123 b \n419806 7-33-455 AV. MATHERS 7 33 \n424608 12-13-55 RUE claude audy O 12 13 \n434924 Bur.10-360-55 RUE Louvain O bur.10 360 \n440020 212-A-1245 CH. SAINTE-FOY 212 a \n440663 F-1-1000 RUE Sherbrooke O f 1 \n441997 E-200-160 RUE St-Viateur E e 200 \n443465 PH-2-1130 RUE Sherbrooke O ph 2 \n445048 6-2-15 rue de Rotterdam 6 2 \n445339 203-4-68 BOUL. Cartier O 203 4 \n445855 B-102-745 CH. d'Aylmer b 102 \n446304 100-03-17 rue de la Barricade 100 03 \n446381 642 10e-et-1er Rang E 642 10e et \n446903 B-374-1001 RUE Lenoir b 374 \n448007 200-E-160 RUE Saint Viateur E 200 e \n448901 726 10e-et-1er Rang E 726 10e et \n449503 001-B-2025-A RUE Masson 001 b \n450051 6-7-225 RUE Principale 6 7 \n450540 7-8-51 BOUL. BOULEVARD 7 8 \n450884 310-19-725 BOUL. Lebourgneuf 310 19 \n453264 B-01-1401 CH. Chambly b 01 \n453546 726 10e-et-1er Rang E 726 10e et \n455293 A-29-11000A RUE Shebrooke E a 29 \n457011 395 10e-et-1er Rang O 395 10e et \n458216 282-A-2065 RUE Parthenais 282 a \n458370 68-2-7500 BOUL. DES GALERIES D'ANJOU 68 2 \n464745 CK-05-1 CARRÉ WESTMOUNT ck 05 \n466375 236-54-102 BOUL. CITES DES JEUNES 236 54 \n469348 B-360-1001 RUE Lenoir b 360 \n472786 3-4-255 RUE De Martigny 3 4 \n473226 1313-1315-1317, RUE MAGUIRE 1313 1315 \n474079 902-906-908, MGR GRANDIN 902 906 \n481144 340 -342-344 Rue Ernest-Bourque 340 342 \n481252 1015 -1025-1035 Chemin du Coteau 1015 1025 \n481692 J-1185-1564 RUE Saint-Denis j 1185 \n481876 A-417-1001 RUE Lenoir a 417 \n484116 E-311-300 Allée des Ursulines e 311 \n485147 2-15-14 RUE Soumande 2 15 \n485177 A-M640-400 RUE Sainte-Catherine E a m640 \n486671 CRC-02-85 RUE De Martigny O crc 02 \n486792 C-422-5700 4e Avenue O c 422 \n486793 C-402-5700 4e Avenue O c 402 \n486794 D-413-5700 4e Avenue O d 413 \n487028 SS-20-337 rue Moreault ss 20 \n491858 19-20-299 BOUL. Sir-Wilfrid-Laurier 19 20 \n492111 102-104-5700 rue Saint-Zotique E. 102 104 \n498975 350-370-390 QUEENS QUAY W 350 370 \n512638 744-744A-746 MARKHAM RD 744 744a \n518844 3601 LAWRENCE AVE E, #4-5-6 #4 5 \n520248 3601 LAWRENCE AVE E, #4-5-6 #4 5 \n520980 3225 EGLINTON AVE E, #1-2-3 #1 2 \n527705 3225 EGLINTON AVE E, #1-2-3 #1 2 \n543237 2899 STEELES AVE W, #5-6-7 #5 6 \n572395 2007 LAWRENCE AVE W, #14-15-16 #14 15 \n573386 1085 BELLAMY RD N, #4-5-6 #4 5 \n575854 2007 LAWRENCE AVE W, #14-15-16 #14 15 \n577801 1300 FINCH AVE W, #24-25-26 #24 25 \n584756 4830 SHEPPARD AVE E, #12R-13-16 #12r 13 \n589546 2007 LAWRENCE AVE W, #14-15-16 #14 15 \n592915 4830 SHEPPARD AVE E, #12R-13-16 #12r 13 \n595950 1921 EGLINTON AVE E, #7-8-9 #7 8 \n596563 1921 EGLINTON AVE E, #7-8-9 #7 8 \n795724 SE 1/2 26-74-16 w5m 26 74 \n\n spill LP_street_no LP_street_name \\\n608 777 4-flr-777 fort st \n1054 777 g-flr-777 fort st \n1239 777 3-flr-777 fort st \n1340 1001 g-1-1001 douglas st \n1582 1701 6-s10-1701 douglas st \n1584 777 2-flr-777 fort st \n2474 1001 g-12-1001 douglas st \n2770 777 3-flr-777 fort st \n2793 1001 g-2-1001 douglas st \n2798 1001 g-4-1001 douglas st \n3395 1001 g-2-1001 douglas st \n3579 1001 g-9-1001 douglas st \n3705 1001 g-3-1001 douglas st \n4658 1001 g-10-1001 douglas st \n5279 1001 g-5-1001 douglas st \n6010 1701 6-s5-1701 douglas st \n6165 777 3-flr-777 fort st \n6616 1001 g-11-1001 douglas st \n6751 1701 6-s8-1701 douglas st \n6782 777 2-flr-777 fort st \n30572 60 rr-2 s-60 c-58 \n240496 44335 a-3-44335 yale rd \n245607 28 13-14-28 melanie dr \n245626 8015 b-2-8015 financial dr \n246571 2051 19-21-2051 williams pky \n246989 111 2-4-111 queen st e \n247248 50 8-9-50 sky harbour dr \n248440 180 3000-b1-180 sandalwood pky e \n248835 9525 8-9-9525 mississauga rd \n248852 2500 46-47-2500 williams pky \n248963 65 e-102-65 montpelier st \n249117 2500 44-45-2500 williams pky \n249386 4 1-3-4 wilkinson rd \n249461 380 20-21-380 bovaird dr e \n249663 791 12-14-791 bovaird dr w \n250547 10545 1-4-10545 bramalea rd \n250840 15 1-4-15 ashby field rd \n250848 380 7-8-380 bovaird dr e \n250960 10 5-6-10 squire ellis dr \n250961 10 12-14-10 squire ellis dr \n250970 227 17-18-227 advance blvd \n251215 9150 c-d-9150 airport rd \n251597 253 9-11-253 summerlea rd \n251929 21 f-g-21 regan rd \n252331 2084 10-12-2084 steeles ave e \n252417 2074 26-b-2074 steeles ave e \n252451 90 2-f-90 kennedy rd s \n252566 53 44-45-53 parkhurst sq \n252648 28 15-16-28 melanie dr \n253338 1390 f-g-1390 rue newton \n253992 b-181 c-6-b-181 rue principale \n254295 491 487-489-491 rue st-joseph \n254306 55 3-4-55 rue de martigny \n254389 3333 h-022-3333 rue du carrefour \n255528 3459 3455-3457-3459 rue bélair \n256392 94 e-010-94 rue monseigneur-blanche \n259332 71 324-c-71 rue de ramezay \n259747 1001 e-206-1001 rue lenoir \n260734 1 15-f-1 rang 5 \n262508 320 rc-105-320 rue saint-joseph e \n263749 6-222 2-4-6-222 rue poirier \n264095 181 c-6b-181 rue principale \n264277 201 197-199-201 rue st-dominique \n264337 2949 2929-2939-2949 rue picard \n264338 789-791 781-785-789-791 rue hélène boullé \n264341 655 595-625-655 boul. casavant est \n264880 c 3548a-b-c rue ste-famille \n264889 44a-b-c 3540-42-44a-b-c rue ste-famille \n265981 3200 a-200-3200 rue king o \n270029 1111 18-19-1111 boul. jutras e \n270915 700 rc24-2-700 rue 7e rue \n272656 455 c-126g-455 rue fournier \n273236 05 local f03-04-05 boul. langelier \n273241 181 b5-b6-181 rue principale \n273366 222 38-2-222 boul. henri-bourassa e \n273597 1100 m-2/6-1100 boul. maloney o \n273642 11-12 o z9-10-11-12 o boul. maloney \n273710 1019 1015-1017-1019 rue atwater \n273827 650 ss-09-650 rue graham-bell \n274251 371-373 367-369-371-373 rue labadie \n275219 860 840-850-860 després \n276047 138 134-136-138 10e rue \n276416 750 730-740-750 choquette \n278957 521 517-519-521 st-joseph \n279103 850 838-844-850 rue grand-jean \n279577 18005 600-f-18005 rue lapointe \n280582 447 l-1-447 rue des bouvreuils \n280584 37 l-22-37 rue chrétien \n281406 762 754-758-762 raoul jobin \n282234 60 f-1-60 rue évêché o \n282958 169 c-120-169 rue champlain so \n282982 1256 1252-1254-1256 rue alexis-lebert \n283143 272 268-270-272 des pins est \n284026 419 ss-14-419 rue saint roch \n284082 3125 a-1-3125 rue bernard pilon \n284593 2510 2506-2508-2510 rue beaubien \n285206 3200 a-170-3200 rue king o \n285840 300 e-220-300 allée des ursulines \n285841 300 e-220-300 allée des ursulines \n285842 300 e-220-300 allée des ursulines \n285944 178 s.-sol-178 rue houle \n285961 1001 c-500-1001 rue square \n286084 9994 9990-9992-9994 croissant rochelle \n286558 1 550-2-1 carré westmount \n287191 4461 4431-4451-4461 18e avenue \n290414 1255 a-6055-1255 rue st-denis \n292294 06 3902-04-06 rue notre-dame ouest \n298001 1001 c-28-1001 rue university \n301122 34 32-14-34 rue savaria \n302866 15 a-210-15 rue j-a bombardier \n303674 695 7-313-695 ch. avila \n303741 170 c-d-170 rue des entreprises \n306226 101 a-1303-101 rue st-jean bosco \n307927 1654 1650-1652-1654 boulevard roberval est \n308259 1622-1624 1622-1620-1622-1624 boul. roberval e. \n309766 1614 1610-1612-1614 boul. roberval est \n310816 650 ss-08-650 rue graham-bell \n312291 18005 600-f-18005 rue lapointe \n313893 139 135-137-139 king george \n313910 360 g-102-360 rue st-jacques o \n317585 118b 4-b-118b rue principale e \n319168 15 50-b-15 rue merry sud \n319952 725 310-3-725 boul. lebourgneuf \n325668 380 w-103-380 rue saint-antoine \n325792 260 #31-32-260 rue st-urbain \n327122 520 b-6-520 boul. st-joseph \n327914 3333 a-288-3333 rue du carrefour \n327977 900 b-111-900 rue lacasse \n327999 9080 rc-02-9080 rue hochelaga \n328226 360 s-170-360 rue st-jacques \n328410 1717 nr-01-1717 rue berri \n330145 998 2-12-998 boul. st-laurent \n331661 800 c-12a-800 rue square \n332385 2300 c-447-2300 rue tupper \n332806 1001 b-528-1001 rue lenoir \n333892 1001 a-410b-1001 rue lenoir \n334253 298 200-2-298 rue labelle \n335295 401 b-01-401 boul. labelle \n335687 3200-a a-200-3200-a rue king o \n335996 75 f-1-75 ch. de la gare \n336904 401 #fc-06-401 boul. labelle \n337020 1980 900-28-1980 sherbrooke street w. \n337481 255 3-4-255 rue de martigny o \n337582 555 m-32-555 rue chabanel o \n339315 276 g-03-276 rue st-jacques \n339366 695 308-7-695 ch. avila \n339652 1 c-305-1 carré westmount \n339769 1000 f-15-1000 rue sherbrooke o \n340107 195 c-140-195 rue marquette \n340319 360 m-201-360 rue saint jacques o \n340707 3333 a-55-3333 rue du carrefour \n343280 401 1-08-401 boul. labelle \n343525 1980 900-21-1980 rue sherbrooke o \n343850 930 c-700-930 rue jacques-cartier \n344124 100 c-112-100 rue peel \n344394 930 c-700-930 rue jacques cartier \n344465 315 j-m870-315 rue sainte-catherine e \n344635 1200 15-16-1200 ch. saint-jean \n344716 747 c-136-747 rue du square-victoria \n345491 i-1950 g-h-i-1950 ch. du fer-à-cheval \n345576 94 e-010-94 rue monseigneur-blanche \n345911 2 2-197-2 rue paré \n345989 15 a-260-15 rue j.a. bombardier \n346440 1001 c-215-1001 rue lenoir \n346913 f15b 30-8840 local f15c-f15b boul. leduc \n348359 136-138 132-134 -136-138 rue principale n \n348615 507 ss-100-507 rue place d'armes \n348675 765 204-1-765 rue jarry o \n353563 1747 c-314-1747 rue cunard \n354559 181 e-1-181 rue principale \n355455 3200 a-130-3200 rue king ouest \n356010 190-b 45-d-190-b rue dorchester \n356716 555 m-07-555 rue chabanel o \n357106 6615 218-b-6615 ch. cote-des-neiges \n357120 200 ah-so-200 rue promenade du portage \n357325 300 b-301-300 allée des ursulines \n357361 155 1-2-155 boul. labbé n \n357438 400 c-0220-400 rue montfort \n357488 705 2-115a-705 rue sainte-catherine o \n359480 1001 a-414-1001 rue lenoir \n359558 1717 nr-01-1717 rue berri \n359611 1001 c-215-1001 rue lenoir \n359683 125 a-e-125 rue lapointe \n360914 100 s-309-100 rue du chanoine-lionel-groulx \n360915 185 gs-18-185 rue durand \n360921 2561 a-0102-2561 ch. de la lièvre s \n360922 1525 n-761-1525 rue l'annonciation n \n360924 29 rc-139-29 vieux chemin d'oka \n360925 55 es-195-55 rue chénier \n360926 9100 3-130-9100 rue dumouchel \n361176 2601 f-0878-2601 ch. de la canardière \n361293 3351 r-4052-3351 rue des forges \n361431 109 ss-3-109 rue dalhousie \n362109 3200 a-140-3200 rue king ouest \n362213 650 5-6-650 rue gaudette \n362398 107e 111-a-107e rue rue \n363134 5440 cm-08-5440 rue sherbrooke e \n364403 900 100-5-900 boul. grignon \n364772 3333 a-291-3333 rue du carrefour \n365727 200 #00-04-200 boul. rené-lévesque o \n367267 315 r-m213-315 rue sainte-catherine e \n367325 1051 7e-f-1051 rue sanguinet \n367381 360 g-102-360 rue saint-jacques o \n367680 181 e-7-181 rue principale \n368107 7140 100-06-7140 rue albert-einstein \n368807 1001 a-419-1001 rue lenoir \n368968 39 a-13-39 rue kenosi \n369141 44 210-6-44 rte du président-kennedy \n370848 15 353-101-15 blvd don quichotte \n371481 400 j-1120-400 rue montfort \n371910 30 k-10-30 rue sainte-catherine o \n372030 55 360-07-55 rue louvain o \n372087 400 j-2140-400 rue montfort \n372951 10 a1-225-10 rue de l'espinay \n373381 745 b-102-745 ch. aylmer \n374459 1001 b-111-1001 rue lenoir \n374676 4200 p-11-4200 ch. de la savanne \n374973 695 241-7-695 ch. avila \n375259 215 b-123-215 rue peel \n375466 1388 200-a-1388 rue fleury e \n376977 1751 r-7-1751 rue richardson \n377994 3101 a-8440-3101 ch. de la tour \n379965 235 c-104-235 rue saint-jacques \n380781 1001 b-252-1001 rue lenoir \n384775 200 r-10-200 rue montcalm \n384832 3200-a a-200-3200-a rue king o \n385984 a-95 b-30-a-95 rue sainte-catherine o \n385997 1111 18-19-1111 boul. jutras e \n385999 705 3-110-705 rue sainte-catherine o \n386049 300 4-5-300 rue barkoff \n386050 6000 s10-12-6000 rue henri-bourassa e \n388183 1900 2-0107-1900 rue jacques-tétreault \n389035 460 203-28-460 rue du parc \n400103 1001 c-114-1001 rue lenoir \n408893 101 b-8-101 rue amherst \n409484 10e 401 1er-et-10e rang o \n415072 174 #r-5-174 boul. greber \n415730 433 1123-b-433 rue chabanel o \n419806 455 7-33-455 av. mathers \n424608 55 12-13-55 rue claude audy o \n434924 55 bur.10-360-55 rue louvain o \n440020 1245 212-a-1245 ch. sainte-foy \n440663 1000 f-1-1000 rue sherbrooke o \n441997 160 e-200-160 rue st-viateur e \n443465 1130 ph-2-1130 rue sherbrooke o \n445048 15 6-2-15 rue de rotterdam \n445339 68 203-4-68 boul. cartier o \n445855 745 b-102-745 ch. d'aylmer \n446304 17 100-03-17 rue de la barricade \n446381 1er 642 10e-et-1er rang e \n446903 1001 b-374-1001 rue lenoir \n448007 160 200-e-160 rue saint viateur e \n448901 1er 726 10e-et-1er rang e \n449503 2025-a 001-b-2025-a rue masson \n450051 225 6-7-225 rue principale \n450540 51 7-8-51 boul. boulevard \n450884 725 310-19-725 boul. lebourgneuf \n453264 1401 b-01-1401 ch. chambly \n453546 1er 726 10e-et-1er rang e \n455293 11000a a-29-11000a rue shebrooke e \n457011 1er 395 10e-et-1er rang o \n458216 2065 282-a-2065 rue parthenais \n458370 7500 68-2-7500 boul. des galeries d'anjou \n464745 1 ck-05-1 carré westmount \n466375 102 236-54-102 boul. cites des jeunes \n469348 1001 b-360-1001 rue lenoir \n472786 255 3-4-255 rue de martigny \n473226 1317 1313-1315-1317 rue maguire \n474079 908 902-906-908 mgr grandin \n481144 344 340 -342-344 rue ernest-bourque \n481252 1035 1015 -1025-1035 chemin du coteau \n481692 1564 j-1185-1564 rue saint-denis \n481876 1001 a-417-1001 rue lenoir \n484116 300 e-311-300 allée des ursulines \n485147 14 2-15-14 rue soumande \n485177 400 a-m640-400 rue sainte-catherine e \n486671 85 crc-02-85 rue de martigny o \n486792 5700 c-422-5700 4e avenue o \n486793 5700 c-402-5700 4e avenue o \n486794 5700 d-413-5700 4e avenue o \n487028 337 ss-20-337 rue moreault \n491858 299 19-20-299 boul. sir-wilfrid-laurier \n492111 5700 102-104-5700 rue saint-zotique e. \n498975 390 350-370-390 queens quay w \n512638 746 744-744a-746 markham rd \n518844 6 #4-5-6 lawrence ave e \n520248 6 #4-5-6 lawrence ave e \n520980 3 #1-2-3 eglinton ave e \n527705 3 #1-2-3 eglinton ave e \n543237 7 #5-6-7 steeles ave w \n572395 16 #14-15-16 lawrence ave w \n573386 6 #4-5-6 bellamy rd n \n575854 16 #14-15-16 lawrence ave w \n577801 26 #24-25-26 finch ave w \n584756 16 #12r-13-16 sheppard ave e \n589546 16 #14-15-16 lawrence ave w \n592915 16 #12r-13-16 sheppard ave e \n595950 9 #7-8-9 eglinton ave e \n596563 9 #7-8-9 eglinton ave e \n795724 16 26-74-16 w5m \n\n LP_City LP_Province LP_PostCode LP_Unit LP3_unit \n608 victoria bc v8w 1g9 NaN 4 \n1054 victoria bc v8w 1g9 NaN g \n1239 victoria bc v8w 1g9 NaN 3 \n1340 victoria bc v8w 2c5 NaN g \n1582 victoria bc v8w 0c1 NaN 6 \n1584 victoria bc v8w 1g9 NaN 2 \n2474 victoria bc v8w 2c5 NaN g \n2770 victoria bc v8w 1g9 NaN 3 \n2793 victoria bc v8w 2c5 NaN g \n2798 victoria bc v8w 2c5 NaN g \n3395 victoria bc v8w 2c5 NaN g \n3579 victoria bc v8w 2c5 NaN g \n3705 victoria bc v8w 2c5 NaN g \n4658 victoria bc v8w 2c5 NaN g \n5279 victoria bc v8w 2c5 NaN g \n6010 victoria bc v8w 0c1 NaN 6 \n6165 victoria bc v8w 1g9 NaN 3 \n6616 victoria bc v8w 2c5 NaN g \n6751 victoria bc v8w 0c1 NaN 6 \n6782 victoria bc v8w 1g9 NaN 2 \n30572 NaN NaN NaN NaN rr \n240496 chilliwack bc v2r 4h2 NaN a \n245607 NaN NaN NaN NaN 13 \n245626 NaN NaN NaN NaN b \n246571 NaN NaN NaN NaN 19 \n246989 NaN NaN NaN NaN 2 \n247248 NaN NaN NaN NaN 8 \n248440 NaN NaN NaN NaN 3000 \n248835 NaN NaN NaN NaN 8 \n248852 NaN NaN NaN NaN 46 \n248963 NaN NaN NaN NaN e \n249117 NaN NaN NaN NaN 44 \n249386 NaN NaN NaN NaN 1 \n249461 NaN NaN NaN NaN 20 \n249663 NaN NaN NaN NaN 12 \n250547 NaN NaN NaN NaN 1 \n250840 NaN NaN NaN NaN 1 \n250848 NaN NaN NaN NaN 7 \n250960 NaN NaN NaN NaN 5 \n250961 NaN NaN NaN NaN 12 \n250970 NaN NaN NaN NaN 17 \n251215 NaN NaN NaN NaN c \n251597 NaN NaN NaN NaN 9 \n251929 NaN NaN NaN NaN f \n252331 NaN NaN NaN NaN 10 \n252417 NaN NaN NaN NaN 26 \n252451 NaN NaN NaN NaN 2 \n252566 NaN NaN NaN NaN 44 \n252648 NaN NaN NaN NaN 15 \n253338 NaN NaN NaN NaN f \n253992 NaN NaN NaN NaN c \n254295 NaN NaN NaN NaN 487 \n254306 NaN NaN NaN NaN 3 \n254389 NaN NaN NaN NaN h \n255528 NaN NaN NaN NaN 3455 \n256392 NaN NaN NaN NaN e \n259332 NaN NaN NaN NaN 324 \n259747 NaN NaN NaN NaN e \n260734 NaN NaN NaN NaN 15 \n262508 NaN NaN NaN NaN rc \n263749 NaN NaN NaN NaN 2 \n264095 NaN NaN NaN NaN c \n264277 NaN NaN NaN NaN 197 \n264337 NaN NaN NaN NaN 2929 \n264338 NaN NaN NaN NaN 781 \n264341 NaN NaN NaN NaN 595 \n264880 NaN NaN NaN NaN 3548a \n264889 NaN NaN NaN NaN 3540 \n265981 NaN NaN NaN NaN a \n270029 NaN NaN NaN NaN 18 \n270915 NaN NaN NaN NaN rc24 \n272656 NaN NaN NaN NaN c \n273236 NaN NaN NaN NaN local f03 \n273241 NaN NaN NaN NaN b5 \n273366 NaN NaN NaN NaN 38 \n273597 NaN NaN NaN NaN m \n273642 NaN NaN NaN NaN z9 \n273710 NaN NaN NaN NaN 1015 \n273827 NaN NaN NaN NaN ss \n274251 NaN NaN NaN NaN 367 \n275219 NaN NaN NaN NaN 840 \n276047 NaN NaN NaN NaN 134 \n276416 NaN NaN NaN NaN 730 \n278957 NaN NaN NaN NaN 517 \n279103 NaN NaN NaN NaN 838 \n279577 NaN NaN NaN NaN 600 \n280582 NaN NaN NaN NaN l \n280584 NaN NaN NaN NaN l \n281406 NaN NaN NaN NaN 754 \n282234 NaN NaN NaN NaN f \n282958 NaN NaN NaN NaN c \n282982 NaN NaN NaN NaN 1252 \n283143 NaN NaN NaN NaN 268 \n284026 NaN NaN NaN NaN ss \n284082 NaN NaN NaN NaN a \n284593 NaN NaN NaN NaN 2506 \n285206 NaN NaN NaN NaN a \n285840 NaN NaN NaN NaN e \n285841 NaN NaN NaN NaN e \n285842 NaN NaN NaN NaN e \n285944 NaN NaN NaN NaN s. \n285961 victoria NaN NaN NaN c \n286084 NaN NaN NaN NaN 9990 \n286558 NaN NaN NaN NaN 550 \n287191 NaN NaN NaN NaN 4431 \n290414 NaN NaN NaN NaN a \n292294 NaN NaN NaN NaN 3902 \n298001 NaN NaN NaN NaN c \n301122 NaN NaN NaN NaN 32 \n302866 NaN NaN NaN NaN a \n303674 NaN NaN NaN NaN 7 \n303741 NaN NaN NaN NaN c \n306226 NaN NaN NaN NaN a \n307927 NaN NaN NaN NaN 1650 \n308259 NaN NaN NaN NaN 1622 \n309766 NaN NaN NaN NaN 1610 \n310816 NaN NaN NaN NaN ss \n312291 NaN NaN NaN NaN 600 \n313893 NaN NaN NaN NaN 135 \n313910 NaN NaN NaN NaN g \n317585 NaN NaN NaN NaN 4 \n319168 NaN NaN NaN NaN 50 \n319952 NaN NaN NaN NaN 310 \n325668 NaN NaN NaN NaN w \n325792 NaN NaN NaN NaN #31 \n327122 NaN NaN NaN NaN b \n327914 NaN NaN NaN NaN a \n327977 NaN NaN NaN NaN b \n327999 NaN NaN NaN NaN rc \n328226 NaN NaN NaN NaN s \n328410 NaN NaN NaN NaN nr \n330145 NaN NaN NaN NaN 2 \n331661 victoria NaN NaN NaN c \n332385 NaN NaN NaN NaN c \n332806 NaN NaN NaN NaN b \n333892 NaN NaN NaN NaN a \n334253 NaN NaN NaN NaN 200 \n335295 NaN NaN NaN NaN b \n335687 NaN NaN NaN NaN a \n335996 NaN NaN NaN NaN f \n336904 NaN NaN NaN NaN #fc \n337020 NaN NaN NaN NaN 900 \n337481 NaN NaN NaN NaN 3 \n337582 NaN NaN NaN NaN m \n339315 NaN NaN NaN NaN g \n339366 NaN NaN NaN NaN 308 \n339652 NaN NaN NaN NaN c \n339769 NaN NaN NaN NaN f \n340107 NaN NaN NaN NaN c \n340319 NaN NaN NaN NaN m \n340707 NaN NaN NaN NaN a \n343280 NaN NaN NaN NaN 1 \n343525 NaN NaN NaN NaN 900 \n343850 NaN NaN NaN NaN c \n344124 NaN NaN NaN NaN c \n344394 NaN NaN NaN NaN c \n344465 NaN NaN NaN NaN j \n344635 NaN NaN NaN NaN 15 \n344716 NaN NaN NaN NaN c \n345491 NaN NaN NaN NaN g \n345576 NaN NaN NaN NaN e \n345911 NaN NaN NaN NaN 2 \n345989 NaN NaN NaN NaN a \n346440 NaN NaN NaN NaN c \n346913 NaN NaN NaN NaN 30 \n348359 NaN NaN NaN NaN 132 \n348615 NaN NaN NaN NaN ss \n348675 NaN NaN NaN NaN 204 \n353563 NaN NaN NaN NaN c \n354559 NaN NaN NaN NaN e \n355455 NaN NaN NaN NaN a \n356010 NaN NaN NaN NaN 45 \n356716 NaN NaN NaN NaN m \n357106 NaN NaN NaN NaN 218 \n357120 NaN NaN NaN NaN ah \n357325 NaN NaN NaN NaN b \n357361 NaN NaN NaN NaN 1 \n357438 NaN NaN NaN NaN c \n357488 NaN NaN NaN NaN 2 \n359480 NaN NaN NaN NaN a \n359558 NaN NaN NaN NaN nr \n359611 NaN NaN NaN NaN c \n359683 NaN NaN NaN NaN a \n360914 NaN NaN NaN NaN s \n360915 NaN NaN NaN NaN gs \n360921 NaN NaN NaN NaN a \n360922 NaN NaN NaN NaN n \n360924 NaN NaN NaN NaN rc \n360925 NaN NaN NaN NaN es \n360926 NaN NaN NaN NaN 3 \n361176 NaN NaN NaN NaN f \n361293 NaN NaN NaN NaN r \n361431 NaN NaN NaN NaN ss \n362109 NaN NaN NaN NaN a \n362213 NaN NaN NaN NaN 5 \n362398 NaN NaN NaN NaN 111 \n363134 NaN NaN NaN NaN cm \n364403 NaN NaN NaN NaN 100 \n364772 NaN NaN NaN NaN a \n365727 NaN NaN NaN NaN #00 \n367267 NaN NaN NaN NaN r \n367325 NaN NaN NaN NaN 7e \n367381 NaN NaN NaN NaN g \n367680 NaN NaN NaN NaN e \n368107 NaN NaN NaN NaN 100 \n368807 NaN NaN NaN NaN a \n368968 NaN NaN NaN NaN a \n369141 NaN NaN NaN NaN 210 \n370848 NaN NaN NaN NaN 353 \n371481 NaN NaN NaN NaN j \n371910 NaN NaN NaN NaN k \n372030 NaN NaN NaN NaN 360 \n372087 NaN NaN NaN NaN j \n372951 NaN NaN NaN NaN a1 \n373381 NaN NaN NaN NaN b \n374459 NaN NaN NaN NaN b \n374676 NaN NaN NaN NaN p \n374973 NaN NaN NaN NaN 241 \n375259 NaN NaN NaN NaN b \n375466 NaN NaN NaN NaN 200 \n376977 NaN NaN NaN NaN r \n377994 NaN NaN NaN NaN a \n379965 NaN NaN NaN NaN c \n380781 NaN NaN NaN NaN b \n384775 NaN NaN NaN NaN r \n384832 NaN NaN NaN NaN a \n385984 NaN NaN NaN NaN b \n385997 NaN NaN NaN NaN 18 \n385999 NaN NaN NaN NaN 3 \n386049 NaN NaN NaN NaN 4 \n386050 NaN NaN NaN NaN s10 \n388183 NaN NaN NaN NaN 2 \n389035 NaN NaN NaN NaN 203 \n400103 NaN NaN NaN NaN c \n408893 NaN NaN NaN NaN b \n409484 NaN NaN NaN NaN 401 1er \n415072 NaN NaN NaN NaN #r \n415730 NaN NaN NaN NaN 1123 \n419806 NaN NaN NaN NaN 7 \n424608 NaN NaN NaN NaN 12 \n434924 NaN NaN NaN NaN bur.10 \n440020 NaN NaN NaN NaN 212 \n440663 NaN NaN NaN NaN f \n441997 NaN NaN NaN NaN e \n443465 NaN NaN NaN NaN ph \n445048 NaN NaN NaN NaN 6 \n445339 NaN NaN NaN NaN 203 \n445855 NaN NaN NaN NaN b \n446304 NaN NaN NaN NaN 100 \n446381 NaN NaN NaN NaN 642 10e \n446903 NaN NaN NaN NaN b \n448007 NaN NaN NaN NaN 200 \n448901 NaN NaN NaN NaN 726 10e \n449503 NaN NaN NaN NaN 001 \n450051 NaN NaN NaN NaN 6 \n450540 NaN NaN NaN NaN 7 \n450884 NaN NaN NaN NaN 310 \n453264 NaN NaN NaN NaN b \n453546 NaN NaN NaN NaN 726 10e \n455293 NaN NaN NaN NaN a \n457011 NaN NaN NaN NaN 395 10e \n458216 NaN NaN NaN NaN 282 \n458370 NaN NaN NaN NaN 68 \n464745 NaN NaN NaN NaN ck \n466375 NaN NaN NaN NaN 236 \n469348 NaN NaN NaN NaN b \n472786 NaN NaN NaN NaN 3 \n473226 NaN NaN NaN NaN 1313 \n474079 NaN NaN NaN NaN 902 \n481144 NaN NaN NaN NaN 340 \n481252 NaN NaN NaN NaN 1015 \n481692 NaN NaN NaN NaN j \n481876 NaN NaN NaN NaN a \n484116 NaN NaN NaN NaN e \n485147 NaN NaN NaN NaN 2 \n485177 NaN NaN NaN NaN a \n486671 NaN NaN NaN NaN crc \n486792 NaN NaN NaN NaN c \n486793 NaN NaN NaN NaN c \n486794 NaN NaN NaN NaN d \n487028 NaN NaN NaN NaN ss \n491858 NaN NaN NaN NaN 19 \n492111 NaN NaN NaN NaN 102 \n498975 NaN NaN NaN NaN 350 \n512638 NaN NaN NaN NaN 744 \n518844 NaN NaN NaN NaN #4 \n520248 NaN NaN NaN NaN #4 \n520980 NaN NaN NaN NaN #1 \n527705 NaN NaN NaN NaN #1 \n543237 NaN NaN NaN NaN #5 \n572395 NaN NaN NaN NaN #14 \n573386 NaN NaN NaN NaN #4 \n575854 NaN NaN NaN NaN #14 \n577801 NaN NaN NaN NaN #24 \n584756 NaN NaN NaN NaN #12r \n589546 NaN NaN NaN NaN #14 \n592915 NaN NaN NaN NaN #12r \n595950 NaN NaN NaN NaN #7 \n596563 NaN NaN NaN NaN #7 \n795724 NaN NaN NaN NaN 26 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
idxlocalfilebusiness_namefull_addressLP2_unitLP2_street_nospillLP_street_noLP_street_nameLP_CityLP_ProvinceLP_PostCodeLP_UnitLP3_unit
6081aaf470769d4d02c2ba8BC_Victoria_Business_Licences.csvVICTORIA ADVANCED TECHNOLOGY COUNCIL (VIATEC)4-FLR-777 FORT ST VICTORIA BC V8W 1G94flr7774-flr-777fort stvictoriabcv8w 1g9NaN4
1054bf927f38280978c45d52BC_Victoria_Business_Licences.csvGROUND CONTROL CAFEG-FLR-777 FORT ST VICTORIA BC V8W 1G9gflr777g-flr-777fort stvictoriabcv8w 1g9NaNg
1239cb0576b2e074711fe258BC_Victoria_Business_Licences.csvRUMBLE NUTRITION LTD3-FLR-777 FORT ST VICTORIA BC V8W 1G93flr7773-flr-777fort stvictoriabcv8w 1g9NaN3
1340150bd858e17adf5796d9BC_Victoria_Business_Licences.csvBLENZ COFFEEG-1-1001 DOUGLAS ST VICTORIA BC V8W 2C5g11001g-1-1001douglas stvictoriabcv8w 2c5NaNg
158223f92529e3b00f5220a1BC_Victoria_Business_Licences.csvVICTORIA PIE COMPANY6-S10-1701 DOUGLAS ST VICTORIA BC V8W 0C16s1017016-s10-1701douglas stvictoriabcv8w 0c1NaN6
15849311d646bd8abc777a19BC_Victoria_Business_Licences.csvCTC TRAINCANADA2-FLR-777 FORT ST VICTORIA BC V8W 1G92flr7772-flr-777fort stvictoriabcv8w 1g9NaN2
2474e511e2d61a76ea455da3BC_Victoria_Business_Licences.csvLA FIESTA CAFEG-12-1001 DOUGLAS ST VICTORIA BC V8W 2C5g121001g-12-1001douglas stvictoriabcv8w 2c5NaNg
277016f296dee2880a32b64cBC_Victoria_Business_Licences.csvALTA BERING3-FLR-777 FORT ST VICTORIA BC V8W 1G93flr7773-flr-777fort stvictoriabcv8w 1g9NaN3
2793c3fdfac470e53a586ee3BC_Victoria_Business_Licences.csvHANK'SG-2-1001 DOUGLAS ST VICTORIA BC V8W 2C5g21001g-2-1001douglas stvictoriabcv8w 2c5NaNg
2798ba8ff3b4a123d49a10c1BC_Victoria_Business_Licences.csvNOWHERE A RESTAURANTG-4-1001 DOUGLAS ST VICTORIA BC V8W 2C5g41001g-4-1001douglas stvictoriabcv8w 2c5NaNg
33955d7c902a4485da28ba3bBC_Victoria_Business_Licences.csvAVIS CANADAG-2-1001 DOUGLAS ST VICTORIA BC V8W 2C5g21001g-2-1001douglas stvictoriabcv8w 2c5NaNg
35793433be4ccd81035db6b6BC_Victoria_Business_Licences.csvDOWNTOWN VICTORIA OPTOMETRYG-9-1001 DOUGLAS ST VICTORIA BC V8W 2C5g91001g-9-1001douglas stvictoriabcv8w 2c5NaNg
3705f3715c160a1f36c95aabBC_Victoria_Business_Licences.csvMARLIN TRAVELG-3-1001 DOUGLAS ST VICTORIA BC V8W 2C5g31001g-3-1001douglas stvictoriabcv8w 2c5NaNg
4658058bea397fdbdc57b1e4BC_Victoria_Business_Licences.csvEDWARD JONESG-10-1001 DOUGLAS ST VICTORIA BC V8W 2C5g101001g-10-1001douglas stvictoriabcv8w 2c5NaNg
52793097014846a21fc4b6f4BC_Victoria_Business_Licences.csvCRESCENDO FOR HAIRG-5-1001 DOUGLAS ST VICTORIA BC V8W 2C5g51001g-5-1001douglas stvictoriabcv8w 2c5NaNg
60102347fda8a3762b9da41dBC_Victoria_Business_Licences.csvROAST6-S5-1701 DOUGLAS ST VICTORIA BC V8W 0C16s517016-s5-1701douglas stvictoriabcv8w 0c1NaN6
61657ea34407aeebac77311eBC_Victoria_Business_Licences.csvRFDM SOLUTIONS INC3-FLR-777 FORT ST VICTORIA BC V8W 1G93flr7773-flr-777fort stvictoriabcv8w 1g9NaN3
66169572258fefc677a8fc68BC_Victoria_Business_Licences.csvTESSERACT 2.0 COMPUTINGG-11-1001 DOUGLAS ST VICTORIA BC V8W 2C5g111001g-11-1001douglas stvictoriabcv8w 2c5NaNg
67512efffd1553dcecba0b50BC_Victoria_Business_Licences.csvWAFFLEBEAST6-S8-1701 DOUGLAS ST VICTORIA BC V8W 0C16s817016-s8-1701douglas stvictoriabcv8w 0c1NaN6
678272af67acc6c8992e9f07BC_Victoria_Business_Licences.csvGLOBAL KNOWLEDGE NETWORK (CANADA)2-FLR-777 FORT ST VICTORIA BC V8W 1G92flr7772-flr-777fort stvictoriabcv8w 1g9NaN2
30572a59afc90ecc84c2c7cb4BC_Indigenous_Business_Listings.csvTomahawk Industrial ServicesRR-2 S-60 C-58rr2 s60rr-2 s-60c-58NaNNaNNaNNaNrr
240496d9b59b89b7c9f71edf66BC_Chilliwack_Business_Licences.csvCOOKIES GRILLA-3-44335 YALE RD, CHILLIWACK BC V2R 4H2a344335a-3-44335yale rdchilliwackbcv2r 4h2NaNa
2456076952f27f8f32e812cf03ON_Brampton_Business_Directory.csvSIDHU AUTO AND TRUCK REPAIR SERVICES13-14-28 MELANIE DR13142813-14-28melanie drNaNNaNNaNNaN13
24562602d77f2c59136d3a6d7bON_Brampton_Business_Directory.csvCOPPER RIDGE PHARMACYB-2-8015 FINANCIAL DRb28015b-2-8015financial drNaNNaNNaNNaNb
246571afa96e09bc0c8c987326ON_Brampton_Business_Directory.csvDAVROC AND ASSOCIATES LTD.19-21-2051 WILLIAMS PKY1921205119-21-2051williams pkyNaNNaNNaNNaN19
2469896b4c488878da758a5c79ON_Brampton_Business_Directory.csvBRAMPTON COSMETIC2-4-111 QUEEN ST E241112-4-111queen st eNaNNaNNaNNaN2
247248209073c9a1cd06244595ON_Brampton_Business_Directory.csvST. GEORGE MEDICAL CENTRE8-9-50 SKY HARBOUR DR89508-9-50sky harbour drNaNNaNNaNNaN8
2484408358f31c9442316598fcON_Brampton_Business_Directory.csvINDIA RAINBOW COMMUNITY SERVICES OF PEEL3000-B1-180 SANDALWOOD PKY E3000b11803000-b1-180sandalwood pky eNaNNaNNaNNaN3000
24883505eeeeaa06ba099aff82ON_Brampton_Business_Directory.csvDYNACARE8-9-9525 MISSISSAUGA RD8995258-9-9525mississauga rdNaNNaNNaNNaN8
248852067f5b3bd0cb413d016eON_Brampton_Business_Directory.csvMAXPOWER FRICTION INC.46-47-2500 WILLIAMS PKY4647250046-47-2500williams pkyNaNNaNNaNNaN46
2489636593b2db7cf5a05a86f1ON_Brampton_Business_Directory.csvKUMON MATH AND READING CENTREE-102-65 MONTPELIER STe10265e-102-65montpelier stNaNNaNNaNNaNe
2491177ba728c2c0c81fe8893bON_Brampton_Business_Directory.csvJCR WOODWORKING44-45-2500 WILLIAMS PKY4445250044-45-2500williams pkyNaNNaNNaNNaN44
2493867d356a4136837f0e16dbON_Brampton_Business_Directory.csvCANTRINA FREEZER1-3-4 WILKINSON RD1341-3-4wilkinson rdNaNNaNNaNNaN1
2494614b96bb9fb8a61074b43cON_Brampton_Business_Directory.csvDOLLAR POWER20-21-380 BOVAIRD DR E202138020-21-380bovaird dr eNaNNaNNaNNaN20
24966389d9379007bfc34d86ecON_Brampton_Business_Directory.csvFOODASIA12-14-791 BOVAIRD DR W121479112-14-791bovaird dr wNaNNaNNaNNaN12
250547d72f56efc2da07bcbef9ON_Brampton_Business_Directory.csvALTUM HEALTH CLINIC1-4-10545 BRAMALEA RD14105451-4-10545bramalea rdNaNNaNNaNNaN1
250840d868cb6db85e2024cff4ON_Brampton_Business_Directory.csvMCLEANS LEARNING ACADEMY1-4-15 ASHBY FIELD RD14151-4-15ashby field rdNaNNaNNaNNaN1
2508480b746cf821087d844de7ON_Brampton_Business_Directory.csvDHABA EXPRESS7-8-380 BOVAIRD DR E783807-8-380bovaird dr eNaNNaNNaNNaN7
25096005073f05b6004cd5ba82ON_Brampton_Business_Directory.csvDENTISTRY DR. ANDHAWA5-6-10 SQUIRE ELLIS DR56105-6-10squire ellis drNaNNaNNaNNaN5
250961621f07a335bf5ddd9c83ON_Brampton_Business_Directory.csvJOHAL SWEETS AND RESTAURANT12-14-10 SQUIRE ELLIS DR12141012-14-10squire ellis drNaNNaNNaNNaN12
250970566dd2abb1680fe0b447ON_Brampton_Business_Directory.csvA2Z KITCHEN CABINETS17-18-227 ADVANCE BLVD171822717-18-227advance blvdNaNNaNNaNNaN17
251215282ae5e0efc353a3cbd5ON_Brampton_Business_Directory.csvMENASHA PACKAGINGC-D-9150 AIRPORT RDcd9150c-d-9150airport rdNaNNaNNaNNaNc
251597f923bb2fd5ab5f41d605ON_Brampton_Business_Directory.csvCLAREVILLE DISTINCTIVE KITCHENS AND BATHS9-11-253 SUMMERLEA RD9112539-11-253summerlea rdNaNNaNNaNNaN9
251929f324da0c70c43fdac329ON_Brampton_Business_Directory.csvMODHANI INC.F-G-21 REGAN RDfg21f-g-21regan rdNaNNaNNaNNaNf
25233174d4b6b3410c918c2817ON_Brampton_Business_Directory.csvPVC ENTERPRISES LTD.10-12-2084 STEELES AVE E1012208410-12-2084steeles ave eNaNNaNNaNNaN10
2524172ce85444ef716093acb4ON_Brampton_Business_Directory.csvKLOMAN STUDIO26-B-2074 STEELES AVE E26b207426-b-2074steeles ave eNaNNaNNaNNaN26
2524512a80d5f48781f0b2c8eaON_Brampton_Business_Directory.csvGLOBAL STAFFING AND DRIVERS SERVICES LTD2-F-90 KENNEDY RD S2f902-f-90kennedy rd sNaNNaNNaNNaN2
252566de4bd5c4e23c74fc3045ON_Brampton_Business_Directory.csvDESIGNER JEWELLERY BY TINA44-45-53 PARKHURST SQ44455344-45-53parkhurst sqNaNNaNNaNNaN44
25264882ee061c0f9bd1874004ON_Brampton_Business_Directory.csvHOPE CANDLE COMPANY LTD.15-16-28 MELANIE DR15162815-16-28melanie drNaNNaNNaNNaN15
25333841a9d66adbf64ed0be7eQC_Etablissements.csvMAHEU & MAHEU INC.F-G-1390 RUE Newtonfg1390f-g-1390rue newtonNaNNaNNaNNaNf
253992b311a3888f6e6f80e7b7QC_Etablissements.csvTECNIC MOTO GATINEAU (AYLMER)C-6-B-181 RUE Principalec6b-181c-6-b-181rue principaleNaNNaNNaNNaNc
25429534ecc47c62e630151736QC_Etablissements.csvSYNDICAT DE LA COPROPRIÉTÉ LE MONT ST- GRÉGOIR...487-489-491, RUE ST-JOSEPH487489491487-489-491rue st-josephNaNNaNNaNNaN487
254306284c6081b54e67aa8f9cQC_Etablissements.csvLE GROUPE AMYOT, GÉLINAS INC.3-4-55 RUE De Martigny34553-4-55rue de martignyNaNNaNNaNNaN3
254389c9d155034ba230360ab7QC_Etablissements.csvCLUB CH-022-3333 RUE du Carrefourh0223333h-022-3333rue du carrefourNaNNaNNaNNaNh
255528c54d9ea15b2719771e63QC_Etablissements.csvÉGLISE ÉVANGÉLIQUE DE LA NOUVELLE ALLIANCE3455-3457-3459, RUE BÉLAIR3455345734593455-3457-3459rue bélairNaNNaNNaNNaN3455
256392b0320015e3acdbe50a04QC_Etablissements.csvCENTRE D'ASSISTANCE ET D'ACCOMPAGNEMENT AUX PL...E-010-94 RUE Monseigneur-Blanchee01094e-010-94rue monseigneur-blancheNaNNaNNaNNaNe
25933269084816edfbe952916aQC_Etablissements.csvCENTRE DESRANLEAU324-C-71 RUE de Ramezay324c71324-c-71rue de ramezayNaNNaNNaNNaN324
259747b544048a73c9c2ba8ae0QC_Etablissements.csvMUSÉE DES ONDES ÉMILE BERLINERE-206-1001 RUE Lenoire2061001e-206-1001rue lenoirNaNNaNNaNNaNe
26073442dafeaf9b73b5f52256QC_Etablissements.csvSOLLIO GROUPE COOPÉRATIFRUE BÉCANCOUR PARTIE 15-F-1 RANG 515f115-f-1rang 5NaNNaNNaNNaN15
2625088e9023e47fa70550ba10QC_Etablissements.csvÉdifice CSQ QuébecRC-105-320 RUE Saint-Joseph Erc105320rc-105-320rue saint-joseph eNaNNaNNaNNaNrc
26374987966648005e979010daQC_Etablissements.csvAUTOMOBILE RIMEK INC.2-4-6-222 RUE Poirier246-2222-4-6-222rue poirierNaNNaNNaNNaN2
2640952ce4d8802fbd7dcb8163QC_Etablissements.csvECOLE DE CONDUITE LAUZON ST-JOSEPH ENRC-6B-181 RUE Principalec6b181c-6b-181rue principaleNaNNaNNaNNaNc
2642775a6cb82d7cb1243723d7QC_Etablissements.csvG., J., M. NAUD LTEE197-199-201, RUE ST-DOMINIQUE197199201197-199-201rue st-dominiqueNaNNaNNaNNaN197
264337851bfa0c3b7902f24682QC_Etablissements.csvDARMIEUX INC2929-2939-2949, RUE PICARD2929293929492929-2939-2949rue picardNaNNaNNaNNaN2929
264338d6981c9b09817435aba1QC_Etablissements.csvDARMIEUX INC781-785-789-791, RUE HÉLÈNE BOULLÉ781785789-791781-785-789-791rue hélène boulléNaNNaNNaNNaN781
264341d5a3c29ef5045f88b04cQC_Etablissements.csvDARMIEUX INC595-625-655, BOUL. CASAVANT EST595625655595-625-655boul. casavant estNaNNaNNaNNaN595
2648802b86920fa2a7cdbc7bd4QC_Etablissements.csvCOOPÉRATIVE D'HABITATION CONCERTO DE MONTRÉAL3548A-B-C, RUE STE-FAMILLE3548abc3548a-b-crue ste-familleNaNNaNNaNNaN3548a
264889a68a060ca32adc8828ccQC_Etablissements.csvCOOPÉRATIVE D'HABITATION CONCERTO DE MONTRÉAL3540-42-44A-B-C, RUE STE-FAMILLE35404244a-b-c3540-42-44a-b-crue ste-familleNaNNaNNaNNaN3540
2659814cea6d535b0305b718acQC_Etablissements.csvINDUSTRIELLE ALLIANCE, ASSURANCE AUTO ET HABIT...A-200-3200 RUE King Oa2003200a-200-3200rue king oNaNNaNNaNNaNa
270029c4a5f5bc4cc9dfaa6e53QC_Etablissements.csvLNLC INC.18-19-1111 BOUL. Jutras E1819111118-19-1111boul. jutras eNaNNaNNaNNaN18
270915afad0166434fa6684f2dQC_Etablissements.csvLES SERVICES PARAJUDICIAIRES AUTOCHTONES DU QU...RC24-2-700 RUE 7e Ruerc242700rc24-2-700rue 7e rueNaNNaNNaNNaNrc24
272656338b97e202f529e281a0QC_Etablissements.csvL'ASSOCIATION GENERALE DES ETUDIANTS DU C.E.G....C-126G-455 RUE Fournierc126g455c-126g-455rue fournierNaNNaNNaNNaNc
273236e5313a1799370fc833c2QC_Etablissements.csvLE GRENIER7373 boul. Langelier, Local F03-04-05local f030405local f03-04-05boul. langelierNaNNaNNaNNaNlocal f03
273241617c02fc3f4adb2bffb1QC_Etablissements.csvLE GRENIERB5-B6-181 rue Principaleb5b6181b5-b6-181rue principaleNaNNaNNaNNaNb5
273366049ab01f21736d49b4dfQC_Etablissements.csvLES ÉDITIONS MANUKA38-2-222 BOUL. Henri-Bourassa E38222238-2-222boul. henri-bourassa eNaNNaNNaNNaN38
27359710daa17a4d3c43ddd864QC_Etablissements.csvMARIE CLAIREM-2/6-1100 BOUL. Maloney Om2/61100m-2/6-1100boul. maloney oNaNNaNNaNNaNm
2736427b35bbf5d82b813fe389QC_Etablissements.csvTERRA NOSTRA (TMA)1100 Boul. Maloney Z9-10-11-12 Oz91011-12 oz9-10-11-12 oboul. maloneyNaNNaNNaNNaNz9
2737108be2a01feda26b4aa82dQC_Etablissements.csv129270 CANADA LTÉE1015-1017-1019, RUE ATWATER1015101710191015-1017-1019rue atwaterNaNNaNNaNNaN1015
2738275366c979703d051e6835QC_Etablissements.csvSignaleurs de la CapitaleSS-09-650 RUE Graham-Bellss09650ss-09-650rue graham-bellNaNNaNNaNNaNss
2742518bb9b86958fe66098568QC_Etablissements.csvCOOPÉRATIVE D'HABITATION LABADIE (MONTRÉAL)367-369-371-373, RUE LABADIE367369371-373367-369-371-373rue labadieNaNNaNNaNNaN367
2752199b70b5da3d5a2ad5c178QC_Etablissements.csvCOOP LOGEMENT BARQUE840-850-860, DESPRÉS840850860840-850-860desprésNaNNaNNaNNaN840
27604707dc69cf130343459715QC_Etablissements.csvCOOP À L'ÉTAGE134-136-138, 10E RUE134136138134-136-13810e rueNaNNaNNaNNaN134
27641679a84d3c6056a40b2150QC_Etablissements.csvCO-OP D'HABITATION MASKOU DE ST-HYACINTHE730-740-750, CHOQUETTE730740750730-740-750choquetteNaNNaNNaNNaN730
2789570e49d839b7445e9031e7QC_Etablissements.csvSYNDICAT DE LA COPROPRIÉTÉ LE MONT ST-GRÉGOIRE...517-519-521, ST-JOSEPH517519521517-519-521st-josephNaNNaNNaNNaN517
27910318d58f0bde9e34848ba8QC_Etablissements.csvPLACE DES COMPAGNONS838-844-850, RUE GRAND-JEAN838844850838-844-850rue grand-jeanNaNNaNNaNNaN838
2795776f25db6f4dc9cac0221fQC_Etablissements.csvLES AGENCES PRODEX600-F-18005 RUE Lapointe600f18005600-f-18005rue lapointeNaNNaNNaNNaN600
28058227d97b36025ea3653764QC_Etablissements.csvCENTRE D'ASSISTANCE ET D'ACCOMPAGNEMENT AUX PL...L-1-447 RUE des Bouvreuilsl1447l-1-447rue des bouvreuilsNaNNaNNaNNaNl
280584cef9e013da8f28673a80QC_Etablissements.csvCENTRE D'ASSISTANCE ET D'ACCOMPAGNEMENT AUX PL...L-22-37 RUE Chrétienl2237l-22-37rue chrétienNaNNaNNaNNaNl
2814066a5f015bccb7f719cd4dQC_Etablissements.csvCOOPÉRATIVE D'HABITATION \"CHEZ NOUS\" DE QUÉBEC754-758-762, RAOUL JOBIN754758762754-758-762raoul jobinNaNNaNNaNNaN754
282234aa9f37eb5ea24d83cb5fQC_Etablissements.csvREGULVAR INC.F-1-60 RUE ÉVÊCHÉ Of160f-1-60rue évêché oNaNNaNNaNNaNf
282958cdbc7c90cbe3e493c2a9QC_Etablissements.csvA.G.É.CO.V. ASSOCIATION GÉNÉRALE DES ÉTUDIANTS...C-120-169 RUE Champlain SOc120169c-120-169rue champlain soNaNNaNNaNNaNc
282982cb20a9047b0141883b0dQC_Etablissements.csvSYNDICAT DE LA COPROPRIÉTÉ LE ALEXIS-LEBERT 1111252-1254-1256, RUE ALEXIS-LEBERT1252125412561252-1254-1256rue alexis-lebertNaNNaNNaNNaN1252
2831430cf8202844e090ef3dfaQC_Etablissements.csvESPACE BLEU268-270-272, DES PINS EST268270272268-270-272des pins estNaNNaNNaNNaN268
284026d697631db71e5b348482QC_Etablissements.csvHIMALAYA SÉNIORS DU QUÉBECSS-14-419 RUE Saint Rochss14419ss-14-419rue saint rochNaNNaNNaNNaNss
2840821f1e23b75267db371a4bQC_Etablissements.csvCAFÉ DE LA MONTÉRÉGIE INC.A-1-3125 RUE Bernard Pilona13125a-1-3125rue bernard pilonNaNNaNNaNNaNa
284593d18f9621b160900f0e57QC_Etablissements.csvGESTION VAN GEENHOVEN LTÉE2506-2508-2510 RUE BEAUBIEN2506250825102506-2508-2510rue beaubienNaNNaNNaNNaN2506
2852064ada2b03b5ba60c71f71QC_Etablissements.csvHÉMA-QUÉBECA-170-3200 RUE King Oa1703200a-170-3200rue king oNaNNaNNaNNaNa
285840afddf9c141f4bf62a50dQC_Etablissements.csvBAR LE BAROMÈTREE-220-300 Allée des Ursulinese220300e-220-300allée des ursulinesNaNNaNNaNNaNe
285841779ce5c210cdcedea94aQC_Etablissements.csvCAFÉ L'AURICULAIREE-220-300 Allée des Ursulinese220300e-220-300allée des ursulinesNaNNaNNaNNaNe
2858427d30c3454c0ec33298b2QC_Etablissements.csvASSOCIATION GÉNÉRALE ÉTUDIANTE DU CAMPUS DE RI...E-220-300 Allée des Ursulinese220300e-220-300allée des ursulinesNaNNaNNaNNaNe
285944357878bc979dcb1dfe91QC_Etablissements.csvA. BÉDARD & ASSOCIÉS INC.S.-SOL-178 RUE HOULEs.sol178s.-sol-178rue houleNaNNaNNaNNaNs.
285961076148e6294aefe02c0bQC_Etablissements.csvIVANHOÉ CAMBRIDGE INC.C-500-1001 RUE Square Victoriac5001001c-500-1001rue squarevictoriaNaNNaNNaNc
286084daae9d89de86bc1e2208QC_Etablissements.csvSYNDICAT DE LA COPROPRIÉTÉ CARRÉ ST-JACQUES 3C9990-9992-9994, CROISSANT ROCHELLE9990999299949990-9992-9994croissant rochelleNaNNaNNaNNaN9990
286558e5652fe52933bbdbf680QC_Etablissements.csvCENTRE MÉDICAL WESTMOUNT SQUARE550-2-1 Carré Westmount55021550-2-1carré westmountNaNNaNNaNNaN550
2871913081f6ccdef05e0eb772QC_Etablissements.csvCOOPÉRATIVE D'HABITATION L'AFFICHE ROUGE (MTL)4431-4451-4461, 18E AVENUE4431445144614431-4451-446118e avenueNaNNaNNaNNaN4431
290414bee6ab7ec1a494149ac9QC_Etablissements.csvSEEA CHAPITRE DE MONTRÉALA-6055-1255 RUE St-Denisa60551255a-6055-1255rue st-denisNaNNaNNaNNaNa
2922947e08a6fa9956d3238ea5QC_Etablissements.csvSYNDICAT DE COPROPRIÉTÉ DE L'IMMEUBLE 70133902-04-06, RUE NOTRE-DAME OUEST390204063902-04-06rue notre-dame ouestNaNNaNNaNNaN3902
298001d548140cf18d81cd7ba0QC_Etablissements.csvTHAI EXPRESSC-28-1001 RUE UNIVERSITYc281001c-28-1001rue universityNaNNaNNaNNaNc
301122cdce5d659eeaffa888bdQC_Etablissements.csvSYNDICAT DE LA COPROPRIÉTÉ FAUBOURG SAINT-BASI...32-14-34 RUE SAVARIA32143432-14-34rue savariaNaNNaNNaNNaN32
302866465140fb12eb4b9b162fQC_Etablissements.csvPhysio Atlas Complexe de la SantéA-210-15 RUE J-A Bombardiera21015a-210-15rue j-a bombardierNaNNaNNaNNaNa
30367473b6bb406fd2ed3edb05QC_Etablissements.csvInstitut PH7-313-695 CH. Avila73136957-313-695ch. avilaNaNNaNNaNNaN7
30374166dca5085aef7df6000eQC_Etablissements.csvOCCASION VRC-D-170 RUE des Entreprisescd170c-d-170rue des entreprisesNaNNaNNaNNaNc
306226d22f10f268a59e28eddfQC_Etablissements.csvRÉÉÉMIA-1303-101 RUE ST-Jean Boscoa1303101a-1303-101rue st-jean boscoNaNNaNNaNNaNa
30792758a3b82f5f579f83ecacQC_Etablissements.csvSYNDICAT DE LA COPROPRIÉTÉ ROBERVAL 26801650-1652-1654 BOULEVARD ROBERVAL EST1650165216541650-1652-1654boulevard roberval estNaNNaNNaNNaN1650
308259dfa1567bc2b728ad6e58QC_Etablissements.csvSYNDICAT DE LA COPROPRIÉTÉ ROBERVAL 26771622-1620-1622-1624, BOUL. ROBERVAL E.162216201622-16241622-1620-1622-1624boul. roberval e.NaNNaNNaNNaN1622
309766497a9fe988ca5013fa90QC_Etablissements.csvSYNDICAT DE LA COPROPRIÉTÉ ROBERVAL 26761610-1612-1614, BOUL. ROBERVAL EST1610161216141610-1612-1614boul. roberval estNaNNaNNaNNaN1610
310816e49f1183e75dcdd2fb87QC_Etablissements.csv9182-9481 QUÉBEC INC.SS-08-650 RUE Graham-Bellss08650ss-08-650rue graham-bellNaNNaNNaNNaNss
312291bdc85bf25e6c43876bdeQC_Etablissements.csvIMMEUBLES DESJARDINS GAUTHIER INC.600-F-18005 RUE LAPOINTE600f18005600-f-18005rue lapointeNaNNaNNaNNaN600
313893a3f5e055f288f67737fdQC_Etablissements.csvSYNDICAT DE COPROPRIÉTÉ 135-137-139 KING-GEORGE135-137-139, KING GEORGE135137139135-137-139king georgeNaNNaNNaNNaN135
313910c78aa52ad180da56d98cQC_Etablissements.csvBAMBOO GROUPE FINANCIERG-102-360 RUE St-Jacques Og102360g-102-360rue st-jacques oNaNNaNNaNNaNg
317585eff0d8a1c4bc43b957deQC_Etablissements.csvASSURANCES KARINE LEGAULT INC.4-B-118B RUE Principale E4b118b4-b-118brue principale eNaNNaNNaNNaN4
3191686f6f7a143c184535b7a1QC_Etablissements.csvGrand Cru V50-b-15 RUE Merry Sud50b1550-b-15rue merry sudNaNNaNNaNNaN50
3199529a366fe26f45f8764adbQC_Etablissements.csvPHOENIXX STRATÉGIES ET SOLUTIONS D'AFFAIRES310-3-725 BOUL. Lebourgneuf3103725310-3-725boul. lebourgneufNaNNaNNaNNaN310
325668170c960fd28d450ee437QC_Etablissements.csvBOUTIQUE PRFKT PAR EUROPAW-103-380 RUE Saint-Antoinew103380w-103-380rue saint-antoineNaNNaNNaNNaNw
325792cf19d39f31560b0878b7QC_Etablissements.csvNSE AUTOMATECH INC.#31-32-260 RUE ST-Urbain#3132260#31-32-260rue st-urbainNaNNaNNaNNaN#31
327122583fdedc1920af74f281QC_Etablissements.csvFarhat DrummondvilleB-6-520 BOUL. St-Josephb6520b-6-520boul. st-josephNaNNaNNaNNaNb
327914f8441eae3bf14f0c230fQC_Etablissements.csvCentre Innova SoinsA-288-3333 RUE du Carrefoura2883333a-288-3333rue du carrefourNaNNaNNaNNaNa
327977b18949f249e6bf0bf35eQC_Etablissements.csvPROJET OUVERTURE INC.B-111-900 RUE Lacasseb111900b-111-900rue lacasseNaNNaNNaNNaNb
32799930b73779c3211a867103QC_Etablissements.csvNOHA BESTAWROS ET CHRISTIAN SHEFTESHY PHARMACI...RC-02-9080 RUE Hochelagarc029080rc-02-9080rue hochelagaNaNNaNNaNNaNrc
328226e88faf32bb88c781acf8QC_Etablissements.csvClinique de kinésiologie VsquareS-170-360 RUE St-Jacquess170360s-170-360rue st-jacquesNaNNaNNaNNaNs
3284106c0ff76fc493153b9db6QC_Etablissements.csvPRESSE CAFENR-01-1717 RUE BERRInr011717nr-01-1717rue berriNaNNaNNaNNaNnr
3301454cef9377474fba3b8808QC_Etablissements.csvKIN SANG AGENCE DE VOYAGES INC.2-12-998 BOUL. St-Laurent2129982-12-998boul. st-laurentNaNNaNNaNNaN2
331661cad2408c0e5485b47ca8QC_Etablissements.csvTRATTORIA TEVERE À PLACE VICTORIAC-12A-800 RUE SQUARE VICTORIAc12a800c-12a-800rue squarevictoriaNaNNaNNaNc
3323853d559275d8f6a93f4b6fQC_Etablissements.csvFabienne Parente M.D. inc.C-447-2300 RUE Tupperc4472300c-447-2300rue tupperNaNNaNNaNNaNc
33280618cf4844cf065c7a7991QC_Etablissements.csvSYSTÈMES NUMÉRIQUES CHRISTIE CANADAB-528-1001 RUE Lenoirb5281001b-528-1001rue lenoirNaNNaNNaNNaNb
33389214e0fd9d6bba70050087QC_Etablissements.csvLib. aménagement de bureau inc.A-410b-1001 RUE Lenoira410b1001a-410b-1001rue lenoirNaNNaNNaNNaNa
334253b6176fcdd76028a00ff8QC_Etablissements.csvÉcole de Conduite DeLuxe200-2-298 RUE Labelle2002298200-2-298rue labelleNaNNaNNaNNaN200
335295ca7ddd26b61764f74d53QC_Etablissements.csvLa Confiserie Sweet FactoryB-01-401 BOUL. Labelleb01401b-01-401boul. labelleNaNNaNNaNNaNb
3356876aa5059e1dfb4e18614aQC_Etablissements.csvIndustrielle Alliance, Assurance et services f...A-200-3200-A RUE King Oa2003200-aa-200-3200-arue king oNaNNaNNaNNaNa
3359962be8c0dda26ed93d9e19QC_Etablissements.csv9266-6726 Québec inc.F-1-75 CH. de la Garef175f-1-75ch. de la gareNaNNaNNaNNaNf
3369043c1ba4d049f2d2b0d589QC_Etablissements.csvThaï Express (MC)#FC-06-401 BOUL. Labelle#fc06401#fc-06-401boul. labelleNaNNaNNaNNaN#fc
337020612a25fbba15bbb3206eQC_Etablissements.csvLES INVESTISSEMENTS VINSTEVE INC.900-28-1980 Sherbrooke Street W.900281980900-28-1980sherbrooke street w.NaNNaNNaNNaN900
337481e0f4ed516b752957f9cbQC_Etablissements.csvAmyot Gélinas Conseils Inc.3-4-255 RUE De Martigny O342553-4-255rue de martigny oNaNNaNNaNNaN3
337582190a49f20bdd2ded8750QC_Etablissements.csvaccessoires mode CléopâtreM-32-555 RUE Chabanel Om32555m-32-555rue chabanel oNaNNaNNaNNaNm
339315abfc30ed6b1c0aa9b15fQC_Etablissements.csvTabagie LuluG-03-276 RUE St-Jacquesg03276g-03-276rue st-jacquesNaNNaNNaNNaNg
3393668a810808d14448bdf2bdQC_Etablissements.csvSANCTUAIRE DE L'ABONDANCE308-7-695 CH. AVILA3087695308-7-695ch. avilaNaNNaNNaNNaN308
339652c89302272aa66f238ec6QC_Etablissements.csvSYSTÈMES STUDIOTEC INC.C-305-1 Carré Westmountc3051c-305-1carré westmountNaNNaNNaNNaNc
3397696819ff7a6e151b55c40cQC_Etablissements.csvRESTAURANT SUBWAY SHERBROOKE OUESTF-15-1000 RUE SHERBROOKE Of151000f-15-1000rue sherbrooke oNaNNaNNaNNaNf
3401072a60ee8ca53028a7d0beQC_Etablissements.csvCoopérative de l'Université de Sherbrooke - Su...C-140-195 RUE Marquettec140195c-140-195rue marquetteNaNNaNNaNNaNc
34031994bbf237c9ea582fe100QC_Etablissements.csvAMARIS CONSEIL INC.M-201-360 rue Saint Jacques Om201360m-201-360rue saint jacques oNaNNaNNaNNaNm
3407071137d4535f5a0d622ce7QC_Etablissements.csvAu Vieux Duluth BeauportA-55-3333 RUE du Carrefoura553333a-55-3333rue du carrefourNaNNaNNaNNaNa
3432807dacb95b366ddc50a793QC_Etablissements.csvKASA LIVING ®1-08-401 BOUL. Labelle1084011-08-401boul. labelleNaNNaNNaNNaN1
343525e440b4993d7baf8fe29eQC_Etablissements.csvImmigration Keleny Inc.900-21-1980 RUE Sherbrooke O900211980900-21-1980rue sherbrooke oNaNNaNNaNNaN900
3438505f706a3d347d708ef376QC_Etablissements.csvClinique de Chirurgie de ChicoutimiC-700-930 RUE Jacques-Cartierc700930c-700-930rue jacques-cartierNaNNaNNaNNaNc
3441244b9b02f060b0a862f9a8QC_Etablissements.csvINDUSTRIA BRASSERIE ITALIENNEC-112-100 RUE Peelc112100c-112-100rue peelNaNNaNNaNNaNc
344394dbad2ece1a1c832985d9QC_Etablissements.csvDre Marie-Natacha Pilotte Inc.C-700-930 RUE Jacques Cartierc700930c-700-930rue jacques cartierNaNNaNNaNNaNc
344465a1242073196ee7899fd6QC_Etablissements.csvSalon GJ-M870-315 RUE Sainte-Catherine Ejm870315j-m870-315rue sainte-catherine eNaNNaNNaNNaNj
3446353138a005fe5d9abc9fb7QC_Etablissements.csvFromagerie-Charcuterie Juliette15-16-1200 CH. Saint-Jean1516120015-16-1200ch. saint-jeanNaNNaNNaNNaN15
3447162ee00320f96a49361cc4QC_Etablissements.csvCARAVELLE IIC-136-747 , rue du Square-Victoriac136747c-136-747rue du square-victoriaNaNNaNNaNNaNc
345491880e64dc026ca2deb149QC_Etablissements.csvRESTAURANT BAGUETTES DE SZECHUANG-H-I-1950 CH. du Fer-à-Chevalghi-1950g-h-i-1950ch. du fer-à-chevalNaNNaNNaNNaNg
345576584378b42344c83c00f6QC_Etablissements.csvDROITS ET RECOURS EN SANTÉ MENTALE DE LA CÔTE-...E-010-94 RUE Monseigneur-Blanchee01094e-010-94rue monseigneur-blancheNaNNaNNaNNaNe
3459117e9e42e3d3113a622f51QC_Etablissements.csvGestion C.R.D. et associés Inc.2-197-2 RUE Paré219722-197-2rue paréNaNNaNNaNNaN2
3459893110aa496d0b9006bbd1QC_Etablissements.csvSANTÉ CANNABISA-260-15 RUE J.A. Bombardiera26015a-260-15rue j.a. bombardierNaNNaNNaNNaNa
346440a69da26cd6107a9ee449QC_Etablissements.csvDigiCommerce Inc.C-215-1001 RUE Lenoirc2151001c-215-1001rue lenoirNaNNaNNaNNaNc
346913aa87a3112bdc031c86ebQC_Etablissements.csvRESTAURANT MITSUKI SUSHI BAR30-8840 Local F15C-F15B Boul. Leduc308840 local f15cf15b30-8840 local f15c-f15bboul. leducNaNNaNNaNNaN30
348359a44719949b179f9f5359QC_Etablissements.csvIMMEUBLES GASTON GINGRAS INC.132-134 -136-138 rue Principale N132134136-138132-134 -136-138rue principale nNaNNaNNaNNaN132
348615603e2ead89dc15135561QC_Etablissements.csvUNI Vieux MontréalSS-100-507 RUE Place D'Armesss100507ss-100-507rue place d'armesNaNNaNNaNNaNss
3486758d518fe2e164ce771c2dQC_Etablissements.csvSERVICES DE CONSULTATION ALCANCE204-1-765 RUE JARRY O2041765204-1-765rue jarry oNaNNaNNaNNaN204
35356302f543b200484034ef1bQC_Etablissements.csv9335-2391 Québec inc.C-314-1747 RUE CUNARDc3141747c-314-1747rue cunardNaNNaNNaNNaNc
3545598379899ddf1d100acd1eQC_Etablissements.csvCafé plein cup inc.E-1-181 RUE Principalee1181e-1-181rue principaleNaNNaNNaNNaNe
355455ac22bcc0d602cd1ff3a6QC_Etablissements.csvPizzéria No900 SH King OuestA-130-3200 RUE King Ouesta1303200a-130-3200rue king ouestNaNNaNNaNNaNa
356010b1484ff360c56cb9ebebQC_Etablissements.csv9343-3779 Québec inc.45-d-190-B RUE Dorchester45d190-b45-d-190-brue dorchesterNaNNaNNaNNaN45
35671657d5cf62872b8ff08014QC_Etablissements.csvLE GROUPE VÊTEMENTS PISTACHEM-07-555 RUE Chabanel Om07555m-07-555rue chabanel oNaNNaNNaNNaNm
35710664ddfec11a2151764f89QC_Etablissements.csvSOLIDARITÉ HUMAINE CANADA218-B-6615 CH. COTE-DES-NEIGES218b6615218-b-6615ch. cote-des-neigesNaNNaNNaNNaN218
357120a0e8c8880507bb5904feQC_Etablissements.csv9347-4658 Québec inc.Ah-So-200 RUE promenade du Portageahso200ah-so-200rue promenade du portageNaNNaNNaNNaNah
357325ce2dbf9249a60e5d4a4aQC_Etablissements.csvÉditions de L'EstuaireB-301-300 allée des Ursulinesb301300b-301-300allée des ursulinesNaNNaNNaNNaNb
357361b2a3d860e2212d5c1cc4QC_Etablissements.csvDISTRIBUTIONS BUBBLEMANIAC INC.1-2-155 BOUL. Labbé N121551-2-155boul. labbé nNaNNaNNaNNaN1
3574384a5159feea6f849630a6QC_Etablissements.csvSaccade Analytiques Inc.C-0220-400 RUE Montfortc0220400c-0220-400rue montfortNaNNaNNaNNaNc
357488d1f1adab32880a8210f5QC_Etablissements.csvLA CABINE T2-115A-705 RUE Sainte-Catherine O2115a7052-115a-705rue sainte-catherine oNaNNaNNaNNaN2
3594805261f774f0395436e511QC_Etablissements.csvTéléphonie Mobile SiyataA-414-1001 RUE Lenoira4141001a-414-1001rue lenoirNaNNaNNaNNaNa
359558e68ec1250c813654fb35QC_Etablissements.csvA L'ETAT PURNR-01-1717 RUE BERRInr011717nr-01-1717rue berriNaNNaNNaNNaNnr
3596114e718b5287094fb6a5bdQC_Etablissements.csvL'entreprise Technologique du Groupe DigiCommerceC-215-1001 RUE Lenoirc2151001c-215-1001rue lenoirNaNNaNNaNNaNc
3596832cfc83fe2cb58b05012cQC_Etablissements.csvSyndicat de la copropriété 125 A-E LapointeA-E-125 RUE Lapointeae125a-e-125rue lapointeNaNNaNNaNNaNa
360914a39e526349ad7e6e01b7QC_Etablissements.csvFIQ-Syndicat des professionnelles en soins des...S-309-100 rue du Chanoine-Lionel-Groulxs309100s-309-100rue du chanoine-lionel-groulxNaNNaNNaNNaNs
3609156516c22baed935e16a6dQC_Etablissements.csvFIQ-Syndicat des professionnelles en soins des...GS-18-185 rue Durandgs18185gs-18-185rue durandNaNNaNNaNNaNgs
3609217b25b9b4d314dd38e691QC_Etablissements.csvFIQ-Syndicat des professionnelles en soins des...A-0102-2561 ch. de la Lièvre Sa01022561a-0102-2561ch. de la lièvre sNaNNaNNaNNaNa
360922561a4fb4d5918e719b03QC_Etablissements.csvFIQ-Syndicat des professionnelles en soins des...N-761-1525 rue L'Annonciation Nn7611525n-761-1525rue l'annonciation nNaNNaNNaNNaNn
3609243e0d10b4e429e39fe546QC_Etablissements.csvFIQ-Syndicat des professionnelles en soins des...RC-139-29 Vieux chemin d'Okarc13929rc-139-29vieux chemin d'okaNaNNaNNaNNaNrc
36092558dd6bac28df2452d900QC_Etablissements.csvFIQ-Syndicat des professionnelles en soins des...ES-195-55 rue Chénieres19555es-195-55rue chénierNaNNaNNaNNaNes
3609264ac83758c6844fce7e32QC_Etablissements.csvFIQ-Syndicat des professionnelles en soins des...3-130-9100 rue Dumouchel313091003-130-9100rue dumouchelNaNNaNNaNNaN3
36117667f85483a24b9cad8e8eQC_Etablissements.csvSyndicat des professionnelles en soins de la C...F-0878-2601 CH. de la Canardièref08782601f-0878-2601ch. de la canardièreNaNNaNNaNNaNf
36129315c83567d030730218d7QC_Etablissements.csvSociété de philosophie des régions au coeur du...R-4052-3351 RUE des Forgesr40523351r-4052-3351rue des forgesNaNNaNNaNNaNr
361431d93b6e88fc1be654ce57QC_Etablissements.csvAssociation des gens d’affaires du Vieux-Port ...SS-3-109 rue Dalhousiess3109ss-3-109rue dalhousieNaNNaNNaNNaNss
36210988dd89414cdb4adaa3a4QC_Etablissements.csvWestley - Artisans restaurateurs inc.A-140-3200 RUE King Ouesta1403200a-140-3200rue king ouestNaNNaNNaNNaNa
36221335c90d4f808a9d8026f4QC_Etablissements.csvOverHop Bières Artisanales5-6-650 RUE Gaudette566505-6-650rue gaudetteNaNNaNNaNNaN5
3623983658fcf27f6879f98fe0QC_Etablissements.csvSYNDICAT CANADIEN DE LA FONCTION PUBLIQUE, SEC...111-A-107E RUE Rue111a107e111-a-107erue rueNaNNaNNaNNaN111
3631348425a218c0155c813d30QC_Etablissements.csv2867-8118 QUÉBEC INC.CM-08-5440 RUE Sherbrooke Ecm085440cm-08-5440rue sherbrooke eNaNNaNNaNNaNcm
364403a463974e6fa8a3be857eQC_Etablissements.csvSUBWAY # 26176100-5-900 BOUL. Grignon1005900100-5-900boul. grignonNaNNaNNaNNaN100
3647724249a879464006faf961QC_Etablissements.csvL'Abeille impériale inc.A-291-3333 RUE du Carrefoura2913333a-291-3333rue du carrefourNaNNaNNaNNaNa
365727e53d3a38dc4b5381a9d1QC_Etablissements.csvFenghua Média Groupe du Canada#00-04-200 BOUL. René-Lévesque O#0004200#00-04-200boul. rené-lévesque oNaNNaNNaNNaN#00
36726745a9e95c102cad3e5db9QC_Etablissements.csvAIESEC de l'École des sciences de la gestion d...R-M213-315 RUE Sainte-Catherine Erm213315r-m213-315rue sainte-catherine eNaNNaNNaNNaNr
3673258f80225d6342601caa83QC_Etablissements.csvFRANÇOIS GOUGEON INC.7e-F-1051 RUE Sanguinet7ef10517e-f-1051rue sanguinetNaNNaNNaNNaN7e
367381772d3dc3885f741a21ddQC_Etablissements.csvJITNEY EN LIGNEg-102-360 RUE Saint-Jacques Og102360g-102-360rue saint-jacques oNaNNaNNaNNaNg
3676807e6b3ca26b78bcd215d7QC_Etablissements.csvSushi Haru HaruE-7-181 RUE Principalee7181e-7-181rue principaleNaNNaNNaNNaNe
368107ac3bf716c68d9eba94d1QC_Etablissements.csvComptabilité Incloud100-06-7140 RUE Albert-Einstein100067140100-06-7140rue albert-einsteinNaNNaNNaNNaN100
368807b10befb0244abc2c2a8cQC_Etablissements.csvPuzzle Dispositifs MédicauxA-419-1001 RUE Lenoira4191001a-419-1001rue lenoirNaNNaNNaNNaNa
36896812074b21a97c990eb01cQC_Etablissements.csvLes Productions NewA inc.A-13-39 RUE Kenosia1339a-13-39rue kenosiNaNNaNNaNNaNa
3691415609ef75374f9fc95c9eQC_Etablissements.csvGESTION IMMOBILIÈRE SBL INC.210-6-44 RTE du Président-Kennedy210644210-6-44rte du président-kennedyNaNNaNNaNNaN210
370848fb9105dcc041cfd3e16bQC_Etablissements.csvLes Ingrédients Potentia353-101-15 BLVD Don Quichotte35310115353-101-15blvd don quichotteNaNNaNNaNNaN353
3714818179ddcdbb7b13e54791QC_Etablissements.csvLES SYSTÈMES BLUBRIM INC.J-1120-400 RUE Montfortj1120400j-1120-400rue montfortNaNNaNNaNNaNj
371910f011a82ba3d6abf3a824QC_Etablissements.csvPizzeria Heirloom Le CentralK-10-30 rue Sainte-Catherine Ok1030k-10-30rue sainte-catherine oNaNNaNNaNNaNk
372030a5e414d8b70a0d80edfdQC_Etablissements.csvORGANISATION CANADIENNE POUR LE DEVELOPPEMENT ...360-07-55 RUE LOUVAIN O3600755360-07-55rue louvain oNaNNaNNaNNaN360
372087593ca78ed6569257b29cQC_Etablissements.csvAxya Inc.J-2140-400 RUE Montfortj2140400j-2140-400rue montfortNaNNaNNaNNaNj
372951890e4abd435325003310QC_Etablissements.csvDépanneur LaRoseA1-225-10 RUE DE L'ESPINAYa122510a1-225-10rue de l'espinayNaNNaNNaNNaNa1
373381a4a46c9c7975d22f15f4QC_Etablissements.csvClinique Multidisciplinaire d'Aylmer inc.B-102-745 CH. Aylmerb102745b-102-745ch. aylmerNaNNaNNaNNaNb
3744598da87d452f9ccd5d6545QC_Etablissements.csvInstitut d'éthique en IA de MontréalB-111-1001 RUE Lenoirb1111001b-111-1001rue lenoirNaNNaNNaNNaNb
374676177035089feadf6db9c4QC_Etablissements.csvLes cuisiniers différentsP-11-4200 CH. De la savannep114200p-11-4200ch. de la savanneNaNNaNNaNNaNp
3749735053d94174d7f2b4b4baQC_Etablissements.csv9404-4567 Québec inc.241-7-695 CH. Avila2417695241-7-695ch. avilaNaNNaNNaNNaN241
375259fdd92852c1e3ca9a971fQC_Etablissements.csv2760061 Canada Inc.B-123-215 RUE Peelb123215b-123-215rue peelNaNNaNNaNNaNb
37546620ffb322c2f24ae29b7cQC_Etablissements.csvGroupe DJ Santé Inc.200-A-1388 RUE Fleury E200a1388200-a-1388rue fleury eNaNNaNNaNNaN200
3769774a790c19b59f693d15e9QC_Etablissements.csvLa CantingR-7-1751 RUE Richardsonr71751r-7-1751rue richardsonNaNNaNNaNNaNr
377994d0896e7b829aa5cdcd38QC_Etablissements.csvZéro émissionA-8440-3101 CH. DE LA TOURa84403101a-8440-3101ch. de la tourNaNNaNNaNNaNa
3799655c2a2a37ce603a4b62d0QC_Etablissements.csvCOOPSCO CÉGEP DE GRANBYC-104-235 RUE Saint-Jacquesc104235c-104-235rue saint-jacquesNaNNaNNaNNaNc
380781b435916ab7a0ba44cb4cQC_Etablissements.csvTECHNOLOGIE PATRON LTÉEB-252-1001 rue Lenoirb2521001b-252-1001rue lenoirNaNNaNNaNNaNb
38477500402963c194b5079056QC_Etablissements.csviA Gestion privée de patrimoine inc.R-10-200 RUE Montcalmr10200r-10-200rue montcalmNaNNaNNaNNaNr
384832c49afc7f981d8f9f91f5QC_Etablissements.csviA Gestion privée de patrimoine inc.A-200-3200-A RUE King Oa2003200-aa-200-3200-arue king oNaNNaNNaNNaNa
385984cc303b5b1382e8c81432QC_Etablissements.csvLUNETTERIE NEW LOOKB-30-A-95 RUE Sainte-Catherine Ob30a-95b-30-a-95rue sainte-catherine oNaNNaNNaNNaNb
385997445cafe67023ef39bc34QC_Etablissements.csvGreiche & Scaff18-19-1111 BOUL. Jutras E1819111118-19-1111boul. jutras eNaNNaNNaNNaN18
385999b05f06214a2893effe8aQC_Etablissements.csvGreiche & Scaff3-110-705 RUE Sainte-Catherine O31107053-110-705rue sainte-catherine oNaNNaNNaNNaN3
38604922492ea45589e38e9c59QC_Etablissements.csvGreiche & Scaff4-5-300 RUE Barkoff453004-5-300rue barkoffNaNNaNNaNNaN4
3860508bcf5a7b7ec91310f51bQC_Etablissements.csvGreiche & ScaffS10-12-6000 RUE Henri-Bourassa Es10126000s10-12-6000rue henri-bourassa eNaNNaNNaNNaNs10
388183fdbbffa78139688f1dd9QC_Etablissements.csvBENNY & CO. (MC) - ESPACE MONTMORENCY2-0107-1900 RUE Jacques-Tétreault2010719002-0107-1900rue jacques-tétreaultNaNNaNNaNNaN2
3890355efe7cb40b05e6bff31bQC_Etablissements.csvLa Clef de la Réussite Inc.203-28-460 RUE Du Parc20328460203-28-460rue du parcNaNNaNNaNNaN203
4001036ba6d4f882933532a7a6QC_Etablissements.csvELMALEH, DAVIDC-114-1001 RUE LENOIRc1141001c-114-1001rue lenoirNaNNaNNaNNaNc
40889306093219ba73ae9864eeQC_Etablissements.csvCLINIQUE CHIROPRATIQUE ST-CHARLESB-8-101 RUE Amherstb8101b-8-101rue amherstNaNNaNNaNNaNb
409484cd647fd2f72072be5a58QC_Etablissements.csvveillette, serge401 1er-et-10e Rang O401 1eret10e401 1er-et-10erang oNaNNaNNaNNaN401 1er
415072a9d1f0cb35d28b7dfbb8QC_Etablissements.csvNico Suave#R-5-174 BOUL. Greber#r5174#r-5-174boul. greberNaNNaNNaNNaN#r
415730850dfa7196f2ba118e7eQC_Etablissements.csvSIGNATURE INVITATIONS1123-B-433 RUE Chabanel O1123b4331123-b-433rue chabanel oNaNNaNNaNNaN1123
4198066902a33acfa33bf8b27dQC_Etablissements.csvLA COUTELLERIE7-33-455 AV. MATHERS7334557-33-455av. mathersNaNNaNNaNNaN7
4246087c791688dbb50a4cb382QC_Etablissements.csvSpa Dépot12-13-55 RUE claude audy O12135512-13-55rue claude audy oNaNNaNNaNNaN12
4349243d280cc07ebf908dc59cQC_Etablissements.csvRAPHAEL BARAZIN, CPABur.10-360-55 RUE Louvain Obur.1036055bur.10-360-55rue louvain oNaNNaNNaNNaNbur.10
440020360b7ee14ad9578dd953QC_Etablissements.csvMARIO LAMPRON INFIRMIER EN SOINS PODOLOGIQUES212-A-1245 CH. SAINTE-FOY212a1245212-a-1245ch. sainte-foyNaNNaNNaNNaN212
4406634cb979e0e2d460c93179QC_Etablissements.csvRestaurant JapoteF-1-1000 RUE Sherbrooke Of11000f-1-1000rue sherbrooke oNaNNaNNaNNaNf
4419971d9e6a6c8870e1e4f00cQC_Etablissements.csvV.R.B StudioE-200-160 RUE St-Viateur Ee200160e-200-160rue st-viateur eNaNNaNNaNNaNe
44346507f8c376eb65ad679b4dQC_Etablissements.csvKRACAUER, JOSEPHPH-2-1130 RUE Sherbrooke Oph21130ph-2-1130rue sherbrooke oNaNNaNNaNNaNph
4450487b7045f37039cf87c5a1QC_Etablissements.csvStudio Kidz6-2-15 rue de Rotterdam62156-2-15rue de rotterdamNaNNaNNaNNaN6
445339bd060d2e92869214f2bdQC_Etablissements.csvCABINET D'IMMIGRATION RESIDER O CANADA203-4-68 BOUL. Cartier O203468203-4-68boul. cartier oNaNNaNNaNNaN203
4458553f7867061df0b5002292QC_Etablissements.csvCabinet d'orthophonie - Jessica Bélisle MacquartB-102-745 CH. d'Aylmerb102745b-102-745ch. d'aylmerNaNNaNNaNNaNb
4463043dd41c829a73ce24775cQC_Etablissements.csvArtiste Genest de Brière100-03-17 rue de la Barricade1000317100-03-17rue de la barricadeNaNNaNNaNNaN100
446381e704d14474d25ed0c095QC_Etablissements.csvChenil Doggy Doc642 10e-et-1er Rang E642 10eet1er642 10e-et-1errang eNaNNaNNaNNaN642 10e
446903f91172554175112fcef4QC_Etablissements.csvClinique d'Ostéopathie et Thérapie de Sport Le...B-374-1001 RUE Lenoirb3741001b-374-1001rue lenoirNaNNaNNaNNaNb
448007fb9fa9161008007283afQC_Etablissements.csvSerrano, Diana200-E-160 RUE Saint Viateur E200e160200-e-160rue saint viateur eNaNNaNNaNNaN200
448901577ddeedbd1d52428e5dQC_Etablissements.csvPetit, Myriam726 10e-et-1er Rang E726 10eet1er726 10e-et-1errang eNaNNaNNaNNaN726 10e
44950377d91f095838c140378bQC_Etablissements.csvSam le rembourreur001-B-2025-A RUE Masson001b2025-a001-b-2025-arue massonNaNNaNNaNNaN001
450051e090b64635aa174b8c62QC_Etablissements.csvExtermination Wildlife Outaouais6-7-225 RUE Principale672256-7-225rue principaleNaNNaNNaNNaN6
450540dcd895c29e56802e998fQC_Etablissements.csvEspace Mêve7-8-51 BOUL. BOULEVARD78517-8-51boul. boulevardNaNNaNNaNNaN7
450884aecd6922e9e194c8b982QC_Etablissements.csvClinique de Masso Kinésithérapie Lebourgneuf310-19-725 BOUL. Lebourgneuf31019725310-19-725boul. lebourgneufNaNNaNNaNNaN310
453264544ec05ed23932002ac2QC_Etablissements.csvCentre Des OnglesB-01-1401 CH. Chamblyb011401b-01-1401ch. chamblyNaNNaNNaNNaNb
4535469cbe66b9a097d08223c4QC_Etablissements.csvFERME ADJULO726 10e-et-1er Rang E726 10eet1er726 10e-et-1errang eNaNNaNNaNNaN726 10e
4552935a8293e53b1aec51aabdQC_Etablissements.csvAtelier ExpressA-29-11000A RUE Shebrooke Ea2911000aa-29-11000arue shebrooke eNaNNaNNaNNaNa
45701190d49387929a22606cd6QC_Etablissements.csvTanguay , Eric395 10e-et-1er Rang O395 10eet1er395 10e-et-1errang oNaNNaNNaNNaN395 10e
4582164efe70bf4937933c84c9QC_Etablissements.csvAtelier DNHN282-A-2065 RUE Parthenais282a2065282-a-2065rue parthenaisNaNNaNNaNNaN282
4583704a07872ce03c2f306eb1QC_Etablissements.csvPlatinum Spa & Beauté68-2-7500 BOUL. DES GALERIES D'ANJOU682750068-2-7500boul. des galeries d'anjouNaNNaNNaNNaN68
46474506f14f29c3733b82bfa7QC_Etablissements.csvVINTAGE MUSTSCK-05-1 CARRÉ WESTMOUNTck051ck-05-1carré westmountNaNNaNNaNNaNck
46637535f09bb7e88965e92d48QC_Etablissements.csvLUXENCHANTE236-54-102 BOUL. CITES DES JEUNES23654102236-54-102boul. cites des jeunesNaNNaNNaNNaN236
469348a0b1c3092eeb256f89a7QC_Etablissements.csvYoung, ChristopherB-360-1001 RUE Lenoirb3601001b-360-1001rue lenoirNaNNaNNaNNaNb
472786fb90f3455a528cafabe7QC_Etablissements.csvAMYOT GÉLINAS, s.e.n.c.r.l.3-4-255 RUE De Martigny342553-4-255rue de martignyNaNNaNNaNNaN3
4732265cf51debfb4feb5698a4QC_Etablissements.csvIMMEUBLES MAXIBEL ENR.1313-1315-1317, RUE MAGUIRE1313131513171313-1315-1317rue maguireNaNNaNNaNNaN1313
47407985b604d5c336a774e4e9QC_Etablissements.csvLES PLACEMENTS LOPRÉ S.E.C.902-906-908, MGR GRANDIN902906908902-906-908mgr grandinNaNNaNNaNNaN902
481144eed543a8e5e2f46ee59fQC_Etablissements.csvFiducie Gestion Immodo340 -342-344 Rue Ernest-Bourque340342344340 -342-344rue ernest-bourqueNaNNaNNaNNaN340
481252b3c030d22183affbb84eQC_Etablissements.csvATIS PORTES ET FENÊTRES1015 -1025-1035 Chemin du Coteau1015102510351015 -1025-1035chemin du coteauNaNNaNNaNNaN1015
48169275523155ac3757ccd85cQC_Etablissements.csvJeux de la Communication - UQÀMJ-1185-1564 RUE Saint-Denisj11851564j-1185-1564rue saint-denisNaNNaNNaNNaNj
481876c57cc04195591a81712bQC_Etablissements.csvLe Borgne Rizk ArchitectureA-417-1001 RUE Lenoira4171001a-417-1001rue lenoirNaNNaNNaNNaNa
484116b7bdc5d7c3fff17cbf89QC_Etablissements.csvSyndicat des chargés et chargées de cours de l...E-311-300 Allée des Ursulinese311300e-311-300allée des ursulinesNaNNaNNaNNaNe
48514779ff4e844641ad1bd8acQC_Etablissements.csvInstitut québécois d'ébénisterie2-15-14 RUE Soumande215142-15-14rue soumandeNaNNaNNaNNaN2
48517788a34fdee09a056116baQC_Etablissements.csvLe Département bar et bouffeA-M640-400 RUE Sainte-Catherine Eam640400a-m640-400rue sainte-catherine eNaNNaNNaNNaNa
486671b5ac59ff53552de3eeb0QC_Etablissements.csvOFFICE DES PERSONNES HANDICAPEES DU QUEBECCRC-02-85 RUE De Martigny Ocrc0285crc-02-85rue de martigny oNaNNaNNaNNaNcrc
4867927f215c592b0ccba1dd29QC_Etablissements.csvMinistère de l’Énergie et des Ressources natur...C-422-5700 4e Avenue Oc4225700c-422-57004e avenue oNaNNaNNaNNaNc
4867939d6117ca09404a211313QC_Etablissements.csvMinistère de l’Énergie et des Ressources natur...C-402-5700 4e Avenue Oc4025700c-402-57004e avenue oNaNNaNNaNNaNc
4867940f7dc5946ca4bdd75ea6QC_Etablissements.csvMinistère de l’Énergie et des Ressources natur...D-413-5700 4e Avenue Od4135700d-413-57004e avenue oNaNNaNNaNNaNd
487028c7b6c147e788f759368eQC_Etablissements.csvDI Bas-Saint-Laurent et Gaspésie-îles-de-la-Ma...SS-20-337 rue Moreaultss20337ss-20-337rue moreaultNaNNaNNaNNaNss
491858e8a43c4c35ec3031d652QC_Etablissements.csvCentre externe de néphrologie Saint-Lambert19-20-299 BOUL. Sir-Wilfrid-Laurier192029919-20-299boul. sir-wilfrid-laurierNaNNaNNaNNaN19
4921118d38863e9cadf00179c7QC_Etablissements.csvGMF-R Collectif Médica102-104-5700 rue Saint-Zotique E.1021045700102-104-5700rue saint-zotique e.NaNNaNNaNNaN102
49897514ddc42ab7745c011a08ON_Toronto_Business_Licences.csvO B N SECURITY MANAGEMENT SERVICES350-370-390 QUEENS QUAY W350370390350-370-390queens quay wNaNNaNNaNNaN350
512638c223662af8bd86429b29ON_Toronto_Business_Licences.csvPERIYA KADAI744-744A-746 MARKHAM RD744744a746744-744a-746markham rdNaNNaNNaNNaN744
51884494688ebbc933c2444697ON_Toronto_Business_Licences.csvWEST INDIAN FINE FOODS3601 LAWRENCE AVE E, #4-5-6#456#4-5-6lawrence ave eNaNNaNNaNNaN#4
52024875e041034c50f8bff384ON_Toronto_Business_Licences.csvWEST INDIAN FINE FOODS3601 LAWRENCE AVE E, #4-5-6#456#4-5-6lawrence ave eNaNNaNNaNNaN#4
5209806af1aac415c94d591bfdON_Toronto_Business_Licences.csvSUNRISE CARIBBEAN RESTAURANT3225 EGLINTON AVE E, #1-2-3#123#1-2-3eglinton ave eNaNNaNNaNNaN#1
527705a325b83cae61ddf3582eON_Toronto_Business_Licences.csvSUNRISE CARIBBEAN RESTAURANT3225 EGLINTON AVE E, #1-2-3#123#1-2-3eglinton ave eNaNNaNNaNNaN#1
543237aefe1a197f93839f6aeeON_Toronto_Business_Licences.csvFREDDY'S CAR SALES2899 STEELES AVE W, #5-6-7#567#5-6-7steeles ave wNaNNaNNaNNaN#5
572395afcc8281423927eb1c16ON_Toronto_Business_Licences.csvEL SIPOTE2007 LAWRENCE AVE W, #14-15-16#141516#14-15-16lawrence ave wNaNNaNNaNNaN#14
57338647793f681cce51eb6810ON_Toronto_Business_Licences.csvSUGAR LOUNGE1085 BELLAMY RD N, #4-5-6#456#4-5-6bellamy rd nNaNNaNNaNNaN#4
575854872f773ff13571cf4e96ON_Toronto_Business_Licences.csvDADDY'S LOUNGE2007 LAWRENCE AVE W, #14-15-16#141516#14-15-16lawrence ave wNaNNaNNaNNaN#14
577801e0697e9e02b0d5973985ON_Toronto_Business_Licences.csvFALAFEL EXPRESS1300 FINCH AVE W, #24-25-26#242526#24-25-26finch ave wNaNNaNNaNNaN#24
58475696d1af2e4374f9c385dbON_Toronto_Business_Licences.csvREMELY'S RESTAURANT4830 SHEPPARD AVE E, #12R-13-16#12r1316#12r-13-16sheppard ave eNaNNaNNaNNaN#12r
5895463cc97a867e0fd2477d3dON_Toronto_Business_Licences.csvCENTRAL BAR & GRILL2007 LAWRENCE AVE W, #14-15-16#141516#14-15-16lawrence ave wNaNNaNNaNNaN#14
592915496822dcb8b71ef460beON_Toronto_Business_Licences.csvREMELY'S RESTAURANT4830 SHEPPARD AVE E, #12R-13-16#12r1316#12r-13-16sheppard ave eNaNNaNNaNNaN#12r
59595016761be1ad528f0d5495ON_Toronto_Business_Licences.csvR T FINE JEWELLERS INC1921 EGLINTON AVE E, #7-8-9#789#7-8-9eglinton ave eNaNNaNNaNNaN#7
596563816586df70741d20d4b5ON_Toronto_Business_Licences.csvR T FINE JEWELLERS1921 EGLINTON AVE E, #7-8-9#789#7-8-9eglinton ave eNaNNaNNaNNaN#7
795724b8aabcd6434adc0b09daIndigenous_Business_Directory.csvDELORME ENTERPRISES LTDSE 1/2 26-74-16 w5m26741626-74-16w5mNaNNaNNaNNaN26
\n
" + }, + "metadata": {} + } + ], + "source": [ + "# Extract only entries that spillover their unit+street_no values\n", + "pd.options.display.max_columns = None\n", + "pd.options.display.max_rows = None\n", + "new_df = df[~df['spill'].isna()]\n", + "new_df = new_df[['idx', 'localfile', 'business_name', 'full_address', 'LP2_unit', 'LP2_street_no', 'spill', 'LP_street_no', 'LP_street_name', 'LP_City', 'LP_Province', 'LP_PostCode', 'LP_Unit', 'LP3_unit']]\n", + "new_df_path = '/home/jovyan/ODBiz/4-Parsing/double_check/parsed_with_spillover.csv'\n", + "new_df.to_csv(new_df_path, index = False)\n", + "print(f'Saved new_df to {new_df_path}')\n", + "display(new_df)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "BC_Victoria_Business_Licences.csv\nBC_Indigenous_Business_Listings.csv\nBC_Chilliwack_Business_Licences.csv\nON_Brampton_Business_Directory.csv\nQC_Etablissements.csv\nON_Toronto_Business_Licences.csv\nIndigenous_Business_Directory.csv\n" + ] + } + ], + "source": [ + "# Print out all affected datasets\n", + "arr = pd.unique(new_df['localfile'])\n", + "for i in arr:\n", + " print(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saved new_df to /home/jovyan/ODBiz/4-Parsing/double_check/parsed_with_spillover2.csv\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": " idx localfile \\\n608 1aaf470769d4d02c2ba8 BC_Victoria_Business_Licences.csv \n1054 bf927f38280978c45d52 BC_Victoria_Business_Licences.csv \n1239 cb0576b2e074711fe258 BC_Victoria_Business_Licences.csv \n1340 150bd858e17adf5796d9 BC_Victoria_Business_Licences.csv \n1582 23f92529e3b00f5220a1 BC_Victoria_Business_Licences.csv \n1584 9311d646bd8abc777a19 BC_Victoria_Business_Licences.csv \n2474 e511e2d61a76ea455da3 BC_Victoria_Business_Licences.csv \n2770 16f296dee2880a32b64c BC_Victoria_Business_Licences.csv \n2793 c3fdfac470e53a586ee3 BC_Victoria_Business_Licences.csv \n2798 ba8ff3b4a123d49a10c1 BC_Victoria_Business_Licences.csv \n3395 5d7c902a4485da28ba3b BC_Victoria_Business_Licences.csv \n3579 3433be4ccd81035db6b6 BC_Victoria_Business_Licences.csv \n3705 f3715c160a1f36c95aab BC_Victoria_Business_Licences.csv \n4658 058bea397fdbdc57b1e4 BC_Victoria_Business_Licences.csv \n5279 3097014846a21fc4b6f4 BC_Victoria_Business_Licences.csv \n6010 2347fda8a3762b9da41d BC_Victoria_Business_Licences.csv \n6165 7ea34407aeebac77311e BC_Victoria_Business_Licences.csv \n6616 9572258fefc677a8fc68 BC_Victoria_Business_Licences.csv \n6751 2efffd1553dcecba0b50 BC_Victoria_Business_Licences.csv \n6782 72af67acc6c8992e9f07 BC_Victoria_Business_Licences.csv \n240496 d9b59b89b7c9f71edf66 BC_Chilliwack_Business_Licences.csv \n245607 6952f27f8f32e812cf03 ON_Brampton_Business_Directory.csv \n245626 02d77f2c59136d3a6d7b ON_Brampton_Business_Directory.csv \n246571 afa96e09bc0c8c987326 ON_Brampton_Business_Directory.csv \n246989 6b4c488878da758a5c79 ON_Brampton_Business_Directory.csv \n247248 209073c9a1cd06244595 ON_Brampton_Business_Directory.csv \n248440 8358f31c9442316598fc ON_Brampton_Business_Directory.csv \n248835 05eeeeaa06ba099aff82 ON_Brampton_Business_Directory.csv \n248852 067f5b3bd0cb413d016e ON_Brampton_Business_Directory.csv \n248963 6593b2db7cf5a05a86f1 ON_Brampton_Business_Directory.csv \n249117 7ba728c2c0c81fe8893b ON_Brampton_Business_Directory.csv \n249386 7d356a4136837f0e16db ON_Brampton_Business_Directory.csv \n249461 4b96bb9fb8a61074b43c ON_Brampton_Business_Directory.csv \n249663 89d9379007bfc34d86ec ON_Brampton_Business_Directory.csv \n250547 d72f56efc2da07bcbef9 ON_Brampton_Business_Directory.csv \n250840 d868cb6db85e2024cff4 ON_Brampton_Business_Directory.csv \n250848 0b746cf821087d844de7 ON_Brampton_Business_Directory.csv \n250960 05073f05b6004cd5ba82 ON_Brampton_Business_Directory.csv \n250961 621f07a335bf5ddd9c83 ON_Brampton_Business_Directory.csv \n250970 566dd2abb1680fe0b447 ON_Brampton_Business_Directory.csv \n251215 282ae5e0efc353a3cbd5 ON_Brampton_Business_Directory.csv \n251597 f923bb2fd5ab5f41d605 ON_Brampton_Business_Directory.csv \n251929 f324da0c70c43fdac329 ON_Brampton_Business_Directory.csv \n252331 74d4b6b3410c918c2817 ON_Brampton_Business_Directory.csv \n252417 2ce85444ef716093acb4 ON_Brampton_Business_Directory.csv \n252451 2a80d5f48781f0b2c8ea ON_Brampton_Business_Directory.csv \n252566 de4bd5c4e23c74fc3045 ON_Brampton_Business_Directory.csv \n252648 82ee061c0f9bd1874004 ON_Brampton_Business_Directory.csv \n\n business_name \\\n608 VICTORIA ADVANCED TECHNOLOGY COUNCIL (VIATEC) \n1054 GROUND CONTROL CAFE \n1239 RUMBLE NUTRITION LTD \n1340 BLENZ COFFEE \n1582 VICTORIA PIE COMPANY \n1584 CTC TRAINCANADA \n2474 LA FIESTA CAFE \n2770 ALTA BERING \n2793 HANK'S \n2798 NOWHERE A RESTAURANT \n3395 AVIS CANADA \n3579 DOWNTOWN VICTORIA OPTOMETRY \n3705 MARLIN TRAVEL \n4658 EDWARD JONES \n5279 CRESCENDO FOR HAIR \n6010 ROAST \n6165 RFDM SOLUTIONS INC \n6616 TESSERACT 2.0 COMPUTING \n6751 WAFFLEBEAST \n6782 GLOBAL KNOWLEDGE NETWORK (CANADA) \n240496 COOKIES GRILL \n245607 SIDHU AUTO AND TRUCK REPAIR SERVICES \n245626 COPPER RIDGE PHARMACY \n246571 DAVROC AND ASSOCIATES LTD. \n246989 BRAMPTON COSMETIC \n247248 ST. GEORGE MEDICAL CENTRE \n248440 INDIA RAINBOW COMMUNITY SERVICES OF PEEL \n248835 DYNACARE \n248852 MAXPOWER FRICTION INC. \n248963 KUMON MATH AND READING CENTRE \n249117 JCR WOODWORKING \n249386 CANTRINA FREEZER \n249461 DOLLAR POWER \n249663 FOODASIA \n250547 ALTUM HEALTH CLINIC \n250840 MCLEANS LEARNING ACADEMY \n250848 DHABA EXPRESS \n250960 DENTISTRY DR. ANDHAWA \n250961 JOHAL SWEETS AND RESTAURANT \n250970 A2Z KITCHEN CABINETS \n251215 MENASHA PACKAGING \n251597 CLAREVILLE DISTINCTIVE KITCHENS AND BATHS \n251929 MODHANI INC. \n252331 PVC ENTERPRISES LTD. \n252417 KLOMAN STUDIO \n252451 GLOBAL STAFFING AND DRIVERS SERVICES LTD \n252566 DESIGNER JEWELLERY BY TINA \n252648 HOPE CANDLE COMPANY LTD. \n\n full_address LP2_unit LP2_street_no \\\n608 4-FLR-777 FORT ST VICTORIA BC V8W 1G9 4--flr 777 \n1054 G-FLR-777 FORT ST VICTORIA BC V8W 1G9 g--flr 777 \n1239 3-FLR-777 FORT ST VICTORIA BC V8W 1G9 3--flr 777 \n1340 G-1-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--1 1001 \n1582 6-S10-1701 DOUGLAS ST VICTORIA BC V8W 0C1 6--s10 1701 \n1584 2-FLR-777 FORT ST VICTORIA BC V8W 1G9 2--flr 777 \n2474 G-12-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--12 1001 \n2770 3-FLR-777 FORT ST VICTORIA BC V8W 1G9 3--flr 777 \n2793 G-2-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--2 1001 \n2798 G-4-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--4 1001 \n3395 G-2-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--2 1001 \n3579 G-9-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--9 1001 \n3705 G-3-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--3 1001 \n4658 G-10-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--10 1001 \n5279 G-5-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--5 1001 \n6010 6-S5-1701 DOUGLAS ST VICTORIA BC V8W 0C1 6--s5 1701 \n6165 3-FLR-777 FORT ST VICTORIA BC V8W 1G9 3--flr 777 \n6616 G-11-1001 DOUGLAS ST VICTORIA BC V8W 2C5 g--11 1001 \n6751 6-S8-1701 DOUGLAS ST VICTORIA BC V8W 0C1 6--s8 1701 \n6782 2-FLR-777 FORT ST VICTORIA BC V8W 1G9 2--flr 777 \n240496 A-3-44335 YALE RD, CHILLIWACK BC V2R 4H2 a--3 44335 \n245607 13-14-28 MELANIE DR 13--14 28 \n245626 B-2-8015 FINANCIAL DR b--2 8015 \n246571 19-21-2051 WILLIAMS PKY 19--21 2051 \n246989 2-4-111 QUEEN ST E 2--4 111 \n247248 8-9-50 SKY HARBOUR DR 8--9 50 \n248440 3000-B1-180 SANDALWOOD PKY E 3000--b1 180 \n248835 8-9-9525 MISSISSAUGA RD 8--9 9525 \n248852 46-47-2500 WILLIAMS PKY 46--47 2500 \n248963 E-102-65 MONTPELIER ST e--102 65 \n249117 44-45-2500 WILLIAMS PKY 44--45 2500 \n249386 1-3-4 WILKINSON RD 1--3 4 \n249461 20-21-380 BOVAIRD DR E 20--21 380 \n249663 12-14-791 BOVAIRD DR W 12--14 791 \n250547 1-4-10545 BRAMALEA RD 1--4 10545 \n250840 1-4-15 ASHBY FIELD RD 1--4 15 \n250848 7-8-380 BOVAIRD DR E 7--8 380 \n250960 5-6-10 SQUIRE ELLIS DR 5--6 10 \n250961 12-14-10 SQUIRE ELLIS DR 12--14 10 \n250970 17-18-227 ADVANCE BLVD 17--18 227 \n251215 C-D-9150 AIRPORT RD c--d 9150 \n251597 9-11-253 SUMMERLEA RD 9--11 253 \n251929 F-G-21 REGAN RD f--g 21 \n252331 10-12-2084 STEELES AVE E 10--12 2084 \n252417 26-B-2074 STEELES AVE E 26--b 2074 \n252451 2-F-90 KENNEDY RD S 2--f 90 \n252566 44-45-53 PARKHURST SQ 44--45 53 \n252648 15-16-28 MELANIE DR 15--16 28 \n\n spill LP_street_no LP_street_name LP_City LP_Province \\\n608 777 4--flr--777 fort st victoria bc \n1054 777 g--flr--777 fort st victoria bc \n1239 777 3--flr--777 fort st victoria bc \n1340 1001 g--1--1001 douglas st victoria bc \n1582 1701 6--s10--1701 douglas st victoria bc \n1584 777 2--flr--777 fort st victoria bc \n2474 1001 g--12--1001 douglas st victoria bc \n2770 777 3--flr--777 fort st victoria bc \n2793 1001 g--2--1001 douglas st victoria bc \n2798 1001 g--4--1001 douglas st victoria bc \n3395 1001 g--2--1001 douglas st victoria bc \n3579 1001 g--9--1001 douglas st victoria bc \n3705 1001 g--3--1001 douglas st victoria bc \n4658 1001 g--10--1001 douglas st victoria bc \n5279 1001 g--5--1001 douglas st victoria bc \n6010 1701 6--s5--1701 douglas st victoria bc \n6165 777 3--flr--777 fort st victoria bc \n6616 1001 g--11--1001 douglas st victoria bc \n6751 1701 6--s8--1701 douglas st victoria bc \n6782 777 2--flr--777 fort st victoria bc \n240496 44335 a--3--44335 yale rd chilliwack bc \n245607 28 13--14--28 melanie dr NaN NaN \n245626 8015 b--2--8015 financial dr NaN NaN \n246571 2051 19--21--2051 williams pky NaN NaN \n246989 111 2--4--111 queen st e NaN NaN \n247248 50 8--9--50 sky harbour dr NaN NaN \n248440 180 3000--b1--180 sandalwood pky e NaN NaN \n248835 9525 8--9--9525 mississauga rd NaN NaN \n248852 2500 46--47--2500 williams pky NaN NaN \n248963 65 e--102--65 montpelier st NaN NaN \n249117 2500 44--45--2500 williams pky NaN NaN \n249386 4 1--3--4 wilkinson rd NaN NaN \n249461 380 20--21--380 bovaird dr e NaN NaN \n249663 791 12--14--791 bovaird dr w NaN NaN \n250547 10545 1--4--10545 bramalea rd NaN NaN \n250840 15 1--4--15 ashby field rd NaN NaN \n250848 380 7--8--380 bovaird dr e NaN NaN \n250960 10 5--6--10 squire ellis dr NaN NaN \n250961 10 12--14--10 squire ellis dr NaN NaN \n250970 227 17--18--227 advance blvd NaN NaN \n251215 9150 c--d--9150 airport rd NaN NaN \n251597 253 9--11--253 summerlea rd NaN NaN \n251929 21 f--g--21 regan rd NaN NaN \n252331 2084 10--12--2084 steeles ave e NaN NaN \n252417 2074 26--b--2074 steeles ave e NaN NaN \n252451 90 2--f--90 kennedy rd s NaN NaN \n252566 53 44--45--53 parkhurst sq NaN NaN \n252648 28 15--16--28 melanie dr NaN NaN \n\n LP_PostCode LP_Unit LP3_unit \n608 v8w 1g9 NaN 4 \n1054 v8w 1g9 NaN g \n1239 v8w 1g9 NaN 3 \n1340 v8w 2c5 NaN g \n1582 v8w 0c1 NaN 6 \n1584 v8w 1g9 NaN 2 \n2474 v8w 2c5 NaN g \n2770 v8w 1g9 NaN 3 \n2793 v8w 2c5 NaN g \n2798 v8w 2c5 NaN g \n3395 v8w 2c5 NaN g \n3579 v8w 2c5 NaN g \n3705 v8w 2c5 NaN g \n4658 v8w 2c5 NaN g \n5279 v8w 2c5 NaN g \n6010 v8w 0c1 NaN 6 \n6165 v8w 1g9 NaN 3 \n6616 v8w 2c5 NaN g \n6751 v8w 0c1 NaN 6 \n6782 v8w 1g9 NaN 2 \n240496 v2r 4h2 NaN a \n245607 NaN NaN 13 \n245626 NaN NaN b \n246571 NaN NaN 19 \n246989 NaN NaN 2 \n247248 NaN NaN 8 \n248440 NaN NaN 3000 \n248835 NaN NaN 8 \n248852 NaN NaN 46 \n248963 NaN NaN e \n249117 NaN NaN 44 \n249386 NaN NaN 1 \n249461 NaN NaN 20 \n249663 NaN NaN 12 \n250547 NaN NaN 1 \n250840 NaN NaN 1 \n250848 NaN NaN 7 \n250960 NaN NaN 5 \n250961 NaN NaN 12 \n250970 NaN NaN 17 \n251215 NaN NaN c \n251597 NaN NaN 9 \n251929 NaN NaN f \n252331 NaN NaN 10 \n252417 NaN NaN 26 \n252451 NaN NaN 2 \n252566 NaN NaN 44 \n252648 NaN NaN 15 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
idxlocalfilebusiness_namefull_addressLP2_unitLP2_street_nospillLP_street_noLP_street_nameLP_CityLP_ProvinceLP_PostCodeLP_UnitLP3_unit
6081aaf470769d4d02c2ba8BC_Victoria_Business_Licences.csvVICTORIA ADVANCED TECHNOLOGY COUNCIL (VIATEC)4-FLR-777 FORT ST VICTORIA BC V8W 1G94--flr7777774--flr--777fort stvictoriabcv8w 1g9NaN4
1054bf927f38280978c45d52BC_Victoria_Business_Licences.csvGROUND CONTROL CAFEG-FLR-777 FORT ST VICTORIA BC V8W 1G9g--flr777777g--flr--777fort stvictoriabcv8w 1g9NaNg
1239cb0576b2e074711fe258BC_Victoria_Business_Licences.csvRUMBLE NUTRITION LTD3-FLR-777 FORT ST VICTORIA BC V8W 1G93--flr7777773--flr--777fort stvictoriabcv8w 1g9NaN3
1340150bd858e17adf5796d9BC_Victoria_Business_Licences.csvBLENZ COFFEEG-1-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--110011001g--1--1001douglas stvictoriabcv8w 2c5NaNg
158223f92529e3b00f5220a1BC_Victoria_Business_Licences.csvVICTORIA PIE COMPANY6-S10-1701 DOUGLAS ST VICTORIA BC V8W 0C16--s10170117016--s10--1701douglas stvictoriabcv8w 0c1NaN6
15849311d646bd8abc777a19BC_Victoria_Business_Licences.csvCTC TRAINCANADA2-FLR-777 FORT ST VICTORIA BC V8W 1G92--flr7777772--flr--777fort stvictoriabcv8w 1g9NaN2
2474e511e2d61a76ea455da3BC_Victoria_Business_Licences.csvLA FIESTA CAFEG-12-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--1210011001g--12--1001douglas stvictoriabcv8w 2c5NaNg
277016f296dee2880a32b64cBC_Victoria_Business_Licences.csvALTA BERING3-FLR-777 FORT ST VICTORIA BC V8W 1G93--flr7777773--flr--777fort stvictoriabcv8w 1g9NaN3
2793c3fdfac470e53a586ee3BC_Victoria_Business_Licences.csvHANK'SG-2-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--210011001g--2--1001douglas stvictoriabcv8w 2c5NaNg
2798ba8ff3b4a123d49a10c1BC_Victoria_Business_Licences.csvNOWHERE A RESTAURANTG-4-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--410011001g--4--1001douglas stvictoriabcv8w 2c5NaNg
33955d7c902a4485da28ba3bBC_Victoria_Business_Licences.csvAVIS CANADAG-2-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--210011001g--2--1001douglas stvictoriabcv8w 2c5NaNg
35793433be4ccd81035db6b6BC_Victoria_Business_Licences.csvDOWNTOWN VICTORIA OPTOMETRYG-9-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--910011001g--9--1001douglas stvictoriabcv8w 2c5NaNg
3705f3715c160a1f36c95aabBC_Victoria_Business_Licences.csvMARLIN TRAVELG-3-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--310011001g--3--1001douglas stvictoriabcv8w 2c5NaNg
4658058bea397fdbdc57b1e4BC_Victoria_Business_Licences.csvEDWARD JONESG-10-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--1010011001g--10--1001douglas stvictoriabcv8w 2c5NaNg
52793097014846a21fc4b6f4BC_Victoria_Business_Licences.csvCRESCENDO FOR HAIRG-5-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--510011001g--5--1001douglas stvictoriabcv8w 2c5NaNg
60102347fda8a3762b9da41dBC_Victoria_Business_Licences.csvROAST6-S5-1701 DOUGLAS ST VICTORIA BC V8W 0C16--s5170117016--s5--1701douglas stvictoriabcv8w 0c1NaN6
61657ea34407aeebac77311eBC_Victoria_Business_Licences.csvRFDM SOLUTIONS INC3-FLR-777 FORT ST VICTORIA BC V8W 1G93--flr7777773--flr--777fort stvictoriabcv8w 1g9NaN3
66169572258fefc677a8fc68BC_Victoria_Business_Licences.csvTESSERACT 2.0 COMPUTINGG-11-1001 DOUGLAS ST VICTORIA BC V8W 2C5g--1110011001g--11--1001douglas stvictoriabcv8w 2c5NaNg
67512efffd1553dcecba0b50BC_Victoria_Business_Licences.csvWAFFLEBEAST6-S8-1701 DOUGLAS ST VICTORIA BC V8W 0C16--s8170117016--s8--1701douglas stvictoriabcv8w 0c1NaN6
678272af67acc6c8992e9f07BC_Victoria_Business_Licences.csvGLOBAL KNOWLEDGE NETWORK (CANADA)2-FLR-777 FORT ST VICTORIA BC V8W 1G92--flr7777772--flr--777fort stvictoriabcv8w 1g9NaN2
240496d9b59b89b7c9f71edf66BC_Chilliwack_Business_Licences.csvCOOKIES GRILLA-3-44335 YALE RD, CHILLIWACK BC V2R 4H2a--34433544335a--3--44335yale rdchilliwackbcv2r 4h2NaNa
2456076952f27f8f32e812cf03ON_Brampton_Business_Directory.csvSIDHU AUTO AND TRUCK REPAIR SERVICES13-14-28 MELANIE DR13--14282813--14--28melanie drNaNNaNNaNNaN13
24562602d77f2c59136d3a6d7bON_Brampton_Business_Directory.csvCOPPER RIDGE PHARMACYB-2-8015 FINANCIAL DRb--280158015b--2--8015financial drNaNNaNNaNNaNb
246571afa96e09bc0c8c987326ON_Brampton_Business_Directory.csvDAVROC AND ASSOCIATES LTD.19-21-2051 WILLIAMS PKY19--212051205119--21--2051williams pkyNaNNaNNaNNaN19
2469896b4c488878da758a5c79ON_Brampton_Business_Directory.csvBRAMPTON COSMETIC2-4-111 QUEEN ST E2--41111112--4--111queen st eNaNNaNNaNNaN2
247248209073c9a1cd06244595ON_Brampton_Business_Directory.csvST. GEORGE MEDICAL CENTRE8-9-50 SKY HARBOUR DR8--950508--9--50sky harbour drNaNNaNNaNNaN8
2484408358f31c9442316598fcON_Brampton_Business_Directory.csvINDIA RAINBOW COMMUNITY SERVICES OF PEEL3000-B1-180 SANDALWOOD PKY E3000--b11801803000--b1--180sandalwood pky eNaNNaNNaNNaN3000
24883505eeeeaa06ba099aff82ON_Brampton_Business_Directory.csvDYNACARE8-9-9525 MISSISSAUGA RD8--9952595258--9--9525mississauga rdNaNNaNNaNNaN8
248852067f5b3bd0cb413d016eON_Brampton_Business_Directory.csvMAXPOWER FRICTION INC.46-47-2500 WILLIAMS PKY46--472500250046--47--2500williams pkyNaNNaNNaNNaN46
2489636593b2db7cf5a05a86f1ON_Brampton_Business_Directory.csvKUMON MATH AND READING CENTREE-102-65 MONTPELIER STe--1026565e--102--65montpelier stNaNNaNNaNNaNe
2491177ba728c2c0c81fe8893bON_Brampton_Business_Directory.csvJCR WOODWORKING44-45-2500 WILLIAMS PKY44--452500250044--45--2500williams pkyNaNNaNNaNNaN44
2493867d356a4136837f0e16dbON_Brampton_Business_Directory.csvCANTRINA FREEZER1-3-4 WILKINSON RD1--3441--3--4wilkinson rdNaNNaNNaNNaN1
2494614b96bb9fb8a61074b43cON_Brampton_Business_Directory.csvDOLLAR POWER20-21-380 BOVAIRD DR E20--2138038020--21--380bovaird dr eNaNNaNNaNNaN20
24966389d9379007bfc34d86ecON_Brampton_Business_Directory.csvFOODASIA12-14-791 BOVAIRD DR W12--1479179112--14--791bovaird dr wNaNNaNNaNNaN12
250547d72f56efc2da07bcbef9ON_Brampton_Business_Directory.csvALTUM HEALTH CLINIC1-4-10545 BRAMALEA RD1--410545105451--4--10545bramalea rdNaNNaNNaNNaN1
250840d868cb6db85e2024cff4ON_Brampton_Business_Directory.csvMCLEANS LEARNING ACADEMY1-4-15 ASHBY FIELD RD1--415151--4--15ashby field rdNaNNaNNaNNaN1
2508480b746cf821087d844de7ON_Brampton_Business_Directory.csvDHABA EXPRESS7-8-380 BOVAIRD DR E7--83803807--8--380bovaird dr eNaNNaNNaNNaN7
25096005073f05b6004cd5ba82ON_Brampton_Business_Directory.csvDENTISTRY DR. ANDHAWA5-6-10 SQUIRE ELLIS DR5--610105--6--10squire ellis drNaNNaNNaNNaN5
250961621f07a335bf5ddd9c83ON_Brampton_Business_Directory.csvJOHAL SWEETS AND RESTAURANT12-14-10 SQUIRE ELLIS DR12--14101012--14--10squire ellis drNaNNaNNaNNaN12
250970566dd2abb1680fe0b447ON_Brampton_Business_Directory.csvA2Z KITCHEN CABINETS17-18-227 ADVANCE BLVD17--1822722717--18--227advance blvdNaNNaNNaNNaN17
251215282ae5e0efc353a3cbd5ON_Brampton_Business_Directory.csvMENASHA PACKAGINGC-D-9150 AIRPORT RDc--d91509150c--d--9150airport rdNaNNaNNaNNaNc
251597f923bb2fd5ab5f41d605ON_Brampton_Business_Directory.csvCLAREVILLE DISTINCTIVE KITCHENS AND BATHS9-11-253 SUMMERLEA RD9--112532539--11--253summerlea rdNaNNaNNaNNaN9
251929f324da0c70c43fdac329ON_Brampton_Business_Directory.csvMODHANI INC.F-G-21 REGAN RDf--g2121f--g--21regan rdNaNNaNNaNNaNf
25233174d4b6b3410c918c2817ON_Brampton_Business_Directory.csvPVC ENTERPRISES LTD.10-12-2084 STEELES AVE E10--122084208410--12--2084steeles ave eNaNNaNNaNNaN10
2524172ce85444ef716093acb4ON_Brampton_Business_Directory.csvKLOMAN STUDIO26-B-2074 STEELES AVE E26--b2074207426--b--2074steeles ave eNaNNaNNaNNaN26
2524512a80d5f48781f0b2c8eaON_Brampton_Business_Directory.csvGLOBAL STAFFING AND DRIVERS SERVICES LTD2-F-90 KENNEDY RD S2--f90902--f--90kennedy rd sNaNNaNNaNNaN2
252566de4bd5c4e23c74fc3045ON_Brampton_Business_Directory.csvDESIGNER JEWELLERY BY TINA44-45-53 PARKHURST SQ44--45535344--45--53parkhurst sqNaNNaNNaNNaN44
25264882ee061c0f9bd1874004ON_Brampton_Business_Directory.csvHOPE CANDLE COMPANY LTD.15-16-28 MELANIE DR15--16282815--16--28melanie drNaNNaNNaNNaN15
\n
" + }, + "metadata": {} + } + ], + "source": [ + "df2_path = '/home/jovyan/ODBiz/4-Parsing/double_check/parsed_with_spillover2.csv'\n", + "\n", + "# Apply the easiest blanket rule on the specific datasets below\n", + "localfiles = [ 'BC_Victoria_Business_Licences.csv',\n", + " # 'BC_Indigenous_Business_Listings.csv',\n", + " 'BC_Chilliwack_Business_Licences.csv',\n", + " 'ON_Brampton_Business_Directory.csv',\n", + " # 'QC_Etablissements.csv',\n", + " # 'ON_Toronto_Business_Licences.csv',\n", + " # 'Indigenous_Business_Directory.csv',\n", + " ]\n", + "localfiles_idx = new_df['localfile'].isin(localfiles)\n", + "df2 = new_df[localfiles_idx].copy()\n", + "\n", + "# Set right most value as street_no, everything else is unit\n", + "df2[['LP2_unit', 'LP2_street_no']] = df2['LP_street_no'].str.rsplit('-', expand = True, n = 1)\n", + "\n", + "# Replace dashes to avoid Excel's date conversion\n", + "df2['LP2_unit'] = df2['LP2_unit'].str.replace('-', '--')\n", + "df2['LP_street_no'] = df2['LP_street_no'].str.replace('-', '--')\n", + "\n", + "df2.to_csv(df2_path, index = False)\n", + "print(f'Saved new_df to {df2_path}')\n", + "display(df2)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Saved new_df to /home/jovyan/ODBiz/4-Parsing/double_check/parsed_with_spillover_toronto.csv\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": " idx localfile \\\n498975 14ddc42ab7745c011a08 ON_Toronto_Business_Licences.csv \n512638 c223662af8bd86429b29 ON_Toronto_Business_Licences.csv \n518844 94688ebbc933c2444697 ON_Toronto_Business_Licences.csv \n520248 75e041034c50f8bff384 ON_Toronto_Business_Licences.csv \n520980 6af1aac415c94d591bfd ON_Toronto_Business_Licences.csv \n527705 a325b83cae61ddf3582e ON_Toronto_Business_Licences.csv \n543237 aefe1a197f93839f6aee ON_Toronto_Business_Licences.csv \n572395 afcc8281423927eb1c16 ON_Toronto_Business_Licences.csv \n573386 47793f681cce51eb6810 ON_Toronto_Business_Licences.csv \n575854 872f773ff13571cf4e96 ON_Toronto_Business_Licences.csv \n577801 e0697e9e02b0d5973985 ON_Toronto_Business_Licences.csv \n584756 96d1af2e4374f9c385db ON_Toronto_Business_Licences.csv \n589546 3cc97a867e0fd2477d3d ON_Toronto_Business_Licences.csv \n592915 496822dcb8b71ef460be ON_Toronto_Business_Licences.csv \n595950 16761be1ad528f0d5495 ON_Toronto_Business_Licences.csv \n596563 816586df70741d20d4b5 ON_Toronto_Business_Licences.csv \n\n business_name full_address \\\n498975 O B N SECURITY MANAGEMENT SERVICES 350-370-390 QUEENS QUAY W \n512638 PERIYA KADAI 744-744A-746 MARKHAM RD \n518844 WEST INDIAN FINE FOODS 3601 LAWRENCE AVE E, #4-5-6 \n520248 WEST INDIAN FINE FOODS 3601 LAWRENCE AVE E, #4-5-6 \n520980 SUNRISE CARIBBEAN RESTAURANT 3225 EGLINTON AVE E, #1-2-3 \n527705 SUNRISE CARIBBEAN RESTAURANT 3225 EGLINTON AVE E, #1-2-3 \n543237 FREDDY'S CAR SALES 2899 STEELES AVE W, #5-6-7 \n572395 EL SIPOTE 2007 LAWRENCE AVE W, #14-15-16 \n573386 SUGAR LOUNGE 1085 BELLAMY RD N, #4-5-6 \n575854 DADDY'S LOUNGE 2007 LAWRENCE AVE W, #14-15-16 \n577801 FALAFEL EXPRESS 1300 FINCH AVE W, #24-25-26 \n584756 REMELY'S RESTAURANT 4830 SHEPPARD AVE E, #12R-13-16 \n589546 CENTRAL BAR & GRILL 2007 LAWRENCE AVE W, #14-15-16 \n592915 REMELY'S RESTAURANT 4830 SHEPPARD AVE E, #12R-13-16 \n595950 R T FINE JEWELLERS INC 1921 EGLINTON AVE E, #7-8-9 \n596563 R T FINE JEWELLERS 1921 EGLINTON AVE E, #7-8-9 \n\n LP2_unit LP2_street_no spill LP_street_no LP_street_name \\\n498975 350--370 390 390 350--370--390 queens quay w \n512638 744--744a 746 746 744--744a--746 markham rd \n518844 #4--5--6 3601 6 #4--5--6 lawrence ave e \n520248 #4--5--6 3601 6 #4--5--6 lawrence ave e \n520980 #1--2--3 3225 3 #1--2--3 eglinton ave e \n527705 #1--2--3 3225 3 #1--2--3 eglinton ave e \n543237 #5--6--7 2899 7 #5--6--7 steeles ave w \n572395 #14--15--16 2007 16 #14--15--16 lawrence ave w \n573386 #4--5--6 1085 6 #4--5--6 bellamy rd n \n575854 #14--15--16 2007 16 #14--15--16 lawrence ave w \n577801 #24--25--26 1300 26 #24--25--26 finch ave w \n584756 #12R--13--16 4830 16 #12r--13--16 sheppard ave e \n589546 #14--15--16 2007 16 #14--15--16 lawrence ave w \n592915 #12R--13--16 4830 16 #12r--13--16 sheppard ave e \n595950 #7--8--9 1921 9 #7--8--9 eglinton ave e \n596563 #7--8--9 1921 9 #7--8--9 eglinton ave e \n\n LP_City LP_Province LP_PostCode LP_Unit LP3_unit \n498975 NaN NaN NaN NaN 350 \n512638 NaN NaN NaN NaN 744 \n518844 NaN NaN NaN NaN #4 \n520248 NaN NaN NaN NaN #4 \n520980 NaN NaN NaN NaN #1 \n527705 NaN NaN NaN NaN #1 \n543237 NaN NaN NaN NaN #5 \n572395 NaN NaN NaN NaN #14 \n573386 NaN NaN NaN NaN #4 \n575854 NaN NaN NaN NaN #14 \n577801 NaN NaN NaN NaN #24 \n584756 NaN NaN NaN NaN #12r \n589546 NaN NaN NaN NaN #14 \n592915 NaN NaN NaN NaN #12r \n595950 NaN NaN NaN NaN #7 \n596563 NaN NaN NaN NaN #7 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
idxlocalfilebusiness_namefull_addressLP2_unitLP2_street_nospillLP_street_noLP_street_nameLP_CityLP_ProvinceLP_PostCodeLP_UnitLP3_unit
49897514ddc42ab7745c011a08ON_Toronto_Business_Licences.csvO B N SECURITY MANAGEMENT SERVICES350-370-390 QUEENS QUAY W350--370390390350--370--390queens quay wNaNNaNNaNNaN350
512638c223662af8bd86429b29ON_Toronto_Business_Licences.csvPERIYA KADAI744-744A-746 MARKHAM RD744--744a746746744--744a--746markham rdNaNNaNNaNNaN744
51884494688ebbc933c2444697ON_Toronto_Business_Licences.csvWEST INDIAN FINE FOODS3601 LAWRENCE AVE E, #4-5-6#4--5--636016#4--5--6lawrence ave eNaNNaNNaNNaN#4
52024875e041034c50f8bff384ON_Toronto_Business_Licences.csvWEST INDIAN FINE FOODS3601 LAWRENCE AVE E, #4-5-6#4--5--636016#4--5--6lawrence ave eNaNNaNNaNNaN#4
5209806af1aac415c94d591bfdON_Toronto_Business_Licences.csvSUNRISE CARIBBEAN RESTAURANT3225 EGLINTON AVE E, #1-2-3#1--2--332253#1--2--3eglinton ave eNaNNaNNaNNaN#1
527705a325b83cae61ddf3582eON_Toronto_Business_Licences.csvSUNRISE CARIBBEAN RESTAURANT3225 EGLINTON AVE E, #1-2-3#1--2--332253#1--2--3eglinton ave eNaNNaNNaNNaN#1
543237aefe1a197f93839f6aeeON_Toronto_Business_Licences.csvFREDDY'S CAR SALES2899 STEELES AVE W, #5-6-7#5--6--728997#5--6--7steeles ave wNaNNaNNaNNaN#5
572395afcc8281423927eb1c16ON_Toronto_Business_Licences.csvEL SIPOTE2007 LAWRENCE AVE W, #14-15-16#14--15--16200716#14--15--16lawrence ave wNaNNaNNaNNaN#14
57338647793f681cce51eb6810ON_Toronto_Business_Licences.csvSUGAR LOUNGE1085 BELLAMY RD N, #4-5-6#4--5--610856#4--5--6bellamy rd nNaNNaNNaNNaN#4
575854872f773ff13571cf4e96ON_Toronto_Business_Licences.csvDADDY'S LOUNGE2007 LAWRENCE AVE W, #14-15-16#14--15--16200716#14--15--16lawrence ave wNaNNaNNaNNaN#14
577801e0697e9e02b0d5973985ON_Toronto_Business_Licences.csvFALAFEL EXPRESS1300 FINCH AVE W, #24-25-26#24--25--26130026#24--25--26finch ave wNaNNaNNaNNaN#24
58475696d1af2e4374f9c385dbON_Toronto_Business_Licences.csvREMELY'S RESTAURANT4830 SHEPPARD AVE E, #12R-13-16#12R--13--16483016#12r--13--16sheppard ave eNaNNaNNaNNaN#12r
5895463cc97a867e0fd2477d3dON_Toronto_Business_Licences.csvCENTRAL BAR & GRILL2007 LAWRENCE AVE W, #14-15-16#14--15--16200716#14--15--16lawrence ave wNaNNaNNaNNaN#14
592915496822dcb8b71ef460beON_Toronto_Business_Licences.csvREMELY'S RESTAURANT4830 SHEPPARD AVE E, #12R-13-16#12R--13--16483016#12r--13--16sheppard ave eNaNNaNNaNNaN#12r
59595016761be1ad528f0d5495ON_Toronto_Business_Licences.csvR T FINE JEWELLERS INC1921 EGLINTON AVE E, #7-8-9#7--8--919219#7--8--9eglinton ave eNaNNaNNaNNaN#7
596563816586df70741d20d4b5ON_Toronto_Business_Licences.csvR T FINE JEWELLERS1921 EGLINTON AVE E, #7-8-9#7--8--919219#7--8--9eglinton ave eNaNNaNNaNNaN#7
\n
" + }, + "metadata": {} + } + ], + "source": [ + "dfTO_path = '/home/jovyan/ODBiz/4-Parsing/double_check/parsed_with_spillover_toronto.csv'\n", + "\n", + "# Apply Toronto's modified parsing rule\n", + "localfiles = [ \n", + " # 'BC_Victoria_Business_Licences.csv',\n", + " # 'BC_Indigenous_Business_Listings.csv',\n", + " # 'BC_Chilliwack_Business_Licences.csv',\n", + " # 'ON_Brampton_Business_Directory.csv',\n", + " # 'QC_Etablissements.csv',\n", + " 'ON_Toronto_Business_Licences.csv',\n", + " # 'Indigenous_Business_Directory.csv',\n", + " ]\n", + "localfiles_idx = new_df['localfile'] == 'ON_Toronto_Business_Licences.csv'\n", + "dfTO = new_df[localfiles_idx].copy()\n", + "\n", + "has_comma = dfTO['full_address'].str.contains(',')\n", + "\n", + "# If there's no comma, set right most value as street_no, everything else is unit\n", + "dfTO.loc[~has_comma, ['LP2_unit', 'LP2_street_no']] = dfTO.loc[~has_comma, 'LP_street_no'].str.rsplit('-', expand = True, n = 1).rename(columns = {0: 'LP2_unit', 1: 'LP2_street_no'})\n", + "\n", + "# If there is a comma, apply parsing rule\n", + "dfTO.loc[has_comma, ['LP2_street_no', 'LP2_unit']] = dfTO.loc[has_comma, 'full_address'].str.extract('(\\d+)[A-Z\\s]*,\\s?(.*)').rename(columns = {0: 'LP2_street_no', 1: 'LP2_unit'})\n", + "\n", + "# Replace dashes to avoid Excel's date conversion\n", + "dfTO['LP2_unit'] = dfTO['LP2_unit'].str.replace('-', '--')\n", + "dfTO['LP_street_no'] = dfTO['LP_street_no'].str.replace('-', '--')\n", + "\n", + "dfTO.to_csv(dfTO_path, index = False)\n", + "print(f'Saved new_df to {dfTO_path}')\n", + "display(dfTO)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " LP2_unit LP2_street_no\n", + "498975 350--370- 390\n", + "512638 744--744a- 746" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
LP2_unitLP2_street_no
498975350--370-390
512638744--744a-746
\n
" + }, + "metadata": {}, + "execution_count": 37 + } + ], + "source": [ + "dfTO.loc[~has_comma, 'LP_street_no'].str.rsplit('-', expand = True, n = 1).rename(columns = {0: 'LP2_unit', 1: 'LP2_street_no'})\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " 0 1\n", + "498975 350--370- 390\n", + "512638 744--744a- 746" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
01
498975350--370-390
512638744--744a-746
\n
" + }, + "metadata": {}, + "execution_count": 38 + } + ], + "source": [ + "dfTO.loc[~has_comma, 'LP_street_no'].str.rsplit('-', expand = True, n = 1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ] +} \ No newline at end of file diff --git a/scripts/Businesses/5-Geocoding/0-testing.ipynb b/scripts/Businesses/5-Geocoding/0-testing.ipynb new file mode 100644 index 00000000..c85e6206 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/0-testing.ipynb @@ -0,0 +1,1062 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:52:06.800380Z", + "iopub.status.busy": "2022-09-01T14:52:06.800139Z", + "iopub.status.idle": "2022-09-01T14:52:07.485685Z", + "shell.execute_reply": "2022-09-01T14:52:07.484874Z", + "shell.execute_reply.started": "2022-09-01T14:52:06.800355Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:36:50.648915Z", + "iopub.status.busy": "2022-08-16T14:36:50.648617Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df_q = pd.read_csv('data/oda-addresses/ODA_QC_v1.csv', low_memory=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:33:10.345115Z", + "iopub.status.busy": "2022-08-16T14:33:10.344890Z", + "iopub.status.idle": "2022-08-16T14:33:10.426873Z", + "shell.execute_reply": "2022-08-16T14:33:10.425914Z", + "shell.execute_reply.started": "2022-08-16T14:33:10.345086Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# what's the problem with quebec matching?\n", + "test = df_q[df_q.street == 'Rue Queen']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# how many results are there to geocode?" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:29:32.253716Z", + "iopub.status.busy": "2022-08-16T14:29:32.253420Z", + "iopub.status.idle": "2022-08-16T14:29:32.723276Z", + "shell.execute_reply": "2022-08-16T14:29:32.721914Z", + "shell.execute_reply.started": "2022-08-16T14:29:32.253684Z" + } + }, + "outputs": [], + "source": [ + "df = pd.read_csv('formatted.csv', low_memory=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:30:41.195344Z", + "iopub.status.busy": "2022-08-16T14:30:41.194980Z", + "iopub.status.idle": "2022-08-16T14:30:41.200999Z", + "shell.execute_reply": "2022-08-16T14:30:41.200094Z", + "shell.execute_reply.started": "2022-08-16T14:30:41.195306Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "219942" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:30:53.276870Z", + "iopub.status.busy": "2022-08-16T14:30:53.276429Z", + "iopub.status.idle": "2022-08-16T14:30:53.284233Z", + "shell.execute_reply": "2022-08-16T14:30:53.283193Z", + "shell.execute_reply.started": "2022-08-16T14:30:53.276814Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['localfile',\n", + " 'province',\n", + " 'mailing_address',\n", + " 'street_no',\n", + " 'street_name',\n", + " 'latitude',\n", + " 'longitude',\n", + " 'formatted_en',\n", + " 'formatted_fr']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:31:21.072756Z", + "iopub.status.busy": "2022-08-16T14:31:21.072392Z", + "iopub.status.idle": "2022-08-16T14:31:21.089986Z", + "shell.execute_reply": "2022-08-16T14:31:21.089185Z", + "shell.execute_reply.started": "2022-08-16T14:31:21.072716Z" + } + }, + "outputs": [], + "source": [ + "df = df[df['latitude'].isnull()]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:31:24.689746Z", + "iopub.status.busy": "2022-08-16T14:31:24.689467Z", + "iopub.status.idle": "2022-08-16T14:31:24.697240Z", + "shell.execute_reply": "2022-08-16T14:31:24.696183Z", + "shell.execute_reply.started": "2022-08-16T14:31:24.689717Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "81656" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:37:02.902318Z", + "iopub.status.busy": "2022-08-16T14:37:02.902011Z", + "iopub.status.idle": "2022-08-16T14:37:09.620044Z", + "shell.execute_reply": "2022-08-16T14:37:09.619021Z", + "shell.execute_reply.started": "2022-08-16T14:37:02.902285Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: DtypeWarning: Columns (3,4,5,6,7,8,10,11,12,13,16,17,18,19,20,21,22,23,26,27,28,29,30,32,33,34,38,40,42) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " df = pd.read_csv('data/4-ODBiz_merged_2022-08-04.csv')\n" + ] + } + ], + "source": [ + "df = pd.read_csv('data/4-ODBiz_merged_2022-08-04.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:33:24.104518Z", + "iopub.status.busy": "2022-08-16T14:33:24.104233Z", + "iopub.status.idle": "2022-08-16T14:33:24.116183Z", + "shell.execute_reply": "2022-08-16T14:33:24.115388Z", + "shell.execute_reply.started": "2022-08-16T14:33:24.104487Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "803658" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:37:47.588475Z", + "iopub.status.busy": "2022-08-16T14:37:47.588171Z", + "iopub.status.idle": "2022-08-16T14:37:47.922240Z", + "shell.execute_reply": "2022-08-16T14:37:47.921015Z", + "shell.execute_reply.started": "2022-08-16T14:37:47.588443Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df = df[df['longitude'].isnull()]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:37:49.283759Z", + "iopub.status.busy": "2022-08-16T14:37:49.283429Z", + "iopub.status.idle": "2022-08-16T14:37:49.571471Z", + "shell.execute_reply": "2022-08-16T14:37:49.570631Z", + "shell.execute_reply.started": "2022-08-16T14:37:49.283723Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "598891" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:38:05.613804Z", + "iopub.status.busy": "2022-08-16T14:38:05.613508Z", + "iopub.status.idle": "2022-08-16T14:38:05.618060Z", + "shell.execute_reply": "2022-08-16T14:38:05.617057Z", + "shell.execute_reply.started": "2022-08-16T14:38:05.613773Z" + } + }, + "outputs": [], + "source": [ + "# number without lat/ lon: 598891" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# I might want to deduplicate before running the address match script\n", + "df = df.drop_duplicates(subset=['street_no','formatted_en'])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T18:48:54.503778Z", + "iopub.status.busy": "2022-08-16T18:48:54.503366Z", + "iopub.status.idle": "2022-08-16T18:48:54.516933Z", + "shell.execute_reply": "2022-08-16T18:48:54.515798Z", + "shell.execute_reply.started": "2022-08-16T18:48:54.503731Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df = pd.read_csv('output_all.csv', low_memory=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T18:52:06.205498Z", + "iopub.status.busy": "2022-08-16T18:52:06.205162Z", + "iopub.status.idle": "2022-08-16T18:52:06.213255Z", + "shell.execute_reply": "2022-08-16T18:52:06.211645Z", + "shell.execute_reply.started": "2022-08-16T18:52:06.205458Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# get those which match lat lon\n", + "\n", + "df_lat = df[~df['latitude'].isna()]\n", + "df_lat = df_lat[~df_lat['x'].isna()]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T18:55:14.729167Z", + "iopub.status.busy": "2022-08-16T18:55:14.728734Z", + "iopub.status.idle": "2022-08-16T18:55:14.742084Z", + "shell.execute_reply": "2022-08-16T18:55:14.741234Z", + "shell.execute_reply.started": "2022-08-16T18:55:14.729118Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df_lat.to_csv(\"latlon_compairson.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T18:53:33.011711Z", + "iopub.status.busy": "2022-08-16T18:53:33.011418Z", + "iopub.status.idle": "2022-08-16T18:53:33.017819Z", + "shell.execute_reply": "2022-08-16T18:53:33.016821Z", + "shell.execute_reply.started": "2022-08-16T18:53:33.011680Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# get sample of imperfect matches between 60-95\n", + "\n", + "# df_match = df_q[df_q.ratio == 'Rue Queen']\n", + "df_match = df[df['ratio'].between(60, 98)]\n", + "\n", + "\n", + "# in general, 80 good, but not for numbers (eg 10th st versus 15th st are very similar)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T18:53:36.481964Z", + "iopub.status.busy": "2022-08-16T18:53:36.480228Z", + "iopub.status.idle": "2022-08-16T18:53:36.506112Z", + "shell.execute_reply": "2022-08-16T18:53:36.505001Z", + "shell.execute_reply.started": "2022-08-16T18:53:36.481908Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
localfileprovincemailing_addressstreet_nostreet_namelatitudelongitudeformatted_enformatted_frmatches_rratioxy
88AB_Banff_Business_Licences.csvABNaN100SUNDANCE ROADNaNNaNsundance rdSUNDANCE ROADSUNDANCE ROAD92.0-115.58208551.174765
106BC_Vancouver_Business_Licences.csvBCNaN1753Marine DriveNaNNaNmarine drMarine DriveGarner Rd67.0NaNNaN
116BC_Burnaby_Business_Licences_2.csvBCNaN6745STATION HILL CRTNaNNaNstation hill crtSTATION HILL CRTSTATION HILL CT97.0-122.96296049.210420
117BC_Vancouver_Business_Licences.csvBCNaN3675W 10TH AVNaNNaNw 10th avW 10TH AVW 15TH AV89.0NaNNaN
118BC_Vancouver_Business_Licences.csvBCNaN1280GRANVILLE ST49.276157-123.127071granville stGRANVILLE STCORNELL ST64.0NaNNaN
129BC_Vancouver_Business_Licences.csvBCNaN1711W BROADWAY49.263978-123.143743w broadwayW BROADWAYBOWEN ROAD60.0NaNNaN
132BC_Vancouver_Business_Licences.csvBCNaN815COMMERCIAL DRIVE49.277321-123.070731commercial drCOMMERCIAL DRIVECOMMERCIAL DRIVE90.0-123.07073049.277320
138BC_Vancouver_Business_Licences.csvBCNaN888SE MARINE DRIVE49.210433-123.087875se marine drSE MARINE DRIVESE MARINE DRIVE89.0NaNNaN
139BC_Vancouver_Business_Licences.csvBCNaN1028MAINLAND ST49.276087-123.119287mainland stMAINLAND STFINLAYSON ST70.0NaNNaN
140BC_Vancouver_Business_Licences.csvBCNaN2285W 41stNaNNaNw 41stW 41st141 St67.0NaNNaN
145BC_Vancouver_Business_Licences.csvBCNaN888Davie St49.278085-123.128243davie stDavie StVIEW ST80.0NaNNaN
156BC_Vancouver_Business_Licences.csvBCNaN625MAIN ST49.279149-123.100331main stMAIN STMAIN ST ST82.0-119.59029049.493870
157BC_Vancouver_Business_Licences.csvBCNaN1290E 12TH AV49.259465-123.077963e 12th avE 12TH AVE 11TH AV89.0-123.07779049.260270
180BC_Vancouver_Business_Licences.csvBCNaN773DENMAN ST49.291844-123.135453denman stDENMAN STDOMINION ST60.0NaNNaN
183BC_Vancouver_Business_Licences.csvBCNaN516Robson St49.280172-123.118309robson stRobson StTORONTO ST63.0NaNNaN
189BC_Vancouver_Business_Licences.csvBCNaN34W 2nd Av49.268931-123.104901w 2nd avW 2nd AvW 22ND AV94.0NaNNaN
194BC_Burnaby_Business_Licences_2.csvBCNaN7089LOUGHEED HWYNaNNaNlougheed hwyLOUGHEED HWYLOUGHEED HY96.0-122.95657049.259090
198BC_Vancouver_Business_Licences.csvBCNaN3321Kingsway49.233974-123.034869kingswayKingswayKINGSLEY ST63.0NaNNaN
210NT_Yellowknife_Business_Directory.csvNTNaN142HALL CRESNaNNaNhall cresHALL CRESHALL CR88.0-114.40957062.433760
233NT_Yellowknife_Business_Directory.csvNTNaN154HALL CRESNaNNaNhall cresHALL CRESHALL CR88.0-114.40906062.433050
272NT_Yellowknife_Business_Directory.csvNTNaN501250 AVENaNNaN50 ave50 AVE52 AVE83.0NaNNaN
275NT_Yellowknife_Business_Directory.csvNTNaN501050 STNaNNaN50 st50 ST57 ST80.0NaNNaN
281NT_Yellowknife_Business_Directory.csvNTNaN455HALL CRESNaNNaNhall cresHALL CRESHALL CR88.0-114.40790062.434070
290NT_Yellowknife_Business_Directory.csvNTNaN510951 STNaNNaN51 st51 ST54 ST80.0NaNNaN
294NT_Yellowknife_Business_Directory.csvNTNaN27MELVILLE DRNaNNaNmelville drMELVILLE DRMANDEVILLE DR83.0-114.42792062.439950
\n", + "
" + ], + "text/plain": [ + " localfile province mailing_address street_no \\\n", + "88 AB_Banff_Business_Licences.csv AB NaN 100 \n", + "106 BC_Vancouver_Business_Licences.csv BC NaN 1753 \n", + "116 BC_Burnaby_Business_Licences_2.csv BC NaN 6745 \n", + "117 BC_Vancouver_Business_Licences.csv BC NaN 3675 \n", + "118 BC_Vancouver_Business_Licences.csv BC NaN 1280 \n", + "129 BC_Vancouver_Business_Licences.csv BC NaN 1711 \n", + "132 BC_Vancouver_Business_Licences.csv BC NaN 815 \n", + "138 BC_Vancouver_Business_Licences.csv BC NaN 888 \n", + "139 BC_Vancouver_Business_Licences.csv BC NaN 1028 \n", + "140 BC_Vancouver_Business_Licences.csv BC NaN 2285 \n", + "145 BC_Vancouver_Business_Licences.csv BC NaN 888 \n", + "156 BC_Vancouver_Business_Licences.csv BC NaN 625 \n", + "157 BC_Vancouver_Business_Licences.csv BC NaN 1290 \n", + "180 BC_Vancouver_Business_Licences.csv BC NaN 773 \n", + "183 BC_Vancouver_Business_Licences.csv BC NaN 516 \n", + "189 BC_Vancouver_Business_Licences.csv BC NaN 34 \n", + "194 BC_Burnaby_Business_Licences_2.csv BC NaN 7089 \n", + "198 BC_Vancouver_Business_Licences.csv BC NaN 3321 \n", + "210 NT_Yellowknife_Business_Directory.csv NT NaN 142 \n", + "233 NT_Yellowknife_Business_Directory.csv NT NaN 154 \n", + "272 NT_Yellowknife_Business_Directory.csv NT NaN 5012 \n", + "275 NT_Yellowknife_Business_Directory.csv NT NaN 5010 \n", + "281 NT_Yellowknife_Business_Directory.csv NT NaN 455 \n", + "290 NT_Yellowknife_Business_Directory.csv NT NaN 5109 \n", + "294 NT_Yellowknife_Business_Directory.csv NT NaN 27 \n", + "\n", + " street_name latitude longitude formatted_en \\\n", + "88 SUNDANCE ROAD NaN NaN sundance rd \n", + "106 Marine Drive NaN NaN marine dr \n", + "116 STATION HILL CRT NaN NaN station hill crt \n", + "117 W 10TH AV NaN NaN w 10th av \n", + "118 GRANVILLE ST 49.276157 -123.127071 granville st \n", + "129 W BROADWAY 49.263978 -123.143743 w broadway \n", + "132 COMMERCIAL DRIVE 49.277321 -123.070731 commercial dr \n", + "138 SE MARINE DRIVE 49.210433 -123.087875 se marine dr \n", + "139 MAINLAND ST 49.276087 -123.119287 mainland st \n", + "140 W 41st NaN NaN w 41st \n", + "145 Davie St 49.278085 -123.128243 davie st \n", + "156 MAIN ST 49.279149 -123.100331 main st \n", + "157 E 12TH AV 49.259465 -123.077963 e 12th av \n", + "180 DENMAN ST 49.291844 -123.135453 denman st \n", + "183 Robson St 49.280172 -123.118309 robson st \n", + "189 W 2nd Av 49.268931 -123.104901 w 2nd av \n", + "194 LOUGHEED HWY NaN NaN lougheed hwy \n", + "198 Kingsway 49.233974 -123.034869 kingsway \n", + "210 HALL CRES NaN NaN hall cres \n", + "233 HALL CRES NaN NaN hall cres \n", + "272 50 AVE NaN NaN 50 ave \n", + "275 50 ST NaN NaN 50 st \n", + "281 HALL CRES NaN NaN hall cres \n", + "290 51 ST NaN NaN 51 st \n", + "294 MELVILLE DR NaN NaN melville dr \n", + "\n", + " formatted_fr matches_r ratio x y \n", + "88 SUNDANCE ROAD SUNDANCE ROAD 92.0 -115.582085 51.174765 \n", + "106 Marine Drive Garner Rd 67.0 NaN NaN \n", + "116 STATION HILL CRT STATION HILL CT 97.0 -122.962960 49.210420 \n", + "117 W 10TH AV W 15TH AV 89.0 NaN NaN \n", + "118 GRANVILLE ST CORNELL ST 64.0 NaN NaN \n", + "129 W BROADWAY BOWEN ROAD 60.0 NaN NaN \n", + "132 COMMERCIAL DRIVE COMMERCIAL DRIVE 90.0 -123.070730 49.277320 \n", + "138 SE MARINE DRIVE SE MARINE DRIVE 89.0 NaN NaN \n", + "139 MAINLAND ST FINLAYSON ST 70.0 NaN NaN \n", + "140 W 41st 141 St 67.0 NaN NaN \n", + "145 Davie St VIEW ST 80.0 NaN NaN \n", + "156 MAIN ST MAIN ST ST 82.0 -119.590290 49.493870 \n", + "157 E 12TH AV E 11TH AV 89.0 -123.077790 49.260270 \n", + "180 DENMAN ST DOMINION ST 60.0 NaN NaN \n", + "183 Robson St TORONTO ST 63.0 NaN NaN \n", + "189 W 2nd Av W 22ND AV 94.0 NaN NaN \n", + "194 LOUGHEED HWY LOUGHEED HY 96.0 -122.956570 49.259090 \n", + "198 Kingsway KINGSLEY ST 63.0 NaN NaN \n", + "210 HALL CRES HALL CR 88.0 -114.409570 62.433760 \n", + "233 HALL CRES HALL CR 88.0 -114.409060 62.433050 \n", + "272 50 AVE 52 AVE 83.0 NaN NaN \n", + "275 50 ST 57 ST 80.0 NaN NaN \n", + "281 HALL CRES HALL CR 88.0 -114.407900 62.434070 \n", + "290 51 ST 54 ST 80.0 NaN NaN \n", + "294 MELVILLE DR MANDEVILLE DR 83.0 -114.427920 62.439950 " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_match" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T18:54:44.655565Z", + "iopub.status.busy": "2022-08-16T18:54:44.655177Z", + "iopub.status.idle": "2022-08-16T18:54:44.668302Z", + "shell.execute_reply": "2022-08-16T18:54:44.667124Z", + "shell.execute_reply.started": "2022-08-16T18:54:44.655525Z" + } + }, + "outputs": [], + "source": [ + "df_match.to_csv(\"imprefect_match_sample.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:52:11.461903Z", + "iopub.status.busy": "2022-09-01T14:52:11.461633Z", + "iopub.status.idle": "2022-09-01T14:52:17.409407Z", + "shell.execute_reply": "2022-09-01T14:52:17.408565Z", + "shell.execute_reply.started": "2022-09-01T14:52:11.461873Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: DtypeWarning: Columns (3,4,5,6,7,8,9,11,12,13,14,15,19,20,21,22,23,25,26,29,30,31,32,34,35,36,40,42,44) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " df = pd.read_csv('data/ODBiz_parsed.csv')\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv('data/ODBiz_parsed.csv')\n", + "df['full_address'].isna().sum()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:52:32.530935Z", + "iopub.status.busy": "2022-09-01T14:52:32.530252Z", + "iopub.status.idle": "2022-09-01T14:52:32.536633Z", + "shell.execute_reply": "2022-09-01T14:52:32.534972Z", + "shell.execute_reply.started": "2022-09-01T14:52:32.530895Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "803584" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/5-Geocoding/1-address-format.ipynb b/scripts/Businesses/5-Geocoding/1-address-format.ipynb new file mode 100644 index 00000000..84a1cbf6 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/1-address-format.ipynb @@ -0,0 +1,222 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:10:31.573372Z", + "iopub.status.busy": "2022-09-01T14:10:31.573121Z", + "iopub.status.idle": "2022-09-01T14:10:31.577316Z", + "shell.execute_reply": "2022-09-01T14:10:31.576427Z", + "shell.execute_reply.started": "2022-09-01T14:10:31.573345Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# this script is to applies formating to addresses\n", + "\n", + "# The formatting functions apply three main processes to the input addresses. These are\n", + "# * removing punctuation\n", + "# * standardising directions (e.g., north → n)\n", + "# * standardising street types (e.g., street → st)\n", + "\n", + "import pandas as pd\n", + "from Address_Format_Funcs import AddressClean_en, AddressClean_fr" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:51:04.467402Z", + "iopub.status.busy": "2022-09-01T14:51:04.467109Z", + "iopub.status.idle": "2022-09-01T14:51:10.065620Z", + "shell.execute_reply": "2022-09-01T14:51:10.064937Z", + "shell.execute_reply.started": "2022-09-01T14:51:04.467373Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: DtypeWarning: Columns (3,4,5,6,7,8,9,11,12,13,14,15,19,20,21,22,23,25,26,29,30,31,32,34,35,36,40,42,44) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " df = pd.read_csv('data/ODBiz_parsed.csv')\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv('data/ODBiz_parsed.csv')\n", + "df['full_address'].isna().sum()\n", + "\n", + "# list(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:50:43.403476Z", + "iopub.status.busy": "2022-09-01T14:50:43.403184Z", + "iopub.status.idle": "2022-09-01T14:50:43.409288Z", + "shell.execute_reply": "2022-09-01T14:50:43.408417Z", + "shell.execute_reply.started": "2022-09-01T14:50:43.403438Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "803584" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# FOR TESTING we are removing any records which have no street number or name\n", + "# and restricting the columns\n", + "\n", + "# let's stop doing that. do this at the address matching stage\n", + "\n", + "# df = df[df['street_name'].notna()]\n", + "# df = df[df['street_no'].notna()]\n", + "# df = df[['localfile', 'province', 'city', 'mailing_address', 'street_no', 'street_name', 'latitude', 'longitude']]\n", + "# sample = df.sample(100)\n", + "# list(df)\n", + "\n", + "# df['full_address'].isna().sum()\n", + "# df['street_name'].isna().sum()\n", + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-29T14:54:05.905703Z", + "iopub.status.busy": "2022-08-29T14:54:05.905425Z", + "iopub.status.idle": "2022-08-29T14:54:06.097957Z", + "shell.execute_reply": "2022-08-29T14:54:06.097036Z", + "shell.execute_reply.started": "2022-08-29T14:54:05.905673Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "34973\n", + "106548\n", + "63886\n", + "257289\n" + ] + } + ], + "source": [ + "print(df['street_no'].nunique()) \n", + "print(df['street_no'].isna().sum())\n", + "print(df['LP_street_name'].nunique())\n", + "print(df['LP_street_name'].isna().sum())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-29T14:55:17.275119Z", + "iopub.status.busy": "2022-08-29T14:55:17.274839Z", + "iopub.status.idle": "2022-08-29T15:04:45.862664Z", + "shell.execute_reply": "2022-08-29T15:04:45.861765Z", + "shell.execute_reply.started": "2022-08-29T14:55:17.275086Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# apply formatting functions\n", + "# test = df\n", + "df = AddressClean_en(df,'street_name','formatted_en')\n", + "# df = AddressClean_fr(df,'street_name','formatted_fr')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-29T15:11:06.402277Z", + "iopub.status.busy": "2022-08-29T15:11:06.402016Z", + "iopub.status.idle": "2022-08-29T15:11:33.991896Z", + "shell.execute_reply": "2022-08-29T15:11:33.991157Z", + "shell.execute_reply.started": "2022-08-29T15:11:06.402248Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df = AddressClean_fr(df,'street_name','formatted_fr')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-29T15:11:41.627820Z", + "iopub.status.busy": "2022-08-29T15:11:41.627554Z", + "iopub.status.idle": "2022-08-29T15:11:54.103447Z", + "shell.execute_reply": "2022-08-29T15:11:54.102705Z", + "shell.execute_reply.started": "2022-08-29T15:11:41.627793Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df.to_csv('data/formatted.csv',index=False)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:root] *", + "language": "python", + "name": "conda-root-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/5-Geocoding/1-address-format.py b/scripts/Businesses/5-Geocoding/1-address-format.py new file mode 100644 index 00000000..35d25a37 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/1-address-format.py @@ -0,0 +1,18 @@ +# this script is to applies formating to addresses + +# The formatting functions apply three main processes to the input addresses. These are +# * removing punctuation +# * standardising directions (e.g., north → n) +# * standardising street types (e.g., street → st) + +import pandas as pd +from Address_Format_Funcs import AddressClean_en, AddressClean_fr + +df = pd.read_csv('data/ODBiz_parsed.csv') + +# apply formatting functions +# test = df +df = AddressClean_en(df,'street_name','formatted_en') +df = AddressClean_fr(df,'street_name','formatted_fr') + +df.to_csv('data/formatted.csv',index=False) \ No newline at end of file diff --git a/scripts/Businesses/5-Geocoding/1_geocode.ipynb b/scripts/Businesses/5-Geocoding/1_geocode.ipynb new file mode 100644 index 00000000..e0729ad1 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/1_geocode.ipynb @@ -0,0 +1,14149 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-20T21:00:56.890122Z", + "iopub.status.busy": "2022-04-20T21:00:56.889821Z", + "iopub.status.idle": "2022-04-20T21:00:57.577845Z", + "shell.execute_reply": "2022-04-20T21:00:57.577151Z", + "shell.execute_reply.started": "2022-04-20T21:00:56.890048Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# -*- coding: utf-8 -*-\n", + "\"\"\"\n", + "This script is used to geocode busines sources which do not have lat/lon coordinates.\n", + "It uses the OSM Nominatim and GC National Address Register APIs.\n", + "\n", + "We use several API calls to try to obtain the most complete response. \n", + "Our order of preference for the API calls is: facility name (osm), \n", + "street address (osm), street address (GC), city (osm).\n", + "\n", + "The script filters out results results that have already been geocoded so that new data \n", + "can be added to the pipeline without re-processing each record.\n", + "\n", + "This script is adapted from Education Facilities for Healthcare\n", + "\"\"\"\n", + "\n", + "import requests\n", + "import json\n", + "import pandas as pd\n", + "import numpy as np\n", + "import time\n", + "from os.path import exists\n", + "from datetime import datetime\n", + "\n", + "# Libraries for GC API\n", + "import os\n", + "from dotenv import load_dotenv\n", + "\n", + "# requires a valid key to use the GC API\n", + "# see docs https://api.canada.ca/en/homepage \n", + "# create a .env file in this repository and add GC_API_KEY=\"YOUR_GC_API_KEY\"\n", + "load_dotenv()\n", + "gc_key = os.environ.get(\"GC_API_KEY\")\n", + "\n", + "# temporarily suppresses SettingWithCopyWarning\n", + "pd.options.mode.chained_assignment = None " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-20T21:00:58.781322Z", + "iopub.status.busy": "2022-04-20T21:00:58.781032Z", + "iopub.status.idle": "2022-04-20T21:00:58.962529Z", + "shell.execute_reply": "2022-04-20T21:00:58.961663Z", + "shell.execute_reply.started": "2022-04-20T21:00:58.781292Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "no previous csv detected\n", + "no previously geocoded results found in dataframe\n", + "2255 of 2255 records left to geocode\n" + ] + } + ], + "source": [ + "# load new input data\n", + "# and filter data we have geocoded already\n", + "\n", + "# NOTE the script below for detecting previously coded data is partially finished\n", + "\n", + "input_data = \"combined.csv\"\n", + "prev_geocoded_data = \"\"\n", + "\n", + "df_input = pd.read_csv(input_data, low_memory=False, dtype=\"str\")\n", + "\n", + "# df_input = output from parsing stage\n", + "# df_previously_coded = previous output, minus all filenames for which every geo_source is 'Source',\n", + "# minus any with filenames on our re-code list\n", + "# df (to be coded) - filter to just filenames in our re-code list, and those without any geo_source,\n", + "# minus any with filenames in our previously coded list\n", + "# df_leftover = df_input, minus df and minus filenames in df_previously_coded\n", + "\n", + "\n", + "recode_list = ['Quebec city', 'AB_hospital_services', 'BC_assisted_living_residences', 'BC_residential_care', 'BC_walk-in_clinics']\n", + "\n", + "# detect previously geocoded rows from previous export\n", + "if exists(prev_geocoded_data):\n", + "\n", + " df_previous_run = pd.read_csv(prev_geocoded_data, low_memory=False, dtype=\"str\")\n", + "\n", + " # filter to previously coded data\n", + " remove_list = ['osm_facility_name', 'osm_address', 'gc_street_address', 'osm_city', 'no_osm']\n", + " df_previously_geocoded = df_previous_run[df_previous_run[\"geo_source\"].isin(remove_list)] \n", + " \n", + " geo_list = list(df_previously_geocoded['filename'])\n", + " \n", + " df_store = df_previous_run[df_previous_run['filename'].isin(geo_list)]\n", + " \n", + " # filter out any files to be re-coded by filename\n", + " df_store = df_store[~df_store['filename'].isin(recode_list)]\n", + " \n", + "# df_leftover = df_previous_run[~df_previous_run[\"geo_source\"].isin(remove_list)] \n", + "# df_previously_geocoded = pd.read_csv(\"geocoded_17-02-2022.csv\", low_memory=False, dtype=\"str\")\n", + " print('taking ' + str(len(df_previously_geocoded)) + ' records from previous run')\n", + " df_previously_geocoded['filename'].nunique()\n", + "else:\n", + " df_previously_geocoded = None\n", + " print('no previous csv detected')\n", + " \n", + " \n", + "# filter results that have already been geocoded, based on idx\n", + "\n", + "# number_of_nulls = len(df_input[df_input.geo_source.isnull()])\n", + "\n", + "if isinstance(df_previously_geocoded, pd.DataFrame):\n", + " \n", + " # specify filenames to be ignore in next run\n", + " geo_list = list(df_previously_geocoded['filename'])\n", + " print(\"geo_list length: \" + str(len(geo_list)))\n", + " \n", + " # remove any rows from input data which have already been coded - by filename\n", + " df = df_input[~df_input['filename'].isin(geo_list)]\n", + " df_leftover1 = df_input[df_input['filename'].isin(geo_list)]\n", + "# print(str(len(df_input) - len(df)) + ' records excluded from geocoding based on filename')\n", + "# print(str(len(df)) + ' of ' + str(number_to_geocode) + ' left to geocode')\n", + " # \n", + "else:\n", + " print('no previously geocoded results found in dataframe')\n", + " df_leftover1 = pd.DataFrame()\n", + " df = df_input\n", + " \n", + "# filter to just those without lat lon\n", + "df_leftover = pd.concat([df_leftover1, df[df.geo_source.notnull()]])\n", + "df = df[df.geo_source.isnull()]\n", + "print(str(len(df)) + ' of ' + str(len(df_input[df_input.geo_source.isnull()])) + ' records left to geocode')\n", + "\n", + "# sanity check for length of dataframes\n", + "diff = len(df_input) - len(df_leftover) - len(df)\n", + "if diff != 0:\n", + " print('ERROR length of output is ' + diff + '. review the scripts to correct')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-20T21:01:00.227261Z", + "iopub.status.busy": "2022-04-20T21:01:00.226981Z", + "iopub.status.idle": "2022-04-20T21:01:00.231124Z", + "shell.execute_reply": "2022-04-20T21:01:00.230197Z", + "shell.execute_reply.started": "2022-04-20T21:01:00.227232Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# define parameters for osm api call\n", + "headers = {\n", + " 'User-Agent': 'Sam Lumley Statistics Canada',\n", + " 'From': 'sam.lumley@statcan.gc.ca' \n", + " }\n", + "url = 'https://nominatim.openstreetmap.org/search?'\n", + "url_gc = 'https://national-address-register-statcan.api.canada.ca:443/v1/addresses/search'\n", + "\n", + "JSONS = []\n", + "JSONS_CITIES = []" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-20T21:01:01.033582Z", + "iopub.status.busy": "2022-04-20T21:01:01.033202Z", + "iopub.status.idle": "2022-04-20T21:01:01.056442Z", + "shell.execute_reply": "2022-04-20T21:01:01.055617Z", + "shell.execute_reply.started": "2022-04-20T21:01:01.033544Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# define our multiple api queries\n", + "\n", + "df.fillna('', inplace=True)\n", + "\n", + "df['nom_request_name'] = df['facility_name'] + ', ' + df['city'] + ', ' + df['province'] + ', ' + 'Canada'\n", + "df['nom_request_street'] = df['street_no'] + ' ' + df['street_name'] + ', ' + df['city'] + ', ' + df['province'] + ', ' + 'Canada'\n", + "df['nom_request_city'] = df['city'] + ', ' + df['province'] + ', ' + 'Canada'\n", + "df['gc_request_street'] = df['street_no'] + ' ' + df['street_name'] + ' ' + df['city'] + ' ' + df['province']\n", + "\n", + "reqs_name = list(df['nom_request_name'])\n", + "reqs_street = list(df['nom_request_street'])\n", + "reqs_city = list(df['nom_request_city'])\n", + "reqs_gc = list(df['gc_request_street'])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-20T21:01:04.270692Z", + "iopub.status.busy": "2022-04-20T21:01:04.270314Z", + "iopub.status.idle": "2022-04-21T01:03:57.437732Z", + "shell.execute_reply": "2022-04-21T01:03:57.437055Z", + "shell.execute_reply.started": "2022-04-20T21:01:04.270644Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1: Labrador South Health Centre, Forteau, NL, Canada\n", + "osm query name: Labrador South Health Centre, Forteau, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Forteau, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2: Foothills Medical Centre, Calgary, AB, Canada\n", + "osm query name: Foothills Medical Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "3: Alberta Children's Hospital, Calgary, AB, Canada\n", + "osm query name: Alberta Children's Hospital, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "4: Rockyview General Hospital, Calgary, AB, Canada\n", + "osm query name: Rockyview General Hospital, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "5: Peter Lougheed Centre, Calgary, AB, Canada\n", + "osm query name: Peter Lougheed Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "6: South Health Campus, Calgary, AB, Canada\n", + "osm query name: South Health Campus, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "7: Oilfields General Hospital, Black diamond, AB, Canada\n", + "osm query name: Oilfields General Hospital, Black diamond, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "8: Strathmore District Health Services, , AB, Canada\n", + "osm query name: Strathmore District Health Services, , AB, Canada\n", + "osm query street: 200 brent boulevard strathmore, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "9: High River General Hospital, High river, AB, Canada\n", + "osm query name: High River General Hospital, High river, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "10: Didsbury District Health Services, Didsbury, AB, Canada\n", + "osm query name: Didsbury District Health Services, Didsbury, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "11: Olds Hospital and Care Centre, , AB, Canada\n", + "osm query name: Olds Hospital and Care Centre, , AB, Canada\n", + "osm query street: 3901 57 avenue olds, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "12: Canmore General Hospital, Canmore, AB, Canada\n", + "osm query name: Canmore General Hospital, Canmore, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "13: Vulcan Community Health Centre, , AB, Canada\n", + "osm query name: Vulcan Community Health Centre, , AB, Canada\n", + "osm query street: 610 elizabeth street s vulcan, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "14: Three Hills Health Centre, Hills, AB, Canada\n", + "osm query name: Three Hills Health Centre, Hills, AB, Canada\n", + "osm query street: 1504 2 street n three, Hills, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "15: Myron Thompson Health Centre, Sundre, AB, Canada\n", + "osm query name: Myron Thompson Health Centre, Sundre, AB, Canada\n", + "osm query street: 709 1 street ne, Sundre, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "16: Drumheller Health Centre, Drumheller, AB, Canada\n", + "osm query name: Drumheller Health Centre, Drumheller, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "17: Mineral Springs Hospital, Banff, AB, Canada\n", + "osm query name: Mineral Springs Hospital, Banff, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "18: Innisfail Health Centre, Innisfail, AB, Canada\n", + "osm query name: Innisfail Health Centre, Innisfail, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "19: Bassano Health Centre, , AB, Canada\n", + "osm query name: Bassano Health Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "20: Claresholm General Hospital, Claresholm, AB, Canada\n", + "osm query name: Claresholm General Hospital, Claresholm, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "21: Red Deer Regional Hospital Centre, Red deer, AB, Canada\n", + "osm query name: Red Deer Regional Hospital Centre, Red deer, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "22: Fort Macleod Health Centre, Fort macleod, AB, Canada\n", + "osm query name: Fort Macleod Health Centre, Fort macleod, AB, Canada\n", + "osm query street: 744 26 street s, Fort macleod, AB, Canada\n", + "osm query city: Fort macleod, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "23: Lacombe Hospital and Care Centre, , AB, Canada\n", + "osm query name: Lacombe Hospital and Care Centre, , AB, Canada\n", + "osm query street: 5430 47 avenue lacombe, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "24: Rocky Mountain House Health Centre, Rocky mountain house, AB, Canada\n", + "osm query name: Rocky Mountain House Health Centre, Rocky mountain house, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "25: Crowsnest Pass Health Centre, , AB, Canada\n", + "osm query name: Crowsnest Pass Health Centre, , AB, Canada\n", + "osm query street: 2001 107 street, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "26: Brooks Health Centre, , AB, Canada\n", + "osm query name: Brooks Health Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "27: Hanna Health Centre, Hanna, AB, Canada\n", + "osm query name: Hanna Health Centre, Hanna, AB, Canada\n", + "osm query street: 904 centre street, Hanna, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "28: Stettler Hospital and Care Centre, Stettler, AB, Canada\n", + "osm query name: Stettler Hospital and Care Centre, Stettler, AB, Canada\n", + "osm query street: 5912 47 avenue, Stettler, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "29: Pincher Creek Health Centre, Pincher creek, AB, Canada\n", + "osm query name: Pincher Creek Health Centre, Pincher creek, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "30: Chinook Regional Hospital, , AB, Canada\n", + "osm query name: Chinook Regional Hospital, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "31: Rimbey Hospital and Care Centre, Rimbey, AB, Canada\n", + "osm query name: Rimbey Hospital and Care Centre, Rimbey, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "32: Ponoka Hospital and Care Centre, Ponoka, AB, Canada\n", + "osm query name: Ponoka Hospital and Care Centre, Ponoka, AB, Canada\n", + "osm query street: 5800 57 avenue, Ponoka, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "33: Taber Health Centre, , AB, Canada\n", + "osm query name: Taber Health Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "34: Our Lady of the Rosary Hospital, , AB, Canada\n", + "osm query name: Our Lady of the Rosary Hospital, , AB, Canada\n", + "osm query street: 5402 47 street castor, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "35: Raymond Health Centre, , AB, Canada\n", + "osm query name: Raymond Health Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "36: Cardston Health Centre, , AB, Canada\n", + "osm query name: Cardston Health Centre, , AB, Canada\n", + "osm query street: 144 2 street w cardston, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "37: Coronation Hospital and Care Centre, Coronation, AB, Canada\n", + "osm query name: Coronation Hospital and Care Centre, Coronation, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "38: Wetaskiwin Hospital and Care Centre, Wetaskiwin, AB, Canada\n", + "osm query name: Wetaskiwin Hospital and Care Centre, Wetaskiwin, AB, Canada\n", + "osm query street: 6910 47 street, Wetaskiwin, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "39: Bow Island Health Centre, Bow, AB, Canada\n", + "osm query name: Bow Island Health Centre, Bow, AB, Canada\n", + "osm query street: 938 centre street, Bow, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "40: St. Mary's Hospital, Camrose, AB, Canada\n", + "osm query name: St. Mary's Hospital, Camrose, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "41: Daysland Health Centre, Daysland, AB, Canada\n", + "osm query name: Daysland Health Centre, Daysland, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "42: Killam Health Care Centre, , AB, Canada\n", + "osm query name: Killam Health Care Centre, , AB, Canada\n", + "osm query street: 5203 49 avenue killam, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "43: Leduc Community Hospital, , AB, Canada\n", + "osm query name: Leduc Community Hospital, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "44: Drayton Valley Hospital and Care Centre, Drayton valley, AB, Canada\n", + "osm query name: Drayton Valley Hospital and Care Centre, Drayton valley, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "45: Big Country Hospital, , AB, Canada\n", + "osm query name: Big Country Hospital, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "46: Milk River Health Centre, Milk river, AB, Canada\n", + "osm query name: Milk River Health Centre, Milk river, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "47: Devon General Hospital, , AB, Canada\n", + "osm query name: Devon General Hospital, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "48: Hardisty Health Centre, , AB, Canada\n", + "osm query name: Hardisty Health Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "49: Medicine Hat Regional Hospital, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat Regional Hospital, Medicine hat, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "50: Grey Nuns Community Hospital, Edmonton, AB, Canada\n", + "osm query name: Grey Nuns Community Hospital, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "51: Tofield Health Centre, Tofield, AB, Canada\n", + "osm query name: Tofield Health Centre, Tofield, AB, Canada\n", + "osm query street: 5543 44 street, Tofield, AB, Canada\n", + "osm query city: Tofield, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "52: Misericordia Community Hospital, Edmonton, AB, Canada\n", + "osm query name: Misericordia Community Hospital, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "53: Viking Health Centre, , AB, Canada\n", + "osm query name: Viking Health Centre, , AB, Canada\n", + "osm query street: 5110 57 avenue viking, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "54: WestView Health Centre - Stony Plain, Stony plain, AB, Canada\n", + "osm query name: WestView Health Centre - Stony Plain, Stony plain, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "55: University of Alberta Hospital, Edmonton, AB, Canada\n", + "osm query name: University of Alberta Hospital, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "56: Royal Alexandra Hospital, Edmonton, AB, Canada\n", + "osm query name: Royal Alexandra Hospital, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "57: Strathcona Community Hospital, Sherwood park, AB, Canada\n", + "osm query name: Strathcona Community Hospital, Sherwood park, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "58: Northeast Community Health Centre, Edmonton, AB, Canada\n", + "osm query name: Northeast Community Health Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "59: Sturgeon Community Hospital, St. albert, AB, Canada\n", + "osm query name: Sturgeon Community Hospital, St. albert, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "60: Wainwright Health Centre, , AB, Canada\n", + "osm query name: Wainwright Health Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "61: Fort Saskatchewan Community Hospital, Fort saskatchewan, AB, Canada\n", + "osm query name: Fort Saskatchewan Community Hospital, Fort saskatchewan, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "62: Provost Health Centre, , AB, Canada\n", + "osm query name: Provost Health Centre, , AB, Canada\n", + "osm query street: 5002 54 avenue provost, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "63: St. Joseph's General Hospital, Vegreville, AB, Canada\n", + "osm query name: St. Joseph's General Hospital, Vegreville, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "64: Lamont Health Care Centre, Lamont, AB, Canada\n", + "osm query name: Lamont Health Care Centre, Lamont, AB, Canada\n", + "osm query street: 5216 53 street, Lamont, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "65: Edson Healthcare Centre, , AB, Canada\n", + "osm query name: Edson Healthcare Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "66: Redwater Health Centre, Redwater, AB, Canada\n", + "osm query name: Redwater Health Centre, Redwater, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "67: Mayerthorpe Healthcare Centre, Mayerthorpe, AB, Canada\n", + "osm query name: Mayerthorpe Healthcare Centre, Mayerthorpe, AB, Canada\n", + "osm query street: 4417 45 street, Mayerthorpe, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "68: Two Hills Health Centre, Hills, AB, Canada\n", + "osm query name: Two Hills Health Centre, Hills, AB, Canada\n", + "osm query street: 4401 53 avenue two, Hills, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "69: Vermilion Health Centre, , AB, Canada\n", + "osm query name: Vermilion Health Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "70: Seton - Jasper Healthcare Centre, Jasper, AB, Canada\n", + "osm query name: Seton - Jasper Healthcare Centre, Jasper, AB, Canada\n", + "osm query street: 518 robson street, Jasper, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "71: Barrhead Healthcare Centre, Barrhead, AB, Canada\n", + "osm query name: Barrhead Healthcare Centre, Barrhead, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "72: Westlock Healthcare Centre, Westlock, AB, Canada\n", + "osm query name: Westlock Healthcare Centre, Westlock, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "73: Hinton Healthcare Centre, Hinton, AB, Canada\n", + "osm query name: Hinton Healthcare Centre, Hinton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "74: George McDougall - Smoky Lake Healthcare Centre, Smoky lake, AB, Canada\n", + "osm query name: George McDougall - Smoky Lake Healthcare Centre, Smoky lake, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "75: Whitecourt Healthcare Centre, Whitecourt, AB, Canada\n", + "osm query name: Whitecourt Healthcare Centre, Whitecourt, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "76: St. Therese - St. Paul Healthcare Centre, St. paul, AB, Canada\n", + "osm query name: St. Therese - St. Paul Healthcare Centre, St. paul, AB, Canada\n", + "osm query street: 4713 48 avenue, St. paul, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "77: Elk Point Healthcare Centre, Elk point, AB, Canada\n", + "osm query name: Elk Point Healthcare Centre, Elk point, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "78: Boyle Healthcare Centre, , AB, Canada\n", + "osm query name: Boyle Healthcare Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "79: Athabasca Healthcare Centre, Athabasca, AB, Canada\n", + "osm query name: Athabasca Healthcare Centre, Athabasca, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "80: Fox Creek Healthcare Centre, Fox creek, AB, Canada\n", + "osm query name: Fox Creek Healthcare Centre, Fox creek, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "81: Swan Hills Healthcare Centre, Swan hills, AB, Canada\n", + "osm query name: Swan Hills Healthcare Centre, Swan hills, AB, Canada\n", + "osm query street: 29 freeman drive, Swan hills, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "82: Bonnyville Healthcare Centre, Bonnyville, AB, Canada\n", + "osm query name: Bonnyville Healthcare Centre, Bonnyville, AB, Canada\n", + "osm query street: 5001 lakeshore drive, Bonnyville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "83: William J. Cadzow - Lac La Biche Healthcare Centre, Lac la biche, AB, Canada\n", + "osm query name: William J. Cadzow - Lac La Biche Healthcare Centre, Lac la biche, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "84: Cold Lake Healthcare Centre, Cold lake, AB, Canada\n", + "osm query name: Cold Lake Healthcare Centre, Cold lake, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "85: Grande Cache Community Health Complex, Grande cache, AB, Canada\n", + "osm query name: Grande Cache Community Health Complex, Grande cache, AB, Canada\n", + "osm query street: 10200 shand avenue, Grande cache, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "86: Slave Lake Healthcare Centre, Slave lake, AB, Canada\n", + "osm query name: Slave Lake Healthcare Centre, Slave lake, AB, Canada\n", + "osm query street: 309 6 street ne, Slave lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "87: Valleyview Health Centre, , AB, Canada\n", + "osm query name: Valleyview Health Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "88: High Prairie Health Complex, High prairie, AB, Canada\n", + "osm query name: High Prairie Health Complex, High prairie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "89: Wabasca / Desmarais Health Care Centre, , AB, Canada\n", + "osm query name: Wabasca / Desmarais Health Care Centre, , AB, Canada\n", + "osm query street: 881 mistassiniy road wabasca, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "90: Sacred Heart Community Health Centre, , AB, Canada\n", + "osm query name: Sacred Heart Community Health Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "91: Queen Elizabeth II Ambulatory Care Centre, Grande prairie, AB, Canada\n", + "osm query name: Queen Elizabeth II Ambulatory Care Centre, Grande prairie, AB, Canada\n", + "osm query street: 10409 98 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "92: Grande Prairie Regional Hospital, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie Regional Hospital, Grande prairie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "93: Beaverlodge Municipal Hospital, Beaverlodge, AB, Canada\n", + "osm query name: Beaverlodge Municipal Hospital, Beaverlodge, AB, Canada\n", + "osm query street: 422 10a street, Beaverlodge, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "94: Central Peace Health Complex, Spirit river, AB, Canada\n", + "osm query name: Central Peace Health Complex, Spirit river, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "95: Peace River Community Health Centre, Peace river, AB, Canada\n", + "osm query name: Peace River Community Health Centre, Peace river, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "96: Grimshaw / Berwyn and District Community Health Centre, Grimshaw, AB, Canada\n", + "osm query name: Grimshaw / Berwyn and District Community Health Centre, Grimshaw, AB, Canada\n", + "osm query street: 5621 50th avenue, Grimshaw, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "97: Fairview Health Complex, Fairview, AB, Canada\n", + "osm query name: Fairview Health Complex, Fairview, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "98: Northern Lights Regional Health Centre, Fort mcmurray, AB, Canada\n", + "osm query name: Northern Lights Regional Health Centre, Fort mcmurray, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "99: Manning Community Health Centre, Manning, AB, Canada\n", + "osm query name: Manning Community Health Centre, Manning, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "100: St. Theresa General Hospital, Fort vermilion, AB, Canada\n", + "osm query name: St. Theresa General Hospital, Fort vermilion, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "101: Northwest Health Centre, High level, AB, Canada\n", + "osm query name: Northwest Health Centre, High level, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "102: Sheldon M. Chumir Health Centre, Calgary, AB, Canada\n", + "osm query name: Sheldon M. Chumir Health Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "103: South Calgary Health Centre, Calgary, AB, Canada\n", + "osm query name: South Calgary Health Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "104: Airdrie Community Health Centre, Airdrie, AB, Canada\n", + "osm query name: Airdrie Community Health Centre, Airdrie, AB, Canada\n", + "osm query street: 604 main street s, Airdrie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "105: Cochrane Community Health Centre, , AB, Canada\n", + "osm query name: Cochrane Community Health Centre, , AB, Canada\n", + "osm query street: 60 grande boulevard cochrane, , AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "106: Okotoks Health and Wellness Centre, Okotoks, AB, Canada\n", + "osm query name: Okotoks Health and Wellness Centre, Okotoks, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "107: East Edmonton Health Centre, Edmonton, AB, Canada\n", + "osm query name: East Edmonton Health Centre, Edmonton, AB, Canada\n", + "osm query street: 7910 112 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "108: Tom Baker Cancer Centre, Calgary, AB, Canada\n", + "osm query name: Tom Baker Cancer Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "109: Coaldale Health Centre, Coaldale, AB, Canada\n", + "osm query name: Coaldale Health Centre, Coaldale, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "110: Consort Hospital and Care Centre, , AB, Canada\n", + "osm query name: Consort Hospital and Care Centre, , AB, Canada\n", + "osm query street: 5402 52 avenue consort, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "111: Cross Cancer Institute, Edmonton, AB, Canada\n", + "osm query name: Cross Cancer Institute, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "112: Mazankowski Alberta Heart Institute, Edmonton, AB, Canada\n", + "osm query name: Mazankowski Alberta Heart Institute, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "113: Stollery Children's Hospital, Edmonton, AB, Canada\n", + "osm query name: Stollery Children's Hospital, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "114: Lois Hole Hospital for Women, Edmonton, AB, Canada\n", + "osm query name: Lois Hole Hospital for Women, Edmonton, AB, Canada\n", + "osm query street: 10240 kingsway avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "115: Glenrose Rehabilitation Hospital, Edmonton, AB, Canada\n", + "osm query name: Glenrose Rehabilitation Hospital, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "116: Lloydminster Hospital (Saskatchewan), Lloydminster, AB, Canada\n", + "osm query name: Lloydminster Hospital (Saskatchewan), Lloydminster, AB, Canada\n", + "osm query street: 3820 43 avenue, Lloydminster, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "117: North Hill Community Health Centre, Calgary, AB, Canada\n", + "osm query name: North Hill Community Health Centre, Calgary, AB, Canada\n", + "osm query street: 1527 19 street nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "118: Shaganappi Complex, Calgary, AB, Canada\n", + "osm query name: Shaganappi Complex, Calgary, AB, Canada\n", + "osm query street: 3415 8 avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "119: East Calgary Health Centre, Calgary, AB, Canada\n", + "osm query name: East Calgary Health Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "120: Thornhill Community Health Centre, Calgary, AB, Canada\n", + "osm query name: Thornhill Community Health Centre, Calgary, AB, Canada\n", + "osm query street: 6617 centre street n, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "121: Acadia Community Health Centre, Calgary, AB, Canada\n", + "osm query name: Acadia Community Health Centre, Calgary, AB, Canada\n", + "osm query street: 151 86 avenue se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "122: Village Square Leisure Centre, Calgary, AB, Canada\n", + "osm query name: Village Square Leisure Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "123: Chestermere Community Health Centre, Chestermere, AB, Canada\n", + "osm query name: Chestermere Community Health Centre, Chestermere, AB, Canada\n", + "osm query street: 288 kinniburgh boulevard, Chestermere, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "124: Strathmore Public Health Office, , AB, Canada\n", + "osm query name: Strathmore Public Health Office, , AB, Canada\n", + "osm query street: 650 westchester road, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "125: High River Public Health Centre, High river, AB, Canada\n", + "osm query name: High River Public Health Centre, High river, AB, Canada\n", + "osm query street: 310 macleod trail sw, High river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "126: Nanton Community Health Centre, Nanton, AB, Canada\n", + "osm query name: Nanton Community Health Centre, Nanton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "127: Olds Campus Community Health Centre, Olds, AB, Canada\n", + "osm query name: Olds Campus Community Health Centre, Olds, AB, Canada\n", + "osm query street: 4500 50 street, Olds, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "128: Olds Provincial Building (North), Olds, AB, Canada\n", + "osm query name: Olds Provincial Building (North), Olds, AB, Canada\n", + "osm query street: 5030 50 street, Olds, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "129: Sundre Community Health Centre, Sundre, AB, Canada\n", + "osm query name: Sundre Community Health Centre, Sundre, AB, Canada\n", + "osm query street: 212 6 avenue ne, Sundre, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "130: Banff Community Health Centre, Banff, AB, Canada\n", + "osm query name: Banff Community Health Centre, Banff, AB, Canada\n", + "osm query street: 303 lynx street, Banff, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "131: Claresholm Community Health Centre, Claresholm, AB, Canada\n", + "osm query name: Claresholm Community Health Centre, Claresholm, AB, Canada\n", + "osm query street: 5221 2 street w, Claresholm, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "132: Elnora Community Health Centre, Elnora, AB, Canada\n", + "osm query name: Elnora Community Health Centre, Elnora, AB, Canada\n", + "osm query street: 425 8 avenue, Elnora, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "133: Red Deer Bremner Ave Community Health Centre, Red deer, AB, Canada\n", + "osm query name: Red Deer Bremner Ave Community Health Centre, Red deer, AB, Canada\n", + "osm query street: 2845 bremner avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "134: Red Deer 49th Street Community Health Centre, Red deer, AB, Canada\n", + "osm query name: Red Deer 49th Street Community Health Centre, Red deer, AB, Canada\n", + "osm query street: 4755 49 street, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "135: Sylvan Lake Community Health Centre, , AB, Canada\n", + "osm query name: Sylvan Lake Community Health Centre, , AB, Canada\n", + "osm query street: 4602 49 avenue, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "136: Red Deer Johnstone Crossing Community Health Centre, Red deer, AB, Canada\n", + "osm query name: Red Deer Johnstone Crossing Community Health Centre, Red deer, AB, Canada\n", + "osm query street: 300 jordan parkway, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "137: Eckville Community Health Centre, Eckville, AB, Canada\n", + "osm query name: Eckville Community Health Centre, Eckville, AB, Canada\n", + "osm query street: 5120 51 avenue, Eckville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "138: Lacombe Community Health Centre, Lacombe, AB, Canada\n", + "osm query name: Lacombe Community Health Centre, Lacombe, AB, Canada\n", + "osm query street: 4580 46 street, Lacombe, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "139: Piyami Health Centre, Picture butte, AB, Canada\n", + "osm query name: Piyami Health Centre, Picture butte, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "140: Crowsnest Pass Provincial Building, , AB, Canada\n", + "osm query name: Crowsnest Pass Provincial Building, , AB, Canada\n", + "osm query street: 12501 20 avenue blairmore, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "141: Stettler Community Health Centre, Stettler, AB, Canada\n", + "osm query name: Stettler Community Health Centre, Stettler, AB, Canada\n", + "osm query street: 5911 50 avenue, Stettler, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "142: Lethbridge Health Unit, , AB, Canada\n", + "osm query name: Lethbridge Health Unit, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "143: Lethbridge Provincial Building , , AB, Canada\n", + "osm query name: Lethbridge Provincial Building , , AB, Canada\n", + "osm query street: 200 5 avenue s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "144: Vauxhall Community Health, , AB, Canada\n", + "osm query name: Vauxhall Community Health, , AB, Canada\n", + "osm query street: 406 1 avenue n vauxhall, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "145: Rimbey Community Health Centre, Rimbey, AB, Canada\n", + "osm query name: Rimbey Community Health Centre, Rimbey, AB, Canada\n", + "osm query street: 4709 51 avenue, Rimbey, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "146: Ponoka Community Health Centre, Ponoka, AB, Canada\n", + "osm query name: Ponoka Community Health Centre, Ponoka, AB, Canada\n", + "osm query street: 5900 2a highway, Ponoka, AB, Canada\n", + "osm query city: Ponoka, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "147: Castor Community Health Centre, , AB, Canada\n", + "osm query name: Castor Community Health Centre, , AB, Canada\n", + "osm query street: 4909 50 avenue castor, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "148: Maskwacis Health Services, Maskwacis, AB, Canada\n", + "osm query name: Maskwacis Health Services, Maskwacis, AB, Canada\n", + "osm query street: 14 ermineskin avenue, Maskwacis, AB, Canada\n", + "osm query city: Maskwacis, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "149: Winfield Community Health Centre, Winfield, AB, Canada\n", + "osm query name: Winfield Community Health Centre, Winfield, AB, Canada\n", + "osm query street: 10 2 avenue w, Winfield, AB, Canada\n", + "osm query city: Winfield, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "150: Coronation Community Health Centre, , AB, Canada\n", + "osm query name: Coronation Community Health Centre, , AB, Canada\n", + "osm query street: 4909 royal street coronation, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "151: Wetaskiwin Community Health Centre, Wetaskiwin, AB, Canada\n", + "osm query name: Wetaskiwin Community Health Centre, Wetaskiwin, AB, Canada\n", + "osm query street: 5610 40 avenue, Wetaskiwin, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "152: Bow Island Provincial Building, Bow island, AB, Canada\n", + "osm query name: Bow Island Provincial Building, Bow island, AB, Canada\n", + "osm query street: 802 6 street e, Bow island, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "153: Camrose Community Health Centre Briarcrest, Camrose, AB, Canada\n", + "osm query name: Camrose Community Health Centre Briarcrest, Camrose, AB, Canada\n", + "osm query street: 5510 46 avenue, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "154: Thorsby Public Health Centre, Thorsby, AB, Canada\n", + "osm query name: Thorsby Public Health Centre, Thorsby, AB, Canada\n", + "osm query street: 4825 hankin street, Thorsby, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "155: Leduc Public Health Centre, , AB, Canada\n", + "osm query name: Leduc Public Health Centre, , AB, Canada\n", + "osm query street: 4219 50 street leduc, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "156: Drayton Valley Community Health Centre, Drayton valley, AB, Canada\n", + "osm query name: Drayton Valley Community Health Centre, Drayton valley, AB, Canada\n", + "osm query street: 4110 50 avenue, Drayton valley, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "157: Consort Community Health Centre, , AB, Canada\n", + "osm query name: Consort Community Health Centre, , AB, Canada\n", + "osm query street: 5410 52 avenue consort, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "158: Sedgewick Community Health Centre, , AB, Canada\n", + "osm query name: Sedgewick Community Health Centre, , AB, Canada\n", + "osm query street: 4822 50 street sedgewick, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "159: Beaumont Public Health Centre, , AB, Canada\n", + "osm query name: Beaumont Public Health Centre, , AB, Canada\n", + "osm query street: 4918 50 avenue beaumont, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "160: Rutherford Health Centre, Edmonton, AB, Canada\n", + "osm query name: Rutherford Health Centre, Edmonton, AB, Canada\n", + "osm query street: 11153 ellerslie road sw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "161: Medicine Hat Community Health Services, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat Community Health Services, Medicine hat, AB, Canada\n", + "osm query street: 2948 dunmore road se, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "162: Twin Brooks Public Health Centre, Edmonton, AB, Canada\n", + "osm query name: Twin Brooks Public Health Centre, Edmonton, AB, Canada\n", + "osm query street: 1110 113 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "163: Mill Woods Public Health Centre, Edmonton, AB, Canada\n", + "osm query name: Mill Woods Public Health Centre, Edmonton, AB, Canada\n", + "osm query street: 7525 38 avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "164: Viking Community Health Centre, , AB, Canada\n", + "osm query name: Viking Community Health Centre, , AB, Canada\n", + "osm query street: 5224 50 street viking, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "165: Stan Woloshyn Building, Spruce grove, AB, Canada\n", + "osm query name: Stan Woloshyn Building, Spruce grove, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "166: West Jasper Place Public Health Centre, Edmonton, AB, Canada\n", + "osm query name: West Jasper Place Public Health Centre, Edmonton, AB, Canada\n", + "osm query street: 9720 182 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "167: Spruce Grove Health Unit, Spruce grove, AB, Canada\n", + "osm query name: Spruce Grove Health Unit, Spruce grove, AB, Canada\n", + "osm query street: 505 queen street, Spruce grove, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "168: Bonnie Doon Public Health Centre, Edmonton, AB, Canada\n", + "osm query name: Bonnie Doon Public Health Centre, Edmonton, AB, Canada\n", + "osm query street: 8314 88 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "169: Seventh Street Plaza, Edmonton, AB, Canada\n", + "osm query name: Seventh Street Plaza, Edmonton, AB, Canada\n", + "osm query street: 10030 107 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "170: Boyle McCauley Health Centre, Edmonton, AB, Canada\n", + "osm query name: Boyle McCauley Health Centre, Edmonton, AB, Canada\n", + "osm query street: 10628 96 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "171: Strathcona County Health Centre, Sherwood park, AB, Canada\n", + "osm query name: Strathcona County Health Centre, Sherwood park, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "172: Northgate Centre, Edmonton, AB, Canada\n", + "osm query name: Northgate Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "173: St. Albert Public Health Centre, Albert, AB, Canada\n", + "osm query name: St. Albert Public Health Centre, Albert, AB, Canada\n", + "osm query street: 23 sir winston churchill avenue st., Albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "174: Good Samaritan Pembina Village, Evansburg, AB, Canada\n", + "osm query name: Good Samaritan Pembina Village, Evansburg, AB, Canada\n", + "osm query street: 5225 50 street, Evansburg, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "175: Onoway Community Health Services, Onoway, AB, Canada\n", + "osm query name: Onoway Community Health Services, Onoway, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "176: Wainwright Provincial Building, , AB, Canada\n", + "osm query name: Wainwright Provincial Building, , AB, Canada\n", + "osm query street: 810 14 avenue wainwright, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "177: Provost Provincial Building, , AB, Canada\n", + "osm query name: Provost Provincial Building, , AB, Canada\n", + "osm query street: 5419 44 street provost, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "178: Vegreville Community Health Centre, Vegreville, AB, Canada\n", + "osm query name: Vegreville Community Health Centre, Vegreville, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "179: Morinville Provincial Building, Morinville, AB, Canada\n", + "osm query name: Morinville Provincial Building, Morinville, AB, Canada\n", + "osm query street: 10008 107 street, Morinville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "180: Gibbons Health Unit, Gibbons, AB, Canada\n", + "osm query name: Gibbons Health Unit, Gibbons, AB, Canada\n", + "osm query street: 4720 50 avenue, Gibbons, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "181: Vermilion Provincial Building, , AB, Canada\n", + "osm query name: Vermilion Provincial Building, , AB, Canada\n", + "osm query street: 4701 52 street vermilion, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "182: Barrhead Community Health Services, Barrhead, AB, Canada\n", + "osm query name: Barrhead Community Health Services, Barrhead, AB, Canada\n", + "osm query street: 6203 49 street, Barrhead, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "183: Westlock Community Health Services, Westlock, AB, Canada\n", + "osm query name: Westlock Community Health Services, Westlock, AB, Canada\n", + "osm query street: 10024 107 avenue, Westlock, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "184: Thorhild Community Health Services, Thorhild, AB, Canada\n", + "osm query name: Thorhild Community Health Services, Thorhild, AB, Canada\n", + "osm query street: 302 2 avenue, Thorhild, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "185: Hinton Community Health Services, Hinton, AB, Canada\n", + "osm query name: Hinton Community Health Services, Hinton, AB, Canada\n", + "osm query street: 1280a switzer drive, Hinton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "186: Kitscoty Community Health Centre, Kitscoty, AB, Canada\n", + "osm query name: Kitscoty Community Health Centre, Kitscoty, AB, Canada\n", + "osm query street: 4922 49 avenue, Kitscoty, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "187: Whitecourt Community Health Services, Whitecourt, AB, Canada\n", + "osm query name: Whitecourt Community Health Services, Whitecourt, AB, Canada\n", + "osm query street: 4707 50 avenue, Whitecourt, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "188: Vilna Community Health Services, Vilna, AB, Canada\n", + "osm query name: Vilna Community Health Services, Vilna, AB, Canada\n", + "osm query street: 5103 48 street, Vilna, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "189: Prairie North Plaza, Lloydminster, AB, Canada\n", + "osm query name: Prairie North Plaza, Lloydminster, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "190: St. Paul Community Health Services, St. paul, AB, Canada\n", + "osm query name: St. Paul Community Health Services, St. paul, AB, Canada\n", + "osm query street: 5610 50 avenue, St. paul, AB, Canada\n", + "osm query city: St. paul, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "191: Kikino Community Health Services, Kikino, AB, Canada\n", + "osm query name: Kikino Community Health Services, Kikino, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Kikino, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "192: Buffalo Lake Settlement Community Health Services, , AB, Canada\n", + "osm query name: Buffalo Lake Settlement Community Health Services, , AB, Canada\n", + "osm query street: buffalo lake settlement, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "193: Glendon Community Health Services, Glendon, AB, Canada\n", + "osm query name: Glendon Community Health Services, Glendon, AB, Canada\n", + "osm query street: 2 street railway avenue, Glendon, AB, Canada\n", + "osm query city: Glendon, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "194: Athabasca Community Health Services, Athabasca, AB, Canada\n", + "osm query name: Athabasca Community Health Services, Athabasca, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "195: Fishing Lake Metis Settlement Community Health Services, , AB, Canada\n", + "osm query name: Fishing Lake Metis Settlement Community Health Services, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "196: Bonnyville Community Health Services, Bonnyville, AB, Canada\n", + "osm query name: Bonnyville Community Health Services, Bonnyville, AB, Canada\n", + "osm query street: 4904 50 avenue, Bonnyville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "197: Elizabeth Settlement Community Hall, , AB, Canada\n", + "osm query name: Elizabeth Settlement Community Hall, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "198: Calling Lake Community Health Services, Calling lake, AB, Canada\n", + "osm query name: Calling Lake Community Health Services, Calling lake, AB, Canada\n", + "osm query street: 3401 48 avenue, Calling lake, AB, Canada\n", + "osm query city: Calling lake, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "199: Cold Lake Community Health Services, Cold lake, AB, Canada\n", + "osm query name: Cold Lake Community Health Services, Cold lake, AB, Canada\n", + "osm query street: 4720 55 street, Cold lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "200: Grande Cache Provincial Building, Grande cache, AB, Canada\n", + "osm query name: Grande Cache Provincial Building, Grande cache, AB, Canada\n", + "osm query street: 10001 hoppe avenue, Grande cache, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "201: Kinuso Community Health Services, Kinuso, AB, Canada\n", + "osm query name: Kinuso Community Health Services, Kinuso, AB, Canada\n", + "osm query street: 40 centre street, Kinuso, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "202: Valleyview Community Health Services, , AB, Canada\n", + "osm query name: Valleyview Community Health Services, , AB, Canada\n", + "osm query street: 5112 50 avenue valleyview, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "203: East Prairie Metis Settlement, East prairie, AB, Canada\n", + "osm query name: East Prairie Metis Settlement, East prairie, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: East prairie, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "204: Wabasca / Demarais Community Health Service, , AB, Canada\n", + "osm query name: Wabasca / Demarais Community Health Service, , AB, Canada\n", + "osm query street: 867 stony point road wabasca, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "205: Gift Lake Community Health Services, Gift lake, AB, Canada\n", + "osm query name: Gift Lake Community Health Services, Gift lake, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Gift lake, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "206: Grande Prairie Virene Building, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie Virene Building, Grande prairie, AB, Canada\n", + "osm query street: 10121 97 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "207: Grande Prairie Provincial Building, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie Provincial Building, Grande prairie, AB, Canada\n", + "osm query street: 10320 99 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "208: Grande Prairie College and Community Health Centre, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie College and Community Health Centre, Grande prairie, AB, Canada\n", + "osm query street: 10620 104 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "209: Janvier Municipal Building, Chard, AB, Canada\n", + "osm query name: Janvier Municipal Building, Chard, AB, Canada\n", + "osm query street: 110 janvier drive, Chard, AB, Canada\n", + "osm query city: Chard, AB, Canada\n", + "[6] no address found\n", + "\n", + "\n", + "210: Beaverlodge Community Health Services, Beaverlodge, AB, Canada\n", + "osm query name: Beaverlodge Community Health Services, Beaverlodge, AB, Canada\n", + "osm query street: 412 10a street, Beaverlodge, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "211: Woodland Cree Health Centre, Cadotte lake, AB, Canada\n", + "osm query name: Woodland Cree Health Centre, Cadotte lake, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Cadotte lake, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "212: Spirit River Community Health Services, Spirit river, AB, Canada\n", + "osm query name: Spirit River Community Health Services, Spirit river, AB, Canada\n", + "osm query street: 5005 45 avenue, Spirit river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "213: Lubicon Lake Health Services, Little buffalo, AB, Canada\n", + "osm query name: Lubicon Lake Health Services, Little buffalo, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Little buffalo, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "214: Red Earth Creek Community Health Services, Red earth creek, AB, Canada\n", + "osm query name: Red Earth Creek Community Health Services, Red earth creek, AB, Canada\n", + "osm query street: 323 evergreen trail, Red earth creek, AB, Canada\n", + "osm query city: Red earth creek, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "215: Trout / Peerless Lake Health Centre, Peerless lake, AB, Canada\n", + "osm query name: Trout / Peerless Lake Health Centre, Peerless lake, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Peerless lake, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "216: Anzac Community Health Services, Anzac, AB, Canada\n", + "osm query name: Anzac Community Health Services, Anzac, AB, Canada\n", + "osm query street: 240 christina drive, Anzac, AB, Canada\n", + "osm query city: Anzac, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "217: Fort McMurray Community Health Services, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray Community Health Services, Fort mcmurray, AB, Canada\n", + "osm query street: 113 thickwood boulevard, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "218: Worsley Community Health Services, Worsley, AB, Canada\n", + "osm query name: Worsley Community Health Services, Worsley, AB, Canada\n", + "osm query street: 404 alberta avenue, Worsley, AB, Canada\n", + "osm query city: Worsley, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "219: Paddle Prairie Health Centre, Paddle prairie, AB, Canada\n", + "osm query name: Paddle Prairie Health Centre, Paddle prairie, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Paddle prairie, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "220: La Crete Public Health and Home Care Building, La crete, AB, Canada\n", + "osm query name: La Crete Public Health and Home Care Building, La crete, AB, Canada\n", + "osm query street: 9818 105 street, La crete, AB, Canada\n", + "osm query city: La crete, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "221: Fort Vermilion Community Health Centre, Fort vermilion, AB, Canada\n", + "osm query name: Fort Vermilion Community Health Centre, Fort vermilion, AB, Canada\n", + "osm query street: 4804 50 street, Fort vermilion, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "222: Rainbow Lake Community Health Services, Rainbow lake, AB, Canada\n", + "osm query name: Rainbow Lake Community Health Services, Rainbow lake, AB, Canada\n", + "osm query street: 6a commercial road, Rainbow lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "223: Gulf Canada Square, Calgary, AB, Canada\n", + "osm query name: Gulf Canada Square, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "224: North Hill Shopping Centre, Calgary, AB, Canada\n", + "osm query name: North Hill Shopping Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "225: Special Services Building, Calgary, AB, Canada\n", + "osm query name: Special Services Building, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "226: Foothills Professional Building, Calgary, AB, Canada\n", + "osm query name: Foothills Professional Building, Calgary, AB, Canada\n", + "osm query street: 1620 29 street nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "227: Sloane Square, Calgary, AB, Canada\n", + "osm query name: Sloane Square, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "228: Diagnostic and Scientific Centre, Calgary, AB, Canada\n", + "osm query name: Diagnostic and Scientific Centre, Calgary, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Calgary, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "229: Marlborough Professional Building, Calgary, AB, Canada\n", + "osm query name: Marlborough Professional Building, Calgary, AB, Canada\n", + "osm query street: 433 marlborough way ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "230: Glenbrook Plaza, Calgary, AB, Canada\n", + "osm query name: Glenbrook Plaza, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "231: Calgary 2681 36 Street NE, Calgary, AB, Canada\n", + "osm query name: Calgary 2681 36 Street NE, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "232: Glenmore Landing, Calgary, AB, Canada\n", + "osm query name: Glenmore Landing, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "233: Riverbend Atrium One, Calgary, AB, Canada\n", + "osm query name: Riverbend Atrium One, Calgary, AB, Canada\n", + "osm query street: 200 rivercrest drive se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "234: Beddington Towne Centre, Calgary, AB, Canada\n", + "osm query name: Beddington Towne Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "235: McKnight, Calgary, AB, Canada\n", + "osm query name: McKnight, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "236: Avenida Bonavista Shopping Centre, Calgary, AB, Canada\n", + "osm query name: Avenida Bonavista Shopping Centre, Calgary, AB, Canada\n", + "osm query street: 12445 lake fraser drive se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "237: Ranchlands Village Mall, Calgary, AB, Canada\n", + "osm query name: Ranchlands Village Mall, Calgary, AB, Canada\n", + "osm query street: 1829 ranchlands boulevard nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "238: Airdrie 217 Centre Avenue, Airdrie, AB, Canada\n", + "osm query name: Airdrie 217 Centre Avenue, Airdrie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "239: High River Community Cancer Centre, High river, AB, Canada\n", + "osm query name: High River Community Cancer Centre, High river, AB, Canada\n", + "osm query street: 560 9 avenue sw, High river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "240: Bow Valley Community Cancer Centre, Canmore, AB, Canada\n", + "osm query name: Bow Valley Community Cancer Centre, Canmore, AB, Canada\n", + "osm query street: 1100 hospital place, Canmore, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "241: St. Mary's Health Care Centre, , AB, Canada\n", + "osm query name: St. Mary's Health Care Centre, , AB, Canada\n", + "osm query street: 451 dechauney avenue trochu, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "242: Drumheller Community Cancer Centre, Drumheller, AB, Canada\n", + "osm query name: Drumheller Community Cancer Centre, Drumheller, AB, Canada\n", + "osm query street: 351 9 street nw, Drumheller, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "243: Central Alberta Cancer Centre, Red deer, AB, Canada\n", + "osm query name: Central Alberta Cancer Centre, Red deer, AB, Canada\n", + "osm query street: 3942 50a avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "244: Red Deer 4755 49 Street, Red deer, AB, Canada\n", + "osm query name: Red Deer 4755 49 Street, Red deer, AB, Canada\n", + "osm query street: 4755 49 street, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "245: Red Deer 5002 55 Street, Red deer, AB, Canada\n", + "osm query name: Red Deer 5002 55 Street, Red deer, AB, Canada\n", + "osm query street: 5002 55 street, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "246: Brooks Lab Patient Collection Site, , AB, Canada\n", + "osm query name: Brooks Lab Patient Collection Site, , AB, Canada\n", + "osm query street: 500 cassils road e brooks, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "247: Bigelow Fowler Clinic West, Lethbridge, AB, Canada\n", + "osm query name: Bigelow Fowler Clinic West, Lethbridge, AB, Canada\n", + "osm query street: 30 jerry potts boulevard w, Lethbridge, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "248: Jack Ady Cancer Centre, , AB, Canada\n", + "osm query name: Jack Ady Cancer Centre, , AB, Canada\n", + "osm query street: 960 19 street s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "249: Family Medical Centre - Harker Foot Centre - Woods Dispensary, , AB, Canada\n", + "osm query name: Family Medical Centre - Harker Foot Centre - Woods Dispensary, , AB, Canada\n", + "osm query street: 2931 20 avenue s lethbridge, , AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "250: Centennial Centre for Mental Health and Brain Injury, Ponoka, AB, Canada\n", + "osm query name: Centennial Centre for Mental Health and Brain Injury, Ponoka, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Ponoka, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "251: Bashaw Community Health Centre, Bashaw, AB, Canada\n", + "osm query name: Bashaw Community Health Centre, Bashaw, AB, Canada\n", + "osm query street: 5308 53 street, Bashaw, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "252: The Taber Clinic, Taber, AB, Canada\n", + "osm query name: The Taber Clinic, Taber, AB, Canada\n", + "osm query street: 4900 44 street, Taber, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "253: Cardston Clinic, , AB, Canada\n", + "osm query name: Cardston Clinic, , AB, Canada\n", + "osm query street: 34 2 avenue w cardston, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "254: Breton Continuing Care Centre, , AB, Canada\n", + "osm query name: Breton Continuing Care Centre, , AB, Canada\n", + "osm query street: 4919 49 avenue breton, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "255: Camrose 6530 48 Avenue, Camrose, AB, Canada\n", + "osm query name: Camrose 6530 48 Avenue, Camrose, AB, Canada\n", + "osm query street: 6530 48 avenue, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "256: Camrose Community Cancer Centre, Camrose, AB, Canada\n", + "osm query name: Camrose Community Cancer Centre, Camrose, AB, Canada\n", + "osm query street: 4607 53 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "257: Drayton Valley Community Cancer Centre, Drayton valley, AB, Canada\n", + "osm query name: Drayton Valley Community Cancer Centre, Drayton valley, AB, Canada\n", + "osm query street: 4550 madsen avenue, Drayton valley, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "258: Foremost Medical Clinic, Foremost, AB, Canada\n", + "osm query name: Foremost Medical Clinic, Foremost, AB, Canada\n", + "osm query street: 212 main street, Foremost, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "259: Beaumont Village, , AB, Canada\n", + "osm query name: Beaumont Village, , AB, Canada\n", + "osm query street: 5009 52 avenue beaumont, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "260: Margery E. Yuill Cancer Centre, Medicine hat, AB, Canada\n", + "osm query name: Margery E. Yuill Cancer Centre, Medicine hat, AB, Canada\n", + "osm query street: 666 5 street sw, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "261: Medicine Hat 44 Carry Drive SE, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat 44 Carry Drive SE, Medicine hat, AB, Canada\n", + "osm query street: 44 carry drive se, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "262: Heritage Square, Edmonton, AB, Canada\n", + "osm query name: Heritage Square, Edmonton, AB, Canada\n", + "osm query street: 10917 23 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "263: Riverbend Square, Edmonton, AB, Canada\n", + "osm query name: Riverbend Square, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "264: Tawa Centre 3011, Edmonton, AB, Canada\n", + "osm query name: Tawa Centre 3011, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "265: Millbourne Market Mall, Edmonton, AB, Canada\n", + "osm query name: Millbourne Market Mall, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "266: Trail South 10389 51 Avenue, Edmonton, AB, Canada\n", + "osm query name: Trail South 10389 51 Avenue, Edmonton, AB, Canada\n", + "osm query street: 10389 51 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "267: Callingwood Market Square, Edmonton, AB, Canada\n", + "osm query name: Callingwood Market Square, Edmonton, AB, Canada\n", + "osm query street: 6655 178 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "268: Gateway, Edmonton, AB, Canada\n", + "osm query name: Gateway, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "269: Kaye Edmonton Clinic, Edmonton, AB, Canada\n", + "osm query name: Kaye Edmonton Clinic, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "270: College Plaza, Edmonton, AB, Canada\n", + "osm query name: College Plaza, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "271: Westgrove Professional Building, Edmonton, AB, Canada\n", + "osm query name: Westgrove Professional Building, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "272: Edmonton 10405 Jasper Avenue, Edmonton, AB, Canada\n", + "osm query name: Edmonton 10405 Jasper Avenue, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "273: Edmonton 11936 104 Avenue NW, Edmonton, AB, Canada\n", + "osm query name: Edmonton 11936 104 Avenue NW, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "274: Capilano Centre, Edmonton, AB, Canada\n", + "osm query name: Capilano Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "275: Athabasca Place, Sherwood park, AB, Canada\n", + "osm query name: Athabasca Place, Sherwood park, AB, Canada\n", + "osm query street: 80 chippewa road, Sherwood park, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "276: Hys Medical Centre, Edmonton, AB, Canada\n", + "osm query name: Hys Medical Centre, Edmonton, AB, Canada\n", + "osm query street: 11010 101 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "277: Synergy Wellness Center, Sherwood park, AB, Canada\n", + "osm query name: Synergy Wellness Center, Sherwood park, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "278: Riverview Crossing, Edmonton, AB, Canada\n", + "osm query name: Riverview Crossing, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "279: Pallisades, Edmonton, AB, Canada\n", + "osm query name: Pallisades, Edmonton, AB, Canada\n", + "osm query street: 12843 140 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "280: Belmont Town Centre, Edmonton, AB, Canada\n", + "osm query name: Belmont Town Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "281: St. Albert 190 Boudreau Road, St. albert, AB, Canada\n", + "osm query name: St. Albert 190 Boudreau Road, St. albert, AB, Canada\n", + "osm query street: 190 boudreau road, St. albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "282: Fort Saskatchewan Patient Care Centre, Fort saskatchewan, AB, Canada\n", + "osm query name: Fort Saskatchewan Patient Care Centre, Fort saskatchewan, AB, Canada\n", + "osm query street: 9372 southfort drive, Fort saskatchewan, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "283: Morinville Clinic, Morinville, AB, Canada\n", + "osm query name: Morinville Clinic, Morinville, AB, Canada\n", + "osm query street: 9523 100 street, Morinville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "284: Mary Immaculate Care Centre, Mundare, AB, Canada\n", + "osm query name: Mary Immaculate Care Centre, Mundare, AB, Canada\n", + "osm query street: 165018 534 township road, Mundare, AB, Canada\n", + "osm query city: Mundare, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "285: Mannville Care Centre, Mannville, AB, Canada\n", + "osm query name: Mannville Care Centre, Mannville, AB, Canada\n", + "osm query street: 5007 46 street, Mannville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "286: Barrhead Community Cancer Centre, Barrhead, AB, Canada\n", + "osm query name: Barrhead Community Cancer Centre, Barrhead, AB, Canada\n", + "osm query street: 4815 51 avenue, Barrhead, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "287: Radway Continuing Care Centre, Radway, AB, Canada\n", + "osm query name: Radway Continuing Care Centre, Radway, AB, Canada\n", + "osm query street: 5002 52 street, Radway, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "288: Hinton Community Cancer Centre, Hinton, AB, Canada\n", + "osm query name: Hinton Community Cancer Centre, Hinton, AB, Canada\n", + "osm query street: 1280 switzer drive, Hinton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "289: Plaza 44, Lloydminster, AB, Canada\n", + "osm query name: Plaza 44, Lloydminster, AB, Canada\n", + "osm query street: 4402 52 avenue, Lloydminster, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "290: Lloydminster Community Cancer Centre, Lloydminster, AB, Canada\n", + "osm query name: Lloydminster Community Cancer Centre, Lloydminster, AB, Canada\n", + "osm query street: 3820 43 avenue, Lloydminster, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "291: Bonnyville Community Cancer Centre, Bonnyville, AB, Canada\n", + "osm query name: Bonnyville Community Cancer Centre, Bonnyville, AB, Canada\n", + "osm query street: 5001 lakeshore drive, Bonnyville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "292: Grande Prairie 9805 97 Street, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie 9805 97 Street, Grande prairie, AB, Canada\n", + "osm query street: 9805 97 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "293: Grande Prairie Cancer Centre, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie Cancer Centre, Grande prairie, AB, Canada\n", + "osm query street: 11205 110 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "294: Hythe Continuing Care Centre, Hythe, AB, Canada\n", + "osm query name: Hythe Continuing Care Centre, Hythe, AB, Canada\n", + "osm query street: 10307 100 street, Hythe, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "295: Peace River Community Cancer Centre, Peace river, AB, Canada\n", + "osm query name: Peace River Community Cancer Centre, Peace river, AB, Canada\n", + "osm query street: 10101 68 street, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "296: Thickwood Medical Plaza, Fort mcmurray, AB, Canada\n", + "osm query name: Thickwood Medical Plaza, Fort mcmurray, AB, Canada\n", + "osm query street: 108 wolverine drive, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "297: Fort McMurray Community Cancer Centre, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray Community Cancer Centre, Fort mcmurray, AB, Canada\n", + "osm query street: 7 hospital street, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "298: River City Centre, Fort mcmurray, AB, Canada\n", + "osm query name: River City Centre, Fort mcmurray, AB, Canada\n", + "osm query street: 8600 franklin avenue, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "299: La Crete Community Health Centre, La crete, AB, Canada\n", + "osm query name: La Crete Community Health Centre, La crete, AB, Canada\n", + "osm query street: 10601 100 avenue, La crete, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "300: Eau Claire Retirement Residence, Calgary, AB, Canada\n", + "osm query name: Eau Claire Retirement Residence, Calgary, AB, Canada\n", + "osm query street: 301 7 street sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "301: Mount Royal Care Centre, Calgary, AB, Canada\n", + "osm query name: Mount Royal Care Centre, Calgary, AB, Canada\n", + "osm query street: 1813 9 street sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "302: Carewest Rouleau Manor, Calgary, AB, Canada\n", + "osm query name: Carewest Rouleau Manor, Calgary, AB, Canada\n", + "osm query street: 2206 2 street sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "303: Rosedale Hospice, Calgary, AB, Canada\n", + "osm query name: Rosedale Hospice, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "304: Wing Kei Care Centre, Calgary, AB, Canada\n", + "osm query name: Wing Kei Care Centre, Calgary, AB, Canada\n", + "osm query street: 1212 centre street ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "305: Agape Manor Hospice, Calgary, AB, Canada\n", + "osm query name: Agape Manor Hospice, Calgary, AB, Canada\n", + "osm query street: 1302 8 avenue nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "306: Extendicare Hillcrest, Calgary, AB, Canada\n", + "osm query name: Extendicare Hillcrest, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "307: Carewest George Boyack, Calgary, AB, Canada\n", + "osm query name: Carewest George Boyack, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "308: Bethany Calgary, Calgary, AB, Canada\n", + "osm query name: Bethany Calgary, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "309: Carewest Dr. Vernon Fanning Centre, Calgary, AB, Canada\n", + "osm query name: Carewest Dr. Vernon Fanning Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "310: Carewest Nickle House, Calgary, AB, Canada\n", + "osm query name: Carewest Nickle House, Calgary, AB, Canada\n", + "osm query street: 950 robert road ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "311: Extendicare Cedars Villa, Calgary, AB, Canada\n", + "osm query name: Extendicare Cedars Villa, Calgary, AB, Canada\n", + "osm query street: 3330 8 avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "312: Wing Kei Greenview, Calgary, AB, Canada\n", + "osm query name: Wing Kei Greenview, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "313: Intercare Brentwood Care Centre, Calgary, AB, Canada\n", + "osm query name: Intercare Brentwood Care Centre, Calgary, AB, Canada\n", + "osm query street: 2727 16 avenue nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "314: Carewest Sarcee, Calgary, AB, Canada\n", + "osm query name: Carewest Sarcee, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "315: Carewest Colonel Belcher, Calgary, AB, Canada\n", + "osm query name: Carewest Colonel Belcher, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "316: Carewest Royal Park, Calgary, AB, Canada\n", + "osm query name: Carewest Royal Park, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "317: Intercare Chinook Care Centre, Calgary, AB, Canada\n", + "osm query name: Intercare Chinook Care Centre, Calgary, AB, Canada\n", + "osm query street: 1261 glenmore trail sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "318: Kingsland Terrace, Calgary, AB, Canada\n", + "osm query name: Kingsland Terrace, Calgary, AB, Canada\n", + "osm query street: 835 68 avenue, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "319: Carewest Garrison Green, Calgary, AB, Canada\n", + "osm query name: Carewest Garrison Green, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "320: Bethany Riverview, Calgary, AB, Canada\n", + "osm query name: Bethany Riverview, Calgary, AB, Canada\n", + "osm query street: 2915 26 avenue se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "321: Carewest Glenmore Park, Calgary, AB, Canada\n", + "osm query name: Carewest Glenmore Park, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "322: Rotary Flames House, Calgary, AB, Canada\n", + "osm query name: Rotary Flames House, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "323: Glamorgan Care Centre, Calgary, AB, Canada\n", + "osm query name: Glamorgan Care Centre, Calgary, AB, Canada\n", + "osm query street: 105 galbraith drive sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "324: Cambridge Manor, Calgary, AB, Canada\n", + "osm query name: Cambridge Manor, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "325: Bow View Manor, Calgary, AB, Canada\n", + "osm query name: Bow View Manor, Calgary, AB, Canada\n", + "osm query street: 4628 montgomery boulevard, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "326: Wentworth Manor / The Residence and The Court, Calgary, AB, Canada\n", + "osm query name: Wentworth Manor / The Residence and The Court, Calgary, AB, Canada\n", + "osm query street: 5709 14 avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "327: Intercare Southwood Care Centre, Calgary, AB, Canada\n", + "osm query name: Intercare Southwood Care Centre, Calgary, AB, Canada\n", + "osm query street: 211 heritage drive se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "328: Clifton Manor, Calgary, AB, Canada\n", + "osm query name: Clifton Manor, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "329: Mayfair Care Centre, Calgary, AB, Canada\n", + "osm query name: Mayfair Care Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "330: Prominence Way Retirement Community, Calgary, AB, Canada\n", + "osm query name: Prominence Way Retirement Community, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "331: Carewest Signal Pointe, Calgary, AB, Canada\n", + "osm query name: Carewest Signal Pointe, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "332: Bow Crest Care Centre, Calgary, AB, Canada\n", + "osm query name: Bow Crest Care Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "333: AgeCare Glenmore, Calgary, AB, Canada\n", + "osm query name: AgeCare Glenmore, Calgary, AB, Canada\n", + "osm query street: 1729 90 avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "334: Whitehorn Village Retirement Community, Calgary, AB, Canada\n", + "osm query name: Whitehorn Village Retirement Community, Calgary, AB, Canada\n", + "osm query street: 5200 44 avenue ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "335: Edgemont Retirement Residence, Calgary, AB, Canada\n", + "osm query name: Edgemont Retirement Residence, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "336: Bethany Harvest Hills, Calgary, AB, Canada\n", + "osm query name: Bethany Harvest Hills, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "337: Monterey Place, Calgary, AB, Canada\n", + "osm query name: Monterey Place, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "338: Newport Harbour Care Centre, Calgary, AB, Canada\n", + "osm query name: Newport Harbour Care Centre, Calgary, AB, Canada\n", + "osm query street: 10 country village cove ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "339: Prince of Peace Manor, Calgary, AB, Canada\n", + "osm query name: Prince of Peace Manor, Calgary, AB, Canada\n", + "osm query street: 285030 luther rose boulevard, Calgary, AB, Canada\n", + "osm query city: Calgary, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "340: Prince of Peace Harbour, Calgary, AB, Canada\n", + "osm query name: Prince of Peace Harbour, Calgary, AB, Canada\n", + "osm query street: 243205 garden road ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "341: Scenic Acres Retirement Residence, Calgary, AB, Canada\n", + "osm query name: Scenic Acres Retirement Residence, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "342: Father Lacombe Care Centre, Calgary, AB, Canada\n", + "osm query name: Father Lacombe Care Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "343: The Manor Village at Fish Creek Park, Calgary, AB, Canada\n", + "osm query name: The Manor Village at Fish Creek Park, Calgary, AB, Canada\n", + "osm query street: 22 shawnee hill sw, Calgary, AB, Canada\n", + "[3] gc street address found\n", + "\n", + "\n", + "344: Providence Care Centre, Calgary, AB, Canada\n", + "osm query name: Providence Care Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "345: Retirement Concepts Millrise, Calgary, AB, Canada\n", + "osm query name: Retirement Concepts Millrise, Calgary, AB, Canada\n", + "osm query street: 14911 5 street sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "346: Millrise Seniors Village, Calgary, AB, Canada\n", + "osm query name: Millrise Seniors Village, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "347: Evanston Grand Village, Calgary, AB, Canada\n", + "osm query name: Evanston Grand Village, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "348: St. Marguerite Manor, Calgary, AB, Canada\n", + "osm query name: St. Marguerite Manor, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "349: Sage Hill Retirement Residence, Calgary, AB, Canada\n", + "osm query name: Sage Hill Retirement Residence, Calgary, AB, Canada\n", + "osm query street: 6 sage hills gardens nw, Calgary, AB, Canada\n", + "osm query city: Calgary, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "350: Holy Cross Manor, Calgary, AB, Canada\n", + "osm query name: Holy Cross Manor, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "351: AgeCare SkyPointe, Calgary, AB, Canada\n", + "osm query name: AgeCare SkyPointe, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "352: Generations, Calgary, AB, Canada\n", + "osm query name: Generations, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "353: AgeCare Midnapore, Calgary, AB, Canada\n", + "osm query name: AgeCare Midnapore, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "354: Swan Evergreen Village, Calgary, AB, Canada\n", + "osm query name: Swan Evergreen Village, Calgary, AB, Canada\n", + "osm query street: 2635 eversyde avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "355: Rocky Ridge Retirement Community, Calgary, AB, Canada\n", + "osm query name: Rocky Ridge Retirement Community, Calgary, AB, Canada\n", + "osm query street: 10715 rocky ridge boulevard nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "356: St. Teresa Place, Calgary, AB, Canada\n", + "osm query name: St. Teresa Place, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "357: McKenzie Towne Continuing Care Centre, Calgary, AB, Canada\n", + "osm query name: McKenzie Towne Continuing Care Centre, Calgary, AB, Canada\n", + "osm query street: 80 promenade way se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "358: McKenzie Towne Retirement Residence, Calgary, AB, Canada\n", + "osm query name: McKenzie Towne Retirement Residence, Calgary, AB, Canada\n", + "osm query street: 20 promenade park se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "359: Silverado Creek Seniors Community , Calgary, AB, Canada\n", + "osm query name: Silverado Creek Seniors Community , Calgary, AB, Canada\n", + "osm query street: 7 silverton way sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "360: AgeCare Walden Heights, Calgary, AB, Canada\n", + "osm query name: AgeCare Walden Heights, Calgary, AB, Canada\n", + "osm query street: 250 walden drive se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "361: AgeCare Seton, Calgary, AB, Canada\n", + "osm query name: AgeCare Seton, Calgary, AB, Canada\n", + "osm query street: 4963 front street se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "362: Bethany Airdrie, Airdrie, AB, Canada\n", + "osm query name: Bethany Airdrie, Airdrie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "363: Hawthorne, Cochrane, AB, Canada\n", + "osm query name: Hawthorne, Cochrane, AB, Canada\n", + "osm query street: 60 fireside gate, Cochrane, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "364: Bethany Cochrane, Cochrane, AB, Canada\n", + "osm query name: Bethany Cochrane, Cochrane, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "365: Tudor Manor, Okotoks, AB, Canada\n", + "osm query name: Tudor Manor, Okotoks, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "366: Foothills Country Hospice, Okotoks, AB, Canada\n", + "osm query name: Foothills Country Hospice, Okotoks, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Okotoks, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "367: Revera Heartland, Okotoks, AB, Canada\n", + "osm query name: Revera Heartland, Okotoks, AB, Canada\n", + "osm query street: 47 riverside gate, Okotoks, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "368: AgeCare Sagewood, Strathmore, AB, Canada\n", + "osm query name: AgeCare Sagewood, Strathmore, AB, Canada\n", + "osm query street: 140 cambridge glen drive, Strathmore, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "369: Seasons High River, High river, AB, Canada\n", + "osm query name: Seasons High River, High river, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "370: Bethany Didsbury, Didsbury, AB, Canada\n", + "osm query name: Bethany Didsbury, Didsbury, AB, Canada\n", + "osm query street: 1201 15 avenue, Didsbury, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "371: Aspen Ridge Lodge, Didsbury, AB, Canada\n", + "osm query name: Aspen Ridge Lodge, Didsbury, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "372: Westview Care Community, Linden, AB, Canada\n", + "osm query name: Westview Care Community, Linden, AB, Canada\n", + "osm query street: 700 nursing home road, Linden, AB, Canada\n", + "osm query city: Linden, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "373: Silver Willow Lodge, Nanton, AB, Canada\n", + "osm query name: Silver Willow Lodge, Nanton, AB, Canada\n", + "osm query street: 2007 22 avenue, Nanton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "374: Seasons Olds, Olds, AB, Canada\n", + "osm query name: Seasons Olds, Olds, AB, Canada\n", + "osm query street: 5600 sunrise crescent, Olds, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "375: Seasons Encore Olds, , AB, Canada\n", + "osm query name: Seasons Encore Olds, , AB, Canada\n", + "osm query street: 3300 57 avenue olds, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "376: Extendicare Vulcan, , AB, Canada\n", + "osm query name: Extendicare Vulcan, , AB, Canada\n", + "osm query street: 715 2 avenue s vulcan, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "377: Sundre Seniors Supportive Living, Sundre, AB, Canada\n", + "osm query name: Sundre Seniors Supportive Living, Sundre, AB, Canada\n", + "osm query street: 749 6 street sw, Sundre, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "378: Chateau Three Hills, Three hills, AB, Canada\n", + "osm query name: Chateau Three Hills, Three hills, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "379: Hillview Lodge, Drumheller, AB, Canada\n", + "osm query name: Hillview Lodge, Drumheller, AB, Canada\n", + "osm query street: 696 6 avenue e, Drumheller, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "380: Sunset Manor, Innisfail, AB, Canada\n", + "osm query name: Sunset Manor, Innisfail, AB, Canada\n", + "osm query street: 3312 52 avenue, Innisfail, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "381: Willow Creek Continuing Care Centre, Claresholm, AB, Canada\n", + "osm query name: Willow Creek Continuing Care Centre, Claresholm, AB, Canada\n", + "osm query street: 4221 8 street w, Claresholm, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "382: Hamlets at Red Deer, The, Red deer, AB, Canada\n", + "osm query name: Hamlets at Red Deer, The, Red deer, AB, Canada\n", + "osm query street: 338 liberty avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "383: Bethany CollegeSide, Red deer, AB, Canada\n", + "osm query name: Bethany CollegeSide, Red deer, AB, Canada\n", + "osm query street: 99 college circle, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "384: West Park Lodge, Red deer, AB, Canada\n", + "osm query name: West Park Lodge, Red deer, AB, Canada\n", + "osm query street: 5715 41 street, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "385: Extendicare Michener Hill, Red deer, AB, Canada\n", + "osm query name: Extendicare Michener Hill, Red deer, AB, Canada\n", + "osm query street: 12 michener boulevard, Red deer, AB, Canada\n", + "osm query city: Red deer, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "386: Timberstone Mews, Red deer, AB, Canada\n", + "osm query name: Timberstone Mews, Red deer, AB, Canada\n", + "osm query street: 42 timberstone way, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "387: Villa Marie, Red deer, AB, Canada\n", + "osm query name: Villa Marie, Red deer, AB, Canada\n", + "osm query street: 10 carrington drive, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "388: Points West Living Red Deer, Red deer, AB, Canada\n", + "osm query name: Points West Living Red Deer, Red deer, AB, Canada\n", + "osm query street: 6950 taylor drive, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "389: Bethany Sylvan Lake, , AB, Canada\n", + "osm query name: Bethany Sylvan Lake, , AB, Canada\n", + "osm query street: 4700 47 avenue, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "390: Eckville Manor House, Eckville, AB, Canada\n", + "osm query name: Eckville Manor House, Eckville, AB, Canada\n", + "osm query street: 5111 51 avenue, Eckville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "391: Extendicare Fort Macleod, Fort macleod, AB, Canada\n", + "osm query name: Extendicare Fort Macleod, Fort macleod, AB, Canada\n", + "osm query street: 654 29 street, Fort macleod, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "392: Pioneer Lodge, Fort macleod, AB, Canada\n", + "osm query name: Pioneer Lodge, Fort macleod, AB, Canada\n", + "osm query street: 660 28 street, Fort macleod, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "393: Bentley Care Centre, Bentley, AB, Canada\n", + "osm query name: Bentley Care Centre, Bentley, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "394: Park Avenue at Creekside, Rocky mountain house, AB, Canada\n", + "osm query name: Park Avenue at Creekside, Rocky mountain house, AB, Canada\n", + "osm query street: 5810 47 avenue, Rocky mountain house, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "395: West Country Family Service Association, Rocky mountain house, AB, Canada\n", + "osm query name: West Country Family Service Association, Rocky mountain house, AB, Canada\n", + "osm query street: 4934 50 street, Rocky mountain house, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "396: Piyami Place, Picture butte, AB, Canada\n", + "osm query name: Piyami Place, Picture butte, AB, Canada\n", + "osm query street: 301 cowan avenue, Picture butte, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "397: Piyami Lodge, Picture butte, AB, Canada\n", + "osm query name: Piyami Lodge, Picture butte, AB, Canada\n", + "osm query street: 300 rogers avenue, Picture butte, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "398: Good Samaritan Clearwater Centre, Rocky mountain house, AB, Canada\n", + "osm query name: Good Samaritan Clearwater Centre, Rocky mountain house, AB, Canada\n", + "osm query street: 5615 60 street, Rocky mountain house, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "399: AgeCare Orchard Manor, , AB, Canada\n", + "osm query name: AgeCare Orchard Manor, , AB, Canada\n", + "osm query street: 951 cassils road w brooks, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "400: AgeCare Sunrise Gardens, , AB, Canada\n", + "osm query name: AgeCare Sunrise Gardens, , AB, Canada\n", + "osm query street: 1235 3 street w brooks, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "401: York Creek Lodge, , AB, Canada\n", + "osm query name: York Creek Lodge, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "402: Royal Oak Manor, , AB, Canada\n", + "osm query name: Royal Oak Manor, , AB, Canada\n", + "osm query street: 4501 college avenue lacombe, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "403: Points West Living Stettler, Stettler, AB, Canada\n", + "osm query name: Points West Living Stettler, Stettler, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "404: Legacy Lodge, , AB, Canada\n", + "osm query name: Legacy Lodge, , AB, Canada\n", + "osm query street: 335 lettice perry road n lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "405: Good Samaritan West Highlands, Lethbridge, AB, Canada\n", + "osm query name: Good Samaritan West Highlands, Lethbridge, AB, Canada\n", + "osm query street: 2687 garry drive w, Lethbridge, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "406: Golden Acres Lodge , , AB, Canada\n", + "osm query name: Golden Acres Lodge , , AB, Canada\n", + "osm query street: 1615 13 street n lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "407: Good Samaritan Park Meadows Village, , AB, Canada\n", + "osm query name: Good Samaritan Park Meadows Village, , AB, Canada\n", + "osm query street: 1511 15 avenue n lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "408: Good Samaritan Vista Village, Pincher creek, AB, Canada\n", + "osm query name: Good Samaritan Vista Village, Pincher creek, AB, Canada\n", + "osm query street: 1240 ken thornton boulevard, Pincher creek, AB, Canada\n", + "osm query city: Pincher creek, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "409: Edith Cavell Care Centre, , AB, Canada\n", + "osm query name: Edith Cavell Care Centre, , AB, Canada\n", + "osm query street: 1255 5 avenue s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "410: Columbia Care Centre, Lethbridge, AB, Canada\n", + "osm query name: Columbia Care Centre, Lethbridge, AB, Canada\n", + "osm query street: 785 columbia boulevard w, Lethbridge, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "411: St. Michael's Health Centre, , AB, Canada\n", + "osm query name: St. Michael's Health Centre, , AB, Canada\n", + "osm query street: 1400 9 avenue s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "412: Extendicare Fairmont Park, , AB, Canada\n", + "osm query name: Extendicare Fairmont Park, , AB, Canada\n", + "osm query street: 115 fairmont boulevard s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "413: St. Therese Villa, , AB, Canada\n", + "osm query name: St. Therese Villa, , AB, Canada\n", + "osm query street: 253 southgate boulevard s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "414: Sunny South Lodge, Coaldale, AB, Canada\n", + "osm query name: Sunny South Lodge, Coaldale, AB, Canada\n", + "osm query street: 1112 20 avenue, Coaldale, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "415: Seasons Ponoka, Ponoka, AB, Canada\n", + "osm query name: Seasons Ponoka, Ponoka, AB, Canada\n", + "osm query street: 4004 40 street close, Ponoka, AB, Canada\n", + "osm query city: Ponoka, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "416: Kainai Continuing Care Centre, Stand off, AB, Canada\n", + "osm query name: Kainai Continuing Care Centre, Stand off, AB, Canada\n", + "osm query street: 1 main street, Stand off, AB, Canada\n", + "osm query city: Stand off, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "417: Northcott Care Centre, Ponoka, AB, Canada\n", + "osm query name: Northcott Care Centre, Ponoka, AB, Canada\n", + "osm query street: 4209 48 avenue, Ponoka, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "418: Bashaw Meadows, , AB, Canada\n", + "osm query name: Bashaw Meadows, , AB, Canada\n", + "osm query street: 5502 56 avenue bashaw, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "419: Good Samaritan Linden View, , AB, Canada\n", + "osm query name: Good Samaritan Linden View, , AB, Canada\n", + "osm query street: 4700 64 avenue taber, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "420: Clearview Lodge, , AB, Canada\n", + "osm query name: Clearview Lodge, , AB, Canada\n", + "osm query street: 4730 50 avenue taber, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "421: Magrath Community Health Centre, Magrath, AB, Canada\n", + "osm query name: Magrath Community Health Centre, Magrath, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "422: Good Samaritan Prairie Ridge, , AB, Canada\n", + "osm query name: Good Samaritan Prairie Ridge, , AB, Canada\n", + "osm query street: 328 broadway s raymond, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "423: Chinook Lodge, , AB, Canada\n", + "osm query name: Chinook Lodge, , AB, Canada\n", + "osm query street: 451 3 street w cardston, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "424: Good Samaritan Lee Crest, , AB, Canada\n", + "osm query name: Good Samaritan Lee Crest, , AB, Canada\n", + "osm query street: 989 1 street e cardston, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "425: Seasons Wetaskiwin, Wetaskiwin, AB, Canada\n", + "osm query name: Seasons Wetaskiwin, Wetaskiwin, AB, Canada\n", + "osm query street: 5430 37a avenue, Wetaskiwin, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "426: Wetaskiwin Meadows, Wetaskiwin, AB, Canada\n", + "osm query name: Wetaskiwin Meadows, Wetaskiwin, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "427: Sagebrush, Wetaskiwin, AB, Canada\n", + "osm query name: Sagebrush, Wetaskiwin, AB, Canada\n", + "osm query street: 5901 51 street, Wetaskiwin, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "428: Galahad Care Centre, , AB, Canada\n", + "osm query name: Galahad Care Centre, , AB, Canada\n", + "osm query street: 102 lady helen avenue galahad, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "429: Good Samaritan Good Shepherd Lutheran Home, Wetaskiwin, AB, Canada\n", + "osm query name: Good Samaritan Good Shepherd Lutheran Home, Wetaskiwin, AB, Canada\n", + "osm query street: 4702 northmount drive, Wetaskiwin, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "430: Pleasant View Lodge, Bow island, AB, Canada\n", + "osm query name: Pleasant View Lodge, Bow island, AB, Canada\n", + "osm query street: 1039 1 street e, Bow island, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "431: Bethany Meadows, Camrose, AB, Canada\n", + "osm query name: Bethany Meadows, Camrose, AB, Canada\n", + "osm query street: 4209 55 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "432: Louise Jensen Care Centre, Camrose, AB, Canada\n", + "osm query name: Louise Jensen Care Centre, Camrose, AB, Canada\n", + "osm query street: 5400 46 avenue, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "433: Memory Lane, Camrose, AB, Canada\n", + "osm query name: Memory Lane, Camrose, AB, Canada\n", + "osm query street: 4612 53 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "434: Viewpoint, Camrose, AB, Canada\n", + "osm query name: Viewpoint, Camrose, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "435: Seasons Camrose, Camrose, AB, Canada\n", + "osm query name: Seasons Camrose, Camrose, AB, Canada\n", + "osm query street: 6821 50 avenue, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "436: Rosehaven Care Centre, Camrose, AB, Canada\n", + "osm query name: Rosehaven Care Centre, Camrose, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "437: Faith House, Camrose, AB, Canada\n", + "osm query name: Faith House, Camrose, AB, Canada\n", + "osm query street: 4832 54 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "438: Providence Place, Daysland, AB, Canada\n", + "osm query name: Providence Place, Daysland, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "439: Serenity House, Drayton valley, AB, Canada\n", + "osm query name: Serenity House, Drayton valley, AB, Canada\n", + "osm query street: 4552 madsen avenue, Drayton valley, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "440: Seasons Drayton Valley, Drayton valley, AB, Canada\n", + "osm query name: Seasons Drayton Valley, Drayton valley, AB, Canada\n", + "osm query street: 3902 47 street, Drayton valley, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "441: Extendicare Leduc, , AB, Canada\n", + "osm query name: Extendicare Leduc, , AB, Canada\n", + "osm query street: 4309 50 street leduc, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "442: Salem Manor Nursing Home, , AB, Canada\n", + "osm query name: Salem Manor Nursing Home, , AB, Canada\n", + "osm query street: 4419 46 street leduc, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "443: Lifestyle Options Leduc, , AB, Canada\n", + "osm query name: Lifestyle Options Leduc, , AB, Canada\n", + "osm query street: 108 west haven drive leduc, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "444: Points West Living Drayton Valley, Drayton valley, AB, Canada\n", + "osm query name: Points West Living Drayton Valley, Drayton valley, AB, Canada\n", + "osm query street: 5804 power centre boulevard, Drayton valley, AB, Canada\n", + "osm query city: Drayton valley, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "445: Prairie Rose Lodge, Milk river, AB, Canada\n", + "osm query name: Prairie Rose Lodge, Milk river, AB, Canada\n", + "osm query street: 117 3 avenue nw, Milk river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "446: Chateau Vitaline, , AB, Canada\n", + "osm query name: Chateau Vitaline, , AB, Canada\n", + "osm query street: 5018 52 avenue beaumont, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "447: River Ridge Seniors Village, Medicine hat, AB, Canada\n", + "osm query name: River Ridge Seniors Village, Medicine hat, AB, Canada\n", + "osm query street: 4 river ridge drive nw, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "448: South Country Village, Medicine hat, AB, Canada\n", + "osm query name: South Country Village, Medicine hat, AB, Canada\n", + "osm query street: 1720 bell street sw, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "449: AgeCare Valleyview, Medicine hat, AB, Canada\n", + "osm query name: AgeCare Valleyview, Medicine hat, AB, Canada\n", + "osm query street: 65 valleyview drive sw, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "450: Cypress View, Medicine hat, AB, Canada\n", + "osm query name: Cypress View, Medicine hat, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "451: Riverview Care Centre, Medicine hat, AB, Canada\n", + "osm query name: Riverview Care Centre, Medicine hat, AB, Canada\n", + "osm query street: 603 prospect drive sw, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "452: St. Joseph's Home, Medicine hat, AB, Canada\n", + "osm query name: St. Joseph's Home, Medicine hat, AB, Canada\n", + "osm query street: 156 3 street ne, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "453: Good Samaritan South Ridge Village, Medicine hat, AB, Canada\n", + "osm query name: Good Samaritan South Ridge Village, Medicine hat, AB, Canada\n", + "osm query street: 550 spruce way se, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "454: Rutherford Heights Retirement Residence, Edmonton, AB, Canada\n", + "osm query name: Rutherford Heights Retirement Residence, Edmonton, AB, Canada\n", + "osm query street: 949 rutherford road sw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "455: Chartwell Heritage Valley, Edmonton, AB, Canada\n", + "osm query name: Chartwell Heritage Valley, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "456: Wellington Retirement Residence, The, Medicine hat, AB, Canada\n", + "osm query name: Wellington Retirement Residence, The, Medicine hat, AB, Canada\n", + "osm query street: 1595 southview drive sw, Medicine hat, AB, Canada\n", + "osm query city: Medicine hat, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "457: Meadow Ridge Seniors Village, Medicine hat, AB, Canada\n", + "osm query name: Meadow Ridge Seniors Village, Medicine hat, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Medicine hat, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "458: Meadowlands Retirement Residence, Medicine hat, AB, Canada\n", + "osm query name: Meadowlands Retirement Residence, Medicine hat, AB, Canada\n", + "osm query street: 223 park meadows drive se, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "459: Masterpiece Southland Meadows, Medicine hat, AB, Canada\n", + "osm query name: Masterpiece Southland Meadows, Medicine hat, AB, Canada\n", + "osm query street: 4401 southland drive se, Medicine hat, AB, Canada\n", + "osm query city: Medicine hat, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "460: Devonshire Village, Edmonton, AB, Canada\n", + "osm query name: Devonshire Village, Edmonton, AB, Canada\n", + "osm query street: 1718 rabbit hill road nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "461: Devonshire Care Centre, Edmonton, AB, Canada\n", + "osm query name: Devonshire Care Centre, Edmonton, AB, Canada\n", + "osm query street: 1808 rabbit hill road nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "462: Wedman Village Homes, Edmonton, AB, Canada\n", + "osm query name: Wedman Village Homes, Edmonton, AB, Canada\n", + "osm query street: 1609 bears paw drive nw, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "463: Good Samaritan Wedman House, Edmonton, AB, Canada\n", + "osm query name: Good Samaritan Wedman House, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "464: Shepherd's Gardens Heritage Eden House, Edmonton, AB, Canada\n", + "osm query name: Shepherd's Gardens Heritage Eden House, Edmonton, AB, Canada\n", + "osm query street: 2759 109 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "465: St. Joseph's Auxiliary Hospital, Edmonton, AB, Canada\n", + "osm query name: St. Joseph's Auxiliary Hospital, Edmonton, AB, Canada\n", + "osm query street: 10707 29 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "466: Lifestyle Options Riverbend, Edmonton, AB, Canada\n", + "osm query name: Lifestyle Options Riverbend, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "467: Riverbend Retirement Residence, Edmonton, AB, Canada\n", + "osm query name: Riverbend Retirement Residence, Edmonton, AB, Canada\n", + "osm query street: 103 rabbit hill court nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "468: Laurel Heights Retirement Residence, Edmonton, AB, Canada\n", + "osm query name: Laurel Heights Retirement Residence, Edmonton, AB, Canada\n", + "osm query street: 3110 22 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "469: Shepherd's Garden, Edmonton, AB, Canada\n", + "osm query name: Shepherd's Garden, Edmonton, AB, Canada\n", + "osm query street: 6608 28 avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "470: Shepherd's Care Millwoods, Edmonton, AB, Canada\n", + "osm query name: Shepherd's Care Millwoods, Edmonton, AB, Canada\n", + "osm query street: 6620 28 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "471: Allen Gray Continuing Care Centre, Edmonton, AB, Canada\n", + "osm query name: Allen Gray Continuing Care Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "472: Good Samaritan Mill Woods Centre, Edmonton, AB, Canada\n", + "osm query name: Good Samaritan Mill Woods Centre, Edmonton, AB, Canada\n", + "osm query street: 101 youville drive e, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "473: Shepherd's Care Greenfield, Edmonton, AB, Canada\n", + "osm query name: Shepherd's Care Greenfield, Edmonton, AB, Canada\n", + "osm query street: 3820 114 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "474: Touchmark at Wedgewood, , AB, Canada\n", + "osm query name: Touchmark at Wedgewood, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "475: Lifestyle Options Whitemud, Edmonton, AB, Canada\n", + "osm query name: Lifestyle Options Whitemud, Edmonton, AB, Canada\n", + "osm query street: 4069 106 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "476: Good Samaritan Southgate Care Centre, Edmonton, AB, Canada\n", + "osm query name: Good Samaritan Southgate Care Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "477: Glastonbury Village, Edmonton, AB, Canada\n", + "osm query name: Glastonbury Village, Edmonton, AB, Canada\n", + "osm query street: 1585 glastonbury boulevard, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "478: South Terrace Continuing Care Centre, Edmonton, AB, Canada\n", + "osm query name: South Terrace Continuing Care Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "479: Leisure Way, Medicine hat, AB, Canada\n", + "osm query name: Leisure Way, Medicine hat, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Medicine hat, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "480: CapitalCare Grandview, Edmonton, AB, Canada\n", + "osm query name: CapitalCare Grandview, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "481: Good Samaritan George Hennig Place, Stony plain, AB, Canada\n", + "osm query name: Good Samaritan George Hennig Place, Stony plain, AB, Canada\n", + "osm query street: 4808 57 avenue, Stony plain, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "482: Good Samaritan Stony Plain Care Centre, Stony plain, AB, Canada\n", + "osm query name: Good Samaritan Stony Plain Care Centre, Stony plain, AB, Canada\n", + "osm query street: 4800 55 avenue, Stony plain, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "483: Good Samaritan Dr. Gerald Zetter Care Centre, Edmonton, AB, Canada\n", + "osm query name: Good Samaritan Dr. Gerald Zetter Care Centre, Edmonton, AB, Canada\n", + "osm query street: 9649 71 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "484: CapitalCare McConnell Place West, Edmonton, AB, Canada\n", + "osm query name: CapitalCare McConnell Place West, Edmonton, AB, Canada\n", + "osm query street: 8720 165 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "485: Extendicare Viking, , AB, Canada\n", + "osm query name: Extendicare Viking, , AB, Canada\n", + "osm query street: 5020 57 avenue viking, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "486: CapitalCare Lynnwood, Edmonton, AB, Canada\n", + "osm query name: CapitalCare Lynnwood, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "487: CapitalCare Laurier House Lynnwood, Edmonton, AB, Canada\n", + "osm query name: CapitalCare Laurier House Lynnwood, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "488: Lewis Estates Retirement Residence, Edmonton, AB, Canada\n", + "osm query name: Lewis Estates Retirement Residence, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "489: Jasper Place Continuing Care Centre, Edmonton, AB, Canada\n", + "osm query name: Jasper Place Continuing Care Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "490: Garneau Hall, Edmonton, AB, Canada\n", + "osm query name: Garneau Hall, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "491: Copper Sky Lodge, Spruce grove, AB, Canada\n", + "osm query name: Copper Sky Lodge, Spruce grove, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "492: Westend Seniors Activity Centre, Edmonton, AB, Canada\n", + "osm query name: Westend Seniors Activity Centre, Edmonton, AB, Canada\n", + "osm query street: 9629 176 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "493: Good Samaritan Spruce Grove Centre, Spruce grove, AB, Canada\n", + "osm query name: Good Samaritan Spruce Grove Centre, Spruce grove, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "494: Saint Thomas Health Centre, Edmonton, AB, Canada\n", + "osm query name: Saint Thomas Health Centre, Edmonton, AB, Canada\n", + "osm query street: 8411 91 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "495: Wild Rose Retirement Residence, Edmonton, AB, Canada\n", + "osm query name: Wild Rose Retirement Residence, Edmonton, AB, Canada\n", + "osm query street: 9612 172 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "496: Lifestyle Options Terra Losa, Edmonton, AB, Canada\n", + "osm query name: Lifestyle Options Terra Losa, Edmonton, AB, Canada\n", + "osm query street: 17203 99 avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "497: Benevolence Care Centre, Edmonton, AB, Canada\n", + "osm query name: Benevolence Care Centre, Edmonton, AB, Canada\n", + "osm query street: 9810 b 165 street nw, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "498: Villa Marguerite, Edmonton, AB, Canada\n", + "osm query name: Villa Marguerite, Edmonton, AB, Canada\n", + "osm query street: 9810 a 165 street nw, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "499: Park Place Benevolence, Edmonton, AB, Canada\n", + "osm query name: Park Place Benevolence, Edmonton, AB, Canada\n", + "osm query street: 9810 165 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "500: Extendicare Holyrood, Edmonton, AB, Canada\n", + "osm query name: Extendicare Holyrood, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "501: Edmonton General Continuing Care Centre, Edmonton, AB, Canada\n", + "osm query name: Edmonton General Continuing Care Centre, Edmonton, AB, Canada\n", + "osm query street: 11111 jasper avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "502: Our Parents' Home, Edmonton, AB, Canada\n", + "osm query name: Our Parents' Home, Edmonton, AB, Canada\n", + "osm query street: 10112 119 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "503: Rosedale Estates, Edmonton, AB, Canada\n", + "osm query name: Rosedale Estates, Edmonton, AB, Canada\n", + "osm query street: 10101 111 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "504: Churchill Retirement Community, Edmonton, AB, Canada\n", + "osm query name: Churchill Retirement Community, Edmonton, AB, Canada\n", + "osm query street: 10015 103 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "505: Edmonton Chinatown Care Centre, Edmonton, AB, Canada\n", + "osm query name: Edmonton Chinatown Care Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "506: Hardisty Care Centre, Edmonton, AB, Canada\n", + "osm query name: Hardisty Care Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "507: Sherwood Care, , AB, Canada\n", + "osm query name: Sherwood Care, , AB, Canada\n", + "osm query street: 2020 brentwood boulevard, , AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "508: Edmonton People In Need - Bridgeway 2, Edmonton, AB, Canada\n", + "osm query name: Edmonton People In Need - Bridgeway 2, Edmonton, AB, Canada\n", + "osm query street: 9521 103a avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "509: Jubilee Lodge Nursing Home, Edmonton, AB, Canada\n", + "osm query name: Jubilee Lodge Nursing Home, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "510: Grand Manor, Edmonton, AB, Canada\n", + "osm query name: Grand Manor, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "511: CapitalCare Norwood, Edmonton, AB, Canada\n", + "osm query name: CapitalCare Norwood, Edmonton, AB, Canada\n", + "osm query street: 10410 111 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "512: Village at Westmount, Edmonton, AB, Canada\n", + "osm query name: Village at Westmount, Edmonton, AB, Canada\n", + "osm query street: 13317 115 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "513: Country Cottage Retirement Residence, Sherwood, AB, Canada\n", + "osm query name: Country Cottage Retirement Residence, Sherwood, AB, Canada\n", + "osm query street: 75 cranford way, Sherwood, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "514: CapitalCare Strathcona, Sherwood park, AB, Canada\n", + "osm query name: CapitalCare Strathcona, Sherwood park, AB, Canada\n", + "osm query street: 12 brower drive, Sherwood park, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "515: CapitalCare Laurier House Strathcona, Sherwood park, AB, Canada\n", + "osm query name: CapitalCare Laurier House Strathcona, Sherwood park, AB, Canada\n", + "osm query street: 12 brower drive, Sherwood park, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "516: Sprucewood Place, Edmonton, AB, Canada\n", + "osm query name: Sprucewood Place, Edmonton, AB, Canada\n", + "osm query street: 11418 97 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "517: Shepherd's Care Vanguard, Edmonton, AB, Canada\n", + "osm query name: Shepherd's Care Vanguard, Edmonton, AB, Canada\n", + "osm query street: 10311 122 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "518: Summerwood Village Retirement Residence, Sherwood park, AB, Canada\n", + "osm query name: Summerwood Village Retirement Residence, Sherwood park, AB, Canada\n", + "osm query street: 4255 cloverbar road, Sherwood park, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "519: Chartwell Emerald Hills, Sherwood, AB, Canada\n", + "osm query name: Chartwell Emerald Hills, Sherwood, AB, Canada\n", + "osm query street: 6101 eton boulevard, Sherwood, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "520: Balwin Villa, Edmonton, AB, Canada\n", + "osm query name: Balwin Villa, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "521: Shepherd's Care Kensington, Edmonton, AB, Canada\n", + "osm query name: Shepherd's Care Kensington, Edmonton, AB, Canada\n", + "osm query street: 12603 135 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "522: Venta Care Centre, Edmonton, AB, Canada\n", + "osm query name: Venta Care Centre, Edmonton, AB, Canada\n", + "osm query street: 13525 102 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "523: Salvation Army Grace Manor, Edmonton, AB, Canada\n", + "osm query name: Salvation Army Grace Manor, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "524: St. Michael's Long Term Care Centre, Edmonton, AB, Canada\n", + "osm query name: St. Michael's Long Term Care Centre, Edmonton, AB, Canada\n", + "osm query street: 7404 139 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "525: CapitalCare Dickinsfield, Edmonton, AB, Canada\n", + "osm query name: CapitalCare Dickinsfield, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "526: Tuoi Hac - Golden Age Manor, Edmonton, AB, Canada\n", + "osm query name: Tuoi Hac - Golden Age Manor, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "527: CapitalCare McConnell Place North, Edmonton, AB, Canada\n", + "osm query name: CapitalCare McConnell Place North, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "528: Chartwell Griesbach, Edmonton, AB, Canada\n", + "osm query name: Chartwell Griesbach, Edmonton, AB, Canada\n", + "osm query street: 4480 mccrae avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "529: CapitalCare Kipnes Centre for Veterans, Edmonton, AB, Canada\n", + "osm query name: CapitalCare Kipnes Centre for Veterans, Edmonton, AB, Canada\n", + "osm query street: 4470 mccrae avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "530: Miller Crossing Care Centre, Edmonton, AB, Canada\n", + "osm query name: Miller Crossing Care Centre, Edmonton, AB, Canada\n", + "osm query street: 14251 50 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "531: Chartwell St. Albert, St. albert, AB, Canada\n", + "osm query name: Chartwell St. Albert, St. albert, AB, Canada\n", + "osm query street: 20 hebert road, St. albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "532: Extendicare Eaux Claires, Edmonton, AB, Canada\n", + "osm query name: Extendicare Eaux Claires, Edmonton, AB, Canada\n", + "osm query street: 16503 95 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "533: Youville Home, Albert, AB, Canada\n", + "osm query name: Youville Home, Albert, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "534: Foyer Lacombe, Albert, AB, Canada\n", + "osm query name: Foyer Lacombe, Albert, AB, Canada\n", + "osm query street: 1 st. vital avenue st., Albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "535: Lifestyle Options Schonsee, Edmonton, AB, Canada\n", + "osm query name: Lifestyle Options Schonsee, Edmonton, AB, Canada\n", + "osm query street: 6088 schonsee way, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "536: West Country Hearth, , AB, Canada\n", + "osm query name: West Country Hearth, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "537: CapitalCare Adult Duplexes, Edmonton, AB, Canada\n", + "osm query name: CapitalCare Adult Duplexes, Edmonton, AB, Canada\n", + "osm query street: 9935 178 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "538: CapitalCare Adult Duplexes, Edmonton, AB, Canada\n", + "osm query name: CapitalCare Adult Duplexes, Edmonton, AB, Canada\n", + "osm query street: 9943 178 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "539: Citadel Mews West, St. albert, AB, Canada\n", + "osm query name: Citadel Mews West, St. albert, AB, Canada\n", + "osm query street: 15 erin ridge road, St. albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "540: Citadel Care Centre, St. albert, AB, Canada\n", + "osm query name: Citadel Care Centre, St. albert, AB, Canada\n", + "osm query street: 25 erin ridge road, St. albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "541: St. Albert Retirement Residence, , AB, Canada\n", + "osm query name: St. Albert Retirement Residence, , AB, Canada\n", + "osm query street: 125 everitt drive n st. albert, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "542: Chateau Lac St. Anne, Onoway, AB, Canada\n", + "osm query name: Chateau Lac St. Anne, Onoway, AB, Canada\n", + "osm query street: 5123 49 avenue, Onoway, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "543: Points West Living Wainwright, , AB, Canada\n", + "osm query name: Points West Living Wainwright, , AB, Canada\n", + "osm query street: 2710 11 avenue wainwright, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "544: Rivercrest Care Centre, Fort saskatchewan, AB, Canada\n", + "osm query name: Rivercrest Care Centre, Fort saskatchewan, AB, Canada\n", + "osm query street: 10104 101 avenue, Fort saskatchewan, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "545: Heritage House, Vegreville, AB, Canada\n", + "osm query name: Heritage House, Vegreville, AB, Canada\n", + "osm query street: 4570 60 street, Vegreville, AB, Canada\n", + "osm query city: Vegreville, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "546: Vegreville Care Centre, Vegreville, AB, Canada\n", + "osm query name: Vegreville Care Centre, Vegreville, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "547: Century Park, Vegreville, AB, Canada\n", + "osm query name: Century Park, Vegreville, AB, Canada\n", + "osm query street: 4613 50 street, Vegreville, AB, Canada\n", + "osm query city: Vegreville, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "548: Vegreville Manor, Vegreville, AB, Canada\n", + "osm query name: Vegreville Manor, Vegreville, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "549: Kipohtakawkamik Elders Lodge, Alexander, AB, Canada\n", + "osm query name: Kipohtakawkamik Elders Lodge, Alexander, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Alexander, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "550: Keehewkamik Supportive Living Facility, , AB, Canada\n", + "osm query name: Keehewkamik Supportive Living Facility, , AB, Canada\n", + "osm query street: 23 bronx drive alexander, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "551: Aspen House Care Residence, Morinville, AB, Canada\n", + "osm query name: Aspen House Care Residence, Morinville, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "552: Edson Healthcare Centre, , AB, Canada\n", + "osm query name: Edson Healthcare Centre, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "553: Parkland Senior Citizens Lodge, , AB, Canada\n", + "osm query name: Parkland Senior Citizens Lodge, , AB, Canada\n", + "osm query street: 4619 9 avenue edson, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "554: Diamond Spring Lodge, , AB, Canada\n", + "osm query name: Diamond Spring Lodge, , AB, Canada\n", + "osm query street: 4619 52 avenue redwater, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "555: Pleasant View Lodge, Mayerthorpe, AB, Canada\n", + "osm query name: Pleasant View Lodge, Mayerthorpe, AB, Canada\n", + "osm query street: 4407 42 a avenue, Mayerthorpe, AB, Canada\n", + "osm query city: Mayerthorpe, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "556: Extendicare Mayerthorpe, Mayerthorpe, AB, Canada\n", + "osm query name: Extendicare Mayerthorpe, Mayerthorpe, AB, Canada\n", + "osm query street: 4706 54 street, Mayerthorpe, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "557: Vermilion Valley Lodge, , AB, Canada\n", + "osm query name: Vermilion Valley Lodge, , AB, Canada\n", + "osm query street: 4610 53 avenue vermilion, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "558: Alpine Summit Seniors Lodge, , AB, Canada\n", + "osm query name: Alpine Summit Seniors Lodge, , AB, Canada\n", + "osm query street: 509 turret street jasper, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "559: Dr. W.R. Keir - Barrhead Continuing Care Centre, Barrhead, AB, Canada\n", + "osm query name: Dr. W.R. Keir - Barrhead Continuing Care Centre, Barrhead, AB, Canada\n", + "osm query street: 5336 59 avenue, Barrhead, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "560: Shepherd's Care Barrhead, Barrhead, AB, Canada\n", + "osm query name: Shepherd's Care Barrhead, Barrhead, AB, Canada\n", + "osm query street: 5236 59 street, Barrhead, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "561: Westlock Continuing Care Centre, Westlock, AB, Canada\n", + "osm query name: Westlock Continuing Care Centre, Westlock, AB, Canada\n", + "osm query street: 10203 96 street, Westlock, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "562: Smithfield Lodge, Westlock, AB, Canada\n", + "osm query name: Smithfield Lodge, Westlock, AB, Canada\n", + "osm query street: 10203 97 street, Westlock, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "563: Eagle View Lodge, Myrnam, AB, Canada\n", + "osm query name: Eagle View Lodge, Myrnam, AB, Canada\n", + "osm query street: 4802 49 avenue, Myrnam, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "564: Pine Valley Lodge, , AB, Canada\n", + "osm query name: Pine Valley Lodge, , AB, Canada\n", + "osm query street: 177 boutin avenue hinton, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "565: Hinton Continuing Care Centre, Hinton, AB, Canada\n", + "osm query name: Hinton Continuing Care Centre, Hinton, AB, Canada\n", + "osm query street: 1290 switzer drive, Hinton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "566: Hinton Adult Day Centre, , AB, Canada\n", + "osm query name: Hinton Adult Day Centre, , AB, Canada\n", + "osm query street: 122 market street, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "567: Islay Assisted Living, Islay, AB, Canada\n", + "osm query name: Islay Assisted Living, Islay, AB, Canada\n", + "osm query street: 5016 53 street, Islay, AB, Canada\n", + "osm query city: Islay, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "568: Smoky Lake Continuing Care Centre, Smoky lake, AB, Canada\n", + "osm query name: Smoky Lake Continuing Care Centre, Smoky lake, AB, Canada\n", + "osm query street: 4607 52 avenue, Smoky lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "569: Bar-V-Nook Manor, Smoky lake, AB, Canada\n", + "osm query name: Bar-V-Nook Manor, Smoky lake, AB, Canada\n", + "osm query street: 4524 52 avenue, Smoky lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "570: Spruce View Lodge, Whitecourt, AB, Canada\n", + "osm query name: Spruce View Lodge, Whitecourt, AB, Canada\n", + "osm query street: 12 sunset boulevard, Whitecourt, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "571: Lloydminster Continuing Care Centre, Lloydminster, AB, Canada\n", + "osm query name: Lloydminster Continuing Care Centre, Lloydminster, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "572: Dr. Cooke Extended Care Centre, Lloydminster, AB, Canada\n", + "osm query name: Dr. Cooke Extended Care Centre, Lloydminster, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "573: Points West Living Lloydminster, Lloydminster, AB, Canada\n", + "osm query name: Points West Living Lloydminster, Lloydminster, AB, Canada\n", + "osm query street: 4025 56 avenue, Lloydminster, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "574: Vilna Villa, Vilna, AB, Canada\n", + "osm query name: Vilna Villa, Vilna, AB, Canada\n", + "osm query street: 5404 50 street, Vilna, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "575: Pioneer House, Lloydminster, AB, Canada\n", + "osm query name: Pioneer House, Lloydminster, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "576: Extendicare St. Paul, St. paul, AB, Canada\n", + "osm query name: Extendicare St. Paul, St. paul, AB, Canada\n", + "osm query street: 4614 47 avenue, St. paul, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "577: Aspen House, St. paul, AB, Canada\n", + "osm query name: Aspen House, St. paul, AB, Canada\n", + "osm query street: 4606 48 avenue, St. paul, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "578: Elk Point Heritage Lodge, Elk point, AB, Canada\n", + "osm query name: Elk Point Heritage Lodge, Elk point, AB, Canada\n", + "osm query street: 5338 50 avenue, Elk point, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "579: Wildrose Villa, , AB, Canada\n", + "osm query name: Wildrose Villa, , AB, Canada\n", + "osm query street: 5002 ball avenue boyle, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "580: Extendicare Athabasca, Athabasca, AB, Canada\n", + "osm query name: Extendicare Athabasca, Athabasca, AB, Canada\n", + "osm query street: 4517 53 street, Athabasca, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "581: Extendicare Bonnyville, Bonnyville, AB, Canada\n", + "osm query name: Extendicare Bonnyville, Bonnyville, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "582: Golden Sands, Lac la biche, AB, Canada\n", + "osm query name: Golden Sands, Lac la biche, AB, Canada\n", + "osm query street: 9210 91 avenue, Lac la biche, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "583: Points West Living Cold Lake, Cold lake, AB, Canada\n", + "osm query name: Points West Living Cold Lake, Cold lake, AB, Canada\n", + "osm query street: 512 25 street, Cold lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "584: Whispering Pines Seniors Lodge, Grande cache, AB, Canada\n", + "osm query name: Whispering Pines Seniors Lodge, Grande cache, AB, Canada\n", + "osm query street: 10210 shand avenue, Grande cache, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "585: Vanderwell Heritage Place, Slave lake, AB, Canada\n", + "osm query name: Vanderwell Heritage Place, Slave lake, AB, Canada\n", + "osm query street: 301 6 avenue ne, Slave lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "586: Sweetgrass, Slave lake, AB, Canada\n", + "osm query name: Sweetgrass, Slave lake, AB, Canada\n", + "osm query street: 105 6 avenue ne, Slave lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "587: South Valley Residence Living, , AB, Canada\n", + "osm query name: South Valley Residence Living, , AB, Canada\n", + "osm query street: 3803 52 street, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "588: J. B. Wood Continuing Care Centre, High prairie, AB, Canada\n", + "osm query name: J. B. Wood Continuing Care Centre, High prairie, AB, Canada\n", + "osm query street: 5101 38 street, High prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "589: Ridgevalley Seniors Home, , AB, Canada\n", + "osm query name: Ridgevalley Seniors Home, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "590: Manoir du Lac, , AB, Canada\n", + "osm query name: Manoir du Lac, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "591: Grande Prairie Care Centre, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie Care Centre, Grande prairie, AB, Canada\n", + "osm query street: 9705 94 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "592: Emerald Gardens Retirement Residence, Grande prairie, AB, Canada\n", + "osm query name: Emerald Gardens Retirement Residence, Grande prairie, AB, Canada\n", + "osm query street: 10402 111 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "593: Prairie Lake Seniors Community, Grande prairie, AB, Canada\n", + "osm query name: Prairie Lake Seniors Community, Grande prairie, AB, Canada\n", + "osm query street: 11460 104 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "594: Grande Prairie and Area, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie and Area, Grande prairie, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Grande prairie, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "595: Pearson Place, Hythe, AB, Canada\n", + "osm query name: Pearson Place, Hythe, AB, Canada\n", + "osm query street: 10409 99 street, Hythe, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "596: Sutherland Place, Peace river, AB, Canada\n", + "osm query name: Sutherland Place, Peace river, AB, Canada\n", + "osm query street: 10915 99 street, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "597: Points West Living Peace River, Peace river, AB, Canada\n", + "osm query name: Points West Living Peace River, Peace river, AB, Canada\n", + "osm query street: 11011 99 street, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "598: Stone Brook, Grimshaw, AB, Canada\n", + "osm query name: Stone Brook, Grimshaw, AB, Canada\n", + "osm query street: 4902 59 street, Grimshaw, AB, Canada\n", + "osm query city: Grimshaw, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "599: Willow Square Continuing Care Centre, Fort mcmurray, AB, Canada\n", + "osm query name: Willow Square Continuing Care Centre, Fort mcmurray, AB, Canada\n", + "osm query street: 6 hospital street, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "600: Heimstaed Lodge, La crete, AB, Canada\n", + "osm query name: Heimstaed Lodge, La crete, AB, Canada\n", + "osm query street: 9806 105 street, La crete, AB, Canada\n", + "osm query city: La crete, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "601: Kahkiyow Keykanow Elders Care Home, Fort chipewyan, AB, Canada\n", + "osm query name: Kahkiyow Keykanow Elders Care Home, Fort chipewyan, AB, Canada\n", + "osm query street: 133 mackenzie avenue, Fort chipewyan, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "602: Calgary 707 10 Avenue SW, Calgary, AB, Canada\n", + "osm query name: Calgary 707 10 Avenue SW, Calgary, AB, Canada\n", + "osm query street: 707 10 avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "603: Mustard Seed, Calgary, AB, Canada\n", + "osm query name: Mustard Seed, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "604: Calgary Alpha House, Calgary, AB, Canada\n", + "osm query name: Calgary Alpha House, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "605: Safeworks Mobile Van, Calgary, AB, Canada\n", + "osm query name: Safeworks Mobile Van, Calgary, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Calgary, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "606: Centre of Hope, Calgary, AB, Canada\n", + "osm query name: Centre of Hope, Calgary, AB, Canada\n", + "osm query street: 420 9 avenue se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "607: Aventa Centre of Excellence for Women with Addictions, Calgary, AB, Canada\n", + "osm query name: Aventa Centre of Excellence for Women with Addictions, Calgary, AB, Canada\n", + "osm query street: 610 25 avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "608: Calgary 1406 Centre Street NE, Calgary, AB, Canada\n", + "osm query name: Calgary 1406 Centre Street NE, Calgary, AB, Canada\n", + "osm query street: 1406 centre street ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "609: Bridgeland Seniors Health Clinic, Calgary, AB, Canada\n", + "osm query name: Bridgeland Seniors Health Clinic, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "610: Youth Substance Use and Mental Health Services, Calgary, AB, Canada\n", + "osm query name: Youth Substance Use and Mental Health Services, Calgary, AB, Canada\n", + "osm query street: 1005 17 street nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "611: 1835 House, Calgary, AB, Canada\n", + "osm query name: 1835 House, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "612: Renfrew Recovery Centre, Calgary, AB, Canada\n", + "osm query name: Renfrew Recovery Centre, Calgary, AB, Canada\n", + "osm query street: 1611 remington road ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "613: YW Sheriff King Home, Calgary, AB, Canada\n", + "osm query name: YW Sheriff King Home, Calgary, AB, Canada\n", + "osm query street: 2003 16 street se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "614: Calgary 1937 42 Avenue SW, Calgary, AB, Canada\n", + "osm query name: Calgary 1937 42 Avenue SW, Calgary, AB, Canada\n", + "osm query street: 1937 42 avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "615: Sunrise Healing Lodge Society, Calgary, AB, Canada\n", + "osm query name: Sunrise Healing Lodge Society, Calgary, AB, Canada\n", + "osm query street: 1231 34 avenue ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "616: Fresh Start Recovery Centre, Calgary, AB, Canada\n", + "osm query name: Fresh Start Recovery Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "617: Parkdale Campus, Calgary, AB, Canada\n", + "osm query name: Parkdale Campus, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "618: Calgary 565 36 Street, Calgary, AB, Canada\n", + "osm query name: Calgary 565 36 Street, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "619: Calgary 4321 23B Street NE, Calgary, AB, Canada\n", + "osm query name: Calgary 4321 23B Street NE, Calgary, AB, Canada\n", + "osm query street: 4321 23b street ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "620: Market Mall, Calgary, AB, Canada\n", + "osm query name: Market Mall, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "621: Sunridge Professional Building, Calgary, AB, Canada\n", + "osm query name: Sunridge Professional Building, Calgary, AB, Canada\n", + "osm query street: 2675 36 street ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "622: Calgary 3465 26 Avenue NE, Calgary, AB, Canada\n", + "osm query name: Calgary 3465 26 Avenue NE, Calgary, AB, Canada\n", + "osm query street: 3465 26 avenue ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "623: Tsuu T'ina Spirit Healing Lodge, , AB, Canada\n", + "osm query name: Tsuu T'ina Spirit Healing Lodge, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "624: Airdrie 125 Main Street NW, Airdrie, AB, Canada\n", + "osm query name: Airdrie 125 Main Street NW, Airdrie, AB, Canada\n", + "osm query street: 125 main street nw, Airdrie, AB, Canada\n", + "osm query city: Airdrie, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "625: Airdrie Provincial Building, Airdrie, AB, Canada\n", + "osm query name: Airdrie Provincial Building, Airdrie, AB, Canada\n", + "osm query street: 104 1 avenue nw, Airdrie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "626: Hilton Plaza, , AB, Canada\n", + "osm query name: Hilton Plaza, , AB, Canada\n", + "osm query street: 205 3 avenue, , AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "627: Addiction and Mental Health Clinic - Strathmore, , AB, Canada\n", + "osm query name: Addiction and Mental Health Clinic - Strathmore, , AB, Canada\n", + "osm query street: 205 3 avenue, , AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "628: High River Addiction and Mental Health Clinic, High river, AB, Canada\n", + "osm query name: High River Addiction and Mental Health Clinic, High river, AB, Canada\n", + "osm query street: 617 1 street w, High river, AB, Canada\n", + "osm query city: High river, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "629: Olds Provincial Building (South), Olds, AB, Canada\n", + "osm query name: Olds Provincial Building (South), Olds, AB, Canada\n", + "osm query street: 5025 50 street, Olds, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "630: Canmore Boardwalk Building, Canmore, AB, Canada\n", + "osm query name: Canmore Boardwalk Building, Canmore, AB, Canada\n", + "osm query street: 743 railway avenue, Canmore, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "631: Three Hills Provincial Building, Three hills, AB, Canada\n", + "osm query name: Three Hills Provincial Building, Three hills, AB, Canada\n", + "osm query street: 128 3 avenue se, Three hills, AB, Canada\n", + "osm query city: Three hills, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "632: Drumheller - Grace House, Drumheller, AB, Canada\n", + "osm query name: Drumheller - Grace House, Drumheller, AB, Canada\n", + "osm query street: 175 3 street w, Drumheller, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "633: Cascade Plaza, Banff, AB, Canada\n", + "osm query name: Cascade Plaza, Banff, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "634: Innisfail 5054 50 Street, Innisfail, AB, Canada\n", + "osm query name: Innisfail 5054 50 Street, Innisfail, AB, Canada\n", + "osm query street: 5054 50 street, Innisfail, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "635: Claresholm Addiction and Mental Health Clinic, Claresholm, AB, Canada\n", + "osm query name: Claresholm Addiction and Mental Health Clinic, Claresholm, AB, Canada\n", + "osm query street: 4901 2 street w, Claresholm, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "636: Claresholm Centre for Mental Health & Addictions, Claresholm, AB, Canada\n", + "osm query name: Claresholm Centre for Mental Health & Addictions, Claresholm, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "637: Lander Treatment Centre, Claresholm, AB, Canada\n", + "osm query name: Lander Treatment Centre, Claresholm, AB, Canada\n", + "osm query street: 221 fairway drive, Claresholm, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "638: Red Deer Polytechnic, Red deer, AB, Canada\n", + "osm query name: Red Deer Polytechnic, Red deer, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "639: Red Deer 4101 54 Avenue, Red deer, AB, Canada\n", + "osm query name: Red Deer 4101 54 Avenue, Red deer, AB, Canada\n", + "osm query street: 4101 54 avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "640: Westview Business Centre, Red deer, AB, Canada\n", + "osm query name: Westview Business Centre, Red deer, AB, Canada\n", + "osm query street: 4315 55 avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "641: Turning Point, Red deer, AB, Canada\n", + "osm query name: Turning Point, Red deer, AB, Canada\n", + "osm query street: 4611 50 avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "642: Red Deer Primary Care Network, Red deer, AB, Canada\n", + "osm query name: Red Deer Primary Care Network, Red deer, AB, Canada\n", + "osm query street: 5130 47 street, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "643: Red Deer 4811 48 Avenue, Red deer, AB, Canada\n", + "osm query name: Red Deer 4811 48 Avenue, Red deer, AB, Canada\n", + "osm query street: 4811 48 avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "644: Red Deer 49 Street - Addiction and Mental Health Services, Red deer, AB, Canada\n", + "osm query name: Red Deer 49 Street - Addiction and Mental Health Services, Red deer, AB, Canada\n", + "osm query street: 4733 49 street, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "645: Canadian Mental Health Association - Central Region, Red deer, AB, Canada\n", + "osm query name: Canadian Mental Health Association - Central Region, Red deer, AB, Canada\n", + "osm query street: 5017 50 avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "646: Red Deer Provincial Building, Red deer, AB, Canada\n", + "osm query name: Red Deer Provincial Building, Red deer, AB, Canada\n", + "osm query street: 4920 51 street, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "647: Red Deer 5104 48 Avenue, Red deer, AB, Canada\n", + "osm query name: Red Deer 5104 48 Avenue, Red deer, AB, Canada\n", + "osm query street: 5104 48 avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "648: Safe Harbour Society, Red deer, AB, Canada\n", + "osm query name: Safe Harbour Society, Red deer, AB, Canada\n", + "osm query street: 5246 53 avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "649: Sylvan Lake Family and Community Centre, Sylvan lake, AB, Canada\n", + "osm query name: Sylvan Lake Family and Community Centre, Sylvan lake, AB, Canada\n", + "osm query street: 4725 43 street, Sylvan lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "650: Kentwood Place, Red deer, AB, Canada\n", + "osm query name: Kentwood Place, Red deer, AB, Canada\n", + "osm query street: 120 kendrew drive, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "651: Lake Louise 200 Hector Street, Lake louise, AB, Canada\n", + "osm query name: Lake Louise 200 Hector Street, Lake louise, AB, Canada\n", + "osm query street: 200 hector street, Lake louise, AB, Canada\n", + "osm query city: Lake louise, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "652: Foothills Detox Centre, Fort macleod, AB, Canada\n", + "osm query name: Foothills Detox Centre, Fort macleod, AB, Canada\n", + "osm query street: 810 18 street, Fort macleod, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "653: Mountain Rose Centre, Rocky mountain house, AB, Canada\n", + "osm query name: Mountain Rose Centre, Rocky mountain house, AB, Canada\n", + "osm query street: 4708 46 street, Rocky mountain house, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "654: Wild Rose School Division, Rocky mountain house, AB, Canada\n", + "osm query name: Wild Rose School Division, Rocky mountain house, AB, Canada\n", + "osm query street: 4912 43 street, Rocky mountain house, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "655: Lacombe 4580 46 Street, Lacombe, AB, Canada\n", + "osm query name: Lacombe 4580 46 Street, Lacombe, AB, Canada\n", + "osm query street: 4580 46 street, Lacombe, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "656: Brooks Community Cultural Centre, , AB, Canada\n", + "osm query name: Brooks Community Cultural Centre, , AB, Canada\n", + "osm query street: 327 3 street w brooks, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "657: Brooks 403 2 Avenue W, , AB, Canada\n", + "osm query name: Brooks 403 2 Avenue W, , AB, Canada\n", + "osm query street: 403 2 avenue brooks, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "658: Stettler and District Family and Community Support Services, Stettler, AB, Canada\n", + "osm query name: Stettler and District Family and Community Support Services, Stettler, AB, Canada\n", + "osm query street: 4720 50 street, Stettler, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "659: Lethbridge 402 6 Avenue North, , AB, Canada\n", + "osm query name: Lethbridge 402 6 Avenue North, , AB, Canada\n", + "osm query street: 402 6 avenue n lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "660: Lethbridge 1098 3 Avenue North, , AB, Canada\n", + "osm query name: Lethbridge 1098 3 Avenue North, , AB, Canada\n", + "osm query street: 1098 3 avenue n lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "661: Associates Counselling Services Office, , AB, Canada\n", + "osm query name: Associates Counselling Services Office, , AB, Canada\n", + "osm query street: 239 12b street n lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "662: Pincher Creek Provincial Building, Pincher creek, AB, Canada\n", + "osm query name: Pincher Creek Provincial Building, Pincher creek, AB, Canada\n", + "osm query street: 782 main street, Pincher creek, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "663: Lethbridge 435 5 Street S, , AB, Canada\n", + "osm query name: Lethbridge 435 5 Street S, , AB, Canada\n", + "osm query street: 435 5 street s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "664: Fresh Start Recovery Centre, Lethbridge, AB, Canada\n", + "osm query name: Fresh Start Recovery Centre, Lethbridge, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Lethbridge, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "665: Southern Alcare Manor, , AB, Canada\n", + "osm query name: Southern Alcare Manor, , AB, Canada\n", + "osm query street: 520 7 street s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "666: Ponoka Provincial Building, Ponoka, AB, Canada\n", + "osm query name: Ponoka Provincial Building, Ponoka, AB, Canada\n", + "osm query street: 5120 49 avenue, Ponoka, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "667: Cardston Provincial Building, Cardston, AB, Canada\n", + "osm query name: Cardston Provincial Building, Cardston, AB, Canada\n", + "osm query street: 576 main street, Cardston, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "668: Wetaskiwin, 5014 48 Avenue, Wetaskiwin, AB, Canada\n", + "osm query name: Wetaskiwin, 5014 48 Avenue, Wetaskiwin, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "669: Wetaskiwin 5205B 49 Avenue, Wetaskiwin, AB, Canada\n", + "osm query name: Wetaskiwin 5205B 49 Avenue, Wetaskiwin, AB, Canada\n", + "osm query street: 5205b 49 avenue, Wetaskiwin, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "670: Wetaskiwin Provincial Building, Wetaskiwin, AB, Canada\n", + "osm query name: Wetaskiwin Provincial Building, Wetaskiwin, AB, Canada\n", + "osm query street: 5201 50 avenue, Wetaskiwin, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "671: Gateway Centre, Camrose, AB, Canada\n", + "osm query name: Gateway Centre, Camrose, AB, Canada\n", + "osm query street: 4825 51 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "672: Camrose Addiction and Mental Health Clinic, Camrose, AB, Canada\n", + "osm query name: Camrose Addiction and Mental Health Clinic, Camrose, AB, Canada\n", + "osm query street: 4911 47 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "673: Killam 4811 49 Avenue, , AB, Canada\n", + "osm query name: Killam 4811 49 Avenue, , AB, Canada\n", + "osm query street: 4811 49 avenue killam, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "674: Frank Maddock High School, Drayton valley, AB, Canada\n", + "osm query name: Frank Maddock High School, Drayton valley, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "675: Centre Hope Building, , AB, Canada\n", + "osm query name: Centre Hope Building, , AB, Canada\n", + "osm query street: 4906 49 avenue leduc, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "676: Eldorado Elementary School, Drayton valley, AB, Canada\n", + "osm query name: Eldorado Elementary School, Drayton valley, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "677: Drayton Christian School, Drayton valley, AB, Canada\n", + "osm query name: Drayton Christian School, Drayton valley, AB, Canada\n", + "osm query street: 4762 50 street, Drayton valley, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "678: Drayton Valley Community Outreach School, Drayton valley, AB, Canada\n", + "osm query name: Drayton Valley Community Outreach School, Drayton valley, AB, Canada\n", + "osm query street: 5056 50 avenue, Drayton valley, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "679: Aurora Elementary School, Drayton valley, AB, Canada\n", + "osm query name: Aurora Elementary School, Drayton valley, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "680: H W Pickup Junior High School, Drayton valley, AB, Canada\n", + "osm query name: H W Pickup Junior High School, Drayton valley, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "681: Oyen Community Health Services, , AB, Canada\n", + "osm query name: Oyen Community Health Services, , AB, Canada\n", + "osm query street: 315 3 avenue e oyen, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "682: Regional Resource Centre - Medicine Hat Regional Hospital, Medicine hat, AB, Canada\n", + "osm query name: Regional Resource Centre - Medicine Hat Regional Hospital, Medicine hat, AB, Canada\n", + "osm query street: 631 prospect drive sw, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "683: Medicine Hat 250 2 Street SE, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat 250 2 Street SE, Medicine hat, AB, Canada\n", + "osm query street: 250 2 street se, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "684: Medicine Hat Provincial Building, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat Provincial Building, Medicine hat, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "685: Medicine Hat Recovery Centre, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat Recovery Centre, Medicine hat, AB, Canada\n", + "osm query street: 370 kipling street se, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "686: Hughenden Public School, Hughenden, AB, Canada\n", + "osm query name: Hughenden Public School, Hughenden, AB, Canada\n", + "osm query street: 19 rydberg street, Hughenden, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "687: Parkland Building, Stony plain, AB, Canada\n", + "osm query name: Parkland Building, Stony plain, AB, Canada\n", + "osm query street: 4912 51 avenue, Stony plain, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "688: Villa Caritas, Edmonton, AB, Canada\n", + "osm query name: Villa Caritas, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "689: Neighbour Centre, Edmonton, AB, Canada\n", + "osm query name: Neighbour Centre, Edmonton, AB, Canada\n", + "osm query street: 10050 81 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "690: HealthPlus (IDA), Edmonton, AB, Canada\n", + "osm query name: HealthPlus (IDA), Edmonton, AB, Canada\n", + "osm query street: 8132 102 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "691: Edmonton 10325 83 Avenue, Edmonton, AB, Canada\n", + "osm query name: Edmonton 10325 83 Avenue, Edmonton, AB, Canada\n", + "osm query street: 10325 83 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "692: University of Alberta - Administration Building, Edmonton, AB, Canada\n", + "osm query name: University of Alberta - Administration Building, Edmonton, AB, Canada\n", + "osm query street: 114 street and 89 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "693: Edmonton 108 Street Building, Edmonton, AB, Canada\n", + "osm query name: Edmonton 108 Street Building, Edmonton, AB, Canada\n", + "osm query street: 9942 108 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "694: Transition Place, Edmonton, AB, Canada\n", + "osm query name: Transition Place, Edmonton, AB, Canada\n", + "osm query street: 10010 105 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "695: WSP Place, Edmonton, AB, Canada\n", + "osm query name: WSP Place, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "696: Edmonton 10419 102 Avenue, Edmonton, AB, Canada\n", + "osm query name: Edmonton 10419 102 Avenue, Edmonton, AB, Canada\n", + "osm query street: 10419 102 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "697: Forensic Assessment & Community Services, Edmonton, AB, Canada\n", + "osm query name: Forensic Assessment & Community Services, Edmonton, AB, Canada\n", + "osm query street: 10225 106 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "698: Addiction Recovery Centre, Edmonton, AB, Canada\n", + "osm query name: Addiction Recovery Centre, Edmonton, AB, Canada\n", + "osm query street: 10302 107 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "699: Addiction Services Edmonton, Edmonton, AB, Canada\n", + "osm query name: Addiction Services Edmonton, Edmonton, AB, Canada\n", + "osm query street: 10010 102a avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "700: iHuman Youth Society, Edmonton, AB, Canada\n", + "osm query name: iHuman Youth Society, Edmonton, AB, Canada\n", + "osm query street: 9635 102a avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "701: George Spady Centre, Edmonton, AB, Canada\n", + "osm query name: George Spady Centre, Edmonton, AB, Canada\n", + "osm query street: 10015 105a avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "702: Mint Health & Drugs Church Street Pharmacy, Edmonton, AB, Canada\n", + "osm query name: Mint Health & Drugs Church Street Pharmacy, Edmonton, AB, Canada\n", + "osm query street: 10631 96 street, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "703: Silver Birch Court, Sherwood, AB, Canada\n", + "osm query name: Silver Birch Court, Sherwood, AB, Canada\n", + "osm query street: 920 bison way, Sherwood, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "704: Irma School, , AB, Canada\n", + "osm query name: Irma School, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "705: Alberta Hospital Edmonton, , AB, Canada\n", + "osm query name: Alberta Hospital Edmonton, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "706: Onoway Mental Health Services, Onoway, AB, Canada\n", + "osm query name: Onoway Mental Health Services, Onoway, AB, Canada\n", + "osm query street: 5115 lac st. anne trail s, Onoway, AB, Canada\n", + "osm query city: Onoway, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "707: Wainwright 905A 3 Avenue, , AB, Canada\n", + "osm query name: Wainwright 905A 3 Avenue, , AB, Canada\n", + "osm query street: 905a 3 avenue wainwright, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "708: Blessed Sacrament School, , AB, Canada\n", + "osm query name: Blessed Sacrament School, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "709: Wainwright High School, Wainwright, AB, Canada\n", + "osm query name: Wainwright High School, Wainwright, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "710: Wainwright Elementary School, Wainwright, AB, Canada\n", + "osm query name: Wainwright Elementary School, Wainwright, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "711: Crisis Association of Vegreville, Vegreville, AB, Canada\n", + "osm query name: Crisis Association of Vegreville, Vegreville, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Vegreville, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "712: Delnorte School, Innisfree, AB, Canada\n", + "osm query name: Delnorte School, Innisfree, AB, Canada\n", + "osm query street: 4728 53 street, Innisfree, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "713: Mannville School, Mannville, AB, Canada\n", + "osm query name: Mannville School, Mannville, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "714: School of Hope, , AB, Canada\n", + "osm query name: School of Hope, , AB, Canada\n", + "osm query street: 5212 railway avenue vermilion, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "715: Vermilion Outreach School, , AB, Canada\n", + "osm query name: Vermilion Outreach School, , AB, Canada\n", + "osm query street: 4925 50 avenue vermilion, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "716: St. Jerome's School, , AB, Canada\n", + "osm query name: St. Jerome's School, , AB, Canada\n", + "osm query street: 4820 46 street vermilion, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "717: Vermilion Elementary School, , AB, Canada\n", + "osm query name: Vermilion Elementary School, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "718: J.R. Robson High School, , AB, Canada\n", + "osm query name: J.R. Robson High School, , AB, Canada\n", + "osm query street: 5102 46 street vermilion, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "719: E.H. Walter School, Paradise valley, AB, Canada\n", + "osm query name: E.H. Walter School, Paradise valley, AB, Canada\n", + "osm query street: 310 park avenue, Paradise valley, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "720: Barrhead Administration Building, Barrhead, AB, Canada\n", + "osm query name: Barrhead Administration Building, Barrhead, AB, Canada\n", + "osm query street: 5143 50 street, Barrhead, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "721: Hinton Civic Centre Building, Hinton, AB, Canada\n", + "osm query name: Hinton Civic Centre Building, Hinton, AB, Canada\n", + "osm query street: 131 civic centre road, Hinton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "722: Hinton 131 Market Street, , AB, Canada\n", + "osm query name: Hinton 131 Market Street, , AB, Canada\n", + "osm query street: 131 market street, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "723: Kitscoty Elementary School, Kitscoty, AB, Canada\n", + "osm query name: Kitscoty Elementary School, Kitscoty, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "724: Kitscoty High School, Kitscoty, AB, Canada\n", + "osm query name: Kitscoty High School, Kitscoty, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "725: Whitecourt Provincial Building, Whitecourt, AB, Canada\n", + "osm query name: Whitecourt Provincial Building, Whitecourt, AB, Canada\n", + "osm query street: 5020 52 avenue, Whitecourt, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "726: Clandonald School, Clandonald, AB, Canada\n", + "osm query name: Clandonald School, Clandonald, AB, Canada\n", + "osm query street: 213 1 avenue w, Clandonald, AB, Canada\n", + "osm query city: Clandonald, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "727: Thorpe Recovery Centre, Blackfoot, AB, Canada\n", + "osm query name: Thorpe Recovery Centre, Blackfoot, AB, Canada\n", + "osm query street: 21060 tranquility way, Blackfoot, AB, Canada\n", + "osm query city: Blackfoot, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "728: Dewberry School, , AB, Canada\n", + "osm query name: Dewberry School, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "729: Lloydminster 3830 43 Avenue, Lloydminster, AB, Canada\n", + "osm query name: Lloydminster 3830 43 Avenue, Lloydminster, AB, Canada\n", + "osm query street: 3830 43 avenue, Lloydminster, AB, Canada\n", + "osm query city: Lloydminster, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "730: Lloydminster Culture House, Lloydminster, AB, Canada\n", + "osm query name: Lloydminster Culture House, Lloydminster, AB, Canada\n", + "osm query street: 5009 48 avenue, Lloydminster, AB, Canada\n", + "osm query city: Lloydminster, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "731: Marwayne Jubilee School, Marwayne, AB, Canada\n", + "osm query name: Marwayne Jubilee School, Marwayne, AB, Canada\n", + "osm query street: 105 2 street, Marwayne, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "732: St. Paul Provincial Building, St. paul, AB, Canada\n", + "osm query name: St. Paul Provincial Building, St. paul, AB, Canada\n", + "osm query street: 5025 49 avenue, St. paul, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "733: St. Paul 4909 53 Avenue, St. paul, AB, Canada\n", + "osm query name: St. Paul 4909 53 Avenue, St. paul, AB, Canada\n", + "osm query street: 4909 53 avenue, St. paul, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "734: Fox Creek School, Fox creek, AB, Canada\n", + "osm query name: Fox Creek School, Fox creek, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "735: Swan Hills 29 Freeman Drive, Swan hills, AB, Canada\n", + "osm query name: Swan Hills 29 Freeman Drive, Swan hills, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Swan hills, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "736: Bonnyville Provincial Building, Bonnyville, AB, Canada\n", + "osm query name: Bonnyville Provincial Building, Bonnyville, AB, Canada\n", + "osm query street: 4902 50 avenue, Bonnyville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "737: New Park Place, Bonnyville, AB, Canada\n", + "osm query name: New Park Place, Bonnyville, AB, Canada\n", + "osm query street: 5201 44 street, Bonnyville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "738: Portage College, Lac la biche, AB, Canada\n", + "osm query name: Portage College, Lac la biche, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "739: Lac La Biche Provincial Building, Lac la biche, AB, Canada\n", + "osm query name: Lac La Biche Provincial Building, Lac la biche, AB, Canada\n", + "osm query street: 9503 beaverhill road, Lac la biche, AB, Canada\n", + "osm query city: Lac la biche, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "740: Cold Lake 5013 51 Street, Cold lake, AB, Canada\n", + "osm query name: Cold Lake 5013 51 Street, Cold lake, AB, Canada\n", + "osm query street: 5013 51 street, Cold lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "741: Pine Plaza Building, Grande cache, AB, Canada\n", + "osm query name: Pine Plaza Building, Grande cache, AB, Canada\n", + "osm query street: 702 pine plaza nw, Grande cache, AB, Canada\n", + "osm query city: Grande cache, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "742: Slave Lake Government Centre, Slave lake, AB, Canada\n", + "osm query name: Slave Lake Government Centre, Slave lake, AB, Canada\n", + "osm query street: 101 3 street, Slave lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "743: Slave Lake Government Centre and Library, Slave lake, AB, Canada\n", + "osm query name: Slave Lake Government Centre and Library, Slave lake, AB, Canada\n", + "osm query street: 101 3 street sw, Slave lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "744: Metis Indian Town Alcohol Association, High prairie, AB, Canada\n", + "osm query name: Metis Indian Town Alcohol Association, High prairie, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: High prairie, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "745: Conklin Community Centre, Conklin, AB, Canada\n", + "osm query name: Conklin Community Centre, Conklin, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Conklin, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "746: CMHA Alberta North West Region (Grande Prairie), Grande prairie, AB, Canada\n", + "osm query name: CMHA Alberta North West Region (Grande Prairie), Grande prairie, AB, Canada\n", + "osm query street: 9713 100 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "747: Grande Prairie Aberdeen Centre, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie Aberdeen Centre, Grande prairie, AB, Canada\n", + "osm query street: 9728 101 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "748: Grande Prairie Nordic Court, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie Nordic Court, Grande prairie, AB, Canada\n", + "osm query street: 10014 99 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "749: Grande Prairie Victim Services Association, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie Victim Services Association, Grande prairie, AB, Canada\n", + "osm query street: 10202 99 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "750: O'Brien Place, Grande prairie, AB, Canada\n", + "osm query name: O'Brien Place, Grande prairie, AB, Canada\n", + "osm query street: 10135 101 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "751: Northern Addictions Centre, Grande prairie, AB, Canada\n", + "osm query name: Northern Addictions Centre, Grande prairie, AB, Canada\n", + "osm query street: 11333 106 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "752: Powell Building, Peace river, AB, Canada\n", + "osm query name: Powell Building, Peace river, AB, Canada\n", + "osm query street: 10015 98 street, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "753: Mental Health Clinic, Peace river, AB, Canada\n", + "osm query name: Mental Health Clinic, Peace river, AB, Canada\n", + "osm query street: 10015 98 street, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "754: Peace River Community Mental Health Services, Peace river, AB, Canada\n", + "osm query name: Peace River Community Mental Health Services, Peace river, AB, Canada\n", + "osm query street: 10015 98 street, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "755: Peace River 9613 100 Street, Peace river, AB, Canada\n", + "osm query name: Peace River 9613 100 Street, Peace river, AB, Canada\n", + "osm query street: 9613 100 street, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "756: Peace River Provincial Building, Peace river, AB, Canada\n", + "osm query name: Peace River Provincial Building, Peace river, AB, Canada\n", + "osm query street: 9621 96 avenue, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "757: Peace River 9610 94 Avenue, Peace river, AB, Canada\n", + "osm query name: Peace River 9610 94 Avenue, Peace river, AB, Canada\n", + "osm query street: 9610 94 avenue, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "758: Fort McMurray: Pastew Place Detoxification Centre, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray: Pastew Place Detoxification Centre, Fort mcmurray, AB, Canada\n", + "osm query street: 505 sakitawaw trail s, Fort mcmurray, AB, Canada\n", + "osm query city: Fort mcmurray, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "759: Fort McMurray Recovery Centre, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray Recovery Centre, Fort mcmurray, AB, Canada\n", + "osm query street: 451 sakitawaw trail, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "760: Fort McMurray 73B Centennial Drive, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray 73B Centennial Drive, Fort mcmurray, AB, Canada\n", + "osm query street: 73b centennial drive, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "761: Fort McMurray 600 Signal Road, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray 600 Signal Road, Fort mcmurray, AB, Canada\n", + "osm query street: 600 signal road, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "762: 100 Signal Road, Fort mcmurray, AB, Canada\n", + "osm query name: 100 Signal Road, Fort mcmurray, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "763: Fort McMurray 339 Powder Drive, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray 339 Powder Drive, Fort mcmurray, AB, Canada\n", + "osm query street: 339 powder drive, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "764: Holy Cross Centre - North Building, Calgary, AB, Canada\n", + "osm query name: Holy Cross Centre - North Building, Calgary, AB, Canada\n", + "osm query street: 2202 2 street sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "765: Holy Cross Centre - Main Building, Calgary, AB, Canada\n", + "osm query name: Holy Cross Centre - Main Building, Calgary, AB, Canada\n", + "osm query street: 2210 2 street sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "766: Calgary 999 8 Street SW, Calgary, AB, Canada\n", + "osm query name: Calgary 999 8 Street SW, Calgary, AB, Canada\n", + "osm query street: 999 8 street sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "767: Kahanoff Centre, Calgary, AB, Canada\n", + "osm query name: Kahanoff Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "768: CUPS, Calgary, AB, Canada\n", + "osm query name: CUPS, Calgary, AB, Canada\n", + "osm query street: 1001 10 avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "769: Calgary 111 Riverfront Avenue SW, Calgary, AB, Canada\n", + "osm query name: Calgary 111 Riverfront Avenue SW, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "770: Calgary Zone and Area, Calgary, AB, Canada\n", + "osm query name: Calgary Zone and Area, Calgary, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Calgary, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "771: Kerby Centre, Calgary, AB, Canada\n", + "osm query name: Kerby Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "772: Repsol Sport Centre, Calgary, AB, Canada\n", + "osm query name: Repsol Sport Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "773: The Alex Seniors' Health Centre, Calgary, AB, Canada\n", + "osm query name: The Alex Seniors' Health Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "774: Calgary 611 Meredith Road NE, Calgary, AB, Canada\n", + "osm query name: Calgary 611 Meredith Road NE, Calgary, AB, Canada\n", + "osm query street: 611 meredith road ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "775: Riley Park Village, Calgary, AB, Canada\n", + "osm query name: Riley Park Village, Calgary, AB, Canada\n", + "osm query street: 1402 8 avenue nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "776: Richmond Road Diagnostic and Treatment Centre, Calgary, AB, Canada\n", + "osm query name: Richmond Road Diagnostic and Treatment Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "777: Macleod Professional Centre, Calgary, AB, Canada\n", + "osm query name: Macleod Professional Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "778: Kensington Clinic, Calgary, AB, Canada\n", + "osm query name: Kensington Clinic, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "779: Corus Entertainment, Calgary, AB, Canada\n", + "osm query name: Corus Entertainment, Calgary, AB, Canada\n", + "osm query street: 3320 17 avenue, Calgary, AB, Canada\n", + "osm query city: Calgary, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "780: Max Bell Centre, Calgary, AB, Canada\n", + "osm query name: Max Bell Centre, Calgary, AB, Canada\n", + "osm query street: 1221 barlow trail se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "781: University of Calgary - Health Sciences Centre, Calgary, AB, Canada\n", + "osm query name: University of Calgary - Health Sciences Centre, Calgary, AB, Canada\n", + "osm query street: 3330 hospital drive nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "782: Father David Bauer / Norma Bush Arenas, Calgary, AB, Canada\n", + "osm query name: Father David Bauer / Norma Bush Arenas, Calgary, AB, Canada\n", + "osm query street: 2424 university drive nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "783: Teaching, Research and Wellness Building, Calgary, AB, Canada\n", + "osm query name: Teaching, Research and Wellness Building, Calgary, AB, Canada\n", + "osm query street: 3280 hospital drive nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "784: McCaig Tower, Calgary, AB, Canada\n", + "osm query name: McCaig Tower, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "785: University of Calgary Main Campus, Calgary, AB, Canada\n", + "osm query name: University of Calgary Main Campus, Calgary, AB, Canada\n", + "osm query street: 2500 university drive nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "786: The Alex, Calgary, AB, Canada\n", + "osm query name: The Alex, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "787: Cambrian Wellness Centre - East Wing, Calgary, AB, Canada\n", + "osm query name: Cambrian Wellness Centre - East Wing, Calgary, AB, Canada\n", + "osm query street: 1000 veterans place nw, Calgary, AB, Canada\n", + "osm query city: Calgary, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "788: Cambrian Wellness Centre - West Wing, Calgary, AB, Canada\n", + "osm query name: Cambrian Wellness Centre - West Wing, Calgary, AB, Canada\n", + "osm query street: 2000 veterans place nw, Calgary, AB, Canada\n", + "osm query city: Calgary, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "789: Centre North Physiotherapy, Calgary, AB, Canada\n", + "osm query name: Centre North Physiotherapy, Calgary, AB, Canada\n", + "osm query street: 4807 centre street nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "790: University of Calgary Sports Medicine Centre, Calgary, AB, Canada\n", + "osm query name: University of Calgary Sports Medicine Centre, Calgary, AB, Canada\n", + "osm query street: 376 collegiate boulevard nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "791: Rockyview Health Centre Building II, Calgary, AB, Canada\n", + "osm query name: Rockyview Health Centre Building II, Calgary, AB, Canada\n", + "osm query street: 1016 68 avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "792: Calgary 3820 24 Avenue NW, Calgary, AB, Canada\n", + "osm query name: Calgary 3820 24 Avenue NW, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "793: Thorncliffe Plaza, Calgary, AB, Canada\n", + "osm query name: Thorncliffe Plaza, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "794: Marlborough Mall, Calgary, AB, Canada\n", + "osm query name: Marlborough Mall, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "795: Calgary Youth Physiotherapy, Calgary, AB, Canada\n", + "osm query name: Calgary Youth Physiotherapy, Calgary, AB, Canada\n", + "osm query street: 7720 elbow drive sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "796: NorthWest Centre, Calgary, AB, Canada\n", + "osm query name: NorthWest Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "797: Calgary 1117 55 Avenue NE, Calgary, AB, Canada\n", + "osm query name: Calgary 1117 55 Avenue NE, Calgary, AB, Canada\n", + "osm query street: 1117 55 avenue ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "798: Calgary 4520 16 Avenue NW, Calgary, AB, Canada\n", + "osm query name: Calgary 4520 16 Avenue NW, Calgary, AB, Canada\n", + "osm query street: 4520 16 avenue nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "799: Sunridge Medical Gallery, Calgary, AB, Canada\n", + "osm query name: Sunridge Medical Gallery, Calgary, AB, Canada\n", + "osm query street: 2580 32 street ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "800: Heritage Hill Professional Building, Calgary, AB, Canada\n", + "osm query name: Heritage Hill Professional Building, Calgary, AB, Canada\n", + "osm query street: 8180 macleod trail se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "801: Lynnwood Shopping Centre, Calgary, AB, Canada\n", + "osm query name: Lynnwood Shopping Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "802: Sunridge Family Medicine Teaching Centre, Calgary, AB, Canada\n", + "osm query name: Sunridge Family Medicine Teaching Centre, Calgary, AB, Canada\n", + "osm query street: 2685 36 street ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "803: Market Mall Executive Professional Centre, Calgary, AB, Canada\n", + "osm query name: Market Mall Executive Professional Centre, Calgary, AB, Canada\n", + "osm query street: 4935 40 avenue nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "804: Provident Professional Building, Calgary, AB, Canada\n", + "osm query name: Provident Professional Building, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "805: Northland Village Mall, Calgary, AB, Canada\n", + "osm query name: Northland Village Mall, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "806: Riverview Surgical Centre, Calgary, AB, Canada\n", + "osm query name: Riverview Surgical Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "807: Springborough Professional Centre, Calgary, AB, Canada\n", + "osm query name: Springborough Professional Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "808: Village Square Shopping Centre, Calgary, AB, Canada\n", + "osm query name: Village Square Shopping Centre, Calgary, AB, Canada\n", + "osm query street: 2640 52 street ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "809: Southland Park III - Southport Atrium, Calgary, AB, Canada\n", + "osm query name: Southland Park III - Southport Atrium, Calgary, AB, Canada\n", + "osm query street: 10101 southport road sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "810: Southland Park IV - Southport Tower, Calgary, AB, Canada\n", + "osm query name: Southland Park IV - Southport Tower, Calgary, AB, Canada\n", + "osm query street: 10301 southport lane sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "811: Beddington Heights Centre, Calgary, AB, Canada\n", + "osm query name: Beddington Heights Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "812: Dalhousie Station, Calgary, AB, Canada\n", + "osm query name: Dalhousie Station, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "813: Southland Leisure Centre, Calgary, AB, Canada\n", + "osm query name: Southland Leisure Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "814: Oakridge, Calgary, AB, Canada\n", + "osm query name: Oakridge, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "815: Calgary 8561 8A Avenue SW, Calgary, AB, Canada\n", + "osm query name: Calgary 8561 8A Avenue SW, Calgary, AB, Canada\n", + "osm query street: 8561 8a avenue sw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "816: Southcentre Executive Tower, Calgary, AB, Canada\n", + "osm query name: Southcentre Executive Tower, Calgary, AB, Canada\n", + "osm query street: 11012 macleod trail se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "817: Quarry Park Professional Centre, Calgary, AB, Canada\n", + "osm query name: Quarry Park Professional Centre, Calgary, AB, Canada\n", + "osm query street: 109 quarry park boulevard se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "818: Trico Centre for Family Wellness, Calgary, AB, Canada\n", + "osm query name: Trico Centre for Family Wellness, Calgary, AB, Canada\n", + "osm query street: 11150 bonaventure drive se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "819: Harvest Hills Professional Building, Calgary, AB, Canada\n", + "osm query name: Harvest Hills Professional Building, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "820: Calgary 739 Lake Bonavista Drive SE, Calgary, AB, Canada\n", + "osm query name: Calgary 739 Lake Bonavista Drive SE, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "821: Brookfield Residential YMCA - Seton, Calgary, AB, Canada\n", + "osm query name: Brookfield Residential YMCA - Seton, Calgary, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Calgary, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "822: Crowchild Twin Arena, Calgary, AB, Canada\n", + "osm query name: Crowchild Twin Arena, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "823: Rivital Health, Calgary, AB, Canada\n", + "osm query name: Rivital Health, Calgary, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Calgary, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "824: Professional Building, Calgary, AB, Canada\n", + "osm query name: Professional Building, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "825: Vivo for Healthier Generations, Calgary, AB, Canada\n", + "osm query name: Vivo for Healthier Generations, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "826: SEWA Physiotherapy, Calgary, AB, Canada\n", + "osm query name: SEWA Physiotherapy, Calgary, AB, Canada\n", + "osm query street: 108 3880 104 avenue ne, Calgary, AB, Canada\n", + "osm query city: Calgary, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "827: Deer Valley Professional Centre, Calgary, AB, Canada\n", + "osm query name: Deer Valley Professional Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "828: Calgary 12192 Symons Valley Road NW, Calgary, AB, Canada\n", + "osm query name: Calgary 12192 Symons Valley Road NW, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "829: StoneGate EMS Station, Calgary, AB, Canada\n", + "osm query name: StoneGate EMS Station, Calgary, AB, Canada\n", + "osm query street: 2626 country hills boulevard ne, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "830: Evanston Summit, Calgary, AB, Canada\n", + "osm query name: Evanston Summit, Calgary, AB, Canada\n", + "osm query street: 150 evanspark manor nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "831: Health Plus, Calgary, AB, Canada\n", + "osm query name: Health Plus, Calgary, AB, Canada\n", + "osm query street: 290 midpark way se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "832: Calgary Correctional Centre, Calgary, AB, Canada\n", + "osm query name: Calgary Correctional Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "833: Royal Oak Centre, Calgary, AB, Canada\n", + "osm query name: Royal Oak Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "834: Shoppes of Bridlewood, Calgary, AB, Canada\n", + "osm query name: Shoppes of Bridlewood, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "835: Southern Alberta Forensic Psychiatry Centre, Calgary, AB, Canada\n", + "osm query name: Southern Alberta Forensic Psychiatry Centre, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "836: Calgary 40 Sunpark Plaza SE, Calgary, AB, Canada\n", + "osm query name: Calgary 40 Sunpark Plaza SE, Calgary, AB, Canada\n", + "osm query street: 40 sunpark plaza se, Calgary, AB, Canada\n", + "[3] gc street address found\n", + "\n", + "\n", + "837: Calgary 333 Shawville Boulevard SE, Calgary, AB, Canada\n", + "osm query name: Calgary 333 Shawville Boulevard SE, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "838: Chestermere 100 Rainbow Road, Chestermere, AB, Canada\n", + "osm query name: Chestermere 100 Rainbow Road, Chestermere, AB, Canada\n", + "osm query street: 100 rainbow road, Chestermere, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "839: Shane Homes YMCA at Rocky Ridge, Calgary, AB, Canada\n", + "osm query name: Shane Homes YMCA at Rocky Ridge, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "840: Chestermere 201 West Chestermere Drive, Chestermere, AB, Canada\n", + "osm query name: Chestermere 201 West Chestermere Drive, Chestermere, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "841: Calgary 19369 Sheriff King Street SW, Calgary, AB, Canada\n", + "osm query name: Calgary 19369 Sheriff King Street SW, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "842: Calgary 7 Mahogany Plaza SE, Calgary, AB, Canada\n", + "osm query name: Calgary 7 Mahogany Plaza SE, Calgary, AB, Canada\n", + "osm query street: 7 mahogany plaza se, Calgary, AB, Canada\n", + "osm query city: Calgary, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "843: Panther Walden, Calgary, AB, Canada\n", + "osm query name: Panther Walden, Calgary, AB, Canada\n", + "osm query street: 19606 walden boulevard, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "844: Seton Professional Building, Calgary, AB, Canada\n", + "osm query name: Seton Professional Building, Calgary, AB, Canada\n", + "osm query street: 3815 front street se, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "845: Saddle Ridge Plaza, Calgary, AB, Canada\n", + "osm query name: Saddle Ridge Plaza, Calgary, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "846: 800 Yankee Valley Blvd SW, Airdrie, AB, Canada\n", + "osm query name: 800 Yankee Valley Blvd SW, Airdrie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "847: Airdrie 1301 8 Street SW, Airdrie, AB, Canada\n", + "osm query name: Airdrie 1301 8 Street SW, Airdrie, AB, Canada\n", + "osm query street: 1301 8 street sw, Airdrie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "848: Airdrie and Area, Airdrie, AB, Canada\n", + "osm query name: Airdrie and Area, Airdrie, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Airdrie, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "849: Genesis Place, Airdrie, AB, Canada\n", + "osm query name: Genesis Place, Airdrie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "850: Cochrane and Area, , AB, Canada\n", + "osm query name: Cochrane and Area, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "851: Cochrane Chamber of Commerce, , AB, Canada\n", + "osm query name: Cochrane Chamber of Commerce, , AB, Canada\n", + "osm query street: 205 1st street e cochrane, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "852: Cochrane 100 Grand Boulevard, , AB, Canada\n", + "osm query name: Cochrane 100 Grand Boulevard, , AB, Canada\n", + "osm query street: 100 grand boulevard cochrane, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "853: Lifemark Okotoks, Calgary, AB, Canada\n", + "osm query name: Lifemark Okotoks, Calgary, AB, Canada\n", + "osm query street: 99 okotoks drive, Calgary, AB, Canada\n", + "osm query city: Calgary, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "854: Okotoks 27 McRae Street, Okotoks, AB, Canada\n", + "osm query name: Okotoks 27 McRae Street, Okotoks, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "855: Strathmore Physical Therapy, Strathmore, AB, Canada\n", + "osm query name: Strathmore Physical Therapy, Strathmore, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Strathmore, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "856: High River 228 12 Avenue, High river, AB, Canada\n", + "osm query name: High River 228 12 Avenue, High river, AB, Canada\n", + "osm query street: 228 12 avenue se, High river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "857: Carstairs Wellness Centre, Carstairs, AB, Canada\n", + "osm query name: Carstairs Wellness Centre, Carstairs, AB, Canada\n", + "osm query street: 1118 hammond street, Carstairs, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "858: Siksika Health and Wellness Centre, , AB, Canada\n", + "osm query name: Siksika Health and Wellness Centre, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "859: Olds and Area, Olds, AB, Canada\n", + "osm query name: Olds and Area, Olds, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Olds, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "860: Rocky Mountain Professional Centre, Canmore, AB, Canada\n", + "osm query name: Rocky Mountain Professional Centre, Canmore, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "861: Canmore and Area, Canmore, AB, Canada\n", + "osm query name: Canmore and Area, Canmore, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Canmore, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "862: Canmore Provincial Building, Canmore, AB, Canada\n", + "osm query name: Canmore Provincial Building, Canmore, AB, Canada\n", + "osm query street: 800 railway avenue, Canmore, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "863: Canmore 801 Main Street, Canmore, AB, Canada\n", + "osm query name: Canmore 801 Main Street, Canmore, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "864: Kneehill Medical Clinic, Three hills, AB, Canada\n", + "osm query name: Kneehill Medical Clinic, Three hills, AB, Canada\n", + "osm query street: 1520 2 street ne, Three hills, AB, Canada\n", + "osm query city: Three hills, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "865: Drumheller and Area, Drumheller, AB, Canada\n", + "osm query name: Drumheller and Area, Drumheller, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Drumheller, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "866: Banff and Area, Banff, AB, Canada\n", + "osm query name: Banff and Area, Banff, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Banff, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "867: Bear Street Mall, Banff, AB, Canada\n", + "osm query name: Bear Street Mall, Banff, AB, Canada\n", + "osm query street: 220 bear street, Banff, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "868: Drumheller Provincial Building, Drumheller, AB, Canada\n", + "osm query name: Drumheller Provincial Building, Drumheller, AB, Canada\n", + "osm query street: 201 centre street, Drumheller, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "869: Drumheller Associated Physicians, Drumheller, AB, Canada\n", + "osm query name: Drumheller Associated Physicians, Drumheller, AB, Canada\n", + "osm query street: 140 riverside drive e, Drumheller, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "870: Innisfail 5035 49 Street, Innisfail, AB, Canada\n", + "osm query name: Innisfail 5035 49 Street, Innisfail, AB, Canada\n", + "osm query street: 5035 49 street, Innisfail, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "871: Innisfail 4303 50 Street, Innisfail, AB, Canada\n", + "osm query name: Innisfail 4303 50 Street, Innisfail, AB, Canada\n", + "osm query street: 4303 50 street, Innisfail, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "872: Claresholm 139 43 Avenue W, Claresholm, AB, Canada\n", + "osm query name: Claresholm 139 43 Avenue W, Claresholm, AB, Canada\n", + "osm query street: 139 43 avenue w, Claresholm, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "873: Red Deer 33 McKenzie Crescent, Red deer, AB, Canada\n", + "osm query name: Red Deer 33 McKenzie Crescent, Red deer, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "874: Red Deer 2830 Bremner Avenue, Red deer, AB, Canada\n", + "osm query name: Red Deer 2830 Bremner Avenue, Red deer, AB, Canada\n", + "osm query street: 2830 bremner avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "875: Red Deer Medical Dental Building, Red deer, AB, Canada\n", + "osm query name: Red Deer Medical Dental Building, Red deer, AB, Canada\n", + "osm query street: 3939 50a avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "876: Red Deer Peritoneal Dialysis Clinic, Red deer, AB, Canada\n", + "osm query name: Red Deer Peritoneal Dialysis Clinic, Red deer, AB, Canada\n", + "osm query street: 3942 50a avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "877: Skyway Medical Centre, Red deer, AB, Canada\n", + "osm query name: Skyway Medical Centre, Red deer, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "878: Red Deer and Area, Red deer, AB, Canada\n", + "osm query name: Red Deer and Area, Red deer, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Red deer, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "879: Central Zone and Area, , AB, Canada\n", + "osm query name: Central Zone and Area, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "880: Family Services of Central Alberta, Red deer, AB, Canada\n", + "osm query name: Family Services of Central Alberta, Red deer, AB, Canada\n", + "osm query street: 5409 50 avenue, Red deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "881: Alberta Health Services Michener Bend, Red deer, AB, Canada\n", + "osm query name: Alberta Health Services Michener Bend, Red deer, AB, Canada\n", + "osm query street: 43 michener bend, Red deer, AB, Canada\n", + "[3] gc street address found\n", + "\n", + "\n", + "882: Village Mall, Red deer, AB, Canada\n", + "osm query name: Village Mall, Red deer, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "883: Sylvan Lake 5015 50th St., Sylvan lake, AB, Canada\n", + "osm query name: Sylvan Lake 5015 50th St., Sylvan lake, AB, Canada\n", + "osm query street: 5015 50 street, Sylvan lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "884: Lacombe 5214 50 Avenue, , AB, Canada\n", + "osm query name: Lacombe 5214 50 Avenue, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "885: Brooks Fire Hall, , AB, Canada\n", + "osm query name: Brooks Fire Hall, , AB, Canada\n", + "osm query street: 504 cassils road e brooks, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "886: Stettler and Area, Stettler, AB, Canada\n", + "osm query name: Stettler and Area, Stettler, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Stettler, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "887: Melcor Centre, , AB, Canada\n", + "osm query name: Melcor Centre, , AB, Canada\n", + "osm query street: 200 4 avenue s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "888: Lethbridge 424 5 Street South, , AB, Canada\n", + "osm query name: Lethbridge 424 5 Street South, , AB, Canada\n", + "osm query street: 424 5th street s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "889: Lethbridge Professional Building, , AB, Canada\n", + "osm query name: Lethbridge Professional Building, , AB, Canada\n", + "osm query street: 740 4 avenue s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "890: Lethbridge and Area, Lethbridge, AB, Canada\n", + "osm query name: Lethbridge and Area, Lethbridge, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Lethbridge, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "891: Lacidem Building, , AB, Canada\n", + "osm query name: Lacidem Building, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "892: South Zone and Area, , AB, Canada\n", + "osm query name: South Zone and Area, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "893: Lethbridge 1718 3 Avenue S, , AB, Canada\n", + "osm query name: Lethbridge 1718 3 Avenue S, , AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "894: Martha's House, , AB, Canada\n", + "osm query name: Martha's House, , AB, Canada\n", + "osm query street: 950 14 street s lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "895: Lethbridge Correctional Centre, , AB, Canada\n", + "osm query name: Lethbridge Correctional Centre, , AB, Canada\n", + "osm query street: 21123 highway 512 lethbridge, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "896: Rimbey Provincial Building and Courthouse, Rimbey, AB, Canada\n", + "osm query name: Rimbey Provincial Building and Courthouse, Rimbey, AB, Canada\n", + "osm query street: 5025 55 street, Rimbey, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "897: Blood Tribe Health Centre, Stand off, AB, Canada\n", + "osm query name: Blood Tribe Health Centre, Stand off, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Stand off, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "898: Wetaskiwin Mall, Wetaskiwin, AB, Canada\n", + "osm query name: Wetaskiwin Mall, Wetaskiwin, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "899: Wetaskiwin and Area, Wetaskiwin, AB, Canada\n", + "osm query name: Wetaskiwin and Area, Wetaskiwin, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Wetaskiwin, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "900: Breton and Area, Breton, AB, Canada\n", + "osm query name: Breton and Area, Breton, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Breton, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "901: Duggan Mall, Camrose, AB, Canada\n", + "osm query name: Duggan Mall, Camrose, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "902: Camrose Recreation Centre, Camrose, AB, Canada\n", + "osm query name: Camrose Recreation Centre, Camrose, AB, Canada\n", + "osm query street: 4412 56 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "903: Camrose Home Care, Camrose, AB, Canada\n", + "osm query name: Camrose Home Care, Camrose, AB, Canada\n", + "osm query street: 4615 56 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "904: Camrose 4703 53 Street, Camrose, AB, Canada\n", + "osm query name: Camrose 4703 53 Street, Camrose, AB, Canada\n", + "osm query street: 4703 53 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "905: Alberta Health Services EMS - Camrose Station, Camrose, AB, Canada\n", + "osm query name: Alberta Health Services EMS - Camrose Station, Camrose, AB, Canada\n", + "osm query street: 3602 47 avenue, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "906: Camrose Professional Centre, Camrose, AB, Canada\n", + "osm query name: Camrose Professional Centre, Camrose, AB, Canada\n", + "osm query street: 5015 50 avenue, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "907: Battle River Physical Therapy, Camrose, AB, Canada\n", + "osm query name: Battle River Physical Therapy, Camrose, AB, Canada\n", + "osm query street: 4931 49 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "908: Killam 5175 51 Avenue, , AB, Canada\n", + "osm query name: Killam 5175 51 Avenue, , AB, Canada\n", + "osm query street: 5175 51 avenue killam, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "909: Leduc 4330 Black Gold Drive, , AB, Canada\n", + "osm query name: Leduc 4330 Black Gold Drive, , AB, Canada\n", + "osm query street: 4330 black gold drive leduc, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "910: Leduc 1 Alexandra Park, , AB, Canada\n", + "osm query name: Leduc 1 Alexandra Park, , AB, Canada\n", + "osm query street: 1 alexandra park leduc, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "911: Stageworks Academy of Performing Arts, , AB, Canada\n", + "osm query name: Stageworks Academy of Performing Arts, , AB, Canada\n", + "osm query street: 4611 44 street leduc, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "912: County Centre, Nisku, AB, Canada\n", + "osm query name: County Centre, Nisku, AB, Canada\n", + "osm query street: 1101 5 street, Nisku, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "913: Devon Physical Therapy Ltd, , AB, Canada\n", + "osm query name: Devon Physical Therapy Ltd, , AB, Canada\n", + "osm query street: 17 athabasca avenue devon, , AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "914: Beaumont Physiotherapy & Sports Injury Clinic, , AB, Canada\n", + "osm query name: Beaumont Physiotherapy & Sports Injury Clinic, , AB, Canada\n", + "osm query street: 5102 49 avenue beaumont, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "915: River Heights Professional Centre, Medicine hat, AB, Canada\n", + "osm query name: River Heights Professional Centre, Medicine hat, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "916: Medicine Hat and Area, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat and Area, Medicine hat, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Medicine hat, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "917: Medicine Hat 477 3 Street SE, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat 477 3 Street SE, Medicine hat, AB, Canada\n", + "osm query street: 477 3 street se, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "918: Medicine Hat Remand Centre, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat Remand Centre, Medicine hat, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "919: Rutherford Gate Professional Centre, Edmonton, AB, Canada\n", + "osm query name: Rutherford Gate Professional Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "920: Edmonton 4341 Savaryn Drive SW, Edmonton, AB, Canada\n", + "osm query name: Edmonton 4341 Savaryn Drive SW, Edmonton, AB, Canada\n", + "osm query street: 4341 savaryn drive sw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "921: Murray Chevrolet Cadillac, Medicine hat, AB, Canada\n", + "osm query name: Murray Chevrolet Cadillac, Medicine hat, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "922: Medicine Hat Home Care, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat Home Care, Medicine hat, AB, Canada\n", + "osm query street: 3330 13 avenue se, Medicine hat, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "923: Body Restoration, Edmonton, AB, Canada\n", + "osm query name: Body Restoration, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "924: Medicine Hat Fire Department #2, Medicine hat, AB, Canada\n", + "osm query name: Medicine Hat Fire Department #2, Medicine hat, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "925: Summerside Children's & Sport Physiotherapy, Edmonton, AB, Canada\n", + "osm query name: Summerside Children's & Sport Physiotherapy, Edmonton, AB, Canada\n", + "osm query street: 1230 91 street sw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "926: Edmonton 1230 91 Street SW, Edmonton, AB, Canada\n", + "osm query name: Edmonton 1230 91 Street SW, Edmonton, AB, Canada\n", + "osm query street: 1230 91 street sw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "927: Windermere Plaza, Edmonton, AB, Canada\n", + "osm query name: Windermere Plaza, Edmonton, AB, Canada\n", + "osm query street: 5540 windermere boulevard, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "928: Magrath Business Centre, Edmonton, AB, Canada\n", + "osm query name: Magrath Business Centre, Edmonton, AB, Canada\n", + "osm query street: 14127 23 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "929: Ermineskin Centre, Edmonton, AB, Canada\n", + "osm query name: Ermineskin Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "930: CapitalCare CHOICE South, Edmonton, AB, Canada\n", + "osm query name: CapitalCare CHOICE South, Edmonton, AB, Canada\n", + "osm query street: 9839 31 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "931: Physical Therapy Centre, Edmonton, AB, Canada\n", + "osm query name: Physical Therapy Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "932: Millwoods Town Centre Professional Building, Edmonton, AB, Canada\n", + "osm query name: Millwoods Town Centre Professional Building, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "933: Cedars Professional Park, Edmonton, AB, Canada\n", + "osm query name: Cedars Professional Park, Edmonton, AB, Canada\n", + "osm query street: 2927 66 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "934: Edmonton 9303 34 Avenue, Edmonton, AB, Canada\n", + "osm query name: Edmonton 9303 34 Avenue, Edmonton, AB, Canada\n", + "osm query street: 9303 34 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "935: Rotary House, Edmonton, AB, Canada\n", + "osm query name: Rotary House, Edmonton, AB, Canada\n", + "osm query street: 2907 66 street, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "936: St. Marguerite Health Services Centre, Edmonton, AB, Canada\n", + "osm query name: St. Marguerite Health Services Centre, Edmonton, AB, Canada\n", + "osm query street: 1090 youville drive nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "937: Edmonton 18332 Lessard Rd NW, , AB, Canada\n", + "osm query name: Edmonton 18332 Lessard Rd NW, , AB, Canada\n", + "osm query street: 18332 lessard road edmonton, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "938: Boost Physiotherapy, Edmonton, AB, Canada\n", + "osm query name: Boost Physiotherapy, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "939: Duggan Office, Edmonton, AB, Canada\n", + "osm query name: Duggan Office, Edmonton, AB, Canada\n", + "osm query street: 5035 108a street, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "940: Pleasantview Professional Building, Edmonton, AB, Canada\n", + "osm query name: Pleasantview Professional Building, Edmonton, AB, Canada\n", + "osm query street: 11044 51 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "941: The Riverbend Athletic Club, Edmonton, AB, Canada\n", + "osm query name: The Riverbend Athletic Club, Edmonton, AB, Canada\n", + "osm query street: 5621 riverbend road nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "942: CSA Physiotherapy on 51 Avenue, Edmonton, AB, Canada\n", + "osm query name: CSA Physiotherapy on 51 Avenue, Edmonton, AB, Canada\n", + "osm query street: 10393 51 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "943: Burnewood Square Shopping Centre, Edmonton, AB, Canada\n", + "osm query name: Burnewood Square Shopping Centre, Edmonton, AB, Canada\n", + "osm query street: 3420 43 avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "944: Connect Society, Edmonton, AB, Canada\n", + "osm query name: Connect Society, Edmonton, AB, Canada\n", + "osm query street: 6240 113 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "945: Allendale Professional Building, Edmonton, AB, Canada\n", + "osm query name: Allendale Professional Building, Edmonton, AB, Canada\n", + "osm query street: 10430 61 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "946: Family Connection Centre, Stony plain, AB, Canada\n", + "osm query name: Family Connection Centre, Stony plain, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "947: Stony Plain 5211 50 Street, Stony plain, AB, Canada\n", + "osm query name: Stony Plain 5211 50 Street, Stony plain, AB, Canada\n", + "osm query street: 5211 50 street, Stony plain, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "948: Forest Green Plaza, Stony plain, AB, Canada\n", + "osm query name: Forest Green Plaza, Stony plain, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "949: Mother Rosalie Health Services Centre, Edmonton, AB, Canada\n", + "osm query name: Mother Rosalie Health Services Centre, Edmonton, AB, Canada\n", + "osm query street: 16930 87 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "950: Meadowlark Health and Shopping Centre, Edmonton, AB, Canada\n", + "osm query name: Meadowlark Health and Shopping Centre, Edmonton, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Edmonton, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "951: Innovation Physical Therapy, Edmonton, AB, Canada\n", + "osm query name: Innovation Physical Therapy, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "952: Meadowlark Place Professional Centre, Edmonton, AB, Canada\n", + "osm query name: Meadowlark Place Professional Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "953: Belmead Professional Building, Edmonton, AB, Canada\n", + "osm query name: Belmead Professional Building, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "954: Sunrise Village Plaza 4300 South Park Drive, Stony plain, AB, Canada\n", + "osm query name: Sunrise Village Plaza 4300 South Park Drive, Stony plain, AB, Canada\n", + "osm query street: 4300 south park drive, Stony plain, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "955: Aberhart Centre, Edmonton, AB, Canada\n", + "osm query name: Aberhart Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "956: Cura Physical Therapies, Edmonton, AB, Canada\n", + "osm query name: Cura Physical Therapies, Edmonton, AB, Canada\n", + "osm query street: 17032 90 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "957: Clinical Sciences Building, Edmonton, AB, Canada\n", + "osm query name: Clinical Sciences Building, Edmonton, AB, Canada\n", + "osm query street: 8440 112 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "958: Medical Sciences Building, Edmonton, AB, Canada\n", + "osm query name: Medical Sciences Building, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "959: Zeidler Ledcor Centre, Edmonton, AB, Canada\n", + "osm query name: Zeidler Ledcor Centre, Edmonton, AB, Canada\n", + "osm query street: 8540 112 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "960: Stony Plain EMS Station, Stony plain, AB, Canada\n", + "osm query name: Stony Plain EMS Station, Stony plain, AB, Canada\n", + "osm query street: 3000 48 street, Stony plain, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "961: Westlawn Office, Edmonton, AB, Canada\n", + "osm query name: Westlawn Office, Edmonton, AB, Canada\n", + "osm query street: 9524 165 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "962: Good Samaritan Place, Edmonton, AB, Canada\n", + "osm query name: Good Samaritan Place, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "963: TransAlta Tri Leisure Centre, Spruce grove, AB, Canada\n", + "osm query name: TransAlta Tri Leisure Centre, Spruce grove, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "964: Pilgrims Hospice Society, Edmonton, AB, Canada\n", + "osm query name: Pilgrims Hospice Society, Edmonton, AB, Canada\n", + "osm query street: 9808 148 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "965: Royal Glenora Club, Edmonton, AB, Canada\n", + "osm query name: Royal Glenora Club, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "966: Alberta Wide, , AB, Canada\n", + "osm query name: Alberta Wide, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "967: Jasper Place Wellness Centre, , AB, Canada\n", + "osm query name: Jasper Place Wellness Centre, , AB, Canada\n", + "osm query street: 15308 stony plain road edmonton, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "968: Children and Youth Centre, Sherwood, AB, Canada\n", + "osm query name: Children and Youth Centre, Sherwood, AB, Canada\n", + "osm query street: 3 spruce avenue, Sherwood, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "969: Academy Place, Edmonton, AB, Canada\n", + "osm query name: Academy Place, Edmonton, AB, Canada\n", + "osm query street: 11520 100 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "970: Terra Centre for Teen Parents, Edmonton, AB, Canada\n", + "osm query name: Terra Centre for Teen Parents, Edmonton, AB, Canada\n", + "osm query street: 9930 106 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "971: Edmonton and Area, Edmonton, AB, Canada\n", + "osm query name: Edmonton and Area, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "972: IBM Building, Edmonton, AB, Canada\n", + "osm query name: IBM Building, Edmonton, AB, Canada\n", + "osm query street: 10044 108 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "973: Peace Hills Insurance, Edmonton, AB, Canada\n", + "osm query name: Peace Hills Insurance, Edmonton, AB, Canada\n", + "osm query street: 10709 jasper avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "974: Edmonton 10055 106 Street, Edmonton, AB, Canada\n", + "osm query name: Edmonton 10055 106 Street, Edmonton, AB, Canada\n", + "osm query street: 10055 106 street nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "975: Plaza 124 Building, Edmonton, AB, Canada\n", + "osm query name: Plaza 124 Building, Edmonton, AB, Canada\n", + "osm query street: 10216 124 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "976: Sherwood Park and Area, Sherwood park, AB, Canada\n", + "osm query name: Sherwood Park and Area, Sherwood park, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "977: West Edmonton Kidney Care, , AB, Canada\n", + "osm query name: West Edmonton Kidney Care, , AB, Canada\n", + "osm query street: 10560 mayfield road edmonton, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "978: Sun Life Place, Edmonton, AB, Canada\n", + "osm query name: Sun Life Place, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "979: In Step Physical Therapy, Edmonton, AB, Canada\n", + "osm query name: In Step Physical Therapy, Edmonton, AB, Canada\n", + "osm query street: 10534 124 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "980: Edmonton 5832 Terrace Rd NW, Edmonton, AB, Canada\n", + "osm query name: Edmonton 5832 Terrace Rd NW, Edmonton, AB, Canada\n", + "osm query street: 5832 terrace road nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "981: Sherwood Park 2016 Sherwood Drive, Sherwood park, AB, Canada\n", + "osm query name: Sherwood Park 2016 Sherwood Drive, Sherwood park, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "982: Boyle Street Community Services, Edmonton, AB, Canada\n", + "osm query name: Boyle Street Community Services, Edmonton, AB, Canada\n", + "osm query street: 10116 105 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "983: Fulton School of Edmonton, Edmonton, AB, Canada\n", + "osm query name: Fulton School of Edmonton, Edmonton, AB, Canada\n", + "osm query street: 10310 56 street, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "984: Edmonton 12409 109A Avenue, Edmonton, AB, Canada\n", + "osm query name: Edmonton 12409 109A Avenue, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "985: Coronation Plaza, Edmonton, AB, Canada\n", + "osm query name: Coronation Plaza, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "986: Edmonton 9538 107 Avenue, Edmonton, AB, Canada\n", + "osm query name: Edmonton 9538 107 Avenue, Edmonton, AB, Canada\n", + "osm query street: 9538 107 avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "987: Anderson Hall, Edmonton, AB, Canada\n", + "osm query name: Anderson Hall, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "988: Westmount Shopping Centre, Edmonton, AB, Canada\n", + "osm query name: Westmount Shopping Centre, Edmonton, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Edmonton, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "989: Kingsway Mews, Edmonton, AB, Canada\n", + "osm query name: Kingsway Mews, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "990: Orthopedic Surgery Centre, Edmonton, AB, Canada\n", + "osm query name: Orthopedic Surgery Centre, Edmonton, AB, Canada\n", + "osm query street: 10969 102 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "991: Lifemark Sport Institute Edmonton, Edmonton, AB, Canada\n", + "osm query name: Lifemark Sport Institute Edmonton, Edmonton, AB, Canada\n", + "osm query street: 11828 111 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "992: Kingsway Professional Building, Edmonton, AB, Canada\n", + "osm query name: Kingsway Professional Building, Edmonton, AB, Canada\n", + "osm query street: 10611 kingsway avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "993: Central Senior Lions Recreation Centre, Edmonton, AB, Canada\n", + "osm query name: Central Senior Lions Recreation Centre, Edmonton, AB, Canada\n", + "osm query street: 11113 113 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "994: Kingsway Mall, Edmonton, AB, Canada\n", + "osm query name: Kingsway Mall, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "995: Nexus Business Park, Edmonton, AB, Canada\n", + "osm query name: Nexus Business Park, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "996: Edmonton Zone and Area, Edmonton, AB, Canada\n", + "osm query name: Edmonton Zone and Area, Edmonton, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Edmonton, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "997: Norwood Child and Family Resource Centre, Edmonton, AB, Canada\n", + "osm query name: Norwood Child and Family Resource Centre, Edmonton, AB, Canada\n", + "osm query street: 9516 114 avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "998: CBI Health - Edmonton NW, Edmonton, AB, Canada\n", + "osm query name: CBI Health - Edmonton NW, Edmonton, AB, Canada\n", + "osm query street: 11822 st. albert trail, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "999: Bent Arrow Traditional Healing Society, Edmonton, AB, Canada\n", + "osm query name: Bent Arrow Traditional Healing Society, Edmonton, AB, Canada\n", + "osm query street: 11666 95 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1000: Ben Calf Robe Society, Edmonton, AB, Canada\n", + "osm query name: Ben Calf Robe Society, Edmonton, AB, Canada\n", + "osm query street: 12046 77 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1001: Northwest EMS Station, Edmonton, AB, Canada\n", + "osm query name: Northwest EMS Station, Edmonton, AB, Canada\n", + "osm query street: 13443 149 street, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1002: Kensington Physical Therapy & Sports Injury Clinic, Edmonton, AB, Canada\n", + "osm query name: Kensington Physical Therapy & Sports Injury Clinic, Edmonton, AB, Canada\n", + "osm query street: 12620 132 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1003: Hermitage Medicentre, Edmonton, AB, Canada\n", + "osm query name: Hermitage Medicentre, Edmonton, AB, Canada\n", + "osm query street: 12747 50 street, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1004: Belvedere Professional Building, Edmonton, AB, Canada\n", + "osm query name: Belvedere Professional Building, Edmonton, AB, Canada\n", + "osm query street: 6603 132 avenue, Edmonton, AB, Canada\n", + "osm query city: Edmonton, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1005: Victoria Trail Physiotherapy, , AB, Canada\n", + "osm query name: Victoria Trail Physiotherapy, , AB, Canada\n", + "osm query street: 550 clareview road edmonton, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1006: Dickinsfield Mall, Edmonton, AB, Canada\n", + "osm query name: Dickinsfield Mall, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1007: St. Albert Physical Therapy & Sports Injury Clinic, Albert, AB, Canada\n", + "osm query name: St. Albert Physical Therapy & Sports Injury Clinic, Albert, AB, Canada\n", + "osm query street: 2012 tudor glen st., Albert, AB, Canada\n", + "osm query city: Albert, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1008: Castle Downs YMCA, Edmonton, AB, Canada\n", + "osm query name: Castle Downs YMCA, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1009: Edmonton 15379 Castle Downs Road, Edmonton, AB, Canada\n", + "osm query name: Edmonton 15379 Castle Downs Road, Edmonton, AB, Canada\n", + "osm query street: 15379 castle downs road nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1010: Dunluce Physical Therapy, Edmonton, AB, Canada\n", + "osm query name: Dunluce Physical Therapy, Edmonton, AB, Canada\n", + "osm query street: 12112 161 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1011: Grandin Park Plaza, St. albert, AB, Canada\n", + "osm query name: Grandin Park Plaza, St. albert, AB, Canada\n", + "osm query street: 1 tache street, St. albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1012: St. Albert Provincial Building, Albert, AB, Canada\n", + "osm query name: St. Albert Provincial Building, Albert, AB, Canada\n", + "osm query street: 30 sir winston churchill avenue st., Albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1013: Namao Centre, Edmonton, AB, Canada\n", + "osm query name: Namao Centre, Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1014: Adam Physio, Edmonton, AB, Canada\n", + "osm query name: Adam Physio, Edmonton, AB, Canada\n", + "osm query street: 8336 160 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1015: Revive Physiotherapy, Edmonton, AB, Canada\n", + "osm query name: Revive Physiotherapy, Edmonton, AB, Canada\n", + "osm query street: 12832 167 avenue nw, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1016: St. Albert 215 Carnegie Drive, Albert, AB, Canada\n", + "osm query name: St. Albert 215 Carnegie Drive, Albert, AB, Canada\n", + "osm query street: 215 carnegie drive st., Albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1017: St. Albert and Area, St. albert, AB, Canada\n", + "osm query name: St. Albert and Area, St. albert, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: St. albert, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1018: St. Albert 365 Carleton Drive, Albert, AB, Canada\n", + "osm query name: St. Albert 365 Carleton Drive, Albert, AB, Canada\n", + "osm query street: 365 carleton drive st., Albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1019: Servus Credit Union Place, St. albert, AB, Canada\n", + "osm query name: Servus Credit Union Place, St. albert, AB, Canada\n", + "osm query street: 400 campbell road, St. albert, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1020: Lancaster Park 161 Mons Avenue, Park, AB, Canada\n", + "osm query name: Lancaster Park 161 Mons Avenue, Park, AB, Canada\n", + "osm query street: 161 mons avenue lancaster, Park, AB, Canada\n", + "osm query city: Park, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1021: Onoway Admin Building, Onoway, AB, Canada\n", + "osm query name: Onoway Admin Building, Onoway, AB, Canada\n", + "osm query street: 4916 49 avenue, Onoway, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1022: Fort Physio Therapy, Fort saskatchewan, AB, Canada\n", + "osm query name: Fort Physio Therapy, Fort saskatchewan, AB, Canada\n", + "osm query street: 9332 southfort drive, Fort saskatchewan, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1023: Family First Society Fort Saskatchewan, Fort saskatchewan, AB, Canada\n", + "osm query name: Family First Society Fort Saskatchewan, Fort saskatchewan, AB, Canada\n", + "osm query street: 9901 90 street, Fort saskatchewan, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1024: United Church - Fort Saskatchewan, Fort saskatchewan, AB, Canada\n", + "osm query name: United Church - Fort Saskatchewan, Fort saskatchewan, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1025: Vegreville Provincial Building, Vegreville, AB, Canada\n", + "osm query name: Vegreville Provincial Building, Vegreville, AB, Canada\n", + "osm query street: 4809 50 street, Vegreville, AB, Canada\n", + "osm query city: Vegreville, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1026: Vegreville 5106 48 Avenue, Vegreville, AB, Canada\n", + "osm query name: Vegreville 5106 48 Avenue, Vegreville, AB, Canada\n", + "osm query street: 5106 48 avenue, Vegreville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1027: Vegreville 4829 50 Street, Vegreville, AB, Canada\n", + "osm query name: Vegreville 4829 50 Street, Vegreville, AB, Canada\n", + "osm query street: 4829 50 street, Vegreville, AB, Canada\n", + "osm query city: Vegreville, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1028: Vegreville Community Rehab, Vegreville, AB, Canada\n", + "osm query name: Vegreville Community Rehab, Vegreville, AB, Canada\n", + "osm query street: 6109 50 avenue, Vegreville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1029: Westmor Landing, Morinville, AB, Canada\n", + "osm query name: Westmor Landing, Morinville, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1030: Edson 3656 1 Avenue, , AB, Canada\n", + "osm query name: Edson 3656 1 Avenue, , AB, Canada\n", + "osm query street: 3656 1 avenue edson, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1031: Edson and Area, Edson, AB, Canada\n", + "osm query name: Edson and Area, Edson, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Edson, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1032: Redwater Physical Therapy Clinic, , AB, Canada\n", + "osm query name: Redwater Physical Therapy Clinic, , AB, Canada\n", + "osm query street: 4904 50 avenue redwater, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1033: Mayerthorpe and Area, Mayerthorpe, AB, Canada\n", + "osm query name: Mayerthorpe and Area, Mayerthorpe, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Mayerthorpe, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1034: Two Hills 5013 - 50 Avenue, Hills, AB, Canada\n", + "osm query name: Two Hills 5013 - 50 Avenue, Hills, AB, Canada\n", + "osm query street: 5013 50 avenue two, Hills, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1035: Two Hills 4712 50 Street, Two hills, AB, Canada\n", + "osm query name: Two Hills 4712 50 Street, Two hills, AB, Canada\n", + "osm query street: 4712 50 street, Two hills, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1036: Midtown Physiotherapy Clinic, , AB, Canada\n", + "osm query name: Midtown Physiotherapy Clinic, , AB, Canada\n", + "osm query street: 5706 50 avenue vermilion, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1037: Jasper and Area, Jasper, AB, Canada\n", + "osm query name: Jasper and Area, Jasper, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Jasper, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1038: Barrhead and Area, Barrhead, AB, Canada\n", + "osm query name: Barrhead and Area, Barrhead, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Barrhead, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1039: Barrhead Provincial Building, Barrhead, AB, Canada\n", + "osm query name: Barrhead Provincial Building, Barrhead, AB, Canada\n", + "osm query street: 6203 49 street, Barrhead, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1040: Westlock and Area, Westlock, AB, Canada\n", + "osm query name: Westlock and Area, Westlock, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Westlock, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1041: Westlock Provincial Building, Westlock, AB, Canada\n", + "osm query name: Westlock Provincial Building, Westlock, AB, Canada\n", + "osm query street: 10003 100 street, Westlock, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1042: Westlock 9936 106 Street, Westlock, AB, Canada\n", + "osm query name: Westlock 9936 106 Street, Westlock, AB, Canada\n", + "osm query street: 9936 106 street, Westlock, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1043: Westlock 10619 100 Avenue, Westlock, AB, Canada\n", + "osm query name: Westlock 10619 100 Avenue, Westlock, AB, Canada\n", + "osm query street: 10619 100 avenue, Westlock, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1044: Westlock 10004 107 Street, Westlock, AB, Canada\n", + "osm query name: Westlock 10004 107 Street, Westlock, AB, Canada\n", + "osm query street: 10004 107 street, Westlock, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1045: Prairieview Physiotherapy, Rivercourse, AB, Canada\n", + "osm query name: Prairieview Physiotherapy, Rivercourse, AB, Canada\n", + "osm query street: 470 township road, Rivercourse, AB, Canada\n", + "osm query city: Rivercourse, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1046: Hinton and Area, Hinton, AB, Canada\n", + "osm query name: Hinton and Area, Hinton, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Hinton, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1047: Hinton 103 Government Road, Hinton, AB, Canada\n", + "osm query name: Hinton 103 Government Road, Hinton, AB, Canada\n", + "osm query street: 103 government road, Hinton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1048: Whitecourt and Area, Whitecourt, AB, Canada\n", + "osm query name: Whitecourt and Area, Whitecourt, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Whitecourt, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1049: Smoky Lake Provincial Building, Smoky lake, AB, Canada\n", + "osm query name: Smoky Lake Provincial Building, Smoky lake, AB, Canada\n", + "osm query street: 108 wheatland avenue, Smoky lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1050: Lloydminster Community Youth Centre, Lloydminster, AB, Canada\n", + "osm query name: Lloydminster Community Youth Centre, Lloydminster, AB, Canada\n", + "osm query street: 4201 47 avenue, Lloydminster, AB, Canada\n", + "osm query city: Lloydminster, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1051: St. Paul and Area, St. paul, AB, Canada\n", + "osm query name: St. Paul and Area, St. paul, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: St. paul, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1052: Glendon Medical Clinic, Glendon, AB, Canada\n", + "osm query name: Glendon Medical Clinic, Glendon, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Glendon, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1053: Bonnyville Indian Metis Rehabilitation Centre, Bonnyville, AB, Canada\n", + "osm query name: Bonnyville Indian Metis Rehabilitation Centre, Bonnyville, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Bonnyville, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1054: Bonnyville Medical Clinic, Bonnyville, AB, Canada\n", + "osm query name: Bonnyville Medical Clinic, Bonnyville, AB, Canada\n", + "osm query street: 4610 50 street, Bonnyville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1055: Bonnyville and Area, Bonnyville, AB, Canada\n", + "osm query name: Bonnyville and Area, Bonnyville, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Bonnyville, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1056: Lac La Biche and Area, Lac la biche, AB, Canada\n", + "osm query name: Lac La Biche and Area, Lac la biche, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Lac la biche, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1057: Cold Lake and Area, Cold lake, AB, Canada\n", + "osm query name: Cold Lake and Area, Cold lake, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Cold lake, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1058: Cold Lake 5520 54 Street, Cold lake, AB, Canada\n", + "osm query name: Cold Lake 5520 54 Street, Cold lake, AB, Canada\n", + "osm query street: 5520 54 street, Cold lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1059: Cold Lake 7825 51 Street, Cold lake, AB, Canada\n", + "osm query name: Cold Lake 7825 51 Street, Cold lake, AB, Canada\n", + "osm query street: 7825 51 street, Cold lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1060: Slave Lake Lakeland Centre, Slave lake, AB, Canada\n", + "osm query name: Slave Lake Lakeland Centre, Slave lake, AB, Canada\n", + "osm query street: 101 main street se, Slave lake, AB, Canada\n", + "osm query city: Slave lake, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1061: Slave Lake and Area, Slave lake, AB, Canada\n", + "osm query name: Slave Lake and Area, Slave lake, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Slave lake, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1062: Wellness Centre, East prairie, AB, Canada\n", + "osm query name: Wellness Centre, East prairie, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: East prairie, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1063: Valleyview and Area, , AB, Canada\n", + "osm query name: Valleyview and Area, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "1064: Joussard Homesteader's Hall, Joussard, AB, Canada\n", + "osm query name: Joussard Homesteader's Hall, Joussard, AB, Canada\n", + "osm query street: 76 peace river avenue, Joussard, AB, Canada\n", + "osm query city: Joussard, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1065: High Prairie and Area, High prairie, AB, Canada\n", + "osm query name: High Prairie and Area, High prairie, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: High prairie, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1066: Northern Lakes College Grouard Campus, , AB, Canada\n", + "osm query name: Northern Lakes College Grouard Campus, , AB, Canada\n", + "osm query street: 64 mission street grouard, , AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1067: Falher Provincial Building, , AB, Canada\n", + "osm query name: Falher Provincial Building, , AB, Canada\n", + "osm query street: 28 main street falher, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1068: Bishop Routhier School, , AB, Canada\n", + "osm query name: Bishop Routhier School, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "1069: Peavine Metis Settlement, Grouard, AB, Canada\n", + "osm query name: Peavine Metis Settlement, Grouard, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Grouard, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1070: Silver and Gold Pioneer Club of Wembley, Wembley, AB, Canada\n", + "osm query name: Silver and Gold Pioneer Club of Wembley, Wembley, AB, Canada\n", + "osm query street: 9816 101 street, Wembley, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1071: Grande Prairie 10514 67 Avenue, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie 10514 67 Avenue, Grande prairie, AB, Canada\n", + "osm query street: 10514 67 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1072: Grande Prairie 8805 Resources Road, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie 8805 Resources Road, Grande prairie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1073: JP 4 9719-98 Ave, Grande prairie, AB, Canada\n", + "osm query name: JP 4 9719-98 Ave, Grande prairie, AB, Canada\n", + "osm query street: 9719 98 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1074: Grande Prairie 9815 97 Street, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie 9815 97 Street, Grande prairie, AB, Canada\n", + "osm query street: 9815 97 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1075: Prairie Place, Grande prairie, AB, Canada\n", + "osm query name: Prairie Place, Grande prairie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1076: Mackenzie Place, Grande prairie, AB, Canada\n", + "osm query name: Mackenzie Place, Grande prairie, AB, Canada\n", + "osm query street: 10409 98 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1077: Grande Prairie EMS Station, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie EMS Station, Grande prairie, AB, Canada\n", + "osm query street: 10710 97 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1078: The Co-operators Plaza, Grande prairie, AB, Canada\n", + "osm query name: The Co-operators Plaza, Grande prairie, AB, Canada\n", + "osm query street: 10126 117 avenue, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1079: Grande Prairie 11745 105 Street, Grande prairie, AB, Canada\n", + "osm query name: Grande Prairie 11745 105 Street, Grande prairie, AB, Canada\n", + "osm query street: 11745 105 street, Grande prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1080: Wellington Resource Centre, , AB, Canada\n", + "osm query name: Wellington Resource Centre, , AB, Canada\n", + "osm query street: 10407 97 street, , AB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1081: Sexsmith Medical Clinic, Sexsmith, AB, Canada\n", + "osm query name: Sexsmith Medical Clinic, Sexsmith, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1082: Sexsmith Physiotherapy, Sexsmith, AB, Canada\n", + "osm query name: Sexsmith Physiotherapy, Sexsmith, AB, Canada\n", + "osm query street: 9807 103 street, Sexsmith, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1083: Senior Social Centre Club, Eaglesham, AB, Canada\n", + "osm query name: Senior Social Centre Club, Eaglesham, AB, Canada\n", + "osm query street: 5113 50th street, Eaglesham, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1084: Peace River and Area, , AB, Canada\n", + "osm query name: Peace River and Area, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "1085: Peace River Parent Link Centre, Peace river, AB, Canada\n", + "osm query name: Peace River Parent Link Centre, Peace river, AB, Canada\n", + "osm query street: 7715 99 street, Peace river, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1086: Birch Hills Country Administrative Office, Wanham, AB, Canada\n", + "osm query name: Birch Hills Country Administrative Office, Wanham, AB, Canada\n", + "osm query street: 4601 50 street, Wanham, AB, Canada\n", + "osm query city: Wanham, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1087: Fort McMurray 221 Tundra Drive, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray 221 Tundra Drive, Fort mcmurray, AB, Canada\n", + "osm query street: 221 tundra drive, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1088: Fort McMurray Queen Street Building, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray Queen Street Building, Fort mcmurray, AB, Canada\n", + "osm query street: 10217 queen street, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1089: Fort McMurray 8530 Manning Avenue, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray 8530 Manning Avenue, Fort mcmurray, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1090: 201 Thickwood Professional Building, Fort mcmurray, AB, Canada\n", + "osm query name: 201 Thickwood Professional Building, Fort mcmurray, AB, Canada\n", + "osm query street: 201 thickwood boulevard, Fort mcmurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1091: Fort McMurray and Area, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray and Area, Fort mcmurray, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Fort mcmurray, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1092: Savanna Agricultural Society Rec Plex, Silver, AB, Canada\n", + "osm query name: Savanna Agricultural Society Rec Plex, Silver, AB, Canada\n", + "osm query street: 81378 100 range road, Silver, AB, Canada\n", + "osm query city: Silver, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1093: Fort McMurray 108 Riverstone Ridge, Fort mcmurray, AB, Canada\n", + "osm query name: Fort McMurray 108 Riverstone Ridge, Fort mcmurray, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1094: Manning and Area, Manning, AB, Canada\n", + "osm query name: Manning and Area, Manning, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Manning, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1095: Fort McKay Health Centre, Fort mckay, AB, Canada\n", + "osm query name: Fort McKay Health Centre, Fort mckay, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1096: Dr. Mary Jackson School, Keg river, AB, Canada\n", + "osm query name: Dr. Mary Jackson School, Keg river, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: Keg river, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1097: North Zone and Area, , AB, Canada\n", + "osm query name: North Zone and Area, , AB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "1098: High Level and Area, High level, AB, Canada\n", + "osm query name: High Level and Area, High level, AB, Canada\n", + "no street address in dataframe\n", + "osm query city: High level, AB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1099: STURGEON PHARMACY, ST ALBERT, AB, Canada\n", + "osm query name: STURGEON PHARMACY, ST ALBERT, AB, Canada\n", + "osm query street: 625 st albert tr, ST ALBERT, AB, Canada\n", + "osm query city: ST ALBERT, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1100: BURNEWOOD SQUARE PHARMACY, EDMONTON, AB, Canada\n", + "osm query name: BURNEWOOD SQUARE PHARMACY, EDMONTON, AB, Canada\n", + "osm query street: 3416 43 ave nw, EDMONTON, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1101: CALGARY DRUG MART #03, CALGARY, AB, Canada\n", + "osm query name: CALGARY DRUG MART #03, CALGARY, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1102: UNIVERSAL HEALTH PHARMACY #2, CALGARY, AB, Canada\n", + "osm query name: UNIVERSAL HEALTH PHARMACY #2, CALGARY, AB, Canada\n", + "osm query street: 3650 westwinds dr ne, CALGARY, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1103: MEDLIFE PHARMACY, EDMONTON, AB, Canada\n", + "osm query name: MEDLIFE PHARMACY, EDMONTON, AB, Canada\n", + "osm query street: 16534 59 a st nw, EDMONTON, AB, Canada\n", + "osm query city: EDMONTON, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1104: SHOPPERS DRUG MART 2353, CALGARY, AB, Canada\n", + "osm query name: SHOPPERS DRUG MART 2353, CALGARY, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1105: Dawson City Community Hospital, , YT, Canada\n", + "osm query name: Dawson City Community Hospital, , YT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1106: Watson Lake Community Hospital , , YT, Canada\n", + "osm query name: Watson Lake Community Hospital , , YT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1107: Whitehorse General Hospital, , YT, Canada\n", + "osm query name: Whitehorse General Hospital, , YT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1108: Beaver Creek Health Centre, , YT, Canada\n", + "osm query name: Beaver Creek Health Centre, , YT, Canada\n", + "osm query street: mile 1202 alaska highway y0b, , YT, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1109: Carcross Health Centre, , YT, Canada\n", + "osm query name: Carcross Health Centre, , YT, Canada\n", + "osm query street: 1952 tagish avenue y0b, , YT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1110: Carmacks Health Centre, , YT, Canada\n", + "osm query name: Carmacks Health Centre, , YT, Canada\n", + "osm query street: 106 river drive y0b, , YT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1111: Dawson City Health Centre, , YT, Canada\n", + "osm query name: Dawson City Health Centre, , YT, Canada\n", + "osm query street: 501 sixth avenue y0b, , YT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1112: Destruction Bay Health Centre, , YT, Canada\n", + "osm query name: Destruction Bay Health Centre, , YT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1113: Faro Health Centre, , YT, Canada\n", + "osm query name: Faro Health Centre, , YT, Canada\n", + "osm query street: 111 bell avenue y0b, , YT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1114: Haines Junction Health Centre, , YT, Canada\n", + "osm query name: Haines Junction Health Centre, , YT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1115: Mayo Health Centre, , YT, Canada\n", + "osm query name: Mayo Health Centre, , YT, Canada\n", + "osm query street: 21 centre street y0b, , YT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1116: Old Crow Health Centre, , YT, Canada\n", + "osm query name: Old Crow Health Centre, , YT, Canada\n", + "osm query street: 200 y0b, , YT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1117: Pelly Crossing Health Centre, , YT, Canada\n", + "osm query name: Pelly Crossing Health Centre, , YT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1118: Ross River Health Centre, , YT, Canada\n", + "osm query name: Ross River Health Centre, , YT, Canada\n", + "osm query street: 14 kulan street y0b, , YT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1119: Teslin Health Centre, , YT, Canada\n", + "osm query name: Teslin Health Centre, , YT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1120: Watson Lake Health Centre, , YT, Canada\n", + "osm query name: Watson Lake Health Centre, , YT, Canada\n", + "osm query street: 801 ravenhill drive y0a, , YT, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1121: Whitehorse Health Centre, , YT, Canada\n", + "osm query name: Whitehorse Health Centre, , YT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1122: prairie view health centre, mankota, SK, Canada\n", + "osm query name: prairie view health centre, mankota, SK, Canada\n", + "osm query street: 241 1 avenue, mankota, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1123: kincaid primary health centre, kincaid, SK, Canada\n", + "osm query name: kincaid primary health centre, kincaid, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: kincaid, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1124: lafleche and district health centre, lafleche, SK, Canada\n", + "osm query name: lafleche and district health centre, lafleche, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: lafleche, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1125: mossbank primary health care centre, mossbank, SK, Canada\n", + "osm query name: mossbank primary health care centre, mossbank, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: mossbank, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1126: green lake clinic, green lake, SK, Canada\n", + "osm query name: green lake clinic, green lake, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: green lake, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1127: eatonia primary health care clinic, eatonia, SK, Canada\n", + "osm query name: eatonia primary health care clinic, eatonia, SK, Canada\n", + "osm query street: 205 2 avenue w, eatonia, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1128: lucky lake health centre, lucky lake, SK, Canada\n", + "osm query name: lucky lake health centre, lucky lake, SK, Canada\n", + "osm query street: 1 avenue, lucky lake, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1129: arborfield & district health care centre, arborfield, SK, Canada\n", + "osm query name: arborfield & district health care centre, arborfield, SK, Canada\n", + "osm query street: 509 5 avenue, arborfield, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1130: cumberland house home care, cumberland house, SK, Canada\n", + "osm query name: cumberland house home care, cumberland house, SK, Canada\n", + "osm query street: #3 cumberland street, cumberland house, SK, Canada\n", + "osm query city: cumberland house, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1131: weyakwin community health services, weyakwin, SK, Canada\n", + "osm query name: weyakwin community health services, weyakwin, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: weyakwin, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1132: border-line housing company, oxbow, SK, Canada\n", + "osm query name: border-line housing company, oxbow, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: oxbow, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1133: border-line housing company, carnduff, SK, Canada\n", + "osm query name: border-line housing company, carnduff, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: carnduff, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1134: the tony day family medical clinic, carnduff, SK, Canada\n", + "osm query name: the tony day family medical clinic, carnduff, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: carnduff, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1135: gainsborough & area health centre, gainsborough, SK, Canada\n", + "osm query name: gainsborough & area health centre, gainsborough, SK, Canada\n", + "osm query street: 312 stephens street, gainsborough, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1136: fillmore health centre, fillmore, SK, Canada\n", + "osm query name: fillmore health centre, fillmore, SK, Canada\n", + "osm query street: 100 main street, fillmore, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1137: new hope pioneer lodge, stoughton, SK, Canada\n", + "osm query name: new hope pioneer lodge, stoughton, SK, Canada\n", + "osm query street: 123 government road n, stoughton, SK, Canada\n", + "osm query city: stoughton, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1138: carlyle community health, carlyle, SK, Canada\n", + "osm query name: carlyle community health, carlyle, SK, Canada\n", + "osm query street: 206 railway avenue e, carlyle, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1139: moose mountain lodge (lt care), carlyle, SK, Canada\n", + "osm query name: moose mountain lodge (lt care), carlyle, SK, Canada\n", + "osm query street: 801 souris ave, carlyle, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1140: redvers medical clinic, redvers, SK, Canada\n", + "osm query name: redvers medical clinic, redvers, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: redvers, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1141: maryfield health centre, maryfield, SK, Canada\n", + "osm query name: maryfield health centre, maryfield, SK, Canada\n", + "osm query street: 233 main street, maryfield, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1142: wawota memorial health centre, wawota, SK, Canada\n", + "osm query name: wawota memorial health centre, wawota, SK, Canada\n", + "osm query street: foo cresent, wawota, SK, Canada\n", + "osm query city: wawota, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1143: kipling public health, kipling, SK, Canada\n", + "osm query name: kipling public health, kipling, SK, Canada\n", + "osm query street: 128 4 street, kipling, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1144: kipling integrated health centre, kipling, SK, Canada\n", + "osm query name: kipling integrated health centre, kipling, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1145: kipling mental health clinic, kipling, SK, Canada\n", + "osm query name: kipling mental health clinic, kipling, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: kipling, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1146: radville public health office, radville, SK, Canada\n", + "osm query name: radville public health office, radville, SK, Canada\n", + "osm query street: 840 conrad ave, radville, SK, Canada\n", + "osm query city: radville, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1147: weyburn community health services building, weyburn, SK, Canada\n", + "osm query name: weyburn community health services building, weyburn, SK, Canada\n", + "osm query street: 900 saskatchewan drive, weyburn, SK, Canada\n", + "osm query city: weyburn, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1148: weyburn mental health clinic, weyburn, SK, Canada\n", + "osm query name: weyburn mental health clinic, weyburn, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: weyburn, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1149: estevan regional nursing home, estevan, SK, Canada\n", + "osm query name: estevan regional nursing home, estevan, SK, Canada\n", + "osm query name: whitecap dakota first nation - primary health centre, whitecap, SK, Canada\n", + "osm query street: 316 moose woods dr, whitecap, SK, Canada\n", + "osm query city: whitecap, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1155: rosthern (public health office), rosthern, SK, Canada\n", + "osm query name: rosthern (public health office), rosthern, SK, Canada\n", + "osm query street: 2014 6 street, rosthern, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1156: big river primary health care clinic, big river, SK, Canada\n", + "osm query name: big river primary health care clinic, big river, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: big river, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1157: evergreen health centre, leoville, SK, Canada\n", + "osm query name: evergreen health centre, leoville, SK, Canada\n", + "osm query street: 1 ave, leoville, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1158: spiritwood primary health care clinic, spiritwood, SK, Canada\n", + "osm query name: spiritwood primary health care clinic, spiritwood, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: spiritwood, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1159: spiritwood collaborative emergency centre, spiritwood, SK, Canada\n", + "osm query name: spiritwood collaborative emergency centre, spiritwood, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: spiritwood, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1160: spiritwood and district health complex long-term care, spiritwood, SK, Canada\n", + "osm query name: Lloydminster Hospital , Lloydminster, AB, Canada\n", + "osm query street: 3820 43 avenue, Lloydminster, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1176: Olds Hospital and Care Centre , Olds, AB, Canada\n", + "osm query name: Olds Hospital and Care Centre , Olds, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1177: Provost Health Centre , Provost, AB, Canada\n", + "osm query name: Provost Health Centre , Provost, AB, Canada\n", + "osm query street: 270 54 avenue box, Provost, AB, Canada\n", + "osm query city: Provost, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1178: Red Deer Regional Hospital Centre , Red Deer, AB, Canada\n", + "osm query name: Red Deer Regional Hospital Centre , Red Deer, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1179: Rimbey Hospital and Care Centre , Rimbey, AB, Canada\n", + "osm query name: Rimbey Hospital and Care Centre , Rimbey, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1180: Rocky Mountain House Health Centre , Rocky, AB, Canada\n", + "osm query name: Rocky Mountain House Health Centre , Rocky, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1181: Stettler Hospital and Care Centre , Stettler, AB, Canada\n", + "osm query name: Stettler Hospital and Care Centre , Stettler, AB, Canada\n", + "osm query street: 5912 47 avenue, Stettler, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1182: Sundre Hospital and Care Centre , Sundre, AB, Canada\n", + "osm query name: Sundre Hospital and Care Centre , Sundre, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1183: Three Hills Health Centre , Three Hills, AB, Canada\n", + "osm query name: Three Hills Health Centre , Three Hills, AB, Canada\n", + "osm query street: 1504 2nd street n., Three Hills, AB, Canada\n", + "osm query name: Wainwright Health Centre , Wainwright, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1190: Wetaskiwin Hospital and Care Centre , Wetaskiwin, AB, Canada\n", + "osm query name: Wetaskiwin Hospital and Care Centre , Wetaskiwin, AB, Canada\n", + "osm query street: 6910 47 street, Wetaskiwin, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1191: Devon General Hospital , Devon, AB, Canada\n", + "osm query name: Devon General Hospital , Devon, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1192: Glenrose Rehabilitation Hospital , Edmonton, AB, Canada\n", + "osm query name: Glenrose Rehabilitation Hospital , Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1193: Grey Nuns Community Hospital , Edmonton, AB, Canada\n", + "osm query name: Grey Nuns Community Hospital , Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1194: Misericordia Community Hospital , Edmonton, AB, Canada\n", + "osm query name: Misericordia Community Hospital , Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1195: Northeast Community Health Centre , Edmonton, AB, Canada\n", + "osm query name: Northeast Community Health Centre , Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1196: Royal Alexandra Hospital , Edmonton, AB, Canada\n", + "osm query name: Royal Alexandra Hospital , Edmonton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1197: Stollery Children’s Hospital, Edmonton, AB, Canada\n", + "osm query street: 10200 shand avenue, Grande Cache, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1217: Queen Elizabeth II Hospital, Grande Prairie, AB, Canada\n", + "osm query name: Queen Elizabeth II Hospital, Grande Prairie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1218: Grimshaw / Berwyn and District Community Health Centre , Grimshaw, AB, Canada\n", + "osm query name: Grimshaw / Berwyn and District Community Health Centre , Grimshaw, AB, Canada\n", + "osm query street: 5621 wilcox road, Grimshaw, AB, Canada\n", + "osm query city: Grimshaw, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1219: Northwest Health Centre , High Level, AB, Canada\n", + "osm query name: Northwest Health Centre , High Level, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1220: High Prairie Health Complex , High Prairie, AB, Canada\n", + "osm query name: High Prairie Health Complex , High Prairie, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1221: Hinton Healthcare Centre , Hinton, AB, Canada\n", + "osm query name: Hinton Healthcare Centre , Hinton, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1222: Seton – Jasper Healthcare Centre , Jasper, AB, Canada\n", + "osm query name: Seton – Jasper Healthcare Centre , Jasper, AB, Canada\n", + "osm query street: 518 robson street, Jasper, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1223: William J. Cadzow – Lac La Biche Healthcare Centre , Lac La Biche, AB, Canada\n", + "osm query name: William J. Cadzow – Lac La Biche Healthcare Centre , Lac La Biche, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1224: Manning Community Health Centre , Manning, AB, Canada\n", + "osm query name: Manning Community Health Centre , Manning, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1225: Mayerthorpe Healthcare Centre , Mayerthorpe, AB, Canada\n", + "osm query name: Mayerthorpe Healthcare Centre , Mayerthorpe, AB, Canada\n", + "osm query street: 4417 45 street, Mayerthorpe, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1226: Sacred Heart Community Health Centre , McLennan, AB, Canada\n", + "osm query name: Sacred Heart Community Health Centre , McLennan, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1227: Peace River Community Health Centre , Peace River, AB, Canada\n", + "osm query name: Peace River Community Health Centre , Peace River, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1228: Redwater Health Centre , Redwater, AB, Canada\n", + "osm query name: Redwater Health Centre , Redwater, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1229: Slave Lake Healthcare Centre , Slave Lake, AB, Canada\n", + "osm query name: Slave Lake Healthcare Centre , Slave Lake, AB, Canada\n", + "osm query street: 309 6 street ne, Slave Lake, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1230: George McDougall – Smoky Lake Healthcare Centre , Smoky Lake, AB, Canada\n", + "osm query name: George McDougall – Smoky Lake Healthcare Centre , Smoky Lake, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1231: Central Peace Health Complex , Spirit River, AB, Canada\n", + "osm query name: Central Peace Health Complex , Spirit River, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1232: St. Therese - St. Paul Healthcare Centre , St. Paul, AB, Canada\n", + "osm query name: St. Therese - St. Paul Healthcare Centre , St. Paul, AB, Canada\n", + "osm query street: 4713 48 avenue, St. Paul, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1233: Swan Hills Healthcare Centre , Swan Hills, AB, Canada\n", + "osm query name: Swan Hills Healthcare Centre , Swan Hills, AB, Canada\n", + "osm query street: 29 freeman drive, Swan Hills, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1234: Valleyview Health Centre , Valleyview, AB, Canada\n", + "osm query name: Valleyview Health Centre , Valleyview, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1235: Wabasca/Desmarais Healthcare Centre , Wabasca/ Desmarais, AB, Canada\n", + "osm query name: Wabasca/Desmarais Healthcare Centre , Wabasca/ Desmarais, AB, Canada\n", + "osm query street: 881 mistassiniy road wabasca, Wabasca/ Desmarais, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1236: Whitecourt Healthcare Centre , Whitecourt, AB, Canada\n", + "osm query name: Whitecourt Healthcare Centre , Whitecourt, AB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1237: Jack Ady Cancer Centre (JACC) , Lethbridge, AB, Canada\n", + "osm query name: Jack Ady Cancer Centre (JACC) , Lethbridge, AB, Canada\n", + "osm query street: 960 19th street, Lethbridge, AB, Canada\n", + "osm query city: Lethbridge, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1238: Margery E. Yuill Cancer Centre (MYCC) , Medicine Hat, AB, Canada\n", + "osm query name: Margery E. Yuill Cancer Centre (MYCC) , Medicine Hat, AB, Canada\n", + "osm query street: 666-5th street s.w., Medicine Hat, AB, Canada\n", + "osm query city: Medicine Hat, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1239: Tom Baker Cancer Centre (TBCC) , Calgary, AB, Canada\n", + "osm query name: Tom Baker Cancer Centre (TBCC) , Calgary, AB, Canada\n", + "osm query street: 1331 29 street nw, Calgary, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1240: Bow Valley Community Cancer Centre , Canmore, AB, Canada\n", + "osm query name: Bow Valley Community Cancer Centre , Canmore, AB, Canada\n", + "osm query street: 1100 hospital place, Canmore, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1241: High River Community Cancer Centre , High River, AB, Canada\n", + "osm query name: High River Community Cancer Centre , High River, AB, Canada\n", + "osm query street: 560 9th avenue west, High River, AB, Canada\n", + "osm query city: High River, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1242: Camrose Community Cancer Centre , Camrose, AB, Canada\n", + "osm query name: Camrose Community Cancer Centre , Camrose, AB, Canada\n", + "osm query street: 4607 53 street, Camrose, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1243: Drayton Valley Community Cancer Centre , Drayton Valley, AB, Canada\n", + "osm query name: Drayton Valley Community Cancer Centre , Drayton Valley, AB, Canada\n", + "osm query street: 4550 madsen avenue, Drayton Valley, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1244: Drumheller Community Cancer Centre , Drumheller, AB, Canada\n", + "osm query name: Drumheller Community Cancer Centre , Drumheller, AB, Canada\n", + "osm query street: 351 9th street nw, Drumheller, AB, Canada\n", + "osm query city: Drumheller, AB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1245: Central Alberta Cancer Centre (CACC) , Red Deer, AB, Canada\n", + "osm query name: Central Alberta Cancer Centre (CACC) , Red Deer, AB, Canada\n", + "osm query street: 50a avenue, Red Deer, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1246: Cross Cancer Institute (CCI) , Edmonton, AB, Canada\n", + "osm query name: Cross Cancer Institute (CCI) , Edmonton, AB, Canada\n", + "osm query street: 11560 university avenue, Edmonton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1247: Barrhead Community Cancer Centre , Barrhead, AB, Canada\n", + "osm query name: Barrhead Community Cancer Centre , Barrhead, AB, Canada\n", + "osm query street: 4815 51 avenue, Barrhead, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1248: Bonnyville Community Cancer Centre , Bonnyville, AB, Canada\n", + "osm query name: Bonnyville Community Cancer Centre , Bonnyville, AB, Canada\n", + "osm query street: 5001 lakeshore drive, Bonnyville, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1249: Fort McMurray Community Cancer Centre , Fort McMurray, AB, Canada\n", + "osm query name: Fort McMurray Community Cancer Centre , Fort McMurray, AB, Canada\n", + "osm query street: 7 hospital street, Fort McMurray, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1250: Grande Prairie Cancer Centre (GPCC) , Grande Prairie, AB, Canada\n", + "osm query name: Grande Prairie Cancer Centre (GPCC) , Grande Prairie, AB, Canada\n", + "osm query street: 10409-98 street, Grande Prairie, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1251: Hinton Community Cancer Centre , Hinton, AB, Canada\n", + "osm query name: Hinton Community Cancer Centre , Hinton, AB, Canada\n", + "osm query street: 1280 switzer drive, Hinton, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1252: Peace River Community Cancer Centre , Peace River, AB, Canada\n", + "osm query name: Peace River Community Cancer Centre , Peace River, AB, Canada\n", + "osm query street: 10101 68 street, Peace River, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1253: Lloydminster Community Cancer Centre , Lloydminster, AB, Canada\n", + "osm query name: Lloydminster Community Cancer Centre , Lloydminster, AB, Canada\n", + "osm query street: 3820 43 avenue, Lloydminster, AB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1254: Guelph Community Health Centre - Downtown location, Guelph, ON, Canada\n", + "osm query name: Guelph Community Health Centre - Downtown location, Guelph, ON, Canada\n", + "osm query street: 176 Wyndham Street North, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1255: Canadian Mental Health Association, Waterloo Wellington Dufferin, Guelph, ON, Canada\n", + "osm query name: Canadian Mental Health Association, Waterloo Wellington Dufferin, Guelph, ON, Canada\n", + "osm query street: 485 Silvercreek Parkway North, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1256: Guelph Community Health Centre - Satellite Clinic, Guelph, ON, Canada\n", + "osm query name: Guelph Community Health Centre - Satellite Clinic, Guelph, ON, Canada\n", + "osm query street: 20 Shelldale Crescent, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1257: Growing Great Kids Guelph-Wellington, Guelph, ON, Canada\n", + "osm query name: Growing Great Kids Guelph-Wellington, Guelph, ON, Canada\n", + "osm query street: 160 Chancellors Way, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1258: Family Counselling and Support Services for Guelph Wellington, Guelph, ON, Canada\n", + "osm query name: Family Counselling and Support Services for Guelph Wellington, Guelph, ON, Canada\n", + "osm query street: 109 Surrey Street East, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1259: Dawson Road Family Medical Clinic, Guelph, ON, Canada\n", + "osm query name: Dawson Road Family Medical Clinic, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1260: Dawson Road - Dr. Jennifer Caspers, Guelph, ON, Canada\n", + "osm query name: Dawson Road - Dr. Jennifer Caspers, Guelph, ON, Canada\n", + "osm query street: 83 Dawson Road, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1261: Arbour Family Medical Centre, Guelph, ON, Canada\n", + "osm query name: Arbour Family Medical Centre, Guelph, ON, Canada\n", + "osm query street: 281 Stone Road East, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1262: Diabetes Care Guelph, Guelph, ON, Canada\n", + "osm query name: Diabetes Care Guelph, Guelph, ON, Canada\n", + "osm query street: 83 Dawson Road, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1263: Downey Road, Guelph, ON, Canada\n", + "osm query name: Downey Road, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1264: Guelph North End Family Medical, Guelph, ON, Canada\n", + "osm query name: Guelph North End Family Medical, Guelph, ON, Canada\n", + "osm query street: 83 Dawson Road, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1265: Norfolk 302, Guelph, ON, Canada\n", + "osm query name: Norfolk 302, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1266: Hope Health Centre, Guelph, ON, Canada\n", + "osm query name: Hope Health Centre, Guelph, ON, Canada\n", + "osm query street: 21 Yarmouth Street, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1267: Norfolk 305, Guelph, ON, Canada\n", + "osm query name: Norfolk 305, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1268: Norfolk 311, Guelph, ON, Canada\n", + "osm query name: Norfolk 311, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1269: Old Quebec 207, Guelph, ON, Canada\n", + "osm query name: Old Quebec 207, Guelph, ON, Canada\n", + "osm query street: 55 Wyndham Street North, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1270: Old Quebec 208, Guelph, ON, Canada\n", + "osm query name: Old Quebec 208, Guelph, ON, Canada\n", + "osm query street: 55 Wyndham Street North, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1271: Victoria Grange, Guelph, ON, Canada\n", + "osm query name: Victoria Grange, Guelph, ON, Canada\n", + "osm query street: 23 Victoria Road North, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1272: Westmount Road 306, Guelph, ON, Canada\n", + "osm query name: Westmount Road 306, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1273: Westminster Woods Medical Centre, Guelph, ON, Canada\n", + "osm query name: Westminster Woods Medical Centre, Guelph, ON, Canada\n", + "osm query street: 33 Farley Drive, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1274: Woolwich Street, Guelph, ON, Canada\n", + "osm query name: Woolwich Street, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1275: Wyndham Medical, Guelph, ON, Canada\n", + "osm query name: Wyndham Medical, Guelph, ON, Canada\n", + "osm query street: 75 Wyndham Street South, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1276: Guelph General Hospital, Guelph, ON, Canada\n", + "osm query name: Guelph General Hospital, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1277: St. Joseph's Health Centre Guelph, Guelph, ON, Canada\n", + "osm query name: St. Joseph's Health Centre Guelph, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1278: Homewood Health Centre, Guelph, ON, Canada\n", + "osm query name: Homewood Health Centre, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1279: Canadian Mental Health Association, Waterloo Wellington Dufferin, Guelph, ON, Canada\n", + "osm query name: Canadian Mental Health Association, Waterloo Wellington Dufferin, Guelph, ON, Canada\n", + "osm query street: 147 Wyndham Street North, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1280: MentalHealthSupport.ca, Guelph, ON, Canada\n", + "osm query name: MentalHealthSupport.ca, Guelph, ON, Canada\n", + "osm query street: 35 Cheltonwood Avenue, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1281: Canadian Mental Health Association, Waterloo Wellington Dufferin Self -Help Alliance, Guelph, ON, Canada\n", + "osm query name: Canadian Mental Health Association, Waterloo Wellington Dufferin Self -Help Alliance, Guelph, ON, Canada\n", + "osm query street: 147 Wyndham Street North, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1282: Canadian Mental Health Association, Waterloo Wellington Dufferin, Guelph, ON, Canada\n", + "osm query name: Canadian Mental Health Association, Waterloo Wellington Dufferin, Guelph, ON, Canada\n", + "osm query street: 80 Waterloo Avenue, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1283: Guelph ?Çô 160 Chancellors Way, Guelph, ON, Canada\n", + "osm query name: Guelph ?Çô 160 Chancellors Way, Guelph, ON, Canada\n", + "osm query street: 160 Chancellors Way, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1284: Guelph ?Çô Shelldale Centre, Guelph, ON, Canada\n", + "osm query name: Guelph ?Çô Shelldale Centre, Guelph, ON, Canada\n", + "osm query street: 20 Shelldale Crescent, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1285: Arkell Walk-in Clinic, Guelph, ON, Canada\n", + "osm query name: Arkell Walk-in Clinic, Guelph, ON, Canada\n", + "osm query street: 403 Arkell Road, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1286: Dawson Road Family Medical Clinic - After Hours, Guelph, ON, Canada\n", + "osm query name: Dawson Road Family Medical Clinic - After Hours, Guelph, ON, Canada\n", + "osm query street: 83 Dawson Road, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1287: Guelph Family Health Team, Guelph, ON, Canada\n", + "osm query name: Guelph Family Health Team, Guelph, ON, Canada\n", + "osm query street: 55 Wyndham Street North, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1288: Guelph Walk-in Medical Clinic, Guelph, ON, Canada\n", + "osm query name: Guelph Walk-in Medical Clinic, Guelph, ON, Canada\n", + "osm query street: 1499 Gordon Street, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1289: Guelph Walk-in Medical Clinic, Guelph, ON, Canada\n", + "osm query name: Guelph Walk-in Medical Clinic, Guelph, ON, Canada\n", + "osm query street: 160 Kortright Road West, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1290: Guelph Walk-in Medical Clinic, Guelph, ON, Canada\n", + "osm query name: Guelph Walk-in Medical Clinic, Guelph, ON, Canada\n", + "osm query street: 105 Silvercreek Parkway North, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1291: Family and Children's Services of Guelph and Wellington County, Guelph, ON, Canada\n", + "osm query name: Family and Children's Services of Guelph and Wellington County, Guelph, ON, Canada\n", + "osm query street: 275 Eramosa Road, Guelph, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1292: Mango Tree, Aberfoyle, ON, Canada\n", + "osm query name: Mango Tree, Aberfoyle, ON, Canada\n", + "osm query street: 28 Brock Road North, Aberfoyle, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1293: Surrey 101, Guelph, ON, Canada\n", + "osm query name: Surrey 101, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1294: Surrey 102, Guelph, ON, Canada\n", + "osm query name: Surrey 102, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1295: Surrey 108, Guelph, ON, Canada\n", + "osm query name: Surrey 108, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1296: Surrey 103, Guelph, ON, Canada\n", + "osm query name: Surrey 103, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1297: Surrey 302, Guelph, ON, Canada\n", + "osm query name: Surrey 302, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1298: Surrey 301, Guelph, ON, Canada\n", + "osm query name: Surrey 301, Guelph, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1299: Arborg Medical Clinic - Primary Health Care Centre, ARBORG, MB, Canada\n", + "osm query name: Arborg Medical Clinic - Primary Health Care Centre, ARBORG, MB, Canada\n", + "osm query street: gislason drive, ARBORG, MB, Canada\n", + "osm query city: ARBORG, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1300: Lakeshore General Hospital, ASHERN, MB, Canada\n", + "osm query name: Lakeshore General Hospital, ASHERN, MB, Canada\n", + "osm query street: steenson drive, ASHERN, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1301: Beausejour HEW Primary Health Care Centre, BEAUSEJOUR, MB, Canada\n", + "osm query name: Beausejour HEW Primary Health Care Centre, BEAUSEJOUR, MB, Canada\n", + "osm query street: box 120831-1st street south, BEAUSEJOUR, MB, Canada\n", + "osm query city: BEAUSEJOUR, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1302: Beausejour Primary Health Care Centre, , MB, Canada\n", + "osm query name: Beausejour Primary Health Care Centre, , MB, Canada\n", + "osm query street: box 550151-1st street south beausejour, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1303: Eriksdale Medical Clinic in the Wellness Centre, ERIKSDALE, MB, Canada\n", + "osm query name: Eriksdale Medical Clinic in the Wellness Centre, ERIKSDALE, MB, Canada\n", + "osm query street: railway avenue, ERIKSDALE, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1304: Fisher Branch Primary Health Care Centre, FISHER BRANCH, MB, Canada\n", + "osm query name: Fisher Branch Primary Health Care Centre, FISHER BRANCH, MB, Canada\n", + "osm query street: main street, FISHER BRANCH, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1305: Community Health Centre, GIMLI, MB, Canada\n", + "osm query name: Community Health Centre, GIMLI, MB, Canada\n", + "osm query street: box 250120-6th avenue gimli, GIMLI, MB, Canada\n", + "osm query city: GIMLI, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1306: Grand Marais Primary Health Care Clinic, GRAND MARAIS, MB, Canada\n", + "osm query name: Grand Marais Primary Health Care Clinic, GRAND MARAIS, MB, Canada\n", + "osm query street: 36058 pth 12 r0e, GRAND MARAIS, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1307: Primary Health Care Centre, LAC DU BONNET, MB, Canada\n", + "osm query name: Primary Health Care Centre, LAC DU BONNET, MB, Canada\n", + "osm query street: 89 mcintosh st., LAC DU BONNET, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1308: Health Centre - Nurse Practitioner Clinic, LUNDAR, MB, Canada\n", + "osm query name: Health Centre - Nurse Practitioner Clinic, LUNDAR, MB, Canada\n", + "osm query street: 1st street s. lundar, LUNDAR, MB, Canada\n", + "osm query city: LUNDAR, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1309: Kin Place Primary Health Care Centre, OAKBANK, MB, Canada\n", + "osm query name: Kin Place Primary Health Care Centre, OAKBANK, MB, Canada\n", + "osm query street: main street oakbank, OAKBANK, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1310: Pinawa Primary Health Care Centre, PINAWA, MB, Canada\n", + "osm query name: Pinawa Primary Health Care Centre, PINAWA, MB, Canada\n", + "osm query street: vanier drive pinawa, PINAWA, MB, Canada\n", + "osm query city: PINAWA, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1311: Pine Falls Primary Health Care Complex, PINE FALLS, MB, Canada\n", + "osm query name: Pine Falls Primary Health Care Complex, PINE FALLS, MB, Canada\n", + "osm query street: maple street, PINE FALLS, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1312: Prawda Primary Health Care Clinic, PRAWDA, MB, Canada\n", + "osm query name: Prawda Primary Health Care Clinic, PRAWDA, MB, Canada\n", + "osm query street: 44059 pr-506, PRAWDA, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1313: Riverton Community Health Office, RIVERTON, MB, Canada\n", + "osm query name: Riverton Community Health Office, RIVERTON, MB, Canada\n", + "osm query street: main street, RIVERTON, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1314: Community Health Centre, ST. LAURENT, MB, Canada\n", + "osm query name: Community Health Centre, ST. LAURENT, MB, Canada\n", + "osm query street: parish lane, ST. LAURENT, MB, Canada\n", + "osm query city: ST. LAURENT, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1315: Eveline Street Clinic, SELKIRK, MB, Canada\n", + "osm query name: Eveline Street Clinic, SELKIRK, MB, Canada\n", + "osm query street: 66 eveline street, SELKIRK, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1316: Interlake Surgical Associates , Clandeboye, MB, Canada\n", + "osm query name: Interlake Surgical Associates , Clandeboye, MB, Canada\n", + "osm query street: avenueselkirk r1a, Clandeboye, MB, Canada\n", + "osm query city: Clandeboye, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1317: Selkirk Medical Centre , Selkirk, MB, Canada\n", + "osm query name: Selkirk Medical Centre , Selkirk, MB, Canada\n", + "osm query street: 353 eveline street, Selkirk, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1318: Selkirk CarePlus (Walk-In), Selkirk, MB, Canada\n", + "osm query name: Selkirk CarePlus (Walk-In), Selkirk, MB, Canada\n", + "osm query street: 373 main st, Selkirk, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1319: Selkirk Rapid Access to Addictions Medicine (RAAM) Clinic , , MB, Canada\n", + "osm query name: Selkirk Rapid Access to Addictions Medicine (RAAM) Clinic , , MB, Canada\n", + "osm query street: 237 manitoba avenueselkirk, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1320: Selkirk QuickCare Clinic , Selkirk, MB, Canada\n", + "osm query name: Selkirk QuickCare Clinic , Selkirk, MB, Canada\n", + "osm query street: 1020 manitoba ave., Selkirk, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1321: Selkirk Travel Health Clinic , Selkirk, MB, Canada\n", + "osm query name: Selkirk Travel Health Clinic , Selkirk, MB, Canada\n", + "osm query street: manitoba avenue, Selkirk, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1322: Seymourville Primary Health Care Clinic, SEYMOURVILLE, MB, Canada\n", + "osm query name: Seymourville Primary Health Care Clinic, SEYMOURVILLE, MB, Canada\n", + "osm query street: 54 main street, SEYMOURVILLE, MB, Canada\n", + "osm query city: SEYMOURVILLE, MB, Canada\n", + "[6] no address found\n", + "\n", + "\n", + "1323: Interlake Medicentres, STONEWALL, MB, Canada\n", + "osm query name: Interlake Medicentres, STONEWALL, MB, Canada\n", + "osm query street: 3rd avenue southstonewall r0c, STONEWALL, MB, Canada\n", + "osm query city: STONEWALL, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1324: Quarry Ridge Pharmacy & Medical Clinic, , MB, Canada\n", + "osm query name: Quarry Ridge Pharmacy & Medical Clinic, , MB, Canada\n", + "osm query street: box 70469-first st. west stonewall, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1325: Stonewall Medical Group, , MB, Canada\n", + "osm query name: Stonewall Medical Group, , MB, Canada\n", + "osm query street: 589 3rd avenue southstonewall r0c, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1326: Teulon Medical Clinic , TEULON, MB, Canada\n", + "osm query name: Teulon Medical Clinic , TEULON, MB, Canada\n", + "osm query street: avenue se teulon, TEULON, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1327: Primary Health Care Centre, WHITEMOUTH, MB, Canada\n", + "osm query name: Primary Health Care Centre, WHITEMOUTH, MB, Canada\n", + "osm query street: hospital street, WHITEMOUTH, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1328: Winnipeg Beach Primary Care Clinic, WINNIPEG BEACH, MB, Canada\n", + "osm query name: Winnipeg Beach Primary Care Clinic, WINNIPEG BEACH, MB, Canada\n", + "osm query street: beachr0c 3g0 main st.unit jwinnipeg, WINNIPEG BEACH, MB, Canada\n", + "osm query city: WINNIPEG BEACH, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1329: Woodlands Clinic, WOODLANDS, MB, Canada\n", + "osm query name: Woodlands Clinic, WOODLANDS, MB, Canada\n", + "osm query street: 78 porteous ave, WOODLANDS, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1330: Abbie J. Lane Memorial Building - QEII, Halifax, NS, Canada\n", + "osm query name: Abbie J. Lane Memorial Building - QEII, Halifax, NS, Canada\n", + "osm query street: 5909 veterans memorial lane, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1331: Aberdeen Hospital, New Glasgow, NS, Canada\n", + "osm query name: Aberdeen Hospital, New Glasgow, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1332: All Saints Springhill Hospital, Springhill, NS, Canada\n", + "osm query name: All Saints Springhill Hospital, Springhill, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1333: Annapolis Community Health Centre, Annapolis Royal, NS, Canada\n", + "osm query name: Annapolis Community Health Centre, Annapolis Royal, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1334: Barrington Community Health Centre, Barrington Passage, NS, Canada\n", + "osm query name: Barrington Community Health Centre, Barrington Passage, NS, Canada\n", + "osm query street: 3640 lighthouse route, Barrington Passage, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1335: Bayers Road Centre, Halifax, NS, Canada\n", + "osm query name: Bayers Road Centre, Halifax, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1336: Beacon House, Kentville, NS, Canada\n", + "osm query name: Beacon House, Kentville, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1337: Bridgewater and Area Family Health Centre, Bridgewater, NS, Canada\n", + "osm query name: Bridgewater and Area Family Health Centre, Bridgewater, NS, Canada\n", + "osm query street: 42 glen allan drive, Bridgewater, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1338: Buchanan Memorial Community Health Centre, Neils Harbour, NS, Canada\n", + "osm query name: Buchanan Memorial Community Health Centre, Neils Harbour, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1339: Cape Breton Regional Hospital, Sydney, NS, Canada\n", + "osm query name: Cape Breton Regional Hospital, Sydney, NS, Canada\n", + "osm query street: 1482 george street, Sydney, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1340: CaperBase at Access 808, Sydney, NS, Canada\n", + "osm query name: CaperBase at Access 808, Sydney, NS, Canada\n", + "osm query street: 808 george street, Sydney, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1341: Chapel Island Health Centre (Potlotek Health Centre), St. Peter's, NS, Canada\n", + "osm query name: Chapel Island Health Centre (Potlotek Health Centre), St. Peter's, NS, Canada\n", + "osm query street: 12004 highway 4, St. Peter's, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1342: Chipman Building, Kentville, NS, Canada\n", + "osm query name: Chipman Building, Kentville, NS, Canada\n", + "osm query street: 5 chipman drive, Kentville, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1343: Clare Health Centre, Meteghan Centre, NS, Canada\n", + "osm query name: Clare Health Centre, Meteghan Centre, NS, Canada\n", + "osm query street: 8559 highway 1, Meteghan Centre, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1344: Cobequid Community Health Centre, Lower Sackville, NS, Canada\n", + "osm query name: Cobequid Community Health Centre, Lower Sackville, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1345: Colchester East Hants Health Centre, Truro, NS, Canada\n", + "osm query name: Colchester East Hants Health Centre, Truro, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1346: Cole Harbour Place, Dartmouth, NS, Canada\n", + "osm query name: Cole Harbour Place, Dartmouth, NS, Canada\n", + "osm query street: 51 forest hills parkway, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1347: Community Mental Health and Addicitions Glace Bay Clinic, Glace Bay, NS, Canada\n", + "osm query name: Community Mental Health and Addicitions Glace Bay Clinic, Glace Bay, NS, Canada\n", + "osm query street: 121 union street, Glace Bay, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1348: Community Mental Health and Addiction Clinic Port Hawkesbury, Port Hawkesbury, NS, Canada\n", + "osm query name: Community Mental Health and Addiction Clinic Port Hawkesbury, Port Hawkesbury, NS, Canada\n", + "osm query street: 708 reeves street, Port Hawkesbury, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1349: Community Mental Health and Addictions Amherst Clinic, Amherst, NS, Canada\n", + "osm query name: Community Mental Health and Addictions Amherst Clinic, Amherst, NS, Canada\n", + "osm query street: 30 prince arthur street, Amherst, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1350: Community Mental Health and Addictions Metropolitan Place, Dartmouth, NS, Canada\n", + "osm query name: Community Mental Health and Addictions Metropolitan Place, Dartmouth, NS, Canada\n", + "osm query street: 99 wyse road, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1351: Community Transition Program, Lower Sackville, NS, Canada\n", + "osm query name: Community Transition Program, Lower Sackville, NS, Canada\n", + "osm query street: 70 memory lane, Lower Sackville, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1352: Connections Halifax, Suite 3000, NS, Canada\n", + "osm query name: Connections Halifax, Suite 3000, NS, Canada\n", + "osm query street: 5657 spring garden road, Suite 3000, NS, Canada\n", + "osm query city: Suite 3000, NS, Canada\n", + "[6] no address found\n", + "\n", + "\n", + "1353: Covington Place, Truro, NS, Canada\n", + "osm query name: Covington Place, Truro, NS, Canada\n", + "osm query street: 332 willow street, Truro, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1354: Crossroads Clubhouse, Sydney, NS, Canada\n", + "osm query name: Crossroads Clubhouse, Sydney, NS, Canada\n", + "osm query street: 40 bentinck street, Sydney, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1355: Cumberland Mental Health Services, Amherst, NS, Canada\n", + "osm query name: Cumberland Mental Health Services, Amherst, NS, Canada\n", + "osm query street: 33 havelock street, Amherst, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1356: Cumberland Regional Health Care Centre, Amherst, NS, Canada\n", + "osm query name: Cumberland Regional Health Care Centre, Amherst, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1357: Dartmouth Community Mental Health and Addictions, Dartmouth, NS, Canada\n", + "osm query name: Dartmouth Community Mental Health and Addictions, Dartmouth, NS, Canada\n", + "osm query street: 842 portland street, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1358: Dawson Centre, Bridgewater, NS, Canada\n", + "osm query name: Dawson Centre, Bridgewater, NS, Canada\n", + "osm query street: 197 dufferin street, Bridgewater, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1359: Digby General Hospital, Digby, NS, Canada\n", + "osm query name: Digby General Hospital, Digby, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1360: Dr. Clyde S. Marshall Building - Nova Scotia Hospital, Dartmouth, NS, Canada\n", + "osm query name: Dr. Clyde S. Marshall Building - Nova Scotia Hospital, Dartmouth, NS, Canada\n", + "osm query street: 294 pleasant street, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1361: E.C. Purdy Building - Nova Scotia Hospital, Dartmouth, NS, Canada\n", + "osm query name: E.C. Purdy Building - Nova Scotia Hospital, Dartmouth, NS, Canada\n", + "osm query street: 300 pleasant street, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1362: East Coast Forensic Hospital, Dartmouth, NS, Canada\n", + "osm query name: East Coast Forensic Hospital, Dartmouth, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1363: Eastern Kings Memorial Community Health Centre, Wolfville, NS, Canada\n", + "osm query name: Eastern Kings Memorial Community Health Centre, Wolfville, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1364: Eastern Shore Memorial Hospital, Sheet Harbour, NS, Canada\n", + "osm query name: Eastern Shore Memorial Hospital, Sheet Harbour, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1365: Eskasoni Mental Health & Social Work Services, Eskasoni, NS, Canada\n", + "osm query name: Eskasoni Mental Health & Social Work Services, Eskasoni, NS, Canada\n", + "osm query street: 4555 shore road, Eskasoni, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1366: Fishermen's Memorial Hospital, Lunenburg, NS, Canada\n", + "osm query name: Fishermen's Memorial Hospital, Lunenburg, NS, Canada\n", + "osm query street: 14 high street, Lunenburg, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1367: Gold River Health Centre, Chester Basin, NS, Canada\n", + "osm query name: Gold River Health Centre, Chester Basin, NS, Canada\n", + "osm query street: 311 beech hill road, Chester Basin, NS, Canada\n", + "osm query city: Chester Basin, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1368: Guysborough Memorial Hospital, Guysborough, NS, Canada\n", + "osm query name: Guysborough Memorial Hospital, Guysborough, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1369: Hants Community Hospital, Windsor, NS, Canada\n", + "osm query name: Hants Community Hospital, Windsor, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1370: Inverness Consolidated Memorial Hospital, Inverness, NS, Canada\n", + "osm query name: Inverness Consolidated Memorial Hospital, Inverness, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1371: Lillian Fraser Memorial Hospital, Tatamagouche, NS, Canada\n", + "osm query name: Lillian Fraser Memorial Hospital, Tatamagouche, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1372: Lloyd E. Matheson Centre, Elmsdale, NS, Canada\n", + "osm query name: Lloyd E. Matheson Centre, Elmsdale, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1373: Medical Arts Building, Sydney, NS, Canada\n", + "osm query name: Medical Arts Building, Sydney, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1374: Membertou Sport & Wellness Centre, Membertou, NS, Canada\n", + "osm query name: Membertou Sport & Wellness Centre, Membertou, NS, Canada\n", + "osm query street: 107 membertou street, Membertou, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1375: Millbrook Health Centre , Truro, NS, Canada\n", + "osm query name: Millbrook Health Centre , Truro, NS, Canada\n", + "osm query street: 812 willow street, Truro, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1376: Mount Hope Building - Nova Scotia Hospital, Dartmouth, NS, Canada\n", + "osm query name: Mount Hope Building - Nova Scotia Hospital, Dartmouth, NS, Canada\n", + "osm query street: 300 pleasant street, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1377: Musquodoboit Valley Memorial Hospital, Middle Musquodoboit, NS, Canada\n", + "osm query name: Musquodoboit Valley Memorial Hospital, Middle Musquodoboit, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1378: New Germany and Area Medical Center, New Germany, NS, Canada\n", + "osm query name: New Germany and Area Medical Center, New Germany, NS, Canada\n", + "osm query street: 100 varner road, New Germany, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1379: New Hope, New Glasgow, NS, Canada\n", + "osm query name: New Hope, New Glasgow, NS, Canada\n", + "osm query street: 690 east river road, New Glasgow, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1380: New Waterford Consolidated Hospital, New Waterford, NS, Canada\n", + "osm query name: New Waterford Consolidated Hospital, New Waterford, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1381: North Cumberland Memorial Hospital, Pugwash, NS, Canada\n", + "osm query name: North Cumberland Memorial Hospital, Pugwash, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1382: Northside General Hospital, North Sydney, NS, Canada\n", + "osm query name: Northside General Hospital, North Sydney, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1383: NS Operational Stress Injury Clinic, Dartmouth, NS, Canada\n", + "osm query name: NS Operational Stress Injury Clinic, Dartmouth, NS, Canada\n", + "osm query street: 100 eileen stubbs avenue, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1384: Our Health Centre, Chester, NS, Canada\n", + "osm query name: Our Health Centre, Chester, NS, Canada\n", + "osm query street: 3769 nova scotia trunk 3, Chester, NS, Canada\n", + "osm query city: Chester, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1385: Paqtnkek Health Centre , Afton, NS, Canada\n", + "osm query name: Paqtnkek Health Centre , Afton, NS, Canada\n", + "osm query street: 128 sagamaw road, Afton, NS, Canada\n", + "osm query city: Afton, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1386: Pictou County Community Health Center, New Glasgow, NS, Canada\n", + "osm query name: Pictou County Community Health Center, New Glasgow, NS, Canada\n", + "osm query street: 690 east river road, New Glasgow, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1387: Pictou Landing Health Centre, Trenton, NS, Canada\n", + "osm query name: Pictou Landing Health Centre, Trenton, NS, Canada\n", + "osm query street: 19 maple street, Trenton, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1388: Prime Brook Site, Sydney, NS, Canada\n", + "osm query name: Prime Brook Site, Sydney, NS, Canada\n", + "osm query street: 795 alexandra street, Sydney, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1389: Provincial Wellness Court, Dartmouth, NS, Canada\n", + "osm query name: Provincial Wellness Court, Dartmouth, NS, Canada\n", + "osm query street: 277 pleasant street, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1390: Queen Square Building, Dartmouth, NS, Canada\n", + "osm query name: Queen Square Building, Dartmouth, NS, Canada\n", + "osm query street: 45 alderney drive, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1391: Queens General Hospital, Liverpool, NS, Canada\n", + "osm query name: Queens General Hospital, Liverpool, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1392: Roseway Hospital, Shelburne, NS, Canada\n", + "osm query name: Roseway Hospital, Shelburne, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1393: Sacred Heart Community Health Centre, Cheticamp, NS, Canada\n", + "osm query name: Sacred Heart Community Health Centre, Cheticamp, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1394: Simpson Landing - Nova Scotia Hospital, Dartmouth, NS, Canada\n", + "osm query name: Simpson Landing - Nova Scotia Hospital, Dartmouth, NS, Canada\n", + "osm query street: 304 pleasant street, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1395: Sipekne'katik Health Centre (Indian Brook), Indian Brook, NS, Canada\n", + "osm query name: Sipekne'katik Health Centre (Indian Brook), Indian Brook, NS, Canada\n", + "osm query street: 601 church street, Indian Brook, NS, Canada\n", + "osm query city: Indian Brook, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1396: Soldiers Memorial Hospital, Middleton, NS, Canada\n", + "osm query name: Soldiers Memorial Hospital, Middleton, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1397: South Cumberland Community Care Centre, Parrsboro, NS, Canada\n", + "osm query name: South Cumberland Community Care Centre, Parrsboro, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1398: South Shore Regional Hospital, Bridgewater, NS, Canada\n", + "osm query name: South Shore Regional Hospital, Bridgewater, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1399: Spryfield Community Wellness Centre , Halifax, NS, Canada\n", + "osm query name: Spryfield Community Wellness Centre , Halifax, NS, Canada\n", + "osm query street: 16 dentith road, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1400: St. Martha's Regional Hospital, Antigonish, NS, Canada\n", + "osm query name: St. Martha's Regional Hospital, Antigonish, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1401: St. Mary's Memorial Hospital, Sherbrooke, NS, Canada\n", + "osm query name: St. Mary's Memorial Hospital, Sherbrooke, NS, Canada\n", + "osm query street: 91 hospital road, Sherbrooke, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1402: Strait Richmond Hospital, Evanston, NS, Canada\n", + "osm query name: Strait Richmond Hospital, Evanston, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1403: Twin Oaks Memorial Hospital, Musquodoboit Harbour, NS, Canada\n", + "osm query name: Twin Oaks Memorial Hospital, Musquodoboit Harbour, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1404: Valley Regional Hospital, Kentville, NS, Canada\n", + "osm query name: Valley Regional Hospital, Kentville, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1405: Victoria County Memorial Hospital, Baddeck, NS, Canada\n", + "osm query name: Victoria County Memorial Hospital, Baddeck, NS, Canada\n", + "osm query street: 30 old margaree road, Baddeck, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1406: Virtual Only (telephone and/or online) , , NS, Canada\n", + "osm query name: Virtual Only (telephone and/or online) , , NS, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "1407: Wagmatcook Health Centre, Wagmatcook, NS, Canada\n", + "osm query name: Wagmatcook Health Centre, Wagmatcook, NS, Canada\n", + "osm query street: 47 humes rear w loop, Wagmatcook, NS, Canada\n", + "osm query city: Wagmatcook, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1408: Waycobah Health Centre, Whycocomagh, NS, Canada\n", + "osm query name: Waycobah Health Centre, Whycocomagh, NS, Canada\n", + "osm query street: 90 reservation road, Whycocomagh, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1409: We’koqma’q Theresa Cremo Memorial Health Centre, Whycocomagh, NS, Canada\n", + "osm query name: We’koqma’q Theresa Cremo Memorial Health Centre, Whycocomagh, NS, Canada\n", + "osm query street: 93 reservation road, Whycocomagh, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1410: Western Kings Memorial Health Centre, Berwick, NS, Canada\n", + "osm query name: Western Kings Memorial Health Centre, Berwick, NS, Canada\n", + "osm query street: 121 orchard street, Berwick, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1411: Yarmouth Regional Hospital, Yarmouth, NS, Canada\n", + "osm query name: Yarmouth Regional Hospital, Yarmouth, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1412: A.M. Guy Memorial Health Centre, Buchans, NL, Canada\n", + "osm query name: A.M. Guy Memorial Health Centre, Buchans, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Buchans, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1413: Baie Verte Peninsula Health Centre, Baie Verte, NL, Canada\n", + "osm query name: Baie Verte Peninsula Health Centre, Baie Verte, NL, Canada\n", + "osm query street: 7 hospital road, Baie Verte, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1414: Bay d'Espoir Community Health Centre, St. Alban's, NL, Canada\n", + "osm query name: Bay d'Espoir Community Health Centre, St. Alban's, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: St. Alban's, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1415: Belleoram Community Health Centre, Belleoram, NL, Canada\n", + "osm query name: Belleoram Community Health Centre, Belleoram, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Belleoram, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1416: Bell Place Community Health Centre, Gander, NL, Canada\n", + "osm query name: Bell Place Community Health Centre, Gander, NL, Canada\n", + "osm query street: 3 bell place, Gander, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1417: Bonnews Lodge, Badger's Quay, NL, Canada\n", + "osm query name: Bonnews Lodge, Badger's Quay, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Badger's Quay, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1418: Carmelite House, Grand Falls-Windsor, NL, Canada\n", + "osm query name: Carmelite House, Grand Falls-Windsor, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1419: Central Health Regional Office, Grand Falls-Windsor, NL, Canada\n", + "osm query name: Central Health Regional Office, Grand Falls-Windsor, NL, Canada\n", + "osm query street: 21 carmelite road, Grand Falls-Windsor, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1420: Central Newfoundland Regional Health Centre, Grand Falls-Windsor, NL, Canada\n", + "osm query name: Central Newfoundland Regional Health Centre, Grand Falls-Windsor, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1421: Centreville Community Health Centre, Centreville, NL, Canada\n", + "osm query name: Centreville Community Health Centre, Centreville, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Centreville, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1422: Change Islands Community Health Centre, Change Islands, NL, Canada\n", + "osm query name: Change Islands Community Health Centre, Change Islands, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Change Islands, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1423: Connaigre Peninsula Health Centre, Harbour Breton, NL, Canada\n", + "osm query name: Connaigre Peninsula Health Centre, Harbour Breton, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Harbour Breton, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1424: Dr. Brian Adams Memorial Community Health Centre, Gambo, NL, Canada\n", + "osm query name: Dr. Brian Adams Memorial Community Health Centre, Gambo, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Gambo, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1425: Dr. C.V. Smith Memorial Community Health Centre, Glovertown, NL, Canada\n", + "osm query name: Dr. C.V. Smith Memorial Community Health Centre, Glovertown, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Glovertown, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1426: Dr. Hugh Twomey Health Centre, Botwood, NL, Canada\n", + "osm query name: Dr. Hugh Twomey Health Centre, Botwood, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Botwood, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1427: Dr. Y. K. Jeon Kittiwake Health Centre, Brookfield, NL, Canada\n", + "osm query name: Dr. Y. K. Jeon Kittiwake Health Centre, Brookfield, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Brookfield, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1428: Eastport Community Health Centre, Eastport, NL, Canada\n", + "osm query name: Eastport Community Health Centre, Eastport, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Eastport, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1429: Exploits Community Health Centre, Botwood, NL, Canada\n", + "osm query name: Exploits Community Health Centre, Botwood, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1430: Fogo Island Health Centre, Fogo, NL, Canada\n", + "osm query name: Fogo Island Health Centre, Fogo, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1431: Gaultois Community Health Centre, Gaultois, NL, Canada\n", + "osm query name: Gaultois Community Health Centre, Gaultois, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Gaultois, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1432: Grand Falls-Windsor Community Health Centre , Grand Falls-Windsor, NL, Canada\n", + "osm query name: Grand Falls-Windsor Community Health Centre , Grand Falls-Windsor, NL, Canada\n", + "osm query street: 36 queensway, Grand Falls-Windsor, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1433: Green Bay Health Centre, Springdale, NL, Canada\n", + "osm query name: Green Bay Health Centre, Springdale, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1434: Hope Valley Centre Youth Treatment Centre, Grand Falls-Windsor, NL, Canada\n", + "osm query name: Hope Valley Centre Youth Treatment Centre, Grand Falls-Windsor, NL, Canada\n", + "osm query street: 50 union street, Grand Falls-Windsor, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1435: James Paton Memorial Regional Health Centre, Gander, NL, Canada\n", + "osm query name: James Paton Memorial Regional Health Centre, Gander, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1436: Lakeside Homes, Gander, NL, Canada\n", + "osm query name: Lakeside Homes, Gander, NL, Canada\n", + "osm query street: 95 airport boulevard, Gander, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1437: LaScie Community Health Centre, LaScie, NL, Canada\n", + "osm query name: LaScie Community Health Centre, LaScie, NL, Canada\n", + "osm query street: 412 main street, LaScie, NL, Canada\n", + "osm query city: LaScie, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1438: Lewisporte Community Health Centre, Lewisporte, NL, Canada\n", + "osm query name: Lewisporte Community Health Centre, Lewisporte, NL, Canada\n", + "osm query street: 21 centennial drive, Lewisporte, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1439: Lewisporte Health Centre, Lewisporte, NL, Canada\n", + "osm query name: Lewisporte Health Centre, Lewisporte, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Lewisporte, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1440: McCallum Community Health Centre, McCallum, NL, Canada\n", + "osm query name: McCallum Community Health Centre, McCallum, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: McCallum, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1441: Mose Ambrose Community Health Centre, Mose Ambrose, NL, Canada\n", + "osm query name: Mose Ambrose Community Health Centre, Mose Ambrose, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Mose Ambrose, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1442: Musgrave Harbour Community Health Centre, Musgrave Harbour, NL, Canada\n", + "osm query name: Musgrave Harbour Community Health Centre, Musgrave Harbour, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Musgrave Harbour, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1443: New World Island Community Health Centre, Summerford, NL, Canada\n", + "osm query name: New World Island Community Health Centre, Summerford, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Summerford, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1444: Notre Dame Bay Memorial Health Centre, Twillingate, NL, Canada\n", + "osm query name: Notre Dame Bay Memorial Health Centre, Twillingate, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Twillingate, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1445: Rencontre East Community Health Centre, Rencontre East, NL, Canada\n", + "osm query name: Rencontre East Community Health Centre, Rencontre East, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Rencontre East, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1446: Robert's Arm Community Health Centre, Robert's Arm, NL, Canada\n", + "osm query name: Robert's Arm Community Health Centre, Robert's Arm, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Robert's Arm, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1447: St. Alban's Community Health Centre, St. Alban's, NL, Canada\n", + "osm query name: St. Alban's Community Health Centre, St. Alban's, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: St. Alban's, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1448: St. Brendan's Community Health Centre, St. Brendan's, NL, Canada\n", + "osm query name: St. Brendan's Community Health Centre, St. Brendan's, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: St. Brendan's, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1449: Valley Vista Senior Citizens' Home, Springdale, NL, Canada\n", + "osm query name: Valley Vista Senior Citizens' Home, Springdale, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Springdale, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1450: Victoria Cove Community Health Centre, Victoria Cove, NL, Canada\n", + "osm query name: Victoria Cove Community Health Centre, Victoria Cove, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Victoria Cove, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1451: 1059244 ONTARIO INC. O/A NORTHVIEW SENIOR RESIDENCE, Hamilton, ON, Canada\n", + "osm query name: 1059244 ONTARIO INC. O/A NORTHVIEW SENIOR RESIDENCE, Hamilton, ON, Canada\n", + "osm query street: 19 aikman ave, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1452: 1099694 ONTARIO INC. O/A J & M REST HOME, Hamilton, ON, Canada\n", + "osm query name: 1099694 ONTARIO INC. O/A J & M REST HOME, Hamilton, ON, Canada\n", + "osm query street: 849 main st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1453: 1112824 ONTARIO LIMITED O/A MAPLE CREST MANOR, Hamilton, ON, Canada\n", + "osm query name: 1112824 ONTARIO LIMITED O/A MAPLE CREST MANOR, Hamilton, ON, Canada\n", + "osm query street: 904 king st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1454: 1112824 ONTARIO LIMITED O/A ST. ANDREW'S LODGE, Hamilton, ON, Canada\n", + "osm query name: 1112824 ONTARIO LIMITED O/A ST. ANDREW'S LODGE, Hamilton, ON, Canada\n", + "osm query street: 100 herkimer st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1455: 118 MARKET ST GP LTD O/A CAROLINE PLACE RETIREMENT RESIDENCE, Hamilton, ON, Canada\n", + "osm query name: 118 MARKET ST GP LTD O/A CAROLINE PLACE RETIREMENT RESIDENCE, Hamilton, ON, Canada\n", + "osm query street: 118 market st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1456: 1562576 ONTARIO INC, Hamilton, ON, Canada\n", + "osm query name: 1562576 ONTARIO INC, Hamilton, ON, Canada\n", + "osm query street: 130 bold st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1457: 1562576 ONTARIO INC, Hamilton, ON, Canada\n", + "osm query name: 1562576 ONTARIO INC, Hamilton, ON, Canada\n", + "osm query street: 132 bold st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1458: 1562576 ONTARIO INC., Hamilton, ON, Canada\n", + "osm query name: 1562576 ONTARIO INC., Hamilton, ON, Canada\n", + "osm query street: 7 blake st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1459: 1612711 ONTARIO INC. O/A VICTORIA MANOR I, Hamilton, ON, Canada\n", + "osm query name: 1612711 ONTARIO INC. O/A VICTORIA MANOR I, Hamilton, ON, Canada\n", + "osm query street: 121 victoria ave s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1460: 1612712 ONTARIO INC. O/A VICTORIA MANOR II, Hamilton, ON, Canada\n", + "osm query name: 1612712 ONTARIO INC. O/A VICTORIA MANOR II, Hamilton, ON, Canada\n", + "osm query street: 115 victoria ave s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1461: 1612714 ONTARIO INC. O/A CATHMAR MANOR, Hamilton, ON, Canada\n", + "osm query name: 1612714 ONTARIO INC. O/A CATHMAR MANOR, Hamilton, ON, Canada\n", + "osm query street: 236 catharine st n, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1462: 1617602 ONTARIO LTD O/A EVERGREEN MANOR, Hamilton, ON, Canada\n", + "osm query name: 1617602 ONTARIO LTD O/A EVERGREEN MANOR, Hamilton, ON, Canada\n", + "osm query street: 41 cathcart st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1463: 1775319 ONTARIO INC. o/a FAITH HOPE MANOR, Hamilton, ON, Canada\n", + "osm query name: 1775319 ONTARIO INC. o/a FAITH HOPE MANOR, Hamilton, ON, Canada\n", + "osm query street: 178 john st n, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1464: 1775319 ONTARIO INC. o/a VEROLEN'S REST HOME, Hamilton, ON, Canada\n", + "osm query name: 1775319 ONTARIO INC. o/a VEROLEN'S REST HOME, Hamilton, ON, Canada\n", + "osm query street: 106 catharine st s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1465: 1804248 ONTARIO INC O/A JERELDAY, Hamilton, ON, Canada\n", + "osm query name: 1804248 ONTARIO INC O/A JERELDAY, Hamilton, ON, Canada\n", + "osm query street: 418 main st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1466: 1804248 ONTARIO INC. O/A ST. CLAIR LODGING HOME, Hamilton, ON, Canada\n", + "osm query name: 1804248 ONTARIO INC. O/A ST. CLAIR LODGING HOME, Hamilton, ON, Canada\n", + "osm query street: 75 st. clair ave, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1467: 1856884 ONTARIO INC. O/A SUNRISE MANOR LODGING HOME, Hamilton, ON, Canada\n", + "osm query name: 1856884 ONTARIO INC. O/A SUNRISE MANOR LODGING HOME, Hamilton, ON, Canada\n", + "osm query street: 18 victoria ave n, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1468: 1857147 ONTARIO INC., Hamilton, ON, Canada\n", + "osm query name: 1857147 ONTARIO INC., Hamilton, ON, Canada\n", + "osm query street: 160 park st s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1469: 1869423 ONTARIO LTD. o/a Yorkville Retirement Residence, Dundas, ON, Canada\n", + "osm query name: 1869423 ONTARIO LTD. o/a Yorkville Retirement Residence, Dundas, ON, Canada\n", + "osm query street: 211 york rd, Dundas, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1470: 1906293 ONTARIO INC. o/a MABUHAY RESIDENTIAL CARE FACILITY, Hamilton, ON, Canada\n", + "osm query name: 1906293 ONTARIO INC. o/a MABUHAY RESIDENTIAL CARE FACILITY, Hamilton, ON, Canada\n", + "osm query street: 325 wentworth st n, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1471: 2094509 ONTARIO INC. O/A MAXWELL'S SECOND LEVEL LODGING HOME, Hamilton, ON, Canada\n", + "osm query name: 2094509 ONTARIO INC. O/A MAXWELL'S SECOND LEVEL LODGING HOME, Hamilton, ON, Canada\n", + "osm query street: 274 bay st s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1472: 2178949 ONTARIO INC O/A ABERDEEN GARDENS, Hamilton, ON, Canada\n", + "osm query name: 2178949 ONTARIO INC O/A ABERDEEN GARDENS, Hamilton, ON, Canada\n", + "osm query street: 330 dundurn st s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1473: 2244786 ONTARIO INC. O/A ORCHARD TERRACE CARE CENTRE FACILITY INC, Stoney creek, ON, Canada\n", + "osm query name: 2244786 ONTARIO INC. O/A ORCHARD TERRACE CARE CENTRE FACILITY INC, Stoney creek, ON, Canada\n", + "osm query street: 199 glover rd, Stoney creek, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1474: 2430866 ONTARIO INC o/a TARA RETIREMENT HOME INC., Hamilton, ON, Canada\n", + "osm query name: 2430866 ONTARIO INC o/a TARA RETIREMENT HOME INC., Hamilton, ON, Canada\n", + "osm query street: 843 mohawk rd e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1475: 2556936 ONTARIO INC. o/a SUNNYSIDE LODGE, Stoney creek, ON, Canada\n", + "osm query name: 2556936 ONTARIO INC. o/a SUNNYSIDE LODGE, Stoney creek, ON, Canada\n", + "osm query street: 11 lake avenue dr, Stoney creek, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1476: 346 - 348 QUEENSTON ROAD HAMILTON HOLDINGS INC. O/A QUEENSTON RETIREMENT HOME, Hamilton, ON, Canada\n", + "osm query name: 346 - 348 QUEENSTON ROAD HAMILTON HOLDINGS INC. O/A QUEENSTON RETIREMENT HOME, Hamilton, ON, Canada\n", + "osm query street: 346 queenston rd, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1477: AMICA AT STONEY CREEK, Stoney creek, ON, Canada\n", + "osm query name: AMICA AT STONEY CREEK, Stoney creek, ON, Canada\n", + "osm query street: 135 king st e, Stoney creek, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1478: AMICA DUNDAS INC., Dundas, ON, Canada\n", + "osm query name: AMICA DUNDAS INC., Dundas, ON, Canada\n", + "osm query street: 50 hatt st, Dundas, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1479: ANCHOR ASSOCIATION, Hamilton, ON, Canada\n", + "osm query name: ANCHOR ASSOCIATION, Hamilton, ON, Canada\n", + "osm query street: 42 spadara dr, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1480: BARTON RETIREMENT INC. O/A THE WELLINGTON, Hamilton, ON, Canada\n", + "osm query name: BARTON RETIREMENT INC. O/A THE WELLINGTON, Hamilton, ON, Canada\n", + "osm query street: 1430 upper wellington st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1481: BERTRAM PLACE RETIREMENT LIVING CENTRE INC., Dundas, ON, Canada\n", + "osm query name: BERTRAM PLACE RETIREMENT LIVING CENTRE INC., Dundas, ON, Canada\n", + "osm query street: 21 hatt st, Dundas, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1482: BLACKADAR RETIREMENT RESIDENCE, Dundas, ON, Canada\n", + "osm query name: BLACKADAR RETIREMENT RESIDENCE, Dundas, ON, Canada\n", + "osm query street: 99 creighton rd, Dundas, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1483: BROCK LODGE, Hamilton, ON, Canada\n", + "osm query name: BROCK LODGE, Hamilton, ON, Canada\n", + "osm query street: 949 king st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1484: C. MORE'S VILLA INC., Hamilton, ON, Canada\n", + "osm query name: C. MORE'S VILLA INC., Hamilton, ON, Canada\n", + "osm query street: 60 west ave s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1485: CARRINGTON PLACE FACILITY INC. O/A CARRINGTON PLACE RETIREMENT, Ancaster, ON, Canada\n", + "osm query name: CARRINGTON PLACE FACILITY INC. O/A CARRINGTON PLACE RETIREMENT, Ancaster, ON, Canada\n", + "osm query street: 75 dunham dr, Ancaster, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1486: CHARTWELL GEORGIAN RETIREMENT RESIDENCE, Dundas, ON, Canada\n", + "osm query name: CHARTWELL GEORGIAN RETIREMENT RESIDENCE, Dundas, ON, Canada\n", + "osm query street: 255 governors rd, Dundas, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1487: CHARTWELL MASTER CARE LP, Hamilton, ON, Canada\n", + "osm query name: CHARTWELL MASTER CARE LP, Hamilton, ON, Canada\n", + "osm query street: 460 rymal rd w, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1488: CITY HOUSING HAMILTON CORPORATION O/A FIRST PLACE, Hamilton, ON, Canada\n", + "osm query name: CITY HOUSING HAMILTON CORPORATION O/A FIRST PLACE, Hamilton, ON, Canada\n", + "osm query street: 350 king st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1489: CLS ON MAIN RETIREMENT HOME LIMITED, Hamilton, ON, Canada\n", + "osm query name: CLS ON MAIN RETIREMENT HOME LIMITED, Hamilton, ON, Canada\n", + "osm query street: 12 lotus ave, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1490: COMMUNITY RESIDENTIAL CARE HOMES INC., Hamilton, ON, Canada\n", + "osm query name: COMMUNITY RESIDENTIAL CARE HOMES INC., Hamilton, ON, Canada\n", + "osm query street: 153 george st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1491: CONNECT HAMILTON, Stoney creek, ON, Canada\n", + "osm query name: CONNECT HAMILTON, Stoney creek, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1492: DELTACORP DEVELOPMENTS INC. O/A THE MEADOWLANDS, Ancaster, ON, Canada\n", + "osm query name: DELTACORP DEVELOPMENTS INC. O/A THE MEADOWLANDS, Ancaster, ON, Canada\n", + "osm query street: 1248 mohawk rd, Ancaster, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1493: DENHOLME MANOR, Hamilton, ON, Canada\n", + "osm query name: DENHOLME MANOR, Hamilton, ON, Canada\n", + "osm query street: 144 robinson st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1494: DROMORE SENIOR SERVICES, Flamborough, ON, Canada\n", + "osm query name: DROMORE SENIOR SERVICES, Flamborough, ON, Canada\n", + "osm query street: 408 rock chapel rd, Flamborough, ON, Canada\n", + "osm query city: Flamborough, ON, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1495: DUNDAS RETIREMENT PLACE INC., Dundas, ON, Canada\n", + "osm query name: DUNDAS RETIREMENT PLACE INC., Dundas, ON, Canada\n", + "osm query street: 33 main st, Dundas, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1496: EAST AVENUE PLACE, Hamilton, ON, Canada\n", + "osm query name: EAST AVENUE PLACE, Hamilton, ON, Canada\n", + "osm query street: 65 east ave s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1497: ELM VILLA RETIREMENT HOMES INC, Dundas, ON, Canada\n", + "osm query name: ELM VILLA RETIREMENT HOMES INC, Dundas, ON, Canada\n", + "osm query street: 12 melville st, Dundas, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1498: FAITH CARE VILLA, Hamilton, ON, Canada\n", + "osm query name: FAITH CARE VILLA, Hamilton, ON, Canada\n", + "osm query street: 2129 king st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1499: GAGE PARK LODGE, Hamilton, ON, Canada\n", + "osm query name: GAGE PARK LODGE, Hamilton, ON, Canada\n", + "osm query street: 995 main st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1500: GOVERNOR'S MANOR, Dundas, ON, Canada\n", + "osm query name: GOVERNOR'S MANOR, Dundas, ON, Canada\n", + "osm query street: 37 ogilvie st, Dundas, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1501: GRADATIM RETIREMENT HOME, Hamilton, ON, Canada\n", + "osm query name: GRADATIM RETIREMENT HOME, Hamilton, ON, Canada\n", + "osm query street: 145 market st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1502: HERITAGE GREEN RETIREMENT CENTRE (SEVENTH DAY ADVENTIST CHURCH), Stoney creek, ON, Canada\n", + "osm query name: HERITAGE GREEN RETIREMENT CENTRE (SEVENTH DAY ADVENTIST CHURCH), Stoney creek, ON, Canada\n", + "osm query street: 351 isaac brock dr, Stoney creek, ON, Canada\n", + "osm query city: Stoney creek, ON, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1503: HIGHGATE RESIDENCE INC, Ancaster, ON, Canada\n", + "osm query name: HIGHGATE RESIDENCE INC, Ancaster, ON, Canada\n", + "osm query street: 325 fiddlers green rd, Ancaster, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1504: INDWELL COMMUNITY HOMES, Hamilton, ON, Canada\n", + "osm query name: INDWELL COMMUNITY HOMES, Hamilton, ON, Canada\n", + "osm query street: 118 wentworth st s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1505: JOHNJULES MANAGEMENT LTD., Hamilton, ON, Canada\n", + "osm query name: JOHNJULES MANAGEMENT LTD., Hamilton, ON, Canada\n", + "osm query street: 94 wellington st s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1506: KINGSBERRY PLACE LTD., Hamilton, ON, Canada\n", + "osm query name: KINGSBERRY PLACE LTD., Hamilton, ON, Canada\n", + "osm query street: 1221 limeridge rd e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1507: LAKEVIEW RETIREMENT CENTRE INC., Stoney creek, ON, Canada\n", + "osm query name: LAKEVIEW RETIREMENT CENTRE INC., Stoney creek, ON, Canada\n", + "osm query street: 337 hwy 8, Stoney creek, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1508: LIFETIMES LIVING INC. C/O LIFETIMES LIMITED PARTNERSHIP O/A THE CARLISLE RETIREMENT RESIDENCE, Hamilton, ON, Canada\n", + "osm query name: LIFETIMES LIVING INC. C/O LIFETIMES LIMITED PARTNERSHIP O/A THE CARLISLE RETIREMENT RESIDENCE, Hamilton, ON, Canada\n", + "osm query street: 467 main st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1509: M.G.B.E. HAMILTON INC. - KELLY'S RESIDENCE RUTHERFORD, Hamilton, ON, Canada\n", + "osm query name: M.G.B.E. HAMILTON INC. - KELLY'S RESIDENCE RUTHERFORD, Hamilton, ON, Canada\n", + "osm query street: 18 rutherford ave, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1510: M.G.B.E. MAIN INC. o/a KELLY'S RESIDENCE - MAIN, Hamilton, ON, Canada\n", + "osm query name: M.G.B.E. MAIN INC. o/a KELLY'S RESIDENCE - MAIN, Hamilton, ON, Canada\n", + "osm query street: 650 main st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1511: M.G.B.E. PROCTOR INC. o/a KELLY'S RESIDENCE - PROCTOR, Hamilton, ON, Canada\n", + "osm query name: M.G.B.E. PROCTOR INC. o/a KELLY'S RESIDENCE - PROCTOR, Hamilton, ON, Canada\n", + "osm query street: 81 proctor blvd, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1512: M.G.B.E. SHERMAN INC o/a KELLY'S RESIDENCE, Hamilton, ON, Canada\n", + "osm query name: M.G.B.E. SHERMAN INC o/a KELLY'S RESIDENCE, Hamilton, ON, Canada\n", + "osm query street: 55 sherman ave s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1513: M.G.B.E. STINSON INC. O/A KELLY'S RESIDENCE, Hamilton, ON, Canada\n", + "osm query name: M.G.B.E. STINSON INC. O/A KELLY'S RESIDENCE, Hamilton, ON, Canada\n", + "osm query street: 110 stinson st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1514: MAIN EAST REST HOME INC., Hamilton, ON, Canada\n", + "osm query name: MAIN EAST REST HOME INC., Hamilton, ON, Canada\n", + "osm query street: 939 main st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1515: MAPLE RETIREMENT HOMES INC, Hamilton, ON, Canada\n", + "osm query name: MAPLE RETIREMENT HOMES INC, Hamilton, ON, Canada\n", + "osm query street: 1605 main st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1516: MILTON BROWN ENTERPRISES LTD. O/A ST. PATRICK'S LODGE, Hamilton, ON, Canada\n", + "osm query name: MILTON BROWN ENTERPRISES LTD. O/A ST. PATRICK'S LODGE, Hamilton, ON, Canada\n", + "osm query street: 90 emerald st s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1517: OLGA STELLA MANOR CORPORATION O/A OLGA STELLA MANOR, Hamilton, ON, Canada\n", + "osm query name: OLGA STELLA MANOR CORPORATION O/A OLGA STELLA MANOR, Hamilton, ON, Canada\n", + "osm query street: 66 skyview dr, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1518: PAT'S LODGING RESIDENTIAL CARE HOME INC., Hamilton, ON, Canada\n", + "osm query name: PAT'S LODGING RESIDENTIAL CARE HOME INC., Hamilton, ON, Canada\n", + "osm query street: 237 herkimer st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1519: QUEENS LODGE, Hamilton, ON, Canada\n", + "osm query name: QUEENS LODGE, Hamilton, ON, Canada\n", + "osm query street: 36 queen st s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1520: RYKKA CARE CENTRE o/a NEW VILLAGE RETIREMENT, Stoney creek, ON, Canada\n", + "osm query name: RYKKA CARE CENTRE o/a NEW VILLAGE RETIREMENT, Stoney creek, ON, Canada\n", + "osm query street: 490 hwy 8, Stoney creek, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1521: SAMPAGUITA LODGING & REST HOME INC., Hamilton, ON, Canada\n", + "osm query name: SAMPAGUITA LODGING & REST HOME INC., Hamilton, ON, Canada\n", + "osm query street: 265 bay st s, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1522: SCHLEGEL VILLAGES INC. O/A THE VILLAGE OF WENTWORTH HEIGHTS, Hamilton, ON, Canada\n", + "osm query name: SCHLEGEL VILLAGES INC. O/A THE VILLAGE OF WENTWORTH HEIGHTS, Hamilton, ON, Canada\n", + "osm query street: 1620 upper wentworth st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1523: SEASONS RETIREMENT COMMUNITIES (STONEY CREEK) GP INC., Stoney creek, ON, Canada\n", + "osm query name: SEASONS RETIREMENT COMMUNITIES (STONEY CREEK) GP INC., Stoney creek, ON, Canada\n", + "osm query street: 8 shoreview pl, Stoney creek, ON, Canada\n", + "osm query city: Stoney creek, ON, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1524: THE CARDINAL RETIREMENT RESIDENCE (1982398 Ontario Inc), Hamilton, ON, Canada\n", + "osm query name: THE CARDINAL RETIREMENT RESIDENCE (1982398 Ontario Inc), Hamilton, ON, Canada\n", + "osm query street: 10 herkimer st, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1525: UNICARE LIMITED PARTNERSHIP O/A ABINGTON COURT RETIREMENT RESIDENCE, Hamilton, ON, Canada\n", + "osm query name: UNICARE LIMITED PARTNERSHIP O/A ABINGTON COURT RETIREMENT RESIDENCE, Hamilton, ON, Canada\n", + "osm query street: 1500 main st e, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1526: VENIKE INVESTMENTS INC. O/A NOYEL LODGE, Dundas, ON, Canada\n", + "osm query name: VENIKE INVESTMENTS INC. O/A NOYEL LODGE, Dundas, ON, Canada\n", + "osm query street: 53 park st w, Dundas, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1527: VILLA ITALIA RETIREMENT LIVING, Hamilton, ON, Canada\n", + "osm query name: VILLA ITALIA RETIREMENT LIVING, Hamilton, ON, Canada\n", + "osm query street: 530 upper paradise rd, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1528: WEST VALLEY SUITES INC., Hamilton, ON, Canada\n", + "osm query name: WEST VALLEY SUITES INC., Hamilton, ON, Canada\n", + "osm query street: 809 king st w, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1529: WESTMOUNT TERRACE INC., Hamilton, ON, Canada\n", + "osm query name: WESTMOUNT TERRACE INC., Hamilton, ON, Canada\n", + "osm query street: 723 rymal rd w, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1530: YWCA OF HAMILTON, Hamilton, ON, Canada\n", + "osm query name: YWCA OF HAMILTON, Hamilton, ON, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1531: ZEST RETIREMENT RESIDENCE INC. O/A ST. ELIZABETH RETIREMENT RESIDENCE, Hamilton, ON, Canada\n", + "osm query name: ZEST RETIREMENT RESIDENCE INC. O/A ST. ELIZABETH RETIREMENT RESIDENCE, Hamilton, ON, Canada\n", + "osm query street: 391 rymal rd w, Hamilton, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1532: Retirement Concepts — Rosemary Heights Seniors Village, Surrey, BC, Canada\n", + "osm query name: Retirement Concepts — Rosemary Heights Seniors Village, Surrey, BC, Canada\n", + "no street address in dataframe\n", + "osm query city: Surrey, BC, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1533: St. Boniface Hospital, Winnipeg, MB, Canada\n", + "osm query name: St. Boniface Hospital, Winnipeg, MB, Canada\n", + "osm query street: 409 taché avenue, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1534: Concordia Hospital, Winnipeg, MB, Canada\n", + "osm query name: Concordia Hospital, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1535: Grace Hospital, Winnipeg, MB, Canada\n", + "osm query name: Grace Hospital, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1536: Seven Oaks General Hospital, Winnipeg, MB, Canada\n", + "osm query name: Seven Oaks General Hospital, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1537: Victoria General Hospital, Winnipeg, MB, Canada\n", + "osm query name: Victoria General Hospital, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1538: Churchill Health Centre, Winnipeg, MB, Canada\n", + "osm query name: Churchill Health Centre, Winnipeg, MB, Canada\n", + "osm query street: 162 la vérendrye avenue, Winnipeg, MB, Canada\n", + "osm query city: Winnipeg, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1539: Deer Lodge Centre, Winnipeg, MB, Canada\n", + "osm query name: Deer Lodge Centre, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1540: Misericordia Health Centre, Winnipeg, MB, Canada\n", + "osm query name: Misericordia Health Centre, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1541: Pan Am Clinic, Winnipeg, MB, Canada\n", + "osm query name: Pan Am Clinic, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1542: Riverview Health Centre, Winnipeg, MB, Canada\n", + "osm query name: Riverview Health Centre, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1543: St.Amant, Winnipeg, MB, Canada\n", + "osm query name: St.Amant, Winnipeg, MB, Canada\n", + "osm query street: 440 river road, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1544: ACCESS Downtown, Winnipeg, MB, Canada\n", + "osm query name: ACCESS Downtown, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1545: ACCESS Fort Garry, Winnipeg, MB, Canada\n", + "osm query name: ACCESS Fort Garry, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1546: ACCESS NorWest, Winnipeg, MB, Canada\n", + "osm query name: ACCESS NorWest, Winnipeg, MB, Canada\n", + "osm query street: 785 keewatin street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1547: ACCESS River East, Winnipeg, MB, Canada\n", + "osm query name: ACCESS River East, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1548: ACCESS St. Boniface, Winnipeg, MB, Canada\n", + "osm query name: ACCESS St. Boniface, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1549: ACCESS Transcona, Winnipeg, MB, Canada\n", + "osm query name: ACCESS Transcona, Winnipeg, MB, Canada\n", + "osm query street: 845 regent avenue west, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1550: ACCESS Winnipeg West, Winnipeg, MB, Canada\n", + "osm query name: ACCESS Winnipeg West, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1551: Inkster, Winnipeg, MB, Canada\n", + "osm query name: Inkster, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1552: Downtown West Community Health & Social Services Centre, Winnipeg, MB, Canada\n", + "osm query name: Downtown West Community Health & Social Services Centre, Winnipeg, MB, Canada\n", + "osm query street: 755 portage ave, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1553: Community Health and Social Services Centre, Winnipeg, MB, Canada\n", + "osm query name: Community Health and Social Services Centre, Winnipeg, MB, Canada\n", + "osm query street: 755 portage avenue, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1554: WRHA Point Douglas, Winnipeg, MB, Canada\n", + "osm query name: WRHA Point Douglas, Winnipeg, MB, Canada\n", + "osm query street: 601 aikins street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1555: Winnipeg West Integrated Health & Social Services, Winnipeg, MB, Canada\n", + "osm query name: Winnipeg West Integrated Health & Social Services, Winnipeg, MB, Canada\n", + "osm query street: 280 booth drive 204-940, Winnipeg, MB, Canada\n", + "osm query city: Winnipeg, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1556: WRHA Seven Oaks, Winnipeg, MB, Canada\n", + "osm query name: WRHA Seven Oaks, Winnipeg, MB, Canada\n", + "osm query street: 1050 leila avenue, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1557: Centre de santé Saint-Boniface, Winnipeg, MB, Canada\n", + "osm query name: Centre de santé Saint-Boniface, Winnipeg, MB, Canada\n", + "no street address in dataframe\n", + "osm query city: Winnipeg, MB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1558: Abbie J. Lane Memorial Building - QEII , Halifax, NS, Canada\n", + "osm query name: Abbie J. Lane Memorial Building - QEII , Halifax, NS, Canada\n", + "osm query street: 5909 veterans' memorial lane, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1559: Aberdeen Blood Collection , New Glasgow, NS, Canada\n", + "osm query name: Aberdeen Blood Collection , New Glasgow, NS, Canada\n", + "osm query street: 678 east river road, New Glasgow, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1560: Aberdeen Hospital , New Glasgow, NS, Canada\n", + "osm query name: Aberdeen Hospital , New Glasgow, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1561: All Saints Springhill Hospital , Springhill, NS, Canada\n", + "osm query name: All Saints Springhill Hospital , Springhill, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1562: Annapolis Community Health Centre , Annapolis Royal, NS, Canada\n", + "osm query name: Annapolis Community Health Centre , Annapolis Royal, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1563: Barrington Health Centre , Barrington Passage, NS, Canada\n", + "osm query name: Barrington Health Centre , Barrington Passage, NS, Canada\n", + "osm query street: 3695 highway, Barrington Passage, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1564: Bayers Road Centre , Halifax, NS, Canada\n", + "osm query name: Bayers Road Centre , Halifax, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1565: Bayview Memorial Health Centre , Advocate Harbour, NS, Canada\n", + "osm query name: Bayview Memorial Health Centre , Advocate Harbour, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1566: Bethune Building - QEII , Halifax, NS, Canada\n", + "osm query name: Bethune Building - QEII , Halifax, NS, Canada\n", + "osm query street: 1276 south park street, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1567: Bridgewater & Area Family Health Centre , Bridgewater, NS, Canada\n", + "osm query name: Bridgewater & Area Family Health Centre , Bridgewater, NS, Canada\n", + "osm query street: 42 glen allan drive, Bridgewater, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1568: Buchanan Memorial Community Health Centre , Neils Harbour, NS, Canada\n", + "osm query name: Buchanan Memorial Community Health Centre , Neils Harbour, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1569: Camp Hill Veterans Memorial Building - QEII , Halifax, NS, Canada\n", + "osm query name: Camp Hill Veterans Memorial Building - QEII , Halifax, NS, Canada\n", + "osm query street: 5955 veterans memorial lane, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1570: Cape Breton Regional Hospital , Sydney, NS, Canada\n", + "osm query name: Cape Breton Regional Hospital , Sydney, NS, Canada\n", + "osm query street: 1482 george street, Sydney, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1571: Centennial Building - QEII , Halifax, NS, Canada\n", + "osm query name: Centennial Building - QEII , Halifax, NS, Canada\n", + "osm query street: 1276 south park street, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1572: Centre for Clinical Research - QEII , Halifax, NS, Canada\n", + "osm query name: Centre for Clinical Research - QEII , Halifax, NS, Canada\n", + "osm query street: 5790 university avenue, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1573: Chipman Building , Kentville, NS, Canada\n", + "osm query name: Chipman Building , Kentville, NS, Canada\n", + "osm query street: 5 chipman drive, Kentville, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1574: Clare Health Centre , Meteghan Centre, NS, Canada\n", + "osm query name: Clare Health Centre , Meteghan Centre, NS, Canada\n", + "osm query street: 8559 highway 1, Meteghan Centre, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1575: Cobequid Community Health Centre , Lower Sackville, NS, Canada\n", + "osm query name: Cobequid Community Health Centre , Lower Sackville, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1576: Colchester East Hants Health Centre , Truro, NS, Canada\n", + "osm query name: Colchester East Hants Health Centre , Truro, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1577: Cole Harbour Place , Dartmouth, NS, Canada\n", + "osm query name: Cole Harbour Place , Dartmouth, NS, Canada\n", + "osm query street: 51 forest hills parkway, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1578: Cumberland Regional Health Care Centre , Amherst, NS, Canada\n", + "osm query name: Cumberland Regional Health Care Centre , Amherst, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1579: Dartmouth Drive-Thru Blood Collection , Dartmouth, NS, Canada\n", + "osm query name: Dartmouth Drive-Thru Blood Collection , Dartmouth, NS, Canada\n", + "osm query street: 7 mt. hope ave, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1580: Dartmouth General Hospital , Dartmouth, NS, Canada\n", + "osm query name: Dartmouth General Hospital , Dartmouth, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1581: Dawson Centre , Bridgewater, NS, Canada\n", + "osm query name: Dawson Centre , Bridgewater, NS, Canada\n", + "osm query street: 197 dufferin street, Bridgewater, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1582: Dickson Building - QEII , Halifax, NS, Canada\n", + "osm query name: Dickson Building - QEII , Halifax, NS, Canada\n", + "osm query street: 5820 university avenue, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1583: Digby General Hospital , Digby, NS, Canada\n", + "osm query name: Digby General Hospital , Digby, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1584: East Dartmouth Community Centre , Dartmouth, NS, Canada\n", + "osm query name: East Dartmouth Community Centre , Dartmouth, NS, Canada\n", + "osm query street: 50 caledonia road, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1585: Eastern Kings Memorial Community Health Centre , Wolfville, NS, Canada\n", + "osm query name: Eastern Kings Memorial Community Health Centre , Wolfville, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1586: Eastern Memorial Hospital , Canso, NS, Canada\n", + "osm query name: Eastern Memorial Hospital , Canso, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1587: Eastern Shore Memorial Hospital , Sheet Harbour, NS, Canada\n", + "osm query name: Eastern Shore Memorial Hospital , Sheet Harbour, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1588: Eskasoni Community Health Centre , Eskasoni, NS, Canada\n", + "osm query name: Eskasoni Community Health Centre , Eskasoni, NS, Canada\n", + "osm query street: 44 spencer's lane, Eskasoni, NS, Canada\n", + "osm query city: Eskasoni, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1589: Fishermen's Memorial Hospital , Lunenburg, NS, Canada\n", + "osm query name: Fishermen's Memorial Hospital , Lunenburg, NS, Canada\n", + "osm query street: 14 high street, Lunenburg, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1590: Glace Bay Hospital , Glace Bay, NS, Canada\n", + "osm query name: Glace Bay Hospital , Glace Bay, NS, Canada\n", + "osm query street: 300 south street, Glace Bay, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1591: Guysborough Memorial Hospital , Guysborough Co., NS, Canada\n", + "osm query name: Guysborough Memorial Hospital , Guysborough Co., NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1592: Halifax Infirmary Robie Street Entrance - QEII , Halifax, NS, Canada\n", + "osm query name: Halifax Infirmary Robie Street Entrance - QEII , Halifax, NS, Canada\n", + "osm query street: 1799 robie street, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1593: Halifax Infirmary Summer Street Entrance - QEII , Halifax, NS, Canada\n", + "osm query name: Halifax Infirmary Summer Street Entrance - QEII , Halifax, NS, Canada\n", + "osm query street: 1796 summer street, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1594: Hants Community Hospital , Windsor, NS, Canada\n", + "osm query name: Hants Community Hospital , Windsor, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1595: Harbourview Hospital , Sydney Mines, NS, Canada\n", + "osm query name: Harbourview Hospital , Sydney Mines, NS, Canada\n", + "osm query street: 22 richard street, Sydney Mines, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1596: Indian Brook (Sipekne'katik) Health Centre , Indian Brook, NS, Canada\n", + "osm query name: Indian Brook (Sipekne'katik) Health Centre , Indian Brook, NS, Canada\n", + "osm query street: 522 church st., Indian Brook, NS, Canada\n", + "osm query city: Indian Brook, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1597: Integrated Chronic Care Service , Fall River, NS, Canada\n", + "osm query name: Integrated Chronic Care Service , Fall River, NS, Canada\n", + "osm query street: 3064 highway 2, Fall River, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1598: Inverness Consolidated Memorial Hospital , Inverness, NS, Canada\n", + "osm query name: Inverness Consolidated Memorial Hospital , Inverness, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1599: Islands Health Centre, Freeport , Freeport, NS, Canada\n", + "osm query name: Islands Health Centre, Freeport , Freeport, NS, Canada\n", + "osm query street: 72 highway 217, Freeport, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1600: Joseph Howe Centre , Halifax, NS, Canada\n", + "osm query name: Joseph Howe Centre , Halifax, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1601: Lillian Fraser Memorial Hospital , Tatamagouche, NS, Canada\n", + "osm query name: Lillian Fraser Memorial Hospital , Tatamagouche, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1602: Lloyd E. Matheson Centre , Elmsdale, NS, Canada\n", + "osm query name: Lloyd E. Matheson Centre , Elmsdale, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1603: Lockeport Medical Centre , Lockeport, NS, Canada\n", + "osm query name: Lockeport Medical Centre , Lockeport, NS, Canada\n", + "osm query street: 44 spruce street, Lockeport, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1604: Lunenburg Family Health , Lunenburg, NS, Canada\n", + "osm query name: Lunenburg Family Health , Lunenburg, NS, Canada\n", + "osm query street: 42 high street, Lunenburg, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1605: Mackenzie Building - QEII , Halifax, NS, Canada\n", + "osm query name: Mackenzie Building - QEII , Halifax, NS, Canada\n", + "osm query street: 5788 university avenue, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1606: Membertou Health and Wellness Centre , Membertou, NS, Canada\n", + "osm query name: Membertou Health and Wellness Centre , Membertou, NS, Canada\n", + "osm query street: 107 membertou street, Membertou, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1607: Mumford Professional Centre , Halifax, NS, Canada\n", + "osm query name: Mumford Professional Centre , Halifax, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1608: Musquodoboit Valley Memorial Hospital , Middle Musquodoboit, NS, Canada\n", + "osm query name: Musquodoboit Valley Memorial Hospital , Middle Musquodoboit, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1609: New Waterford Consolidated Hospital , New Waterford, NS, Canada\n", + "osm query name: New Waterford Consolidated Hospital , New Waterford, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1610: North Cumberland Memorial Hospital , Pugwash, NS, Canada\n", + "osm query name: North Cumberland Memorial Hospital , Pugwash, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1611: North Preston Community Centre , North Preston, NS, Canada\n", + "osm query name: North Preston Community Centre , North Preston, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1612: North Queens Community Health Centre , Caledonia, NS, Canada\n", + "osm query name: North Queens Community Health Centre , Caledonia, NS, Canada\n", + "osm query street: 9698 highway 8, Caledonia, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1613: Northside General Hospital , North Sydney, NS, Canada\n", + "osm query name: Northside General Hospital , North Sydney, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1614: Nova Scotia Rehabilitation and Arthritis Centre - QEII , Halifax, NS, Canada\n", + "osm query name: Nova Scotia Rehabilitation and Arthritis Centre - QEII , Halifax, NS, Canada\n", + "osm query street: 1341 summer street, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1615: Our Health Centre , Chester, NS, Canada\n", + "osm query name: Our Health Centre , Chester, NS, Canada\n", + "osm query street: 3769 nova scotia trunk 3, Chester, NS, Canada\n", + "osm query city: Chester, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1616: Pictou West Health Centre , Pictou, NS, Canada\n", + "osm query name: Pictou West Health Centre , Pictou, NS, Canada\n", + "osm query street: 300 west river rd., Pictou, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1617: Public Health Services - Burnside , Dartmouth, NS, Canada\n", + "osm query name: Public Health Services - Burnside , Dartmouth, NS, Canada\n", + "osm query street: 7 mellor avenue, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1618: Queens General Hospital , Liverpool, NS, Canada\n", + "osm query name: Queens General Hospital , Liverpool, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1619: River Hebert Blood Collection , River Hebert, NS, Canada\n", + "osm query name: River Hebert Blood Collection , River Hebert, NS, Canada\n", + "osm query street: 3615 barronsfield rd., River Hebert, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1620: Roseway Hospital , Shelburne, NS, Canada\n", + "osm query name: Roseway Hospital , Shelburne, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1621: Sacred Heart Community Health Centre , Cheticamp, NS, Canada\n", + "osm query name: Sacred Heart Community Health Centre , Cheticamp, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1622: Soldiers Memorial Hospital , Middleton, NS, Canada\n", + "osm query name: Soldiers Memorial Hospital , Middleton, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1623: South Cumberland Community Care Centre , Parrsboro, NS, Canada\n", + "osm query name: South Cumberland Community Care Centre , Parrsboro, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1624: South Shore Regional Hospital , Bridgewater, NS, Canada\n", + "osm query name: South Shore Regional Hospital , Bridgewater, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1625: Spryfield Shopping Centre - Community Wellness Centre , Halifax, NS, Canada\n", + "osm query name: Spryfield Shopping Centre - Community Wellness Centre , Halifax, NS, Canada\n", + "osm query street: 16 dentith road, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1626: St. Margaret's Square , Tantallon, NS, Canada\n", + "osm query name: St. Margaret's Square , Tantallon, NS, Canada\n", + "osm query street: 5110 st. margaret's bay road, Tantallon, NS, Canada\n", + "osm query city: Tantallon, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1627: St. Martha's Regional Hospital , Antigonish, NS, Canada\n", + "osm query name: St. Martha's Regional Hospital , Antigonish, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1628: St. Mary's Memorial Hospital , Sherbrooke, NS, Canada\n", + "osm query name: St. Mary's Memorial Hospital , Sherbrooke, NS, Canada\n", + "osm query street: 91 hospital road, Sherbrooke, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1629: Strait Richmond Hospital , Evanston, NS, Canada\n", + "osm query name: Strait Richmond Hospital , Evanston, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1630: Sutherland Harris Memorial Hospital , Pictou, NS, Canada\n", + "osm query name: Sutherland Harris Memorial Hospital , Pictou, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1631: Tacoma Plaza , Dartmouth, NS, Canada\n", + "osm query name: Tacoma Plaza , Dartmouth, NS, Canada\n", + "osm query street: 58 tacoma drive, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1632: Taigh Na Mara , Glace Bay, NS, Canada\n", + "osm query name: Taigh Na Mara , Glace Bay, NS, Canada\n", + "osm query street: 974 main street, Glace Bay, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1633: Theresa Cremo Memorial Health Centre , Whycocomagh, NS, Canada\n", + "osm query name: Theresa Cremo Memorial Health Centre , Whycocomagh, NS, Canada\n", + "osm query street: 93 reservation road, Whycocomagh, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1634: Twin Oaks Memorial Hospital , Musquodoboit Harbour, NS, Canada\n", + "osm query name: Twin Oaks Memorial Hospital , Musquodoboit Harbour, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1635: Upper Hammonds Plains Community Centre , Upper Hammonds Plains, NS, Canada\n", + "osm query name: Upper Hammonds Plains Community Centre , Upper Hammonds Plains, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1636: Valley Hospice , Kentville, NS, Canada\n", + "osm query name: Valley Hospice , Kentville, NS, Canada\n", + "osm query street: 150 exhibition st., Kentville, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1637: Valley Regional Hospital , Kentville, NS, Canada\n", + "osm query name: Valley Regional Hospital , Kentville, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1638: Victoria Building - QEII , Halifax, NS, Canada\n", + "osm query name: Victoria Building - QEII , Halifax, NS, Canada\n", + "osm query street: 1276 south park street, Halifax, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1639: Victoria County Memorial Hospital , Baddeck, NS, Canada\n", + "osm query name: Victoria County Memorial Hospital , Baddeck, NS, Canada\n", + "osm query street: 30 old margaree road, Baddeck, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1640: W5 Mall , East Preston, NS, Canada\n", + "osm query name: W5 Mall , East Preston, NS, Canada\n", + "osm query street: 1900 highway 7, East Preston, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1641: Wagmatcook Health Centre , Wagmacook, NS, Canada\n", + "osm query name: Wagmatcook Health Centre , Wagmacook, NS, Canada\n", + "osm query street: 47 humes rear w loop, Wagmacook, NS, Canada\n", + "osm query city: Wagmacook, NS, Canada\n", + "[6] no address found\n", + "\n", + "\n", + "1642: West Colchester Community Health Centre , Bass River, NS, Canada\n", + "osm query name: West Colchester Community Health Centre , Bass River, NS, Canada\n", + "osm query street: 6044 nova scotia trunk 2, Bass River, NS, Canada\n", + "osm query city: Bass River, NS, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1643: Western Kings Memorial Health Centre , Berwick, NS, Canada\n", + "osm query name: Western Kings Memorial Health Centre , Berwick, NS, Canada\n", + "osm query street: 121 orchard street, Berwick, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1644: Weymouth Medical Centre , Weymouth, NS, Canada\n", + "osm query name: Weymouth Medical Centre , Weymouth, NS, Canada\n", + "osm query street: 4453 evangeline trail, Weymouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1645: Woodlawn Blood Collection , Dartmouth, NS, Canada\n", + "osm query name: Woodlawn Blood Collection , Dartmouth, NS, Canada\n", + "osm query street: 92 main street, Dartmouth, NS, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1646: Yarmouth Regional Hospital , Yarmouth, NS, Canada\n", + "osm query name: Yarmouth Regional Hospital , Yarmouth, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1647: Young Tower , Halifax, NS, Canada\n", + "osm query name: Young Tower , Halifax, NS, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1648: Access Place, Prince albert, SK, Canada\n", + "osm query name: Access Place, Prince albert, SK, Canada\n", + "osm query street: 101 15 st e, Prince albert, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1649: Alex Ositis Foundation, Rosetown, SK, Canada\n", + "osm query name: Alex Ositis Foundation, Rosetown, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Rosetown, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1650: All Nations' Healing Hospital, Fort qu'appelle, SK, Canada\n", + "osm query name: All Nations' Healing Hospital, Fort qu'appelle, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1651: Angelique Canada Health Centre, Pelican narrows, SK, Canada\n", + "osm query name: Angelique Canada Health Centre, Pelican narrows, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Pelican narrows, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1652: Arborfield and District Health Care Centre, Arborfield, SK, Canada\n", + "osm query name: Arborfield and District Health Care Centre, Arborfield, SK, Canada\n", + "osm query street: 509 5th avenue, Arborfield, SK, Canada\n", + "osm query city: Arborfield, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1653: Arborfield Special Care Lodge, Arborfield, SK, Canada\n", + "osm query name: Arborfield Special Care Lodge, Arborfield, SK, Canada\n", + "osm query street: 509 5th avenue, Arborfield, SK, Canada\n", + "osm query city: Arborfield, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1654: Arcola Health Centre, Arcola, SK, Canada\n", + "osm query name: Arcola Health Centre, Arcola, SK, Canada\n", + "osm query street: 607 prairie avenue, Arcola, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1655: Assiniboia Hospital & LTC Facility, , SK, Canada\n", + "osm query name: Assiniboia Hospital & LTC Facility, , SK, Canada\n", + "osm query street: 501 6th avenue assiniboia, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1656: Assiniboia Union Hospital, , SK, Canada\n", + "osm query name: Assiniboia Union Hospital, , SK, Canada\n", + "osm query street: 501 6th ave e assiniboia, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1657: Balcarres Integrated Care Centre, Balcarres, SK, Canada\n", + "osm query name: Balcarres Integrated Care Centre, Balcarres, SK, Canada\n", + "osm query street: 100 south elgin st, Balcarres, SK, Canada\n", + "osm query city: Balcarres, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1658: Battlefords District Care Centre, North battleford, SK, Canada\n", + "osm query name: Battlefords District Care Centre, North battleford, SK, Canada\n", + "osm query street: 1308 winnipeg street, North battleford, SK, Canada\n", + "osm query city: North battleford, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1659: Battlefords Family Health Centre, North battleford north battleford, SK, Canada\n", + "osm query name: Battlefords Family Health Centre, North battleford north battleford, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1660: Battlefords Union Hospital, North battleford, SK, Canada\n", + "osm query name: Battlefords Union Hospital, North battleford, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1661: Beauval Health Centre, Beauval, SK, Canada\n", + "osm query name: Beauval Health Centre, Beauval, SK, Canada\n", + "osm query street: lavoie st, Beauval, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1662: Beechy Health Centre, Beechy, SK, Canada\n", + "osm query name: Beechy Health Centre, Beechy, SK, Canada\n", + "osm query street: 226 first ave n, Beechy, SK, Canada\n", + "osm query city: Beechy, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1663: Bengough Health Centre, Bengough, SK, Canada\n", + "osm query name: Bengough Health Centre, Bengough, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1664: Bethany Pioneer Village, Middle lake, SK, Canada\n", + "osm query name: Bethany Pioneer Village, Middle lake, SK, Canada\n", + "osm query street: 777 regional park rd, Middle lake, SK, Canada\n", + "osm query city: Middle lake, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1665: Big River Health Centre, , SK, Canada\n", + "osm query name: Big River Health Centre, , SK, Canada\n", + "osm query street: 220 1st ave n big river, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1666: Biggar & District Health Centre, Biggar, SK, Canada\n", + "osm query name: Biggar & District Health Centre, Biggar, SK, Canada\n", + "osm query street: 501 1st avenue west, Biggar, SK, Canada\n", + "osm query city: Biggar, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1667: Biggar & District Health Services Foundation Inc., Biggar, SK, Canada\n", + "osm query name: Biggar & District Health Services Foundation Inc., Biggar, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Biggar, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1668: Birch Hills Health Centre, Birch hills, SK, Canada\n", + "osm query name: Birch Hills Health Centre, Birch hills, SK, Canada\n", + "osm query street: 3 wilson street, Birch hills, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1669: Birchview Home, Birch hills, SK, Canada\n", + "osm query name: Birchview Home, Birch hills, SK, Canada\n", + "osm query street: 7 wilson st, Birch hills, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1670: Blaine Lake Primary Health Clinic, Blaine lake, SK, Canada\n", + "osm query name: Blaine Lake Primary Health Clinic, Blaine lake, SK, Canada\n", + "osm query street: 307 main st south, Blaine lake, SK, Canada\n", + "osm query city: Blaine lake, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1671: Borden Primary Health Centre, Borden, SK, Canada\n", + "osm query name: Borden Primary Health Centre, Borden, SK, Canada\n", + "osm query street: 308 shepard street, Borden, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1672: Border Health Centre, , SK, Canada\n", + "osm query name: Border Health Centre, , SK, Canada\n", + "osm query street: 301 1st street west climax, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1673: Broadview Centennial Lodge, , SK, Canada\n", + "osm query name: Broadview Centennial Lodge, , SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1674: Broadview Hospital, , SK, Canada\n", + "osm query name: Broadview Hospital, , SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1675: Buffalo Narrows Health Centre, Buffalo narrows, SK, Canada\n", + "osm query name: Buffalo Narrows Health Centre, Buffalo narrows, SK, Canada\n", + "osm query street: 310 davey st, Buffalo narrows, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1676: Cabri Prairie Health Care Centre, , SK, Canada\n", + "osm query name: Cabri Prairie Health Care Centre, , SK, Canada\n", + "osm query street: 517 1st street north cabri, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1677: Canora Gateway Lodge, , SK, Canada\n", + "osm query name: Canora Gateway Lodge, , SK, Canada\n", + "osm query street: 212 centre ave e canora, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1678: Canora Hospital, Canora, SK, Canada\n", + "osm query name: Canora Hospital, Canora, SK, Canada\n", + "osm query street: 1219 main st, Canora, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1679: Carlyle Primary Health Clinic, Carlyle, SK, Canada\n", + "osm query name: Carlyle Primary Health Clinic, Carlyle, SK, Canada\n", + "osm query street: 214 main st., Carlyle, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1680: Carrot River Health Centre, Carrot river, SK, Canada\n", + "osm query name: Carrot River Health Centre, Carrot river, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1681: Carrot River Medical Clinic, Carrot river, SK, Canada\n", + "osm query name: Carrot River Medical Clinic, Carrot river, SK, Canada\n", + "osm query street: 26 main st, Carrot river, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1682: Centennial Special Care Home, Esterhazy, SK, Canada\n", + "osm query name: Centennial Special Care Home, Esterhazy, SK, Canada\n", + "osm query street: 300 james street, Esterhazy, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1683: Central Butte and District Health Care Foundation, Central butte, SK, Canada\n", + "osm query name: Central Butte and District Health Care Foundation, Central butte, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Central butte, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1684: Central Haven Special Care Home, Saskatoon, SK, Canada\n", + "osm query name: Central Haven Special Care Home, Saskatoon, SK, Canada\n", + "osm query street: 1020 avenue i north, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1685: Chateau Providence, Brieux, SK, Canada\n", + "osm query name: Chateau Providence, Brieux, SK, Canada\n", + "osm query street: 200 1st ave n st., Brieux, SK, Canada\n", + "osm query city: Brieux, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1686: Circle Drive Special Care Home, Saskatoon, SK, Canada\n", + "osm query name: Circle Drive Special Care Home, Saskatoon, SK, Canada\n", + "osm query street: 3055 preston ave, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1687: Community Health Centre, , SK, Canada\n", + "osm query name: Community Health Centre, , SK, Canada\n", + "osm query street: 501 2 street ne, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1688: Coronach Health Centre, Coronach, SK, Canada\n", + "osm query name: Coronach Health Centre, Coronach, SK, Canada\n", + "osm query street: 240 south ave e, Coronach, SK, Canada\n", + "osm query city: Coronach, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1689: Craik & District Health Centre, Craik, SK, Canada\n", + "osm query name: Craik & District Health Centre, Craik, SK, Canada\n", + "osm query street: 620 mary st, Craik, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1690: Creighton Health Centre, , SK, Canada\n", + "osm query name: Creighton Health Centre, , SK, Canada\n", + "osm query street: 298 1 st e creighton, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1691: Crescent View Clinic, Moose jaw, SK, Canada\n", + "osm query name: Crescent View Clinic, Moose jaw, SK, Canada\n", + "osm query street: 131 1st ave ne., Moose jaw, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1692: Cudworth Nursing Home and Community Health Centre, Cudworth, SK, Canada\n", + "osm query name: Cudworth Nursing Home and Community Health Centre, Cudworth, SK, Canada\n", + "osm query street: 607 4th ave, Cudworth, SK, Canada\n", + "osm query city: Cudworth, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1693: Cumberland House Health Centre, Cumberland house, SK, Canada\n", + "osm query name: Cumberland House Health Centre, Cumberland house, SK, Canada\n", + "osm query street: 2nd avenue, Cumberland house, SK, Canada\n", + "osm query city: Cumberland house, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1694: Cupar and District Nursing Home, Cupar, SK, Canada\n", + "osm query name: Cupar and District Nursing Home, Cupar, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1695: Cupar Primary Health Care Clinic, Cupar, SK, Canada\n", + "osm query name: Cupar Primary Health Care Clinic, Cupar, SK, Canada\n", + "osm query street: 213 mills st, Cupar, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1696: Cut Knife Health Complex, Cut knife, SK, Canada\n", + "osm query name: Cut Knife Health Complex, Cut knife, SK, Canada\n", + "osm query street: dion ave, Cut knife, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1697: Cypress Regional Hospital, Swift current, SK, Canada\n", + "osm query name: Cypress Regional Hospital, Swift current, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1698: Dalmeny Spruce Manor Special Care Home, Dalmeny, SK, Canada\n", + "osm query name: Dalmeny Spruce Manor Special Care Home, Dalmeny, SK, Canada\n", + "osm query street: 701 1st st., Dalmeny, SK, Canada\n", + "osm query city: Dalmeny, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1699: Davidson Health Centre, Davidson, SK, Canada\n", + "osm query name: Davidson Health Centre, Davidson, SK, Canada\n", + "osm query street: 900 government rd, Davidson, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1700: Delisle Primary Health Centre, , SK, Canada\n", + "osm query name: Delisle Primary Health Centre, , SK, Canada\n", + "osm query street: 305 1 st w delisle, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1701: Dinsmore Health Care Centre, Dinsmore, SK, Canada\n", + "osm query name: Dinsmore Health Care Centre, Dinsmore, SK, Canada\n", + "osm query street: 207 1 st e, Dinsmore, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1702: Doctor Cooke Extended Care Centre, Lloydminster, SK, Canada\n", + "osm query name: Doctor Cooke Extended Care Centre, Lloydminster, SK, Canada\n", + "osm query street: 3915 56 ave, Lloydminster, SK, Canada\n", + "osm query city: Lloydminster, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1703: Dodsland & Plenty Clinic, Dodsland, SK, Canada\n", + "osm query name: Dodsland & Plenty Clinic, Dodsland, SK, Canada\n", + "osm query street: 405 4th ave, Dodsland, SK, Canada\n", + "osm query city: Dodsland, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1704: Dr Noble Irwin Regional Healthcare Foundation, Swift current, SK, Canada\n", + "osm query name: Dr Noble Irwin Regional Healthcare Foundation, Swift current, SK, Canada\n", + "osm query street: 2051 saskatchewan drive, Swift current, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1705: Dr. F.H. Wigmore Regional Hospital, Moose jaw, SK, Canada\n", + "osm query name: Dr. F.H. Wigmore Regional Hospital, Moose jaw, SK, Canada\n", + "osm query street: 55 diefenbaker drive, Moose jaw, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1706: Duck Lake Beardy's Primary Health Team, Lake, SK, Canada\n", + "osm query name: Duck Lake Beardy's Primary Health Team, Lake, SK, Canada\n", + "osm query street: 556 front street duck, Lake, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1707: Eatonia District Health Care Foundation, Eatonia, SK, Canada\n", + "osm query name: Eatonia District Health Care Foundation, Eatonia, SK, Canada\n", + "osm query street: 202 main street, Eatonia, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1708: Eatonia Primary Health Care Clinic, Eatonia, SK, Canada\n", + "osm query name: Eatonia Primary Health Care Clinic, Eatonia, SK, Canada\n", + "osm query street: 205 2nd avenue west, Eatonia, SK, Canada\n", + "osm query city: Eatonia, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1709: Echo Lodge Special Care Home, Fort qu'appelle, SK, Canada\n", + "osm query name: Echo Lodge Special Care Home, Fort qu'appelle, SK, Canada\n", + "osm query street: 560 broadway st, Fort qu'appelle, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1710: Elrose Health Centre, Elrose, SK, Canada\n", + "osm query name: Elrose Health Centre, Elrose, SK, Canada\n", + "osm query street: 505 main st, Elrose, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1711: Estevan Regional Nursing Home, Estevan, SK, Canada\n", + "osm query name: Estevan Regional Nursing Home, Estevan, SK, Canada\n", + "osm query street: 1921 wellock rd, Estevan, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1712: Eston Health Centre, , SK, Canada\n", + "osm query name: Eston Health Centre, , SK, Canada\n", + "osm query street: 822 main st, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1713: Evergreen Health Centre, Leoville, SK, Canada\n", + "osm query name: Evergreen Health Centre, Leoville, SK, Canada\n", + "osm query street: 3425 crowley dr, Leoville, SK, Canada\n", + "osm query city: Leoville, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1714: Extendicare Elmview, , SK, Canada\n", + "osm query name: Extendicare Elmview, , SK, Canada\n", + "osm query street: 4125 rae street regina, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1715: Extendicare Parkside, , SK, Canada\n", + "osm query name: Extendicare Parkside, , SK, Canada\n", + "osm query street: 4520 rae street regina, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1716: Extendicare Sunset, , SK, Canada\n", + "osm query name: Extendicare Sunset, , SK, Canada\n", + "osm query street: 260 sunset drive regina, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1717: Foam Lake Health Centre, Foam lake, SK, Canada\n", + "osm query name: Foam Lake Health Centre, Foam lake, SK, Canada\n", + "osm query street: 715 saskatchwan ave, Foam lake, SK, Canada\n", + "osm query city: Foam lake, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1718: Foam Lake Jubilee Home, Foam lake, SK, Canada\n", + "osm query name: Foam Lake Jubilee Home, Foam lake, SK, Canada\n", + "osm query street: 421 alberta ave, Foam lake, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1719: Galloway Health Centre, Oxbow, SK, Canada\n", + "osm query name: Galloway Health Centre, Oxbow, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1720: Golden Acres, , SK, Canada\n", + "osm query name: Golden Acres, , SK, Canada\n", + "osm query street: 300 10th street east, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1721: Golden Prairie Home, Indian head, SK, Canada\n", + "osm query name: Golden Prairie Home, Indian head, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1722: Goodwill Manor Nursing Home, , SK, Canada\n", + "osm query name: Goodwill Manor Nursing Home, , SK, Canada\n", + "osm query street: 501 victoria ave duck lake, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1723: Grasslands Health Centre, Rockglen, SK, Canada\n", + "osm query name: Grasslands Health Centre, Rockglen, SK, Canada\n", + "osm query street: 1006 2 hwy, Rockglen, SK, Canada\n", + "osm query city: Rockglen, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1724: Grenfell Health Centre, , SK, Canada\n", + "osm query name: Grenfell Health Centre, , SK, Canada\n", + "osm query street: 721 stella st grenfell, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1725: Grenfell Pioneer Home, , SK, Canada\n", + "osm query name: Grenfell Pioneer Home, , SK, Canada\n", + "osm query street: 710 regina ave grenfell, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1726: Gull Lake Special Care Centre, Gull lake, SK, Canada\n", + "osm query name: Gull Lake Special Care Centre, Gull lake, SK, Canada\n", + "osm query street: 751 grey st, Gull lake, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1727: Hafford Special Care Centre and Primary Care Site, Hafford, SK, Canada\n", + "osm query name: Hafford Special Care Centre and Primary Care Site, Hafford, SK, Canada\n", + "osm query street: 213 south avenue e, Hafford, SK, Canada\n", + "osm query city: Hafford, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1728: Herb Bassett Home, Prince albert, SK, Canada\n", + "osm query name: Herb Bassett Home, Prince albert, SK, Canada\n", + "osm query street: 1200 24 st w, Prince albert, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1729: Herbert and District Integrated Health Facility, , SK, Canada\n", + "osm query name: Herbert and District Integrated Health Facility, , SK, Canada\n", + "osm query street: 405 herbert avenue herbert, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1730: Hodgeville Health Centre, Hodgeville, SK, Canada\n", + "osm query name: Hodgeville Health Centre, Hodgeville, SK, Canada\n", + "osm query street: 105 main street, Hodgeville, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1731: Hopeview Residence, North battleford, SK, Canada\n", + "osm query name: Hopeview Residence, North battleford, SK, Canada\n", + "osm query street: 1891 96th st, North battleford, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1732: Hospitals of Regina Foundation, , SK, Canada\n", + "osm query name: Hospitals of Regina Foundation, , SK, Canada\n", + "osm query street: 1874 scarth street regina, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1733: Hudson Bay Health Care Facility, Hudson bay, SK, Canada\n", + "osm query name: Hudson Bay Health Care Facility, Hudson bay, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1734: Hudson Bay Hospital, Hudson bay, SK, Canada\n", + "osm query name: Hudson Bay Hospital, Hudson bay, SK, Canada\n", + "osm query street: 614 prince st, Hudson bay, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1735: Humboldt District Health Complex, , SK, Canada\n", + "osm query name: Humboldt District Health Complex, , SK, Canada\n", + "osm query street: 515 14th ave humboldt, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1736: Humboldt District Hospital Foundation, , SK, Canada\n", + "osm query name: Humboldt District Hospital Foundation, , SK, Canada\n", + "osm query street: 515 14th avenue humboldt, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1737: Ile-a la-Crosse-St. Joseph's Hospital and Health Centre, La-crosse, SK, Canada\n", + "osm query name: Ile-a la-Crosse-St. Joseph's Hospital and Health Centre, La-crosse, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: La-crosse, SK, Canada\n", + "no address found\n", + "\n", + "\n", + "1738: Indian Head Union Hospital, Indian head, SK, Canada\n", + "osm query name: Indian Head Union Hospital, Indian head, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1739: Invermay Health Centre, , SK, Canada\n", + "osm query name: Invermay Health Centre, , SK, Canada\n", + "osm query street: 303 4 ave, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1740: Ituna Pioneer Health Care Centre, Ituna, SK, Canada\n", + "osm query name: Ituna Pioneer Health Care Centre, Ituna, SK, Canada\n", + "osm query street: 320 5 ave ne, Ituna, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1741: Jeannie Bird Health Clinic-Lac la Ronge Health Clinic, Air ronge, SK, Canada\n", + "osm query name: Jeannie Bird Health Clinic-Lac la Ronge Health Clinic, Air ronge, SK, Canada\n", + "osm query street: 334 wilson charles dr, Air ronge, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1742: Jim Pattison Children's Hospital, Saskatoon, SK, Canada\n", + "osm query name: Jim Pattison Children's Hospital, Saskatoon, SK, Canada\n", + "osm query street: 103 hospital dr., Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1743: Jim Pattison Children's Hospital Foundation, Saskatoon, SK, Canada\n", + "osm query name: Jim Pattison Children's Hospital Foundation, Saskatoon, SK, Canada\n", + "osm query street: 345 third avenue south, Saskatoon, SK, Canada\n", + "osm query city: Saskatoon, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1744: Jubilee Home, Lloydminster, SK, Canada\n", + "osm query name: Jubilee Home, Lloydminster, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1745: Jubilee Lodge (Kinistino-attached to Primary Health Care Clinic), Kinistino, SK, Canada\n", + "osm query name: Jubilee Lodge (Kinistino-attached to Primary Health Care Clinic), Kinistino, SK, Canada\n", + "osm query street: 401 meyers ave, Kinistino, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1746: Jubilee Residences, Saskatoon, SK, Canada\n", + "osm query name: Jubilee Residences, Saskatoon, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Saskatoon, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1747: Kamsack Hospital & Nursing Home, Kamsack, SK, Canada\n", + "osm query name: Kamsack Hospital & Nursing Home, Kamsack, SK, Canada\n", + "osm query street: 341 stewart st, Kamsack, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1748: Kelvindell Lodge, Kelvington, SK, Canada\n", + "osm query name: Kelvindell Lodge, Kelvington, SK, Canada\n", + "osm query street: 701-6th ave w, Kelvington, SK, Canada\n", + "osm query city: Kelvington, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1749: Kelvington and Area Hospital, Kelvington, SK, Canada\n", + "osm query name: Kelvington and Area Hospital, Kelvington, SK, Canada\n", + "osm query street: 701 6 ave w, Kelvington, SK, Canada\n", + "osm query city: Kelvington, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1750: Kerrobert Integrated Health Centre, Kerrobert, SK, Canada\n", + "osm query name: Kerrobert Integrated Health Centre, Kerrobert, SK, Canada\n", + "osm query street: 115 manitoba ave, Kerrobert, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1751: Kincaid Primary Health Care Centre, Kincaid, SK, Canada\n", + "osm query name: Kincaid Primary Health Care Centre, Kincaid, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Kincaid, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1752: Kindersley & District Health and Wellness Foundation, Kindersley, SK, Canada\n", + "osm query name: Kindersley & District Health and Wellness Foundation, Kindersley, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Kindersley, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1753: Kindersley & District Health Centre, , SK, Canada\n", + "osm query name: Kindersley & District Health Centre, , SK, Canada\n", + "osm query street: 1003 1st st w kindersley, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1754: Kinistino Primary Health Care Clinic, Kinistino, SK, Canada\n", + "osm query name: Kinistino Primary Health Care Clinic, Kinistino, SK, Canada\n", + "osm query street: 401 meyers ave, Kinistino, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1755: Kipling & District Health Foundation Inc. , , SK, Canada\n", + "osm query name: Kipling & District Health Foundation Inc. , , SK, Canada\n", + "osm query street: 906 industrial drive kipling, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1756: Kipling Integrated Health Centre, , SK, Canada\n", + "osm query name: Kipling Integrated Health Centre, , SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1757: Kyle & District Health Centre, Kyle, SK, Canada\n", + "osm query name: Kyle & District Health Centre, Kyle, SK, Canada\n", + "osm query street: 208 3 ave, Kyle, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1758: L. Gervais Memorial Health Centre, Goodsoil, SK, Canada\n", + "osm query name: L. Gervais Memorial Health Centre, Goodsoil, SK, Canada\n", + "osm query street: 100 1 st e, Goodsoil, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1759: La Loche Health Centre and Hospital, La loche, SK, Canada\n", + "osm query name: La Loche Health Centre and Hospital, La loche, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1760: La Ronge Health Centre, La ronge, SK, Canada\n", + "osm query name: La Ronge Health Centre, La ronge, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1761: Lady Minto Health Care Center, Edam, SK, Canada\n", + "osm query name: Lady Minto Health Care Center, Edam, SK, Canada\n", + "osm query street: 1513 1 st ave south, Edam, SK, Canada\n", + "osm query city: Edam, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1762: Lafleche Health Centre, , SK, Canada\n", + "osm query name: Lafleche Health Centre, , SK, Canada\n", + "osm query street: 315 main st lafleche, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1763: Lakeside Manor Care Home, Saltcoats, SK, Canada\n", + "osm query name: Lakeside Manor Care Home, Saltcoats, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1764: Lakeview Pioneer Lodge, Wakaw, SK, Canada\n", + "osm query name: Lakeview Pioneer Lodge, Wakaw, SK, Canada\n", + "osm query street: 400 1st street north, Wakaw, SK, Canada\n", + "osm query city: Wakaw, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1765: Lampman Community Health Centre, Lampman, SK, Canada\n", + "osm query name: Lampman Community Health Centre, Lampman, SK, Canada\n", + "osm query street: 311 2nd avenue, Lampman, SK, Canada\n", + "osm query city: Lampman, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1766: Langenburg Health Care Complex, Langenburg, SK, Canada\n", + "osm query name: Langenburg Health Care Complex, Langenburg, SK, Canada\n", + "osm query street: 407 2nd st s, Langenburg, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1767: Langham Senior Citizen's Home, Langham, SK, Canada\n", + "osm query name: Langham Senior Citizen's Home, Langham, SK, Canada\n", + "osm query street: 140 main street east, Langham, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1768: Lanigan Hospital, , SK, Canada\n", + "osm query name: Lanigan Hospital, , SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1769: Last Mountain Pioneer Home, Strasbourg, SK, Canada\n", + "osm query name: Last Mountain Pioneer Home, Strasbourg, SK, Canada\n", + "osm query street: 700 prospect avenue, Strasbourg, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1770: Last Mountain Pioneer Home, Strasbourg, SK, Canada\n", + "osm query name: Last Mountain Pioneer Home, Strasbourg, SK, Canada\n", + "osm query street: 700 prospect ave, Strasbourg, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1771: Leader Integrated Health Facility, , SK, Canada\n", + "osm query name: Leader Integrated Health Facility, , SK, Canada\n", + "osm query street: 400 1 st w leader, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1772: Leader Medical Clinic, , SK, Canada\n", + "osm query name: Leader Medical Clinic, , SK, Canada\n", + "osm query street: 519 main street leader, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1773: Leoville Primary Health Care Clinic, Leoville, SK, Canada\n", + "osm query name: Leoville Primary Health Care Clinic, Leoville, SK, Canada\n", + "osm query street: 1st ave, Leoville, SK, Canada\n", + "osm query city: Leoville, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1774: Leroy Community Health & Social Centre, , SK, Canada\n", + "osm query name: Leroy Community Health & Social Centre, , SK, Canada\n", + "osm query street: 211 1 ave leroy, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1775: Lloydminster Continuing Care Centre, Lloydminster, SK, Canada\n", + "osm query name: Lloydminster Continuing Care Centre, Lloydminster, SK, Canada\n", + "osm query street: 7402 29th st, Lloydminster, SK, Canada\n", + "osm query city: Lloydminster, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1776: Lloydminster Hospital, Lloydminster, SK, Canada\n", + "osm query name: Lloydminster Hospital, Lloydminster, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1777: Lloydminster Region Health Foundation Inc., Lloydminster, SK, Canada\n", + "osm query name: Lloydminster Region Health Foundation Inc., Lloydminster, SK, Canada\n", + "osm query street: 4910 50th street, Lloydminster, SK, Canada\n", + "osm query city: Lloydminster, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1778: Long Lake Valley Integrated Health Facility, , SK, Canada\n", + "osm query name: Long Lake Valley Integrated Health Facility, , SK, Canada\n", + "osm query street: 51 saskatchewan ave imperial, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1779: Loon Lake Health Centre and Special Care Home, Loon lake, SK, Canada\n", + "osm query name: Loon Lake Health Centre and Special Care Home, Loon lake, SK, Canada\n", + "osm query street: 510 2 ave, Loon lake, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1780: Lucky Lake Health Centre, Lucky lake lucky lake, SK, Canada\n", + "osm query name: Lucky Lake Health Centre, Lucky lake lucky lake, SK, Canada\n", + "osm query street: 1st avenue, Lucky lake lucky lake, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1781: Lumsden and District Heritage Home, Lumsden, SK, Canada\n", + "osm query name: Lumsden and District Heritage Home, Lumsden, SK, Canada\n", + "osm query street: 10 aspen bay, Lumsden, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1782: Luseland Medical Clinic, Luseland, SK, Canada\n", + "osm query name: Luseland Medical Clinic, Luseland, SK, Canada\n", + "osm query street: 508 grand ave, Luseland, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1783: Luther Special Care Home, Saskatoon, SK, Canada\n", + "osm query name: Luther Special Care Home, Saskatoon, SK, Canada\n", + "osm query street: 1212 osler st, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1784: Maidstone Health Complex, , SK, Canada\n", + "osm query name: Maidstone Health Complex, , SK, Canada\n", + "osm query street: 214 5th ave, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1785: Mainprize Manor and Health Centre, Midale, SK, Canada\n", + "osm query name: Mainprize Manor and Health Centre, Midale, SK, Canada\n", + "osm query street: 206 south road, Midale, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1786: Manitou Health Centre, Neilburg, SK, Canada\n", + "osm query name: Manitou Health Centre, Neilburg, SK, Canada\n", + "osm query street: 105 2nd ave west, Neilburg, SK, Canada\n", + "osm query city: Neilburg, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1787: Manitou Lodge, , SK, Canada\n", + "osm query name: Manitou Lodge, , SK, Canada\n", + "osm query street: 702 4 st e watrous, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1788: Meadow Clinic, , SK, Canada\n", + "osm query name: Meadow Clinic, , SK, Canada\n", + "osm query street: 4006 dewdney ave regina, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1789: Meadow Lake Hospital, Meadow lake, SK, Canada\n", + "osm query name: Meadow Lake Hospital, Meadow lake, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1790: Meadow Lake Hospital Foundation, Meadow lake, SK, Canada\n", + "osm query name: Meadow Lake Hospital Foundation, Meadow lake, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Meadow lake, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1791: Meadow Lake Primary Health Care Centre, Meadow lake, SK, Canada\n", + "osm query name: Meadow Lake Primary Health Care Centre, Meadow lake, SK, Canada\n", + "osm query street: 218 centre st, Meadow lake, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1792: Melfort Community Health Office, , SK, Canada\n", + "osm query name: Melfort Community Health Office, , SK, Canada\n", + "osm query street: 107 crawford ave e melfort, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1793: Melfort Hospital, , SK, Canada\n", + "osm query name: Melfort Hospital, , SK, Canada\n", + "osm query street: 510 broadway ave s melfort, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1794: Mennonite Nursing Home, Rosthern, SK, Canada\n", + "osm query name: Mennonite Nursing Home, Rosthern, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1795: Mont St. Joseph, Prince albert, SK, Canada\n", + "osm query name: Mont St. Joseph, Prince albert, SK, Canada\n", + "osm query street: 777 28 st e, Prince albert, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1796: Mont St. Joseph Foundation Inc., Prince albert, SK, Canada\n", + "osm query name: Mont St. Joseph Foundation Inc., Prince albert, SK, Canada\n", + "osm query street: 777 28th st east, Prince albert, SK, Canada\n", + "osm query city: Prince albert, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1797: Montmartre Health Centre, , SK, Canada\n", + "osm query name: Montmartre Health Centre, , SK, Canada\n", + "osm query street: 237 2nd ave e montmartre, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1798: Moose Jaw Health Foundation, Moose jaw, SK, Canada\n", + "osm query name: Moose Jaw Health Foundation, Moose jaw, SK, Canada\n", + "osm query street: 55 diefenbaker drive, Moose jaw, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1799: Moose Mountain Lodge, , SK, Canada\n", + "osm query name: Moose Mountain Lodge, , SK, Canada\n", + "osm query street: 801 souris ave carlyle, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1800: Moosomin & District Health Care Foundation, Moosomin, SK, Canada\n", + "osm query name: Moosomin & District Health Care Foundation, Moosomin, SK, Canada\n", + "osm query street: 601 wright road, Moosomin, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1801: Naicam Primary Care Clinic/Medical Clinic, Naicam, SK, Canada\n", + "osm query name: Naicam Primary Care Clinic/Medical Clinic, Naicam, SK, Canada\n", + "osm query street: 302 2nd ave n, Naicam, SK, Canada\n", + "osm query city: Naicam, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1802: New Hope Pioneer Lodge, Stoughton, SK, Canada\n", + "osm query name: New Hope Pioneer Lodge, Stoughton, SK, Canada\n", + "osm query street: 123 government rd, Stoughton, SK, Canada\n", + "osm query city: Stoughton, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1803: New Horizons Primary Health Care Centre, Central butte, SK, Canada\n", + "osm query name: New Horizons Primary Health Care Centre, Central butte, SK, Canada\n", + "osm query street: 601 canada street, Central butte, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1804: Newmarket Place, , SK, Canada\n", + "osm query name: Newmarket Place, , SK, Canada\n", + "osm query street: 2001 newmarket drive tisdale, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1805: Nipawin Hospital, Nipawin, SK, Canada\n", + "osm query name: Nipawin Hospital, Nipawin, SK, Canada\n", + "osm query street: 800 6 st e, Nipawin, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1806: Nipawin Region Health Foundation, Nipawin, SK, Canada\n", + "osm query name: Nipawin Region Health Foundation, Nipawin, SK, Canada\n", + "osm query street: 233 centre street, Nipawin, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1807: Nokomis Health Centre, Nokomis, SK, Canada\n", + "osm query name: Nokomis Health Centre, Nokomis, SK, Canada\n", + "osm query street: 103 2nd avenue east, Nokomis, SK, Canada\n", + "osm query city: Nokomis, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1808: Norquay Health Centre, , SK, Canada\n", + "osm query name: Norquay Health Centre, , SK, Canada\n", + "osm query street: 355 east road allowance s norquay, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1809: North Central Health Care Foundation, , SK, Canada\n", + "osm query name: North Central Health Care Foundation, , SK, Canada\n", + "osm query street: 505 broadway north melfort, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1810: Northland Pioneers Lodge, Meadow lake, SK, Canada\n", + "osm query name: Northland Pioneers Lodge, Meadow lake, SK, Canada\n", + "osm query street: 515 3rd st w, Meadow lake, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1811: Oliver Lodge, Saskatoon, SK, Canada\n", + "osm query name: Oliver Lodge, Saskatoon, SK, Canada\n", + "osm query street: 1405 faulkner cres, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1812: Outlook & District Health Centre, , SK, Canada\n", + "osm query name: Outlook & District Health Centre, , SK, Canada\n", + "osm query street: 500 semple st outlook, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1813: Outlook and District Health Foundation Inc. , , SK, Canada\n", + "osm query name: Outlook and District Health Foundation Inc. , , SK, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "1814: Pangman Health Centre, Pangman, SK, Canada\n", + "osm query name: Pangman Health Centre, Pangman, SK, Canada\n", + "osm query street: 211 keeler st., Pangman, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1815: Paradise Hill Health Centre, Paradise hill, SK, Canada\n", + "osm query name: Paradise Hill Health Centre, Paradise hill, SK, Canada\n", + "osm query street: 110 main street, Paradise hill, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1816: Parkland Integrated Health Centre, Shellbrook, SK, Canada\n", + "osm query name: Parkland Integrated Health Centre, Shellbrook, SK, Canada\n", + "osm query street: 100 dr. j.l. spencer dr, Shellbrook, SK, Canada\n", + "osm query city: Shellbrook, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1817: Parkland Place, , SK, Canada\n", + "osm query name: Parkland Place, , SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1818: Parkridge Centre, Saskatoon, SK, Canada\n", + "osm query name: Parkridge Centre, Saskatoon, SK, Canada\n", + "osm query street: 110 gropper cres, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1819: Pasqua Hospital, , SK, Canada\n", + "osm query name: Pasqua Hospital, , SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1820: Pineview Lodge, Nipawin, SK, Canada\n", + "osm query name: Pineview Lodge, Nipawin, SK, Canada\n", + "osm query street: 400 6 ave e, Nipawin, SK, Canada\n", + "osm query city: Nipawin, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1821: Pineview Terrace, Prince albert, SK, Canada\n", + "osm query name: Pineview Terrace, Prince albert, SK, Canada\n", + "osm query street: 1200a 24th st w, Prince albert, SK, Canada\n", + "osm query city: Prince albert, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1822: Pioneer Lodge, Moose jaw, SK, Canada\n", + "osm query name: Pioneer Lodge, Moose jaw, SK, Canada\n", + "osm query street: 1000 albert street, Moose jaw, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1823: Pleasant View Care Home, Wadena, SK, Canada\n", + "osm query name: Pleasant View Care Home, Wadena, SK, Canada\n", + "osm query street: 533 5th street ne, Wadena, SK, Canada\n", + "osm query city: Wadena, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1824: Ponteix Health Centre, , SK, Canada\n", + "osm query name: Ponteix Health Centre, , SK, Canada\n", + "osm query street: 428 2nd avenue ponteix, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1825: Porcupine Carragana Hospital, Porcupine plain, SK, Canada\n", + "osm query name: Porcupine Carragana Hospital, Porcupine plain, SK, Canada\n", + "osm query street: windsor ave, Porcupine plain, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1826: Prairie Health Care Centre, , SK, Canada\n", + "osm query name: Prairie Health Care Centre, , SK, Canada\n", + "osm query street: 517 1st street north cabri, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1827: Prairie North Health Centre, Lloydminster, SK, Canada\n", + "osm query name: Prairie North Health Centre, Lloydminster, SK, Canada\n", + "osm query street: 4910 50 st, Lloydminster, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1828: Prairie View Health Centre, Mankota, SK, Canada\n", + "osm query name: Prairie View Health Centre, Mankota, SK, Canada\n", + "osm query street: 241 1st ave, Mankota, SK, Canada\n", + "osm query city: Mankota, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1829: Preeceville and District Health Centre (ER), Preeceville, SK, Canada\n", + "osm query name: Preeceville and District Health Centre (ER), Preeceville, SK, Canada\n", + "osm query street: 712 7 st ne, Preeceville, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1830: Primary Health Care Clinic, Leask, SK, Canada\n", + "osm query name: Primary Health Care Clinic, Leask, SK, Canada\n", + "osm query street: 15 main street, Leask, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1831: Primary Health Centre, North battleford, SK, Canada\n", + "osm query name: Primary Health Centre, North battleford, SK, Canada\n", + "osm query street: 11427 railway ave, North battleford, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1832: Providence Place, Moose jaw, SK, Canada\n", + "osm query name: Providence Place, Moose jaw, SK, Canada\n", + "osm query street: 100 2nd ave ne., Moose jaw, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1833: Public Health Office, Saskatoon, SK, Canada\n", + "osm query name: Public Health Office, Saskatoon, SK, Canada\n", + "osm query street: 310 idylwyld dr n, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1834: Qu'appelle House, , SK, Canada\n", + "osm query name: Qu'appelle House, , SK, Canada\n", + "osm query street: 1425 college avenue regina, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1835: Quill Lake Community Health & Social Centre, Quill lake, SK, Canada\n", + "osm query name: Quill Lake Community Health & Social Centre, Quill lake, SK, Canada\n", + "osm query street: 50 main street, Quill lake, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1836: Quill Plains Centennial Lodge, , SK, Canada\n", + "osm query name: Quill Plains Centennial Lodge, , SK, Canada\n", + "osm query street: 400 3 avenue north watson, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1837: Quill Plains Health Care Foundation Inc. , , SK, Canada\n", + "osm query name: Quill Plains Health Care Foundation Inc. , , SK, Canada\n", + "osm query street: 300 main street watson, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1838: Radville Marian Health Centre, Radville, SK, Canada\n", + "osm query name: Radville Marian Health Centre, Radville, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1839: Raymore Community Health & Social Centre, Raymore, SK, Canada\n", + "osm query name: Raymore Community Health & Social Centre, Raymore, SK, Canada\n", + "osm query street: 806 2nd ave, Raymore, SK, Canada\n", + "osm query city: Raymore, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1840: Red Coat Primary Health Care Clinic, , SK, Canada\n", + "osm query name: Red Coat Primary Health Care Clinic, , SK, Canada\n", + "osm query street: 131 3rd ave w, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1841: Red Deer Nursing Home, Porcupine plain, SK, Canada\n", + "osm query name: Red Deer Nursing Home, Porcupine plain, SK, Canada\n", + "osm query street: 330 oak street, Porcupine plain, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1842: Redvers & District Community Health Foundation Inc., Redvers, SK, Canada\n", + "osm query name: Redvers & District Community Health Foundation Inc., Redvers, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Redvers, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1843: Redvers Health Centre, Redvers, SK, Canada\n", + "osm query name: Redvers Health Centre, Redvers, SK, Canada\n", + "osm query street: 18 eichhorst st, Redvers, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1844: Regency Manor, Central butte, SK, Canada\n", + "osm query name: Regency Manor, Central butte, SK, Canada\n", + "osm query street: 601 canada st., Central butte, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1845: Regina General Hospital, , SK, Canada\n", + "osm query name: Regina General Hospital, , SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1846: Regina Lutheran Home (Eden Care Community), , SK, Canada\n", + "osm query name: Regina Lutheran Home (Eden Care Community), , SK, Canada\n", + "osm query street: 1925 5th avenue north regina, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1847: Regina Pioneer Village, , SK, Canada\n", + "osm query name: Regina Pioneer Village, , SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1848: River Heights Lodge, North battleford, SK, Canada\n", + "osm query name: River Heights Lodge, North battleford, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1849: Riverside Health Complex, Turtleford, SK, Canada\n", + "osm query name: Riverside Health Complex, Turtleford, SK, Canada\n", + "osm query street: 1st st s, Turtleford, SK, Canada\n", + "osm query city: Turtleford, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1850: Rose Valley Health Centre, Rose, SK, Canada\n", + "osm query name: Rose Valley Health Centre, Rose, SK, Canada\n", + "osm query street: 119 mccallum street, Rose, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1851: Rosetown & District Health Centre, Rosetown, SK, Canada\n", + "osm query name: Rosetown & District Health Centre, Rosetown, SK, Canada\n", + "osm query street: 409 highway 4 north, Rosetown, SK, Canada\n", + "osm query city: Rosetown, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1852: Rosetown & District Health Centre Foundation inc. , Rosetown, SK, Canada\n", + "osm query name: Rosetown & District Health Centre Foundation inc. , Rosetown, SK, Canada\n", + "osm query street: 409 highway 4 north, Rosetown, SK, Canada\n", + "osm query city: Rosetown, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1853: Ross Payant Nursing Home, , SK, Canada\n", + "osm query name: Ross Payant Nursing Home, , SK, Canada\n", + "osm query street: 300 jubilee place assiniboia, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1854: Rosthern Hospital, Rosthern, SK, Canada\n", + "osm query name: Rosthern Hospital, Rosthern, SK, Canada\n", + "osm query street: 2016 2 st, Rosthern, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1855: Roy Romanow Provincial Laboratory (RRPL), , SK, Canada\n", + "osm query name: Roy Romanow Provincial Laboratory (RRPL), , SK, Canada\n", + "osm query street: 5 research drive regina, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1856: Royal University Hospital, Saskatoon, SK, Canada\n", + "osm query name: Royal University Hospital, Saskatoon, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1857: Royal University Hospital Foundation Inc., Saskatoon, SK, Canada\n", + "osm query name: Royal University Hospital Foundation Inc., Saskatoon, SK, Canada\n", + "osm query street: 103 hospital drive, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1858: Samaritan Place, Saskatoon, SK, Canada\n", + "osm query name: Samaritan Place, Saskatoon, SK, Canada\n", + "osm query street: 375 cornish rd, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1859: Sandy Bay Health Clinic, , SK, Canada\n", + "osm query name: Sandy Bay Health Clinic, , SK, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "1860: Santa Maria Senior Citizens Home, , SK, Canada\n", + "osm query name: Santa Maria Senior Citizens Home, , SK, Canada\n", + "osm query street: 4215 regina avenue regina, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1861: Sask. Valley Hospital Foundation Inc., Rosthern, SK, Canada\n", + "osm query name: Sask. Valley Hospital Foundation Inc., Rosthern, SK, Canada\n", + "osm query street: 718 railway avenue, Rosthern, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1862: Saskatchewan Hospital North Battleford, North battleford, SK, Canada\n", + "osm query name: Saskatchewan Hospital North Battleford, North battleford, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1863: Saskatoon City Hospital, Saskatoon, SK, Canada\n", + "osm query name: Saskatoon City Hospital, Saskatoon, SK, Canada\n", + "osm query street: 701 queen st, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1864: Saskatoon City Hospital Foundation, Saskatoon, SK, Canada\n", + "osm query name: Saskatoon City Hospital Foundation, Saskatoon, SK, Canada\n", + "osm query street: 701 queen street, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1865: Saskatoon Convalescent Home, Saskatoon, SK, Canada\n", + "osm query name: Saskatoon Convalescent Home, Saskatoon, SK, Canada\n", + "osm query street: 101 31st st w, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1866: Shaunavon Hospital and Care Centre, Shaunavon, SK, Canada\n", + "osm query name: Shaunavon Hospital and Care Centre, Shaunavon, SK, Canada\n", + "osm query street: 660 fourth st e, Shaunavon, SK, Canada\n", + "osm query city: Shaunavon, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1867: Shellbrook Primary Health Care Clinic, Shellbrook, SK, Canada\n", + "osm query name: Shellbrook Primary Health Care Clinic, Shellbrook, SK, Canada\n", + "osm query street: 206 2nd ave w, Shellbrook, SK, Canada\n", + "osm query city: Shellbrook, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1868: Sherbrooke Community Centre, Saskatoon, SK, Canada\n", + "osm query name: Sherbrooke Community Centre, Saskatoon, SK, Canada\n", + "osm query street: 401 acadia dr, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1869: Silver Heights Special Care Home, Raymore, SK, Canada\n", + "osm query name: Silver Heights Special Care Home, Raymore, SK, Canada\n", + "osm query street: 402 mclean street, Raymore, SK, Canada\n", + "osm query city: Raymore, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1870: Smeaton Health Centre, , SK, Canada\n", + "osm query name: Smeaton Health Centre, , SK, Canada\n", + "osm query street: 2 ave n smeaton, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1871: Southeast Integrated Care Centre, Moosomin, SK, Canada\n", + "osm query name: Southeast Integrated Care Centre, Moosomin, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1872: Southwest Integrated Healthcare Facility, Maple creek, SK, Canada\n", + "osm query name: Southwest Integrated Healthcare Facility, Maple creek, SK, Canada\n", + "osm query street: 102 fith avenue west, Maple creek, SK, Canada\n", + "osm query city: Maple creek, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1873: Spalding Community Health Centre, Spalding, SK, Canada\n", + "osm query name: Spalding Community Health Centre, Spalding, SK, Canada\n", + "osm query street: 318 2 street south, Spalding, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1874: Spiritwood and District Health Complex, Spiritwood, SK, Canada\n", + "osm query name: Spiritwood and District Health Complex, Spiritwood, SK, Canada\n", + "osm query street: 400 1st e, Spiritwood, SK, Canada\n", + "osm query city: Spiritwood, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1875: St. Ann’s Senior Citizens’ Village Corporation, Saskatoon, SK, Canada\n", + "osm query name: St. Ann’s Senior Citizens’ Village Corporation, Saskatoon, SK, Canada\n", + "osm query street: 2910 louise st, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1876: St. Anthony's Hospital, Esterhazy, SK, Canada\n", + "osm query name: St. Anthony's Hospital, Esterhazy, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1877: St. Joseph's Health Facility, Macklin, SK, Canada\n", + "osm query name: St. Joseph's Health Facility, Macklin, SK, Canada\n", + "osm query street: highway 31 north, Macklin, SK, Canada\n", + "osm query city: Macklin, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1878: St. Joseph's Home, Saskatoon, SK, Canada\n", + "osm query name: St. Joseph's Home, Saskatoon, SK, Canada\n", + "osm query street: 33 valens dr, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1879: St. Joseph's Hospital, Estevan, SK, Canada\n", + "osm query name: St. Joseph's Hospital, Estevan, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1880: St. Joseph's Hospital/Foyer d'Youville, Gravelbourg/ponteix, SK, Canada\n", + "osm query name: St. Joseph's Hospital/Foyer d'Youville, Gravelbourg/ponteix, SK, Canada\n", + "osm query street: 216 bettez st., Gravelbourg/ponteix, SK, Canada\n", + "osm query city: Gravelbourg/ponteix, SK, Canada\n", + "[6] no address found\n", + "\n", + "\n", + "1881: St. Joseph's Integrated Care Centre, Lestock, SK, Canada\n", + "osm query name: St. Joseph's Integrated Care Centre, Lestock, SK, Canada\n", + "osm query street: 508 westmoore st, Lestock, SK, Canada\n", + "osm query city: Lestock, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1882: St. Joseph’s Hospital/Foyer d’Youville Foundation Inc., Gravelbourg, SK, Canada\n", + "osm query name: St. Joseph’s Hospital/Foyer d’Youville Foundation Inc., Gravelbourg, SK, Canada\n", + "osm query street: 216 bettez street, Gravelbourg, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1883: St. Mary's Villa, Humboldt, SK, Canada\n", + "osm query name: St. Mary's Villa, Humboldt, SK, Canada\n", + "osm query street: 1109 13 st, Humboldt, SK, Canada\n", + "osm query city: Humboldt, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1884: St. Mary’s Villa Foundation Inc., Humboldt, SK, Canada\n", + "osm query name: St. Mary’s Villa Foundation Inc., Humboldt, SK, Canada\n", + "osm query street: 1109 13th street, Humboldt, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1885: St. Paul Lutheran Home, Melville, SK, Canada\n", + "osm query name: St. Paul Lutheran Home, Melville, SK, Canada\n", + "osm query street: 100 heritage drive, Melville, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1886: St. Paul's Hospital, Saskatoon, SK, Canada\n", + "osm query name: St. Paul's Hospital, Saskatoon, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1887: St. Paul’s Hospital Foundation, Saskatoon, SK, Canada\n", + "osm query name: St. Paul’s Hospital Foundation, Saskatoon, SK, Canada\n", + "osm query street: 1702 20th street west, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1888: St. Peter's Hospital, Melville, SK, Canada\n", + "osm query name: St. Peter's Hospital, Melville, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1889: St. Peter's Hospital Foundation, Melville, SK, Canada\n", + "osm query name: St. Peter's Hospital Foundation, Melville, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Melville, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1890: St. Walburg Health Complex, , SK, Canada\n", + "osm query name: St. Walburg Health Complex, , SK, Canada\n", + "osm query street: 410 3rd ave west st. walburg, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1891: Stensrud Lodge, Saskatoon, SK, Canada\n", + "osm query name: Stensrud Lodge, Saskatoon, SK, Canada\n", + "osm query street: 2202 mceown ave, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1892: Strasbourg and District Health Centre, Strasbourg, SK, Canada\n", + "osm query name: Strasbourg and District Health Centre, Strasbourg, SK, Canada\n", + "osm query street: 303 king edward st, Strasbourg, SK, Canada\n", + "osm query city: Strasbourg, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1893: Sunnyside Adventist Care Centre, Saskatoon, SK, Canada\n", + "osm query name: Sunnyside Adventist Care Centre, Saskatoon, SK, Canada\n", + "osm query street: 2200 st henry ave, Saskatoon, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1894: Sunrise Health and Wellness Centre, Yorkton, SK, Canada\n", + "osm query name: Sunrise Health and Wellness Centre, Yorkton, SK, Canada\n", + "osm query street: 259 hamilton road, Yorkton, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1895: Sunset Haven, Carnduff, SK, Canada\n", + "osm query name: Sunset Haven, Carnduff, SK, Canada\n", + "osm query street: 415 spencer street, Carnduff, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1896: Tatagwa View, Weyburn, SK, Canada\n", + "osm query name: Tatagwa View, Weyburn, SK, Canada\n", + "osm query street: 9 souris valley rd, Weyburn, SK, Canada\n", + "osm query city: Weyburn, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1897: The Health Foundation of East Central Saskatchewan, Yorkton, SK, Canada\n", + "osm query name: The Health Foundation of East Central Saskatchewan, Yorkton, SK, Canada\n", + "osm query street: 41 betts avenue, Yorkton, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1898: The Indian Head and District Hospital Foundation Inc., , SK, Canada\n", + "osm query name: The Indian Head and District Hospital Foundation Inc., , SK, Canada\n", + "osm query street: indian head, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1899: The Meadows, Swift current, SK, Canada\n", + "osm query name: The Meadows, Swift current, SK, Canada\n", + "osm query street: 2215 woodrow lloyd place, Swift current, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1900: Theodore Health Centre, , SK, Canada\n", + "osm query name: Theodore Health Centre, , SK, Canada\n", + "osm query street: 615 anderson ave theodore, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1901: Tisdale Community Health Centre, , SK, Canada\n", + "osm query name: Tisdale Community Health Centre, , SK, Canada\n", + "osm query street: 2010 110th avenue west tisdale, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1902: Tisdale Hospital, , SK, Canada\n", + "osm query name: Tisdale Hospital, , SK, Canada\n", + "osm query street: 2010 110th avenue wes tisdale, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1903: Touchwood Qu'Appelle (Fort Qu'Appelle Primary Health Care Centre), Fort qu'appelle, SK, Canada\n", + "osm query name: Touchwood Qu'Appelle (Fort Qu'Appelle Primary Health Care Centre), Fort qu'appelle, SK, Canada\n", + "osm query street: 178 boundary avenue north, Fort qu'appelle, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1904: Twin City Medical Clinic PHC & Walk-In Clinic, North battleford north battleford, SK, Canada\n", + "osm query name: Twin City Medical Clinic PHC & Walk-In Clinic, North battleford north battleford, SK, Canada\n", + "osm query street: 1102 103 st, North battleford north battleford, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1905: Twin Rivers Health Foundation Inc., Paradise hill, SK, Canada\n", + "osm query name: Twin Rivers Health Foundation Inc., Paradise hill, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Paradise hill, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1906: Unity and District Health Centre, Unity, SK, Canada\n", + "osm query name: Unity and District Health Centre, Unity, SK, Canada\n", + "osm query street: airport road, Unity, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1907: Unity Health Care Foundation Inc., Unity, SK, Canada\n", + "osm query name: Unity Health Care Foundation Inc., Unity, SK, Canada\n", + "no street address in dataframe\n", + "osm query city: Unity, SK, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1908: Vanguard Health Centre, Vanguard, SK, Canada\n", + "osm query name: Vanguard Health Centre, Vanguard, SK, Canada\n", + "osm query street: division street, Vanguard, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1909: Victoria Hospital, Prince, SK, Canada\n", + "osm query name: Victoria Hospital, Prince, SK, Canada\n", + "osm query street: 1521 6th nw, Prince, SK, Canada\n", + "osm query city: Prince, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1910: Victoria Hospital Foundation, Prince albert, SK, Canada\n", + "osm query name: Victoria Hospital Foundation, Prince albert, SK, Canada\n", + "osm query street: 1200 24th street west, Prince albert, SK, Canada\n", + "osm query city: Prince albert, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1911: Villa Pascal, North battleford, SK, Canada\n", + "osm query name: Villa Pascal, North battleford, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1912: Wadena Hospital, Wadena, SK, Canada\n", + "osm query name: Wadena Hospital, Wadena, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1913: Wakaw Primary Health Care Centre and Collaborative Emergency Centre, , SK, Canada\n", + "osm query name: Wakaw Primary Health Care Centre and Collaborative Emergency Centre, , SK, Canada\n", + "osm query street: 301 1 st n wakaw, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1914: Warman Mennonite Special Care Home, Warman, SK, Canada\n", + "osm query name: Warman Mennonite Special Care Home, Warman, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1915: Wascana Rehabilitation Centre, , SK, Canada\n", + "osm query name: Wascana Rehabilitation Centre, , SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1916: Wascana Rehabilitation Centre Extended Care/Veterans Program, , SK, Canada\n", + "osm query name: Wascana Rehabilitation Centre Extended Care/Veterans Program, , SK, Canada\n", + "osm query street: 2180 23 ave regina, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1917: Watrous District Health Complex, Watrous, SK, Canada\n", + "osm query name: Watrous District Health Complex, Watrous, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1918: Watson Community Health Centre, , SK, Canada\n", + "osm query name: Watson Community Health Centre, , SK, Canada\n", + "osm query street: 201 2 street ne, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1919: Wawota Memorial Health Centre, Wawota, SK, Canada\n", + "osm query name: Wawota Memorial Health Centre, Wawota, SK, Canada\n", + "osm query street: 201 1 ave nw, Wawota, SK, Canada\n", + "osm query city: Wawota, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1920: Western Seniors Home, , SK, Canada\n", + "osm query name: Western Seniors Home, , SK, Canada\n", + "osm query street: 400 1 st w leader, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1921: Weyburn & District Hospital Foundation Inc , Weyburn, SK, Canada\n", + "osm query name: Weyburn & District Hospital Foundation Inc , Weyburn, SK, Canada\n", + "osm query street: 33 5th street, Weyburn, SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1922: Weyburn Community Health Services, Weyburn, SK, Canada\n", + "osm query name: Weyburn Community Health Services, Weyburn, SK, Canada\n", + "osm query street: 900 saskatchewan drive, Weyburn, SK, Canada\n", + "osm query city: Weyburn, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1923: Weyburn General Hospital, , SK, Canada\n", + "osm query name: Weyburn General Hospital, , SK, Canada\n", + "osm query street: 201 1 ave e weyburn, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1924: Wheatland Lodge, Leask, SK, Canada\n", + "osm query name: Wheatland Lodge, Leask, SK, Canada\n", + "osm query street: 971 2nd street north, Leask, SK, Canada\n", + "osm query city: Leask, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1925: Whispering Pine Place, Canwood, SK, Canada\n", + "osm query name: Whispering Pine Place, Canwood, SK, Canada\n", + "osm query street: 300 1st avenue, Canwood, SK, Canada\n", + "osm query city: Canwood, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1926: Whitecap Dakota First Nations, Saskatoon, SK, Canada\n", + "osm query name: Whitecap Dakota First Nations, Saskatoon, SK, Canada\n", + "osm query street: 182 chief whitecap trail, Saskatoon, SK, Canada\n", + "osm query city: Saskatoon, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1927: Whitewood Community Health Centre, Whitewood, SK, Canada\n", + "osm query name: Whitewood Community Health Centre, Whitewood, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1928: Wilkie and District Health Centre, , SK, Canada\n", + "osm query name: Wilkie and District Health Centre, , SK, Canada\n", + "osm query street: 304 7th ave e wilkie, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1929: Wilkie and District Health Foundation, , SK, Canada\n", + "osm query name: Wilkie and District Health Foundation, , SK, Canada\n", + "osm query street: 206 2nd ave west wilkie, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1930: William Booth Special Care Home, , SK, Canada\n", + "osm query name: William Booth Special Care Home, , SK, Canada\n", + "osm query street: 50 angus road regina, , SK, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1931: Willow Bunch Primary Health Care Centre, Willow bunch, SK, Canada\n", + "osm query name: Willow Bunch Primary Health Care Centre, Willow bunch, SK, Canada\n", + "osm query street: 17 3 st se, Willow bunch, SK, Canada\n", + "osm query city: Willow bunch, SK, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1932: Wolf Willow Health Centre, , SK, Canada\n", + "osm query name: Wolf Willow Health Centre, , SK, Canada\n", + "osm query street: 55 red coat dr, , SK, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "1933: Wolseley Memorial Integrated Care Centre, Wolseley, SK, Canada\n", + "osm query name: Wolseley Memorial Integrated Care Centre, Wolseley, SK, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1934: Wolseley Memorial Union Hospital, Wolseley, SK, Canada\n", + "osm query name: Wolseley Memorial Union Hospital, Wolseley, SK, Canada\n", + "osm query street: 788 southern shore highway, Bay Bulls, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1943: \n", + "Bay Roberts Regional Centre\n", + ", Bay Roberts, NL, Canada\n", + "osm query name: \n", + "Bay Roberts Regional Centre\n", + ", Bay Roberts, NL, Canada\n", + "osm query street: 17 bareneed road, Bay Roberts, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1944: \n", + "Blue Crest Nursing Home\n", + ", Grand Bank, NL, Canada\n", + "osm query name: \n", + "Blue Crest Nursing Home\n", + ", Grand Bank, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1945: \n", + "Bonavista Bungalows Protective Community Residence\n", + ", Bonavista, NL, Canada\n", + "osm query name: \n", + "Bonavista Bungalows Protective Community Residence\n", + ", Bonavista, NL, Canada\n", + "osm query street: 20 joy's lane, Bonavista, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1946: \n", + "Bonavista Community Supports\n", + ", Bonavista, NL, Canada\n", + "osm query name: \n", + "Bonavista Community Supports\n", + ", Bonavista, NL, Canada\n", + "osm query street: 43 campbell st, Bonavista, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1947: \n", + "Bonavista Peninsula Health Centre\n", + ", Bonavista, NL, Canada\n", + "osm query name: \n", + "Bonavista Peninsula Health Centre\n", + ", Bonavista, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Bonavista, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1948: \n", + "Buckmaster’s Circle Community Centre\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Buckmaster’s Circle Community Centre\n", + ", St. John's, NL, Canada\n", + "osm query street: 129 buckmaster's circle, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1949: \n", + "Burin Peninsula Health Care Centre\n", + ", Burin, NL, Canada\n", + "osm query name: \n", + "Burin Peninsula Health Care Centre\n", + ", Burin, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1950: \n", + "Carbonear General Hospital\n", + ", Carbonear, NL, Canada\n", + "osm query name: \n", + "Carbonear General Hospital\n", + ", Carbonear, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1951: \n", + "Caribou Memorial Veterans Pavilion\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Caribou Memorial Veterans Pavilion\n", + ", St. John's, NL, Canada\n", + "osm query street: 90 forest road, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1952: \n", + "Chapel Arm Medical Clinic\n", + ", Chapel Arm, NL, Canada\n", + "osm query name: \n", + "Chapel Arm Medical Clinic\n", + ", Chapel Arm, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Chapel Arm, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1953: \n", + "Charles R. Bell Building\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Charles R. Bell Building\n", + ", St. John's, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: St. John's, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1954: \n", + "Clarenville Protective Community Care Residence\n", + ", Clarenville, NL, Canada\n", + "osm query name: \n", + "Clarenville Protective Community Care Residence\n", + ", Clarenville, NL, Canada\n", + "osm query street: 16 horwood crescent, Clarenville, NL, Canada\n", + "osm query city: Clarenville, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1955: \n", + "Coish Place\n", + ", Clarenville, NL, Canada\n", + "osm query name: \n", + "Coish Place\n", + ", Clarenville, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1956: \n", + "Come By Chance District Office\n", + ", Come By Chance, NL, Canada\n", + "osm query name: \n", + "Come By Chance District Office\n", + ", Come By Chance, NL, Canada\n", + "osm query street: main road, Come By Chance, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1957: \n", + "Community Health Nursing Office, Kings Cove\n", + ", King's Cove, NL, Canada\n", + "osm query name: \n", + "Community Health Nursing Office, Kings Cove\n", + ", King's Cove, NL, Canada\n", + "osm query street: route 235, King's Cove, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1958: \n", + "Conception Bay South Clinic- Zone 5\n", + ", Conception Bay South, NL, Canada\n", + "osm query name: \n", + "Conception Bay South Clinic- Zone 5\n", + ", Conception Bay South, NL, Canada\n", + "osm query street: conception bay highway, Conception Bay South, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1959: \n", + "Cordage Place- Zone 2\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Cordage Place- Zone 2\n", + ", St. John's, NL, Canada\n", + "osm query street: cordage place mundy pond, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1960: \n", + "DM Brown Building\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "DM Brown Building\n", + ", St. John's, NL, Canada\n", + "osm query street: tilley's road, St. John's, NL, Canada\n", + "osm query city: St. John's, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1961: \n", + "Dr. A. A. Wilkinson Memorial Health Centre\n", + ", Old Perlican, NL, Canada\n", + "osm query name: \n", + "Dr. A. A. Wilkinson Memorial Health Centre\n", + ", Old Perlican, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Old Perlican, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1962: \n", + "Dr. Albert O’Mahony Memorial Manor\n", + ", Clarenville, NL, Canada\n", + "osm query name: \n", + "Dr. Albert O’Mahony Memorial Manor\n", + ", Clarenville, NL, Canada\n", + "osm query street: 67 manitoba drive, Clarenville, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1963: \n", + "Dr. G.B. Cross Memorial Hospital\n", + ", Clarenville, NL, Canada\n", + "osm query name: \n", + "Dr. G.B. Cross Memorial Hospital\n", + ", Clarenville, NL, Canada\n", + "osm query street: 67 manitoba drive, Clarenville, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1964: \n", + "Dr. H. Bliss Murphy Cancer Centre\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Dr. H. Bliss Murphy Cancer Centre\n", + ", St. John's, NL, Canada\n", + "osm query street: 300 prince phillip drive, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1965: \n", + "Dr. L.A. Miller Centre\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Dr. L.A. Miller Centre\n", + ", St. John's, NL, Canada\n", + "osm query street: 100 forest rd, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1966: \n", + "Dr. S. Beckley Health Centre\n", + ", Grand Bank, NL, Canada\n", + "osm query name: \n", + "Dr. S. Beckley Health Centre\n", + ", Grand Bank, NL, Canada\n", + "osm query street: 3 grandview boulevard, Grand Bank, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1967: \n", + "Dr. Walter Templeman Health Care Centre\n", + ", Bell Island, NL, Canada\n", + "osm query name: \n", + "Dr. Walter Templeman Health Care Centre\n", + ", Bell Island, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Bell Island, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1968: \n", + "Dr. Wm H. Newhook Community Health Centre\n", + ", Whitbourne, NL, Canada\n", + "osm query name: \n", + "Dr. Wm H. Newhook Community Health Centre\n", + ", Whitbourne, NL, Canada\n", + "osm query street: 7 whitbourne ave, Whitbourne, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1969: \n", + "Eastern Health 657 Topsail Road\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Eastern Health 657 Topsail Road\n", + ", St. John's, NL, Canada\n", + "osm query street: 657 topsail road, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1970: \n", + "Ferryland Health and Community Service Clinic\n", + ", Ferryland, NL, Canada\n", + "osm query name: \n", + "Ferryland Health and Community Service Clinic\n", + ", Ferryland, NL, Canada\n", + "osm query street: ferryland main highway, Ferryland, NL, Canada\n", + "osm query city: Ferryland, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1971: \n", + "Froude Avenue Community Health Office\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Froude Avenue Community Health Office\n", + ", St. John's, NL, Canada\n", + "osm query street: 89 froude avenue the blocks mundy pond, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1972: \n", + "Golden Heights Manor\n", + ", Bonavista, NL, Canada\n", + "osm query name: \n", + "Golden Heights Manor\n", + ", Bonavista, NL, Canada\n", + "osm query street: 43 campbell street, Bonavista, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1973: \n", + "Harbour Grace Regional Centre (Taylor Building)\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Harbour Grace Regional Centre (Taylor Building)\n", + ", St. John's, NL, Canada\n", + "osm query street: 33 cathedral street, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1974: \n", + "Health Sciences Centre\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Health Sciences Centre\n", + ", St. John's, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1975: \n", + "Heart’s Delight District Office\n", + ", Heart's Delight, NL, Canada\n", + "osm query name: \n", + "Heart’s Delight District Office\n", + ", Heart's Delight, NL, Canada\n", + "osm query street: 395 main road, Heart's Delight, NL, Canada\n", + "osm query city: Heart's Delight, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1976: \n", + "Holyrood Regional Office\n", + ", Holyrood, NL, Canada\n", + "osm query name: \n", + "Holyrood Regional Office\n", + ", Holyrood, NL, Canada\n", + "osm query street: 363 conception bay highway, Holyrood, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1977: \n", + "Janeway Children’s Health and Rehabilitation Centre\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Janeway Children’s Health and Rehabilitation Centre\n", + ", St. John's, NL, Canada\n", + "osm query street: 300 prince phillip drive, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1978: \n", + "Kidney Care Centre, Mount Pearl Square\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Kidney Care Centre, Mount Pearl Square\n", + ", St. John's, NL, Canada\n", + "osm query street: 760 topsail road, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1979: \n", + "LeMarchant House\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "LeMarchant House\n", + ", St. John's, NL, Canada\n", + "osm query street: 192 lemarchant road, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1980: \n", + "Lethbridge District Office\n", + ", Lethbridge, NL, Canada\n", + "osm query name: \n", + "Lethbridge District Office\n", + ", Lethbridge, NL, Canada\n", + "osm query street: main road, Lethbridge, NL, Canada\n", + "osm query city: Lethbridge, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1981: \n", + "Lions Manor Nursing Home (Placentia Health Centre)\n", + ", Placentia, NL, Canada\n", + "osm query name: \n", + "Lions Manor Nursing Home (Placentia Health Centre)\n", + ", Placentia, NL, Canada\n", + "osm query street: 1 corrigan place, Placentia, NL, Canada\n", + "osm query city: Placentia, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1982: \n", + "Long Pond Community Care Centre\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Long Pond Community Care Centre\n", + ", St. John's, NL, Canada\n", + "osm query street: 56 mineral's road, St. John's, NL, Canada\n", + "osm query city: St. John's, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1983: \n", + "MacMorran Community Centre\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "MacMorran Community Centre\n", + ", St. John's, NL, Canada\n", + "osm query street: 10 brother mcsheffrey lane bells turn, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1984: \n", + "Major’s Path Clinic\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Major’s Path Clinic\n", + ", St. John's, NL, Canada\n", + "osm query street: 35 major's path, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1985: \n", + "Marystown Community Services\n", + ", Marystown, NL, Canada\n", + "osm query name: \n", + "Marystown Community Services\n", + ", Marystown, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Marystown, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1986: \n", + "Mount Carmel Health Centre\n", + ", Mount Carmel, NL, Canada\n", + "osm query name: \n", + "Mount Carmel Health Centre\n", + ", Mount Carmel, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Mount Carmel, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1987: \n", + "Mount Pearl Square – Administration\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Mount Pearl Square – Administration\n", + ", St. John's, NL, Canada\n", + "osm query street: 760 topsail road, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1988: \n", + "Mount Pearl Square – Community Services\n", + ", Mount Pearl, NL, Canada\n", + "osm query name: \n", + "Mount Pearl Square – Community Services\n", + ", Mount Pearl, NL, Canada\n", + "osm query street: 760 topsail road, Mount Pearl, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1989: \n", + "Nuclear and Molecular Medicine facility\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Nuclear and Molecular Medicine facility\n", + ", St. John's, NL, Canada\n", + "osm query street: 300 prince phillip drive, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1990: \n", + "Nurse Abernathy Clinic\n", + ", Trepassey, NL, Canada\n", + "osm query name: \n", + "Nurse Abernathy Clinic\n", + ", Trepassey, NL, Canada\n", + "osm query street: main road, Trepassey, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1991: \n", + "Old Perlican District Office\n", + ", Old Perlican, NL, Canada\n", + "osm query name: \n", + "Old Perlican District Office\n", + ", Old Perlican, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Old Perlican, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "1992: \n", + "Park Place\n", + ", Clarenville, NL, Canada\n", + "osm query name: \n", + "Park Place\n", + ", Clarenville, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1993: \n", + "Pippy Place\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Pippy Place\n", + ", St. John's, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1994: \n", + "Placentia District Office\n", + ", Placentia, NL, Canada\n", + "osm query name: \n", + "Placentia District Office\n", + ", Placentia, NL, Canada\n", + "osm query street: prince william drive, Placentia, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "1995: \n", + "Placentia Health Centre\n", + ", Placentia, NL, Canada\n", + "osm query name: \n", + "Placentia Health Centre\n", + ", Placentia, NL, Canada\n", + "osm query street: 1 corrigan place, Placentia, NL, Canada\n", + "osm query city: Placentia, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1996: \n", + "Placentia West Medical Clinic\n", + ", Boat Harbour, NL, Canada\n", + "osm query name: \n", + "Placentia West Medical Clinic\n", + ", Boat Harbour, NL, Canada\n", + "osm query street: route 210 main burin peninsula highway, Boat Harbour, NL, Canada\n", + "osm query city: Boat Harbour, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1997: \n", + "Pleasant View Towers\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Pleasant View Towers\n", + ", St. John's, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "1998: \n", + "Portugal Cove Community Health Clinic (Major’s Path)\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Portugal Cove Community Health Clinic (Major’s Path)\n", + ", St. John's, NL, Canada\n", + "osm query street: 35 majors path, St. John's, NL, Canada\n", + "osm query city: St. John's, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "1999: \n", + "Powell Clinic\n", + ", Bay Robert's, NL, Canada\n", + "osm query name: \n", + "Powell Clinic\n", + ", Bay Robert's, NL, Canada\n", + "osm query street: 286 conception bay hwy, Bay Robert's, NL, Canada\n", + "osm query city: Bay Robert's, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2000: \n", + "Pte. Josiah Squibb Memorial Pavilion\n", + ", Carbonear, NL, Canada\n", + "osm query name: \n", + "Pte. Josiah Squibb Memorial Pavilion\n", + ", Carbonear, NL, Canada\n", + "osm query street: 6 earles lane, Carbonear, NL, Canada\n", + "osm query city: Carbonear, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2001: \n", + "Rabbittown Community Health Office\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Rabbittown Community Health Office\n", + ", St. John's, NL, Canada\n", + "osm query street: graves street churchill park, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2002: \n", + "Recovery Centre\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Recovery Centre\n", + ", St. John's, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: St. John's, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2003: \n", + "Rutter Building\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Rutter Building\n", + ", St. John's, NL, Canada\n", + "osm query street: crosbie road wishingwell park, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2004: \n", + "Saint Luke’s Homes\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Saint Luke’s Homes\n", + ", St. John's, NL, Canada\n", + "osm query street: 24 road, St. John's, NL, Canada\n", + "osm query city: St. John's, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2005: \n", + "Salvation Army Glenbrook Lodge\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Salvation Army Glenbrook Lodge\n", + ", St. John's, NL, Canada\n", + "osm query street: 105 torbay road, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2006: \n", + "Shamrock Medical Centre\n", + ", Ferryland, NL, Canada\n", + "osm query name: \n", + "Shamrock Medical Centre\n", + ", Ferryland, NL, Canada\n", + "osm query street: 596 baltimore drive, Ferryland, NL, Canada\n", + "osm query city: Ferryland, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2007: \n", + "Shea Heights Community Health Centre\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Shea Heights Community Health Centre\n", + ", St. John's, NL, Canada\n", + "osm query street: 57b linegar avenue, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2008: \n", + "South East Bight Clinic\n", + ", South East Bight, NL, Canada\n", + "osm query name: \n", + "South East Bight Clinic\n", + ", South East Bight, NL, Canada\n", + "osm query street: burin peninsula, South East Bight, NL, Canada\n", + "osm query city: South East Bight, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2009: \n", + "Southcott Hall\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Southcott Hall\n", + ", St. John's, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2010: \n", + "St. Bride’s District Office\n", + ", St. Bride’s, NL, Canada\n", + "osm query name: \n", + "St. Bride’s District Office\n", + ", St. Bride’s, NL, Canada\n", + "osm query street: main road, St. Bride’s, NL, Canada\n", + "osm query city: St. Bride’s, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2011: \n", + "St. Clare’s Mercy Hospital\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "St. Clare’s Mercy Hospital\n", + ", St. John's, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2012: \n", + "St. Mary’s Health Centre\n", + ", St. Mary's, NL, Canada\n", + "osm query name: \n", + "St. Mary’s Health Centre\n", + ", St. Mary's, NL, Canada\n", + "osm query street: 2 dillons lane, St. Mary's, NL, Canada\n", + "osm query city: St. Mary's, NL, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2013: \n", + "St. Patrick’s Mercy Home\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "St. Patrick’s Mercy Home\n", + ", St. John's, NL, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2014: \n", + "Terrenceville Medical Clinic\n", + ", Terrenceville, NL, Canada\n", + "osm query name: \n", + "Terrenceville Medical Clinic\n", + ", Terrenceville, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Terrenceville, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2015: \n", + "The Agnes Pratt Home\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "The Agnes Pratt Home\n", + ", St. John's, NL, Canada\n", + "osm query street: 239 topsail road, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2016: \n", + "The Grace Centre\n", + ", Harbour Grace, NL, Canada\n", + "osm query name: \n", + "The Grace Centre\n", + ", Harbour Grace, NL, Canada\n", + "osm query street: 50 lady lake road, Harbour Grace, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2017: \n", + "Torbay Community Health Clinic\n", + ", Torbay, NL, Canada\n", + "osm query name: \n", + "Torbay Community Health Clinic\n", + ", Torbay, NL, Canada\n", + "osm query street: 1345 torbay road, Torbay, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2018: \n", + "Trinity Medical Clinic\n", + ", Trinity, NL, Canada\n", + "osm query name: \n", + "Trinity Medical Clinic\n", + ", Trinity, NL, Canada\n", + "osm query street: main road, Trinity, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2019: \n", + "Tuckamore Centre\n", + ", Paradise, NL, Canada\n", + "osm query name: \n", + "Tuckamore Centre\n", + ", Paradise, NL, Canada\n", + "osm query street: 7 mallow drive, Paradise, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2020: \n", + "U.S. Memorial Health Centre\n", + ", St. Lawrence, NL, Canada\n", + "osm query name: \n", + "U.S. Memorial Health Centre\n", + ", St. Lawrence, NL, Canada\n", + "osm query street: 1 memorial dr., St. Lawrence, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2021: \n", + "Waterford Hospital\n", + ", St. John's, NL, Canada\n", + "osm query name: \n", + "Waterford Hospital\n", + ", St. John's, NL, Canada\n", + "osm query street: 306 waterford bridge road, St. John's, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2022: \n", + "Western Bay Medical Clinic\n", + ", Western Bay, NL, Canada\n", + "osm query name: \n", + "Western Bay Medical Clinic\n", + ", Western Bay, NL, Canada\n", + "no street address in dataframe\n", + "osm query city: Western Bay, NL, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2023: \n", + "Whitbourne Community Services Building\n", + ", Whitbourne, NL, Canada\n", + "osm query name: \n", + "Whitbourne Community Services Building\n", + ", Whitbourne, NL, Canada\n", + "osm query street: 39 main street, Whitbourne, NL, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2024: 7th Street Health Access Centre, Brandon, Manitoba, Canada\n", + "osm query name: 7th Street Health Access Centre, Brandon, Manitoba, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2025: Alonsa Community Health Services, Alonsa, Manitoba, Canada\n", + "osm query name: Alonsa Community Health Services, Alonsa, Manitoba, Canada\n", + "osm query street: #27 railway ave. south, Alonsa, Manitoba, Canada\n", + "osm query city: Alonsa, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2026: Bacon Ridge Community Health Services, Ebb & Flow, Manitoba, Canada\n", + "osm query name: Bacon Ridge Community Health Services, Ebb & Flow, Manitoba, Canada\n", + "no street address in dataframe\n", + "osm query city: Ebb & Flow, Manitoba, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2027: Baldur Personal Care Home, Baldur, Manitoba, Canada\n", + "osm query name: Baldur Personal Care Home, Baldur, Manitoba, Canada\n", + "osm query street: 531 elizabeth street, Baldur, Manitoba, Canada\n", + "osm query city: Baldur, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2028: Baldur Health Centre, Baldur, Manitoba, Canada\n", + "osm query name: Baldur Health Centre, Baldur, Manitoba, Canada\n", + "osm query street: 531 elizabeth street, Baldur, Manitoba, Canada\n", + "osm query city: Baldur, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2029: Bayside Personal Care Home, Killarney, Manitoba, Canada\n", + "osm query name: Bayside Personal Care Home, Killarney, Manitoba, Canada\n", + "osm query street: 5000 ellis dr. box, Killarney, Manitoba, Canada\n", + "osm query city: Killarney, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2030: Benito Health Centre , Benito, Manitoba, Canada\n", + "osm query name: Benito Health Centre , Benito, Manitoba, Canada\n", + "osm query street: 490 1st st. se box, Benito, Manitoba, Canada\n", + "osm query city: Benito, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2031: Benito Personal Care Home, Benito, Manitoba, Canada\n", + "osm query name: Benito Personal Care Home, Benito, Manitoba, Canada\n", + "osm query street: 290 1st st. se box, Benito, Manitoba, Canada\n", + "osm query city: Benito, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2032: Birch Lodge Personal Care Home, Hamiota, Manitoba, Canada\n", + "osm query name: Birch Lodge Personal Care Home, Hamiota, Manitoba, Canada\n", + "osm query street: 177 birch avenue east, Hamiota, Manitoba, Canada\n", + "osm query city: Hamiota, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2033: Birtle Health Centre, Birtle, Manitoba, Canada\n", + "osm query name: Birtle Health Centre, Birtle, Manitoba, Canada\n", + "osm query street: 2000 gertrude st. box, Birtle, Manitoba, Canada\n", + "osm query city: Birtle, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2034: Birtle Personal Care Home, Birtle, Manitoba, Canada\n", + "osm query name: Birtle Personal Care Home, Birtle, Manitoba, Canada\n", + "osm query street: 2000 gertrude st. box, Birtle, Manitoba, Canada\n", + "osm query city: Birtle, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2035: Birtle Community Health Services, Birtle, Manitoba, Canada\n", + "osm query name: Birtle Community Health Services, Birtle, Manitoba, Canada\n", + "osm query street: 2000 gertrude st. box, Birtle, Manitoba, Canada\n", + "osm query city: Birtle, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2036: Boissevain Health Centre , Boissevain, Manitoba, Canada\n", + "osm query name: Boissevain Health Centre , Boissevain, Manitoba, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2037: Brandon Regional Health Centre, Brandon, Manitoba, Canada\n", + "osm query name: Brandon Regional Health Centre, Brandon, Manitoba, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2038: Bren Del Win Lodge Personal Care Home, Deloraine, Manitoba, Canada\n", + "osm query name: Bren Del Win Lodge Personal Care Home, Deloraine, Manitoba, Canada\n", + "osm query street: 103 kellett st. s box 448, Deloraine, Manitoba, Canada\n", + "osm query city: Deloraine, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2039: Camperville Primary Health Care Centre, Camperville, Manitoba, Canada\n", + "osm query name: Camperville Primary Health Care Centre, Camperville, Manitoba, Canada\n", + "no street address in dataframe\n", + "osm query city: Camperville, Manitoba, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2040: Carberry Plains Health Centre, Carberry, Manitoba, Canada\n", + "osm query name: Carberry Plains Health Centre, Carberry, Manitoba, Canada\n", + "osm query street: 340 toronto street, Carberry, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2041: Carberry Personal Care Home, Carberry, Manitoba, Canada\n", + "osm query name: Carberry Personal Care Home, Carberry, Manitoba, Canada\n", + "osm query street: 340 toronto street, Carberry, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2042: Child & Adolescent Treatment Centre, Brandon, Manitoba, Canada\n", + "osm query name: Child & Adolescent Treatment Centre, Brandon, Manitoba, Canada\n", + "osm query street: 1240 10th street, Brandon, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2043: Country Meadows Personal Care Home, Neepawa, Manitoba, Canada\n", + "osm query name: Country Meadows Personal Care Home, Neepawa, Manitoba, Canada\n", + "osm query street: 500 veterans way, Neepawa, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2044: Crane River Community Health Services, Crane River, Manitoba, Canada\n", + "osm query name: Crane River Community Health Services, Crane River, Manitoba, Canada\n", + "no street address in dataframe\n", + "osm query city: Crane River, Manitoba, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2045: Dauphin Regional Health Centre  , Dauphin, Manitoba, Canada\n", + "osm query name: Dauphin Regional Health Centre  , Dauphin, Manitoba, Canada\n", + "osm query street: 625 3rd street sw, Dauphin, Manitoba, Canada\n", + "osm query city: Dauphin, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2046: Davidson Memorial Health Centre, Cartwright, Manitoba, Canada\n", + "osm query name: Davidson Memorial Health Centre, Cartwright, Manitoba, Canada\n", + "osm query street: 118 davidson st. box, Cartwright, Manitoba, Canada\n", + "osm query city: Cartwright, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2047: Deloraine Health Centre, Deloraine, Manitoba, Canada\n", + "osm query name: Deloraine Health Centre, Deloraine, Manitoba, Canada\n", + "osm query street: 109 kellett st. south box 447, Deloraine, Manitoba, Canada\n", + "osm query city: Deloraine, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2048: Delwynda Court Personal Care Home, Deloraine, Manitoba, Canada\n", + "osm query name: Delwynda Court Personal Care Home, Deloraine, Manitoba, Canada\n", + "osm query street: 449 kellett st. south box, Deloraine, Manitoba, Canada\n", + "osm query city: Deloraine, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2049: Dr. Gendreau Personal Care Home, Ste.Rose, Manitoba, Canada\n", + "osm query name: Dr. Gendreau Personal Care Home, Ste.Rose, Manitoba, Canada\n", + "osm query street: 420 mission street box, Ste.Rose, Manitoba, Canada\n", + "osm query city: Ste.Rose, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2050: Duck Bay Community Health Services, Duck Bay, Manitoba, Canada\n", + "osm query name: Duck Bay Community Health Services, Duck Bay, Manitoba, Canada\n", + "osm query street: 133 government raod allowance n box, Duck Bay, Manitoba, Canada\n", + "osm query city: Duck Bay, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2051: Elkhorn Personal Care Home (Elkwood Manor), Elkhorn, Manitoba, Canada\n", + "osm query name: Elkhorn Personal Care Home (Elkwood Manor), Elkhorn, Manitoba, Canada\n", + "osm query street: 70 antrim st. box, Elkhorn, Manitoba, Canada\n", + "osm query city: Elkhorn, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2052: Erickson Health Centre, Erickson, Manitoba, Canada\n", + "osm query name: Erickson Health Centre, Erickson, Manitoba, Canada\n", + "osm query street: 60 queen elizabeth road, Erickson, Manitoba, Canada\n", + "osm query city: Erickson, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2053: Erickson Personal Care Home, Erickson, Manitoba, Canada\n", + "osm query name: Erickson Personal Care Home, Erickson, Manitoba, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2054: Ethelbert Community Health Services, Ethelbert, Manitoba, Canada\n", + "osm query name: Ethelbert Community Health Services, Ethelbert, Manitoba, Canada\n", + "osm query street: 156 railway ave. box, Ethelbert, Manitoba, Canada\n", + "osm query city: Ethelbert, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2055: Evergreen Place Personal Care Home, Boissevain, Manitoba, Canada\n", + "osm query name: Evergreen Place Personal Care Home, Boissevain, Manitoba, Canada\n", + "osm query street: 305 mill road box 889, Boissevain, Manitoba, Canada\n", + "osm query city: Boissevain, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2056: Fairview Personal Care Home, Brandon, Manitoba, Canada\n", + "osm query name: Fairview Personal Care Home, Brandon, Manitoba, Canada\n", + "osm query street: 1351 13th street, Brandon, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2057: Gilbert Plains Health Centre and Personal Care Home, Gilbert Plains, Manitoba, Canada\n", + "osm query name: Gilbert Plains Health Centre and Personal Care Home, Gilbert Plains, Manitoba, Canada\n", + "osm query street: 368 cutforth st. north box, Gilbert Plains, Manitoba, Canada\n", + "osm query city: Gilbert Plains, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2058: Glenboro Health Centre and Personal Care Home, Glenboro, Manitoba, Canada\n", + "osm query name: Glenboro Health Centre and Personal Care Home, Glenboro, Manitoba, Canada\n", + "osm query street: 310 murray ave box, Glenboro, Manitoba, Canada\n", + "osm query city: Glenboro, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2059: Grandview Health Centre, Grandview, Manitoba, Canada\n", + "osm query name: Grandview Health Centre, Grandview, Manitoba, Canada\n", + "osm query street: 644 mill street, Grandview, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2060: Grandview Personal Care Home, Grandview, Manitoba, Canada\n", + "osm query name: Grandview Personal Care Home, Grandview, Manitoba, Canada\n", + "osm query street: 308 jackson street, Grandview, Manitoba, Canada\n", + "osm query city: Grandview, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2061: Hamiota Health Centre, Hamiota, Manitoba, Canada\n", + "osm query name: Hamiota Health Centre, Hamiota, Manitoba, Canada\n", + "osm query street: 177 birch avenue east, Hamiota, Manitoba, Canada\n", + "osm query city: Hamiota, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2062: Hartney Health Centre and Personal Care Home, Hartney, Manitoba, Canada\n", + "osm query name: Hartney Health Centre and Personal Care Home, Hartney, Manitoba, Canada\n", + "osm query street: 280 river ave. box, Hartney, Manitoba, Canada\n", + "osm query city: Hartney, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2063: Killarney Health Unit, Killarney, Manitoba, Canada\n", + "osm query name: Killarney Health Unit, Killarney, Manitoba, Canada\n", + "osm query street: 5000 ellis dr. box, Killarney, Manitoba, Canada\n", + "osm query city: Killarney, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2064: McCreary Community Health Services, McCreary, Manitoba, Canada\n", + "osm query name: McCreary Community Health Services, McCreary, Manitoba, Canada\n", + "osm query street: 208 613 provincial trunk highway 50 box, McCreary, Manitoba, Canada\n", + "osm query city: McCreary, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2065: McCreary Personal Care Home, McCreary, Manitoba, Canada\n", + "osm query name: McCreary Personal Care Home, McCreary, Manitoba, Canada\n", + "osm query street: 250 613 provincial trunk highway 50 box, McCreary, Manitoba, Canada\n", + "osm query city: McCreary, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2066: McCreary/Alonsa Health Centre, McCreary, Manitoba, Canada\n", + "osm query name: McCreary/Alonsa Health Centre, McCreary, Manitoba, Canada\n", + "osm query street: 250 613 provincial trunk highway 50 box, McCreary, Manitoba, Canada\n", + "osm query city: McCreary, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2067: Melita Health Centre, Melita, Manitoba, Canada\n", + "osm query name: Melita Health Centre, Melita, Manitoba, Canada\n", + "osm query street: 459 summit ave. box, Melita, Manitoba, Canada\n", + "osm query city: Melita, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2068: Melita Personal Care Home, Melita, Manitoba, Canada\n", + "osm query name: Melita Personal Care Home, Melita, Manitoba, Canada\n", + "osm query street: 459 summit ave. box, Melita, Manitoba, Canada\n", + "osm query city: Melita, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2069: Minnedosa Health Centre, Minnedosa, Manitoba, Canada\n", + "osm query name: Minnedosa Health Centre, Minnedosa, Manitoba, Canada\n", + "osm query street: 960 1st street sw box, Minnedosa, Manitoba, Canada\n", + "osm query city: Minnedosa, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2070: Minnedosa Personal Care Home, Minnedosa, Manitoba, Canada\n", + "osm query name: Minnedosa Personal Care Home, Minnedosa, Manitoba, Canada\n", + "osm query street: 138 3rd ave. sw, Minnedosa, Manitoba, Canada\n", + "osm query city: Minnedosa, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2071: Morley House Personal Care Home, Shoal Lake, Manitoba, Canada\n", + "osm query name: Morley House Personal Care Home, Shoal Lake, Manitoba, Canada\n", + "osm query street: 490 mary st. box, Shoal Lake, Manitoba, Canada\n", + "osm query city: Shoal Lake, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2072: Neepawa Health Centre (Memorial Hospital), Neepawa, Manitoba, Canada\n", + "osm query name: Neepawa Health Centre (Memorial Hospital), Neepawa, Manitoba, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2073: Neepawa Health Unit , Neepawa, Manitoba, Canada\n", + "osm query name: Neepawa Health Unit , Neepawa, Manitoba, Canada\n", + "osm query street: 485 hospital street, Neepawa, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2074: Prairie Mountain Health Midwifery Services, Brandon, Manitoba, Canada\n", + "osm query name: Prairie Mountain Health Midwifery Services, Brandon, Manitoba, Canada\n", + "osm query street: 531 princess avenue, Brandon, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2075: Reston Health Centre, Reston, Manitoba, Canada\n", + "osm query name: Reston Health Centre, Reston, Manitoba, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2076: Reston Personal Care Home, Reston, Manitoba, Canada\n", + "osm query name: Reston Personal Care Home, Reston, Manitoba, Canada\n", + "osm query street: 250 1st north box, Reston, Manitoba, Canada\n", + "osm query city: Reston, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2077: Rideau Park Personal Care Home, Brandon, Manitoba, Canada\n", + "osm query name: Rideau Park Personal Care Home, Brandon, Manitoba, Canada\n", + "osm query street: 525 victoria ave. east, Brandon, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2078: Riverdale Health Centre, Rivers, Manitoba, Canada\n", + "osm query name: Riverdale Health Centre, Rivers, Manitoba, Canada\n", + "osm query street: 428 quebec street box, Rivers, Manitoba, Canada\n", + "osm query city: Rivers, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2079: Riverdale Personal Care Home , Rivers, Manitoba, Canada\n", + "osm query name: Riverdale Personal Care Home , Rivers, Manitoba, Canada\n", + "osm query street: 512 quebec street, Rivers, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2080: Roblin Health Centre, Roblin, Manitoba, Canada\n", + "osm query name: Roblin Health Centre, Roblin, Manitoba, Canada\n", + "osm query street: 940 hospital street box, Roblin, Manitoba, Canada\n", + "osm query city: Roblin, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2081: Rossburn Health Centre, Rossburn, Manitoba, Canada\n", + "osm query name: Rossburn Health Centre, Rossburn, Manitoba, Canada\n", + "osm query street: 40 parkview dr. box, Rossburn, Manitoba, Canada\n", + "osm query city: Rossburn, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2082: Rossburn Personal Care Home, Rossburn, Manitoba, Canada\n", + "osm query name: Rossburn Personal Care Home, Rossburn, Manitoba, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2083: Russell Health Centre, Russell, Manitoba, Canada\n", + "osm query name: Russell Health Centre, Russell, Manitoba, Canada\n", + "osm query street: 426 alexandria ave. south, Russell, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2084: Russell Personal Care Home, Russell, Manitoba, Canada\n", + "osm query name: Russell Personal Care Home, Russell, Manitoba, Canada\n", + "osm query street: 113 arsini st. e, Russell, Manitoba, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2085: Sandy Lake Personal Care Home , Sandy Lake, Manitoba, Canada\n", + "osm query name: Sandy Lake Personal Care Home , Sandy Lake, Manitoba, Canada\n", + "osm query street: 7 1st street box, Sandy Lake, Manitoba, Canada\n", + "osm query city: Sandy Lake, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2086: Sherwood Personal Care Home, Virden, Manitoba, Canada\n", + "osm query name: Sherwood Personal Care Home, Virden, Manitoba, Canada\n", + "osm query street: 2000 hargrave street e. box, Virden, Manitoba, Canada\n", + "osm query city: Virden, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2087: Shoal Lake/Strathclair Health Centre, Shoal Lake, Manitoba, Canada\n", + "osm query name: Shoal Lake/Strathclair Health Centre, Shoal Lake, Manitoba, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2088: Souris Health Centre, Souris, Manitoba, Canada\n", + "osm query name: Souris Health Centre, Souris, Manitoba, Canada\n", + "osm query street: 10 brindle ave. box, Souris, Manitoba, Canada\n", + "osm query city: Souris, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2089: Souris Personal Care Home, Souris, Manitoba, Canada\n", + "osm query name: Souris Personal Care Home, Souris, Manitoba, Canada\n", + "osm query street: 10 brindle ave. box, Souris, Manitoba, Canada\n", + "osm query city: Souris, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2090: Ste. Rose Primary Health Care Centre, Ste.Rose, Manitoba, Canada\n", + "osm query name: Ste. Rose Primary Health Care Centre, Ste.Rose, Manitoba, Canada\n", + "osm query street: 603 1st ave. east box 149, Ste.Rose, Manitoba, Canada\n", + "osm query city: Ste.Rose, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2091: Ste. Rose General Hospital, Ste.Rose, Manitoba, Canada\n", + "osm query name: Ste. Rose General Hospital, Ste.Rose, Manitoba, Canada\n", + "osm query street: 480 3rd ave. se box 149, Ste.Rose, Manitoba, Canada\n", + "osm query city: Ste.Rose, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2092: Swan River Community Health Services, Swan River, Manitoba, Canada\n", + "osm query name: Swan River Community Health Services, Swan River, Manitoba, Canada\n", + "osm query street: 1028 main street box, Swan River, Manitoba, Canada\n", + "osm query city: Swan River, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2093: Swan River Valley Personal Care Home, Swan River, Manitoba, Canada\n", + "osm query name: Swan River Valley Personal Care Home, Swan River, Manitoba, Canada\n", + "osm query street: 334 8th street, Swan River, Manitoba, Canada\n", + "osm query city: Swan River, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2094: Swan Valley Health Centre, Swan River, Manitoba, Canada\n", + "osm query name: Swan Valley Health Centre, Swan River, Manitoba, Canada\n", + "osm query street: 1450 main street box, Swan River, Manitoba, Canada\n", + "osm query city: Swan River, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2095: Swan Valley Lodge Personal Care Home, Swan River, Manitoba, Canada\n", + "osm query name: Swan Valley Lodge Personal Care Home, Swan River, Manitoba, Canada\n", + "osm query street: 1450 main street box, Swan River, Manitoba, Canada\n", + "osm query city: Swan River, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2096: Swan Valley Primary Care Centre, Swan River, Manitoba, Canada\n", + "osm query name: Swan Valley Primary Care Centre, Swan River, Manitoba, Canada\n", + "osm query street: 1480 main street box, Swan River, Manitoba, Canada\n", + "osm query city: Swan River, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2097: Tiger Hills Health Centre, Treherne, Manitoba, Canada\n", + "osm query name: Tiger Hills Health Centre, Treherne, Manitoba, Canada\n", + "osm query street: 130 clark street box, Treherne, Manitoba, Canada\n", + "osm query city: Treherne, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2098: Tiger Hills Manor Personal Care Home, Treherne, Manitoba, Canada\n", + "osm query name: Tiger Hills Manor Personal Care Home, Treherne, Manitoba, Canada\n", + "osm query street: 130 clark street box, Treherne, Manitoba, Canada\n", + "osm query city: Treherne, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2099: Tri-Lake Health Centre, Killarney, Manitoba, Canada\n", + "osm query name: Tri-Lake Health Centre, Killarney, Manitoba, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2100: Virden Health Centre, Virden, Manitoba, Canada\n", + "osm query name: Virden Health Centre, Virden, Manitoba, Canada\n", + "osm query street: 400 king street box, Virden, Manitoba, Canada\n", + "osm query city: Virden, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2101: Virden Health Unit, Virden, Manitoba, Canada\n", + "osm query name: Virden Health Unit, Virden, Manitoba, Canada\n", + "osm query street: 10 king street box, Virden, Manitoba, Canada\n", + "osm query city: Virden, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2102: Waterhen Community Health Services, Waterhen, Manitoba, Canada\n", + "osm query name: Waterhen Community Health Services, Waterhen, Manitoba, Canada\n", + "osm query street: 104 north mallard road, Waterhen, Manitoba, Canada\n", + "osm query city: Waterhen, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2103: Wawanesa Health Centre , Wawanesa, Manitoba, Canada\n", + "osm query name: Wawanesa Health Centre , Wawanesa, Manitoba, Canada\n", + "osm query street: 309 george st box, Wawanesa, Manitoba, Canada\n", + "osm query city: Wawanesa, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2104: Wawanesa Personal Care Home, Wawanesa, Manitoba, Canada\n", + "osm query name: Wawanesa Personal Care Home, Wawanesa, Manitoba, Canada\n", + "osm query street: 309 george st box, Wawanesa, Manitoba, Canada\n", + "osm query city: Wawanesa, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2105: Westman Personal Care Home, Virden, Manitoba, Canada\n", + "osm query name: Westman Personal Care Home, Virden, Manitoba, Canada\n", + "osm query street: 1630 frame street e. box, Virden, Manitoba, Canada\n", + "osm query city: Virden, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2106: Westview Lodge Personal Care Home, Boissevain, Manitoba, Canada\n", + "osm query name: Westview Lodge Personal Care Home, Boissevain, Manitoba, Canada\n", + "osm query street: 200 struthers street box 819, Boissevain, Manitoba, Canada\n", + "osm query city: Boissevain, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2107: Winnipegosis & District Health Centre, Winnipegosis, Manitoba, Canada\n", + "osm query name: Winnipegosis & District Health Centre, Winnipegosis, Manitoba, Canada\n", + "osm query street: 280 bridge st. box, Winnipegosis, Manitoba, Canada\n", + "osm query city: Winnipegosis, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2108: Winnipegosis & District Personal Care Home, Winnipegosis, Manitoba, Canada\n", + "osm query name: Winnipegosis & District Personal Care Home, Winnipegosis, Manitoba, Canada\n", + "osm query street: 280 bridge st. box, Winnipegosis, Manitoba, Canada\n", + "osm query city: Winnipegosis, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2109: Winnipegosis Community Health Services, Winnipegosis, Manitoba, Canada\n", + "osm query name: Winnipegosis Community Health Services, Winnipegosis, Manitoba, Canada\n", + "osm query street: 280 bridge st. box, Winnipegosis, Manitoba, Canada\n", + "osm query city: Winnipegosis, Manitoba, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2110: Bei Jing Medical Centre, Winnipeg, MB, Canada\n", + "osm query name: Bei Jing Medical Centre, Winnipeg, MB, Canada\n", + "osm query street: 2810 pembina hwy, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2111: Bridgewater Pharmacy, Winnipeg, MB, Canada\n", + "osm query name: Bridgewater Pharmacy, Winnipeg, MB, Canada\n", + "osm query street: 3 405 centre st, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2112: Care Innova Medical Clinic, Winnipeg, MB, Canada\n", + "osm query name: Care Innova Medical Clinic, Winnipeg, MB, Canada\n", + "osm query street: 878 main st, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2113: Maplecreek Medical, Sunnyside, MB, Canada\n", + "osm query name: Maplecreek Medical, Sunnyside, MB, Canada\n", + "osm query street: 2866 mcgregor farm rd, Sunnyside, MB, Canada\n", + "osm query city: Sunnyside, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2114: Meyers Drugs, Winnipeg, MB, Canada\n", + "osm query name: Meyers Drugs, Winnipeg, MB, Canada\n", + "osm query street: 843 william ave, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2115: Whitemouth Pharmacy, Whitemouth, MB, Canada\n", + "osm query name: Whitemouth Pharmacy, Whitemouth, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2116: Union Pharmacy, Winnipeg, MB, Canada\n", + "osm query name: Union Pharmacy, Winnipeg, MB, Canada\n", + "osm query street: 940 sherbrook st, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2117: Whitemouth Primary Health Care Centre, Whitemouth, MB, Canada\n", + "osm query name: Whitemouth Primary Health Care Centre, Whitemouth, MB, Canada\n", + "osm query street: 160 hospital st box, Whitemouth, MB, Canada\n", + "osm query city: Whitemouth, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2118: St. Pierre Medical Clinic, St-Pierre-Jolys, MB, Canada\n", + "osm query name: St. Pierre Medical Clinic, St-Pierre-Jolys, MB, Canada\n", + "osm query street: 569 prefontaine ave box, St-Pierre-Jolys, MB, Canada\n", + "osm query city: St-Pierre-Jolys, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2119: Riverbank Medical Associates, Selkirk, MB, Canada\n", + "osm query name: Riverbank Medical Associates, Selkirk, MB, Canada\n", + "osm query street: 353 eveline st, Selkirk, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2120: Fisher River Cree Nation Pharmacy, Fisher Branch, MB, Canada\n", + "osm query name: Fisher River Cree Nation Pharmacy, Fisher Branch, MB, Canada\n", + "osm query street: 63 main st, Fisher Branch, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2121: Nursing Station, , MB, Canada\n", + "osm query name: Nursing Station, , MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2122: Cormorant Health Care Centre, , MB, Canada\n", + "osm query name: Cormorant Health Care Centre, , MB, Canada\n", + "osm query street: 103 clark street box 42 cormorant, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "2123: Cranberry Portage Wellness Centre, Cranberry portage, MB, Canada\n", + "osm query name: Cranberry Portage Wellness Centre, Cranberry portage, MB, Canada\n", + "no street address in dataframe\n", + "osm query city: Cranberry portage, MB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2124: Nursing Station, Cross lake, MB, Canada\n", + "osm query name: Nursing Station, Cross lake, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2125: Nursing Station, Easterville, MB, Canada\n", + "osm query name: Nursing Station, Easterville, MB, Canada\n", + "no street address in dataframe\n", + "osm query city: Easterville, MB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2126: Flin Flon General Hospital, Flin flon, MB, Canada\n", + "osm query name: Flin Flon General Hospital, Flin flon, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2127: Flin Flon Primary Health Care Centre, Flin flon, MB, Canada\n", + "osm query name: Flin Flon Primary Health Care Centre, Flin flon, MB, Canada\n", + "osm query street: 1 north ave, Flin flon, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2128: Flin Flon Personal Care Home, Flin flon, MB, Canada\n", + "osm query name: Flin Flon Personal Care Home, Flin flon, MB, Canada\n", + "osm query street: 50 church street, Flin flon, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2129: Northern Lights Manor, Flin flon, MB, Canada\n", + "osm query name: Northern Lights Manor, Flin flon, MB, Canada\n", + "osm query street: 274 bracken street, Flin flon, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2130: Flin Flon Clinic , Flin flon, MB, Canada\n", + "osm query name: Flin Flon Clinic , Flin flon, MB, Canada\n", + "osm query street: ffgh 3rd floor 3rd avenue & church street, Flin flon, MB, Canada\n", + "osm query city: Flin flon, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2131: Flin Flon Regional Office, Flin flon, MB, Canada\n", + "osm query name: Flin Flon Regional Office, Flin flon, MB, Canada\n", + "osm query street: 84 church street, Flin flon, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2132: Nursing Station, Garden hill, MB, Canada\n", + "osm query name: Nursing Station, Garden hill, MB, Canada\n", + "no street address in dataframe\n", + "osm query city: Garden hill, MB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2133: Gillam Hospital, Gillam, MB, Canada\n", + "osm query name: Gillam Hospital, Gillam, MB, Canada\n", + "osm query street: 115 gillam drive, Gillam, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2134: Gillam Public Health, Gillam, MB, Canada\n", + "osm query name: Gillam Public Health, Gillam, MB, Canada\n", + "osm query street: 115 gillam drive, Gillam, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2135: Nursing Station, Grand rapids, MB, Canada\n", + "osm query name: Nursing Station, Grand rapids, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2136: Ilford Community Health Centre, Ilford, MB, Canada\n", + "osm query name: Ilford Community Health Centre, Ilford, MB, Canada\n", + "osm query street: 53 first street, Ilford, MB, Canada\n", + "osm query city: Ilford, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2137: Nursing Station, Lac brochet, MB, Canada\n", + "osm query name: Nursing Station, Lac brochet, MB, Canada\n", + "no street address in dataframe\n", + "osm query city: Lac brochet, MB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2138: Leaf Rapids Health Centre, Leaf rapids, MB, Canada\n", + "osm query name: Leaf Rapids Health Centre, Leaf rapids, MB, Canada\n", + "osm query street: 1 mooswu road, Leaf rapids, MB, Canada\n", + "osm query city: Leaf rapids, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2139: Lynn Lake Hospital, Lynn lake, MB, Canada\n", + "osm query name: Lynn Lake Hospital, Lynn lake, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2140: Lynn Lake Public Health, Lynn lake, MB, Canada\n", + "osm query name: Lynn Lake Public Health, Lynn lake, MB, Canada\n", + "osm query street: 64 camp st, Lynn lake, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2141: Nursing Station, Moose lake, MB, Canada\n", + "osm query name: Nursing Station, Moose lake, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2142: Nisichawayasihk Personal Care Home, , MB, Canada\n", + "osm query name: Nisichawayasihk Personal Care Home, , MB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "2143: Pinaow Wachi Ltd. Personal Care Home, , MB, Canada\n", + "osm query name: Pinaow Wachi Ltd. Personal Care Home, , MB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "2144: Beatrice Wilson Health Centre, , MB, Canada\n", + "osm query name: Beatrice Wilson Health Centre, , MB, Canada\n", + "osm query street: 245 waller road opaskwayak, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "2145: McGillivary Care Home, , MB, Canada\n", + "osm query name: McGillivary Care Home, , MB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "2146: George Colon Memorial Home Inc, , MB, Canada\n", + "osm query name: George Colon Memorial Home Inc, , MB, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "2147: Nursing Station, Pikwitonei, MB, Canada\n", + "osm query name: Nursing Station, Pikwitonei, MB, Canada\n", + "osm query street: 307 cordell road, Pikwitonei, MB, Canada\n", + "osm query city: Pikwitonei, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2148: Nursing Station, Pukatawagan, MB, Canada\n", + "osm query name: Nursing Station, Pukatawagan, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2149: Nursing Station, Red sucker lake, MB, Canada\n", + "osm query name: Nursing Station, Red sucker lake, MB, Canada\n", + "osm query street: general delivery, Red sucker lake, MB, Canada\n", + "osm query city: Red sucker lake, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2150: Nursing Station, Shamattawa, MB, Canada\n", + "osm query name: Nursing Station, Shamattawa, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2151: Sherridon Health Centre, Sherridon, MB, Canada\n", + "osm query name: Sherridon Health Centre, Sherridon, MB, Canada\n", + "osm query street: general delivery, Sherridon, MB, Canada\n", + "osm query city: Sherridon, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2152: Snow Lake Health Centre , Snow lake, MB, Canada\n", + "osm query name: Snow Lake Health Centre , Snow lake, MB, Canada\n", + "osm query street: 100 lakeshore drive, Snow lake, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2153: Nursing Station, South indian lake, MB, Canada\n", + "osm query name: Nursing Station, South indian lake, MB, Canada\n", + "no street address in dataframe\n", + "osm query city: South indian lake, MB, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2154: Nursing Station, Split lake, MB, Canada\n", + "osm query name: Nursing Station, Split lake, MB, Canada\n", + "osm query street: general delivery, Split lake, MB, Canada\n", + "osm query city: Split lake, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2155: Nursing Station, St theresa point, MB, Canada\n", + "osm query name: Nursing Station, St theresa point, MB, Canada\n", + "osm query street: general delivery, St theresa point, MB, Canada\n", + "osm query city: St theresa point, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2156: St. Anthony’s General Hospital, The pas, MB, Canada\n", + "osm query name: St. Anthony’s General Hospital, The pas, MB, Canada\n", + "osm query street: 67 1st street west, The pas, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2157: The Pas Primary Health Care Centre, The pas, MB, Canada\n", + "osm query name: The Pas Primary Health Care Centre, The pas, MB, Canada\n", + "osm query street: 111 cook ave box 240, The pas, MB, Canada\n", + "osm query city: The pas, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2158: St. Paul’s Personal Care Home, The pas, MB, Canada\n", + "osm query name: St. Paul’s Personal Care Home, The pas, MB, Canada\n", + "osm query street: 34 2nd street, The pas, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2159: Rosaire House Addiction Centre, The pas, MB, Canada\n", + "osm query name: Rosaire House Addiction Centre, The pas, MB, Canada\n", + "osm query street: 144 ross avenue, The pas, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2160: The Pas Regional Office, The pas, MB, Canada\n", + "osm query name: The Pas Regional Office, The pas, MB, Canada\n", + "osm query street: 163 edwards avenue, The pas, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2161: The Pas Clinic , The pas, MB, Canada\n", + "osm query name: The Pas Clinic , The pas, MB, Canada\n", + "osm query street: 67 1st street west, The pas, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2162: The Fischer Avenue Clinic , The pas, MB, Canada\n", + "osm query name: The Fischer Avenue Clinic , The pas, MB, Canada\n", + "osm query street: 320 fischer avenue, The pas, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2163: Health Centre, Thicket portage, MB, Canada\n", + "osm query name: Health Centre, Thicket portage, MB, Canada\n", + "osm query street: 398 evans avenue, Thicket portage, MB, Canada\n", + "osm query city: Thicket portage, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2164: Thompson General Hospital, , MB, Canada\n", + "osm query name: Thompson General Hospital, , MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2165: Thompson Public Health, Thompson, MB, Canada\n", + "osm query name: Thompson Public Health, Thompson, MB, Canada\n", + "osm query street: 867 thompson drive south, Thompson, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2166: Acute Brain Injury House (ABI), , MB, Canada\n", + "osm query name: Acute Brain Injury House (ABI), , MB, Canada\n", + "osm query street: 12 spruce street thompson, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "2167: Northern Spirit Manor, , MB, Canada\n", + "osm query name: Northern Spirit Manor, , MB, Canada\n", + "osm query street: 879 thompson drive thompson, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "2168: Thompson Clinic , , MB, Canada\n", + "osm query name: Thompson Clinic , , MB, Canada\n", + "osm query street: 50 selkirk avenue thompson, , MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2169: Northern Consultation Clinic, , MB, Canada\n", + "osm query name: Northern Consultation Clinic, , MB, Canada\n", + "osm query street: 871 thompson drive south thompson, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "2170: Hope North Recovery Centre for Youth, , MB, Canada\n", + "osm query name: Hope North Recovery Centre for Youth, , MB, Canada\n", + "osm query street: 70 princeton drive thompson, , MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2171: Thompson Regional Office, , MB, Canada\n", + "osm query name: Thompson Regional Office, , MB, Canada\n", + "osm query street: 867 thompson drive south thompson, , MB, Canada\n", + "[6] no addresses found\n", + "\n", + "\n", + "2172: Nursing Station, , MB, Canada\n", + "osm query name: Nursing Station, , MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2173: Wabowden Community Health Centre, Wabowden, MB, Canada\n", + "osm query name: Wabowden Community Health Centre, Wabowden, MB, Canada\n", + "osm query street: 88 lakeside drive, Wabowden, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2174: Nursing Station, York landing, MB, Canada\n", + "osm query name: Nursing Station, York landing, MB, Canada\n", + "osm query street: general delivery, York landing, MB, Canada\n", + "osm query city: York landing, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2175: Auduzhe Mino Nesewinong (Place of Healthy Breathing), Toronto, ON, Canada\n", + "osm query name: Auduzhe Mino Nesewinong (Place of Healthy Breathing), Toronto, ON, Canada\n", + "osm query street: 22 vaughan road, Toronto, ON, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2176: 1315 Finch Avenue West - Med-Health, , ON, Canada\n", + "osm query name: 1315 Finch Avenue West - Med-Health, , ON, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "2177: 400 Queen Street West - Med-Health, , ON, Canada\n", + "osm query name: 400 Queen Street West - Med-Health, , ON, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "2178: 3420 Hurontario Street - Med-Health, , ON, Canada\n", + "osm query name: 3420 Hurontario Street - Med-Health, , ON, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "2179: 1216 Lawrence Avenue West - Med-Health, , ON, Canada\n", + "osm query name: 1216 Lawrence Avenue West - Med-Health, , ON, Canada\n", + "no street address in dataframe\n", + "no addresses found\n", + "\n", + "\n", + "2180: Aklavik Health Centre, Aklavik, NT, Canada\n", + "osm query name: Aklavik Health Centre, Aklavik, NT, Canada\n", + "osm query street: 2 airport road, Aklavik, NT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2181: Behchokǫ̀ Health Centre, Behchokǫ̀, NT, Canada\n", + "osm query name: Behchokǫ̀ Health Centre, Behchokǫ̀, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Behchokǫ̀, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2182: Colville Lake Health Centre, Colville Lake, NT, Canada\n", + "osm query name: Colville Lake Health Centre, Colville Lake, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Colville Lake, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2183: Délînê Health Centre, Délînê, NT, Canada\n", + "osm query name: Délînê Health Centre, Délînê, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Délînê, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2184: Fort Good Hope Health Centre, Fort Good Hope, NT, Canada\n", + "osm query name: Fort Good Hope Health Centre, Fort Good Hope, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Fort Good Hope, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2185: Fort Liard Health Centre, Fort Liard, NT, Canada\n", + "osm query name: Fort Liard Health Centre, Fort Liard, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Fort Liard, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2186: Fort McPherson Health Centre, Fort McPherson, NT, Canada\n", + "osm query name: Fort McPherson Health Centre, Fort McPherson, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Fort McPherson, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2187: Fort Providence Health Centre, Fort Providence, NT, Canada\n", + "osm query city: Fort Providence, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2188: Fort Resolution Health Centre, Fort Resolution, NT, Canada\n", + "osm query name: Fort Resolution Health Centre, Fort Resolution, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Fort Resolution, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2189: Fort Simpson Health Centre, Fort Simpson, NT, Canada\n", + "osm query name: Fort Simpson Health Centre, Fort Simpson, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Fort Simpson, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2190: Fort Smith Health Centre, Fort Smith, NT, Canada\n", + "osm query name: Fort Smith Health Centre, Fort Smith, NT, Canada\n", + "osm query street: 41 breynet street, Fort Smith, NT, Canada\n", + "osm query city: Fort Smith, NT, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2191: Fort Smith Medical Clinic, Fort Smith , NT, Canada\n", + "osm query name: Fort Smith Medical Clinic, Fort Smith , NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Fort Smith , NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2192: Gamètì Health Centre, Gamètì, NT, Canada\n", + "osm query name: Gamètì Health Centre, Gamètì, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Gamètì, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2193: Hay River Regional Health Centre, Hay River, NT, Canada\n", + "osm query name: Hay River Regional Health Centre, Hay River, NT, Canada\n", + "osm query street: 37911 mackenzie highway, Hay River, NT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2194: Hay River Public Health, Hay River, NT, Canada\n", + "osm query name: Hay River Public Health, Hay River, NT, Canada\n", + "osm query street: #3 gaetz drive, Hay River, NT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2195: Inuvik Regional Hospital , Inuvik, NT, Canada\n", + "osm query name: Inuvik Regional Hospital , Inuvik, NT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2196: Inuvik Public Health, Inuvik, NT, Canada\n", + "osm query name: Inuvik Public Health, Inuvik, NT, Canada\n", + "osm query street: 106 veterans way, Inuvik, NT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2197: Jean Marie River Health Centre, Jean Marie River, NT, Canada\n", + "osm query name: Jean Marie River Health Centre, Jean Marie River, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Jean Marie River, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2198: Łutselk'e Health Centre, Łutselk'e, NT, Canada\n", + "osm query name: Łutselk'e Health Centre, Łutselk'e, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Łutselk'e, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2199: Nahanni Butte Health Centre, Nahanni Butte, NT, Canada\n", + "osm query name: Nahanni Butte Health Centre, Nahanni Butte, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Nahanni Butte, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2200: Norman Wells Health Centre, Norman Wells, NT, Canada\n", + "osm query name: Norman Wells Health Centre, Norman Wells, NT, Canada\n", + "osm query street: 26 woodland avenue, Norman Wells, NT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2201: Paulatuk Health Centre, Paulatuk, NT, Canada\n", + "osm query name: Paulatuk Health Centre, Paulatuk, NT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2202: Sachs Harbour Health Centre, Sachs Harbour, NT, Canada\n", + "osm query name: Sachs Harbour Health Centre, Sachs Harbour, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Sachs Harbour, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2203: Sambaa K’e Health Centre, Sambaa K’e, NT, Canada\n", + "osm query name: Sambaa K’e Health Centre, Sambaa K’e, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Sambaa K’e, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2204: Tsiigehtchic Health Centre, Tsiigehtchic, NT, Canada\n", + "osm query name: Tsiigehtchic Health Centre, Tsiigehtchic, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Tsiigehtchic, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2205: Tuktoyaktuk Health Centre, Tuktoyaktuk, NT, Canada\n", + "osm query name: Tuktoyaktuk Health Centre, Tuktoyaktuk, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Tuktoyaktuk, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2206: Tulita Health Centre, Tulita, NT, Canada\n", + "osm query name: Tulita Health Centre, Tulita, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Tulita, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2207: Ulukhaktok Health Centre, Ulukhaktok, NT, Canada\n", + "osm query name: Ulukhaktok Health Centre, Ulukhaktok, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Ulukhaktok, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2208: Wekweètì Health Centre, Wekweètì, NT, Canada\n", + "osm query name: Wekweètì Health Centre, Wekweètì, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Wekweètì, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2209: Whatì Health Centre, Whatì, NT, Canada\n", + "osm query name: Whatì Health Centre, Whatì, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Whatì, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2210: Wrigley Health Centre, Wrigley, NT, Canada\n", + "osm query name: Wrigley Health Centre, Wrigley, NT, Canada\n", + "no street address in dataframe\n", + "osm query city: Wrigley, NT, Canada\n", + "osm city address found\n", + "\n", + "\n", + "2211: Stanton Territorial Hospital, Yellowknife, NT, Canada\n", + "osm query name: Stanton Territorial Hospital, Yellowknife, NT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2212: Frame Lake Community Health Clinic, Yellowknife, NT, Canada\n", + "osm query name: Frame Lake Community Health Clinic, Yellowknife, NT, Canada\n", + "osm query street: 312 old airport rd, Yellowknife, NT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2213: Yellowknife Audiology Clinic, Yellowknife, NT, Canada\n", + "osm query name: Yellowknife Audiology Clinic, Yellowknife, NT, Canada\n", + "osm query street: 550 byrne rd, Yellowknife, NT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2214: Stanton Medical Centre, Yellowknife, NT, Canada\n", + "osm query name: Stanton Medical Centre, Yellowknife, NT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2215: Yellowknife Eye Clinic, Yellowknife, NT, Canada\n", + "osm query name: Yellowknife Eye Clinic, Yellowknife, NT, Canada\n", + "osm query street: 4916 47 st, Yellowknife, NT, Canada\n", + "osm query city: Yellowknife, NT, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2216: Yellowknife Primary Care Centre, Yellowknife, NT, Canada\n", + "osm query name: Yellowknife Primary Care Centre, Yellowknife, NT, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2217: Yellowknife Public Health, Yellowknife, NT, Canada\n", + "osm query name: Yellowknife Public Health, Yellowknife, NT, Canada\n", + "osm query street: 4702 franklin ave, Yellowknife, NT, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2218: Deer Lodge Centre, Winnipeg, MB, Canada\n", + "osm query name: Deer Lodge Centre, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2219: Golden West Centennial Lodge, Winnipeg, MB, Canada\n", + "osm query name: Golden West Centennial Lodge, Winnipeg, MB, Canada\n", + "osm query street: 811 school road, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2220: Heritage Lodge, Winnipeg, MB, Canada\n", + "osm query name: Heritage Lodge, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2221: Extendicare Oakview Place, Winnipeg, MB, Canada\n", + "osm query name: Extendicare Oakview Place, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2222: Charleswood Care Centre, Winnipeg, MB, Canada\n", + "osm query name: Charleswood Care Centre, Winnipeg, MB, Canada\n", + "osm query street: 5501 roblin boulevard, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2223: Extendicare Tuxedo Villa, Winnipeg, MB, Canada\n", + "osm query name: Extendicare Tuxedo Villa, Winnipeg, MB, Canada\n", + "osm query street: 2060 corydon avenue, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2224: West Park Manor Personal Care Home, Winnipeg, MB, Canada\n", + "osm query name: West Park Manor Personal Care Home, Winnipeg, MB, Canada\n", + "osm query street: 3199 grant avenue, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2225: Golden Door Geriatric Centre, Winnipeg, MB, Canada\n", + "osm query name: Golden Door Geriatric Centre, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2226: St. Norbert Personal Care Home, Winnipeg, MB, Canada\n", + "osm query name: St. Norbert Personal Care Home, Winnipeg, MB, Canada\n", + "osm query street: 50 st. pierre street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2227: Southeast Personal Care Home, Winnipeg, MB, Canada\n", + "osm query name: Southeast Personal Care Home, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2228: The Saul and Claribel Simkin Centre, Winnipeg, MB, Canada\n", + "osm query name: The Saul and Claribel Simkin Centre, Winnipeg, MB, Canada\n", + "osm query street: 1 falconridge drive, Winnipeg, MB, Canada\n", + "osm query city: Winnipeg, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2229: Actionmarguerite (Saint-Vital), Winnipeg, MB, Canada\n", + "osm query name: Actionmarguerite (Saint-Vital), Winnipeg, MB, Canada\n", + "osm query street: 450 river road, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2230: Golden Links Lodge, Winnipeg, MB, Canada\n", + "osm query name: Golden Links Lodge, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2231: Meadowood Manor, Winnipeg, MB, Canada\n", + "osm query name: Meadowood Manor, Winnipeg, MB, Canada\n", + "osm query street: 577 st. anne's road, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2232: River Park Gardens, Winnipeg, MB, Canada\n", + "osm query name: River Park Gardens, Winnipeg, MB, Canada\n", + "osm query street: 735 st. anne's road, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2233: Extendicare Vista Park Lodge, Winnipeg, MB, Canada\n", + "osm query name: Extendicare Vista Park Lodge, Winnipeg, MB, Canada\n", + "osm query street: 144 nova vista drive, Winnipeg, MB, Canada\n", + "osm query city: Winnipeg, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2234: Actionmarguerite (Saint-Boniface), Winnipeg, MB, Canada\n", + "osm query name: Actionmarguerite (Saint-Boniface), Winnipeg, MB, Canada\n", + "osm query street: 185 despins street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2235: Park Manor Care, Winnipeg, MB, Canada\n", + "osm query name: Park Manor Care, Winnipeg, MB, Canada\n", + "osm query street: 301 redonda street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2236: Bethania Mennonite Personal Care Home, Winnipeg, MB, Canada\n", + "osm query name: Bethania Mennonite Personal Care Home, Winnipeg, MB, Canada\n", + "osm query street: 1045 concordia avenue, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2237: Concordia Place, Winnipeg, MB, Canada\n", + "osm query name: Concordia Place, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2238: Donwood Manor, Winnipeg, MB, Canada\n", + "osm query name: Donwood Manor, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2239: Kildonan Personal Care Centre, Winnipeg, MB, Canada\n", + "osm query name: Kildonan Personal Care Centre, Winnipeg, MB, Canada\n", + "osm query street: 1970 henderson highway, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2240: River East Personal Care Home, Winnipeg, MB, Canada\n", + "osm query name: River East Personal Care Home, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2241: Luther Home, Winnipeg, MB, Canada\n", + "osm query name: Luther Home, Winnipeg, MB, Canada\n", + "osm query street: 1081 andrews street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2242: Maples Care Centre, Winnipeg, MB, Canada\n", + "osm query name: Maples Care Centre, Winnipeg, MB, Canada\n", + "osm query street: 500 mandalay drive, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2243: Middlechurch Home of Winnipeg, Winnipeg, MB, Canada\n", + "osm query name: Middlechurch Home of Winnipeg, Winnipeg, MB, Canada\n", + "osm query street: 280 balderstone road west, Winnipeg, MB, Canada\n", + "osm query city: Winnipeg, MB, Canada\n", + "[5] osm city address found\n", + "\n", + "\n", + "2244: Actionmarguerite (St-Joseph), Winnipeg, MB, Canada\n", + "osm query name: Actionmarguerite (St-Joseph), Winnipeg, MB, Canada\n", + "osm query street: 1149 leila avenue, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2245: Fred Douglas Lodge, Winnipeg, MB, Canada\n", + "osm query name: Fred Douglas Lodge, Winnipeg, MB, Canada\n", + "osm query street: 1275 burrows avenue, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2246: Holy Family Home, Winnipeg, MB, Canada\n", + "osm query name: Holy Family Home, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2247: Beacon Hill Lodge, Winnipeg, MB, Canada\n", + "osm query name: Beacon Hill Lodge, Winnipeg, MB, Canada\n", + "osm query street: 190 fort street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2248: Calvary Place Personal Care Home, Winnipeg, MB, Canada\n", + "osm query name: Calvary Place Personal Care Home, Winnipeg, MB, Canada\n", + "osm query street: 1325 erin street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2249: Parkview Place, Winnipeg, MB, Canada\n", + "osm query name: Parkview Place, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2250: Lions Personal Care Centre, Winnipeg, MB, Canada\n", + "osm query name: Lions Personal Care Centre, Winnipeg, MB, Canada\n", + "osm query street: 320 sherbrook street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2251: Misericordia Place, Winnipeg, MB, Canada\n", + "osm query name: Misericordia Place, Winnipeg, MB, Canada\n", + "osm query street: 44 furby street, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2252: Poseidon Care Centre, Winnipeg, MB, Canada\n", + "osm query name: Poseidon Care Centre, Winnipeg, MB, Canada\n", + "osm query street: 70 poseidon bay, Winnipeg, MB, Canada\n", + "[2] osm street address found\n", + "\n", + "\n", + "2253: Pembina Place Mennonite Personal Care Home, Winnipeg, MB, Canada\n", + "osm query name: Pembina Place Mennonite Personal Care Home, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2254: Riverview Health Centre, Winnipeg, MB, Canada\n", + "osm query name: Riverview Health Centre, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n", + "2255: The Convalescent Home of Winnipeg, Winnipeg, MB, Canada\n", + "osm query name: The Convalescent Home of Winnipeg, Winnipeg, MB, Canada\n", + "[1] osm facility found\n", + "\n", + "\n" + ] + } + ], + "source": [ + "# attempt api requests for each record\n", + "\n", + "def osm_query(query, query_type):\n", + " params = {'q': query,\n", + " 'addressdetails':'1',\n", + " 'format':'json',\n", + " 'email':'sam.lumley@statcan.gc.ca'}\n", + " time.sleep(request_timing) \n", + " coords = requests.get(url, params=params, headers=headers)\n", + " print(\"osm query \" + query_type + \": \" + query)\n", + " return coords.json()\n", + "\n", + "for i in range(len(reqs_street)):\n", + " query_name = reqs_name[i]\n", + " query_street = reqs_street[i]\n", + " query_city = reqs_city[i]\n", + " query_gc = reqs_gc[i]\n", + " \n", + " request_timing = 3 #seconds\n", + "\n", + " \n", + " # we first try facility name street address,\n", + " # if that fails, we try street address and then city \n", + " # which one we use is recorded in the geo_source column\n", + " \n", + " print(str(i + 1) + ': ' + query_name)\n", + " \n", + " # try with facility name\n", + " resp = osm_query(query_name, \"name\")\n", + " \n", + " if len(resp) > 0:\n", + " resp = resp[0]\n", + " df['geo_source'].iloc[i] = \"osm_facility_name\"\n", + " print('[1] osm facility found')\n", + " else:\n", + "# print('no osm facility found')\n", + " \n", + " # try street address with osm, if it's non-empty\n", + " if len(df.street_name.iloc[i]) > 0:\n", + " resp = osm_query(query_street, \"street\")\n", + " if (len(resp) > 0):\n", + "# if (len(resp) > 0) & (query_street[0] == ' '):\n", + " resp = resp[0]\n", + " df['geo_source'].iloc[i] = \"osm_address\"\n", + " print('[2] osm street address found')\n", + " else: \n", + "# print('[2] no osm street address found')\n", + "\n", + " # try GC API\n", + " params_gc = {'qstr': query_gc}\n", + " headers_gc = {'user_key': gc_key}\n", + " coords_gc = requests.get(url_gc, params=params_gc, headers=headers_gc)\n", + "# print(\"trying gc api with query: \" + query_gc) \n", + " if (coords_gc.status_code == 200):\n", + " resp = coords_gc.json()\n", + " print('[3] gc street address found')\n", + " df['geo_source'].iloc[i] = \"gc_street_address\"\n", + " else:\n", + "# print('no gc street address found')\n", + "\n", + " # try osm city\n", + " if len(df.city.iloc[i]) > 0:\n", + " resp = osm_query(query_city, \"city\")\n", + "\n", + " if len(resp) > 0:\n", + " resp = resp[0]\n", + " df['geo_source'].iloc[i] = \"osm_city\"\n", + " print('[5] osm city address found')\n", + " else:\n", + " print('[6] no address found')\n", + " df['geo_source'].iloc[i] = \"no_osm\"\n", + " else:\n", + " print('[6] no addresses found')\n", + " df['geo_source'].iloc[i] = \"no_osm\"\n", + "\n", + " else:\n", + " print('no street address in dataframe')\n", + "\n", + " # try osm city\n", + " if len(df.city.iloc[i]) > 0:\n", + " resp = osm_query(query_city, \"city\")\n", + "\n", + " if len(resp) > 0:\n", + " resp = resp[0]\n", + " df['geo_source'].iloc[i] = \"osm_city\"\n", + " print('osm city address found')\n", + " else:\n", + " print('no address found')\n", + " df['geo_source'].iloc[i] = \"no_osm\"\n", + " else:\n", + " print('no addresses found')\n", + " df['geo_source'].iloc[i] = \"no_osm\"\n", + "\n", + " print(\"\\n\")\n", + " JSONS.append(resp)\n", + "\n", + "# if resp!=[]:\n", + "# print(\"\\n\")\n", + "# # print(resp)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-21T02:54:20.188625Z", + "iopub.status.busy": "2022-04-21T02:54:20.188350Z", + "iopub.status.idle": "2022-04-21T02:54:20.258839Z", + "shell.execute_reply": "2022-04-21T02:54:20.258162Z", + "shell.execute_reply.started": "2022-04-21T02:54:20.188593Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "with open('Nominatim.json', 'w', encoding='utf-8') as f:\n", + " json.dump(JSONS, f, ensure_ascii=False, indent=4) " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-21T13:55:44.258487Z", + "iopub.status.busy": "2022-04-21T13:55:44.258220Z", + "iopub.status.idle": "2022-04-21T13:55:44.291984Z", + "shell.execute_reply": "2022-04-21T13:55:44.291311Z", + "shell.execute_reply.started": "2022-04-21T13:55:44.258460Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2255" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open('Nominatim.json', 'r', encoding='utf-8') as f:\n", + " JSONS=json.load(f) \n", + "len(JSONS)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-21T18:32:41.420156Z", + "iopub.status.busy": "2022-04-21T18:32:41.419903Z", + "iopub.status.idle": "2022-04-21T18:32:41.531321Z", + "shell.execute_reply": "2022-04-21T18:32:41.530552Z", + "shell.execute_reply.started": "2022-04-21T18:32:41.420131Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2255" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# read json request results into our dataframe\n", + "\n", + "def append_blank(index):\n", + " df['geo_source'].iloc[index] = \"no_osm\"\n", + " LATS.append('')\n", + " LONS.append('')\n", + " NAME.append('')\n", + " ST_NO.append('')\n", + " ST_NAME.append('')\n", + " CITY.append('')\n", + " PROV.append('')\n", + " POST.append('')\n", + " COUNTRY.append('')\n", + " TYPE.append('')\n", + " CLASS.append('')\n", + "\n", + "with open('Nominatim.json', 'r', encoding='utf-8') as f:\n", + " JSONS=json.load(f) \n", + " \n", + "LATS = []\n", + "LONS = []\n", + "NAME = []\n", + "ST_NO = []\n", + "ST_NAME = []\n", + "CITY = []\n", + "PROV = []\n", + "POST = []\n", + "COUNTRY = []\n", + "TYPE = []\n", + "CLASS = []\n", + "\n", + "# osm_healthcare_types = ['hospital', 'clinic', 'pharmacy']\n", + "\n", + "for index, element in enumerate(JSONS):\n", + " if element==[]:\n", + " append_blank(index)\n", + " \n", + " else:\n", + " # format osm results\n", + " if 'address' in element:\n", + " if (element['address']['country_code'] == 'ca'):\n", + " \n", + "# df['geo_source'].iloc[index] = \"osm_city\"\n", + " \n", + " LATS.append(element['lat'])\n", + " LONS.append(element['lon'])\n", + " \n", + " if 'amenity' in element.keys():\n", + " NAME.append(element['address']['amenity'])\n", + "# df['geo_source'].iloc[index] = \"osm_facility\"\n", + " else:\n", + " NAME.append('')\n", + " \n", + " if 'house_number' in element['address']:\n", + " ST_NO.append(element['address']['house_number'])\n", + " else:\n", + " ST_NO.append('')\n", + " \n", + " if 'road' in element['address']:\n", + " ST_NAME.append(element['address']['road'])\n", + "# df['geo_source'].iloc[index] = \"osm_street\"\n", + " else:\n", + " ST_NAME.append('')\n", + " \n", + " if 'city' in element['address']:\n", + " CITY.append(element['address']['city'])\n", + " else:\n", + " CITY.append('') \n", + " \n", + " if 'state' in element.keys():\n", + " PROV.append(element['address']['state'])\n", + " else:\n", + " PROV.append('')\n", + " \n", + " if 'postcode' in element['address']:\n", + " POST.append(element['address']['postcode'])\n", + " else:\n", + " POST.append('')\n", + " \n", + " COUNTRY.append(element['address']['country_code'])\n", + " \n", + " if 'type' in element.keys():\n", + " TYPE.append(element['type'])\n", + " else:\n", + " TYPE.append('')\n", + " if 'class' in element.keys():\n", + " CLASS.append(element['class'])\n", + " else:\n", + " CLASS.append('') \n", + " else:\n", + " append_blank(index)\n", + " \n", + " # format gc api results \n", + " elif 'meta' in element:\n", + " \n", + " if (element['data'][0]['country']['code'] == 'CA'):\n", + " COUNTRY.append(element['data'][0]['country']['code'])\n", + " LATS.append(element['data'][0]['location']['geoCoordinates']['latitude'])\n", + " LONS.append(element['data'][0]['location']['geoCoordinates']['longitude'])\n", + " if 'streetName' in element.keys():\n", + " ST_NAME.append(element['streetName'])\n", + " else:\n", + " ST_NAME.append('')\n", + " if 'civicNumber' in element.keys():\n", + " ST_NO.append(element['civicNumber']['number'])\n", + " else:\n", + " ST_NO.append('')\n", + " TYPE.append('')\n", + " CLASS.append('')\n", + " NAME.append('')\n", + " if 'province' in element.keys():\n", + " PROV.append(element['data'][0]['mailingAddress']['province']['code'])\n", + " else:\n", + " PROV.append('')\n", + " if 'postalCode' in element['data'][0]['mailingAddress']:\n", + " POST.append(element['data'][0]['mailingAddress']['postalCode'])\n", + " else:\n", + " POST.append('')\n", + " if 'cityName' in element['data']:\n", + " CITY.append(element['data'][0]['cityName']['en'])\n", + " else:\n", + " CITY.append('')\n", + " else:\n", + " append_blank(index)\n", + "\n", + "# append results to dataframe\n", + "df['osm_name'] = NAME\n", + "df['osm_street_no'] = ST_NO\n", + "df['osm_street_name'] = ST_NAME\n", + "df['osm_city'] = CITY\n", + "df['osm_province'] = PROV\n", + "df['osm_postal_code'] = POST\n", + "df['osm_class'] = CLASS\n", + "df['osm_type'] = TYPE\n", + "df['osm_lat'] = LATS\n", + "df['osm_lon'] = LONS" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-21T18:32:57.458452Z", + "iopub.status.busy": "2022-04-21T18:32:57.458179Z", + "iopub.status.idle": "2022-04-21T18:32:57.478333Z", + "shell.execute_reply": "2022-04-21T18:32:57.477659Z", + "shell.execute_reply.started": "2022-04-21T18:32:57.458425Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# recombine datasets: (1) no geocode (2) previously geocoded (3) newly geocoded\n", + "# df_leftover = df_leftover[df_leftover.geo_source.notnull()]\n", + "df_everything = pd.concat([df_leftover, df])" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-21T18:32:59.703829Z", + "iopub.status.busy": "2022-04-21T18:32:59.703575Z", + "iopub.status.idle": "2022-04-21T18:32:59.707068Z", + "shell.execute_reply": "2022-04-21T18:32:59.706464Z", + "shell.execute_reply.started": "2022-04-21T18:32:59.703805Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# sanity check for length of dataframes\n", + "diff = len(df_input) - len(df_everything)\n", + "if diff != 0:\n", + " print('ERROR length of output is ' + diff + '. review the scripts to correct')" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-21T18:33:05.085070Z", + "iopub.status.busy": "2022-04-21T18:33:05.084795Z", + "iopub.status.idle": "2022-04-21T18:33:05.435713Z", + "shell.execute_reply": "2022-04-21T18:33:05.434951Z", + "shell.execute_reply.started": "2022-04-21T18:33:05.085041Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "date = str(datetime.today().strftime('%Y-%m-%d'))\n", + "filename = \"geocoded_\" + date + \".csv\"\n", + "df_everything.to_csv(filename, index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-21T18:33:15.586484Z", + "iopub.status.busy": "2022-04-21T18:33:15.586208Z", + "iopub.status.idle": "2022-04-21T18:33:15.594183Z", + "shell.execute_reply": "2022-04-21T18:33:15.593578Z", + "shell.execute_reply.started": "2022-04-21T18:33:15.586455Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Source 25068\n", + "osm_address 986\n", + "osm_facility_name 590\n", + "osm_city 468\n", + "no_osm 208\n", + "gc_street_address 3\n", + "Name: geo_source, dtype: int64" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_everything['geo_source'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-21T02:56:48.742271Z", + "iopub.status.busy": "2022-04-21T02:56:48.741987Z", + "iopub.status.idle": "2022-04-21T02:56:48.747053Z", + "shell.execute_reply": "2022-04-21T02:56:48.746450Z", + "shell.execute_reply.started": "2022-04-21T02:56:48.742242Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2255" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/5-Geocoding/2-address-match.ipynb b/scripts/Businesses/5-Geocoding/2-address-match.ipynb new file mode 100644 index 00000000..dcb0c284 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/2-address-match.ipynb @@ -0,0 +1,286 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-04T19:34:22.733196Z", + "iopub.status.busy": "2022-08-04T19:34:22.732595Z", + "iopub.status.idle": "2022-08-04T19:34:23.348861Z", + "shell.execute_reply": "2022-08-04T19:34:23.347589Z", + "shell.execute_reply.started": "2022-08-04T19:34:22.733164Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# This finds address matches between files by looking for exact matches on street number and 'fuzzy' matches on street name\n", + "# the goal is to use Open Addresses files to assign geocoordinates\n", + "\n", + "# I want to start by trying out the script on a sample. \n", + "# download ODA data for Alberta.\n", + "\n", + "# conda install thefuzz\n", + "# conda install unidecode\n", + "\n", + "import pandas as pd\n", + "\n", + "from thefuzz import fuzz\n", + "from thefuzz import process\n", + "import time\n", + "import sys\n", + "import unidecode #to remove accents\n", + "import re\n", + "from AddressFuncs import DirectionCheck, NameIsNumber\n", + "import sys" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-04T19:34:22.733196Z", + "iopub.status.busy": "2022-08-04T19:34:22.732595Z", + "iopub.status.idle": "2022-08-04T19:34:23.348861Z", + "shell.execute_reply": "2022-08-04T19:34:23.347589Z", + "shell.execute_reply.started": "2022-08-04T19:34:22.733164Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "input_dir='inputs/'\n", + "output_dir='outputs/'\n", + "\n", + "# inputs \n", + "# formatted_on_test.csv\n", + "# ODA_MB_v1.csv\n", + "\n", + "# database=sys.argv[1]\n", + "# addresses=sys.argv[2]\n", + "# output=sys.argv[3]\n", + "\n", + "t1=time.time()\n", + "\n", + "\n", + "#This is a semi-arbitrary cut off for fuzzy string matching\n", + "cut_off=70\n", + "#Read input files\n", + "\n", + "\n", + "# df=pd.read_csv(input_dir+database)\n", + "df=pd.read_csv('formatted_ab_test.csv')\n", + "\n", + "#drop any entries without a street number\n", + "df=df.dropna(subset=['street_no'])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-04T19:34:22.733196Z", + "iopub.status.busy": "2022-08-04T19:34:22.732595Z", + "iopub.status.idle": "2022-08-04T19:34:23.348861Z", + "shell.execute_reply": "2022-08-04T19:34:23.347589Z", + "shell.execute_reply.started": "2022-08-04T19:34:22.733164Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "#read in openadress file\n", + "# DF=pd.read_csv(input_dir+addresses)\n", + "DF=pd.read_csv()\n", + "#drop any entries without a street number\n", + "DF=DF.dropna(subset=['NUMBER'])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-04T19:34:22.733196Z", + "iopub.status.busy": "2022-08-04T19:34:22.732595Z", + "iopub.status.idle": "2022-08-04T19:34:23.348861Z", + "shell.execute_reply": "2022-08-04T19:34:23.347589Z", + "shell.execute_reply.started": "2022-08-04T19:34:22.733164Z" + }, + "tags": [] + }, + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'data/TESTING/inputs//etc/share/jupyter/runtime/kernel-37f4eb1e-849c-4624-a68f-e34b1458059b.json'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [5]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 37\u001b[0m df\u001b[38;5;241m=\u001b[39mdf\u001b[38;5;241m.\u001b[39mdropna(subset\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstreet_no\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m 39\u001b[0m \u001b[38;5;66;03m#read in openadress file\u001b[39;00m\n\u001b[0;32m---> 40\u001b[0m DF\u001b[38;5;241m=\u001b[39m\u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[43minput_dir\u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43maddresses\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;66;03m#drop any entries without a street number\u001b[39;00m\n\u001b[1;32m 42\u001b[0m DF\u001b[38;5;241m=\u001b[39mDF\u001b[38;5;241m.\u001b[39mdropna(subset\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mNUMBER\u001b[39m\u001b[38;5;124m'\u001b[39m])\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/pandas/util/_decorators.py:311\u001b[0m, in \u001b[0;36mdeprecate_nonkeyword_arguments..decorate..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m>\u001b[39m num_allow_args:\n\u001b[1;32m 306\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m 307\u001b[0m msg\u001b[38;5;241m.\u001b[39mformat(arguments\u001b[38;5;241m=\u001b[39marguments),\n\u001b[1;32m 308\u001b[0m \u001b[38;5;167;01mFutureWarning\u001b[39;00m,\n\u001b[1;32m 309\u001b[0m stacklevel\u001b[38;5;241m=\u001b[39mstacklevel,\n\u001b[1;32m 310\u001b[0m )\n\u001b[0;32m--> 311\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/pandas/io/parsers/readers.py:680\u001b[0m, in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, error_bad_lines, warn_bad_lines, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)\u001b[0m\n\u001b[1;32m 665\u001b[0m kwds_defaults \u001b[38;5;241m=\u001b[39m _refine_defaults_read(\n\u001b[1;32m 666\u001b[0m dialect,\n\u001b[1;32m 667\u001b[0m delimiter,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 676\u001b[0m defaults\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdelimiter\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m,\u001b[39m\u001b[38;5;124m\"\u001b[39m},\n\u001b[1;32m 677\u001b[0m )\n\u001b[1;32m 678\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate(kwds_defaults)\n\u001b[0;32m--> 680\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/pandas/io/parsers/readers.py:575\u001b[0m, in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 572\u001b[0m _validate_names(kwds\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnames\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m))\n\u001b[1;32m 574\u001b[0m \u001b[38;5;66;03m# Create the parser.\u001b[39;00m\n\u001b[0;32m--> 575\u001b[0m parser \u001b[38;5;241m=\u001b[39m \u001b[43mTextFileReader\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m chunksize \u001b[38;5;129;01mor\u001b[39;00m iterator:\n\u001b[1;32m 578\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m parser\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/pandas/io/parsers/readers.py:934\u001b[0m, in \u001b[0;36mTextFileReader.__init__\u001b[0;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[1;32m 931\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moptions[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhas_index_names\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m kwds[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhas_index_names\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 933\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles: IOHandles \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m--> 934\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_engine\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mengine\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/pandas/io/parsers/readers.py:1218\u001b[0m, in \u001b[0;36mTextFileReader._make_engine\u001b[0;34m(self, f, engine)\u001b[0m\n\u001b[1;32m 1214\u001b[0m mode \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 1215\u001b[0m \u001b[38;5;66;03m# error: No overload variant of \"get_handle\" matches argument types\u001b[39;00m\n\u001b[1;32m 1216\u001b[0m \u001b[38;5;66;03m# \"Union[str, PathLike[str], ReadCsvBuffer[bytes], ReadCsvBuffer[str]]\"\u001b[39;00m\n\u001b[1;32m 1217\u001b[0m \u001b[38;5;66;03m# , \"str\", \"bool\", \"Any\", \"Any\", \"Any\", \"Any\", \"Any\"\u001b[39;00m\n\u001b[0;32m-> 1218\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles \u001b[38;5;241m=\u001b[39m \u001b[43mget_handle\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore[call-overload]\u001b[39;49;00m\n\u001b[1;32m 1219\u001b[0m \u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1220\u001b[0m \u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1221\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mencoding\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1222\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompression\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcompression\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1223\u001b[0m \u001b[43m \u001b[49m\u001b[43mmemory_map\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmemory_map\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1224\u001b[0m \u001b[43m \u001b[49m\u001b[43mis_text\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mis_text\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1225\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mencoding_errors\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstrict\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1226\u001b[0m \u001b[43m \u001b[49m\u001b[43mstorage_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstorage_options\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1227\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1228\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1229\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles\u001b[38;5;241m.\u001b[39mhandle\n", + "File \u001b[0;32m/opt/conda/envs/odbiz/lib/python3.10/site-packages/pandas/io/common.py:786\u001b[0m, in \u001b[0;36mget_handle\u001b[0;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[1;32m 781\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(handle, \u001b[38;5;28mstr\u001b[39m):\n\u001b[1;32m 782\u001b[0m \u001b[38;5;66;03m# Check whether the filename is to be opened in binary mode.\u001b[39;00m\n\u001b[1;32m 783\u001b[0m \u001b[38;5;66;03m# Binary mode does not support 'encoding' and 'newline'.\u001b[39;00m\n\u001b[1;32m 784\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ioargs\u001b[38;5;241m.\u001b[39mencoding \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m ioargs\u001b[38;5;241m.\u001b[39mmode:\n\u001b[1;32m 785\u001b[0m \u001b[38;5;66;03m# Encoding\u001b[39;00m\n\u001b[0;32m--> 786\u001b[0m handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 787\u001b[0m \u001b[43m \u001b[49m\u001b[43mhandle\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 788\u001b[0m \u001b[43m \u001b[49m\u001b[43mioargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 789\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mioargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 790\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 791\u001b[0m \u001b[43m \u001b[49m\u001b[43mnewline\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 792\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 793\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 794\u001b[0m \u001b[38;5;66;03m# Binary mode\u001b[39;00m\n\u001b[1;32m 795\u001b[0m handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mopen\u001b[39m(handle, ioargs\u001b[38;5;241m.\u001b[39mmode)\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'data/TESTING/inputs//etc/share/jupyter/runtime/kernel-37f4eb1e-849c-4624-a68f-e34b1458059b.json'" + ] + } + ], + "source": [ + "#force street numbers to be integers then strings (pandas converts to float if there are empty entries)\n", + "df[\"street_no\"]=df[\"street_no\"].astype('int', errors='ignore').astype('str')\n", + "DF[\"NUMBER\"]=DF[\"NUMBER\"].astype('int', errors='ignore').astype('str')\n", + "\n", + "#FOR TESTING, remove duplicates\n", + "\n", + "df=df.drop_duplicates(subset=['street_no','street_name'])\n", + "######\n", + "\n", + "num=list(df[\"street_no\"])\n", + "street=[]\n", + "\n", + "#remove accents from input dataframe\n", + "for i in df.street_name.astype('str'):\n", + "\tstreet.append(unidecode.unidecode(i))\n", + "\n", + "n=len(num)\n", + "MATCHES_r=[0]*n\n", + "\n", + "ratio=[0]*n\n", + "\n", + "x=[0]*n\n", + "y=[0]*n\n", + "\n", + "\n", + "\n", + "\n", + "#loop through main list\n", + "for i in range(n):\n", + "\tnumber=num[i]\n", + "\n", + "\t#restrict to only consider entries with a matching street number\n", + "\tDF_temp=DF.loc[DF[\"NUMBER\"]==number]\n", + "\n", + "\t#remove accents from address database, and restrict to unique names (avoid repetitions)\n", + "\tSTREET=[]\n", + "\tfor j in DF_temp[\"STREET\"].unique().astype('str'):\n", + "\t\tSTREET.append(unidecode.unidecode(j))\t\n", + "\n", + "\n", + "\n", + "\t#process reduced address list with fuzzywuzzy\n", + "\n", + "\n", + "\taddr1=street[i]\n", + "\tif STREET==[]: #this means the street number isn't in the address list, so obviously no match\n", + "\t\t#do nothing\n", + "\t\tr=0\n", + "\t\tbest=''\n", + "\telse:\t\t\n", + "\t\tbests=process.extract(addr1,STREET,scorer=fuzz.ratio)\n", + "\t\tprint(bests)\n", + "\t\t#The print statement below is to determine how much 'better' the best match is than the 2nd best\n", + "#\t\tif len(bests)>1:\t\n", + "#\t\t\tprint((bests[0])[1]-(bests[1])[1])\n", + "\n", + "\t\t#bests is a list of tuples, of the form (\"street name\", ratio) \n", + "\t\tb0=bests[0]\n", + "\t\n", + "\t\tr=b0[1]\n", + "\t\tbest=b0[0]\n", + "\t\tratio[i]=r\n", + "\t\tMATCHES_r[i]=best\n", + "\t#This is where we determine if we found an address match\n", + "\t#We consider a match if the 'best' match is significantly better than the 2nd best, AND that the best is also good (>70, semi-arbitrary cut-off).\n", + "\t\t#assume directions match until we find they don't\n", + "\t\tDIR_MATCH=True\n", + "\t\tRAT_MATCH=False\n", + "\t\tif r>cut_off:\n", + "\t\t\tif r==100: #perfect string match\n", + "\t\t\t\tRAT_MATCH=True\n", + "\t\t\telse:\n", + "\t\t\t\tcheck_list=pd.Series([addr1,best])\t\t\t\t\t\t\n", + "\t\t\t\t#check to see if direction exists and matches\n", + "\t\t\t\tDIR_MATCH=DirectionCheck(check_list)\n", + "\t\t\t\t#check to see if the street name is a number and that if so it isn't a mismatch\n", + "\t\t\t\tNUM_MATCH=NameIsNumber(check_list)\n", + "\t\t\t\tif (DIR_MATCH==True) and (NUM_MATCH==True):\n", + "\t\t\t\t\tif len(bests)>1:\n", + "\t\t\t\t\t\tr1=(bests[1])[1]\n", + "\t\t\t\t\t\tif (r-r1)>10: #clearly better than 2nd option\n", + "\t\t\t\t\t\t\tRAT_MATCH=True\n", + "\n", + "\t\t\t\t\t\n", + "\t\t\t\t\t\telse: #not clearly better than second option\n", + "\t\t\t\t\t\t\tRAT_MATCH=False\n", + "\n", + "\t\t\t\t\t\n", + "\t\t\t\t\telse: #Only one option, and score above 70\n", + "\t\t\t\t\t\tRAT_MATCH=True\n", + "\t\t\t\telse:\n", + "\t\t\t\t\tRAT_MATCH =False\n", + "\t\telse: #Best option ratio 0:\n", + " print('osm address found')\n", + " df['geo_source'].iloc[i] = \"osm_reverse\"\n", + " else:\n", + " print('no osm address found')\n", + " \n", + " \n", + " JSONS.append(resp)\n", + "\n", + "# if resp!=[]:\n", + "# print(resp)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-22T16:03:33.896444Z", + "iopub.status.busy": "2022-04-22T16:03:33.896188Z", + "iopub.status.idle": "2022-04-22T16:03:34.037148Z", + "shell.execute_reply": "2022-04-22T16:03:34.036491Z", + "shell.execute_reply.started": "2022-04-22T16:03:33.896422Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "with open('reverse_nominatim_0-4207.json', 'w', encoding='utf-8') as f:\n", + " json.dump(JSONS, f, ensure_ascii=False, indent=4) " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-22T17:51:42.263352Z", + "iopub.status.busy": "2022-04-22T17:51:42.263103Z", + "iopub.status.idle": "2022-04-22T17:51:42.267516Z", + "shell.execute_reply": "2022-04-22T17:51:42.266899Z", + "shell.execute_reply.started": "2022-04-22T17:51:42.263328Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "4105" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(JSONS)\n", + "\n", + "# doing things in batches\n", + "# first batch up to 1704" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-22T17:53:45.295375Z", + "iopub.status.busy": "2022-04-22T17:53:45.295095Z", + "iopub.status.idle": "2022-04-22T17:53:46.295226Z", + "shell.execute_reply": "2022-04-22T17:53:46.294550Z", + "shell.execute_reply.started": "2022-04-22T17:53:45.295348Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# read json request results into our dataframe\n", + "\n", + "def append_blank(index):\n", + " df['geo_source'].iloc[index] = \"no_osm\"\n", + " LATS.append('')\n", + " LONS.append('')\n", + " NAME.append('')\n", + " ST_NO.append('')\n", + " ST_NAME.append('')\n", + " CITY.append('')\n", + " PROV.append('')\n", + " POST.append('')\n", + " COUNTRY.append('')\n", + " TYPE.append('')\n", + " CLASS.append('')\n", + "\n", + "with open('reverse_nominatim_0-4207.json', 'r', encoding='utf-8') as f:\n", + " JSONS=json.load(f) \n", + "\n", + "LATS = []\n", + "LONS = []\n", + "NAME = []\n", + "ST_NO = []\n", + "ST_NAME = []\n", + "CITY = []\n", + "PROV = []\n", + "POST = []\n", + "COUNTRY = []\n", + "TYPE = []\n", + "CLASS = []\n", + "\n", + "\n", + "for index, element in enumerate(JSONS):\n", + " if element==[]:\n", + " my_function()\n", + " else:\n", + " # For now we will use everything osm gives us\n", + " # later we might want to filter by class - eg just to \"amenity\" \n", + " \n", + "# if (element['address']['country_code']=='ca') and ('amenity' in element['address'].keys()): \n", + "# if (element['address']['country_code']=='ca') and ((element['class'] in ['amenity', 'place', 'building']) ):\n", + " \n", + " if 'address' in element:\n", + " if 'country_code' in element['address']:\n", + " if (element['address']['country_code']=='ca'):\n", + " df['geo_source'].iloc[index] = \"osm_reverse\"\n", + " COUNTRY.append(element['address']['country_code'])\n", + " LATS.append(element['lat'])\n", + " LONS.append(element['lon'])\n", + " \n", + " if 'amenity' in element.keys():\n", + " NAME.append(element['address']['amenity'])\n", + " else:\n", + " NAME.append('')\n", + " \n", + " if 'house_number' in element['address']:\n", + " ST_NO.append(element['address']['house_number'])\n", + " else:\n", + " ST_NO.append('') \n", + " \n", + " if 'road' in element['address']:\n", + " ST_NAME.append(element['address']['road'])\n", + " # df['geo_source'].iloc[index] = \"osm_street\"\n", + " else:\n", + " ST_NAME.append('') \n", + " \n", + " if 'city' in element['address']:\n", + " CITY.append(element['address']['city'])\n", + " else:\n", + " CITY.append('') \n", + "\n", + " if 'state' in element.keys():\n", + " PROV.append(element['address']['state'])\n", + " else:\n", + " PROV.append('')\n", + "\n", + " if 'postcode' in element['address']:\n", + " POST.append(element['address']['postcode'])\n", + " else:\n", + " POST.append('')\n", + "\n", + " COUNTRY.append(element['address']['country_code'])\n", + "\n", + " if 'type' in element.keys():\n", + " TYPE.append(element['type'])\n", + " else:\n", + " TYPE.append('')\n", + " if 'class' in element.keys():\n", + " CLASS.append(element['class'])\n", + " else:\n", + " CLASS.append('') \n", + " \n", + " else:\n", + " append_blank(index)\n", + " \n", + " else:\n", + " append_blank(index)\n", + " \n", + " else:\n", + " append_blank(index)\n", + "\n", + "# append results to dataframe\n", + "df['osm_name'] = NAME\n", + "df['osm_street_no'] = ST_NO\n", + "df['osm_street_name'] = ST_NAME\n", + "df['osm_city'] = CITY\n", + "df['osm_province'] = PROV\n", + "df['osm_postal_code'] = POST\n", + "df['osm_class'] = CLASS\n", + "df['osm_type'] = TYPE\n", + "df['osm_lat'] = LATS\n", + "df['osm_lon'] = LONS " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-22T17:53:51.089080Z", + "iopub.status.busy": "2022-04-22T17:53:51.088700Z", + "iopub.status.idle": "2022-04-22T17:53:51.097169Z", + "shell.execute_reply": "2022-04-22T17:53:51.096406Z", + "shell.execute_reply.started": "2022-04-22T17:53:51.089039Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "osm_reverse 4115\n", + "no_osm 92\n", + "Name: geo_source, dtype: int64" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['geo_source'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-22T17:53:56.506233Z", + "iopub.status.busy": "2022-04-22T17:53:56.505968Z", + "iopub.status.idle": "2022-04-22T17:53:56.510843Z", + "shell.execute_reply": "2022-04-22T17:53:56.510142Z", + "shell.execute_reply.started": "2022-04-22T17:53:56.506209Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "4207" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(JSONS)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-22T17:54:06.354609Z", + "iopub.status.busy": "2022-04-22T17:54:06.354194Z", + "iopub.status.idle": "2022-04-22T17:54:06.379925Z", + "shell.execute_reply": "2022-04-22T17:54:06.379076Z", + "shell.execute_reply.started": "2022-04-22T17:54:06.354554Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# recombine datasets: (1) no reverse geocode needed\n", + "# (2) previously reverse geocoded (3) newly reverse geocoded\n", + "df_everything = pd.concat([df_leftover, df])" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-22T17:54:07.432798Z", + "iopub.status.busy": "2022-04-22T17:54:07.432534Z", + "iopub.status.idle": "2022-04-22T17:54:07.436798Z", + "shell.execute_reply": "2022-04-22T17:54:07.436278Z", + "shell.execute_reply.started": "2022-04-22T17:54:07.432772Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "27323" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df_everything)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-22T17:54:57.052560Z", + "iopub.status.busy": "2022-04-22T17:54:57.052302Z", + "iopub.status.idle": "2022-04-22T17:54:57.393355Z", + "shell.execute_reply": "2022-04-22T17:54:57.392659Z", + "shell.execute_reply.started": "2022-04-22T17:54:57.052535Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "date = str(datetime.today().strftime('%Y-%m-%d'))\n", + "filename = \"reverse_geocoded_\" + date + \".csv\"\n", + "df_everything.to_csv(filename, index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "execution": { + "iopub.execute_input": "2022-04-22T17:55:01.892161Z", + "iopub.status.busy": "2022-04-22T17:55:01.891896Z", + "iopub.status.idle": "2022-04-22T17:55:01.899455Z", + "shell.execute_reply": "2022-04-22T17:55:01.898754Z", + "shell.execute_reply.started": "2022-04-22T17:55:01.892136Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Source 20937\n", + "osm_reverse 4115\n", + "osm_address 986\n", + "osm_facility_name 588\n", + "osm_city 404\n", + "no_osm 290\n", + "gc_street_address 3\n", + "Name: geo_source, dtype: int64" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_everything['geo_source'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/5-Geocoding/3-address-match.ipynb b/scripts/Businesses/5-Geocoding/3-address-match.ipynb new file mode 100644 index 00000000..efc75847 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/3-address-match.ipynb @@ -0,0 +1,533 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T18:47:59.589391Z", + "iopub.status.busy": "2022-08-16T18:47:59.588959Z", + "iopub.status.idle": "2022-08-16T18:48:01.322686Z", + "shell.execute_reply": "2022-08-16T18:48:01.321779Z", + "shell.execute_reply.started": "2022-08-16T18:47:59.589304Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# This finds address matches between files by looking for exact matches on street number and 'fuzzy' matches on street name\n", + "# the goal is to use Open Addresses files to assign geocoordinates\n", + "\n", + "# I want to start by trying out the script on a sample. \n", + "# download ODA data for Alberta.\n", + "\n", + "# conda install thefuzz\n", + "# conda install unidecode\n", + "\n", + "import pandas as pd\n", + "\n", + "from thefuzz import fuzz\n", + "from thefuzz import process\n", + "import time\n", + "import sys\n", + "import unidecode #to remove accents\n", + "import re\n", + "from AddressFuncs import DirectionCheck, NameIsNumber\n", + "import sys" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T18:48:04.472534Z", + "iopub.status.busy": "2022-08-16T18:48:04.471391Z", + "iopub.status.idle": "2022-08-16T18:48:04.477936Z", + "shell.execute_reply": "2022-08-16T18:48:04.476981Z", + "shell.execute_reply.started": "2022-08-16T18:48:04.472491Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# input_dir='inputs/'\n", + "# output_dir='outputs/'\n", + "\n", + "# inputs \n", + "# formatted_on_test.csv\n", + "# ODA_MB_v1.csv\n", + "\n", + "# database=sys.argv[1]\n", + "# addresses=sys.argv[2]\n", + "# output=sys.argv[3]\n", + "\n", + "# t1=time.time()\n", + "\n", + "\n", + "#This is a semi-arbitrary cut off for fuzzy string matching\n", + "cut_off=70\n", + "#Read input files\n", + "\n", + "# loop through and do seperately for each province \n", + "# let's test it on one province again first. AB\n", + "\n", + "\n", + "provinces = ['AB', 'BC', 'MB', 'NB', 'NT', 'NS', 'ON', 'PE', 'QC', 'SK']\n", + "provinces = ['AB', 'BC', 'MB', 'NB', 'NT', 'NS', 'PE', 'QC', 'SK']\n", + "# provinces = ['AB', 'BC', 'MB']\n", + "\n", + "sample_size = 200\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T18:48:06.415694Z", + "iopub.status.busy": "2022-08-16T18:48:06.415101Z", + "iopub.status.idle": "2022-08-16T18:49:37.471743Z", + "shell.execute_reply": "2022-08-16T18:49:37.470714Z", + "shell.execute_reply.started": "2022-08-16T18:48:06.415660Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AB\n", + "rows: 599\n", + "rows after deduplication: 243\n", + "ODA addresses: 1776750\n", + "percent matches (from sample n = 200): 196\n", + "time taken: 37.01 \n", + "\n", + "BC\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_22039/2910145675.py:186: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " df_all = df_all.append(df)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 129789\n", + "rows after deduplication: 57953\n", + "ODA addresses: 796178\n", + "percent matches (from sample n = 200): 81\n", + "time taken: 15.81 \n", + "\n", + "MB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_22039/2910145675.py:186: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " df_all = df_all.append(df)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 3\n", + "rows after deduplication: 3\n", + "ODA addresses: 236847\n", + "percent matches (from sample n = 200): 0\n", + "time taken: 1.56 \n", + "\n", + "NB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_22039/2910145675.py:186: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " df_all = df_all.append(df)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 0\n", + "rows after deduplication: 0\n", + "ODA addresses: 406040\n", + "percent matches (from sample n = 200): 0\n", + "time taken: 4.15 \n", + "\n", + "NT\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_22039/2910145675.py:186: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " df_all = df_all.append(df)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 1352\n", + "rows after deduplication: 851\n", + "ODA addresses: 6996\n", + "percent matches (from sample n = 200): 192\n", + "time taken: 0.8 \n", + "\n", + "NS\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_22039/2910145675.py:186: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " df_all = df_all.append(df)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 0\n", + "rows after deduplication: 0\n", + "ODA addresses: 883501\n", + "percent matches (from sample n = 200): 0\n", + "time taken: 6.63 \n", + "\n", + "PE\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_22039/2910145675.py:186: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " df_all = df_all.append(df)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 0\n", + "rows after deduplication: 0\n", + "ODA addresses: 74412\n", + "percent matches (from sample n = 200): 0\n", + "time taken: 0.74 \n", + "\n", + "QC\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_22039/2910145675.py:186: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " df_all = df_all.append(df)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 5003\n", + "rows after deduplication: 3571\n", + "ODA addresses: 1254235\n", + "percent matches (from sample n = 200): 1\n", + "time taken: 23.13 \n", + "\n", + "SK\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_22039/2910145675.py:186: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " df_all = df_all.append(df)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 1\n", + "rows after deduplication: 1\n", + "ODA addresses: 157710\n", + "percent matches (from sample n = 200): 0\n", + "time taken: 1.18 \n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_22039/2910145675.py:186: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", + " df_all = df_all.append(df)\n" + ] + } + ], + "source": [ + "# for province_code in provinces:\n", + "# file_location = \"https://www150.statcan.gc.ca/n1/pub/46-26-0001/2021001/ODA_\" + province_code + \"_v1.zip\"\n", + "\n", + "# for each province, subset the correct bit of formatted for df\n", + "# get the correct file for DF\n", + "# save it to a unique file name\n", + "\n", + "df_all = pd. DataFrame()\n", + "\n", + "for province_code in provinces:\n", + " \n", + " t1=time.time()\n", + " \n", + " print(province_code)\n", + "\n", + " # df=pd.read_csv(input_dir+database)\n", + " df = pd.read_csv('formatted.csv', low_memory=False)\n", + "\n", + " # test \n", + " df = df[df['province'] == province_code]\n", + "\n", + " # drop any entries without a street number\n", + " df = df.dropna(subset=['street_no'])\n", + " \n", + " print('rows: ', len(df))\n", + "\n", + " #read in openadress file\n", + " # DF=pd.read_csv(input_dir+addresses)\n", + " \n", + " ocd_file = \"data/oda-addresses/ODA_\" + province_code + \"_v1.csv\"\n", + "\n", + " DF=pd.read_csv(ocd_file, low_memory=False)\n", + " #drop any entries without a street number\n", + " DF=DF.dropna(subset=['street_no'])\n", + " \n", + " \n", + "\n", + " # SAM need to adjust to use formatted street names\n", + " # formatted_en\n", + "\n", + " #force street numbers to be integers then strings (pandas converts to float if there are empty entries)\n", + " df[\"street_no\"] = df[\"street_no\"].astype('int', errors='ignore').astype('str')\n", + " DF[\"street_no\"] = DF[\"street_no\"].astype('int', errors='ignore').astype('str')\n", + "\n", + " # FOR TESTING, remove duplicates\n", + "\n", + " d1 = len(df)\n", + " df = df.drop_duplicates(subset=['street_no','formatted_en'])\n", + " d2 = len(df)\n", + " \n", + " print('rows after deduplication: ', d2)\n", + " ######\n", + " \n", + " print('ODA addresses:', len(DF))\n", + " \n", + " # FOR TESTING take a sample\n", + " \n", + " \n", + " if (len(df) > sample_size):\n", + " df = df.sample(sample_size)\n", + "\n", + "\n", + " num=list(df[\"street_no\"])\n", + " street=[]\n", + " \n", + " \n", + " #remove accents from input dataframe\n", + " \n", + " if (province_code == 'QC'):\n", + " for i in df.formatted_fr.astype('str'):\n", + " street.append(unidecode.unidecode(i))\n", + " else:\n", + " for i in df.formatted_en.astype('str'):\n", + " street.append(unidecode.unidecode(i))\n", + " \n", + "\n", + " n=len(num)\n", + " MATCHES_r=[0]*n\n", + "\n", + " ratio=[0]*n\n", + "\n", + " x=[0]*n\n", + " y=[0]*n\n", + "\n", + "\n", + "\n", + "\n", + " #loop through main list\n", + " for i in range(n):\n", + " number=num[i]\n", + "\n", + " #restrict to only consider entries with a matching street number\n", + " DF_temp=DF.loc[DF[\"street_no\"]==number]\n", + "\n", + " #remove accents from address database, and restrict to unique names (avoid repetitions)\n", + " STREET=[]\n", + " for j in DF_temp[\"street\"].unique().astype('str'):\n", + " STREET.append(unidecode.unidecode(j))\t\n", + "\n", + "\n", + "\n", + " #process reduced address list with fuzzywuzzy\n", + "\n", + "\n", + " addr1=street[i]\n", + " if STREET==[]: #this means the street number isn't in the address list, so obviously no match\n", + " #do nothing\n", + " r=0\n", + " best=''\n", + " else:\t\t\n", + " bests=process.extract(addr1,STREET,scorer=fuzz.ratio)\n", + " # \t\tprint(bests)\n", + " #The print statement below is to determine how much 'better' the best match is than the 2nd best\n", + " #\t\tif len(bests)>1:\t\n", + " #\t\t\tprint((bests[0])[1]-(bests[1])[1])\n", + "\n", + " #bests is a list of tuples, of the form (\"street name\", ratio) \n", + " b0=bests[0]\n", + "\n", + " r=b0[1]\n", + " best=b0[0]\n", + " ratio[i]=r\n", + " MATCHES_r[i]=best\n", + " #This is where we determine if we found an address match\n", + " #We consider a match if the 'best' match is significantly better than the 2nd best, AND that the best is also good (>70, semi-arbitrary cut-off).\n", + " #assume directions match until we find they don't\n", + " DIR_MATCH=True\n", + " RAT_MATCH=False\n", + " if r>cut_off:\n", + " if r==100: #perfect string match\n", + " RAT_MATCH=True\n", + " else:\n", + " check_list=pd.Series([addr1,best])\t\t\t\t\t\t\n", + " #check to see if direction exists and matches\n", + " DIR_MATCH=DirectionCheck(check_list)\n", + " #check to see if the street name is a number and that if so it isn't a mismatch\n", + " NUM_MATCH=NameIsNumber(check_list)\n", + " if (DIR_MATCH==True) and (NUM_MATCH==True):\n", + " if len(bests)>1:\n", + " r1=(bests[1])[1]\n", + " if (r-r1)>10: #clearly better than 2nd option\n", + " RAT_MATCH=True\n", + "\n", + "\n", + " else: #not clearly better than second option\n", + " RAT_MATCH=False\n", + "\n", + "\n", + " else: #Only one option, and score above 70\n", + " RAT_MATCH=True\n", + " else:\n", + " RAT_MATCH =False\n", + " else: #Best option ratio cut_off].count()\n", + " print('percent matches (from sample n = 200): ', no_matches)\n", + " \n", + " output_filename = 'output-' + province_code + '.csv'\n", + " df.to_csv(output_filename, index=False)\n", + "\n", + " t2=time.time()\n", + " print('time taken: ', str(round(t2-t1, 2)), '\\n')\n", + " \n", + " df_all = df_all.append(df)\n", + " \n", + "\n", + "df_all.to_csv(\"output_all.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:53:26.880095Z", + "iopub.status.busy": "2022-08-16T14:53:26.878963Z", + "iopub.status.idle": "2022-08-16T14:53:26.888025Z", + "shell.execute_reply": "2022-08-16T14:53:26.887162Z", + "shell.execute_reply.started": "2022-08-16T14:53:26.880056Z" + } + }, + "outputs": [], + "source": [ + "# for each province print\n", + "# size of dataframe\n", + "# how many were not geocoded\n", + "# number of oda addresses\n", + "# how many with matches found\n", + "# how long did it take to compute\n", + " # if ages, then message every batch of 100\n", + " \n", + "df_all.to_csv(\"output_all.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "data_exploration (odbiz)", + "language": "python", + "name": "myenv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/5-Geocoding/3-address-matching.py b/scripts/Businesses/5-Geocoding/3-address-matching.py new file mode 100644 index 00000000..686e859e --- /dev/null +++ b/scripts/Businesses/5-Geocoding/3-address-matching.py @@ -0,0 +1,233 @@ +# This finds address matches between files by looking for exact matches on street number and 'fuzzy' matches on street name +# the goal is to use Open Addresses files to assign geocoordinates + +# I want to start by trying out the script on a sample. +# download ODA data for Alberta. + +# conda install thefuzz +# conda install unidecode + +import pandas as pd + +from thefuzz import fuzz +from thefuzz import process +import time +import sys +import unidecode #to remove accents +import re +from AddressFuncs import DirectionCheck, NameIsNumber +import sys + + +# input_dir='inputs/' +# output_dir='outputs/' + +# inputs +# formatted_on_test.csv +# ODA_MB_v1.csv + +# database=sys.argv[1] +# addresses=sys.argv[2] +# output=sys.argv[3] + +# t1=time.time() + + +#This is a semi-arbitrary cut off for fuzzy string matching +cut_off=70 +#Read input files + +# loop through and do seperately for each province +# let's test it on one province again first. AB + + +provinces = ['AB', 'BC', 'MB', 'NB', 'NT', 'NS', 'ON', 'PE', 'QC', 'SK'] +# provinces = ['AB', 'BC', 'MB'] + +# for province_code in provinces: +# file_location = "https://www150.statcan.gc.ca/n1/pub/46-26-0001/2021001/ODA_" + province_code + "_v1.zip" + +# for each province, subset the correct bit of formatted for df +# get the correct file for DF +# save it to a unique file name + +df_all = pd. DataFrame() + +for province_code in provinces: + + t1=time.time() + + print(province_code) + + # df=pd.read_csv(input_dir+database) + df = pd.read_csv('formatted.csv', low_memory=False) + + # test + df = df[df['province'] == province_code] + + # drop any entries without a street number + df = df.dropna(subset=['street_no']) + + print('rows: ', len(df)) + + #read in openadress file + # DF=pd.read_csv(input_dir+addresses) + + ocd_file = "data/oda-addresses/ODA_" + province_code + "_v1.csv" + + DF=pd.read_csv(ocd_file, low_memory=False) + #drop any entries without a street number + DF=DF.dropna(subset=['street_no']) + + + + # SAM need to adjust to use formatted street names + # formatted_en + + #force street numbers to be integers then strings (pandas converts to float if there are empty entries) + df["street_no"] = df["street_no"].astype('int', errors='ignore').astype('str') + DF["street_no"] = DF["street_no"].astype('int', errors='ignore').astype('str') + + # FOR TESTING, remove duplicates + + d1 = len(df) + df = df.drop_duplicates(subset=['street_no','formatted_en']) + d2 = len(df) + + print('rows after deduplication: ', d2) + ###### + + print('ODA addresses:', len(DF)) + + # FOR TESTING take a sample + if (len(df) > 100): + df = df.sample(100) + + + num=list(df["street_no"]) + street=[] + + + #remove accents from input dataframe + + if (province_code == 'QC'): + for i in df.formatted_fr.astype('str'): + street.append(unidecode.unidecode(i)) + else: + for i in df.formatted_en.astype('str'): + street.append(unidecode.unidecode(i)) + + + n=len(num) + MATCHES_r=[0]*n + + ratio=[0]*n + + x=[0]*n + y=[0]*n + + + + + #loop through main list + for i in range(n): + number=num[i] + + #restrict to only consider entries with a matching street number + DF_temp=DF.loc[DF["street_no"]==number] + + #remove accents from address database, and restrict to unique names (avoid repetitions) + STREET=[] + for j in DF_temp["street"].unique().astype('str'): + STREET.append(unidecode.unidecode(j)) + + + + #process reduced address list with fuzzywuzzy + + + addr1=street[i] + if STREET==[]: #this means the street number isn't in the address list, so obviously no match + #do nothing + r=0 + best='' + else: + bests=process.extract(addr1,STREET,scorer=fuzz.ratio) + # print(bests) + #The print statement below is to determine how much 'better' the best match is than the 2nd best + # if len(bests)>1: + # print((bests[0])[1]-(bests[1])[1]) + + #bests is a list of tuples, of the form ("street name", ratio) + b0=bests[0] + + r=b0[1] + best=b0[0] + ratio[i]=r + MATCHES_r[i]=best + #This is where we determine if we found an address match + #We consider a match if the 'best' match is significantly better than the 2nd best, AND that the best is also good (>70, semi-arbitrary cut-off). + #assume directions match until we find they don't + DIR_MATCH=True + RAT_MATCH=False + if r>cut_off: + if r==100: #perfect string match + RAT_MATCH=True + else: + check_list=pd.Series([addr1,best]) + #check to see if direction exists and matches + DIR_MATCH=DirectionCheck(check_list) + #check to see if the street name is a number and that if so it isn't a mismatch + NUM_MATCH=NameIsNumber(check_list) + if (DIR_MATCH==True) and (NUM_MATCH==True): + if len(bests)>1: + r1=(bests[1])[1] + if (r-r1)>10: #clearly better than 2nd option + RAT_MATCH=True + + + else: #not clearly better than second option + RAT_MATCH=False + + + else: #Only one option, and score above 70 + RAT_MATCH=True + else: + RAT_MATCH =False + else: #Best option ratio cut_off].count() + print('percent matches (from sample n = 100): ', no_matches) + + output_filename = 'output-' + province_code + '.csv' + df.to_csv(output_filename, index=False) + + t2=time.time() + print('time taken: ', str(round(t2-t1, 2)), '\n') + + df_all = df_all.append(df) + + +df_all.to_csv("output_all.csv", index=False) \ No newline at end of file diff --git a/scripts/Businesses/5-Geocoding/3-deduplication.ipynb b/scripts/Businesses/5-Geocoding/3-deduplication.ipynb new file mode 100644 index 00000000..5a914024 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/3-deduplication.ipynb @@ -0,0 +1,915 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-25T14:53:00.165276Z", + "iopub.status.busy": "2022-08-25T14:53:00.164931Z", + "iopub.status.idle": "2022-08-25T14:53:00.170450Z", + "shell.execute_reply": "2022-08-25T14:53:00.169184Z", + "shell.execute_reply.started": "2022-08-25T14:53:00.165236Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# We're doing some basic deduplication to remove exact matches for street number \n", + "# + strong fuzzy matches for street names\n", + "# within the same city\n", + "\n", + "\n", + "# NOTE if I'm deduplicating, I need to be careful to retain data\n", + "# specifically for now, I want to keep the one with a geocode\n", + "\n", + "# I'll need to sort the data first perhaps - https://stackoverflow.com/questions/43814487/remove-duplicate-rows-in-pandas-dataframe-based-on-condition\n", + "# then the nan ones for geo will be lower" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-30T14:13:00.365655Z", + "iopub.status.busy": "2022-08-30T14:13:00.365390Z", + "iopub.status.idle": "2022-08-30T14:13:00.960769Z", + "shell.execute_reply": "2022-08-30T14:13:00.959753Z", + "shell.execute_reply.started": "2022-08-30T14:13:00.365579Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jovyan/.local/lib/python3.8/site-packages/thefuzz/fuzz.py:11: UserWarning: Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning\n", + " warnings.warn('Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning')\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "from thefuzz import fuzz\n", + "from thefuzz import process" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-30T14:16:19.811226Z", + "iopub.status.busy": "2022-08-30T14:16:19.810798Z", + "iopub.status.idle": "2022-08-30T14:16:32.199938Z", + "shell.execute_reply": "2022-08-30T14:16:32.199146Z", + "shell.execute_reply.started": "2022-08-30T14:16:19.811172Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 803584\n" + ] + } + ], + "source": [ + "df = pd.read_csv('data/formatted.csv', low_memory=False)\n", + "print('rows: ', len(df))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-30T14:16:33.528907Z", + "iopub.status.busy": "2022-08-30T14:16:33.528580Z", + "iopub.status.idle": "2022-08-30T14:16:33.905655Z", + "shell.execute_reply": "2022-08-30T14:16:33.904799Z", + "shell.execute_reply.started": "2022-08-30T14:16:33.528874Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "598853\n" + ] + } + ], + "source": [ + "print(len(df[df['longitude'].isnull()]))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-30T14:16:39.309175Z", + "iopub.status.busy": "2022-08-30T14:16:39.308891Z", + "iopub.status.idle": "2022-08-30T14:16:39.315526Z", + "shell.execute_reply": "2022-08-30T14:16:39.314874Z", + "shell.execute_reply.started": "2022-08-30T14:16:39.309144Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "803554 NaN\n", + "803555 NaN\n", + "803556 NaN\n", + "803557 NaN\n", + "803558 NaN\n", + "803559 NaN\n", + "803560 NaN\n", + "803561 NaN\n", + "803562 NaN\n", + "803563 NaN\n", + "803564 NaN\n", + "803565 NaN\n", + "803566 NaN\n", + "803567 NaN\n", + "803568 NaN\n", + "803569 NaN\n", + "803570 NaN\n", + "803571 NaN\n", + "803572 NaN\n", + "803573 NaN\n", + "803574 NaN\n", + "803575 NaN\n", + "803576 NaN\n", + "803577 NaN\n", + "803578 NaN\n", + "803579 NaN\n", + "803580 NaN\n", + "803581 NaN\n", + "803582 NaN\n", + "803583 NaN\n", + "Name: latitude, dtype: float64" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['latitude'].tail(30)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-30T14:20:13.114555Z", + "iopub.status.busy": "2022-08-30T14:20:13.114284Z", + "iopub.status.idle": "2022-08-30T14:20:14.440297Z", + "shell.execute_reply": "2022-08-30T14:20:14.439455Z", + "shell.execute_reply.started": "2022-08-30T14:20:13.114525Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rows: 484011\n" + ] + } + ], + "source": [ + "# Start by removing exact matches\n", + "\n", + "# df = df.drop_duplicates(subset=['street_no','formatted_en', 'province'])\n", + "# df = df[(~df.duplicated(subset=['street_no','formatted_en', 'province'])) | df['street_no','formatted_en', 'province'].isna()]\n", + "\n", + "# sort so that we keep records of the lat/lon if present\n", + "df.sort_values(['latitude'])\n", + "# this only seems to change the result by 20. Does that make sense? That suggests that pretty much all of the duplicates have the same lat/lon information\n", + "\n", + "df_city = df[~df.duplicated(subset=['street_no','formatted_en', 'province', 'city'], keep='first') | df['street_no'].isna() | df['formatted_en'].isna() | df['province'].isna() | df['city'].isna()]\n", + "# df_province = df[~df.duplicated(subset=['street_no','formatted_en', 'province']) | df['street_no'].isna() | df['formatted_en'].isna() | df['province'].isna()]\n", + "# df_nogeo = df[~df.duplicated(subset=['street_no','formatted_en']) | df['street_no'].isna() | df['formatted_en'].isna()]\n", + "\n", + "# FOR TESTING create a dataframe of duplicates for inspection\n", + "\n", + "print('rows: ', len(df_city))\n", + "# print('rows: ', len(df_province))\n", + "# print('rows: ', len(df_nogeo))\n", + "# if (province_code == 'QC'):\n", + "# df = df.drop_duplicates(subset=['street_no','formatted_fr'])\n", + "# else:\n", + "# df = df.drop_duplicates(subset=['street_no','formatted_en'])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-30T14:25:08.767834Z", + "iopub.status.busy": "2022-08-30T14:25:08.767540Z", + "iopub.status.idle": "2022-08-30T14:25:09.294995Z", + "shell.execute_reply": "2022-08-30T14:25:09.294120Z", + "shell.execute_reply.started": "2022-08-30T14:25:08.767799Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "duplicates = df[df.duplicated(subset=['street_no','formatted_en', 'province', 'city'], keep=False)]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-30T14:28:43.787942Z", + "iopub.status.busy": "2022-08-30T14:28:43.787622Z", + "iopub.status.idle": "2022-08-30T14:28:44.450604Z", + "shell.execute_reply": "2022-08-30T14:28:44.449834Z", + "shell.execute_reply.started": "2022-08-30T14:28:43.787910Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
street_noformatted_enprovincecity
578989#bellamy rd nONTORONTO, ON
570656#bellamy rd nONTORONTO, ON
577458#bellamy rd nONTORONTO, ON
575168#bellamy rd nONTORONTO, ON
575276#bellamy rd nONTORONTO, ON
563142#bellamy rd nONTORONTO, ON
573346#bellamy rd nONTORONTO, ON
592282#bellamy rd nONTORONTO, ON
560760#bellamy rd nONTORONTO, ON
581196#bellamy rd nONTORONTO, ON
583967#bellamy rd nONTORONTO, ON
551454#st regis cres nONTORONTO, ON
550363#st regis cres nONTORONTO, ON
550234#st regis cres nONTORONTO, ON
554595#st regis cres nONTORONTO, ON
549766#st regis cres nONTORONTO, ON
505026####no street nameONUNKNOWN, ON
645801####no street nameONUNKNOWN, ON
590425#010aadelaide st wONTORONTO, ON
579529#010aadelaide st wONTORONTO, ON
523677#010bfront st wONTORONTO, ON
518576#010bfront st wONTORONTO, ON
533711#02aeglinton ave eONTORONTO, ON
538131#02aeglinton ave eONTORONTO, ON
534360#02aeglinton ave eONTORONTO, ON
587029#044/f1dundas st wONTORONTO, ON
582839#044/f1dundas st wONTORONTO, ON
522465#0510sheppard ave eONTORONTO, ON
528657#0510sheppard ave eONTORONTO, ON
573007#1bellamy rd nONTORONTO, ON
\n", + "
" + ], + "text/plain": [ + " street_no formatted_en province city\n", + "578989 # bellamy rd n ON TORONTO, ON\n", + "570656 # bellamy rd n ON TORONTO, ON\n", + "577458 # bellamy rd n ON TORONTO, ON\n", + "575168 # bellamy rd n ON TORONTO, ON\n", + "575276 # bellamy rd n ON TORONTO, ON\n", + "563142 # bellamy rd n ON TORONTO, ON\n", + "573346 # bellamy rd n ON TORONTO, ON\n", + "592282 # bellamy rd n ON TORONTO, ON\n", + "560760 # bellamy rd n ON TORONTO, ON\n", + "581196 # bellamy rd n ON TORONTO, ON\n", + "583967 # bellamy rd n ON TORONTO, ON\n", + "551454 # st regis cres n ON TORONTO, ON\n", + "550363 # st regis cres n ON TORONTO, ON\n", + "550234 # st regis cres n ON TORONTO, ON\n", + "554595 # st regis cres n ON TORONTO, ON\n", + "549766 # st regis cres n ON TORONTO, ON\n", + "505026 ## ##no street name ON UNKNOWN, ON\n", + "645801 ## ##no street name ON UNKNOWN, ON\n", + "590425 #010a adelaide st w ON TORONTO, ON\n", + "579529 #010a adelaide st w ON TORONTO, ON\n", + "523677 #010b front st w ON TORONTO, ON\n", + "518576 #010b front st w ON TORONTO, ON\n", + "533711 #02a eglinton ave e ON TORONTO, ON\n", + "538131 #02a eglinton ave e ON TORONTO, ON\n", + "534360 #02a eglinton ave e ON TORONTO, ON\n", + "587029 #044/f1 dundas st w ON TORONTO, ON\n", + "582839 #044/f1 dundas st w ON TORONTO, ON\n", + "522465 #0510 sheppard ave e ON TORONTO, ON\n", + "528657 #0510 sheppard ave e ON TORONTO, ON\n", + "573007 #1 bellamy rd n ON TORONTO, ON" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "duplicates = duplicates.sort_values(['street_no','formatted_en', 'province', 'city'])\n", + "duplicates[['street_no','formatted_en', 'province', 'city']].head(30)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-30T14:20:15.623557Z", + "iopub.status.busy": "2022-08-30T14:20:15.623292Z", + "iopub.status.idle": "2022-08-30T14:20:15.869249Z", + "shell.execute_reply": "2022-08-30T14:20:15.868354Z", + "shell.execute_reply.started": "2022-08-30T14:20:15.623529Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "398644\n" + ] + } + ], + "source": [ + "# how many to geocode?\n", + "print(len(df_city[df_city['latitude'].isnull()]))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-29T15:38:20.066950Z", + "iopub.status.busy": "2022-08-29T15:38:20.066707Z", + "iopub.status.idle": "2022-08-29T15:38:20.095067Z", + "shell.execute_reply": "2022-08-29T15:38:20.094400Z", + "shell.execute_reply.started": "2022-08-29T15:38:20.066925Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['BC', 'AB', 'NB', 'ON', nan, 'QC', 'MB', 'SK', 'NS', '78', 'YT',\n", + " 'NL', 'LAKEVIEW ESTATES', 'NT', 'NU', 'PE'], dtype=object)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_city['province'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-29T15:40:32.508545Z", + "iopub.status.busy": "2022-08-29T15:40:32.508261Z", + "iopub.status.idle": "2022-08-29T15:40:32.588603Z", + "shell.execute_reply": "2022-08-29T15:40:32.587581Z", + "shell.execute_reply.started": "2022-08-29T15:40:32.508514Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idxlocalfilebusiness_namebusiness_sectorbusiness_subsectorbusiness_descriptionbusiness_id_nolicence_numberlicence_typeprimary_NAICS...LP_UnitLP_street_no_altLP2_unitLP2_street_nospillLP3_unitparsing_err_existsflagged_parsing_errformatted_enformatted_fr
1011797a122c15a250341d251aBC_Vancouver_Business_Licences.csvPost The Butcher IncOfficeBrokerNaNNaN19-138327NaNNaN...NaNNaNNaNNaNNaNNaNFalseFalseNaNNaN
18429269139e8fad512fe66792BC_Vancouver_Business_Licences.csv(Naoko Winther)Health ServicesCounsellingNaNNaN22-123793NaNNaN...NaNNaNNaNNaNNaNNaNFalseFalseNaNNaN
\n", + "

2 rows × 58 columns

\n", + "
" + ], + "text/plain": [ + " idx localfile \\\n", + "101179 7a122c15a250341d251a BC_Vancouver_Business_Licences.csv \n", + "184292 69139e8fad512fe66792 BC_Vancouver_Business_Licences.csv \n", + "\n", + " business_name business_sector business_subsector \\\n", + "101179 Post The Butcher Inc Office Broker \n", + "184292 (Naoko Winther) Health Services Counselling \n", + "\n", + " business_description business_id_no licence_number licence_type \\\n", + "101179 NaN NaN 19-138327 NaN \n", + "184292 NaN NaN 22-123793 NaN \n", + "\n", + " primary_NAICS ... LP_Unit LP_street_no_alt LP2_unit LP2_street_no \\\n", + "101179 NaN ... NaN NaN NaN NaN \n", + "184292 NaN ... NaN NaN NaN NaN \n", + "\n", + " spill LP3_unit parsing_err_exists flagged_parsing_err formatted_en \\\n", + "101179 NaN NaN False False NaN \n", + "184292 NaN NaN False False NaN \n", + "\n", + " formatted_fr \n", + "101179 NaN \n", + "184292 NaN \n", + "\n", + "[2 rows x 58 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_city[(df_city['province'] == 'LAKEVIEW ESTATES') | (df_city['province'] == '78')]" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:47:45.421126Z", + "iopub.status.busy": "2022-09-01T14:47:45.420866Z", + "iopub.status.idle": "2022-09-01T14:47:45.426070Z", + "shell.execute_reply": "2022-09-01T14:47:45.425293Z", + "shell.execute_reply.started": "2022-09-01T14:47:45.421100Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "803584" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:47:39.847735Z", + "iopub.status.busy": "2022-09-01T14:47:39.847444Z", + "iopub.status.idle": "2022-09-01T14:47:39.889586Z", + "shell.execute_reply": "2022-09-01T14:47:39.888694Z", + "shell.execute_reply.started": "2022-09-01T14:47:39.847703Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['full_address'].isna().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:15:17.790313Z", + "iopub.status.busy": "2022-09-01T14:15:17.790040Z", + "iopub.status.idle": "2022-09-01T14:15:17.796112Z", + "shell.execute_reply": "2022-09-01T14:15:17.795324Z", + "shell.execute_reply.started": "2022-09-01T14:15:17.790283Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['idx',\n", + " 'localfile',\n", + " 'business_name',\n", + " 'business_sector',\n", + " 'business_subsector',\n", + " 'business_description',\n", + " 'business_id_no',\n", + " 'licence_number',\n", + " 'licence_type',\n", + " 'primary_NAICS',\n", + " 'secondary_NAICS',\n", + " 'NAICS_descr',\n", + " 'alt_econ_act_code',\n", + " 'alt_econ_act_descrip',\n", + " 'latitude',\n", + " 'longitude',\n", + " 'full_address',\n", + " 'full_address_2',\n", + " 'mailing_address',\n", + " 'postal_code',\n", + " 'unit',\n", + " 'street_no',\n", + " 'street_name',\n", + " 'street_direction',\n", + " 'street_type',\n", + " 'city',\n", + " 'province',\n", + " 'country',\n", + " 'business_website',\n", + " 'email',\n", + " 'telephone',\n", + " 'telephone_extension',\n", + " 'toll_free_telephone',\n", + " 'fax',\n", + " 'total_no_employees',\n", + " 'no_full_time',\n", + " 'no_part_time',\n", + " 'no_seasonal',\n", + " 'date_established',\n", + " 'indigenous',\n", + " 'status',\n", + " 'provider',\n", + " 'geo_source',\n", + " 'LP_street_no',\n", + " 'LP_street_name',\n", + " 'LP_City',\n", + " 'LP_Province',\n", + " 'LP_PostCode',\n", + " 'LP_Unit',\n", + " 'LP_street_no_alt',\n", + " 'LP2_unit',\n", + " 'LP2_street_no',\n", + " 'spill',\n", + " 'LP3_unit',\n", + " 'parsing_err_exists',\n", + " 'flagged_parsing_err',\n", + " 'formatted_en',\n", + " 'formatted_fr']" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/5-Geocoding/4-address-match.ipynb b/scripts/Businesses/5-Geocoding/4-address-match.ipynb new file mode 100644 index 00000000..cbe7e5cd --- /dev/null +++ b/scripts/Businesses/5-Geocoding/4-address-match.ipynb @@ -0,0 +1,471 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-23T18:37:15.511077Z", + "iopub.status.busy": "2022-08-23T18:37:15.510764Z", + "iopub.status.idle": "2022-08-23T18:37:15.515582Z", + "shell.execute_reply": "2022-08-23T18:37:15.514613Z", + "shell.execute_reply.started": "2022-08-23T18:37:15.511044Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# TEMPORARY install packages probably in a not good way\n", + "# import sys\n", + "# !{sys.executable} -m pip install thefuzz\n", + "# !{sys.executable} -m pip install unidecode" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-02T18:09:53.550273Z", + "iopub.status.busy": "2022-09-02T18:09:53.550032Z", + "iopub.status.idle": "2022-09-02T18:09:54.140376Z", + "shell.execute_reply": "2022-09-02T18:09:54.139663Z", + "shell.execute_reply.started": "2022-09-02T18:09:53.550205Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jovyan/.local/lib/python3.8/site-packages/thefuzz/fuzz.py:11: UserWarning: Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning\n", + " warnings.warn('Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning')\n" + ] + } + ], + "source": [ + "# This finds address matches between files by looking for exact matches on street number and 'fuzzy' matches on street name\n", + "# the goal is to use Open Addresses files to assign geocoordinates\n", + "\n", + "# I want to start by trying out the script on a sample. \n", + "# download ODA data for Alberta.\n", + "\n", + "# let's try matching even for those with geocodes\n", + "# then the results can be compared\n", + "\n", + "# conda install thefuzz\n", + "# conda install unidecode\n", + "\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "from thefuzz import fuzz\n", + "from thefuzz import process\n", + "import time\n", + "import sys\n", + "import unidecode #to remove accents\n", + "import re\n", + "from AddressFuncs import DirectionCheck, NameIsNumber\n", + "import sys" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-02T18:10:01.728516Z", + "iopub.status.busy": "2022-09-02T18:10:01.728224Z", + "iopub.status.idle": "2022-09-02T18:10:01.732995Z", + "shell.execute_reply": "2022-09-02T18:10:01.732252Z", + "shell.execute_reply.started": "2022-09-02T18:10:01.728481Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# input_dir='inputs/'\n", + "# output_dir='outputs/'\n", + "\n", + "# inputs \n", + "# formatted_on_test.csv\n", + "# ODA_MB_v1.csv\n", + "\n", + "# database=sys.argv[1]\n", + "# addresses=sys.argv[2]\n", + "# output=sys.argv[3]\n", + "\n", + "# t1=time.time()\n", + "\n", + "\n", + "#This is a semi-arbitrary cut off for fuzzy string matching\n", + "cut_off = 80\n", + "#Read input files\n", + "\n", + "# loop through and do seperately for each province \n", + "# let's test it on one province again first. AB\n", + "\n", + "\n", + "provinces = ['AB', 'BC', 'MB', 'NB', 'NT', 'NS', 'ON', 'PE', 'QC', 'SK']\n", + "# provinces = ['AB', 'BC', 'MB', 'NB', 'NT', 'NS', 'PE', 'QC', 'SK']\n", + "# provinces = ['SK']\n", + "# provinces = ['AB', 'BC', 'MB', 'QC']\n", + "\n", + "sample_size_set = 1000000\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-02T18:10:05.793742Z", + "iopub.status.busy": "2022-09-02T18:10:05.793482Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AB\n", + "rows to match: 62804\n", + "ODA addresses: 1776750\n" + ] + } + ], + "source": [ + "# for province_code in provinces:\n", + "# file_location = \"https://www150.statcan.gc.ca/n1/pub/46-26-0001/2021001/ODA_\" + province_code + \"_v1.zip\"\n", + "\n", + "# for each province, subset the correct bit of formatted for df\n", + "# get the correct file for DF\n", + "# save it to a unique file name\n", + "\n", + "# SAM TO ADD \n", + "# (1) some way to check for the city - there might be lots of main streets.\n", + "# (2) set a higher cutoff for streets with a number in them, probably 90\n", + "# like 17th av (since it matches closely with 16th av)\n", + "\n", + "\n", + "df_all = pd.DataFrame()\n", + "\n", + "for province_code in provinces:\n", + " \n", + " t1 = time.time()\n", + " \n", + " print(province_code)\n", + "\n", + " # df=pd.read_csv(input_dir+database)\n", + " df = pd.read_csv('data/formatted.csv', low_memory=False)\n", + "\n", + " # test \n", + " df = df[df['province'] == province_code]\n", + "\n", + " # drop any entries without a street number\n", + " df = df.dropna(subset=['street_no'])\n", + " \n", + " print('rows to match: ', len(df))\n", + "\n", + " #read in openadress file\n", + " # DF=pd.read_csv(input_dir+addresses)\n", + " \n", + " \n", + " if (province_code == 'QC'):\n", + " ocd_file = \"data/oda-addresses/ODA_\" + province_code + \"_v1_formatted.csv\"\n", + " else:\n", + " ocd_file = \"data/oda-addresses/ODA_\" + province_code + \"_v1.csv\"\n", + "\n", + " DF=pd.read_csv(ocd_file, low_memory=False)\n", + " #drop any entries without a street number\n", + " DF=DF.dropna(subset=['street_no'])\n", + " \n", + " \n", + "\n", + "\n", + " #force street numbers to be integers then strings (pandas converts to float if there are empty entries)\n", + " DF[\"street_no\"] = DF[\"street_no\"].astype('int', errors='ignore').astype('str')\n", + " df[\"street_no\"] = pd.to_numeric(df[\"street_no\"], errors='coerce').fillna(0).astype(np.int64)\n", + " df[\"street_no\"] = df[\"street_no\"].astype('int', errors='ignore').astype('str')\n", + "\n", + "\n", + " # FOR TESTING, remove duplicates\n", + " \n", + "\n", + " d1 = len(df)\n", + " \n", + " # we now do deduplication in another stage\n", + "# if (province_code == 'QC'):\n", + "# df = df.drop_duplicates(subset=['street_no','formatted_fr'])\n", + "# else:\n", + "# df = df.drop_duplicates(subset=['street_no','formatted_en'])\n", + " \n", + " d2 = len(df)\n", + " \n", + "# print('rows after deduplication: ', d2)\n", + " ######\n", + " \n", + " print('ODA addresses:', len(DF))\n", + " \n", + " # FOR TESTING take a sample\n", + "# sample_size = len(df)\n", + " \n", + " sample_size = sample_size_set\n", + " if (len(df) > sample_size):\n", + " df = df.sample(sample_size)\n", + " else:\n", + " sample_size = len(df)\n", + "\n", + " num = list(df[\"street_no\"])\n", + " street = []\n", + " \n", + " \n", + " #remove accents from input dataframe\n", + " \n", + " if (province_code == 'QC'):\n", + " for i in df.formatted_fr.astype('str'):\n", + " street.append(unidecode.unidecode(i))\n", + " else:\n", + " for i in df.formatted_en.astype('str'):\n", + " street.append(unidecode.unidecode(i))\n", + " \n", + "\n", + " n = len(num)\n", + " \n", + " # create empty columns that will be added from oda to new dataset\n", + " MATCHES_r = [0]*n\n", + "\n", + " ratio = [0]*n\n", + "\n", + " x = [0]*n\n", + " y = [0]*n\n", + " \n", + " csdname_oda = [0]*n\n", + " provider_oda = [0]*n\n", + " city_pcs_oda = [0]*n\n", + "\n", + "\n", + "\n", + " #loop through main list\n", + " for i in range(n):\n", + " number = num[i]\n", + " \n", + "# print('street number: ', number)\n", + "\n", + " #restrict to only consider entries with a matching street number\n", + " \n", + " # SAM EDIT try instead to find near matches for street number? within one or two\n", + " # is that acceptable accuracy?\n", + " DF_temp = DF.loc[DF[\"street_no\"] == number]\n", + " \n", + "# print(len(DF_temp))\n", + "\n", + " #remove accents from address database, and restrict to unique names (avoid repetitions)\n", + " STREET=[]\n", + " \n", + " \n", + " for j in DF_temp[\"street\"].unique().astype('str'):\n", + " STREET.append(unidecode.unidecode(j))\t\n", + "\n", + " \n", + "\n", + " #process reduced address list with fuzzywuzzy\n", + "\n", + "\n", + " addr1 = street[i]\n", + "# print('search: ', addr1)\n", + " if STREET==[]: #this means the street number isn't in the address list, so obviously no match\n", + " #do nothing\n", + " r=0\n", + " best=''\n", + " else:\t\t\n", + " bests = process.extract(addr1, STREET, scorer=fuzz.ratio)\n", + " # \t\tprint(bests)\n", + " #The print statement below is to determine how much 'better' the best match is than the 2nd best\n", + " #\t\tif len(bests)>1:\t\n", + " #\t\t\tprint((bests[0])[1]-(bests[1])[1])\n", + "\n", + " #bests is a list of tuples, of the form (\"street name\", ratio) \n", + " b0 = bests[0]\n", + "\n", + " r = b0[1]\n", + " best = b0[0]\n", + " ratio[i] = r\n", + " MATCHES_r[i] = best\n", + " #This is where we determine if we found an address match\n", + " #We consider a match if the 'best' match is significantly better than the 2nd best, AND that the best is also good (>70, semi-arbitrary cut-off).\n", + " #assume directions match until we find they don't\n", + " DIR_MATCH = True\n", + " RAT_MATCH = False\n", + " if r > cut_off:\n", + " if r == 100: #perfect string match\n", + " RAT_MATCH = True\n", + " else:\n", + " check_list = pd.Series([addr1,best])\t\t\t\t\t\t\n", + " #check to see if direction exists and matches\n", + " DIR_MATCH = DirectionCheck(check_list)\n", + " #check to see if the street name is a number and that if so it isn't a mismatch\n", + " NUM_MATCH = NameIsNumber(check_list)\n", + " if (DIR_MATCH == True) and (NUM_MATCH == True):\n", + " if len(bests) > 1:\n", + " r1 = (bests[1])[1]\n", + "# print('second best: ', (bests[1])[0])\n", + " if (r-r1) > 10: #clearly better than 2nd option\n", + " RAT_MATCH = True\n", + "\n", + "\n", + " else: #not clearly better than second option\n", + " RAT_MATCH = False\n", + "\n", + "\n", + " else: #Only one option, and score above 70\n", + " RAT_MATCH=True\n", + " else:\n", + " RAT_MATCH =False\n", + " else: #Best option ratio cut_off].count()\n", + " percent_matches = (100 * no_matches / sample_size)\n", + " print('matches (n = ', sample_size, ', r = ', cut_off, '): ', percent_matches, '%')\n", + " \n", + " output_filename = 'output-' + province_code + '.csv'\n", + " df.to_csv(output_filename, index=False)\n", + "\n", + " t2 = time.time()\n", + " print('time taken: ', str(round(t2-t1, 2)), '\\n')\n", + " \n", + "# df_all = df_all.append(df)\n", + " df_all = pd.concat([df_all, df])\n", + "\n", + " \n", + "\n", + "# df_all.to_csv(\"output_all.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2022-08-16T14:53:26.880095Z", + "iopub.status.busy": "2022-08-16T14:53:26.878963Z", + "iopub.status.idle": "2022-08-16T14:53:26.888025Z", + "shell.execute_reply": "2022-08-16T14:53:26.887162Z", + "shell.execute_reply.started": "2022-08-16T14:53:26.880056Z" + } + }, + "outputs": [], + "source": [ + "# for each province print\n", + "# size of dataframe\n", + "# how many were not geocoded\n", + "# number of oda addresses\n", + "# how many with matches found\n", + "# how long did it take to compute\n", + " # if ages, then message every batch of 100\n", + " \n", + "df_all.to_csv(\"output_all.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "execution": { + "iopub.execute_input": "2022-09-01T14:14:24.039509Z", + "iopub.status.busy": "2022-09-01T14:14:24.039248Z", + "iopub.status.idle": "2022-09-01T14:14:24.050227Z", + "shell.execute_reply": "2022-09-01T14:14:24.049144Z", + "shell.execute_reply.started": "2022-09-01T14:14:24.039480Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "df['street_name'].isna().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/scripts/Businesses/5-Geocoding/4-address-match.py b/scripts/Businesses/5-Geocoding/4-address-match.py new file mode 100644 index 00000000..5f32031a --- /dev/null +++ b/scripts/Businesses/5-Geocoding/4-address-match.py @@ -0,0 +1,310 @@ +# This finds address matches between files by looking for exact matches on street number and 'fuzzy' matches on street name +# the goal is to use Open Addresses files to assign geocoordinates + +# I want to start by trying out the script on a sample. +# download ODA data for Alberta. + +# let's try matching even for those with geocodes +# then the results can be compared + +# conda install thefuzz +# conda install unidecode + +import pandas as pd +import numpy as np + +from thefuzz import fuzz +from thefuzz import process +import time +import sys +import unidecode #to remove accents +import re +from AddressFuncs import DirectionCheck, NameIsNumber +import sys + + +# input_dir='inputs/' +# output_dir='outputs/' + +# inputs +# formatted_on_test.csv +# ODA_MB_v1.csv + +# database=sys.argv[1] +# addresses=sys.argv[2] +# output=sys.argv[3] + +# t1=time.time() + + +#This is a semi-arbitrary cut off for fuzzy string matching +cut_off = 80 +#Read input files + +# loop through and do seperately for each province +# let's test it on one province again first. AB + + +provinces = ['AB', 'BC', 'MB', 'NB', 'NT', 'NS', 'ON', 'PE', 'QC', 'SK'] +# provinces = ['AB', 'BC', 'MB', 'NB', 'NT', 'NS', 'PE', 'QC', 'SK'] +# provinces = ['SK'] +# provinces = ['AB', 'BC', 'MB', 'QC'] + +sample_size_set = 1000000 + +# for province_code in provinces: +# file_location = "https://www150.statcan.gc.ca/n1/pub/46-26-0001/2021001/ODA_" + province_code + "_v1.zip" + +# for each province, subset the correct bit of formatted for df +# get the correct file for DF +# save it to a unique file name + +# SAM TO ADD +# (1) some way to check for the city - there might be lots of main streets. +# (2) set a higher cutoff for streets with a number in them, probably 90 +# like 17th av (since it matches closely with 16th av) + + +df_all = pd.DataFrame() + +for province_code in provinces: + + t1 = time.time() + + print(province_code) + + # df=pd.read_csv(input_dir+database) + df = pd.read_csv('data/formatted.csv', low_memory=False) + + # test + df = df[df['province'] == province_code] + + # drop any entries without a street number + df = df.dropna(subset=['street_no']) + + print('rows to match: ', len(df)) + + #read in openadress file + # DF=pd.read_csv(input_dir+addresses) + + + if (province_code == 'QC'): + ocd_file = "data/oda-addresses/ODA_" + province_code + "_v1_formatted.csv" + else: + ocd_file = "data/oda-addresses/ODA_" + province_code + "_v1.csv" + + DF=pd.read_csv(ocd_file, low_memory=False) + #drop any entries without a street number + DF=DF.dropna(subset=['street_no']) + + + + + #force street numbers to be integers then strings (pandas converts to float if there are empty entries) + DF["street_no"] = DF["street_no"].astype('int', errors='ignore').astype('str') + df["street_no"] = pd.to_numeric(df["street_no"], errors='coerce').fillna(0).astype(np.int64) + df["street_no"] = df["street_no"].astype('int', errors='ignore').astype('str') + + + # FOR TESTING, remove duplicates + + + d1 = len(df) + + # we now do deduplication in another stage +# if (province_code == 'QC'): +# df = df.drop_duplicates(subset=['street_no','formatted_fr']) +# else: +# df = df.drop_duplicates(subset=['street_no','formatted_en']) + + d2 = len(df) + +# print('rows after deduplication: ', d2) + ###### + + print('ODA addresses:', len(DF)) + + # FOR TESTING take a sample +# sample_size = len(df) + + sample_size = sample_size_set + if (len(df) > sample_size): + df = df.sample(sample_size) + else: + sample_size = len(df) + + num = list(df["street_no"]) + street = [] + + + #remove accents from input dataframe + + if (province_code == 'QC'): + for i in df.formatted_fr.astype('str'): + street.append(unidecode.unidecode(i)) + else: + for i in df.formatted_en.astype('str'): + street.append(unidecode.unidecode(i)) + + + n = len(num) + + # create empty columns that will be added from oda to new dataset + MATCHES_r = [0]*n + + ratio = [0]*n + + x = [0]*n + y = [0]*n + + csdname_oda = [0]*n + provider_oda = [0]*n + city_pcs_oda = [0]*n + + + + #loop through main list + for i in range(n): + number = num[i] + +# print('street number: ', number) + + #restrict to only consider entries with a matching street number + + # SAM EDIT try instead to find near matches for street number? within one or two + # is that acceptable accuracy? + DF_temp = DF.loc[DF["street_no"] == number] + +# print(len(DF_temp)) + + #remove accents from address database, and restrict to unique names (avoid repetitions) + STREET=[] + + + for j in DF_temp["street"].unique().astype('str'): + STREET.append(unidecode.unidecode(j)) + + + + #process reduced address list with fuzzywuzzy + + + addr1 = street[i] +# print('search: ', addr1) + if STREET==[]: #this means the street number isn't in the address list, so obviously no match + #do nothing + r=0 + best='' + else: + bests = process.extract(addr1, STREET, scorer=fuzz.ratio) + # print(bests) + #The print statement below is to determine how much 'better' the best match is than the 2nd best + # if len(bests)>1: + # print((bests[0])[1]-(bests[1])[1]) + + #bests is a list of tuples, of the form ("street name", ratio) + b0 = bests[0] + + r = b0[1] + best = b0[0] + ratio[i] = r + MATCHES_r[i] = best + #This is where we determine if we found an address match + #We consider a match if the 'best' match is significantly better than the 2nd best, AND that the best is also good (>70, semi-arbitrary cut-off). + #assume directions match until we find they don't + DIR_MATCH = True + RAT_MATCH = False + if r > cut_off: + if r == 100: #perfect string match + RAT_MATCH = True + else: + check_list = pd.Series([addr1,best]) + #check to see if direction exists and matches + DIR_MATCH = DirectionCheck(check_list) + #check to see if the street name is a number and that if so it isn't a mismatch + NUM_MATCH = NameIsNumber(check_list) + if (DIR_MATCH == True) and (NUM_MATCH == True): + if len(bests) > 1: + r1 = (bests[1])[1] +# print('second best: ', (bests[1])[0]) + if (r-r1) > 10: #clearly better than 2nd option + RAT_MATCH = True + + + else: #not clearly better than second option + RAT_MATCH = False + + + else: #Only one option, and score above 70 + RAT_MATCH=True + else: + RAT_MATCH =False + else: #Best option ratio cut_off].count() + percent_matches = (100 * no_matches / sample_size) + print('matches (n = ', sample_size, ', r = ', cut_off, '): ', percent_matches, '%') + + output_filename = 'output-' + province_code + '.csv' + df.to_csv(output_filename, index=False) + + t2 = time.time() + print('time taken: ', str(round(t2-t1, 2)), '\n') + +# df_all = df_all.append(df) + df_all = pd.concat([df_all, df]) + + + +# df_all.to_csv("output_all.csv", index=False) + +# for each province print +# size of dataframe +# how many were not geocoded +# number of oda addresses +# how many with matches found +# how long did it take to compute + # if ages, then message every batch of 100 + +df_all.to_csv("output_all.csv", index=False) \ No newline at end of file diff --git a/scripts/Businesses/5-Geocoding/AddressFuncs.py b/scripts/Businesses/5-Geocoding/AddressFuncs.py new file mode 100644 index 00000000..e11559e0 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/AddressFuncs.py @@ -0,0 +1,40 @@ +import re +import pandas as pd + +directions=['e','w','n','s','ne','nw','se','sw','no','so','o'] + +#check if the streets end in directions, and if so, make sure they are the same +def DirectionCheck(X): + DIR_MATCH=True + for dirn in directions: + + expr=' '+dirn + check=X.str.endswith(expr) + + if check[0] != check[1]: + #directions don't match, break + DIR_MATCH=False + break + return DIR_MATCH + +#Check to see if the street name is a number (e.g., 93 av), and if so make sure they match +def NameIsNumber(X): + NUM_MATCH=True + x=re.search("^\d+[A-z]*",X[0]) #^: starts with, \d+: multicharacter number, [A-z]*: 0 or more letters + y=re.search("^\d+[A-z]*",X[1]) + + #possible cases: Only one of these is a number (no match), they are both the same number (match) or they are both not numbers (possible match, return True) + + if ((x==None) and (y!=None)) or ((x!=None) and (y==None)): + NUM_MATCH=False + elif (x==None) and (y==None): + NUM_MATCH=True + #if neither x or y are 'None', then they are number addresses, so we can check for a match + elif (x.group()==y.group()): + NUM_MATCH=True + else: + NUM_MATCH=False + + return NUM_MATCH + + diff --git a/scripts/Businesses/5-Geocoding/Address_Format_Funcs.py b/scripts/Businesses/5-Geocoding/Address_Format_Funcs.py new file mode 100644 index 00000000..747afd69 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/Address_Format_Funcs.py @@ -0,0 +1,180 @@ +import pandas as pd +import re + + +long_sub_en={'avenue':'av', + 'boulevard':'blvd', + 'by-pass':'bypass', + + 'circle':'cir', + 'circuit':'circt', + 'concession':'conc', + 'court':'cour', + 'crescent':'cres', + 'corners':'crnrs', + 'crossing':'cross', + 'crossroad':'crossrd', + 'court':'crt', + 'diversion':'divers', + 'drive':'dr', + 'esplanada':'espl', + 'estates':'estate', + 'expressway':'expy', + 'extension':'exten', + 'freeway':'fwy', + 'gardens':'gdns', + 'harbour':'harbr', + 'grounds':'grnds', + 'highlands':'hghlds', + 'heights':'hts', + 'highway':'hwy', + 'laneway':'lanewy', + 'lookout':'lkout', + 'limits':'lmts', + 'mountain':'mtn', + 'orchard':'orch', + 'passage':'pass', + 'park':'pk', + 'parkway':'pky', + 'place':'pl', + 'plateau':'plat', + 'promenade':'prom', + 'point':'pt', + 'pathway':'ptway', + 'plateau':'plat', + 'private':'pvt', + 'promenade':'prom', + 'road':'rd', + 'range':'rg', + 'route':'rte', + 'rightofway':'rtofwy', + 'section':'sectn', + 'sideroad':'siderd', + 'square':'sq', + 'street':'st', + 'subdivision':'subdiv', + 'terrace':'terr', + 'townline':'tline', + 'tournabout':'trnabt', + 'village':'villge' + } + +dirs_en={'east':'e', + 'west':'w', + 'north':'n', + 'south':'s', + 'northeast':'ne', + 'north-east':'ne', + 'northwest':'nw', + 'north-west':'nw', + 'southeast':'se', + 'south-east':'se', + 'southwest':'sw', + 'south-west':'sw' + } + +long_sub_fr={'autoroute':'aut', + 'avenue':'av', + 'boulevard':'boul', + 'barrage':'brge', + 'centre':'c', + 'carré':'car', + 'cul-de-sac':'cds', + 'chemin':'ch', + 'carrefour':'carref', + 'croissant':'crois', + 'échangeur':'éch', + 'esplanada':'espl', + 'impasse':'imp', + 'passage':'pass', + 'plateau':'plat', + 'promenade':'prom', + 'rond-point':'rdpt', + 'ruelle':'rle', + 'route':'rte', + 'sentier':'sent', + 'terrasse':'tsse', + } + + + +dirs_fr={'est':'e', + 'ouest':'o', + 'nord':'n', + 'sud':'s', + 'nordest':'ne', + 'nord-est':'ne', + 'nordouest':'no', + 'nord-ouest':'no', + 'sudest':'se', + 'sud-est':'se', + 'sudouest':'so', + 'sud-ouest':'so' + } + +def AddressClean_en(df,name_in, name_out): + dirs=dirs_en + long_sub=long_sub_en + #get rid of periods + df[name_out]=[x.replace('.','') for x in df[name_in].astype('str')] + #make all lower case + df[name_out]=df[name_out].str.lower() + + + #Loop through directions and shorten as required: + + for i,j in dirs.items(): + + #shorten directions only if they are the last word of the string + expr=r"\b"+re.escape(i)+r"$" + df[name_out]=df[name_out].replace(regex=expr,value=j) + #shorten directions if they are first word in string: + expr=r"^"+re.escape(i)+r"\b" + df[name_out]=df[name_out].replace(regex=expr,value=j) + + #Loop through road types and shorten as required: + ##FOR ENGLISH + + for i,j in long_sub.items(): + + #shorten street types if they are last word: + expr=r"\b"+re.escape(i)+r"$" + df[name_out]=df[name_out].replace(regex=expr,value=j) + + #shorten street types if the last word is 'e','n','s',or 'w', and the matched expression immediately precedes it + for longdir,shortdir in dirs.items(): + expr=r"\b"+re.escape(i)+" "+re.escape(shortdir)+r"$" + sub=j+" "+shortdir + df[name_out]=df[name_out].replace(regex=expr,value=sub) + + return df + + +##FOR FRENCH +def AddressClean_fr(df, name_in, name_out): + + dirs=dirs_fr + long_sub=long_sub_fr + + #get rid of periods + df[name_out]=[x.replace('.','') for x in df[name_in].astype('str')] + + #make all lower case + df[name_out]=df[name_out].str.lower() + + for i,j in dirs.items(): + + #shorten directions only if they are the last word of the string + expr=r"\b"+re.escape(i)+r"$" + df[name_out]=df[name_out].replace(regex=expr,value=j) + + + for i,j in long_sub.items(): + + #shorten street types if they are first word in string: + expr=r"^"+re.escape(i)+r"\b" + df[name_out]=df[name_out].replace(regex=expr,value=j) + + return df + + diff --git a/scripts/Businesses/5-Geocoding/Link_Addresses_fuzzy.py b/scripts/Businesses/5-Geocoding/Link_Addresses_fuzzy.py new file mode 100644 index 00000000..9a492f82 --- /dev/null +++ b/scripts/Businesses/5-Geocoding/Link_Addresses_fuzzy.py @@ -0,0 +1,161 @@ + +#This finds address matches between files by looking for exact matches on street number and 'fuzzy' matches on street name +#the goal is to use Open Addresses files to assign geocoordinates + +import pandas as pd + +from fuzzywuzzy import fuzz +from fuzzywuzzy import process +import time +import sys +import unidecode #to remove accents +import re +from AddressFuncs import DirectionCheck, NameIsNumber +import sys + +input_dir='data/TESTING/inputs/' +output_dir='data/TESTING/outputs/' + +database=sys.argv[1] +addresses=sys.argv[2] +output=sys.argv[3] + + +t1=time.time() + + +#This is a semi-arbitrary cut off for fuzzy string matching +cut_off=70 +#Read input files + + +df=pd.read_csv(input_dir+database) + +#drop any entries without a street number +df=df.dropna(subset=['street_no']) + +#read in openadress file +DF=pd.read_csv(input_dir+addresses) +#drop any entries without a street number +DF=DF.dropna(subset=['NUMBER']) + +#force street numbers to be integers then strings (pandas converts to float if there are empty entries) +df["street_no"]=df["street_no"].astype('int', errors='ignore').astype('str') +DF["NUMBER"]=DF["NUMBER"].astype('int', errors='ignore').astype('str') + +#FOR TESTING, remove duplicates + +df=df.drop_duplicates(subset=['street_no','street_name']) +###### + +num=list(df["street_no"]) +street=[] + +#remove accents from input dataframe +for i in df.street_name.astype('str'): + street.append(unidecode.unidecode(i)) + +n=len(num) +MATCHES_r=[0]*n + +ratio=[0]*n + +x=[0]*n +y=[0]*n + + + + +#loop through main list +for i in range(n): + number=num[i] + + #restrict to only consider entries with a matching street number + DF_temp=DF.loc[DF["NUMBER"]==number] + + #remove accents from address database, and restrict to unique names (avoid repetitions) + STREET=[] + for j in DF_temp["STREET"].unique().astype('str'): + STREET.append(unidecode.unidecode(j)) + + + + #process reduced address list with fuzzywuzzy + + + addr1=street[i] + if STREET==[]: #this means the street number isn't in the address list, so obviously no match + #do nothing + r=0 + best='' + else: + bests=process.extract(addr1,STREET,scorer=fuzz.ratio) + print(bests) + #The print statement below is to determine how much 'better' the best match is than the 2nd best +# if len(bests)>1: +# print((bests[0])[1]-(bests[1])[1]) + + #bests is a list of tuples, of the form ("street name", ratio) + b0=bests[0] + + r=b0[1] + best=b0[0] + ratio[i]=r + MATCHES_r[i]=best + #This is where we determine if we found an address match + #We consider a match if the 'best' match is significantly better than the 2nd best, AND that the best is also good (>70, semi-arbitrary cut-off). + #assume directions match until we find they don't + DIR_MATCH=True + RAT_MATCH=False + if r>cut_off: + if r==100: #perfect string match + RAT_MATCH=True + else: + check_list=pd.Series([addr1,best]) + #check to see if direction exists and matches + DIR_MATCH=DirectionCheck(check_list) + #check to see if the street name is a number and that if so it isn't a mismatch + NUM_MATCH=NameIsNumber(check_list) + if (DIR_MATCH==True) and (NUM_MATCH==True): + if len(bests)>1: + r1=(bests[1])[1] + if (r-r1)>10: #clearly better than 2nd option + RAT_MATCH=True + + + else: #not clearly better than second option + RAT_MATCH=False + + + else: #Only one option, and score above 70 + RAT_MATCH=True + else: + RAT_MATCH =False + else: #Best option ratio business_name -PROPOSED_BUSINESS -> business_sector -LICENSE_NUMBER -> licence_number -UNIT -> unit -STREET_NUMBER -> street_no -STREET_NAME -> street_name -BUSINESS_NUMBER -> telephone -DATE_ISSUED -> date_established - ------------------------ -There are 22 unmapped columns: -ACTIVE -APPLICATION_DATE -APPROVAL_DATE -CEASED_DATE -DATE_EXPIRED -HOME_OCCUPATION -OFF_STREET_STALLS -RESIDENT -ROLL_NUMBER -START_DATE -TEMPORARY_LICENSE -dLONGLEGAL_1 -dLONGLEGAL_2 -dLONGLEGAL_3 -dLONGLEGAL_4 -dLONGLEGAL_5 -dLONGLEGAL_6 -dSHORTLEGAL_1 -dSHORTLEGAL_2 -dSHORTLEGAL_3 -dSHORTLEGAL_4 -dSHORTLEGAL_5 - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [2] AB_Calgary_Business_Licences.csv: - -6 out of 9 columns were mapped: -TRADENAME -> business_name -LICENCETYPES -> licence_type -latitude -> latitude -longitude -> longitude -ADDRESS -> full_address -JOBCREATED -> date_established - ------------------------ -There are 3 unmapped columns: -COMDISTNM -JOBSTATUSDESC -Point - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [3] AB_Chestermere_Businesses.csv: - -7 out of 19 columns were mapped: -name -> business_name -factype -> business_sector -lat -> latitude -lon -> longitude -fulladdr -> full_address -agencyurl -> business_website -pocphone -> telephone - ------------------------ -There are 12 unmapped columns: -CreationDate -Delivery -EditDate -GlobalID -OBJECTID -agencytype -comments -facilityid -geometry -municipality -operhours -phone - ------------------------ -There are 2 unknown variables: -x -> x -y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [4] AB_Edmonton_Business_Licences.csv: - -6 out of 16 columns were mapped: -Trade Name -> business_name -Category -> business_sector -Licence Number -> licence_number -Latitude -> latitude -Longitude -> longitude -Address -> full_address - ------------------------ -There are 10 unmapped columns: -Business Improvement Area -Count -Expiry Date -Geometry Point -Issue Date -Licence Status -Location -Neighbourhood -Neighbourhood ID -Ward - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [5] AB_Strathcona_Business_Directory.csv: - -10 out of 17 columns were mapped: -Name -> business_name -Sector -> business_sector -Industry -> business_subsector -Group -> business_description -NAICS_Code -> primary_NAICS -Lat -> latitude -Long -> longitude -Address -> full_address -Website -> business_website -Phone -> telephone - ------------------------ -There are 7 unmapped columns: -BusSize -ChamberOC -Curr_Oper -Descrip -OwnType -SquareFeet -the_geom - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [6] BC_Burnaby_Business_Licences.csv: - -7 out of 20 columns were mapped: -TRADE_NAME -> business_name -ACCOUNT_NAME -> account_name -LICENCE_NUMBER -> licence_number -LICENCE_TYPE_NAME -> licence_type -UNIT -> unit -HOUSE -> street_no -STREET -> street_name - ------------------------ -There are 13 unmapped columns: -COVERS_FROM -COVERS_TO -GEO_ID -LEGACY_LICENCE_NUMBER -LEGAL_TYPE -LGLLOT_PROPNUM -LICENCE_STATUS -OBJECTID -PARENT_PROPNUM -PROPERTY_NUMBER -geometry -lat -lon - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [7] BC_Chilliwack_Business_Licences.csv: - -4 out of 5 columns were mapped: -TRADE_NAME -> business_name -LICENSE_DESCRIPTION -> business_sector -ADDRESS -> full_address -PHONE -> telephone - ------------------------ -There are 1 unmapped columns: -GISLINK - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [8] BC_Indigenous_Business_Listings.csv: - -16 out of 24 columns were mapped: -Business Name -> business_name -Industry Sector -> business_sector -Type -> business_subsector -Description -> business_description -Latitude -> latitude -Longitude -> longitude -Address -> full_address -Mailing Address -> mailing_address -City -> city -Postal Code -> postal_code -Web Site -> business_website -Email -> email -Phone -> telephone -Fax -> fax -Number of Employees -> total_no_employees -Year Formed -> date_established - ------------------------ -There are 8 unmapped columns: -Contact Title -Facebook -Indigenous Ownership -Keywords -Primary Contact -Region -Twitter -When Updated - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [9] BC_Kelowna_Business_Licence.csv: - -5 out of 8 columns were mapped: -NAME -> business_name -TYPE_DESCRIPTION -> business_sector -BUSINESS_DESC -> business_description -LICENCE_ACCOUNT_NUMBER -> licence_number -LICENSE_LOCATION -> full_address - ------------------------ -There are 3 unmapped columns: -OBJECTID -SHAPE -TYPE_CODE - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [10] BC_Langley_Business_Licences.csv: - -15 out of 27 columns were mapped: -Business_Name -> business_name -Category_Desc -> business_sector -Licence_Desc -> business_subsector -NAICS_Primary -> primary_NAICS -NAICS_Primary_Desc -> NAICS_descr -Latitude -> latitude -Longitude -> longitude -Mailing_Address -> mailing_address -Civic_Unit -> unit -Civic_House -> street_no -Civic_Street -> street_name -Phone -> telephone -FullTime_Employees -> no_full_time -PartTime_Employees -> no_part_time -Seasonal_Employees -> no_seasonal - ------------------------ -There are 12 unmapped columns: -Approved_Date -Category -CommunityName -Detail -Detail_Desc -FID -GISLink -Permitted_Use -Permitted_Use_Desc -PropertyNumber -X -Y - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [11] BC_Liquor_licences.csv: - -7 out of 9 columns were mapped: -establishment name -> business_name -licence number -> licence_number -licence type -> licence_type -location address line 1 -> full_address -location address line 2 -> full_address_2 -location address city -> city -location postal code -> postal_code - ------------------------ -There are 2 unmapped columns: -capacity -licence subtype - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [12] BC_Maple_Ridge_Business_Licences.csv: - -12 out of 20 columns were mapped: -BusinessName -> business_name -BusinessType -> business_sector -BusinessSubType -> business_subsector -LicenceCategory -> licence_type -lat -> latitude -lon -> longitude -Unit -> unit -House -> street_no -Street -> street_name -PostalCode -> postal_code -WebsiteAddress -> business_website -Phone1 -> telephone - ------------------------ -There are 8 unmapped columns: -BusinessDescription -BusinessID -IssueDate -Keywords -OBJECTID -Phone1Description -SHAPE -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [13] BC_Nanaimo_Business_Licences.csv: - -12 out of 18 columns were mapped: -TradeName -> business_name -BusinessDescription -> business_sector -LEGAL_ID -> business_id_no -Licence -> licence_number -NAICSCategory -> primary_NAICS -NAICSDetail -> secondary_NAICS -EDO_NAICS_Desc -> NAICS_descr -Latitude -> latitude -Longitude -> longitude -CivicAddressUnit -> unit -CivicAddressHouse -> street_no -CivicAddressStreet -> street_name - ------------------------ -There are 6 unmapped columns: -CivicAddressCity -CivicAddressProvince -GISLINK -NAICSCategoryDescription -NAICSDetailDescription -approval_type_date - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [14] BC_New_Westminster_Business_Licences.csv: - -6 out of 16 columns were mapped: -BUSINESS_NAME -> business_name -LICENCE -> licence_number -NAICS_CODE -> primary_NAICS -NAICS_DESCRIPTION -> NAICS_descr -CIVIC_ADDRESS -> full_address -YEAR_OPENED -> date_established - ------------------------ -There are 10 unmapped columns: -APPLICATION_DATE -APPROVED_DATE -IMBL -LICENCEE_NAME -LICENCE_STATE -MAILING_ADDRESS -NWID -ObjectId -PROPERTY_NUMBER -RESIDENT_STATUS - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [15] BC_New_Westminster_Business_Licences_(Childcare).csv: - -6 out of 16 columns were mapped: -BUSINESS_NAME -> business_name -LICENCE -> licence_number -NAICS_CODE -> primary_NAICS -NAICS_DESCRIPTION -> NAICS_descr -CIVIC_ADDRESS -> full_address -YEAR_OPENED -> date_established - ------------------------ -There are 10 unmapped columns: -APPLICATION_DATE -APPROVED_DATE -IMBL -LICENCEE_NAME -LICENCE_STATE -MAILING_ADDRESS -NWID -ObjectId -PROPERTY_NUMBER -RESIDENT_STATUS - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [16] BC_New_Westminster_Business_Licences_(Intermunicipal).csv: - -6 out of 16 columns were mapped: -BUSINESS_NAME -> business_name -LICENCE -> licence_number -NAICS_CODE -> primary_NAICS -NAICS_DESCRIPTION -> NAICS_descr -CIVIC_ADDRESS -> full_address -YEAR_OPENED -> date_established - ------------------------ -There are 10 unmapped columns: -APPLICATION_DATE -APPROVED_DATE -IMBL -LICENCEE_NAME -LICENCE_STATE -MAILING_ADDRESS -NWID -ObjectId -PROPERTY_NUMBER -RESIDENT_STATUS - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [17] BC_New_Westminster_Business_Licences_(New_this_Year).csv: - -6 out of 16 columns were mapped: -BUSINESS_NAME -> business_name -LICENCE -> licence_number -NAICS_CODE -> primary_NAICS -NAICS_DESCRIPTION -> NAICS_descr -CIVIC_ADDRESS -> full_address -YEAR_OPENED -> date_established - ------------------------ -There are 10 unmapped columns: -APPLICATION_DATE -APPROVED_DATE -IMBL -LICENCEE_NAME -LICENCE_STATE -MAILING_ADDRESS -NWID -ObjectId -PROPERTY_NUMBER -RESIDENT_STATUS - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [18] BC_New_Westminster_Business_Licences_(Nonresidents).csv: - -6 out of 16 columns were mapped: -BUSINESS_NAME -> business_name -LICENCE -> licence_number -NAICS_CODE -> primary_NAICS -NAICS_DESCRIPTION -> NAICS_descr -CIVIC_ADDRESS -> full_address -YEAR_OPENED -> date_established - ------------------------ -There are 10 unmapped columns: -APPLICATION_DATE -APPROVED_DATE -IMBL -LICENCEE_NAME -LICENCE_STATE -MAILING_ADDRESS -NWID -ObjectId -PROPERTY_NUMBER -RESIDENT_STATUS - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [19] BC_New_Westminster_Business_Licences_(Residents).csv: - -6 out of 15 columns were mapped: -BUSINESS_NAME -> business_name -LICENCE -> licence_number -NAICS_CODE -> primary_NAICS -NAICS_DESCRIPTION -> NAICS_descr -CIVIC_ADDRESS -> full_address -YEAR_OPENED -> date_established - ------------------------ -There are 9 unmapped columns: -APPLICATION_DATE -APPROVED_DATE -IMBL -LICENCEE_NAME -LICENCE_STATE -MAILING_ADDRESS -NWID -ObjectId -RESIDENT_STATUS - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [20] BC_Port_Moody_Business_Directory.csv: - -11 out of 16 columns were mapped: -Business_Name -> business_name -Business_Category -> business_sector -Business_Description -> business_subsector -lat -> latitude -lon -> longitude -X_LONG -> x -Y_LAT -> y -Address -> full_address -Website_ -> business_website -Email -> email -Phone_ -> telephone - ------------------------ -There are 5 unmapped columns: -Coordinates -OBJECTID -SHAPE__Area -SHAPE__Length -geometry - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [21] BC_Prince_George_Business_Licence.csv: - -7 out of 10 columns were mapped: -TradeName -> business_name -LicenceCategory -> business_sector -LicenceDesc -> business_subsector -LicenceNumber -> licence_number -Unit -> unit -Address -> street_no -StreeName -> street_name - ------------------------ -There are 3 unmapped columns: -DateFrom -DateTo -ESRI_OID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [22] BC_Richmond_Based_Businesses.csv: - -9 out of 9 columns were mapped: -BusinessName -> business_name -BusinessType -> business_sector -BusinessDescription -> business_subsector -Naics -> primary_NAICS -NaicsDescription -> NAICS_descr -Address -> full_address -Phone -> telephone -FullTime -> no_full_time -PartTime -> no_part_time - ------------------------ -There are 0 unmapped columns: - ------------------------ -There are 0 unknown variables: - - Flagging messages: - - -======================================================== - -Now viewing summary of [23] BC_Squamish_Business_Licence_Annual_2021.csv: - -10 out of 19 columns were mapped: -Business_Name -> business_name -Licence_Type -> business_sector -Licence_Description -> business_description -Business_Licence -> licence_number -Licence_Type -> licence_type -NAICS -> primary_NAICS -NAICS_Description -> NAICS_descr -lat -> latitude -lon -> longitude -Business_Location -> full_address -Date_Opened -> date_established - ------------------------ -There are 9 unmapped columns: -GIS_ID -Licence_Code -Licence_Status -NAICS_Sector -Neighbourhood -NonResident -OBJECTID -Zoning -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [24] BC_Surrey_Business_Licences.csv: - -9 out of 10 columns were mapped: -Business Name -> business_name -Products or Services -> business_sector -Latitude -> latitude -Longitude -> longitude -Unit -> unit -House Number -> street_no -Road -> street_name -Postal Code -> postal_code -Phone -> telephone - ------------------------ -There are 1 unmapped columns: -Town Centre - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [25] BC_Vancouver_Business_Licences.csv: - -13 out of 27 columns were mapped: -BusinessName -> business_name -BusinessSubType -> business_sector -BusinessType -> business_subsector -LicenceNumber -> licence_number -lat -> latitude -long -> longitude -Unit -> unit -House -> street_no -Street -> street_name -City -> city -Province -> province -PostalCode -> postal_code -NumberofEmployees -> total_no_employees - ------------------------ -There are 14 unmapped columns: -BusinessTradeName -Country -ExpiredDate -ExtractDate -FOLDERYEAR -FeePaid -Geom -IssuedDate -LicenceRSN -LicenceRevisionNumber -LocalArea -Status -UnitType -Unnamed: 0 - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [26] BC_Victoria_Business_Licences.csv: - -12 out of 18 columns were mapped: -TradeName -> business_name -Category -> business_sector -Description -> business_description -LicenceNo -> licence_number -LAT -> latitude -LONG -> longitude -X -> x -Y -> y -FullAddress -> full_address -Unit -> unit -House -> street_no -Street -> street_name - ------------------------ -There are 6 unmapped columns: -Expires -IssuedDate -LicenseFee -Neighbourhood -OBJECTID -gislink - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [27] BC_Wineries.csv: - -4 out of 4 columns were mapped: -NAME -> business_name -ADDRESS -> full_address -CITY -> city -POSTALCODE -> postal_code - ------------------------ -There are 0 unmapped columns: - ------------------------ -There are 0 unknown variables: - - Flagging messages: - - -======================================================== - -Now viewing summary of [28] Indigenous_Business_Directory.csv: - -14 out of 18 columns were mapped: -Company Operating Name -> business_name -Company Description -> business_description -Company ID -> business_id_no -Primary Industry NAICS Code -> primary_NAICS -Alternate NAICS Codes -> secondary_NAICS -Address 1 -> full_address -Address 2 -> full_address_2 -City -> city -Province -> province -Postal Code -> postal_code -URL -> business_website -Email -> email -Phone Number -> telephone -Fax Number -> fax - ------------------------ -There are 4 unmapped columns: -Company Legal Name -GSIN Codes -Profile Link -Value of Contracts - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [29] MB_Indigenous_AFOA.csv: - -10 out of 10 columns were mapped: -name -> business_name -unit -> unit -street_number -> street_no -street_name -> street_name -city -> city -province -> province -postal_code -> postal_code -email -> email -phone -> telephone -fax -> fax - ------------------------ -There are 0 unmapped columns: - ------------------------ -There are 0 unknown variables: - - Flagging messages: - - -======================================================== - -Now viewing summary of [30] NB_Moncton_Grocery_Stores.csv: - -5 out of 9 columns were mapped: -Name -> business_name -Comment -> business_sector -lat -> latitude -lon -> longitude -Address -> full_address - ------------------------ -There are 4 unmapped columns: -Category -Jurisdiction -OBJECTID -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [31] NB_Moncton_Ph_Pharmacies.csv: - -6 out of 9 columns were mapped: -Name -> business_name -Type -> business_sector -lat -> latitude -lon -> longitude -Address -> full_address -Phone -> telephone - ------------------------ -There are 3 unmapped columns: -FID -Manager -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [32] NB_Saint_John_Grocery_Stores.csv: - -6 out of 11 columns were mapped: -Name -> business_name -lat -> latitude -lon -> longitude -Address -> full_address -Website -> business_website -Telephone -> telephone - ------------------------ -There are 5 unmapped columns: -Adresse -Classification -GlobalID -OBJECTID -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [33] NT_Yellowknife_Business_Directory.csv: - -7 out of 9 columns were mapped: -BUSINESSNAME -> business_name -BUSINESSTYPE -> business_sector -MUNICIPAL ADDRESS -> unit -MUNICIPAL ADDRESS2 -> street_no -MUNICIPAL ADDRESS3 -> street_name -EMAILADDRESS -> email -PHONE -> telephone - ------------------------ -There are 2 unmapped columns: -Unnamed: 0 -dROLLNMBR - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [34] NU_Indigenous_Business.csv: - -2 out of 4 columns were mapped: -Name -> business_name -Community -> city - ------------------------ -There are 2 unmapped columns: -Effective Date -Region - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [35] ON_Brampton_Business_Directory.csv: - -17 out of 47 columns were mapped: -COMPANY_NAME -> business_name -PRODUCT_DESC -> business_sector -NAICS_DETAIL -> primary_NAICS -lat -> latitude -lon -> longitude -BUSINESS_FULL_ADDRESS -> full_address -UNIT -> unit -STREET_NUM -> street_no -STREET_NAME -> street_name -STREET_DIRECTION -> street_direction -STREET_TYPE -> street_type -POSTAL_CODE -> postal_code -WEBURL -> business_website -PHONE -> telephone -FAX -> fax -TOTAL_EMPLOYEE -> total_no_employees -DATE_EST_IN_CITY -> date_established - ------------------------ -There are 30 unmapped columns: -CITY -CREATED_BY -CREATE_DATE -EXPORTS -EXPORT_COUNTRY1 -EXPORT_COUNTRY2 -EXPORT_COUNTRY3 -EXPORT_PERCENTAGE -FACEBOOK -GFA_SQUARE_FEET -GFA_SQUARE_METER -GLOBALID -HEAD_OFFICE_LOCATION -INSTAGRAM -LINKEDIN -NAIC_2 -NAIC_3 -NAIC_4 -NAIC_6 -OBJECTID -OPERATIONAL -PROVINCE -SHIFTS -SHIFT_NUMBER -STARTED_IN_CITY -TWITTER -UPDATED_BY -UPDATE_DATE -YOUTUBE -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [36] ON_Caledon_Business_Directory.csv: - -16 out of 25 columns were mapped: -Name -> business_name -Bus_NAICS -> primary_NAICS -NAICS_2 -> secondary_NAICS -NAICS2desc -> NAICS_descr -Latitude -> latitude -Longitude -> longitude -X -> x -Y -> y -Address -> full_address -Unit -> unit -PostalCode -> postal_code -Website -> business_website -Email -> email -Telephone -> telephone -Fax -> fax -EmplRange -> total_no_employees - ------------------------ -There are 9 unmapped columns: -DataNotes -Facebook -GlobalID -Instagram -LinkedIn -MUN -OBJECTID -OtherSocial -Twitter - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [37] ON_Cambridge_Business_Directory.csv: - -19 out of 36 columns were mapped: -COMPANY_NAME -> business_name -PRIMARY_NAICS_SECTOR -> business_sector -PROFILE -> business_description -ID -> business_id_no -PRIMARY_NAICS -> primary_NAICS -SECONDARY_NAICS -> secondary_NAICS -PRIMARY_NAICS_DESCRIPTION -> NAICS_descr -lat -> latitude -lon -> longitude -UNIT -> unit -STREET_NUMBER -> street_no -STREET_NAME -> street_name -POSTAL_CODE -> postal_code -WEBSITE -> business_website -EMAIL -> email -PHONE -> telephone -TOLL_FREE -> toll_free_telephone -TOTAL_EMPLOYEES -> total_no_employees -YEAR_ESTABLISHED_ORIGINALLY -> date_established - ------------------------ -There are 17 unmapped columns: -BUSINESS_PARKBIA -DOWNTOWN -DOWNTOWN_PLANNING_DISTRICT -EXPORTING -FIRST_NAME_1 -FIRST_NAME_2 -GlobalID -IN_CIP -LAST_NAME_1 -LAST_NAME_2 -NAME_SUFFIX -OBJECTID -SPACE_SIZE_SQFT -THE -TITLE_1 -TITLE_2 -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [38] ON_Durham_Business_Directory.csv: - -17 out of 31 columns were mapped: -Business_Name -> business_name -Business_Description -> business_description -Business_Id -> business_id_no -NAICSCode -> primary_NAICS -NAICSCode_Desc -> NAICS_descr -lat -> latitude -lon -> longitude -Unit_Number -> unit -Street_Number -> street_no -Street_Name -> street_name -Street_Direction -> street_direction -Street_Type -> street_type -City -> city -Site_Postal_Code -> postal_code -Web_Address -> business_website -Telephone_Number -> telephone -Fax_Number -> fax - ------------------------ -There are 14 unmapped columns: -Created_Date -Geo_X -Geo_Y -Mailing_Address1 -Mailing_Address2 -Mailing_City -Mailing_Country -Mailing_Postal_Code -Mailing_Province -Municipality -OBJECTID -Province -Updated_Date -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [39] ON_Greater_Sudbury_Business_Licences.csv: - -4 out of 7 columns were mapped: -BUSINESS -> business_name -CATEGORY -> business_sector -VENDORID -> business_id_no -WORK_PHONE_NO -> telephone - ------------------------ -There are 3 unmapped columns: -LICENSE_PLATE -LIC_ISSUE_DATE -VENDORNAME - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [40] ON_Hamilton_Licenced_Basic_Food_Shops.csv: - -5 out of 7 columns were mapped: -BUSINESS_NAME -> business_name -SUB_DESCRIPTION -> business_sector -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [41] ON_Hamilton_Licenced_Food_Establishments.csv: - -5 out of 7 columns were mapped: -BUSINESS_NAME -> business_name -SUB_DESCRIPTION -> business_sector -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [42] ON_Hamilton_Licenced_Kennels_and_Pet_Shops.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [43] ON_Hamilton_Licenced_Lodging_Houses.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [44] ON_Hamilton_Licenced_Places_of_Amusement.csv: - -5 out of 7 columns were mapped: -BUSINESS_NAME -> business_name -SUB_DESCRIPTION -> business_sector -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [45] ON_Hamilton_Licenced_Public_Garages.csv: - -5 out of 7 columns were mapped: -BUSINESS_NAME -> business_name -SUB_DESCRIPTION -> business_sector -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [46] ON_Hamilton_Licenced_Public_Halls.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [47] ON_Hamilton_Licenced_Residential_Care_Facilities.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [48] ON_Hamilton_Licenced_Salvage_Yards.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [49] ON_Hamilton_Licenced_Second_Hand_Shops.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [50] ON_Kitchener_Business_Directory.csv: - -19 out of 36 columns were mapped: -COMPANY_NAME -> business_name -PRIMARY_NAICS_SECTOR -> business_sector -PROFILE -> business_description -ID -> business_id_no -PRIMARY_NAICS -> primary_NAICS -SECONDARY_NAICS -> secondary_NAICS -PRIMARY_NAICS_DESCRIPTION -> NAICS_descr -lat -> latitude -lon -> longitude -UNIT -> unit -STREET_NUMBER -> street_no -STREET_NAME -> street_name -POSTAL_CODE -> postal_code -WEBSITE -> business_website -EMAIL -> email -PHONE -> telephone -TOLL_FREE -> toll_free_telephone -TOTAL_EMPLOYEES -> total_no_employees -YEAR_ESTABLISHED_ORIGINALLY -> date_established - ------------------------ -There are 17 unmapped columns: -BUSINESS_PARKBIA -DOWNTOWN -DOWNTOWN_PLANNING_DISTRICT -EXPORTING -FIRST_NAME_1 -FIRST_NAME_2 -GlobalID -IN_CIP -LAST_NAME_1 -LAST_NAME_2 -NAME_SUFFIX -OBJECTID -SPACE_SIZE_SQFT -THE -TITLE_1 -TITLE_2 -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - Flagging messages: -- NOT_ALL_COLS_MAPPED -- UNK_VARS_EXIST - - -======================================================== - -Now viewing summary of [51] ON_Mississauga_Business_Directory.csv: - -16 out of 22 columns were mapped: -Name -> business_name -NAICSTitle -> business_sector -ID -> business_id_no -NAICSCode -> primary_NAICS -NAICSDescr -> NAICS_descr -Address -> full_address -UnitNo -> unit -StreetNo -> street_no -StreetName -> street_name -PostalCode -> postal_code -WebAddress -> business_website -EMail -> email -Phone -> telephone -TollFree -> toll_free_telephone -Fax -> fax -EmplRange -> total_no_employees - ------------------------ -There are 6 unmapped columns: -BldgNo -CHArea -FID -Modified -PIN -Ward - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [52] ON_Ottawa_Cultural_Businesses.csv: - -10 out of 17 columns were mapped: -NAME -> business_name -SUB -> business_sector -ID -> business_id_no -ADDRESS -> full_address -CITY -> city -PROVINCE -> province -PC -> postal_code -WEB_1 -> business_website -EMAIL -> email -PHONE -> telephone - ------------------------ -There are 7 unmapped columns: -ADDRES_FR -DATE_MOD -IMAGE -NAME_FR -OBJECTID -PC_ADDRESS -WEB_2 - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [53] ON_Ottawa_Street_Food_Vendors.csv: - -5 out of 11 columns were mapped: -Trade_Name -> business_name -Concept -> business_description -Y -> latitude -X -> longitude -Website -> business_website - ------------------------ -There are 6 unmapped columns: -FID -FID2 -Facebook -Licence_ -Location -Twitter - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [54] ON_Pickering_Business_Directory.csv: - -19 out of 31 columns were mapped: -Business_Name -> business_name -Business_Description -> business_sector -Business_Id -> business_id_no -NAICSCode -> primary_NAICS -NAICSCode_Desc -> NAICS_descr -lat -> latitude -lon -> longitude -Geo_X -> x -Geo_Y -> y -Unit_Number -> unit -Street_Number -> street_no -Street_Name -> street_name -Street_Direction -> street_direction -Street_Type -> street_type -City -> city -Site_Postal_Code -> postal_code -Web_Address -> business_website -Telephone_Number -> telephone -Fax_Number -> fax - ------------------------ -There are 12 unmapped columns: -Created_Date -Mailing_Address1 -Mailing_Address2 -Mailing_City -Mailing_Country -Mailing_Postal_Code -Mailing_Province -Municipality -OBJECTID -Province -Updated_Date -geometry - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [55] ON_Toronto_Business_Licences.csv: - -7 out of 16 columns were mapped: -Operating Name -> business_name -Category -> business_sector -Licence No. -> licence_number -Licence Address Line 1 -> full_address -Licence Address Line 2 -> city -Licence Address Line 3 -> postal_code -Business Phone -> telephone - ------------------------ -There are 9 unmapped columns: -Business Phone Ext. -Cancel Date -Client Name -Conditions -Endorsements -Free Form Conditions Line 1 -Free Form Conditions Line 2 -Issued -Plate No. - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [56] ON_Welland_Business_Directory.csv: - -15 out of 21 columns were mapped: -Company -> business_name -SectorDescription -> business_sector -ID -> business_id_no -Address -> full_address -City -> city -PC -> postal_code -WebSite -> business_website -Email -> email -Telephone -> telephone -Extension -> telephone_extension -Fax -> fax -FullTime -> no_full_time -PartTime -> no_part_time -Seasonal -> no_seasonal -Estab -> date_established - ------------------------ -There are 6 unmapped columns: -LanguageEN -LanguageFr -LanguageOTHER -OBJECTID -Prov -Telephone2 - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [57] ON_York_Region_Business_Directory.csv: - -22 out of 52 columns were mapped: -NAME -> business_name -BUS_ACTIVITY_DESC -> business_description -BUSINESSID -> business_id_no -PRIM_NAICS -> primary_NAICS -SEC_NAICS -> secondary_NAICS -PRIM_NAICS_DESC -> NAICS_descr -X_Coord -> x -Y_Coord -> y -FULL_ADDRESS -> full_address -MAIL_FULL_ADDRESS -> mailing_address -UNIT_NUM -> unit -STREET_NUM -> street_no -STREET_NAME -> street_name -STREET_DIR -> street_direction -STREET_TYPE -> street_type -POST_CODE -> postal_code -WEBSITE -> business_website -GEN_BUS_EMAIL -> email -PHONE_NO -> telephone -TOLLFREE_NO -> toll_free_telephone -FAX_NO -> fax -EMPLOYEE_RANGE -> total_no_employees - ------------------------ -There are 30 unmapped columns: -CAN_HEADOFFICE -COMMUNITY -COUNTRY -HEADOFFICECOUNTRY -HEADOFFICEPROVSTATE -LAST_SURVEYED -LAST_UPDATED -MAIL_COMMUNITY -MAIL_COUNTRY -MAIL_MUNICIPALITY -MAIL_POBOX -MAIL_POST_CODE -MAIL_PROVINCE -MAIL_STREET_DIR -MAIL_STREET_NAME -MAIL_STREET_NUM -MAIL_STREET_TYPE -MAIL_UNIT_NUM -MANUFACTURER -MUNICIPALITY -PARENTNAME -PHONE_EXT -PRIM_BUS_CLUSTER -PROVINCE -SEC_BUS_CLUSTER -SEC_NAICS_DESC -TOLLFREE_EXT -TRAFFIC_ZONE -UPDATEMETHOD -YR_CURRENTLOC - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [58] ON_oebd.csv: - -5 out of 6 columns were mapped: -Company Name -> business_name -Sectors -> business_sector -Description -> business_description -Location -> city -Website -> business_website - ------------------------ -There are 1 unmapped columns: -Contact - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [59] QC_Etablissements.csv: - -7 out of 17 columns were mapped: -NOM_ETAB -> business_name -DESC_ACT_ECON_ETAB -> business_sector -DESC_ACT_ECON_ETAB2 -> business_subsector -NEQ -> business_id_no -LIGN1_ADR -> full_address -LIGN2_ADR -> city -LIGN4_ADR -> postal_code - ------------------------ -There are 10 unmapped columns: -COD_ACT_ECON -COD_ACT_ECON2 -IND_DISP -IND_ETAB_PRINC -IND_SALON_BRONZ -IND_VENTE_TABAC_DETL -LIGN3_ADR -NO_ACT_ECON_ETAB -NO_ACT_ECON_ETAB2 -NO_SUF_ETAB - ------------------------ -There are 0 unknown variables: - - Flagging messages: -- NOT_ALL_COLS_MAPPED - - -======================================================== - -Now viewing summary of [60] QC_Sherbrooke_Entreprises.csv: - -6 out of 6 columns were mapped: -entreprise -> business_name -scian_principal -> business_description -no_civique -> street_no -rue_local -> street_name -code_postal -> postal_code -entreprise_tel -> telephone - ------------------------ -There are 0 unmapped columns: - ------------------------ -There are 0 unknown variables: - - Flagging messages: - diff --git a/scripts/Businesses/OpenTabulate/mapping_summary_skye.txt b/scripts/Businesses/OpenTabulate/mapping_summary_skye.txt deleted file mode 100644 index 3c4c3eb6..00000000 --- a/scripts/Businesses/OpenTabulate/mapping_summary_skye.txt +++ /dev/null @@ -1,869 +0,0 @@ - -======================================================== - -Now viewing summary of [31] NB_Moncton_Pharmacies.csv: - -6 out of 10 columns were mapped: -Name -> business_name -Type -> business_sector -lat -> latitude -lon -> longitude -Address -> full_address -Phone -> telephone - ------------------------ -There are 4 unmapped columns: -FID -Manager -Unnamed: 0 -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - -======================================================== - -Now viewing summary of [32] NB_Saint_John_Grocery_Stores.csv: - -6 out of 12 columns were mapped: -Name -> business_name -lat -> latitude -lon -> longitude -Address -> full_address -Website -> business_website -Telephone -> telephone - ------------------------ -There are 6 unmapped columns: -Adresse -Classifica -GlobalID -OBJECTID -Unnamed: 0 -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - -======================================================== - -Now viewing summary of [33] NT_Yellowknife_Business_Directory.csv: - -7 out of 9 columns were mapped: -BUSINESSNAME -> business_name -BUSINESSTYPE -> business_sector -MUNICIPAL ADDRESS -> unit -MUNICIPAL ADDRESS2 -> street_no -MUNICIPAL ADDRESS3 -> street_name -EMAILADDRESS -> email -PHONE -> telephone - ------------------------ -There are 2 unmapped columns: -Unnamed: 0 -dROLLNMBR - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [34] NU_Indigenous_Business.csv: - -2 out of 4 columns were mapped: -Name -> business_name -Community -> city - ------------------------ -There are 2 unmapped columns: -Effective Date -Region - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [35] ON_Brampton_Business_Directory.csv: - -17 out of 48 columns were mapped: -COMPANY_NA -> business_name -PRODUCT_DE -> business_sector -NAICS_DETA -> primary_NAICS -lat -> latitude -lon -> longitude -BUSINESS_F -> full_address -UNIT -> unit -STREET_NUM -> street_no -STREET_NAM -> street_name -STREET_DIR -> street_direction -STREET_TYP -> street_type -POSTAL_COD -> postal_code -WEBURL -> business_website -PHONE -> telephone -FAX -> fax -TOTAL_EMPL -> total_no_employees -DATE_EST_I -> date_established - ------------------------ -There are 31 unmapped columns: -CITY -CREATED_BY -CREATE_DAT -EXPORTS -EXPORT_COU -EXPORT_C_1 -EXPORT_C_2 -EXPORT_PER -FACEBOOK -GFA_SQUARE -GFA_SQUA_1 -GLOBALID -HEAD_OFFIC -INSTAGRAM -LINKEDIN -NAIC_2 -NAIC_3 -NAIC_4 -NAIC_6 -OBJECTID -OPERATIONA -PROVINCE -SHIFTS -SHIFT_NUMB -STARTED_IN -TWITTER -UPDATED_BY -UPDATE_DAT -Unnamed: 0 -YOUTUBE -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - -======================================================== - -Now viewing summary of [36] ON_Caledon_Business_Directory.csv: - -16 out of 25 columns were mapped: -Name -> business_name -Bus_NAICS -> primary_NAICS -NAICS_2 -> secondary_NAICS -NAICS2desc -> NAICS_descr -Latitude -> latitude -Longitude -> longitude -X -> x -Y -> y -Address -> full_address -Unit -> unit -PostalCode -> postal_code -Website -> business_website -Email -> email -Telephone -> telephone -Fax -> fax -EmplRange -> total_no_employees - ------------------------ -There are 9 unmapped columns: -DataNotes -Facebook -GlobalID -Instagram -LinkedIn -MUN -OBJECTID -OtherSocial -Twitter - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [37] ON_Cambridge_Business_Directory.csv: - -19 out of 37 columns were mapped: -COMPANY_NA -> business_name -PRIMARY__1 -> business_sector -PRIMARY__2 -> business_subsector -PROFILE -> business_description -ID -> business_id_no -PRIMARY_NA -> primary_NAICS -SECONDARY_ -> secondary_NAICS -lat -> latitude -lon -> longitude -UNIT -> unit -STREET_NUM -> street_no -STREET_NAM -> street_name -POSTAL_COD -> postal_code -WEBSITE -> business_website -EMAIL -> email -PHONE -> telephone -TOLL_FREE -> toll_free_telephone -TOTAL_EMPL -> total_no_employees -YEAR_ESTAB -> date_established - ------------------------ -There are 18 unmapped columns: -BUSINESS_P -DOWNTOWN -DOWNTOWN_P -EXPORTING -FIRST_NAME -FIRST_NA_1 -GlobalID -IN_CIP -LAST_NAME_ -LAST_NAM_1 -NAME_SUFFI -OBJECTID -SPACE_SIZE -THE -TITLE_1 -TITLE_2 -Unnamed: 0 -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - -======================================================== - -Now viewing summary of [38] ON_Durham_Business_Directory.csv: - -17 out of 32 columns were mapped: -Business_N -> business_name -Business_D -> business_description -Business_I -> business_id_no -NAICSCode -> primary_NAICS -NAICSCode_ -> NAICS_descr -lat -> latitude -lon -> longitude -Unit_Numbe -> unit -Street_Num -> street_no -Street_Nam -> street_name -Street_Dir -> street_direction -Street_Typ -> street_type -City -> city -Site_Posta -> postal_code -Web_Addres -> business_website -Telephone_ -> telephone -Fax_Number -> fax - ------------------------ -There are 15 unmapped columns: -Created_Da -Geo_X -Geo_Y -Mailing_Ad -Mailing_Ci -Mailing_Co -Mailing_Po -Mailing_Pr -Mailing__1 -Municipali -OBJECTID -Province -Unnamed: 0 -Updated_Da -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - -======================================================== - -Now viewing summary of [39] ON_Greater_Sudbury_Business_Licences.csv: - -4 out of 7 columns were mapped: -BUSINESS -> business_name -CATEGORY -> business_sector -VENDORID -> business_id_no -WORK_PHONE_NO -> telephone - ------------------------ -There are 3 unmapped columns: -LICENSE_PLATE -LIC_ISSUE_DATE -VENDORNAME - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [40] ON_Hamilton_Licenced_Basic_Food_Shops.csv: - -5 out of 7 columns were mapped: -BUSINESS_NAME -> business_name -SUB_DESCRIPTION -> business_sector -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [41] ON_Hamilton_Licenced_Food_Establishments.csv: - -5 out of 7 columns were mapped: -BUSINESS_NAME -> business_name -SUB_DESCRIPTION -> business_sector -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [42] ON_Hamilton_Licenced_Kennels_and_Pet_Shops.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [43] ON_Hamilton_Licenced_Lodging_Houses.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [44] ON_Hamilton_Licenced_Places_of_Amusement.csv: - -5 out of 7 columns were mapped: -BUSINESS_NAME -> business_name -SUB_DESCRIPTION -> business_sector -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [45] ON_Hamilton_Licenced_Public_Garages.csv: - -5 out of 7 columns were mapped: -BUSINESS_NAME -> business_name -SUB_DESCRIPTION -> business_sector -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [46] ON_Hamilton_Licenced_Public_Halls.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [47] ON_Hamilton_Licenced_Residential_Care_Facilities.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [48] ON_Hamilton_Licenced_Salvage_Yards.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [49] ON_Hamilton_Licenced_Second_Hand_Shops.csv: - -4 out of 6 columns were mapped: -BUSINESS_NAME -> business_name -LICENSE_NUMBER -> licence_number -LICENSE_TYPE -> licence_type -BUSINESS_ADDRESS -> full_address - ------------------------ -There are 2 unmapped columns: -EXPIRY_DATE -OBJECTID - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [50] ON_Kitchener_Business_Directory.csv: - -19 out of 37 columns were mapped: -COMPANY_NA -> business_name -PRIMARY__1 -> business_sector -PRIMARY__2 -> business_subsector -PROFILE -> business_description -ID -> business_id_no -PRIMARY_NA -> primary_NAICS -SECONDARY_ -> secondary_NAICS -lat -> latitude -lon -> longitude -UNIT -> unit -STREET_NUM -> street_no -STREET_NAM -> street_name -POSTAL_COD -> postal_code -WEBSITE -> business_website -EMAIL -> email -PHONE -> telephone -TOLL_FREE -> toll_free_telephone -TOTAL_EMPL -> total_no_employees -YEAR_ESTAB -> date_established - ------------------------ -There are 18 unmapped columns: -BUSINESS_P -DOWNTOWN -DOWNTOWN_P -EXPORTING -FIRST_NAME -FIRST_NA_1 -GlobalID -IN_CIP -LAST_NAME_ -LAST_NAM_1 -NAME_SUFFI -OBJECTID -SPACE_SIZE -THE -TITLE_1 -TITLE_2 -Unnamed: 0 -geometry - ------------------------ -There are 2 unknown variables: -X -> x -Y -> y - - -======================================================== - -Now viewing summary of [51] ON_Mississauga_Business_Directory.csv: - -15 out of 22 columns were mapped: -Name -> business_name -NAICSTitle -> business_sector -ID -> business_id_no -NAICSCode -> primary_NAICS -NAICSDescr -> NAICS_descr -Address -> full_address -UnitNo -> unit -StreetNo -> street_no -StreetName -> street_name -PostalCode -> postal_code -WebAddress -> business_website -Phone -> telephone -TollFree -> toll_free_telephone -Fax -> fax -EmplRange -> total_no_employees - ------------------------ -There are 7 unmapped columns: -BldgNo -CHArea -EMail -FID -Modified -PIN -Ward - ------------------------ -There are 1 unknown variables: -Email -> email - - -======================================================== - -Now viewing summary of [52] ON_Ottawa_Cultural_Businesses.csv: - -10 out of 17 columns were mapped: -NAME -> business_name -SUB -> business_sector -ID -> business_id_no -ADDRESS -> full_address -CITY -> city -PROVINCE -> province -PC -> postal_code -WEB_1 -> business_website -EMAIL -> email -PHONE -> telephone - ------------------------ -There are 7 unmapped columns: -ADDRES_FR -DATE_MOD -IMAGE -NAME_FR -OBJECTID -PC_ADDRESS -WEB_2 - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [53] ON_Ottawa_Street_Food_Vendors.csv: - -5 out of 11 columns were mapped: -Trade_Name -> business_name -Concept -> business_description -Y -> latitude -X -> longitude -Website -> business_website - ------------------------ -There are 6 unmapped columns: -FID -FID2 -Facebook -Licence_ -Location -Twitter - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [54] ON_Pickering_Business_Directory.csv: - -19 out of 32 columns were mapped: -Business_N -> business_name -Business_D -> business_sector -Business_I -> business_id_no -NAICSCode -> primary_NAICS -NAICSCode_ -> NAICS_descr -lat -> latitude -lon -> longitude -Geo_X -> x -Geo_Y -> y -Unit_Numbe -> unit -Street_Num -> street_no -Street_Nam -> street_name -Street_Dir -> street_direction -Street_Typ -> street_type -City -> city -Site_Posta -> postal_code -Web_Addres -> business_website -Telephone_ -> telephone -Fax_Number -> fax - ------------------------ -There are 13 unmapped columns: -Created_Da -Mailing_Ad -Mailing_Ci -Mailing_Co -Mailing_Po -Mailing_Pr -Mailing__1 -Municipali -OBJECTID -Province -Unnamed: 0 -Updated_Da -geometry - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [55] ON_Toronto_Business_Licences.csv: - -7 out of 16 columns were mapped: -Operating Name -> business_name -Category -> business_sector -Licence No. -> licence_number -Licence Address Line 1 -> full_address -Licence Address Line 2 -> city -Licence Address Line 3 -> postal_code -Business Phone -> telephone - ------------------------ -There are 9 unmapped columns: -Business Phone Ext. -Cancel Date -Client Name -Conditions -Endorsements -Free Form Conditions Line 1 -Free Form Conditions Line 2 -Issued -Plate No. - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [56] ON_Welland_Business_Directory.csv: - -15 out of 21 columns were mapped: -Company -> business_name -SectorDescription -> business_sector -ID -> business_id_no -Address -> full_address -City -> city -PC -> postal_code -WebSite -> business_website -Email -> email -Telephone -> telephone -Extension -> telephone_extension -Fax -> fax -FullTime -> no_full_time -PartTime -> no_part_time -Seasonal -> no_seasonal -Estab -> date_established - ------------------------ -There are 6 unmapped columns: -LanguageEN -LanguageFr -LanguageOTHER -OBJECTID -Prov -Telephone2 - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [57] ON_York_Region_Business_Directory.csv: - -22 out of 52 columns were mapped: -NAME -> business_name -BUS_ACTIVITY_DESC -> business_description -BUSINESSID -> business_id_no -PRIM_NAICS -> primary_NAICS -SEC_NAICS -> secondary_NAICS -PRIM_NAICS_DESC -> NAICS_descr -X_Coord -> x -Y_Coord -> y -FULL_ADDRESS -> full_address -MAIL_FULL_ADDRESS -> mailing_address -UNIT_NUM -> unit -STREET_NUM -> street_no -STREET_NAME -> street_name -STREET_DIR -> street_direction -STREET_TYPE -> street_type -POST_CODE -> postal_code -WEBSITE -> business_website -GEN_BUS_EMAIL -> email -PHONE_NO -> telephone -TOLLFREE_NO -> toll_free_telephone -FAX_NO -> fax -EMPLOYEE_RANGE -> total_no_employees - ------------------------ -There are 30 unmapped columns: -CAN_HEADOFFICE -COMMUNITY -COUNTRY -HEADOFFICECOUNTRY -HEADOFFICEPROVSTATE -LAST_SURVEYED -LAST_UPDATED -MAIL_COMMUNITY -MAIL_COUNTRY -MAIL_MUNICIPALITY -MAIL_POBOX -MAIL_POST_CODE -MAIL_PROVINCE -MAIL_STREET_DIR -MAIL_STREET_NAME -MAIL_STREET_NUM -MAIL_STREET_TYPE -MAIL_UNIT_NUM -MANUFACTURER -MUNICIPALITY -PARENTNAME -PHONE_EXT -PRIM_BUS_CLUSTER -PROVINCE -SEC_BUS_CLUSTER -SEC_NAICS_DESC -TOLLFREE_EXT -TRAFFIC_ZONE -UPDATEMETHOD -YR_CURRENTLOC - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [58] ON_oebd.csv: - -5 out of 6 columns were mapped: -Company Name -> business_name -Sectors -> business_sector -Description -> business_description -Location -> city -Website -> business_website - ------------------------ -There are 1 unmapped columns: -Contact - ------------------------ -There are 0 unknown variables: - - -======================================================== - -Now viewing summary of [59] QC_Etablissements.csv: - -7 out of 17 columns were mapped: -NOM_ETAB -> business_name -DESC_ACT_ECON_ETAB -> business_sector -DESC_ACT_ECON_ETAB2 -> business_subsector -NEQ -> business_id_no -LIGN1_ADR -> full_address -LIGN2_ADR -> city -LIGN4_ADR -> postal_code - ------------------------ -There are 10 unmapped columns: -COD_ACT_ECON -COD_ACT_ECON2 -IND_DISP -IND_ETAB_PRINC -IND_SALON_BRONZ -IND_VENTE_TABAC_DETL -LIGN3_ADR -NO_ACT_ECON_ETAB -NO_ACT_ECON_ETAB2 -NO_SUF_ETAB - ------------------------ -There are 0 unknown variables: - diff --git a/scripts/Businesses/PreProcessing/preprocessing.ipynb b/scripts/Businesses/PreProcessing/preprocessing.ipynb deleted file mode 100644 index 1ac2bcc9..00000000 --- a/scripts/Businesses/PreProcessing/preprocessing.ipynb +++ /dev/null @@ -1,857 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "execution": { - "iopub.execute_input": "2022-05-19T22:34:04.068989Z", - "iopub.status.busy": "2022-05-19T22:34:04.068808Z", - "iopub.status.idle": "2022-05-19T22:34:04.072254Z", - "shell.execute_reply": "2022-05-19T22:34:04.071479Z", - "shell.execute_reply.started": "2022-05-19T22:34:04.068958Z" - }, - "tags": [] - }, - "outputs": [], - "source": [ - "import os\n", - "from pathlib import Path\n", - "import shutil\n", - "import pandas as pd\n", - "import glob\n", - "import geopandas as gpd\n", - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "execution": { - "iopub.execute_input": "2022-05-19T22:34:07.979627Z", - "iopub.status.busy": "2022-05-19T22:34:07.979352Z", - "iopub.status.idle": "2022-05-19T22:34:08.818584Z", - "shell.execute_reply": "2022-05-19T22:34:08.817590Z", - "shell.execute_reply.started": "2022-05-19T22:34:07.979601Z" - }, - "tags": [] - }, - "outputs": [], - "source": [ - "# First bring all raw files into processed. We do this because more files won't need any cleaning work, so this is quicker than moving them manually. \n", - "# Any files that require processing work will simply replace the raw files in the processed folder later\n", - "\n", - "src = '../1-PreProcessing/raw'\n", - "dst = '../1-PreProcessing/processed'\n", - "\n", - "if os.path.exists(dst):\n", - " shutil.rmtree(dst)\n", - " shutil.copytree(src, dst)\n", - " \n", - "files_in_directory = os.listdir(dst)\n", - "filtered_files = [file for file in files_in_directory if not file.endswith(\".csv\")]\n", - "for file in filtered_files:\n", - " try:\n", - " path_to_file = os.path.join(dst, file)\n", - " os.remove(path_to_file)\n", - " except:\n", - " pass" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "execution": { - "iopub.execute_input": "2022-05-19T22:34:11.877709Z", - "iopub.status.busy": "2022-05-19T22:34:11.877455Z", - "iopub.status.idle": "2022-05-19T22:34:31.491598Z", - "shell.execute_reply": "2022-05-19T22:34:31.490762Z", - "shell.execute_reply.started": "2022-05-19T22:34:11.877683Z" - }, - "tags": [] - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "BC_Port_Moody_Business_Directory\n", - "epsg:3857\n", - "epsg:4326\n", - "error with file above\n", - "BC_Burnaby_Business_Licences\n", - "epsg:4326\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "--------------------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "UNIT -> UNIT | 4\n", - "PROPERTY_N -> PROPERTY_NUMBER | 10\n", - "LICENCE_NU -> LICENCE_NUMBER | 10\n", - "TRADE_NAME -> TRADE_NAME | 10\n", - "LICENCE_TY -> LICENCE_TYPE_NAME | 10\n", - "COVERS_FRO -> COVERS_FROM | 10\n", - "COVERS_TO -> COVERS_TO | 9\n", - "ACCOUNT_NA -> ACCOUNT_NAME | 10\n", - "HOUSE -> HOUSE | 5\n", - "STREET -> STREET | 6\n", - "LEGACY_LIC -> LEGACY_LICENCE_NUMBER | 10\n", - "LEGAL_TYPE -> LEGAL_TYPE | 10\n", - "LICENCE_ST -> LICENCE_STATUS | 10\n", - "LGLLOT_PRO -> LGLLOT_PROPNUM | 10\n", - "GEO_ID -> GEO_ID | 6\n", - "PARENT_PRO -> PARENT_PROPNUM | 10\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "NB_Saint_John_Grocery_Stores\n", - "epsg:2953\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "-------------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "Name -> Name | 4\n", - "Address -> Address | 7\n", - "Adresse -> Adresse | 7\n", - "Telephone -> Telephone | 9\n", - "Website -> Website | 7\n", - "Classifica -> Classification | 10\n", - "GlobalID -> GlobalID | 8\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "AB_Chestermere_Businesses\n", - "epsg:4326\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "-----------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "facilityid -> facilityid | 10\n", - "name -> name | 4\n", - "factype -> factype | 7\n", - "fulladdr -> fulladdr | 8\n", - "municipali -> municipality | 10\n", - "agencytype -> agencytype | 10\n", - "phone -> phone | 5\n", - "agencyurl -> agencyurl | 9\n", - "operhours -> operhours | 9\n", - "pocphone -> pocphone | 8\n", - "comments -> comments | 8\n", - "CreationDa -> CreationDate | 10\n", - "EditDate -> EditDate | 8\n", - "Delivery -> Delivery | 8\n", - "GlobalID -> GlobalID | 8\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "BC_Squamish_Business_Licence_Annual_2021\n", - "epsg:26910\n", - "epsg:4326\n", - "\n", - "\n", - "gpd -> pd | shared_chars\n", - "------------------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "GIS_ID -> GIS_ID | 6\n", - "Business_L -> Business_Licence | 10\n", - "Business_N -> Business_Name | 10\n", - "Date_Opene -> Date_Opened | 10\n", - "Licence_St -> Licence_Status | 10\n", - "Licence_Ty -> Licence_Type | 10\n", - "Licence_De -> Licence_Description | 10\n", - "NAICS -> NAICS | 5\n", - "NAICS_Sect -> NAICS_Sector | 10\n", - "NAICS_Desc -> NAICS_Description | 10\n", - "NonResiden -> NonResident | 10\n", - "Zoning -> Zoning | 6\n", - "Neighbourh -> Neighbourhood | 10\n", - "Licence_Co -> Licence_Code | 10\n", - "Business_1 -> Business_Location | 9\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "ON_Cambridge_Business_Directory\n", - "epsg:26917\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "--------------------------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "COMPANY_NA -> COMPANY_NAME | 10\n", - "STREET_NUM -> STREET_NUMBER | 10\n", - "STREET_NAM -> STREET_NAME | 10\n", - "UNIT -> UNIT | 4\n", - "POSTAL_COD -> POSTAL_CODE | 10\n", - "BUSINESS_P -> BUSINESS_PARKBIA | 10\n", - "IN_CIP -> IN_CIP | 6\n", - "DOWNTOWN -> DOWNTOWN | 8\n", - "DOWNTOWN_P -> DOWNTOWN_PLANNING_DISTRICT | 10\n", - "SPACE_SIZE -> SPACE_SIZE_SQFT | 10\n", - "TOTAL_EMPL -> TOTAL_EMPLOYEES | 10\n", - "PROFILE -> PROFILE | 7\n", - "PRIMARY_NA -> PRIMARY_NAICS | 10\n", - "PRIMARY__1 -> PRIMARY_NAICS_SECTOR | 8\n", - "PRIMARY__2 -> PRIMARY_NAICS_DESCRIPTION | 8\n", - "SECONDARY_ -> SECONDARY_NAICS | 10\n", - "YEAR_ESTAB -> YEAR_ESTABLISHED_ORIGINALLY | 10\n", - "EXPORTING -> EXPORTING | 9\n", - "PHONE -> PHONE | 5\n", - "TOLL_FREE -> TOLL_FREE | 9\n", - "EMAIL -> EMAIL | 5\n", - "WEBSITE -> WEBSITE | 7\n", - "FIRST_NAME -> FIRST_NAME_1 | 10\n", - "LAST_NAME_ -> LAST_NAME_1 | 10\n", - "TITLE_1 -> TITLE_1 | 7\n", - "FIRST_NA_1 -> FIRST_NAME_2 | 8\n", - "LAST_NAM_1 -> LAST_NAME_2 | 8\n", - "TITLE_2 -> TITLE_2 | 7\n", - "ID -> ID | 2\n", - "THE -> THE | 3\n", - "NAME_SUFFI -> NAME_SUFFIX | 10\n", - "GlobalID -> GlobalID | 8\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "ON_Durham_Business_Directory\n", - "epsg:26917\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "-------------------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "Fax_Number -> Fax_Number | 10\n", - "City -> City | 4\n", - "Province -> Province | 8\n", - "Geo_X -> Geo_X | 5\n", - "Geo_Y -> Geo_Y | 5\n", - "Business_I -> Business_Id | 10\n", - "Business_N -> Business_Name | 10\n", - "Site_Posta -> Site_Postal_Code | 10\n", - "Created_Da -> Created_Date | 10\n", - "Updated_Da -> Updated_Date | 10\n", - "NAICSCode -> NAICSCode | 9\n", - "NAICSCode_ -> NAICSCode_Desc | 10\n", - "Telephone_ -> Telephone_Number | 10\n", - "Web_Addres -> Web_Address | 10\n", - "Mailing_Ad -> Mailing_Address1 | 10\n", - "Mailing__1 -> Mailing_Address2 | 8\n", - "Mailing_Ci -> Mailing_City | 10\n", - "Mailing_Pr -> Mailing_Province | 10\n", - "Mailing_Co -> Mailing_Country | 10\n", - "Mailing_Po -> Mailing_Postal_Code | 10\n", - "Unit_Numbe -> Unit_Number | 10\n", - "Business_D -> Business_Description | 10\n", - "Street_Num -> Street_Number | 10\n", - "Street_Nam -> Street_Name | 10\n", - "Street_Typ -> Street_Type | 10\n", - "Street_Dir -> Street_Direction | 10\n", - "Municipali -> Municipality | 10\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "ON_Brampton_Business_Directory\n", - "epsg:3857\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "--------------------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "COMPANY_NA -> COMPANY_NAME | 10\n", - "OPERATIONA -> OPERATIONAL | 10\n", - "STREET_NUM -> STREET_NUM | 10\n", - "STREET_NAM -> STREET_NAME | 10\n", - "STREET_TYP -> STREET_TYPE | 10\n", - "STREET_DIR -> STREET_DIRECTION | 10\n", - "UNIT -> UNIT | 4\n", - "BUSINESS_F -> BUSINESS_FULL_ADDRESS | 10\n", - "CITY -> CITY | 4\n", - "PROVINCE -> PROVINCE | 8\n", - "POSTAL_COD -> POSTAL_CODE | 10\n", - "PHONE -> PHONE | 5\n", - "FAX -> FAX | 3\n", - "WEBURL -> WEBURL | 6\n", - "DATE_EST_I -> DATE_EST_IN_CITY | 10\n", - "STARTED_IN -> STARTED_IN_CITY | 10\n", - "HEAD_OFFIC -> HEAD_OFFICE_LOCATION | 10\n", - "TOTAL_EMPL -> TOTAL_EMPLOYEE | 10\n", - "SHIFTS -> SHIFTS | 6\n", - "SHIFT_NUMB -> SHIFT_NUMBER | 10\n", - "GFA_SQUARE -> GFA_SQUARE_FEET | 10\n", - "GFA_SQUA_1 -> GFA_SQUARE_METER | 8\n", - "NAIC_2 -> NAIC_2 | 6\n", - "NAIC_3 -> NAIC_3 | 6\n", - "NAIC_4 -> NAIC_4 | 6\n", - "NAIC_6 -> NAIC_6 | 6\n", - "PRODUCT_DE -> PRODUCT_DESC | 10\n", - "EXPORTS -> EXPORTS | 7\n", - "EXPORT_PER -> EXPORT_PERCENTAGE | 10\n", - "EXPORT_COU -> EXPORT_COUNTRY1 | 10\n", - "EXPORT_C_1 -> EXPORT_COUNTRY2 | 8\n", - "EXPORT_C_2 -> EXPORT_COUNTRY3 | 8\n", - "UPDATE_DAT -> UPDATE_DATE | 10\n", - "UPDATED_BY -> UPDATED_BY | 10\n", - "NAICS_DETA -> NAICS_DETAIL | 10\n", - "CREATED_BY -> CREATED_BY | 10\n", - "CREATE_DAT -> CREATE_DATE | 10\n", - "FACEBOOK -> FACEBOOK | 8\n", - "TWITTER -> TWITTER | 7\n", - "LINKEDIN -> LINKEDIN | 8\n", - "YOUTUBE -> YOUTUBE | 7\n", - "INSTAGRAM -> INSTAGRAM | 9\n", - "GLOBALID -> GLOBALID | 8\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "ON_Pickering_Business_Directory\n", - "epsg:26917\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "-------------------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "Fax_Number -> Fax_Number | 10\n", - "City -> City | 4\n", - "Province -> Province | 8\n", - "Geo_X -> Geo_X | 5\n", - "Geo_Y -> Geo_Y | 5\n", - "Business_I -> Business_Id | 10\n", - "Business_N -> Business_Name | 10\n", - "Site_Posta -> Site_Postal_Code | 10\n", - "Created_Da -> Created_Date | 10\n", - "Updated_Da -> Updated_Date | 10\n", - "NAICSCode -> NAICSCode | 9\n", - "NAICSCode_ -> NAICSCode_Desc | 10\n", - "Telephone_ -> Telephone_Number | 10\n", - "Web_Addres -> Web_Address | 10\n", - "Mailing_Ad -> Mailing_Address1 | 10\n", - "Mailing__1 -> Mailing_Address2 | 8\n", - "Mailing_Ci -> Mailing_City | 10\n", - "Mailing_Pr -> Mailing_Province | 10\n", - "Mailing_Co -> Mailing_Country | 10\n", - "Mailing_Po -> Mailing_Postal_Code | 10\n", - "Unit_Numbe -> Unit_Number | 10\n", - "Business_D -> Business_Description | 10\n", - "Street_Num -> Street_Number | 10\n", - "Street_Nam -> Street_Name | 10\n", - "Street_Typ -> Street_Type | 10\n", - "Street_Dir -> Street_Direction | 10\n", - "Municipali -> Municipality | 10\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "NB_Moncton_Grocery_Stores\n", - "epsg:2953\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "-----------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "Name -> Name | 4\n", - "Address -> Address | 7\n", - "Category -> Category | 8\n", - "Jurisdicti -> Jurisdiction | 10\n", - "Comment -> Comment | 7\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "BC_Maple_Ridge_Business_Licences\n", - "epsg:26910\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "----------------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "BusinessID -> BusinessID | 10\n", - "Unit -> Unit | 4\n", - "House -> House | 5\n", - "Street -> Street | 6\n", - "PostalCode -> PostalCode | 10\n", - "BusinessNa -> BusinessName | 10\n", - "BusinessTy -> BusinessType | 10\n", - "BusinessSu -> BusinessSubType | 10\n", - "SHAPE -> SHAPE | 5\n", - "Phone1 -> Phone1 | 6\n", - "Keywords -> Keywords | 8\n", - "IssueDate -> IssueDate | 9\n", - "LicenceCat -> LicenceCategory | 10\n", - "WebsiteAdd -> WebsiteAddress | 10\n", - "Phone1Desc -> Phone1Description | 10\n", - "\n", - "Unused columns from csv added to gdf:\n", - "BusinessDescription\n", - "\n", - "ON_Kitchener_Business_Directory\n", - "epsg:26917\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "--------------------------------------------------------\n", - "OBJECTID -> OBJECTID | 8\n", - "COMPANY_NA -> COMPANY_NAME | 10\n", - "STREET_NUM -> STREET_NUMBER | 10\n", - "STREET_NAM -> STREET_NAME | 10\n", - "UNIT -> UNIT | 4\n", - "POSTAL_COD -> POSTAL_CODE | 10\n", - "BUSINESS_P -> BUSINESS_PARKBIA | 10\n", - "IN_CIP -> IN_CIP | 6\n", - "DOWNTOWN -> DOWNTOWN | 8\n", - "DOWNTOWN_P -> DOWNTOWN_PLANNING_DISTRICT | 10\n", - "SPACE_SIZE -> SPACE_SIZE_SQFT | 10\n", - "TOTAL_EMPL -> TOTAL_EMPLOYEES | 10\n", - "PROFILE -> PROFILE | 7\n", - "PRIMARY_NA -> PRIMARY_NAICS | 10\n", - "PRIMARY__1 -> PRIMARY_NAICS_SECTOR | 8\n", - "PRIMARY__2 -> PRIMARY_NAICS_DESCRIPTION | 8\n", - "SECONDARY_ -> SECONDARY_NAICS | 10\n", - "YEAR_ESTAB -> YEAR_ESTABLISHED_ORIGINALLY | 10\n", - "EXPORTING -> EXPORTING | 9\n", - "PHONE -> PHONE | 5\n", - "TOLL_FREE -> TOLL_FREE | 9\n", - "EMAIL -> EMAIL | 5\n", - "WEBSITE -> WEBSITE | 7\n", - "FIRST_NAME -> FIRST_NAME_1 | 10\n", - "LAST_NAME_ -> LAST_NAME_1 | 10\n", - "TITLE_1 -> TITLE_1 | 7\n", - "FIRST_NA_1 -> FIRST_NAME_2 | 8\n", - "LAST_NAM_1 -> LAST_NAME_2 | 8\n", - "TITLE_2 -> TITLE_2 | 7\n", - "ID -> ID | 2\n", - "THE -> THE | 3\n", - "NAME_SUFFI -> NAME_SUFFIX | 10\n", - "GlobalID -> GlobalID | 8\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "NB_Moncton_Ph_Pharmacies\n", - "epsg:2953\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "---------------------------------\n", - "FID -> FID | 3\n", - "Name -> Name | 4\n", - "Type -> Type | 4\n", - "Manager -> Manager | 7\n", - "Address -> Address | 7\n", - "Phone -> Phone | 5\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "BC_Port_Moody_Business_Directory\n", - "epsg:3857\n", - "epsg:4326\n", - "gpd -> pd | shared_chars\n", - "-------------------------------------------------\n", - "Business_C -> Business_Category | 10\n", - "Business_N -> Business_Name | 10\n", - "Business_D -> Business_Description | 10\n", - "Website_ -> Website_ | 8\n", - "Phone_ -> Phone_ | 6\n", - "Address -> Address | 7\n", - "Email -> Email | 5\n", - "Y_LAT -> Y_LAT | 5\n", - "X_LONG -> X_LONG | 6\n", - "Coordinate -> Coordinates | 10\n", - "OBJECTID -> OBJECTID | 8\n", - "SHAPE__Are -> SHAPE__Area | 10\n", - "SHAPE__Len -> SHAPE__Length | 10\n", - "\n", - "Unused columns from csv added to gdf:\n", - "\n", - "/home/jovyan/ODBiz/1-PreProcessing/process_shp_files.py:118: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", - "\n", - " city['lon'] = city.centroid.x\n", - "/home/jovyan/ODBiz/1-PreProcessing/process_shp_files.py:119: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", - "\n", - " city['lat'] = city.centroid.y\n" - ] - } - ], - "source": [ - "# Shapefile processing has been replaced with process_shp_files.py \n", - "# This script includes Port Moody!\n", - "import process_shp_files\n", - "process_shp_files.main()\n", - "\n", - "# # All shapefiles (except Port Moody)\n", - "\n", - "# import os\n", - "# for root, dirs, files in os.walk(\"../1-PreProcessing/raw/shapefiles\"):\n", - "# for file in files:\n", - "# if file.endswith(\".shp\"):\n", - "# try:\n", - "# head, tail = os.path.split(os.path.join(root, file))\n", - "# head = head.replace('shapefile', '')\n", - "# head = head.replace(\"/home/jovyan/ODBiz/1-PreProcessing/raw/shapefiles/\", '')\n", - "# head = head.replace(\"/\", '') \n", - "# tail = tail.replace('.shp', '')\n", - "# name = head + tail\n", - "# print(name)\n", - "\n", - "# fp = (os.path.join(root, file))\n", - "# city = gpd.read_file(fp)\n", - "# print(city.crs)\n", - "# city = city.to_crs(epsg=4326)\n", - "# print(city.crs)\n", - "# sub_city = city.head(500)\n", - "# city['lon'] = city.geometry.x\n", - "# city['lat'] = city.geometry.y\n", - "\n", - "# city.to_csv(\"../1-PreProcessing/raw/\"+name+\".csv\")\n", - "# city.to_csv(\"../1-PreProcessing/processed/\"+name+\".csv\")\n", - "\n", - "# except:\n", - "# print('error with file above')\n", - "# pass" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "execution": { - "iopub.execute_input": "2022-05-19T22:34:31.493089Z", - "iopub.status.busy": "2022-05-19T22:34:31.492881Z", - "iopub.status.idle": "2022-05-19T22:34:32.295234Z", - "shell.execute_reply": "2022-05-19T22:34:32.294498Z", - "shell.execute_reply.started": "2022-05-19T22:34:31.493065Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "epsg:3857\n", - "epsg:4326\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":14: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", - "\n", - " city['lon'] = city.centroid.x\n", - ":15: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", - "\n", - " city['lat'] = city.centroid.y\n" - ] - } - ], - "source": [ - "# # BC Port Moody Shapefile\n", - "\n", - "# fp = \"../1-PreProcessing/raw/shapefiles/BC_Port_Moody_shapefile/Business_Directory.shp\"\n", - "# name = \"port moody\"\n", - "\n", - "# city = gpd.read_file(fp)\n", - "\n", - "# print(city.crs)\n", - "# city = city.to_crs(epsg=4326)\n", - "# print(city.crs)\n", - "\n", - "# sub_city = city.head(500)\n", - "\n", - "# city['lon'] = city.centroid.x\n", - "# city['lat'] = city.centroid.y\n", - "\n", - "# #print(city.head)\n", - "\n", - "# city.to_csv(\"../1-PreProcessing/raw/BC_Port_Moody_Business_Directory.csv\")\n", - "# city.to_csv(\"../1-PreProcessing/processed/BC_Port_Moody_Business_Directory.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "execution": { - "iopub.execute_input": "2022-05-19T22:34:34.026681Z", - "iopub.status.busy": "2022-05-19T22:34:34.026411Z", - "iopub.status.idle": "2022-05-19T22:34:46.125761Z", - "shell.execute_reply": "2022-05-19T22:34:46.124800Z", - "shell.execute_reply.started": "2022-05-19T22:34:34.026653Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":3: DtypeWarning: Columns (13) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " df = pd.read_csv('../1-PreProcessing/raw/BC_Vancouver_Business_Licences.csv')\n" - ] - } - ], - "source": [ - "# BC vancouver lat/long\n", - "\n", - "df = pd.read_csv('../1-PreProcessing/raw/BC_Vancouver_Business_Licences.csv')\n", - "\n", - "def strip_point(x): \n", - " try:\n", - " t = x.strip(r'{\"\"coordinates\"\": [')\n", - " t = t.rstrip('], \"\"type\"\": \"\"Point\"\"}')\n", - " t = t.replace(',', '')\n", - " return t.split()\n", - " except:\n", - " return np.nan\n", - "\n", - "LONGS=[]\n", - "LATS=[]\n", - "for i in df[\"Geom\"]:\n", - " try:\n", - " LONGS.append(strip_point(i)[0])\n", - " LATS.append(strip_point(i)[1])\n", - " except:\n", - " LONGS.append(np.nan)\n", - " LATS.append(np.nan)\n", - "\n", - "df[\"long\"]=LONGS\n", - "df[\"lat\"]=LATS\n", - "\n", - "df.to_csv('../1-PreProcessing/processed/BC_Vancouver_Business_Licences.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "execution": { - "iopub.execute_input": "2022-05-19T22:34:46.127390Z", - "iopub.status.busy": "2022-05-19T22:34:46.127184Z", - "iopub.status.idle": "2022-05-19T22:34:46.350796Z", - "shell.execute_reply": "2022-05-19T22:34:46.350116Z", - "shell.execute_reply.started": "2022-05-19T22:34:46.127365Z" - }, - "tags": [] - }, - "outputs": [], - "source": [ - "# NT Yellowknife whitespaces and phone numbers\n", - "\n", - "df = pd.read_csv('../1-PreProcessing/raw/NT_Yellowknife_Business_Directory.csv')\n", - "\n", - "cols = ['BUSINESSNAME', 'MUNICIPAL ADDRESS3', 'BUSINESSTYPE', 'PHONE', 'EMAILADDRESS']\n", - "df[cols] = df[cols].apply(lambda x: x.str.strip())\n", - "\n", - "df['PHONE'] = df['PHONE'].str.extract(r'(\\d{3}[-\\.\\s]??\\d{3}[-\\.\\s]??\\d{4}|\\(\\d{3}\\)\\s*\\d{3}[-\\.\\s]??\\d{4}|\\d{3}[-\\.\\s]??\\d{4})')\n", - "\n", - "df.to_csv('../1-PreProcessing/processed/NT_Yellowknife_Business_Directory.csv')" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "execution": { - "iopub.execute_input": "2022-05-19T22:34:46.352182Z", - "iopub.status.busy": "2022-05-19T22:34:46.351998Z", - "iopub.status.idle": "2022-05-19T22:34:46.486451Z", - "shell.execute_reply": "2022-05-19T22:34:46.485691Z", - "shell.execute_reply.started": "2022-05-19T22:34:46.352158Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING, DELETED: Column19\n", - "Saving the newcsv to ../1-PreProcessing/processed/Indigenous_Business_Directory.csv ...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "0it [00:00, ?it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Saved newcsv to ../1-PreProcessing/processed/Indigenous_Business_Directory.csv\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "# Fix the cells with commas in them in the Indigenous_Business_Directory.csv file\n", - "\n", - "import csv\n", - "import tqdm\n", - "\n", - "# Define csv file path\n", - "in_file = '../1-PreProcessing/raw/Indigenous_Business_Directory.csv'\n", - "out_file = '../1-PreProcessing/processed/Indigenous_Business_Directory.csv'\n", - "\n", - "# Initialize a list that will be our new corrected csv\n", - "newcsv = []\n", - "\n", - "# Open a read only copy of the csv file\n", - "with open(in_file, mode = 'r', newline='', encoding='utf8') as csvfile:\n", - " csvreader = csv.reader(csvfile)\n", - "\n", - " # For each row in the csv...\n", - " i = 0\n", - " for row in csvreader:\n", - "\n", - " # For each cell in each row...\n", - " j = 0\n", - " for val in row:\n", - "\n", - " # If the known anomoly is found...\n", - " if '$25' in val:\n", - "\n", - " # Then perform the fixing operation\n", - " newval = ','.join(row[j:j+3]) # Concat the 3 cells that make up the sentence\n", - " del row[j:j+3] # Delete the 3 cells from the list\n", - " row.insert(j, newval) # Insert the concat'd value back into the list\n", - " j += 1\n", - "\n", - " # Append the row to the newcsv file\n", - " newcsv.append(row)\n", - "\n", - " # Delete the unnecessary 19th column\n", - " row_len = len(row)\n", - " if row_len == 19:\n", - "\n", - " # Give a warning message if non-empty values are deleted\n", - " if row[-1] != '':\n", - " print('WARNING, DELETED:', row[-1])\n", - "\n", - " # Delete extra column\n", - " del row[-1]\n", - "\n", - " i += 1\n", - "\n", - "# Delete the first row\n", - "del newcsv[0]\n", - "\n", - "# Delete that one empty row after the header row\n", - "del newcsv[1]\n", - "\n", - "# Save newcsv to a .csv file\n", - "with open(out_file, mode = 'w', newline='', encoding='utf-8') as f:\n", - " writer = csv.writer(f)\n", - " print(f'Saving the newcsv to {out_file} ...')\n", - " tqdm.tqdm(writer.writerows(newcsv))\n", - "print(f'Saved newcsv to {out_file}')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Updated /home/jovyan/ODBiz/1-PreProcessing/processed/AB_Banff_Business_Licences.csv\n" - ] - } - ], - "source": [ - "# Standardize the dates of the csvs with non-empty date_established fields using standardize_dates.py\n", - "\n", - "import standardize_dates\n", - "standardize_dates.main()" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": { - "execution": { - "iopub.execute_input": "2022-04-13T16:23:24.737783Z", - "iopub.status.busy": "2022-04-13T16:23:24.737290Z", - "iopub.status.idle": "2022-04-13T16:23:25.587691Z", - "shell.execute_reply": "2022-04-13T16:23:25.586959Z", - "shell.execute_reply.started": "2022-04-13T16:23:24.737738Z" - }, - "tags": [] - }, - "outputs": [], - "source": [ - "# transfer files directly from PreProcessing/processed to opentabulate/data/input\n", - "\n", - "src = '../1-PreProcessing/processed'\n", - "dst = '../2-OpenTabulate/data/input'\n", - "\n", - "if os.path.exists(dst):\n", - " shutil.rmtree(dst)\n", - " shutil.copytree(src, dst)" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": { - "execution": { - "iopub.execute_input": "2022-04-13T16:23:26.970934Z", - "iopub.status.busy": "2022-04-13T16:23:26.970602Z", - "iopub.status.idle": "2022-04-13T16:23:26.978405Z", - "shell.execute_reply": "2022-04-13T16:23:26.977479Z", - "shell.execute_reply.started": "2022-04-13T16:23:26.970904Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "73\n", - "73\n", - "73\n", - "0\n" - ] - } - ], - "source": [ - "raw = '../1-PreProcessing/raw'\n", - "pro = '../1-PreProcessing/processed'\n", - "input_ = '../2-OpenTabulate/data/input'\n", - "output_ = '../2-OpenTabulate/data/output'\n", - "print(len(os.listdir(raw)))\n", - "print(len(os.listdir(pro)))\n", - "print(len(os.listdir(input_)))\n", - "print(len(os.listdir(output_)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "name": "python3812jvsc74a57bd098b0a9b7b4eaaa670588a142fd0a9b87eaafe866f1db4228be72b4211d12040f", - "display_name": "Python 3.8.12 64-bit ('base': conda)" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} \ No newline at end of file diff --git a/scripts/Businesses/misc/weeklyBackups.py b/scripts/Businesses/misc/weeklyBackups.py new file mode 100644 index 00000000..665109d5 --- /dev/null +++ b/scripts/Businesses/misc/weeklyBackups.py @@ -0,0 +1,69 @@ +''' +Backups up .py and .ipynb files, except for exclusions. + +Will backup other files too if included. +''' + +import os +import shutil as su + +ODBiz_root = '/home/jovyan/ODBiz' +folders_to_backup = [ + '1-PreProcessing', + '2-OpenTabulate', + '3-Merging', + '4-Parsing', + '5-Geocoding', + '6-AssignCSDs' +] + +excluded_files = [ + 'test.py', + 'mergingTest.ipynb' +] + +include_files = [ + 'readMe_PreProcessing.md', + 'opentab.conf', + 'Readme_opentab.md', + 'variablemap.csv', + 'Readme.md' +] + +dst_root = '/home/jovyan/LODE-ECDO/scripts/Businesses' + +print('Files copied over:') +for folder in folders_to_backup: + if not(os.path.exists(f'{ODBiz_root}/{folder}')): + continue + print(folder) + for f in os.listdir(f'{ODBiz_root}/{folder}'): + f_len = len(f) + include = False + if f in excluded_files: + include = False + elif f_len >= 3 and f[-3:] == '.py': + include = True + elif f_len >= 6 and f[-6:] == '.ipynb': + include = True + elif f_len >= 3 and f[-3:] == '.md': + include = True + elif f in include_files: + include = True + else: + include = False + + if include: + src_file_path = f'{ODBiz_root}/{folder}/{f}' + dst_file_path = f'{dst_root}/{folder}/{f}' + su.copyfile(src_file_path, dst_file_path) + print(f' |___{f}') + else: + print(f' |___XXX {f}') + + + # print(f) +this_file_path = f'{ODBiz_root}/weeklyBackups.py' +su.copyfile(this_file_path, f'{dst_root}/misc/weeklyBackups.py') +print('weeklyBackups.py') +print('Finished') \ No newline at end of file