{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "data_playground.ipynb", "provenance": [], "collapsed_sections": [], "toc_visible": true, "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "86_YCzJUwtlt", "colab_type": "text" }, "source": [ "# Overview #\n", "\n", "This is demo Google collaborative notebook for downloading data from ONC to your own Google drive. It also shows you how to...\n", "- show datafields of downloaded datasets\n", "- examine dataset with simple TSNE visualization\n", "\n", "\n", "To view the file contents, stay on this page.\n", "\n", "**To play (run and edit) this Python script...**\n", "\n", "1. Click on ```Open in playground``` button \n", "2. Choose Login to your Google account > ```Runtime``` (top menu, fifth item) > ```Run all``` (first item)\n", "3. Click on ```RUN ANYWAY``` when prompted by the pop-up windown\n", "4. Go through each code block below. Most critically, follow the 3-steps under code block ```A``` carefully to authenticate in order to run this entire script successfully\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "zo7k0n_mmCNy", "colab_type": "text" }, "source": [ "## A) Mount to your own Google drive ## \n", "\n", "1. Click on link (in blue)\n", "2. Copy the authentication code (example authentication code:\n", "```4/xwHlEYe2HDKq6XPPPdIbhVZIBf-hDyooaZJSST-k2Lv3IgarPvfeKvw```)\n", "\n", "3. Return to browser's tab where the notebook is being viewed.\n", "4. Paste the copied code into the text box. \n", "5. Press ENTER\n", "\n" ] }, { "cell_type": "code", "metadata": { "id": "yqKF84GisvfH", "colab_type": "code", "outputId": "7b2399ce-5a71-4d53-fc04-d734bf6146d8", "colab": { "base_uri": "https://localhost:8080/", "height": 54 } }, "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')\n", "\n", "from pydrive.auth import GoogleAuth\n", "from pydrive.drive import GoogleDrive\n", "from google.colab import auth\n", "from oauth2client.client import GoogleCredentials\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "29JgNmDUw_uM", "colab_type": "text" }, "source": [ "## B) Use Unix commands to make and move to directory called ```opensource_datasets``` ##" ] }, { "cell_type": "code", "metadata": { "id": "9Tpr2YWTte_z", "colab_type": "code", "outputId": "a75e161c-4291-4498-df47-928f265cc7c8", "colab": { "base_uri": "https://localhost:8080/", "height": 54 } }, "source": [ "try:\n", " ! mkdir '/content/drive/My Drive/Colab Notebooks/opensource_datasets/'\n", "except e as Exception:\n", " pass\n", " \n", "import os\n", "os.chdir('/content/drive/My Drive/Colab Notebooks/opensource_datasets/')\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "mkdir: cannot create directory ‘/content/drive/My Drive/Colab Notebooks/opensource_datasets/’: File exists\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "w9W6FvV7ZDEi", "colab_type": "text" }, "source": [ "## C) Create a subfolder ```ONC2020``` where ONC datasets will be downloaded to ##" ] }, { "cell_type": "code", "metadata": { "id": "bHUIuYorUM5W", "colab_type": "code", "outputId": "564cca54-81a4-480e-88fb-8eb9c089d97f", "colab": { "base_uri": "https://localhost:8080/", "height": 54 } }, "source": [ "try:\n", " ! mkdir '/content/drive/My Drive/Colab Notebooks/opensource_datasets/ONC2020/'\n", "except e as Exception:\n", " pass\n", " \n", "import os\n", "os.chdir('/content/drive/My Drive/Colab Notebooks/opensource_datasets/ONC2020')\n", "\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "mkdir: cannot create directory ‘/content/drive/My Drive/Colab Notebooks/opensource_datasets/ONC2020/’: File exists\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "4Cq-0i3rxfih", "colab_type": "text" }, "source": [ "## D) Using ```wget``` to copy ONC data using API ##\n", "\n", "Note: by default, returns request in json files; appending ```&format=csv``` at the end of query for csv files may work if length of query is known. Below will still download data in json files.\n", "\n" ] }, { "cell_type": "code", "metadata": { "id": "sEj62LZOuT4d", "colab_type": "code", "outputId": "d7279bc6-56b2-4516-f632-d126f5c3594b", "colab": { "base_uri": "https://localhost:8080/", "height": 992 } }, "source": [ "try:\n", " os.chdir('/content/drive/My Drive/Colab Notebooks/opensource_datasets/ONC2020/')\n", " ! wget -O market-readiness2015.csv https://dashboard.healthit.gov/api/open-api.php?source=2015-edition-market-readiness-hospitals-clinicians-data.csv \n", "\n", " \n", "except:\n", " pass\n", "try: \n", " ! wget -O AHA_2008-2005.csv https://dashboard.healthit.gov/api/open-api.php?source=AHA_2008-2015.csv\n", "except:\n", " pass\n", "\n", "try:\n", " ! wget -O budget_performance_measures.csv https://dashboard.healthit.gov/api/open-api.php?source=performance-measures.csv\n", "except:\n", " pass\n", "\n", "try:\n", " ! wget -O prescription_adoption_by_country2014.csv https://dashboard.healthit.gov/api/open-api.php?source=Surescripts_County_04-2014.csv\n", " # ! wget -O prescription_adoption_by_state2014.csv https://dashboard.healthit.gov/api/open-api.php?source=Surescripts_State_04-2014.csv\n", " ! wget -O prescription_adoption_by_state2014.csv https://dashboard.healthit.gov/datadashboard/data/Surescripts_04-2014_State.csv\n", "except:\n", " pass\n", "\n", "\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "--2020-03-22 23:45:52-- https://dashboard.healthit.gov/api/open-api.php?source=2015-edition-market-readiness-hospitals-clinicians-data.csv\n", "Resolving dashboard.healthit.gov (dashboard.healthit.gov)... 54.86.156.245\n", "Connecting to dashboard.healthit.gov (dashboard.healthit.gov)|54.86.156.245|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 0 [application/json]\n", "Saving to: ‘market-readiness2015.csv’\n", "\n", "\rmarket-readiness201 [<=> ] 0 --.-KB/s \rmarket-readiness201 [ <=> ] 0 --.-KB/s in 0s \n", "\n", "2020-03-22 23:45:53 (0.00 B/s) - ‘market-readiness2015.csv’ saved [0/0]\n", "\n", "--2020-03-22 23:45:53-- https://dashboard.healthit.gov/api/open-api.php?source=AHA_2008-2015.csv\n", "Resolving dashboard.healthit.gov (dashboard.healthit.gov)... 54.86.156.245\n", "Connecting to dashboard.healthit.gov (dashboard.healthit.gov)|54.86.156.245|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: unspecified [application/json]\n", "Saving to: ‘AHA_2008-2005.csv’\n", "\n", "AHA_2008-2005.csv [ <=> ] 505.84K 1.60MB/s in 0.3s \n", "\n", "2020-03-22 23:45:54 (1.60 MB/s) - ‘AHA_2008-2005.csv’ saved [517977]\n", "\n", "--2020-03-22 23:45:55-- https://dashboard.healthit.gov/api/open-api.php?source=performance-measures.csv\n", "Resolving dashboard.healthit.gov (dashboard.healthit.gov)... 54.86.156.245\n", "Connecting to dashboard.healthit.gov (dashboard.healthit.gov)|54.86.156.245|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: unspecified [application/json]\n", "Saving to: ‘budget_performance_measures.csv’\n", "\n", "budget_performance_ [ <=> ] 71.57K --.-KB/s in 0.1s \n", "\n", "2020-03-22 23:45:56 (578 KB/s) - ‘budget_performance_measures.csv’ saved [73291]\n", "\n", "--2020-03-22 23:45:56-- https://dashboard.healthit.gov/api/open-api.php?source=Surescripts_County_04-2014.csv\n", "Resolving dashboard.healthit.gov (dashboard.healthit.gov)... 54.86.156.245\n", "Connecting to dashboard.healthit.gov (dashboard.healthit.gov)|54.86.156.245|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: unspecified [application/json]\n", "Saving to: ‘prescription_adoption_by_country2014.csv’\n", "\n", "prescription_adopti [ <=> ] 666.32K 1.85MB/s in 0.4s \n", "\n", "2020-03-22 23:45:57 (1.85 MB/s) - ‘prescription_adoption_by_country2014.csv’ saved [682310]\n", "\n", "--2020-03-22 23:45:58-- https://dashboard.healthit.gov/datadashboard/data/Surescripts_04-2014_State.csv\n", "Resolving dashboard.healthit.gov (dashboard.healthit.gov)... 54.86.156.245\n", "Connecting to dashboard.healthit.gov (dashboard.healthit.gov)|54.86.156.245|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 252065 (246K) [text/csv]\n", "Saving to: ‘prescription_adoption_by_state2014.csv’\n", "\n", "prescription_adopti 100%[===================>] 246.16K 954KB/s in 0.3s \n", "\n", "2020-03-22 23:45:58 (954 KB/s) - ‘prescription_adoption_by_state2014.csv’ saved [252065/252065]\n", "\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "5cL2QeKNZi9D", "colab_type": "text" }, "source": [ "## E) List the files downloaded to your Google drive ##" ] }, { "cell_type": "code", "metadata": { "id": "IeK-IfgRyE3b", "colab_type": "code", "outputId": "f21b5241-4d2a-4f35-b39f-8fb7077126ba", "colab": { "base_uri": "https://localhost:8080/", "height": 121 } }, "source": [ "os.chdir('/content/drive/My Drive/Colab Notebooks/opensource_datasets/ONC2020/')\n", "\n", "import glob\n", "files = glob.glob('*csv')\n", "\n", "for f in files:\n", " print(f) " ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "AHA_2008-2005.csv\n", "performance-measures.csv\n", "budget_performance_measures.csv\n", "prescription_adoption_by_country2014.csv\n", "prescription_adoption_by_state2014.csv\n", "market-readiness2015.csv\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "DPSfuEBDfzxU", "colab_type": "text" }, "source": [ "## F) Import modules for displaying tabular data in HTML format ##" ] }, { "cell_type": "code", "metadata": { "id": "7AfD-YMEePDk", "colab_type": "code", "outputId": "b7b8c351-30c8-4199-df44-8ad4cd29a48c", "colab": { "base_uri": "https://localhost:8080/", "height": 74 } }, "source": [ "from IPython.core.display import display, HTML\n", "display(HTML('

Hello, world!

'))\n" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "text/html": [ "

Hello, world!

" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "5MhzPQKLa2y4", "colab_type": "text" }, "source": [ "## G) Loop over this list of datasets (files) and show the header and 1 example data entry within each file. ##" ] }, { "cell_type": "code", "metadata": { "id": "vp9mVCzZZwe1", "colab_type": "code", "outputId": "a0975317-d675-43c2-beba-e4dbe28a2048", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 } }, "source": [ "import pandas as pd\n", "import numpy as np\n", "\n", "dfs=dict()\n", "\n", "for f in files:\n", " try:\n", " k=f.strip('.csv')\n", " data = pd.read_json(f)\n", " #data = pd.read_json(f,dtype=float ).replace('',np.NaN).replace( '.', np.NaN)\n", " dfs[k] = data\n", " print( '\\nContents of %s.csv:' % k ) \n", " display(HTML( dfs[k].head(2).transpose().to_html() ))\n", " except Exception as e: \n", " print(f, e) \n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "\n", "Contents of AHA_2008-2005.csv:\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
01
regionNationalAlaska
region_codeUSAK
period20152015
pct_hospitals_basic_ehr_notes0.840.89
pct_rural_hospitals_basic_ehr_notes0.80.83947572
pct_small_hospitals_basic_ehr_notes0.810.869637303
pct_critical_access_hospitals_basic_ehr_notes0.80.83947572
pct_hospitals_basic_ehr_no_notes0.880.893633791
pct_rural_hospitals_basic_ehr_no_notes0.8302687730.83947572
pct_small_hospitals_basic_ehr_no_notes0.8334482480.869637303
pct_critical_access_hospitals_basic_ehr_no_notes0.818353050.83947572
pct_hospitals_cehrt0.961
pct_small_rural_hospitals_cehrt0.941
pct_cah_hospitals_cehrt0.961
pct_hospitals_share_labs_any_outside_provs0.7564407990.767077064
pct_hospitals_share_labs_any_outside_hospitals0.6347544570.660710855
pct_hospitals_share_labs_any_outside_ambu_provs0.6923811320.660710855
pct_hospitals_patients_ecopy_ehr
pct_hospitals_patients_ecopy_discharge_instr
pct_hospitals_share_care_summaries_any_outside_provs0.7601399940.879915162
pct_hospitals_share_care_summaries_any_outside_hospitals0.6723680190.773548953
pct_hospitals_share_care_summaries_any_outside_ambu_provs0.6865305410.773548953
pct_hospitals_patients_vdt0.690.89
pct_hospitals_patients_secure_message0.630.620241332
pct_hospitals_find_clinical_info0.520.89
pct_hospitals_send_clinical_info0.851
pct_hospitals_receive_clinical_info0.650.89
pct_hospitals_integrate_any_clinical_info0.50.51
pct_hospitals_integrate_scr0.380.51
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\n", "Contents of performance-measure.csv:\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
01
measurePercent of office-based physicians who have adopted a Basic EHRPercent of office-based physicians who have adopted a Basic EHR
measure_year20092009
measure_typeactualtarget
measure_value21
measure_status
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\n", "Contents of budget_performance_measure.csv:\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
01
measurePercent of office-based physicians who have adopted a Basic EHRPercent of office-based physicians who have adopted a Basic EHR
measure_year20092009
measure_typeactualtarget
measure_value21
measure_status
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\n", "Contents of prescription_adoption_by_country2014.csv:\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
01
RegionAlabamaAlabama
Region CodeALAL
County NameAutaugaBaldwin
State FIPS11
County FIPS13
FIPS10011003
Period2014-042014-04
Percent of Physicians Actively Using an EHR to e_Prescribe via the Surescripts Network0.330.68
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "prescription_adoption_by_state2014.csv Expected object or value\n", "market-readiness2015.csv Expected object or value\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "acH0KYKdjcwp", "colab_type": "text" }, "source": [ "## Repeat above step but this time, mark missing data with NaN ##" ] }, { "cell_type": "code", "metadata": { "id": "-OyClnHojTrx", "colab_type": "code", "outputId": "d38ae5d1-180b-4f18-b039-c564bbb19341", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 } }, "source": [ "dfs=dict()\n", "\n", "for f in files:\n", " try:\n", " k=f.strip('.csv')\n", " data = pd.read_json(f,dtype=float ).replace('',np.NaN).replace( '.', np.NaN)\n", " dfs[k] = data\n", " print( '\\nContents of %s.csv:' % k ) \n", " display(HTML( dfs[k].head(2).transpose().to_html() ))\n", " except Exception as e: \n", " print(f, e) \n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "\n", "Contents of AHA_2008-2005.csv:\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
01
regionNationalAlaska
region_codeUSAK
period20152015
pct_hospitals_basic_ehr_notes0.840.89
pct_rural_hospitals_basic_ehr_notes0.80.83947572
pct_small_hospitals_basic_ehr_notes0.810.869637303
pct_critical_access_hospitals_basic_ehr_notes0.80.83947572
pct_hospitals_basic_ehr_no_notes0.880.893633791
pct_rural_hospitals_basic_ehr_no_notes0.8302687730.83947572
pct_small_hospitals_basic_ehr_no_notes0.8334482480.869637303
pct_critical_access_hospitals_basic_ehr_no_notes0.818353050.83947572
pct_hospitals_cehrt0.961
pct_small_rural_hospitals_cehrt0.941
pct_cah_hospitals_cehrt0.961
pct_hospitals_share_labs_any_outside_provs0.7564407990.767077064
pct_hospitals_share_labs_any_outside_hospitals0.6347544570.660710855
pct_hospitals_share_labs_any_outside_ambu_provs0.6923811320.660710855
pct_hospitals_patients_ecopy_ehrNaNNaN
pct_hospitals_patients_ecopy_discharge_instrNaNNaN
pct_hospitals_share_care_summaries_any_outside_provs0.7601399940.879915162
pct_hospitals_share_care_summaries_any_outside_hospitals0.6723680190.773548953
pct_hospitals_share_care_summaries_any_outside_ambu_provs0.6865305410.773548953
pct_hospitals_patients_vdt0.690.89
pct_hospitals_patients_secure_message0.630.620241332
pct_hospitals_find_clinical_info0.520.89
pct_hospitals_send_clinical_info0.851
pct_hospitals_receive_clinical_info0.650.89
pct_hospitals_integrate_any_clinical_info0.50.51
pct_hospitals_integrate_scr0.380.51
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\n", "Contents of performance-measure.csv:\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
01
measurePercent of office-based physicians who have adopted a Basic EHRPercent of office-based physicians who have adopted a Basic EHR
measure_year20092009
measure_typeactualtarget
measure_value21NaN
measure_statusNaNNaN
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\n", "Contents of budget_performance_measure.csv:\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
01
measurePercent of office-based physicians who have adopted a Basic EHRPercent of office-based physicians who have adopted a Basic EHR
measure_year20092009
measure_typeactualtarget
measure_value21NaN
measure_statusNaNNaN
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\n", "Contents of prescription_adoption_by_country2014.csv:\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
01
RegionAlabamaAlabama
Region CodeALAL
County NameAutaugaBaldwin
State FIPS11
County FIPS13
FIPS10011003
Period2014-042014-04
Percent of Physicians Actively Using an EHR to e_Prescribe via the Surescripts Network0.330.68
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "prescription_adoption_by_state2014.csv Expected object or value\n", "market-readiness2015.csv Expected object or value\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "L6g2lKh2oiN7", "colab_type": "text" }, "source": [ " New Section" ] }, { "cell_type": "markdown", "metadata": { "id": "yG_aHeFfoirc", "colab_type": "text" }, "source": [ " New Section" ] }, { "cell_type": "code", "metadata": { "id": "yPcOJP9IgVKv", "colab_type": "code", "outputId": "8e80994f-fe6e-4cb0-bd55-12499c6b5c38", "colab": { "base_uri": "https://localhost:8080/", "height": 228 } }, "source": [ "! wget -O prescription_adoption_by_state2014.csv https://dashboard.healthit.gov/api/open-api.php?source=Surescripts_04-2014_State.csv\n", "\n", "dfs['prescription_adoption_by_state2014']=pd.read_json( 'prescription_adoption_by_state2014.csv' ) \n", " \n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "--2020-03-22 23:46:00-- https://dashboard.healthit.gov/api/open-api.php?source=Surescripts_04-2014_State.csv\n", "Resolving dashboard.healthit.gov (dashboard.healthit.gov)... 54.86.156.245\n", "Connecting to dashboard.healthit.gov (dashboard.healthit.gov)|54.86.156.245|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: unspecified [application/json]\n", "Saving to: ‘prescription_adoption_by_state2014.csv’\n", "\n", "prescription_adopti [ <=> ] 1.41M 2.74MB/s in 0.5s \n", "\n", "2020-03-22 23:46:01 (2.74 MB/s) - ‘prescription_adoption_by_state2014.csv’ saved [1483148]\n", "\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "C__T-mOBhdvK", "colab_type": "code", "outputId": "434cc413-0f78-4a1b-82d3-cad5a7ef2343", "colab": { "base_uri": "https://localhost:8080/", "height": 520 } }, "source": [ "dfs['prescription_adoption_by_state2014'].head(2).transpose()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "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", "
01
regionNationalNational
region_codeUSUS
period20082009
tot_e_Rx
tot_e_Rx_thru_ehr
tot_e_Rx_thru_stand_alone
tot_primary_care_e_Rx
tot_non_primary_care_e_Rx
tot_nurse_prac_e_Rx
tot_phys_asst_e_Rx
pct_new_renewal_e_Rx0.040.11
tot_med_hist_reqs
tot_med_hist_req_resps
pct_pharm_enabled
pct_pharm_e_Rx
\n", "
" ], "text/plain": [ " 0 1\n", "region National National\n", "region_code US US\n", "period 2008 2009\n", "tot_e_Rx \n", "tot_e_Rx_thru_ehr \n", "tot_e_Rx_thru_stand_alone \n", "tot_primary_care_e_Rx \n", "tot_non_primary_care_e_Rx \n", "tot_nurse_prac_e_Rx \n", "tot_phys_asst_e_Rx \n", "pct_new_renewal_e_Rx 0.04 0.11\n", "tot_med_hist_reqs \n", "tot_med_hist_req_resps \n", "pct_pharm_enabled \n", "pct_pharm_e_Rx " ] }, "metadata": { "tags": [] }, "execution_count": 133 } ] }, { "cell_type": "code", "metadata": { "id": "SqT47Hooho8c", "colab_type": "code", "outputId": "41e747e9-f05c-4ac3-c436-56d22676608b", "colab": { "base_uri": "https://localhost:8080/", "height": 228 } }, "source": [ "#! wget -O market-readiness2015.csv https://dashboard.healthit.gov/datadashboard/data/2015-edition-market-readiness-hospitals-clinicians-data.csv\n", "! wget -O market-readiness2015.csv https://dashboard.healthit.gov/api/open-api.php?source=2015-edition-market-readiness-hospitals-clinicians-data.csv\n", "\n", "# file is empty (0 bytes transferred); do not read, nothing to read\n", "#dfs['market-readiness2015']=pd.read_json( 'market-readiness2015.csv' ) " ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "--2020-03-22 23:46:02-- https://dashboard.healthit.gov/api/open-api.php?source=2015-edition-market-readiness-hospitals-clinicians-data.csv\n", "Resolving dashboard.healthit.gov (dashboard.healthit.gov)... 54.86.156.245\n", "Connecting to dashboard.healthit.gov (dashboard.healthit.gov)|54.86.156.245|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 0 [application/json]\n", "Saving to: ‘market-readiness2015.csv’\n", "\n", "\rmarket-readiness201 [<=> ] 0 --.-KB/s \rmarket-readiness201 [ <=> ] 0 --.-KB/s in 0s \n", "\n", "2020-03-22 23:46:02 (0.00 B/s) - ‘market-readiness2015.csv’ saved [0/0]\n", "\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "RLvPDbO4i2Oc", "colab_type": "code", "outputId": "68bafd1e-b318-4a7e-b9d3-b9e5f59aa0e8", "colab": { "base_uri": "https://localhost:8080/", "height": 104 } }, "source": [ "for k in dfs.keys(): \n", " print('%s.csv contains cells of size'%k, dfs[k].shape) " ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "AHA_2008-2005.csv contains cells of size (417, 29)\n", "performance-measure.csv contains cells of size (337, 5)\n", "budget_performance_measure.csv contains cells of size (337, 5)\n", "prescription_adoption_by_country2014.csv contains cells of size (2938, 8)\n", "prescription_adoption_by_state2014.csv contains cells of size (3825, 15)\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "_UHCyzwri29G", "colab_type": "text" }, "source": [ "## H) Examine ```AHA_2008-2005.csv``` more closely ##" ] }, { "cell_type": "code", "metadata": { "id": "CbXmO6LfzYjm", "colab_type": "code", "outputId": "a9a5c06e-4425-4b65-e9bd-d6e97b1f52e0", "colab": { "base_uri": "https://localhost:8080/", "height": 977 } }, "source": [ "import pandas as pd\n", "import numpy as np\n", "\n", "k='AHA_2008-2005'\n", "\n", "\n", "print('This file contains cells of size', dfs[k].shape) # 417 samples each with 29 attributes\n", "\n", "display(HTML(dfs[k].head(2).transpose().to_html() ) )\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "This file contains cells of size (417, 29)\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
01
regionNationalAlaska
region_codeUSAK
period20152015
pct_hospitals_basic_ehr_notes0.840.89
pct_rural_hospitals_basic_ehr_notes0.80.83947572
pct_small_hospitals_basic_ehr_notes0.810.869637303
pct_critical_access_hospitals_basic_ehr_notes0.80.83947572
pct_hospitals_basic_ehr_no_notes0.880.893633791
pct_rural_hospitals_basic_ehr_no_notes0.8302687730.83947572
pct_small_hospitals_basic_ehr_no_notes0.8334482480.869637303
pct_critical_access_hospitals_basic_ehr_no_notes0.818353050.83947572
pct_hospitals_cehrt0.961
pct_small_rural_hospitals_cehrt0.941
pct_cah_hospitals_cehrt0.961
pct_hospitals_share_labs_any_outside_provs0.7564407990.767077064
pct_hospitals_share_labs_any_outside_hospitals0.6347544570.660710855
pct_hospitals_share_labs_any_outside_ambu_provs0.6923811320.660710855
pct_hospitals_patients_ecopy_ehrNaNNaN
pct_hospitals_patients_ecopy_discharge_instrNaNNaN
pct_hospitals_share_care_summaries_any_outside_provs0.7601399940.879915162
pct_hospitals_share_care_summaries_any_outside_hospitals0.6723680190.773548953
pct_hospitals_share_care_summaries_any_outside_ambu_provs0.6865305410.773548953
pct_hospitals_patients_vdt0.690.89
pct_hospitals_patients_secure_message0.630.620241332
pct_hospitals_find_clinical_info0.520.89
pct_hospitals_send_clinical_info0.851
pct_hospitals_receive_clinical_info0.650.89
pct_hospitals_integrate_any_clinical_info0.50.51
pct_hospitals_integrate_scr0.380.51
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "pwf30kJ_bk2X", "colab_type": "text" }, "source": [ "## I) Extract the numeric variables out of this dataset for subsequent data analyses ##" ] }, { "cell_type": "code", "metadata": { "id": "2X70FBil4QsR", "colab_type": "code", "outputId": "8374deff-d998-416d-b41c-ad21a31ff5b9", "colab": { "base_uri": "https://localhost:8080/", "height": 451 } }, "source": [ "# ID's are first 2 columns (region and region_code)\n", "\n", "data = dfs[k].iloc[:,2::].values\n", "labels = dfs[k].iloc[:,1].values\n", "\n", "import numpy as np\n", "\n", "cdata = np.zeros( data.shape )\n", "\n", "for c in range( 2,data.shape[1] ):\n", " cc=c-2\n", " cdata[:,cc]=pd.to_numeric( dfs[k].iloc[:,c] )\n", " print(cc, np.nanmin( cdata[:,cc] ), np.nanmax( cdata[:,cc]), dfs[k].columns[c] , )\n" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "0 2008.0 2015.0 period\n", "1 0.07 1.0 pct_hospitals_basic_ehr_notes\n", "2 0.0 1.0 pct_rural_hospitals_basic_ehr_notes\n", "3 0.0 1.0 pct_small_hospitals_basic_ehr_notes\n", "4 0.0 1.0 pct_critical_access_hospitals_basic_ehr_notes\n", "5 0.01 1.0 pct_hospitals_basic_ehr_no_notes\n", "6 0.0 1.0 pct_rural_hospitals_basic_ehr_no_notes\n", "7 0.0 1.0 pct_small_hospitals_basic_ehr_no_notes\n", "8 0.0 1.0 pct_critical_access_hospitals_basic_ehr_no_notes\n", "9 0.72 1.0 pct_hospitals_cehrt\n", "10 0.758553914 1.0 pct_small_rural_hospitals_cehrt\n", "11 0.8396548290000001 1.0 pct_cah_hospitals_cehrt\n", "12 0.16 1.0 pct_hospitals_share_labs_any_outside_provs\n", "13 0.0 1.0 pct_hospitals_share_labs_any_outside_hospitals\n", "14 0.16 1.0 pct_hospitals_share_labs_any_outside_ambu_provs\n", "15 0.23 1.0 pct_hospitals_patients_ecopy_ehr\n", "16 0.26 1.0 pct_hospitals_patients_ecopy_discharge_instr\n", "17 0.11 1.0 pct_hospitals_share_care_summaries_any_outside_provs\n", "18 0.0 0.884738116 pct_hospitals_share_care_summaries_any_outside_hospitals\n", "19 0.07 1.0 pct_hospitals_share_care_summaries_any_outside_ambu_provs\n", "20 0.0 1.0 pct_hospitals_patients_vdt\n", "21 0.11 1.0 pct_hospitals_patients_secure_message\n", "22 0.13 0.89 pct_hospitals_find_clinical_info\n", "23 0.44 1.0 pct_hospitals_send_clinical_info\n", "24 0.2 0.89 pct_hospitals_receive_clinical_info\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "YE1YGRkvcS_4", "colab_type": "text" }, "source": [ "## J) Set missing values to ```-1``` ##\n" ] }, { "cell_type": "code", "metadata": { "id": "34Ys85ck6u8d", "colab_type": "code", "colab": {} }, "source": [ "cdata[np.isnan(cdata)]=-1\n" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "DhPDhRr8cZ3o", "colab_type": "text" }, "source": [ "## K) Perform dimensionality reduction using TSNE; the output data should have 2 dimensions ##" ] }, { "cell_type": "code", "metadata": { "id": "-NuEAkiF7Trf", "colab_type": "code", "outputId": "a6025fc7-2598-4f0d-f635-901d4a6446e3", "colab": { "base_uri": "https://localhost:8080/", "height": 34 } }, "source": [ "from sklearn.manifold import TSNE\n", "cdata_embedded = TSNE(n_components=2).fit_transform(cdata)\n", "cdata_embedded.shape" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(417, 2)" ] }, "metadata": { "tags": [] }, "execution_count": 139 } ] }, { "cell_type": "markdown", "metadata": { "id": "obkMy8pPcjpA", "colab_type": "text" }, "source": [ "## L) Plot a histogram of data distribution by region-codes ##" ] }, { "cell_type": "code", "metadata": { "id": "modomAbZqcbZ", "colab_type": "code", "outputId": "87996d27-b8ea-4dca-e6e6-358632f30cfc", "colab": { "base_uri": "https://localhost:8080/", "height": 395 } }, "source": [ "labels = dfs[k].iloc[:,1].values\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "fig,axes=plt.subplots(1,1, figsize=( 20, 6 ));\n", "dfs[k].region_code.hist();\n", "\n", " " ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABH4AAAFmCAYAAAAbCF1IAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nO3debhsd10m+vdrgoo5yiD06UiQINAR\nSBjMeRhEMWEygEpARHK5GLxoum8jLRgUnK7Y7RBb0iCDYAQ6aRs50ExBWkUk4QIyJgwJAQOESRET\nICEIRCHwu3+stZOdnb13jduq/O7n8zznOaemd393nVVVq95aa1W11gIAAABAf75p1QMAAAAAsDcU\nPwAAAACdUvwAAAAAdErxAwAAANApxQ8AAABApxQ/AAAAAJ06dJorVdUnkvxTkq8nubq1dqCqbp7k\nZUmOTPKJJI9qrV2xN2MCAAAAMKtqrU2+0lD8HGitfW7Tef81yeWttdOq6mlJbtZae+puObe4xS3a\nkUceudjEa+LLX/5yDjvssLXLkidvlXnrPJs8eavMW+fZ5MlbVZY8eavMW+fZ5MlbZd46z3ZDyFul\n888//3OttVtue2FrbeKfDFv03GLLeRcnOXz89+FJLp6Uc+yxx7ZenHvuuWuZJU/eKvPWeTZ58laZ\nt86zyZO3qix58laZt86zyZO3yrx1nu2GkLdKSc5rO3Qx027x8/EkVyRpSf6otXZGVX2htXbT8fJK\ncsXG6S23PSXJKUmyf//+Yw8ePDhbbbWmvvSlL2Xfvn1rlyVP3irz1nk2efJWmbfOs8mTt6osefJW\nmbfOs8mTt8q8dZ7thpC3Sscff/z5rbUD2164UyPUrrt1z63Gv/9NkvcnuW+SL2y5zhWTcmzxs/dZ\n8uStMm+dZ5Mnb5V56zybPHmrypInb5V56zybPHmrzFvn2W4IeauUXbb4mepbvVprnx7/vizJq5Pc\nI8mlVXV4kox/X7ZAOQUAAADAkk0sfqrqsKr69o1/J3lQkg8keW2Sk8ernZzk7L0aEgAAAIDZTfN1\n7vuTvHo4jE8OTfKnrbW/rKp3J3l5VT0+ySeTPGrvxgQAAABgVhOLn9bax5LcdZvzP5/k/nsxFAAA\nAACLm+oYPwAAAADc8Ch+AAAAADql+AEAAADolOIHAAAAoFOKHwAAAIBOKX4AAAAAOqX4AQAAAOjU\n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\npfgBAAAA6JTiBwAAAKBTih8AAACATil+AAAAADql+AEAAADolOIHAAAAoFOKHwAAAIBOKX4AAAAA\nOqX4AQAAAOiU4gcAAACgU4ofAAAAgE4pfgAAAAA6pfgBAAAA6JTiBwAAAKBTih8AAACATil+AAAA\nADql+AEAAADolOIHAAAAoFOKHwAAAIBOKX4AAAAAOqX4AQAAAOiU4gcAAACgU4ofAAAAgE4pfgAA\nAAA6pfgBAAAA6JTiBwAAAKBTih8AAACATil+AAAAADql+AEAAADolOIHAAAAoFOKHwAAAIBOKX4A\nAAAAOqX4AQAAAOiU4gcAAACgU4ofAAAAgE4pfgAAAAA6pfgBAAAA6JTiBwAAAKBTih8AAACATil+\nAAAAADql+AEAAADolOIHAAAAoFMTi5+qunVVnVtVH6yqi6rq58fzb15Vb6iqj4x/32zvxwUAAABg\nWtNs8XN1klNba3dKcq8kT6iqOyV5WpI3ttbukOSN42kAAAAA1sTE4qe19pnW2nvGf/9Tkg8luVWS\nhyU5a7zaWUlO3KshAQAAAJhdtdamv3LVkUnenOToJJ9qrd10PL+SXLFxesttTklySpLs37//2IMH\nDy4+9Rq47PIrc+lVy8naf+MsLUuevFXmrfNs8uStMm+dZ5Mnb1VZ8uStMm+dZ5Mnb5V56zzbXuTd\n9iaHZN++fcsLXKHjjz/+/Nbage0um7r4qap9Sf7fJL/dWntVVX1hc9FTVVe01nY9zs+BAwfaeeed\nN8Po6+s5Lzk7p1946FKyTj3m6qVlyZO3yrx1nk2evFXmrfNs8uStKkuevFXmrfNs8uStMm+dZ9uL\nvDNPOCzHHXfc0vJWqap2LH6m+lavqrpRklcmeUlr7VXj2ZdW1eHj5YcnuWwZwwIAAACwHNN8q1cl\neVGSD7XW/tumi16b5OTx3ycnOXv54wEAAAAwr2m2kbpPkscmubCq3jee9ytJTkvy8qp6fJJPJnnU\n3owIAAAAwDwmFj+ttbcmqR0uvv9yxwEAAABgWaY6xg8AAAAANzyKHwAAAIBOKX4AAAAAOqX4AQAA\nAOiU4gcAAACgU4ofAAAAgE4pfgAAAAA6pfgBAAAA6JTiBwAAAKBTih8AAACATil+AAAAADql+AEA\nAADolOIHAAAAoFOKHwAAAIBOKX4AAAAAOqX4AQAAAOiU4gcAAACgU4ofAAAAgE4pfgAAAAA6pfgB\nAAAA6JTiBwAAAKBTih8AAACATil+AAAAADql+AEAAADolOIHAAAAoFOKHwAAAIBOKX4AAAAAOqX4\nAQAAAOiU4gcAAACgU4ofAAAAgE4pfgAAAAA6pfgBAAAA6JTiBwAAAKBTih8AAACATil+AAAAADql\n+AEAAADolOIHAAAAoFOKHwAAAIBOKX4AAAAAOqX4AQAAAOiU4gcAAACgU4ofAAAAgE4pfgAAAAA6\npfgBAAAA6JTiBwAAAKBTih8AAACATil+AAAAADql+AEAAADolOIHAAAAoFOKHwAAAIBOKX4AAAAA\nOqX4AQAAAOiU4gcAAACgU4ofAAAAgE4pfgAAAAA6pfgBAAAA6NTE4qeqXlxVl1XVBzadd/OqekNV\nfWT8+2Z7OyYAAAAAs5pmi58zk5yw5bynJXlja+0OSd44ngYAAABgjUwsflprb05y+ZazH5bkrPHf\nZyU5cclzAQAAALCgaq1NvlLVkUle11o7ejz9hdbaTcd/V5IrNk5vc9tTkpySJPv37z/24MGDy5l8\nxS67/MpcetVysvbfOEvLkidvlXnrPJs8eavMW+fZ5MlbVZY8eavMW+fZ5MlbZd46z7YXebe9ySHZ\nt2/f8gJX6Pjjjz+/tXZgu8sOXTS8tdaqasf2qLV2RpIzkuTAgQPtuOOOW/RHroXnvOTsnH7hwndf\nkuTUY65eWpY8eavMW+fZ5MlbZd46zyZP3qqy5MlbZd46zyZP3irz1nm2vcg784TD0ktHsZt5v9Xr\n0qo6PEnGvy9b3kgAAAAALMO8xc9rk5w8/vvkJGcvZxwAAAAAlmWar3N/aZK3Jzmqqv6+qh6f5LQk\nD6yqjyR5wHgaAAAAgDUycee41tpJO1x0/yXPAgAAAMASzburFwAAAABrTvEDAAAA0CnFDwAAAECn\nFD8AAAAAnVL8AAAAAHRK8QMAAADQKcUPAAAAQKcUPwAAAACdUvwAAAAAdErxAwAAANApxQ8AAABA\npxQ/AAAAAJ1S/AAAAAB0SvEDAAAA0CnFDwAAAECnFD8AAAAAnVL8AAAAAHRK8QMAAADQKcUPAAAA\nQKcUPwAAAACdUvwAAAAAdErxAwAAANApxQ8AAABApxQ/AAAAAJ1S/AAAAAB0SvEDAAAA0CnFDwAA\nAECnFD8AAAAAnVL8AAAAAHRK8QMAAADQKcUPAAAAQKcUPwAAAACdUvwAAAAAdErxAwAAANApxQ8A\nAABApxQ/AAAAAJ1S/AAAAAB0SvEDAAAA0CnFDwAAAECnFD8AAAAAnVL8AAAAAHRK8QMAAADQKcUP\nAAAAQKcUPwAAAACdUvwAAAAAdErxAwAAANApxQ8AAABApxQ/AAAAAJ1S/AAAAAB0SvEDAAAA0CnF\nDwAAAECnFD8AAAAAnVL8AAAAAHRK8QMAAADQKcUPAAAAQKcUPwAAAACdWqj4qaoTquriqvpoVT1t\nWUMBAAAAsLi5i5+qOiTJ85I8OMmdkpxUVXda1mAAAAAALGaRLX7ukeSjrbWPtda+muRgkoctZywA\nAAAAFlWttfluWPXIJCe01n5mPP3YJPdsrf3cluudkuSU8eRRSS6ef9y1coskn1vDLHnyVpm3zrPJ\nk7fKvHWeTZ68VWXJk7fKvHWeTZ68Veat82w3hLxVuk1r7ZbbXXDoXv/k1toZSc7Y65/zr62qzmut\nHVi3LHnyVpm3zrPJk7fKvHWeTZ68VWXJk7fKvHWeTZ68Veat82w3hLx1tciuXp9OcutNp48YzwMA\nAABgDSxS/Lw7yR2q6rZV9c1JHp3ktcsZCwAAAIBFzb2rV2vt6qr6uSSvT3JIkhe31i5a2mTrb5m7\nry17Vzh58laVt86zyZO3yrx1nk2evFVlyZO3yrx1nk2evFXmrfNsN4S8tTT3wZ0BAAAAWG+L7OoF\nAAAAwBpT/AAAAAB0SvEzQVUdWVUf2HLe06vqKVV1r6p6Z1W9r6o+VFVPnzLzxKpqVfW92/2MqvrZ\nqjq/qm62jLxZ7JB11fg7frCq/kdV3WiBvCeMWRt/PjBefscp8/5tVR2sqkvG++jPq+rfjZc9qar+\nuapuskhWVd25qs6pqour6iNV9etVVXNmnltVXxl/18ur6uPjv/96Qs7Xx+tdVFXvr6pTq+qbNl1+\nj6p68zjje6vqhVX1bfNmVtVxVXXllv+bB0zx+359y22OHLNeN839tSVrf1X9aVV9bLzv3l5VD990\n+bOq6tOb74cpMr+05fTjquq547+fXlVPmXHGrXkzLXM75W16nL13fC55V1U9bgmZcz0P7JDVquqJ\nmy577rQzbr7fquohVfXhqrpNVR1VVW+qa59Dp97HeofMc6vq/950/j2r6oJJz1lb/1+3XDbTcjfe\nT/9z0+lDq+qzWx8TVfWaqnrHIlnj8vzZcbn5SFW9vqq+f0mZmx/Xd1pC5nN3y5gh5xtVdZdN1/lA\nVR05T9543onjMvKhqrqwqk5cYL79VfW6Gp5fP1hVfz7v71tVP73p/v/qONv7quq0CXmnbzr9lNq0\nXlJVPzXeXxeOy8yuz3+75dXw/PnpcaaPVNWrplxOpsnb+HPTBfOesuX6n6iqW+yWOU/unBmtqm6/\n6fInjeft+HXCO2VW1Q9V1du3XPfQqrq0qr5rjrwH1vD6W+P5h4zLy6TnliOq6uxxebikqv6gqr65\ntlknqKozq+qRy8irqt+qqr+sqm9ZIG9j/edvq+oZu+VsyttY//lAVf2vGtfBNj2Od3ysTpn5ZxuP\ngZrj9byqfrWG9b0Lxsx7VtWNquq08T54z/j//OAF8t5Uw3roBeN999wpHrffuekx/o9bHve7PofN\nmHdJDevcNx+vd7Px9JFT/K7Xu7/Hx8aX69r3Q1dt+rk7Lss1rJf88JbznlRVz6+qW1TV16rqP0ya\naULer9fwGjbre41nVtWTNp1+fVW9cNPp06vqF2ZZpmfI3HV5njLnG1V11JbbPauqnjpn3ler6phN\n5/1iVf3RpN/5hkTxs5izkpzSWrtbkqOTvHzK252U5K3j39dRVY9N8sQkP9xau2LRvDlsl3XJ+Dse\nk+SIJI+aN6+19rzW2t02/mT4JriXtNY+NCmoqirJq5O8qbV2u9basUl+Ocn+TT/r3UkesWDWa5Oc\n1lo7Ksldk3x/kv84Z+aTMvxfbvyuvzj+7pNKlavG6905yQOTPDjJb4w/Z3+S/5Xkqa21o1prd0/y\nl0m+fd7M0Vs2/9+01nZ9wdiSufHnE1Pc5nrG++41Sd7cWvue8b57dIblLTW86X54kr9L8kPz/Iw9\nMvUyN4VLWmt3b63dMcPv/qSq+ukl5C7LZUl+voZvcZxLVd0/ybOTPLi19snx388cl507JnnOIpkZ\n7rdfrKpbjsvMc5P8x9ba1+acd57l7stJjq6qG4+nH5jk01tyb5rk2CQ3qarvWSQrycvG5eYOSU5L\n8qravUifNnPz4/qDu+RNmzmNaXL+PsmvLiOvqu6a5BlJHjYufz+W5Bm1qViacb7/nOQNrbW7ttbu\nlORp887XWvvvm14n/yHJ8ePp3TL/JckjaptyY3xz96QkD2qtHZPkXkmunDDfjnmjjcfuHZK8LMk5\nVXXLJeRt/PnCgvPNaxm5kzIuzPB8teEnkkz6gpSdMt+S5Iiqus2m8x6Q5KLW2j/Mmtdae0OSTyZ5\n/HjWE5Oc11p7205B42v4q5K8Zlwe/l2SfUl+e8LvtFBeVf1akvskeXhr7V8WyHvL+Fi7e5Ifqar7\nTDHmxvrP0Um+mmTjzfsDk3w4yU+MP3cWmzMvT/KEGW+fJKmqeyf5kSTf11q7S4bl4e+S/Jckhyc5\nurX2fUlOzOR1x93ykuQx43l3ybBMnb1bVmvt85ue216QTY/7zPHY2yXvdkmen+F1MePfZ8y7njr6\njfHnPCTje6Pxzyt2uc1Lc93HesbTL83wuH9HZnv/tl3eQ5P8+znea/xNhvc4G+s7t0hy502Xf3+S\nt2W2ZXrazEmmyXlTNt0X4/UemeTgnHn/T5I/rMGtMjymJ72O36Aofhbzb5J8Jklaa1+fYuU4VbUv\nyQ9keEF99JbLHpVhAXtQa+1z0wywW96sJmW11r6e5F1JbrWMvKq6b4YSaWKpMjo+yddaay/YNNP7\nW2tvqarbZXgR/7VM9wS6bVaGlYG/aa391XjeV5L8XKZ74O843xS33VFr7bIkpyT5ufEJ9wlJzmqt\nvX3TdV7RWrt0gcxVu1+Sr2657z7ZWtsoAo7LsFL8/Cyn4FzYHMvc1FprH0vyC0n+0zJzF/TZJG9M\ncvI8Nx4f73+c5Edaa5eMZx+e4Y18kqS1duEimeNj4BlJ/muGF+wLWmtvnWfe0XGZb7n78wwrYhlv\n99Itlz8iyZ9lWDmZ9Lw9KesarbVzM3wzxSnLypzBsjIn5bwuyZ23fso3Z95TkvxOa+3jSTL+/btJ\nfnHOvK3L8wULzjerqzP8/z95m8t+OclTNoqA1tq/tNb+eIG862itvSzJXyX5P5aRN6Vl5y0zd1LG\na5I8LLnmteTKJJPW+7bNbK19I8MHj5ufSzbeWM4745OT/HJV3TnDOtD1PkHf4n5J/rm19t/Hmb4+\nZvxfSXbdGnnevKo6NUPh/6OttauWMd+Y875MuZ67yVuSbGzBdVKSP0jyqST3njFns7fPMceGw5N8\nbqMMG99TfCHJzyZ54qbzL22tTfOh9fXytpaKrbWvJvmlJN89lurzWPZj+plJ7jVu6fEDGdYP/rW9\nIslDNz40q2GLo+/KsMyclOTUJLeqqiOWkDert+XaZfTOST6Q5J9q2DrqW5LcMcl7MtsyPU3m5Uua\n7clJfnLTbe6b5JPjB4vz5P23DO/rfyrDsvP0Nv1GGDcIip/FPDPJxVX16qr691X1rVPc5mFJ/rK1\n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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "5fNheRv5bx-D", "colab_type": "text" }, "source": [ "## M) Query the rows with labels ```ND``` ##" ] }, { "cell_type": "code", "metadata": { "id": "CkN7p2q397KF", "colab_type": "code", "outputId": "8cf3c938-d0df-4d70-b54d-a8861532af05", "colab": { "base_uri": "https://localhost:8080/", "height": 34 } }, "source": [ "np.where( labels=='ND' )[0]\n" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([ 29, 81, 133, 185, 237, 289, 341, 393])" ] }, "metadata": { "tags": [] }, "execution_count": 141 } ] }, { "cell_type": "markdown", "metadata": { "id": "1fjl124Jb4sP", "colab_type": "text" }, "source": [ "## N) Reduce the data of 417-2 variables into 2 dimensions and visualize the groupings by ```region code``` ##" ] }, { "cell_type": "code", "metadata": { "id": "TypfTHLp8gTF", "colab_type": "code", "outputId": "97063e00-982c-430d-ebff-474f8bd9ff23", "colab": { "base_uri": "https://localhost:8080/", "height": 481 } }, "source": [ "grps=['AK', 'AL', 'AR', 'AZ']\n", "clrs=['r','g','b','m', 'c', 'k' ]\n", "\n", "fig,axes=plt.subplots(1,1, figsize=( 10, 6 ))\n", "data_pts=[]\n", "\n", "for i, c in enumerate( grps ): # finish list to include all 6 words here\n", " q = np.where( labels == c )[0] \n", " for qq in q:\n", " print( c, '(%.2f,%.2f)' %(cdata_embedded[qq,0], cdata_embedded[qq,1]), end=', ' )\n", " data_pts.append(qq)\n", " print('')\n", " plt.scatter( cdata_embedded[q,0], cdata_embedded[q,1], color=clrs[i], label=c )\n", " \n", " plt.legend() \n", "\n", "print( len(data_pts), 'data pts' )" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "AK (-30.69,-2.57), AK (-20.84,-18.21), AK (10.17,22.41), AK (-1.50,15.77), AK (-11.33,30.21), AK (23.56,-6.89), AK (18.77,-21.78), AK (4.67,-12.23), \n", "AL (-29.10,-1.08), AL (-21.90,-19.61), AL (8.11,21.61), AL (-0.82,15.76), AL (-13.13,30.82), AL (24.13,-7.03), AL (16.07,-19.60), AL (5.98,-12.54), \n", "AR (-28.59,-1.14), AR (-23.00,-20.38), AR (10.46,22.97), AR (-0.99,14.73), AR (-11.94,31.55), AR (22.85,-6.62), AR (16.28,-18.78), AR (11.37,-13.69), \n", "AZ (-29.09,1.12), AZ (-22.54,-18.83), AZ (8.61,21.38), AZ (-0.12,14.45), AZ (-11.77,30.64), AZ (22.79,-5.29), AZ (17.15,-14.86), AZ (6.55,-11.95), \n", "32 data pts\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] } ] }