From 6a8757911b8f01e35a4b6cf92511ffcdb5a0d6cb Mon Sep 17 00:00:00 2001 From: lyie28 Date: Fri, 17 Feb 2023 17:26:56 +0100 Subject: [PATCH 01/22] diabetes p1 --- docs/docs/how-to-guides/diabetes_p1.ipynb | 1367 +++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 1368 insertions(+) create mode 100644 docs/docs/how-to-guides/diabetes_p1.ipynb diff --git a/docs/docs/how-to-guides/diabetes_p1.ipynb b/docs/docs/how-to-guides/diabetes_p1.ipynb new file mode 100644 index 00000000..072b6b31 --- /dev/null +++ b/docs/docs/how-to-guides/diabetes_p1.ipynb @@ -0,0 +1,1367 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "jdvo0Bjb_G1c" + }, + "source": [ + "
\n", + "

Data exploration of diabetes hospital admissions: Part I

\n", + " \n", + " \"Open\n", + "
\n", + "______________________________________________________\n", + "\n", + "Despite major technological breakthroughs in cybersecurity and privacy in recent years, secure off-premises data science collaboration has remained out of reach. This is a major problem for the health sector which has so much to gain from the power of data but also so much at risk when it comes to patients' highly sensitive medical records.\n", + "\n", + "We are on a mission to make remote data science collaboration safe for the health sector. Using BastionLab, data owners can set strict access policies on datasets for collaborators, allowing them to run privacy-friendly queries and train and deploy ML models on datasets whilst blocking access to raw data.\n", + "\n", + "In this how-to guide, we will explore a dataset of diabetic patients admitted to hospital in the US over a ten year period. Diabetes is a disease that affects over 10% of the US population and can lead to serious health complications. The dataset contains 51 columns of data, including readmission to hospital, changes to medication and primary, secondary and terciary patient diagnoses.\n", + "\n", + "In part I of this two-part data exploration. We will see how the data owner can upload a dataset to BastionLab and how a data scientist can then connect to BastionLab and **clean the dataset**.\n", + "\n", + "But before we can do that, we first need to get everything set up!\n", + "\n", + "## Pre-requisites\n", + "___________________________________________\n", + "\n", + "### Installation and dataset\n", + "\n", + "In order to run this notebook, we need to:\n", + "- Ensure we have [Python3.7](https://www.python.org/downloads/) (or greater) and [Python Pip](https://pypi.org/project/pip/) installed\n", + "- Install [BastionLab](https://bastionlab.readthedocs.io/en/latest/docs/getting-started/installation/) and the [BastionLab server](https://pypi.org/project/bastionlab-server/0.3.7/) pip packages\n", + "- [Download the dataset](https://drive.google.com/file/d/1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI/view?usp=share_link) we will be using in this notebook.\n", + "\n", + "You can download the BastionLab pip packages and the dataset by running the following code block.\n", + "\n", + ">To find out about other ways you can install and run BastionLab, see our [Installation page](https://bastionlab.readthedocs.io/en/latest/docs/getting-started/installation/)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hK-HDaMI_G1j" + }, + "outputs": [], + "source": [ + "# installing BastionLab client & server packages\n", + "!pip install bastionlab\n", + "!pip install bastionlab_server\n", + "\n", + "# dowloading the dataset using Google Drive tool dgown\n", + "!pip install gdown\n", + "!pip install --upgrade --no-cache-dir gdown\n", + "!gdown --id \"1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NJ67chDB_G1l" + }, + "source": [ + "The dataset we are using for this how-to guide is based on the Diabetes 130-US hospitals for years 1999-2008 dataset. It contains 10 years of data on diabetes admissions from 130 US hospitals. It includes over 50 features representing patient and hospital outcomes.\n", + "\n", + ">For more detailed information on the dataset, you can check out the description and full dataset by following this [link](https://archive.ics.uci.edu/ml/datasets/diabetes+130-us+hospitals+for+years+1999-2008).\n", + "\n", + "However, this dataset had already been pre-processed before publication which stopped us from showing you some key data cleaning steps. We therefore made a few modifications to replace some pre-grouped data columns with randomly populated data. You can check out exactly how we did this using Polars [here](https://colab.research.google.com/drive/174EJvK8u8mGGWb6ypLH9SKaeRnX-pEou?usp=share_link). " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OjL01I5c_G1m" + }, + "source": [ + "## Data owner's POV\n", + "___________________________________________\n", + "\n", + "### Launching the server\n", + "\n", + "Let's start by putting ourselves in the shoes of the data owner.\n", + "\n", + "But before we can do anything more, the BastionLab server must be running.\n", + "\n", + "In production we recommend this is done using our Docker image, but for testing purposes you can use our `bastionlab_server` package, which removes the need for user authentication." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "A85GsYOi_G1o", + "outputId": "29d2505e-8106-4311-cba2-05d1ae6101ac" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BastionLab server (version 0.3.7) already installed\n", + "Libtorch (version 1.13.1) already installed\n", + "TLS certificates already generated\n", + "Bastionlab server is now running on port 50056\n" + ] + } + ], + "source": [ + "# launch bastionlab_server test package\n", + "import bastionlab_server\n", + "\n", + "srv = bastionlab_server.start()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IBWNyTnz_G1p" + }, + "source": [ + ">*For more details on how you can set up the server using our Docker image, check out our [Installation Tutorial](../getting-started/installation.md).*\n", + "\n", + "### Connecting to the server\n", + "Next, we will connect to the server in order to be able to upload the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "6zzV7xrs_G1q" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2023-02-17T16:18:15Z INFO bastionlab] Authentication is disabled.\n", + "[2023-02-17T16:18:15Z INFO bastionlab] Telemetry is enabled.\n", + "[2023-02-17T16:18:15Z INFO bastionlab] BastionLab server listening on 0.0.0.0:50056.\n", + "[2023-02-17T16:18:15Z INFO bastionlab] Server ready to take requests\n" + ] + } + ], + "source": [ + "# connecting to the server\n", + "from bastionlab import Connection\n", + "\n", + "connection = Connection(\"localhost\")\n", + "client = connection.client" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "K9DO7gVt_G1r" + }, + "source": [ + "### Creating a custom privacy policy\n", + "\n", + "We can now create a [custom access policy](https://bastionlab.readthedocs.io/en/latest/docs/tutorials/defining_policy_privacy/) for the dataset which determines how much access collaborators will get to the dataset. \n", + "\n", + "In this example, we create a policy with the following configuration:\n", + "\n", + "-> `Aggregation(min_agg_size=10):` Any data extracted from the dataset should be the result of an aggregation of at least ten rows.\n", + "\n", + "-> `unsafe_handling=Reject()`: Any attempted query which breaches this policy will be rejected by the server.\n", + "\n", + "-> `savable=True`: The data scientist can save changes made to the dataset in BastionLab (this will create a new dataset- it will not overwrite the original dataset).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "id": "mRJjgd1C_G1t" + }, + "outputs": [], + "source": [ + "from bastionlab.polars.policy import Policy, Aggregation, Reject\n", + "\n", + "# defining the dataset's privacy policy\n", + "policy = Policy(Aggregation(min_agg_size=10), unsafe_handling=Reject(), savable=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Q7HHSM3e_G1v" + }, + "source": [ + "### Uploading the dataset\n", + "\n", + "Now that the policy has been created, we can upload the dataset to the BastionLab server instance.\n", + "\n", + "Firstly, we need to convert our CSV file into a Polars DataFrame by using the Polars `read_csv` function, supplying the path to the CSV file as a string argument.\n", + "\n", + "Next, we use BastionLab's `client.polars.send_df` to upload the dataframe with our custom policy.\n", + "\n", + "Finally, we save the FetchableLazyFrame using the `save` method with no arguments. We can make a note of the FetchableLazyFrame's identifier to be shared with data scientists to help them to remotely access the FetchableLazyFrame!\n", + "\n", + ">Note we need to save FetchableLazyFrames to avoid them being lost when the server is stopped and restarted or crashes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "lkMIl0ar_G1w", + "outputId": "836022c7-273a-4f98-cc84-baf1721c3412" + }, + "outputs": [], + "source": [ + "import polars as pl\n", + "\n", + "# converting the dataset into a Polars dataframe\n", + "df = pl.read_csv(\"updated_diabetes_data.csv\")\n", + "\n", + "# uploading the dataframe, the custom privacy policy\n", + "# and the column we want to forbid to BastionLab's server\n", + "rdf = client.polars.send_df(df, policy=policy)\n", + "\n", + "# saving the RemoteLazyFrame\n", + "rdf.save()\n", + "# get and print out a copy of the RDF identifier string\n", + "ID = rdf.identifier\n", + "print(ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ywAyp-2y_G1y" + }, + "source": [ + "`send_df()` will return a FetchableLazyFrame instance, which we will work with directly from now on. \n", + "\n", + ">Note that we talk about two types of LazyFrames in BastionLab: `RemoteLazyFrames` and `FetchableLazyFrames`. \n", + "\n", + "A `RemoteLazyFrame` just means we have called some functions and not yet `collected` the results, which means the operations have not yet been run on the server-side. When we call `collect()` these operations are run server-side and the result of this is our `FetchableLazyFrame`!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YRC1y4uX_G10" + }, + "source": [ + "Let's finish off by testing what happens if we breach our security policy by trying to display an entire column from our dataset with the `collect().fetch()` methods. \n", + "\n", + ">*You can learn more about how to use both of those methods in [our quick tour](https://bastionlab.readthedocs.io/en/latest/docs/quick-tour/quick-tour/#running-queries).*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "C7j4vdDd_G10", + "outputId": "cfa18f9b-5606-4e38-ba96-b6bcbf4b44a7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[31mThe query has been rejected by the data owner.\u001b[37m\n" + ] + } + ], + "source": [ + "rdf.select(\"age\").collect().fetch()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x1Zu2YQi_G11" + }, + "source": [ + "Instead of getting back the results of our query, we see an error message: `The query has been rejected by the data owner.`\n", + "\n", + "We cannot view the output of the query because it does not aggregate at least 10 rows of data as specified in our privacy policy. It tries to print out individual rows instead!\n", + "\n", + "Now that the dataset has been uploaded, it's time for our data scientists to get working... \n", + "\n", + "The data owner can now connection their connection to the server." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mcM4pR6D_G11" + }, + "outputs": [], + "source": [ + "connection.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HJzNveFG_G13" + }, + "source": [ + "## Data scientist #1's POV\n", + "__________________________________________\n", + "\n", + "### Connecting to the dataset\n", + "\n", + "We'll now jump into the role of the data scientist responsible for cleaning the dataset for this data analysis project.\n", + "\n", + "We first need to connect to the `bastion_lab` server and get a FetchableLazyFrame instance of the dataset. We'll use' the `get_df()` method and supply it with the id shared with us by the data owner to do this.\n", + "\n", + "We store our FetchableLazyFrame in the `rdf` variable which we'll be working with from here on." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TT3mSjII_G13", + "outputId": "3e048fa0-5f0f-4244-f369-a9d87580b225" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "FetchableLazyFrame(identifier=0c7f2bcc-5afc-4a0a-b10f-24d796195045)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "connection = Connection(\"localhost\")\n", + "client = connection.client\n", + "\n", + "# selecting the FetchableLazyFrame(s) we'll be working with\n", + "rdf = client.polars.get_df(ID)\n", + "rdf" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AEFbeESX_G14" + }, + "source": [ + "Let's display the dataset's columns to confirm we are connected to the correct one." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "G-g8rOnj_G15", + "outputId": "8538d93f-bf36-456e-c028-90cd724dd829" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['encounter_id', 'patient_nbr', 'race', 'gender', 'age', 'weight', 'admission_type_id', 'discharge_disposition_id', 'admission_source_id', 'time_in_hospital', 'payer_code', 'medical_specialty', 'num_lab_procedures', 'num_procedures', 'num_medications', 'number_outpatient', 'number_emergency', 'number_inpatient', 'diag_1', 'diag_2', 'diag_3', 'number_diagnoses', 'max_glu_serum', 'A1Cresult', 'metformin', 'repaglinide', 'nateglinide', 'chlorpropamide', 'glimepiride', 'acetohexamide', 'glipizide', 'glyburide', 'tolbutamide', 'pioglitazone', 'rosiglitazone', 'acarbose', 'miglitol', 'troglitazone', 'tolazamide', 'examide', 'citoglipton', 'insulin', 'glyburide-metformin', 'glipizide-metformin', 'glimepiride-pioglitazone', 'metformin-rosiglitazone', 'metformin-pioglitazone', 'change', 'diabetesMed', 'readmitted']\n" + ] + } + ], + "source": [ + "print(rdf.columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "H55DTcKn_G15" + }, + "source": [ + "Everything is as expected! We can now start our data exploration. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CQC7tfaF_G15" + }, + "source": [ + "## Data cleaning\n", + "__________________________________________\n", + "\n", + "\n", + "### Dropping columns\n", + "You may have noticed, this dataset contains a lot of columns! This is great as it it gives us a wide choice of correlations to explore. However, we will not have time to explore all of them in this analysis! We can therefore drop the columns that we won't be using- either because they are irrelavant, or because they didn't lead us to the most interesting correlations for this analysis!\n", + "\n", + "We can do this by using the`drop` method, providing it with a list of the names of columns to be dropped. This is a RemoteLazyFrame method which corresponds directly to the [Polars drop() function](https://pola-rs.github.io/polars/py-polars/html/reference/lazyframe/api/polars.LazyFrame.drop.html#polars.LazyFrame.drop)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "s0NI6rTqOKWN" + }, + "outputs": [], + "source": [ + "# list of column names we wish to remove from our RemoteLazyFrame\n", + "to_drop = [\n", + " \"encounter_id\",\n", + " \"patient_nbr\",\n", + " \"weight\",\n", + " \"discharge_disposition_id\",\n", + " \"admission_source_id\",\n", + " \"time_in_hospital\",\n", + " \"payer_code\",\n", + " \"medical_specialty\",\n", + " \"num_lab_procedures\",\n", + " \"num_procedures\",\n", + " \"num_medications\",\n", + " \"number_outpatient\",\n", + " \"number_inpatient\",\n", + " \"number_diagnoses\",\n", + " \"diabetesMed\",\n", + "]\n", + "\n", + "# replace rdf with our updated RemoteLazyFrame with to_drop columns deleted\n", + "rdf = rdf.drop(to_drop)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vabmc_jjOQCo" + }, + "source": [ + "There are now 36 columns to work with intead of 51- this will make the RemoteLazyFrame a little easier to work with!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7ausY-PC_G16" + }, + "source": [ + "\n", + "### Checking for null values\n", + "\n", + "We now want to assess how many null values we have in each column. This will help us to know if we have enough data to draw meaningful conclusions from each column and gives us the chance to fill or delete null values if relevant.\n", + "\n", + "However, based on the description of the dataset shared with us by the data owner, we know that some column cells have been filled with '?' instead of being left blank.\n", + "\n", + "Before we can get an accurate picture of null values, we first need to replace all these '?' values with null values. We will do this by using [Polars .when().then().otherwise()` functions](https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.when.html). \n", + "\n", + "One final hurdle is that we can only search and replace '?' strings in columns containing strings which will have the 'Utf8' datatype- otherwise an error will be produced. We must therefore only apply our search and replace operation to string columns!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "F2KwhZB_fTC3" + }, + "outputs": [], + "source": [ + "# step one: getting a list of all Utf8/string columns\n", + "selects = []\n", + "for x in rdf.columns:\n", + " if rdf.select(x).dtypes == [pl.datatypes.Utf8]:\n", + " selects.append(x)\n", + "\n", + "# step two: we replace all '? cells in these columns with null values\n", + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(x) == \"?\").then(None).otherwise(pl.col(x)).keep_name()\n", + " for x in selects\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c1Frpi9GUtdW" + }, + "source": [ + "In step two, we use the Polars `with_columns` function to add our new columns with null values instead of question marks to our RemoteLazyFrame. By using the `keep_name` function, these columns keep their original column name and therefore replace the original columns in the dataset. We save the result as `rdf`, storing the updated version of the dataset in our `rdf` variable." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vMMX8JZnKitA" + }, + "source": [ + "Now that this is done, we can go ahead and calculate how many null values each column contains.\n", + "\n", + "We do this by iterating over all the columns and getting a percentage of the `sum` of all the value that return `True` to the `is_null` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SAqqUz6I_G16" + }, + "outputs": [], + "source": [ + "# getting every columns percentage of null values in the RemoteLazyFrame\n", + "percent_missing = rdf.select(\n", + " [\n", + " pl.all().is_null().sum() * 100 / pl.all().count(),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3uMcNqVZWhdN" + }, + "source": [ + "We can then view the percentage of null values for each column as a two-column list by using Polars `melt` function to flip the query results from a 2 row by 5 column grid, to a 2 column by 5 row grid. We use the `sort` function to show the columns in order from the column with the highest percentage of null values to the lowest.\n", + "\n", + "Finally, we remove any columns with no null values from our output since they are not of interest to us here." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 285 + }, + "id": "Pzz5qvSJWd2V", + "outputId": "26229368-72d0-4630-f8e2-5a12f480f297" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (7, 2)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "column name\n", + "\n", + "null values (%)\n", + "
\n", + "str\n", + "\n", + "f64\n", + "
\n", + ""max_glu_serum"\n", + "\n", + "94.746772\n", + "
\n", + ""A1Cresult"\n", + "\n", + "83.277322\n", + "
\n", + ""readmitted"\n", + "\n", + "53.911916\n", + "
\n", + ""race"\n", + "\n", + "2.233555\n", + "
\n", + ""diag_3"\n", + "\n", + "1.398306\n", + "
\n", + ""diag_2"\n", + "\n", + "0.351787\n", + "
\n", + ""diag_1"\n", + "\n", + "0.020636\n", + "
\n", + "
" + ], + "text/plain": [ + "shape: (7, 2)\n", + "┌───────────────┬─────────────────┐\n", + "│ column name ┆ null values (%) │\n", + "│ --- ┆ --- │\n", + "│ str ┆ f64 │\n", + "╞═══════════════╪═════════════════╡\n", + "│ max_glu_serum ┆ 94.746772 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ A1Cresult ┆ 83.277322 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ readmitted ┆ 53.911916 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ race ┆ 2.233555 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ diag_3 ┆ 1.398306 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ diag_2 ┆ 0.351787 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ diag_1 ┆ 0.020636 │\n", + "└───────────────┴─────────────────┘" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# melt table to a two-column table with the column name 'column' and corresponding percetage of null values 'null values', sort in descending order and display\n", + "percent_missing = percent_missing.melt(\n", + " variable_name=\"column name\",\n", + " value_name=\"null values (%)\",\n", + ").sort(pl.col(\"null values (%)\"), reverse=True)\n", + "\n", + "# filter out columns with no null values and display\n", + "percent_missing.filter(pl.col(\"null values (%)\") > 0).collect().fetch()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4n0jnBPyYLjf" + }, + "source": [ + "There are several strategies for dealing with null values such as deleting these rows from the dataset with the `drop_nulls` method or filling null values with the `fill_null` method. But in our case, we are just happy to have visibility over which columns including null values and to what extent so that we can handle and analyse these columns with this in mind." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-WUugovwve2c" + }, + "source": [ + "### Grouping data: ICD-9 medical codes\n", + "Grouping data is going to be the largest and most crucial task in this data cleaning job. This is a dataset with a low of wide-ranging numerical values which need to be grouped so that our data analysts can gain meaningul insights.\n", + "\n", + "Let's start with our diagnoses columns: `diag_1`, `diag_2` and `diag_3`.\n", + "\n", + "These columns contain the primary, secondary and terciary diagnoses given to patients. These diagnoses are given using [ICD-9 medical codes](https://en.wikipedia.org/wiki/List_of_ICD-9_codes) which are three digit codes ranging from 1 to 1000, as well as E800–E999 codes and V01–V82 codes.\n", + "\n", + "By grabbing all the unique values in the `diag_1` column and counting them, we can see that we have over 700 different values in this column!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "id": "7pVHpmLWj6_w", + "outputId": "c7d50a9f-f919-4893-a1f4-50b1ba7d20c5" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (1, 1)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "diag_1\n", + "
\n", + "u32\n", + "
\n", + "717\n", + "
\n", + "
" + ], + "text/plain": [ + "shape: (1, 1)\n", + "┌────────┐\n", + "│ diag_1 │\n", + "│ --- │\n", + "│ u32 │\n", + "╞════════╡\n", + "│ 717 │\n", + "└────────┘" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tmp = rdf.select(\"diag_1\").unique()\n", + "tmp.select(pl.col(\"diag_1\").count()).collect().fetch()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cPsmfkBpkPCv" + }, + "source": [ + "Standard groupings of these codes have already been designed. What we want to do is replace the hundreds of unique codes we have in our our diagnoses columns with these groupings!\n", + "\n", + "To do this, we will again use Polars `when().then().otherwise()` functions to perform a find and replace operation. We will use `when()` to check if the codes in each cell are either E or V codes or fall within a certain numerical range.\n", + "\n", + "However, these diagnoses columns are currently string columns, since the E and V codes are not entirely numerical. This is problematic since we cannot perform numerical comparisons on these cells and we cannot convert the column type to a numerical one because of these 'E' and 'V' values!\n", + "\n", + "We will solve this problem in three steps:\n", + "\n", + "1) We will find and replace all E codes with a \"-1\" value and V codes with a \"-2\" value.\n", + "\n", + "2) We will `select()` our columns and `cast()` all values in these columns to float values.\n", + "\n", + "3) We will perform the find and replace operation to group all ICD-9 codes into their associated group- of which there are 17, plus E codes and V codes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xPNFpZ7lW8qR" + }, + "outputs": [], + "source": [ + "# iterate over the three diagnoses columns\n", + "for col in [\"diag_1\", \"diag_2\", \"diag_3\"]:\n", + " # step one: replace troublesome E and V codes with temporary -1 and -2 codes\n", + " rdf = rdf.with_columns(\n", + " [\n", + " pl.when(\n", + " pl.col(col).str.starts_with(\"E\")\n", + " ) # use Polars str.starts_with method to identify E codes\n", + " .then(\"-1\")\n", + " .when(pl.col(col).str.starts_with(\"V\"))\n", + " .then(\"-2\")\n", + " .otherwise(pl.col(col))\n", + " .keep_name()\n", + " ]\n", + " )\n", + "\n", + " # step two: cast all values in column to float values\n", + " rdf = rdf.with_columns([pl.col(col).cast(pl.Float64)])\n", + "\n", + " # step three: replace all codes with their corresponding group\n", + " rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(col) >= 800)\n", + " .then(\"injury and poisoning\")\n", + " .when(pl.col(col) >= 780)\n", + " .then(\"symptoms, signs & ill-defined\")\n", + " .when(pl.col(col) >= 760)\n", + " .then(\"perinatal\")\n", + " .when(pl.col(col) >= 740)\n", + " .then(\"congenital anomalies\")\n", + " .when(pl.col(col) >= 710)\n", + " .then(\"musculoskeletal & connective tissue\")\n", + " .when(pl.col(col) >= 680)\n", + " .then(\"skin\")\n", + " .when(pl.col(col) >= 630)\n", + " .then(\"pregnancy, childbirth and peurperium\")\n", + " .when(pl.col(col) >= 580)\n", + " .then(\"genitourinary\")\n", + " .when(pl.col(col) >= 520)\n", + " .then(\"digestive\")\n", + " .when(pl.col(col) >= 460)\n", + " .then(\"respiratory\")\n", + " .when(pl.col(col) >= 390)\n", + " .then(\"circulatory\")\n", + " .when(pl.col(col) >= 320)\n", + " .then(\"nervous system and sense organs\")\n", + " .when(pl.col(col) >= 290)\n", + " .then(\"mental disorders\")\n", + " .when(pl.col(col) >= 280)\n", + " .then(\"blood and blood-forming organs\")\n", + " .when(pl.col(col) >= 240)\n", + " .then(\"neoplasms\")\n", + " .when(pl.col(col) >= 140)\n", + " .then(\"endocrine, nutritional, metabolic and immunity\")\n", + " .when(pl.col(col) >= 1)\n", + " .then(\"infectious and parasitic\")\n", + " .when(pl.col(col) == -1)\n", + " .then(\"E code (injury\")\n", + " .when(pl.col(col) == -2)\n", + " .then(\"V code (other)\")\n", + " .otherwise(\n", + " pl.col(col)\n", + " ) # otherwise (null values) keep original value from the column\n", + " .alias(\n", + " col\n", + " ) # give resulting column same name as previously- therefore replacing old columns\n", + " ]\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "P1MquUrNlXDO" + }, + "source": [ + "By performing the same query as previously to count `diag_1`'s unique values, we see there is now a much more manageable 19 labels in our data column! This will be similar for the `diag_2` and `diag_3` columns." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "id": "YfC9CmWWdu0n", + "outputId": "c81284d2-8e09-49b6-f411-512da2421902" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (1, 1)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "diag_1\n", + "
\n", + "u32\n", + "
\n", + "19\n", + "
\n", + "
" + ], + "text/plain": [ + "shape: (1, 1)\n", + "┌────────┐\n", + "│ diag_1 │\n", + "│ --- │\n", + "│ u32 │\n", + "╞════════╡\n", + "│ 19 │\n", + "└────────┘" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tmp = rdf.select(\"diag_1\").unique()\n", + "tmp.select(pl.col(\"diag_1\").count()).collect().fetch()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BvdGu7GmsZVu" + }, + "source": [ + "### Grouping data: A1C, max glucose levels and readmittance\n", + "\n", + "We want to group together data in another three other columns using the same `.then().when().otherwise()` methods.\n", + "\n", + "The first two are `A1Cresult`, which contains patients' HbA1c level, and `max_glu_serum`, which contains their blood glucose level. We want to group these into `very high`, `high`, `normal` groups based on levels defined in our project brief.\n", + "\n", + "These columns are both currently string columns, so we will also need to convert them to float values in order to perform numerical comparisons on them." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FgyrnPAlsZ0u" + }, + "outputs": [], + "source": [ + "# cast `max_glu_serum` and `A1Cresult` columns to float values\n", + "rdf = rdf.with_columns(\n", + " [pl.col(\"max_glu_serum\").cast(pl.Float64), pl.col(\"A1Cresult\").cast(pl.Float64)]\n", + ")\n", + "\n", + "# group values in A1Cresult column\n", + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(\"A1Cresult\") >= 8)\n", + " .then(\"very high\")\n", + " .when(pl.col(\"A1Cresult\") >= 7)\n", + " .then(\"high\")\n", + " .when(pl.col(\"A1Cresult\") >= 0)\n", + " .then(\"normal\")\n", + " .otherwise(pl.col(\"A1Cresult\"))\n", + " .keep_name()\n", + " ]\n", + ")\n", + "\n", + "# group values in max_glu_serum column\n", + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(\"max_glu_serum\") >= 300)\n", + " .then(\"very high\")\n", + " .when(pl.col(\"max_glu_serum\") >= 200)\n", + " .then(\"high\")\n", + " .when(pl.col(\"max_glu_serum\") >= 0)\n", + " .then(\"normal\")\n", + " .otherwise(pl.col(\"max_glu_serum\"))\n", + " .keep_name()\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Buu2nja5w6Db" + }, + "source": [ + "The final column we want to group is the `readmitted` column which records the number of days before any further re-hospitalization linked to the patients' diabetic condition.\n", + "\n", + "We will group this column into `short-term` and `long-term` and `n/a` (not applicable) groups.\n", + "\n", + "Simiar to in previous examples, we must first convert values in this column from strings to integer values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9cca9DhSw6We" + }, + "outputs": [], + "source": [ + "# cast readmitted column to integer values\n", + "rdf = rdf.with_columns([pl.col(\"readmitted\").cast(pl.Int64)])\n", + "\n", + "# group values\n", + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(\"readmitted\") < 31)\n", + " .then(\"short-term\")\n", + " .when(pl.col(\"readmitted\") >= 31)\n", + " .then(\"long-term\")\n", + " .otherwise(\"n/a\")\n", + " .keep_name()\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kuwxAGYBoOQJ" + }, + "source": [ + "### Grouping data: binning ages\n", + "The next grouping task we will perform is to group ages into intervals of 10 years. We do this both to increase data privacy and to more easily draw correlations linked to broader age groups.\n", + "\n", + "We won't need to perform an `when().then().otherwise()` query here since BastionLab has its own `ApplyBins` tool.\n", + "\n", + "`ApplyBins` is a PyTorch module and the grouping of numbers takes place in its `forward` function. We can pass PyTorch modules to BastionLab's `apply_udf` function which will apply the `forward` function to any specified columns.\n", + "\n", + "All in all, we just three steps to bin our age column data:\n", + "\n", + "1) We import `ApplyBins` from `bastionlab.polars.utils`.\n", + "1) We instantiate our `ApplyBins` PyTorch module class with our bins interval given as the only argument.\n", + "2) We use `apply_udf`, providing a list of the column we want to modify and the PyTorch module, `ApplyBins`, that we wish to apply to these columns." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "2EC3smnWc06Q" + }, + "outputs": [], + "source": [ + "from bastionlab.polars.utils import ApplyBins\n", + "\n", + "# get an instance of ApplyBins module which will bin data into groups of 10\n", + "model = ApplyBins(10)\n", + "\n", + "# apply bins to \"age\" column\n", + "rdf = rdf.apply_udf([\"age\"], model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1pOQYPYSsVns" + }, + "source": [ + "> Note, you can create your own custom PyTorch modules and apply them to columns using `apply_udf`. This is BastionLab's way of allowing you to apply custom functions on datasets, whilst restricting what you can do for security reasons. Functionality like `lambda`, `map` and `apply` are blocked by BastionLab as they are too permissive and could be misused." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gYRVmqTitckT" + }, + "source": [ + "### Adding columns\n", + "\n", + "Up until this point we have been using the `.when().then().otherwise()` and `with_columns` methods to make changes to existing columns, but by providing a new column name to the `alias` method, we can create a new column.\n", + "\n", + "In the following example, we will create a `is_readmitted` column which will store `False` for all the \"n/a\" values in our original `readmitted` column and `True` for any other values. This will allow us to quickly query whether certain groups of data have been readmitted or not!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "B2JGdBhmteAz" + }, + "outputs": [], + "source": [ + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(\"readmitted\") == \"n/a\")\n", + " .then(False)\n", + " .otherwise(True)\n", + " .alias(\n", + " \"is_readmitted\"\n", + " ) # ending the .when().then().otherwise() pattern with .alias() allows us to provide a new column name\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "edoL2_uy_G19" + }, + "source": [ + "### Converting column types\n", + "\n", + "We have already seen examples where we have `explicity` converted the datatype of our columns using the `cast` method. Here we will `implicity` convert the datatype by replacing the \"yes\" and \"no\" values in our `change` column, which represent whether a patient's medication has been changed, to a boolean True or False value. \n", + "\n", + "The datatype of this column will be changed automatically by this operation as we can see below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fMhSrD8__G19", + "outputId": "5230be79-58b9-4318-c5bb-052cd03e35d1" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[polars.datatypes.Utf8]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# print out initial datatype of \"change\" column\n", + "\n", + "rdf.select(\"change\").dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hYWJ9FB70mcM", + "outputId": "cc2736c7-e4be-48dd-805d-352ba0d6196e" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[polars.datatypes.Boolean]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# replaces Yes/No values with True/False\n", + "rdf = rdf.with_columns(\n", + " [pl.when(pl.col(\"change\") == \"No\").then(False).otherwise(True).keep_name()]\n", + ")\n", + "\n", + "# print out datatype of column post find and replace operation\n", + "rdf.select(\"change\").dtypes" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CYS-Mkl1tD8t" + }, + "source": [ + "### Saving our RemoteLazyFrame and disconnecting\n", + "\n", + "Our dataframe is all clean and ready for the next step: data analysis/ visualization. Data scientist #1 is going to be reassigned to another task. They will save their cleaned RemoteLazyFrame and make a note of the identifier to share with data scientist #2.\n", + "\n", + "We need to perform `collect()` before saving or getting an identifier for our RemoteLazyFrame since the `save` method and `identifier` attribute are only available for FetchableLazyFrames.\n", + "\n", + ">Note, the data owner must have set the `savable` option to `True` when uploading the dataframe for this operation to be possible!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "id": "DWu6ToX53bm9", + "outputId": "3063c7ae-df03-4b74-d7a3-e2ceffc56083" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'49b66d7a-6c80-45fb-8278-9992c91f8666'" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rdf.collect().save()\n", + "saved_identifier = rdf.collect().identifier\n", + "saved_identifier" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NgkiBinG6DJ2" + }, + "source": [ + "They can now close their connection to the BastionLab server." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qoiADM1W6OC_" + }, + "outputs": [], + "source": [ + "connection.close()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "base", + "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.9.13 (main, Aug 25 2022, 23:26:10) \n[GCC 11.2.0]" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "d130ca42b532f14c740c9405384e6a25814bad609bad1a40b3b3f26954036080" + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/mkdocs.yml b/mkdocs.yml index 7bd70590..f2d8b068 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -107,6 +107,7 @@ nav: - Data exploration: - Covid-19 cleaning and exploration: "docs/how-to-guides/covid_cleaning_exploration.ipynb" - Fraud detection cleaning and exploration: "docs/how-to-guides/fraud_detection.ipynb" + - Diabetes cleaning and exploration- part one: "docs/how-to-guides/diabetes_p1.ipynb" - Deep learning: - Fine Tuning Distilbert on BastionLab: "docs/how-to-guides/distilbert_example_notebook.ipynb" - 🛠️ API reference: "docs/resources/bastionlab/index.html" From 9bf86e736c5a6c1d53c2e47ba8500ba2226677f7 Mon Sep 17 00:00:00 2001 From: lyie28 Date: Wed, 22 Feb 2023 09:25:27 +0100 Subject: [PATCH 02/22] Updated diabetes --- .../how-to-guides/diabetes_exploration.ipynb | 2753 +++++++++++++++++ mkdocs.yml | 2 +- 2 files changed, 2754 insertions(+), 1 deletion(-) create mode 100644 docs/docs/how-to-guides/diabetes_exploration.ipynb diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb new file mode 100644 index 00000000..29dfaab5 --- /dev/null +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -0,0 +1,2753 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "jdvo0Bjb_G1c" + }, + "source": [ + "
\n", + "

Data exploration of diabetes hospital admissions: Part I

\n", + " \n", + " \"Open\n", + "
\n", + "______________________________________________________\n", + "\n", + "Despite major technological breakthroughs in cybersecurity and privacy in recent years, secure off-premises data science collaboration has remained out of reach. This is a major problem for the health sector which has so much to gain from the power of data but also so much at risk when it comes to patients' highly sensitive medical records.\n", + "\n", + "We are on a mission to make remote data science collaboration safe for the health sector. Using BastionLab, data owners can set strict access policies on datasets for collaborators, allowing them to run privacy-friendly queries and train and deploy ML models on datasets whilst blocking access to raw data.\n", + "\n", + "In this how-to guide, we will explore a dataset of diabetic patients admitted to hospital in the US over a ten year period. Diabetes is a disease that affects over 10% of the US population and can lead to serious health complications. The dataset contains 51 columns of data, including readmission to hospital, changes to medication and primary, secondary and terciary patient diagnoses.\n", + "\n", + "In part I of this two-part data exploration. We will see how the data owner can upload a dataset to BastionLab and how a data scientist can then connect to BastionLab and **clean the dataset**.\n", + "\n", + "But before we can do that, we first need to get everything set up!\n", + "\n", + "## Pre-requisites\n", + "___________________________________________\n", + "\n", + "### Installation and dataset\n", + "\n", + "In order to run this notebook, we need to:\n", + "- Ensure we have [Python3.7](https://www.python.org/downloads/) (or greater) and [Python Pip](https://pypi.org/project/pip/) installed\n", + "- Install [BastionLab](https://bastionlab.readthedocs.io/en/latest/docs/getting-started/installation/) and the [BastionLab server](https://pypi.org/project/bastionlab-server/0.3.7/) pip packages\n", + "- [Download the dataset](https://drive.google.com/file/d/1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI/view?usp=share_link) we will be using in this notebook.\n", + "\n", + "You can download the BastionLab pip packages and the dataset by running the following code block.\n", + "\n", + ">To find out about other ways you can install and run BastionLab, see our [Installation page](https://bastionlab.readthedocs.io/en/latest/docs/getting-started/installation/)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hK-HDaMI_G1j" + }, + "outputs": [], + "source": [ + "# installing BastionLab client & server packages\n", + "!pip install bastionlab\n", + "!pip install bastionlab_server\n", + "\n", + "# dowloading the dataset using Google Drive tool dgown\n", + "!pip install gdown\n", + "!pip install --upgrade --no-cache-dir gdown\n", + "!gdown \"1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NJ67chDB_G1l" + }, + "source": [ + "The dataset we are using for this how-to guide is based on the Diabetes 130-US hospitals for years 1999-2008 dataset. It contains 10 years of data on diabetes admissions from 130 US hospitals. It includes over 50 features representing patient and hospital outcomes.\n", + "\n", + ">For more detailed information on the dataset, you can check out the description and full dataset by following this [link](https://archive.ics.uci.edu/ml/datasets/diabetes+130-us+hospitals+for+years+1999-2008).\n", + "\n", + "However, this dataset had already been pre-processed before publication which stopped us from showing you some key data cleaning steps. We therefore made a few modifications to replace some pre-grouped data columns with randomly populated data. You can check out exactly how we did this using Polars [here](https://colab.research.google.com/drive/174EJvK8u8mGGWb6ypLH9SKaeRnX-pEou?usp=share_link). " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OjL01I5c_G1m" + }, + "source": [ + "## Data owner's POV\n", + "___________________________________________\n", + "\n", + "### Launching the server\n", + "\n", + "Let's start by putting ourselves in the shoes of the data owner.\n", + "\n", + "But before we can do anything more, the BastionLab server must be running.\n", + "\n", + "In production we recommend this is done using our Docker image, but for testing purposes you can use our `bastionlab_server` package, which removes the need for user authentication." + ] + }, + { + "cell_type": "code", + "execution_count": 193, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "A85GsYOi_G1o", + "outputId": "97b964bd-61b6-4cc6-e5e7-b9f2a2587bd7" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "BastionLab server (version 0.3.7) already installed\n", + "Libtorch (version 1.13.1) already installed\n", + "TLS certificates already generated\n", + "Bastionlab server is now running on port 50056\n" + ] + } + ], + "source": [ + "# launch bastionlab_server test package\n", + "import bastionlab_server\n", + "\n", + "srv = bastionlab_server.start()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IBWNyTnz_G1p" + }, + "source": [ + ">*For more details on how you can set up the server using our Docker image, check out our [Installation Tutorial](../getting-started/installation.md).*\n", + "\n", + "### Connecting to the server\n", + "Next, we will connect to the server in order to be able to upload the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": { + "id": "6zzV7xrs_G1q" + }, + "outputs": [], + "source": [ + "# connecting to the server\n", + "from bastionlab import Connection\n", + "\n", + "connection = Connection(\"localhost\")\n", + "client = connection.client" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "K9DO7gVt_G1r" + }, + "source": [ + "### Creating a custom privacy policy\n", + "\n", + "We can now create a [custom access policy](https://bastionlab.readthedocs.io/en/latest/docs/tutorials/defining_policy_privacy/) for the dataset which determines how much access collaborators will get to the dataset. \n", + "\n", + "In this example, we create a policy with the following configuration:\n", + "\n", + "-> `Aggregation(min_agg_size=10):` Any data extracted from the dataset should be the result of an aggregation of at least ten rows.\n", + "\n", + "-> `unsafe_handling=Reject()`: Any attempted query which breaches this policy will be rejected by the server.\n", + "\n", + "-> `savable=True`: The data scientist can save changes made to the dataset in BastionLab (this will create a new dataset- it will not overwrite the original dataset).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "metadata": { + "id": "mRJjgd1C_G1t" + }, + "outputs": [], + "source": [ + "from bastionlab.polars.policy import Policy, Aggregation, Reject\n", + "\n", + "# defining the dataset's privacy policy\n", + "policy = Policy(Aggregation(min_agg_size=10), unsafe_handling=Reject(), savable=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Q7HHSM3e_G1v" + }, + "source": [ + "### Uploading the dataset\n", + "\n", + "Now that the policy has been created, we can upload the dataset to the BastionLab server instance.\n", + "\n", + "Firstly, we need to convert our CSV file into a Polars DataFrame by using the Polars `read_csv` function, supplying the path to the CSV file as a string argument.\n", + "\n", + "Next, we use BastionLab's `client.polars.send_df` to upload the dataframe with our custom policy.\n", + "\n", + "Finally, we save the FetchableLazyFrame using the `save` method with no arguments. We can make a note of the FetchableLazyFrame's identifier to be shared with data scientists to help them to remotely access the FetchableLazyFrame!\n", + "\n", + ">Note we need to save FetchableLazyFrames to avoid them being lost when the server is stopped and restarted or crashes." + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "lkMIl0ar_G1w", + "outputId": "d8505f8e-5853-4adf-97f5-d6105db30761" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "63c8152d-f5af-41ec-b22c-aea51a8465b5\n" + ] + } + ], + "source": [ + "import polars as pl\n", + "\n", + "# converting the dataset into a Polars dataframe\n", + "df = pl.read_csv(\"updated_diabetes_data.csv\")\n", + "\n", + "# uploading the dataframe, the custom privacy policy\n", + "# and the column we want to forbid to BastionLab's server\n", + "rdf = client.polars.send_df(df, policy=policy)\n", + "\n", + "# saving the FetchableLazyFrame\n", + "rdf.save()\n", + "# get and print out a copy of the RDF identifier string\n", + "ID = rdf.identifier\n", + "print(ID)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ywAyp-2y_G1y" + }, + "source": [ + "`send_df()` will return a FetchableLazyFrame instance, which we will work with directly from now on. \n", + "\n", + ">Note that we talk about two types of LazyFrames in BastionLab: `RemoteLazyFrames` and `FetchableLazyFrames`. \n", + "\n", + "> In BastionLab, when we run a query, it is not immediately executed. Like with Polar's LazyFrames, pending queries are only executed when we call `collect`. `FetchableLazyFrames` are BastionLab's remote lazy frames when there are no pending queries to run, either because we have just uploaded or got the dataframe using `get_df` or because we have already ran `collect` after our latest query. To display these lazy frames we call the `fetch` method, which will verify that the data frame is safe to display, i.e. is it the result of a safe aggregated query as specified in the privacy policy.\n", + "\n", + "> A `RemoteLazyFrame` is just a `FetchableLazyFrame` with pending queries still to run (as they have not yet been `collected`). When we call `collect()` these operations are run server-side and the result of this is our `FetchableLazyFrame`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YRC1y4uX_G10" + }, + "source": [ + "Let's finish off by testing what happens if we breach our security policy by trying to display an entire column from our dataset with the `collect().fetch()` methods. \n", + "\n", + ">*You can learn more about how to use both of those methods in [our quick tour](https://bastionlab.readthedocs.io/en/latest/docs/quick-tour/quick-tour/#running-queries).*" + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "metadata": { + "id": "C7j4vdDd_G10", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "7941b960-a0e4-4e9d-f0a4-13ef5c9ba296" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[31mThe query has been rejected by the data owner.\u001b[37m\n" + ] + } + ], + "source": [ + "rdf.select(\"age\").collect().fetch()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x1Zu2YQi_G11" + }, + "source": [ + "Instead of getting back the results of our query, we see an error message: `The query has been rejected by the data owner.`\n", + "\n", + "We cannot view the output of the query because it does not aggregate at least 10 rows of data as specified in our privacy policy. It tries to print out individual rows instead!\n", + "\n", + "Now that the dataset has been uploaded, it's time for our data scientists to get working... \n", + "\n", + "The data owner can now connection their connection to the server." + ] + }, + { + "cell_type": "code", + "execution_count": 198, + "metadata": { + "id": "mcM4pR6D_G11" + }, + "outputs": [], + "source": [ + "connection.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HJzNveFG_G13" + }, + "source": [ + "## Data scientist #1's POV\n", + "__________________________________________\n", + "\n", + "### Connecting to the dataset\n", + "\n", + "We'll now jump into the role of the data scientist responsible for cleaning the dataset for this data analysis project.\n", + "\n", + "We first need to connect to the `bastion_lab` server and get a FetchableLazyFrame instance of the dataset. We'll use' the `get_df()` method and supply it with the id shared with us by the data owner to do this.\n", + "\n", + "We store our FetchableLazyFrame in the `rdf` variable which we'll be working with from here on." + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "metadata": { + "id": "TT3mSjII_G13", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "4a463355-2753-40d6-ce62-a2c8fa30c63a" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "FetchableLazyFrame(identifier=63c8152d-f5af-41ec-b22c-aea51a8465b5)" + ] + }, + "metadata": {}, + "execution_count": 199 + } + ], + "source": [ + "connection = Connection(\"localhost\")\n", + "client = connection.client\n", + "\n", + "# selecting the FetchableLazyFrame(s) we'll be working with\n", + "rdf = client.polars.get_df(ID)\n", + "rdf" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AEFbeESX_G14" + }, + "source": [ + "Let's display the dataset's columns to confirm we are connected to the correct one." + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "metadata": { + "id": "G-g8rOnj_G15", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "797dedc6-f4c5-4bb7-8830-3c2b8295fbbc" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "['encounter_id', 'patient_nbr', 'race', 'gender', 'age', 'weight', 'admission_type_id', 'discharge_disposition_id', 'admission_source_id', 'time_in_hospital', 'payer_code', 'medical_specialty', 'num_lab_procedures', 'num_procedures', 'num_medications', 'number_outpatient', 'number_emergency', 'number_inpatient', 'diag_1', 'diag_2', 'diag_3', 'number_diagnoses', 'max_glu_serum', 'A1Cresult', 'metformin', 'repaglinide', 'nateglinide', 'chlorpropamide', 'glimepiride', 'acetohexamide', 'glipizide', 'glyburide', 'tolbutamide', 'pioglitazone', 'rosiglitazone', 'acarbose', 'miglitol', 'troglitazone', 'tolazamide', 'examide', 'citoglipton', 'insulin', 'glyburide-metformin', 'glipizide-metformin', 'glimepiride-pioglitazone', 'metformin-rosiglitazone', 'metformin-pioglitazone', 'change', 'diabetesMed', 'readmitted']\n" + ] + } + ], + "source": [ + "print(rdf.columns)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "H55DTcKn_G15" + }, + "source": [ + "Everything is as expected! We can now start our data exploration. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CQC7tfaF_G15" + }, + "source": [ + "## Data cleaning\n", + "__________________________________________\n", + "\n", + "\n", + "### Dropping columns\n", + "You may have noticed, this dataset contains a lot of columns! This is great as it it gives us a wide choice of correlations to explore. However, we will not have time to explore all of them in this analysis! We can therefore drop the columns that we won't be using- either because they are irrelavant, or because they didn't lead us to the most interesting correlations for this analysis!\n", + "\n", + "We can do this by using the`drop` method, providing it with a list of the names of columns to be dropped. This is a RemoteLazyFrame method which corresponds directly to the [Polars drop() function](https://pola-rs.github.io/polars/py-polars/html/reference/lazyframe/api/polars.LazyFrame.drop.html#polars.LazyFrame.drop)." + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "metadata": { + "id": "s0NI6rTqOKWN" + }, + "outputs": [], + "source": [ + "# list of column names we wish to remove from our RemoteLazyFrame\n", + "to_drop = [\n", + " \"encounter_id\",\n", + " \"patient_nbr\",\n", + " \"weight\",\n", + " \"discharge_disposition_id\",\n", + " \"admission_source_id\",\n", + " \"time_in_hospital\",\n", + " \"payer_code\",\n", + " \"medical_specialty\",\n", + " \"num_lab_procedures\",\n", + " \"num_procedures\",\n", + " \"num_medications\",\n", + " \"number_outpatient\",\n", + " \"number_inpatient\",\n", + " \"number_diagnoses\",\n", + " \"diabetesMed\",\n", + "]\n", + "\n", + "# replace rdf with our updated RemoteLazyFrame with to_drop columns deleted\n", + "rdf = rdf.drop(to_drop)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vabmc_jjOQCo" + }, + "source": [ + "There are now 36 columns to work with intead of 51- this will make the RemoteLazyFrame a little easier to work with!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7ausY-PC_G16" + }, + "source": [ + "\n", + "### Checking for null values\n", + "\n", + "We now want to assess how many null values we have in each column. This will help us to know if we have enough data to draw meaningful conclusions from each column and gives us the chance to fill or delete null values if relevant.\n", + "\n", + "However, based on the description of the dataset shared with us by the data owner, we know that some column cells have been filled with '?' instead of being left blank.\n", + "\n", + "Before we can get an accurate picture of null values, we first need to replace all these '?' values with null values. We will do this by using [Polars .when().then().otherwise()` functions](https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.when.html). \n", + "\n", + "One final hurdle is that we can only search and replace '?' strings in columns with the 'Utf8' (string) datatype- otherwise an error will be produced. We must therefore firstly grab pl.Utf8 columns only and apply our search and replace operation to these strings!" + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "metadata": { + "id": "F2KwhZB_fTC3" + }, + "outputs": [], + "source": [ + "# step one: getting a list of all Utf8/string columns\n", + "selects = rdf.select(pl.col(pl.Utf8)).columns\n", + "\n", + "# step two: we replace all '? cells in these columns with null values\n", + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(x) == \"?\").then(None).otherwise(pl.col(x)).keep_name()\n", + " for x in selects\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c1Frpi9GUtdW" + }, + "source": [ + "In step two, we use the Polars `with_columns` function to add our new columns with null values instead of question marks to our RemoteLazyFrame. By using the `keep_name` function, these columns keep their original column name and therefore replace the original columns in the dataset. We save the result as `rdf`, storing the updated version of the dataset in our `rdf` variable." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vMMX8JZnKitA" + }, + "source": [ + "Now that this is done, we can go ahead and calculate how many null values each column contains.\n", + "\n", + "We do this by iterating over all the columns and getting a percentage of the `sum` of all the value that return `True` to the `is_null` function." + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "metadata": { + "id": "SAqqUz6I_G16" + }, + "outputs": [], + "source": [ + "# getting every columns percentage of null values in the RemoteLazyFrame\n", + "percent_missing = rdf.select(\n", + " [\n", + " pl.all().is_null().sum() * 100 / pl.all().count(),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3uMcNqVZWhdN" + }, + "source": [ + "We can then view the percentage of null values for each column as a two-column list by using Polars `melt` function to flip the query results from a 2 row by 5 column grid, to a 2 column by 5 row grid. We use the `sort` function to show the columns in order from the column with the highest percentage of null values to the lowest.\n", + "\n", + "Finally, we remove any columns with no null values from our output since they are not of interest to us here." + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": { + "id": "Pzz5qvSJWd2V", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 285 + }, + "outputId": "d0316533-6304-4dce-8357-e0caa0d897da" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "shape: (7, 2)\n", + "┌───────────────┬─────────────────┐\n", + "│ column name ┆ null values (%) │\n", + "│ --- ┆ --- │\n", + "│ str ┆ f64 │\n", + "╞═══════════════╪═════════════════╡\n", + "│ max_glu_serum ┆ 94.746772 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ A1Cresult ┆ 83.277322 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ readmitted ┆ 53.911916 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ race ┆ 2.233555 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ diag_3 ┆ 1.398306 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ diag_2 ┆ 0.351787 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ diag_1 ┆ 0.020636 │\n", + "└───────────────┴─────────────────┘" + ], + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (7, 2)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "column name\n", + "\n", + "null values (%)\n", + "
\n", + "str\n", + "\n", + "f64\n", + "
\n", + ""max_glu_serum"\n", + "\n", + "94.746772\n", + "
\n", + ""A1Cresult"\n", + "\n", + "83.277322\n", + "
\n", + ""readmitted"\n", + "\n", + "53.911916\n", + "
\n", + ""race"\n", + "\n", + "2.233555\n", + "
\n", + ""diag_3"\n", + "\n", + "1.398306\n", + "
\n", + ""diag_2"\n", + "\n", + "0.351787\n", + "
\n", + ""diag_1"\n", + "\n", + "0.020636\n", + "
\n", + "
" + ] + }, + "metadata": {}, + "execution_count": 204 + } + ], + "source": [ + "# melt table to a two-column table with the column name 'column' and corresponding percetage of null values 'null values', sort in descending order and display\n", + "percent_missing = percent_missing.melt(\n", + " variable_name=\"column name\",\n", + " value_name=\"null values (%)\",\n", + ").sort(pl.col(\"null values (%)\"), reverse=True)\n", + "\n", + "# filter out columns with no null values and display\n", + "percent_missing.filter(pl.col(\"null values (%)\") > 0).collect().fetch()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4n0jnBPyYLjf" + }, + "source": [ + "There are several strategies for dealing with null values such as deleting these rows from the dataset with the `drop_nulls` method or filling null values with the `fill_null` method. But in our case, we are just happy to have visibility over which columns including null values and to what extent so that we can handle and analyse these columns with this in mind." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-WUugovwve2c" + }, + "source": [ + "### Grouping data: ICD-9 medical codes\n", + "Grouping data is going to be the largest and most crucial task in this data cleaning job. This is a dataset with a low of wide-ranging numerical values which need to be grouped so that our data analysts can gain meaningul insights.\n", + "\n", + "Let's start with our diagnoses columns: `diag_1`, `diag_2` and `diag_3`.\n", + "\n", + "These columns contain the primary, secondary and terciary diagnoses given to patients. These diagnoses are given using [ICD-9 medical codes](https://en.wikipedia.org/wiki/List_of_ICD-9_codes) which are three digit codes ranging from 1 to 1000, as well as E800–E999 codes and V01–V82 code.\n", + "\n", + "By grabbing all the unique values in the `diag_1` column and counting them, we can see that we have over 700 different values in this column!" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "metadata": { + "id": "7pVHpmLWj6_w", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "outputId": "bdc449f2-0e05-4595-c1fd-8935d6de4722" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "shape: (1, 1)\n", + "┌────────┐\n", + "│ diag_1 │\n", + "│ --- │\n", + "│ u32 │\n", + "╞════════╡\n", + "│ 717 │\n", + "└────────┘" + ], + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (1, 1)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "diag_1\n", + "
\n", + "u32\n", + "
\n", + "717\n", + "
\n", + "
" + ] + }, + "metadata": {}, + "execution_count": 205 + } + ], + "source": [ + "tmp = rdf.select(\"diag_1\").unique()\n", + "tmp.select(pl.col(\"diag_1\").count()).collect().fetch()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cPsmfkBpkPCv" + }, + "source": [ + "Standard groupings of these codes have already been designed. What we want to do is replace the hundreds of unique codes we have in our our diagnoses columns with these groupings!\n", + "\n", + "To do this, we will again use Polars `when().then().otherwise()` functions to perform a find and replace operation. We will use `when()` to check if the codes in each cell are either E or V codes or fall within a certain numerical range.\n", + "\n", + "However, these diagnoses columns are currently string columns, since the E and V codes are not entirely numerical. This is problematic since we cannot perform numerical comparisons on these cells and we cannot convert the column type to a numerical one because of these 'E' and 'V' values!\n", + "\n", + "We will solve this problem in three steps:\n", + "\n", + "1) We will find and replace all E codes with a \"-1\" value and V codes with a \"-2\" value.\n", + "\n", + "2) We will `select()` our columns and `cast()` all values in these columns to float values.\n", + "\n", + "3) We will perform the find and replace operation to group all ICD-9 codes into their associated group- of which there are 17, plus E codes and V codes." + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "metadata": { + "id": "xPNFpZ7lW8qR" + }, + "outputs": [], + "source": [ + "# iterate over the three diagnoses columns\n", + "for col in [\"diag_1\", \"diag_2\", \"diag_3\"]:\n", + " # step one: replace troublesome E and V codes with temporary -1 and -2 codes\n", + " rdf = rdf.with_columns(\n", + " [\n", + " pl.when(\n", + " pl.col(col).str.starts_with(\"E\")\n", + " ) # use Polars str.starts_with method to identify E codes\n", + " .then(\"-1\")\n", + " .when(pl.col(col).str.starts_with(\"V\"))\n", + " .then(\"-2\")\n", + " .otherwise(pl.col(col))\n", + " .keep_name()\n", + " ]\n", + " )\n", + "\n", + " # step two: cast all values in column to float values\n", + " rdf = rdf.with_columns([pl.col(col).cast(pl.Float64)])\n", + "\n", + " # step three: replace all codes with their corresponding group\n", + " rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(col) >= 800)\n", + " .then(\"injury and poisoning\")\n", + " .when(pl.col(col) >= 780)\n", + " .then(\"symptoms, signs & ill-defined\")\n", + " .when(pl.col(col) >= 760)\n", + " .then(\"perinatal\")\n", + " .when(pl.col(col) >= 740)\n", + " .then(\"congenital anomalies\")\n", + " .when(pl.col(col) >= 710)\n", + " .then(\"musculoskeletal & connective tissue\")\n", + " .when(pl.col(col) >= 680)\n", + " .then(\"skin\")\n", + " .when(pl.col(col) >= 630)\n", + " .then(\"pregnancy, childbirth and peurperium\")\n", + " .when(pl.col(col) >= 580)\n", + " .then(\"genitourinary\")\n", + " .when(pl.col(col) >= 520)\n", + " .then(\"digestive\")\n", + " .when(pl.col(col) >= 460)\n", + " .then(\"respiratory\")\n", + " .when(pl.col(col) >= 390)\n", + " .then(\"circulatory\")\n", + " .when(pl.col(col) >= 320)\n", + " .then(\"nervous system and sense organs\")\n", + " .when(pl.col(col) >= 290)\n", + " .then(\"mental disorders\")\n", + " .when(pl.col(col) >= 280)\n", + " .then(\"blood and blood-forming organs\")\n", + " .when(pl.col(col) >= 240)\n", + " .then(\"neoplasms\")\n", + " .when(pl.col(col) >= 140)\n", + " .then(\"endocrine, nutritional, metabolic and immunity\")\n", + " .when(pl.col(col) >= 1)\n", + " .then(\"infectious and parasitic\")\n", + " .when(pl.col(col) == -1)\n", + " .then(\"E code (injury)\")\n", + " .when(pl.col(col) == -2)\n", + " .then(\"V code (other)\")\n", + " .otherwise(\n", + " None\n", + " ) # otherwise (null values) keep original value from the column\n", + " .alias(\n", + " col\n", + " ) # give resulting column same name as previously- therefore replacing old columns\n", + " ]\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "P1MquUrNlXDO" + }, + "source": [ + "By performing the same query as previously to count `diag_1`'s unique values, we see there is now a much more manageable 19 labels in our data column! This will be similar for the `diag_2` and `diag_3` columns." + ] + }, + { + "cell_type": "code", + "execution_count": 207, + "metadata": { + "id": "YfC9CmWWdu0n", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "outputId": "04223b57-76a5-4108-99ef-20eb5862b907" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "shape: (1, 1)\n", + "┌────────┐\n", + "│ diag_1 │\n", + "│ --- │\n", + "│ u32 │\n", + "╞════════╡\n", + "│ 19 │\n", + "└────────┘" + ], + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (1, 1)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "diag_1\n", + "
\n", + "u32\n", + "
\n", + "19\n", + "
\n", + "
" + ] + }, + "metadata": {}, + "execution_count": 207 + } + ], + "source": [ + "tmp = rdf.select(\"diag_1\").unique()\n", + "tmp.select(pl.col(\"diag_1\").count()).collect().fetch()" + ] + }, + { + "cell_type": "markdown", + "source": [ + "We notice in our project brief that there is only 1 E code value in the `diag_1` column, so we will remove this value from our dataset before continuing by using the `filter` function." + ], + "metadata": { + "id": "pKAp3OvKcwuX" + } + }, + { + "cell_type": "code", + "source": [ + "rdf = rdf.filter(pl.col(\"diag_1\") != \"E code (injury)\")" + ], + "metadata": { + "id": "yIRH-_QNdEwL" + }, + "execution_count": 208, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BvdGu7GmsZVu" + }, + "source": [ + "### Grouping data: A1C, max glucose levels and readmittance\n", + "\n", + "We want to group together data in another three other columns using the same `.then().when().otherwise()` methods.\n", + "\n", + "The first two are `A1Cresult`, which contains patients' HbA1c level, and `max_glu_serum`, which contains their blood glucose level. We want to group these into `very high`, `high`, `normal` groups based on levels defined in our project brief.\n", + "\n", + "These columns are both currently string columns, so we will also need to convert them to float values in order to perform numerical comparisons on them." + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "metadata": { + "id": "FgyrnPAlsZ0u" + }, + "outputs": [], + "source": [ + "# cast `max_glu_serum` and `A1Cresult` columns to float values\n", + "rdf = rdf.with_columns(\n", + " [pl.col(\"max_glu_serum\").cast(pl.Float64), pl.col(\"A1Cresult\").cast(pl.Float64)]\n", + ")\n", + "\n", + "# group values in A1Cresult column\n", + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(\"A1Cresult\") >= 8)\n", + " .then(\"very high\")\n", + " .when(pl.col(\"A1Cresult\") >= 7)\n", + " .then(\"high\")\n", + " .when(pl.col(\"A1Cresult\") >= 0)\n", + " .then(\"normal\")\n", + " .otherwise(pl.col(\"A1Cresult\"))\n", + " .keep_name()\n", + " ]\n", + ")\n", + "\n", + "# group values in max_glu_serum column\n", + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(\"max_glu_serum\") >= 300)\n", + " .then(\"very high\")\n", + " .when(pl.col(\"max_glu_serum\") >= 200)\n", + " .then(\"high\")\n", + " .when(pl.col(\"max_glu_serum\") >= 0)\n", + " .then(\"normal\")\n", + " .otherwise(pl.col(\"max_glu_serum\"))\n", + " .keep_name()\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Buu2nja5w6Db" + }, + "source": [ + "The final column we want to group is the `readmitted` column which records the number of days before any further re-hospitalization linked to the patients' diabetic condition.\n", + "\n", + "We will group this column into `short-term` and `long-term` and `n/a` (not applicable) groups.\n", + "\n", + "Simiar to in previous examples, we must first convert values in this column from strings to integer values." + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "metadata": { + "id": "9cca9DhSw6We" + }, + "outputs": [], + "source": [ + "# cast readmitted column to integer values\n", + "rdf = rdf.with_columns([pl.col(\"readmitted\").cast(pl.Int64)])\n", + "\n", + "# group values\n", + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(\"readmitted\") < 31)\n", + " .then(\"short-term\")\n", + " .when(pl.col(\"readmitted\") >= 31)\n", + " .then(\"long-term\")\n", + " .otherwise(\"n/a\")\n", + " .keep_name()\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kuwxAGYBoOQJ" + }, + "source": [ + "### Grouping data: binning ages\n", + "The next grouping task we will perform is to group ages into intervals of 10 years. We do this both to increase data privacy and to more easily draw correlations linked to broader age groups.\n", + "\n", + "We won't need to perform an `when().then().otherwise()` query here since BastionLab has its own `ApplyBins` tool.\n", + "\n", + "`ApplyBins` is a PyTorch module and the grouping of numbers takes place in its `forward` function. We can pass PyTorch modules to BastionLab's `apply_udf` function which will apply the `forward` function to any specified columns.\n", + "\n", + "All in all, we just three steps to bin our age column data:\n", + "\n", + "1) We import `ApplyBins` from `bastionlab.polars.utils`.\n", + "1) We instantiate our `ApplyBins` PyTorch module class with our bins interval given as the only argument.\n", + "2) We use `apply_udf`, providing a list of the column we want to modify and the PyTorch module, `ApplyBins`, that we wish to apply to these columns." + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "metadata": { + "id": "2EC3smnWc06Q" + }, + "outputs": [], + "source": [ + "from bastionlab.polars.utils import ApplyBins\n", + "\n", + "# get an instance of ApplyBins module which will bin data into groups of 10\n", + "model = ApplyBins(10)\n", + "\n", + "# apply bins to \"age\" column\n", + "rdf = rdf.apply_udf([\"age\"], model)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1pOQYPYSsVns" + }, + "source": [ + "> Note, you can create your own custom PyTorch modules and apply them to columns using `apply_udf`. This is BastionLab's way of allowing you to apply custom functions on datasets, whilst restricting what you can do for security reasons. Functionality like `lambda`, `map` and `apply` are blocked by BastionLab as they are too permissive and could be misused." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gYRVmqTitckT" + }, + "source": [ + "### Adding columns\n", + "\n", + "Up until this point we have been using the `.when().then().otherwise()` and `with_columns` methods to make changes to existing columns, but by providing a new column name to the `alias` method, we can create a new column.\n", + "\n", + "In the following example, we will create a `is_readmitted` column which will store `False` for all the \"n/a\" values in our original `readmitted` column and `True` for any other values. This will allow us to quickly query whether certain groups of data have been readmitted or not!" + ] + }, + { + "cell_type": "code", + "execution_count": 212, + "metadata": { + "id": "B2JGdBhmteAz" + }, + "outputs": [], + "source": [ + "rdf = rdf.with_columns(\n", + " [\n", + " pl.when(pl.col(\"readmitted\") == \"n/a\")\n", + " .then(False)\n", + " .otherwise(True)\n", + " .alias(\n", + " \"is_readmitted\"\n", + " ) # ending the .when().then().otherwise() pattern with .alias() allows us to provide a new column name\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "edoL2_uy_G19" + }, + "source": [ + "### Converting column types\n", + "\n", + "We have already seen examples where we have `explicity` converted the datatype of our columns using the `cast` method. Here we will `implicity` convert the datatype by replacing the \"yes\" and \"no\" values in our `change` column, which represent whether a patient's medication has been changed, to a boolean True or False value. \n", + "\n", + "The datatype of this column will be changed automatically by this operation as we can see below." + ] + }, + { + "cell_type": "code", + "execution_count": 213, + "metadata": { + "id": "fMhSrD8__G19", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "fb2c31c6-c60c-4d2e-e712-30f502d436b0" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[polars.datatypes.Utf8]" + ] + }, + "metadata": {}, + "execution_count": 213 + } + ], + "source": [ + "# print out initial datatype of \"change\" column\n", + "\n", + "rdf.select(\"change\").dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 214, + "metadata": { + "id": "hYWJ9FB70mcM", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "f9ebdad2-98f9-4216-d931-0c868d11a9ab" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[polars.datatypes.Boolean]" + ] + }, + "metadata": {}, + "execution_count": 214 + } + ], + "source": [ + "# replaces Yes/No values with True/False\n", + "rdf = rdf.with_columns(\n", + " [pl.when(pl.col(\"change\") == \"No\").then(False).otherwise(True).keep_name()]\n", + ")\n", + "\n", + "# print out datatype of column post find and replace operation\n", + "rdf.select(\"change\").dtypes" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CYS-Mkl1tD8t" + }, + "source": [ + "### Saving our RemoteLazyFrame and disconnecting\n", + "\n", + "Our dataframe is all clean and ready for the next step: data analysis/ visualization. Data scientist #1 is going to be reassigned to another task. They will save their cleaned RemoteLazyFrame and make a note of the identifier to share with data scientist #2.\n", + "\n", + "We need to perform `collect()` before saving or getting an identifier for our RemoteLazyFrame since the `save` method and `identifier` attribute are only available for FetchableLazyFrames.\n", + "\n", + ">Note, the data owner must have set the `savable` option to `True` when uploading the dataframe for this operation to be possible!" + ] + }, + { + "cell_type": "code", + "execution_count": 215, + "metadata": { + "id": "DWu6ToX53bm9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 + }, + "outputId": "8980b3c6-c49e-4180-a607-50db2cc9f0b1" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'57a34384-f881-4059-ae5a-6a7d1483a1ae'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 215 + } + ], + "source": [ + "rdf.collect().save()\n", + "saved_identifier = rdf.collect().identifier\n", + "saved_identifier" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NgkiBinG6DJ2" + }, + "source": [ + "They can now close their connection to the BastionLab server." + ] + }, + { + "cell_type": "code", + "execution_count": 216, + "metadata": { + "id": "qoiADM1W6OC_" + }, + "outputs": [], + "source": [ + "connection.close()" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Part II: data analysis and visualization\n", + "\n", + "So data scientist #2 is now ready to begin their analysis of the cleaned dataset. Just like data scientist #1, they will first need to connect to the server and get the FetchableLazyFrame saved by data scientist #1." + ], + "metadata": { + "id": "3Gvx_sK5ypgD" + } + }, + { + "cell_type": "code", + "source": [ + "# connecting to the server\n", + "from bastionlab import Connection\n", + "\n", + "connection = Connection(\"localhost\")\n", + "client = connection.client\n", + "\n", + "# get the previously saved dataframe\n", + "rdf = client.polars.get_df(saved_identifier)\n", + "rdf" + ], + "metadata": { + "id": "YXDgnPiayf-b", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "86ba51d8-ae36-4a55-ac36-9734ed1e0e9b" + }, + "execution_count": 217, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "FetchableLazyFrame(identifier=57a34384-f881-4059-ae5a-6a7d1483a1ae)" + ] + }, + "metadata": {}, + "execution_count": 217 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We can again confirm that the original privacy policy is still in place by running a non-aggreagted query that would violate the policy." + ], + "metadata": { + "id": "z7-wG7DfzSyI" + } + }, + { + "cell_type": "code", + "source": [ + "rdf.select(pl.col(\"age\")).collect().fetch()" + ], + "metadata": { + "id": "X_cUUQwqzw4B", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "423254aa-caca-45d5-ec8b-81dee515e3bd" + }, + "execution_count": 218, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[31mThe query has been rejected by the data owner.\u001b[37m\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Now that we are all set-up, we can dive into the analysis.\n", + "\n", + "### Age as a factor in readmission and emergency trips\n", + "\n", + "Let's start by visualizing the number of patients who were readmitted to hospital for diabetes-related issues during the study.\n", + "\n", + "To do this we group data by `age` and aggregate the `sum` of those who were readmitted. We then generate a barplot for this query." + ], + "metadata": { + "id": "NfRexmoN0X9h" + } + }, + { + "cell_type": "code", + "source": [ + "total_readmitted = rdf.groupby(\"age\").agg(\n", + " pl.col(\"is_readmitted\").sum().alias(\"total readmitted\")\n", + ")\n", + "total_readmitted.barplot(x=\"age\", y=\"total readmitted\")" + ], + "metadata": { + "id": "-5f35-7l_bUG", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + }, + "outputId": "da47e386-065f-4b25-9029-43cad1e3e4fc" + }, + "execution_count": 219, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEGCAYAAACkQqisAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAZw0lEQVR4nO3debgldX3n8fdHOm64ANLhId2Q7hk7KDou2CI+OG4YFmOAyaABjbYOkZkMKkafKMQkuIQkThKNjokZIigmCiIudBwEW8Q9LI1s3bRIB0SaQbtjsxiJC+Q7f9TvhmPndnOovqfuvfT79TznOVXfqjq/7zm34NtVv6pfpaqQJKmPB812ApKk+csiIknqzSIiSerNIiJJ6s0iIknqbcFsJzC03XffvZYsWTLbaUjSvHL55Zf/U1Ut3DK+wxWRJUuWsHr16tlOQ5LmlSQ3TRf3dJYkqTeLiCSpN4uIJKk3i4gkqTeLiCSpN4uIJKk3i4gkqTeLiCSpN4uIJKm3He6OdUnzy1vf+tYHZFsPFB6JSJJ6s4hIknqziEiSerOISJJ6s4hIknqbWBFJcnqSjUnWjMT+NMk3k1yd5FNJdhlZdlKS9UmuS3LISPzQFluf5MSR+NIkl7T4x5I8eFLfRZI0vUkeiXwIOHSL2CrgiVX1JOBbwEkASfYFjgae0Lb5qyQ7JdkJ+EvgMGBf4Ji2LsA7gXdX1WOB24BjJ/hdJEnTmFgRqaovA5u3iH2uqu5usxcDi9v0EcBZVfXjqroRWA/s317rq+qGqvoJcBZwRJIAzwfOadufARw5qe8iSZrebPaJ/Dfgs216EXDzyLINLba1+GOA20cK0lR8WkmOS7I6yepNmzbNUPqSpFkpIkneAtwNfGSI9qrq1KpaXlXLFy78d8+ZlyT1NPiwJ0leCbwIOKiqqoVvAfYaWW1xi7GV+PeBXZIsaEcjo+tLkgYy6JFIkkOBNwGHV9VdI4tWAkcneUiSpcAy4FLgMmBZuxLrwXSd7ytb8bkIOKptvwI4d6jvIUnqTPIS3zOBfwD2SbIhybHA+4BHAquSXJnkrwGqai1wNnAtcD5wfFXd044yXgNcAKwDzm7rArwZeEOS9XR9JKdN6rtIkqY3sdNZVXXMNOGt/o++qk4BTpkmfh5w3jTxG+iu3pIkzRLvWJck9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1tmC2E5A0d6075QuDtfX4tzx/sLY0czwSkST1ZhGRJPVmEZEk9TaxIpLk9CQbk6wZie2WZFWS69v7ri2eJO9Nsj7J1Un2G9lmRVv/+iQrRuJPS3JN2+a9STKp7yJJmt4kj0Q+BBy6RexE4MKqWgZc2OYBDgOWtddxwPuhKzrAycAzgP2Bk6cKT1vn1SPbbdmWJGnCJlZEqurLwOYtwkcAZ7TpM4AjR+Ifrs7FwC5J9gQOAVZV1eaqug1YBRzalj2qqi6uqgI+PPJZkqSBDN0nskdV3dqmvwvs0aYXATePrLehxbYV3zBNfFpJjkuyOsnqTZs2bd83kCT9m1nrWG9HEDVQW6dW1fKqWr5w4cIhmpSkHcLQReR77VQU7X1ji98C7DWy3uIW21Z88TRxSdKAhi4iK4GpK6xWAOeOxF/RrtI6ALijnfa6ADg4ya6tQ/1g4IK27M4kB7Srsl4x8lmSpIFMbNiTJGcCzwV2T7KB7iqrPwHOTnIscBPwkrb6ecALgfXAXcCrAKpqc5J3AJe19d5eVVOd9f+T7gqwhwGfbS9J0oAmVkSq6pitLDpomnULOH4rn3M6cPo08dXAE7cnR0nS9vGOdUlSbxYRSVJvFhFJUm8WEUlSbxYRSVJvFhFJUm8WEUlSbxYRSVJvFhFJUm8WEUlSbxYRSVJvWx07a/Q559Opqm/MfDqSpPlkWwMw/nl7fyiwHLgKCPAkYDXwzMmmJkma67Z6OquqnldVzwNuBfZrTwZ8GvBUfACUJInx+kT2qaprpmaqag3w+MmlJEmaL8Z5nsjVST4A/F2bfxlw9eRSkiTNF+MUkVcBvwWc0Oa/DLx/YhlJkuaN+ywiVfWjJH8NnFdV1w2QkyRpnrjPPpEkhwNXAue3+ackWTnpxCRJc984HesnA/sDtwNU1ZXA0kkmJUmaH8YpIj+tqju2iNUkkpEkzS/jdKyvTfJSYKcky4DXAV+fbFqSpPlgnCLyWuAtwI+BjwIXAO+YZFKSNNec/fH9B2vrJS++dLC2ttc4ReRXquotdIUEgCQvBj4+sawkSfPCOH0iJ40ZG1uS306yNsmaJGcmeWiSpUkuSbI+yceSPLit+5A2v74tXzLyOSe1+HVJDtmenCRJ99+2RvE9DHghsCjJe0cWPQq4u2+DSRbR9avsW1X/kuRs4OjW1rur6qx2X8qxdDc1HgvcVlWPTXI08E7g15Ps27Z7AvALwOeT/FJV3dM3N0nS/bOtI5H/Rzda74+Ay0deK4Ht/Vf/AuBhSRYAD6cb5PH5wDlt+RnAkW36iDZPW35QkrT4WVX146q6EVhPdymyJGkgWz0SqaqrgKuS7FFVZ4wuS3IC8J4+DVbVLUn+DPgO8C/A5+iK0+1VNXWEswFY1KYXATe3be9OcgfwmBa/eOSjR7f5GUmOA44D2HvvvfukLUmaxjh9IkdPE3tl3waT7Ep3FLGU7jTUzsChfT9vHFV1ahvKfvnChQsn2ZQk7VC21SdyDPBSYOkWw5w8Eti8HW2+ALixqja1dj4JHAjskmRBOxpZzL3PLLkF2AvY0E5/PRr4/kh8yug2kqQBbOsS36/T9VXszr1POQT4Ads3FPx3gAOSPJzudNZBdH0vFwFHAWcBK4Bz2/or2/w/tOVfqKpqhe2jSd5Fd0SzDJg/F1dL0gPAtvpEbgJuYoYfg1tVlyQ5B/gG3VVeVwCnAv8XOCvJH7bYaW2T04C/TbKe7gjo6PY5a9uVXde2zzneK7MkaVjbOp311ap6VpIf8LNjZQWoqnpU30ar6mS6gR1H3cA0V1dV1Y+AF2/lc04BTumbhyRp+2zrSORZ7f2Rw6UjSZpPxhn2ZOqKqr1G16+qb0wqKWlHd8pvHDVYW2/5u3PueyVpK+6ziCR5B90lvTcA/9rCRXdzoCRpBzbOkchLgP9YVT+ZdDKSpPllnJsN1wC7TDoRSdL8M86RyB8DVyRZQ/dMEQCq6vCJZSVJmhfGKSJn0I2cew339olIkjRWEbmrqt5736tJknY04xSRryT5Y7rhR0ZPZ3mJryTt4MYpIk9t7weMxLzEV5J030Wkqp43RCKSpPlnW2NnvWFbG1bVu2Y+HUnSfLKtI5GpMbP2AZ5O1ycC8Ks45LokiW0PwPg2gCRfBvarqh+0+bfSDdsuSdrBjXPH+h7A6JAnP2kxSdIObpyrsz4MXJrkU23+SLobECVJO7hxrs46Jcn5wLNa6FVVdcVk05IkzQdjPU+kqi5PcjPwUIAke1fVdyaamSRpzrvPPpEkhye5HrgR+FJ7/+ykE5MkzX3jdKy/g+5u9W9V1VLgBcDFE81KkjQvjFNEflpV3wcelORBVXURsHzCeUmS5oFx+kRuT/II4CvAR5JsBH442bQkSfPBOEciRwB3Aa8Hzgf+ke6udUnSDm6cS3x/mOQXgWVVdUaShwM7TT41SdJcN87VWa8GzgH+TwstAj69PY0m2SXJOUm+mWRdkmcm2S3JqiTXt/dd27pJ8t4k65NcnWS/kc9Z0da/PsmK7clJknT/jXM663jgQOBOgKq6Hvj57Wz3PcD5VfU44MnAOuBE4MKqWgZc2OYBDgOWtddxwPsBkuwGnAw8A9gfOHmq8EiShjFOEflxVf3b2FlJFtA9lKqXJI8Gng2cBlBVP6mq2+n6XqaGUzmDbngVWvzD1bkY2CXJnsAhwKqq2lxVtwGrgEP75iVJuv/GKSJfSvK7wMOS/DLwceDvt6PNpcAm4INJrkjygSQ7A3tU1a1tne9y7yCPi4CbR7bf0GJbi/87SY5LsjrJ6k2bNm1H6pKkUeMUkTfT/U//GuC/A+cBv7cdbS4A9gPeX1VPpbtc+MTRFaqq2I6jnS1V1alVtbyqli9cuHCmPlaSdnjbvDoryU7A2tZ38Tcz1OYGYENVXdLmz6ErIt9LsmdV3dpOV21sy28B9hrZfnGL3QI8d4v4F2coR0nSGLZ5JFJV9wDXJdl7phqsqu8CNyfZp4UOAq6le3Li1BVWK4Bz2/RK4BXtKq0DgDvaaa8LgIOT7No61A9uMUnSQMa5Y31XYG2SSxm5U72qDt+Odl9Ld/f7g4EbgFfRFbSzkxwL3AS8pK17HvBCYD3dTY+vau1vTvIO4LK23turavN25CRJup/GKSK/P9ONVtWVTD/+1kHTrFt0lxlP9zmnA6fPbHaSpHGNc8f6l4ZIRJI0/4xzdZYkSdOyiEiSerOISJJ622qfSJJrmP6Gv9D1dz9pYllJkuaFbXWsv2iwLCRJ89JWi0hV3TRkIpKk+Wec54kckOSyJP+c5CdJ7kly5xDJSZLmtnE61t8HHANcDzwM+E3gLyeZlCRpfhjr6qyqWg/sVFX3VNUH8bkdkiTGG/bkrjbG1ZVJ/hdwK14aLElivGLw8rbea+gGYNwL+LVJJiVJmh/GKSJHVtWPqurOqnpbVb0BL/+VJDFeEVkxTeyVM5yHJGke2tYd68cALwWWJlk5suhRgM/tkCRts2P963Sd6LsDfz4S/wFw9SSTkiTND/d1x/pNwDOT7AE8vS1aV1V3D5GcJGluG+eO9RcDlwIvpntk7SVJjpp0YpKkuW+c+0R+D3h6VW0ESLIQ+DxwziQTkyTNfeNcnfWgqQLSfH/M7SRJD3DjHImcn+QC4Mw2/+vAZyeXkiRpvrjPIlJVv5Pk14BntdCpVfWpyaYlSZoP7rOIJHlnVb0Z+OQ0MekB531v/PvB2nrNn//qYG1JkzBO38YvTxM7bKYTkSTNP1stIkl+qz1nfZ8kV4+8bmQGbjZMslOSK5J8ps0vTXJJkvVJPtZGDibJQ9r8+rZ8ychnnNTi1yU5ZHtzkiTdP9s6Evko8KvAyvY+9XpaVf3GDLR9ArBuZP6dwLur6rHAbcCxLX4scFuLv7utR5J9gaOBJ9A93+Svkuw0A3lJksa01SJSVXdU1ber6piqumnktd3jZiVZDPwK8IE2H+D53HvvyRnAkW36iDZPW35QW/8I4Kyq+nFV3QisB/bf3twkSeObrfs9/gJ4E/Cvbf4xwO0jw6lsABa16UXAzQBt+R1t/X+LT7PNz0hyXJLVSVZv2rRpJr+HJO3QBi8iSV4EbKyqy4dqs6pOrarlVbV84cKFQzUrSQ9449xsONMOBA5P8kLgoXRDy78H2CXJgna0sRi4pa1/C93TFDckWQA8mu6u+an4lNFtJEkDGPxIpKpOqqrFVbWErmP8C1X1MuAiYGpgxxXAuW16Jfc+GOuotn61+NHt6q2lwDK6gSIlSQOZjSORrXkzcFaSPwSuAE5r8dOAv02ynu5hWEcDVNXaJGcD1wJ3A8dX1T3Dpy1JO65ZLSJV9UXgi236Bqa5uqqqfkQ3DP10258CnDK5DCVJ2+JovJKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4GLyJJ9kpyUZJrk6xNckKL75ZkVZLr2/uuLZ4k702yPsnVSfYb+awVbf3rk6wY+rtI0o5uNo5E7gbeWFX7AgcAxyfZFzgRuLCqlgEXtnmAw4Bl7XUc8H7oig5wMvAMYH/g5KnCI0kaxuBFpKpurapvtOkfAOuARcARwBlttTOAI9v0EcCHq3MxsEuSPYFDgFVVtbmqbgNWAYcO+FUkaYc3q30iSZYATwUuAfaoqlvbou8Ce7TpRcDNI5ttaLGtxadr57gkq5Os3rRp04zlL0k7ulkrIkkeAXwCeH1V3Tm6rKoKqJlqq6pOrarlVbV84cKFM/WxkrTDm5UikuTn6ArIR6rqky38vXaaiva+scVvAfYa2Xxxi20tLkkayGxcnRXgNGBdVb1rZNFKYOoKqxXAuSPxV7SrtA4A7minvS4ADk6ya+tQP7jFJEkDWTALbR4IvBy4JsmVLfa7wJ8AZyc5FrgJeElbdh7wQmA9cBfwKoCq2pzkHcBlbb23V9XmYb6CJAlmoYhU1VeBbGXxQdOsX8DxW/ms04HTZy47SdL9MRtHItK0vvTs5wzW1nO+/KXB2pIeyBz2RJLUm0VEktSbRUSS1JtFRJLUm0VEktSbRUSS1JtFRJLUm/eJSNI88eRzhhvZ6aqjDhlrPY9EJEm9WUQkSb1ZRCRJvVlEJEm9WUQkSb15dZYAOPB/HzhYW1977dcGa0vSZHkkIknqzSIiSerNIiJJ6s0iIknqzSIiSerNIiJJ6s0iIknqzftE5oDvvP0/DdLO3n9wzSDtSNpxeCQiSept3heRJIcmuS7J+iQnznY+krQjmddFJMlOwF8ChwH7Asck2Xd2s5KkHcd87xPZH1hfVTcAJDkLOAK4dpyNn/Y7H55gaj/r8j99xWBtSdJQUlWznUNvSY4CDq2q32zzLweeUVWv2WK944Dj2uw+wHXb0ezuwD9tx/YzZS7kMRdygLmRx1zIAeZGHnMhB5gbecyFHGBm8vjFqlq4ZXC+H4mMpapOBU6dic9Ksrqqls/EZ833POZCDnMlj7mQw1zJYy7kMFfymAs5TDqPed0nAtwC7DUyv7jFJEkDmO9F5DJgWZKlSR4MHA2snOWcJGmHMa9PZ1XV3UleA1wA7AScXlVrJ9zsjJwWmwFzIY+5kAPMjTzmQg4wN/KYCznA3MhjLuQAE8xjXnesS5Jm13w/nSVJmkUWEUlSbxaR+2G2hlhJcnqSjUnWjMR2S7IqyfXtfdcJ57BXkouSXJtkbZIThs4jyUOTXJrkqpbD21p8aZJL2t/lY+0ii4lLslOSK5J8ZjbySPLtJNckuTLJ6hYbdL9obe6S5Jwk30yyLskzB94v9mm/wdTrziSvn6Xf4rfbvrkmyZltnx16vzihtb82yetbbGK/hUVkTLM8xMqHgEO3iJ0IXFhVy4AL2/wk3Q28sar2BQ4Ajm/ff8g8fgw8v6qeDDwFODTJAcA7gXdX1WOB24BjJ5jDqBOAdSPzs5HH86rqKSP3AAy9XwC8Bzi/qh4HPJnuNxksj6q6rv0GTwGeBtwFfGrIHACSLAJeByyvqifSXexzNAPuF0meCLyabjSPJwMvSvJYJvlbVJWvMV7AM4ELRuZPAk4asP0lwJqR+euAPdv0nsB1A/8e5wK/PFt5AA8HvgE8g+5O3AXT/Z0m2P7i9h/j84HPABk6D+DbwO5bxAb9ewCPBm6kXaQzW3mMtHsw8LVZ+i0WATcDu9Fd+foZ4JAh9wvgxcBpI/O/D7xpkr+FRyLjm9pBpmxosdmyR1Xd2qa/C+wxVMNJlgBPBS4ZOo92CulKYCOwCvhH4PaqurutMtTf5S/o/uP81zb/mFnIo4DPJbm8De0Dw+8XS4FNwAfbqb0PJNl5FvKYcjRwZpseNIequgX4M+A7wK3AHcDlDLtfrAH+c5LHJHk48EK6G7In9ltYRB4AqvvnxSDXaid5BPAJ4PVVdefQeVTVPdWdtlhMd8j+uEm2N50kLwI2VtXlQ7e9hWdV1X50p1iPT/Ls0YUD7RcLgP2A91fVU4EfssWpkqH2z9bXcDjw8S2XDZFD62c4gq6w/gKwM//+NPREVdU6utNnnwPOB64E7tlinRn9LSwi45trQ6x8L8meAO1946QbTPJzdAXkI1X1ydnKA6Cqbgcuojs9sEuSqRtnh/i7HAgcnuTbwFl0p7TeM3Qe7V++VNVGuj6A/Rn+77EB2FBVl7T5c+iKymzsF4cB36iq77X5oXN4AXBjVW2qqp8Cn6TbV4beL06rqqdV1bPp+mC+xQR/C4vI+ObaECsrgRVtegVdH8XEJAlwGrCuqt41G3kkWZhklzb9MLo+mXV0xeSoIXIAqKqTqmpxVS2h2w++UFUvGzKPJDsneeTUNF1fwBoG3i+q6rvAzUn2aaGD6B7FMGgezTHceyqLWcjhO8ABSR7e/nuZ+i0G3T+T/Hx73xv4NeCjTPK3mGRH0wPtRXd+8Vt05+HfMmC7Z9KdY/0p3b/8jqU7B38hcD3weWC3CefwLLpD4KvpDpGvbL/HYHkATwKuaDmsAf6gxf8DcCmwnu5UxkMG/Ns8F/jM0Hm0tq5qr7VT++PQ+0Vr8ynA6vZ3+TSw6yzsnzsD3wcePRKbjd/ibcA32/75t8BDht4/ga/QFa+rgIMm/Vs47IkkqTdPZ0mSerOISJJ6s4hIknqziEiSerOISJJ6s4hIknqziEiSerOISANJ8uk2WOLaqQETkxyb5FvpnpPyN0ne1+ILk3wiyWXtdeDsZi9Nz5sNpYEk2a2qNrchWy6jGyb8a3RjTf0A+AJwVVW9JslHgb+qqq+24SsuqKrHz1ry0lYsuO9VJM2Q1yX5L216L+DlwJeqajNAko8Dv9SWvwDYtxuCCYBHJXlEVf3zkAlL98UiIg0gyXPpCsMzq+quJF+kG2Npa0cXDwIOqKofDZOh1I99ItIwHg3c1grI4+geMbwz8Jwku7ahwv/ryPqfA147NZPkKYNmK43JIiIN43xgQZJ1wJ8AF9M9V+KP6EZ4/Rrd427vaOu/Dlie5Ook1wL/Y/CMpTHYsS7Noql+jnYk8ing9Kr61GznJY3LIxFpdr21PTN+DXAj3fM4pHnDIxFJUm8eiUiSerOISJJ6s4hIknqziEiSerOISJJ6+/8a8pQAO9R/oAAAAABJRU5ErkJggg==\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "In terms of the number of readmissions, we see a clear trend for readmission cases to increase with age, before dropping down in the 80-90 and 90-100 age groups. This may be due to increased mortality in these age ranges.\n", + "\n", + "However, if we take a look at the mean number of cases per age group using `histplot`, we see that it follows the same trend, showing that this trend may not represent a higher risk of readmission for older patients, but rather a much increased number of diabetes patients in older age groups." + ], + "metadata": { + "id": "BdRDwT74BOrr" + } + }, + { + "cell_type": "code", + "source": [ + "rdf.histplot(x=\"age\")" + ], + "metadata": { + "id": "DBML4fIUAID2", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + }, + "outputId": "e068d27f-95d9-4230-f8d3-ab4a42920fe3" + }, + "execution_count": 220, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEGCAYAAACkQqisAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAV/klEQVR4nO3df/BddZ3f8efLAK7iDxLJUiQhya6pNsssATMQq92ysIXAUIOWdWC6klpqtrNQoWOnC9tpcXXt6MyqK11lBksEdhREEUkzrJiydLc65UfQCAkRSQnkxwDJEgS7zIrQd/+4n697G76Bb05yf3zJ8zFz5nvu+55zz/vee8KL8+Oek6pCkqQuXjPqBiRJ05chIknqzBCRJHVmiEiSOjNEJEmdHTLqBobtyCOPrPnz54+6DUmaVu67776/rqrZe9YPuhCZP38+69atG3UbkjStJHlssrq7syRJnRkikqTODBFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkiksbOsfPmkWTkw7Hz5o36oxh7B91lTySNv21bt7Jmw5ZRt8HZxy0YdQtjzy0RSVJnhogkqTNDRJLU2cBCJMncJHcmeTDJxiSXtPrHkuxIsr4NZ/XNc3mSzUkeSnJGX31Zq21OcllffUGSu1v9a0kOG9T7kSS91CC3RF4APlpVi4ClwEVJFrXnPldVi9twG0B77jzg14BlwBeTzEgyA/gCcCawCDi/73U+3V7rbcDTwIUDfD+SpD0MLESq6vGq+n4b/ymwCTjmZWZZDtxYVT+rqi3AZuCkNmyuqkeq6nngRmB5kgCnAt9o818HnDOYdyNJmsxQjokkmQ+cANzdShcnuT/JqiQzW+0YYFvfbNtbbW/1twA/qaoX9qhPtvyVSdYlWbdr164D8I4kSTCEEEnyBuBm4NKqeha4CvhVYDHwOPCZQfdQVVdX1ZKqWjJ79ktuESxJ6migPzZMcii9APlKVX0ToKqe7Hv+S8Ca9nAHMLdv9jmtxl7qTwFHJDmkbY30Ty9JGoJBnp0V4BpgU1V9tq9+dN9k7wM2tPHVwHlJXptkAbAQuAe4F1jYzsQ6jN7B99VVVcCdwLlt/hXArYN6P5Kklxrklsi7gQ8CDyRZ32p/QO/sqsVAAY8CvwtQVRuT3AQ8SO/Mrouq6kWAJBcDtwMzgFVVtbG93u8DNyb5I+AH9EJLkjQkAwuRqvoukEmeuu1l5vkk8MlJ6rdNNl9VPULv7C1J0gj4i3VJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjob6J0NJU0/x86bx7atW0fdhqYJQ0TS/2fb1q2s2bBlpD2cfdyCkS5fU+fuLElSZ4aIJKkzQ0SS1JkhIknqzBCRJHVmiEiSOjNEJEmdGSKSpM4MEUlSZ4aIJKkzQ0SS1JkhIknqzBCRJHVmiEiSOjNEJEmdDSxEksxNcmeSB5NsTHJJq89KsjbJw+3vzFZPkiuTbE5yf5IT+15rRZv+4SQr+urvTPJAm+fKJBnU+5EkvdQgt0ReAD5aVYuApcBFSRYBlwF3VNVC4I72GOBMYGEbVgJXQS90gCuAk4GTgCsmgqdN8+G++ZYN8P1IkvYwsBCpqser6vtt/KfAJuAYYDlwXZvsOuCcNr4cuL567gKOSHI0cAawtqp2V9XTwFpgWXvuTVV1V1UVcH3fa0mShmAox0SSzAdOAO4Gjqqqx9tTTwBHtfFjgG19s21vtZerb5+kPtnyVyZZl2Tdrl279uu9SJL+zsBDJMkbgJuBS6vq2f7n2hZEDbqHqrq6qpZU1ZLZs2cPenGSdNAYaIgkOZRegHylqr7Zyk+2XVG0vztbfQcwt2/2Oa32cvU5k9QlSUMyyLOzAlwDbKqqz/Y9tRqYOMNqBXBrX/2CdpbWUuCZttvrduD0JDPbAfXTgdvbc88mWdqWdUHfa0mShuCQAb72u4EPAg8kWd9qfwB8CrgpyYXAY8AH2nO3AWcBm4HngA8BVNXuJJ8A7m3Tfbyqdrfx3wOuBV4H/HkbJElDMrAQqarvAnv73cZpk0xfwEV7ea1VwKpJ6uuA4/ajTUnSfvAX65KkzgwRSVJnhogkqTNDRJLUmSEiSerMEJEkdWaISJI6M0QkSZ0ZIpKkzgwRSVJnhogkqTNDRJLUmSEiSerMEJEkdWaISJI6M0QkSZ0N8s6GkvbBsfPmsW3r1lG3oT6HHnYYvbtvj87cY49l62OPjbSHl2OISGNi29atrNmwZdRtcPZxC0bdwtj4+fPPj/w7Gffvw91ZkqTODBFJUmeGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmeGiCSpM0NEktTZwEIkyaokO5Ns6Kt9LMmOJOvbcFbfc5cn2ZzkoSRn9NWXtdrmJJf11RckubvVv5bksEG9F0nS5Aa5JXItsGyS+ueqanEbbgNIsgg4D/i1Ns8Xk8xIMgP4AnAmsAg4v00L8On2Wm8DngYuHOB7kSRNYmAhUlV/Beye4uTLgRur6mdVtQXYDJzUhs1V9UhVPQ/cCCxP7wL/pwLfaPNfB5xzQN+AJOkVTSlEktwxldoUXZzk/ra7a2arHQNs65tme6vtrf4W4CdV9cIedUnSEL1siCT5pSSzgCOTzEwyqw3z6fYf7auAXwUWA48Dn+nwGvssycok65Ks27Vr1zAWKUkHhVe6s+HvApcCbwXuAybuE/ks8Kf7urCqenJiPMmXgDXt4Q5gbt+kc1qNvdSfAo5IckjbGumffrLlXg1cDbBkyZLa174lSZN72S2Rqvp8VS0A/l1V/UpVLWjD8VW1zyGS5Oi+h+8DJs7cWg2cl+S1SRYAC4F7gHuBhe1MrMPoHXxfXVUF3Amc2+ZfAdy6r/1IkvbPlO6xXlX/Jck/BOb3z1NV1+9tniQ3AKfQ2xW2HbgCOCXJYqCAR+lt6VBVG5PcBDwIvABcVFUvtte5GLgdmAGsqqqNbRG/D9yY5I+AHwDXTO0tS5IOlCmFSJI/o3csYz3wYisXsNcQqarzJynv9T/0VfVJ4JOT1G8Dbpuk/gi9s7ckSSMypRABlgCL2m4kSZKAqf9OZAPw9wbZiCRp+pnqlsiRwINJ7gF+NlGsqvcOpCtJ0rQw1RD52CCbkCRNT1M9O+svB92IJGn6merZWT+ldzYWwGHAocDfVNWbBtWYJGn8TXVL5I0T4+3ih8uBpYNqSpI0PezzVXyr51vAGa84sSTpVW2qu7Pe3/fwNfR+N/K3A+lIkjRtTPXsrH/aN/4CvUuWLD/g3UiSppWpHhP50KAbkSRNP1O9KdWcJLe0e6bvTHJzkjmDbk6SNN6memD9y/Qu1/7WNvy3VpMkHcSmGiKzq+rLVfVCG64FZg+wL0nSNDDVEHkqye8kmdGG36F3d0FJ0kFsqiHyL4EPAE/Quzf6ucC/GFBPkqRpYqqn+H4cWFFVTwMkmQX8Mb1wkSQdpKa6JfLrEwECUFW7gRMG05IkabqYaoi8JsnMiQdtS2SqWzGSpFepqQbBZ4D/leTr7fFvM8n90CVJB5ep/mL9+iTrgFNb6f1V9eDg2pIkTQdT3iXVQsPgkCT9wj5fCl6SpAmGiCSpM0NEktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmcDC5Ekq9r92Df01WYlWZvk4fZ3ZqsnyZVJNie5P8mJffOsaNM/nGRFX/2dSR5o81yZJIN6L5KkyQ1yS+RaYNketcuAO6pqIXBHewxwJrCwDSuBq+AXVwu+AjgZOAm4ou9qwlcBH+6bb89lSZIGbGAhUlV/Bezeo7wcuK6NXwec01e/vnruAo5IcjRwBrC2qna3+5msBZa1595UVXdVVQHX972WJGlIhn1M5KiqeryNPwEc1caPAbb1Tbe91V6uvn2S+qSSrEyyLsm6Xbt27d87kCT9wsgOrLctiBrSsq6uqiVVtWT27NnDWKQkHRSGHSJPtl1RtL87W30HMLdvujmt9nL1OZPUJUlDNOwQWQ1MnGG1Ari1r35BO0trKfBM2+11O3B6kpntgPrpwO3tuWeTLG1nZV3Q91rSPjt23jySjHSQpqOB3Sc9yQ3AKcCRSbbTO8vqU8BNSS4EHgM+0Ca/DTgL2Aw8B3wIoKp2J/kEcG+b7uNVNXGw/vfonQH2OuDP2yB1sm3rVtZs2DLSHs4+bsFIly91MbAQqarz9/LUaZNMW8BFe3mdVcCqSerrgOP2p0dJ0v7xF+uSpM4MEUlSZ4aIJKkzQ0SS1JkhIknqzBCRJHVmiEiSOjNEJEmdGSKSpM4MEUlSZ4aIJKkzQ0SS1JkhIknqzBCRJHVmiEiSOjNEJEmdGSKSpM4MEUlSZ4aIJKkzQ0SS1JkhIknqzBCRJHVmiEiSOjNEJEmdGSKSpM4MEUlSZ4aIJKkzQ0SS1JkhIknqzBCRJHVmiEiSOhtJiCR5NMkDSdYnWddqs5KsTfJw+zuz1ZPkyiSbk9yf5MS+11nRpn84yYpRvBdJOpiNckvkN6tqcVUtaY8vA+6oqoXAHe0xwJnAwjasBK6CXugAVwAnAycBV0wEjyRpOMZpd9Zy4Lo2fh1wTl/9+uq5CzgiydHAGcDaqtpdVU8Da4Flw25akg5mowqRAr6T5L4kK1vtqKp6vI0/ARzVxo8BtvXNu73V9lZ/iSQrk6xLsm7Xrl0H6j1I0kHvkBEt9z1VtSPJLwNrk/yo/8mqqiR1oBZWVVcDVwMsWbLkgL2uJB3sRrIlUlU72t+dwC30jmk82XZT0f7ubJPvAOb2zT6n1fZWlyQNydBDJMnhSd44MQ6cDmwAVgMTZ1itAG5t46uBC9pZWkuBZ9pur9uB05PMbAfUT281SdKQjGJ31lHALUkmlv/Vqvp2knuBm5JcCDwGfKBNfxtwFrAZeA74EEBV7U7yCeDeNt3Hq2r38N6GJGnoIVJVjwDHT1J/CjhtknoBF+3ltVYBqw50j5KkqRmnU3wlSdOMISJJ6swQkSR1ZohIkjob1Y8NJQCOnTePbVu3jroNSR0ZIhqpbVu3smbDllG3wdnHLRh1C9K05O4sSVJnhogkqTNDRJLUmSEiSerMEJEkdWaISJI68xRfSRpjhx52GO2q52PJEJGkMfbz558f699SuTtLktSZISJJ6swQkSR1ZohIkjozRCRJnRkikqTODBFJUmf+TuQg5g2hJO0vQ+QgNg43hPJmUNL05u4sSVJnhogkqTNDRJLUmSEiSerMEJEkdebZWSPgqbWSXi0MkREYh1NrwdNrJe0/d2dJkjqb9iGSZFmSh5JsTnLZqPuRpIPJtA6RJDOALwBnAouA85MsGm1XknTwmO7HRE4CNlfVIwBJbgSWAw/ubYb7H3hgrG96L0nTSapq1D10luRcYFlV/av2+IPAyVV18R7TrQRWtodvBx7aj8UeCfz1fsx/oIxDH+PQA4xHH+PQA4xHH+PQA4xHH+PQAxyYPuZV1ew9i9N9S2RKqupq4OoD8VpJ1lXVkgPxWtO9j3HoYVz6GIcexqWPcehhXPoYhx4G3ce0PiYC7ADm9j2e02qSpCGY7iFyL7AwyYIkhwHnAatH3JMkHTSm9e6sqnohycXA7cAMYFVVbRzwYg/IbrEDYBz6GIceYDz6GIceYDz6GIceYDz6GIceYIB9TOsD65Kk0Zruu7MkSSNkiEiSOjNE9sGoLrGSZFWSnUk29NVmJVmb5OH2d+aAe5ib5M4kDybZmOSSYfeR5JeS3JPkh62HP2z1BUnubt/L19pJFgOXZEaSHyRZM4o+kjya5IEk65Osa7WhrhdtmUck+UaSHyXZlORdQ14v3t4+g4nh2SSXjuiz+Ldt3dyQ5Ia2zg57vbikLX9jkktbbWCfhSEyRSO+xMq1wLI9apcBd1TVQuCO9niQXgA+WlWLgKXARe39D7OPnwGnVtXxwGJgWZKlwKeBz1XV24CngQsH2EO/S4BNfY9H0cdvVtXivt8ADHu9APg88O2qegdwPL3PZGh9VNVD7TNYDLwTeA64ZZg9ACQ5BvgIsKSqjqN3ss95DHG9SHIc8GF6V/M4Hjg7ydsY5GdRVQ5TGIB3Abf3Pb4cuHyIy58PbOh7/BBwdBs/GnhoyJ/HrcA/GVUfwOuB7wMn0/sl7iGTfU8DXP6c9o/xVGANkGH3ATwKHLlHbajfB/BmYAvtJJ1R9dG33NOB743oszgG2AbMonfm6xrgjGGuF8BvA9f0Pf6PwL8f5GfhlsjUTawgE7a32qgcVVWPt/EngKOGteAk84ETgLuH3UfbhbQe2AmsBf438JOqeqFNMqzv5U/o/eP8v+3xW0bQRwHfSXJfu7QPDH+9WADsAr7cdu391ySHj6CPCecBN7TxofZQVTuAPwa2Ao8DzwD3Mdz1YgPwj5K8JcnrgbPo/SB7YJ+FIfIqUL3/vRjKudpJ3gDcDFxaVc8Ou4+qerF6uy3m0Ntkf8cglzeZJGcDO6vqvmEvew/vqaoT6e1ivSjJb/Q/OaT14hDgROCqqjoB+Bv22FUyrPWzHWt4L/D1PZ8bRg/tOMNyesH6VuBwXrobeqCqahO93WffAb4NrAde3GOaA/pZGCJTN26XWHkyydEA7e/OQS8wyaH0AuQrVfXNUfUBUFU/Ae6kt3vgiCQTP5wdxvfybuC9SR4FbqS3S+vzw+6j/Z8vVbWT3jGAkxj+97Ed2F5Vd7fH36AXKqNYL84Evl9VT7bHw+7ht4AtVbWrqn4OfJPeujLs9eKaqnpnVf0GvWMwP2aAn4UhMnXjdomV1cCKNr6C3jGKgUkS4BpgU1V9dhR9JJmd5Ig2/jp6x2Q20QuTc4fRA0BVXV5Vc6pqPr314C+q6p8Ps48khyd548Q4vWMBGxjyelFVTwDbkry9lU6jdyuGofbRnM/f7cpiBD1sBZYmeX379zLxWQx1/Uzyy+3vscD7ga8yyM9ikAeaXm0Dvf2LP6a3H/4/DHG5N9Dbx/pzev/ndyG9ffB3AA8D/x2YNeAe3kNvE/h+epvI69vnMbQ+gF8HftB62AD8p1b/FeAeYDO9XRmvHeJ3cwqwZth9tGX9sA0bJ9bHYa8XbZmLgXXte/kWMHME6+fhwFPAm/tqo/gs/hD4UVs//wx47bDXT+B/0guvHwKnDfqz8LInkqTO3J0lSerMEJEkdWaISJI6M0QkSZ0ZIpKkzgwRSVJnhogkqTNDRBqSJN9qF0vcOHHBxCQXJvlxevdJ+VKSP2312UluTnJvG9492u6lyfljQ2lIksyqqt3tki330rtM+PfoXWvqp8BfAD+sqouTfBX4YlV9t12+4vaq+gcja17ai0NeeRJJB8hHkryvjc8FPgj8ZVXtBkjydeDvt+d/C1jUuwQTAG9K8oaq+j/DbFh6JYaINARJTqEXDO+qqueS/A9611ja29bFa4ClVfW3w+lQ6sZjItJwvBl4ugXIO+jdYvhw4B8nmdkuFf7P+qb/DvBvJh4kWTzUbqUpMkSk4fg2cEiSTcCngLvo3VfiP9O7wuv36N3u9pk2/UeAJUnuT/Ig8K+H3rE0BR5Yl0Zo4jhH2xK5BVhVVbeMui9pqtwSkUbrY+2e8RuALfTuxyFNG26JSJI6c0tEktSZISJJ6swQkSR1ZohIkjozRCRJnf0/B6JGrTglnSQAAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "If we zoom in on `short-term` and `long-term` readmittance individually and get the percentage of patients in these groups who are readmitted, rather than the count, we get a rather different picture.\n", + "\n", + "To get these percentage values, we divide the total number of short-term or long-term values in the readmitted column by the total values in this column.\n", + "\n", + "To get the total short-term or long-term values, we use the str.count_match function to fill the readmitted column with True (1) values where the contents of the cell are short-term or long-term respectively and False (0) for any other values. We can use the sum function to count up all of these True values.\n", + "\n", + "To get the total values in the readmitted column, we select the column and use count() function.\n", + "\n", + "We can then set the column name to whatever we like using the alias function." + ], + "metadata": { + "id": "xPFiho5eEKNT" + } + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "short_term = rdf.groupby(\"age\").agg(\n", + " (\n", + " pl.col(\"readmitted\").str.count_match(\"short-term\").sum()\n", + " / pl.col(\"readmitted\").count()\n", + " * 100\n", + " ).alias(\"short-term readmitted\")\n", + ")\n", + "long_term = rdf.groupby(\"age\").agg(\n", + " (\n", + " pl.col(\"readmitted\").str.count_match(\"long-term\").sum()\n", + " / pl.col(\"readmitted\").count()\n", + " * 100\n", + " ).alias(\"long-term readmitted\")\n", + ")\n", + "\n", + "short_term.barplot(x=\"age\", y=\"short-term readmitted\")\n", + "plt.show()\n", + "long_term.barplot(x=\"age\", y=\"long-term readmitted\")" + ], + "metadata": { + "id": "KRBIqBXs8pda", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 541 + }, + "outputId": "6f484d34-88f4-460c-9870-737315a2a263" + }, + "execution_count": 221, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We see a slight trend of increased long-term readmissions as age increases, but interestingly, a much higher risk of short-term readmission in 20-30 year olds. This could be explained by younger patients perhaps not having yet found the correct treatment or lifestyle to manage their diabetes." + ], + "metadata": { + "id": "nlHmjMozE38p" + } + }, + { + "cell_type": "markdown", + "source": [ + "Similarly, if we take a look at the average number of emergency visits in the past year for patients in each age category, the 20-30 group is the most at-risk.\n", + "\n" + ], + "metadata": { + "id": "F4c69wn0CjV4" + } + }, + { + "cell_type": "code", + "source": [ + "rdf.barplot(x=\"age\", y=\"number_emergency\")" + ], + "metadata": { + "id": "9sg9nYzE_vXu", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 281 + }, + "outputId": "ed0a1a83-9a7d-431d-e257-9a94062a731b" + }, + "execution_count": 222, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "These trends provide actionable insights, where advice or follow-ups with 20-30 year olds could be tailored based on their increased risk of short-term hospital readmission and emergency visits." + ], + "metadata": { + "id": "bINBHE7zCuPd" + } + }, + { + "cell_type": "markdown", + "source": [ + "### A1C examinations as a factor in changes to medication and readmittance" + ], + "metadata": { + "id": "UUBMSWbuHxf-" + } + }, + { + "cell_type": "markdown", + "source": [ + "Next, let's take a look at the impact of A1C levels being checked during the hospital admission on the likelihood of a patient's medication being changed. The higher the level of A1C, the greater the risk of developing diabetes complications is." + ], + "metadata": { + "id": "S11nqyg0oufI" + } + }, + { + "cell_type": "code", + "source": [ + "# group data by A1C result group\n", + "ret = rdf.groupby(pl.col(\"A1Cresult\")).agg(\n", + " [\n", + " # get percentage of patients in each group who changed medication\n", + " (pl.col(\"change\").sum() / pl.col(\"change\").count() * 100).alias(\"change\"),\n", + " ]\n", + ")\n", + "\n", + "# display as a sorted list\n", + "ret.sort(pl.col(\"change\"), reverse=True).collect().fetch()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 203 + }, + "id": "RkJK-DmHhq37", + "outputId": "d9ed2ec7-4e14-4a64-fdf4-e4b6d2b6fab8" + }, + "execution_count": 223, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "shape: (4, 2)\n", + "┌───────────┬───────────┐\n", + "│ A1Cresult ┆ change │\n", + "│ --- ┆ --- │\n", + "│ str ┆ f64 │\n", + "╞═══════════╪═══════════╡\n", + "│ very high ┆ 65.067994 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ high ┆ 50.738007 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ null ┆ 44.272954 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ normal ┆ 44.226143 │\n", + "└───────────┴───────────┘" + ], + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (4, 2)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "A1Cresult\n", + "\n", + "change\n", + "
\n", + "str\n", + "\n", + "f64\n", + "
\n", + ""very high"\n", + "\n", + "65.067994\n", + "
\n", + ""high"\n", + "\n", + "50.738007\n", + "
\n", + "null\n", + "\n", + "44.272954\n", + "
\n", + ""normal"\n", + "\n", + "44.226143\n", + "
\n", + "
" + ] + }, + "metadata": {}, + "execution_count": 223 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Perhaps as expected, those with a very high or high A1Cresult were more likely to have a medication change. Interestingly, those who do not have their A1C level examined are only as likely to change medication as those with normal A1C levels. This shows doctors are less likely to change medication unless they know that A1C levels are higher than expected via exams.\n", + "\n", + "What we now want to know is whether this has an impact on the likelihood of patient readmission in the short and long term." + ], + "metadata": { + "id": "xX672CJwpAYv" + } + }, + { + "cell_type": "code", + "source": [ + "# percentages of those readmitted within a month of initial hospital visit by A1C result group\n", + "ret = rdf.groupby(pl.col(\"A1Cresult\")).agg(\n", + " [\n", + " (\n", + " pl.col(\"readmitted\").str.count_match(\"short-term\").sum()\n", + " / pl.col(\"readmitted\").count()\n", + " * 100\n", + " ).alias(\"short-term readmitted\")\n", + " ]\n", + ")\n", + "ret.sort(pl.col(\"short-term readmitted\"), reverse=True).collect().fetch()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 203 + }, + "id": "LFDwp7G2lfqh", + "outputId": "5290f2dd-74a6-4f82-bcea-b5b3a0a14bec" + }, + "execution_count": 224, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "shape: (4, 2)\n", + "┌───────────┬───────────────────────┐\n", + "│ A1Cresult ┆ short-term readmitted │\n", + "│ --- ┆ --- │\n", + "│ str ┆ f64 │\n", + "╞═══════════╪═══════════════════════╡\n", + "│ null ┆ 11.436393 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ high ┆ 10.042172 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ very high ┆ 9.907722 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ normal ┆ 9.703288 │\n", + "└───────────┴───────────────────────┘" + ], + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (4, 2)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "A1Cresult\n", + "\n", + "short-term readmitted\n", + "
\n", + "str\n", + "\n", + "f64\n", + "
\n", + "null\n", + "\n", + "11.436393\n", + "
\n", + ""high"\n", + "\n", + "10.042172\n", + "
\n", + ""very high"\n", + "\n", + "9.907722\n", + "
\n", + ""normal"\n", + "\n", + "9.703288\n", + "
\n", + "
" + ] + }, + "metadata": {}, + "execution_count": 224 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# percentages of those readmitted in the long-term by A1C result group\n", + "\n", + "ret = rdf.groupby(pl.col(\"A1Cresult\")).agg(\n", + " [\n", + " (\n", + " pl.col(\"readmitted\").str.count_match(\"long-term\").sum()\n", + " / pl.col(\"readmitted\").count()\n", + " * 100\n", + " ).alias(\"long-term readmitted\")\n", + " ]\n", + ")\n", + "ret.sort(pl.col(\"long-term readmitted\"), reverse=True).collect().fetch()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 203 + }, + "id": "Y2avSj5hrZRE", + "outputId": "cd7423ec-1a6a-4fd0-adfc-5b3b74338a5b" + }, + "execution_count": 225, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "shape: (4, 2)\n", + "┌───────────┬──────────────────────┐\n", + "│ A1Cresult ┆ long-term readmitted │\n", + "│ --- ┆ --- │\n", + "│ str ┆ f64 │\n", + "╞═══════════╪══════════════════════╡\n", + "│ very high ┆ 35.271977 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ null ┆ 35.085608 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ high ┆ 34.106484 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ normal ┆ 31.996792 │\n", + "└───────────┴──────────────────────┘" + ], + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (4, 2)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "A1Cresult\n", + "\n", + "long-term readmitted\n", + "
\n", + "str\n", + "\n", + "f64\n", + "
\n", + ""very high"\n", + "\n", + "35.271977\n", + "
\n", + "null\n", + "\n", + "35.085608\n", + "
\n", + ""high"\n", + "\n", + "34.106484\n", + "
\n", + ""normal"\n", + "\n", + "31.996792\n", + "
\n", + "
" + ] + }, + "metadata": {}, + "execution_count": 225 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We see that patients who did not have their A1C level taken are the most likely to be readmitted in the short-term and almost as likely as their \"very high\" counterparts to be readmitted in the long-term. This suggests that taking patients' A1C levels can help encourage doctors to make changes in medication, which may be a factor in a reduction in hospital readmissions." + ], + "metadata": { + "id": "HmsKOU2bqz6F" + } + }, + { + "cell_type": "markdown", + "source": [ + "### Dosage increases and decreases as factors on overall readmission" + ], + "metadata": { + "id": "TjaMlnbQIWcJ" + } + }, + { + "cell_type": "markdown", + "source": [ + "We will now investigate the likelihood of increases or decreases of specific medications leading to short-term patient readmission.\n", + "\n", + "Let's start by getting a list of the medications we want to look at. We will these lists down to drugs with more than 20 results to remove any medication with only a handful of results." + ], + "metadata": { + "id": "4dzRa_RN2_Oq" + } + }, + { + "cell_type": "code", + "source": [ + "# list of all medications in study\n", + "all_meds = [\n", + " \"metformin\",\n", + " \"repaglinide\",\n", + " \"nateglinide\",\n", + " \"chlorpropamide\",\n", + " \"glimepiride\",\n", + " \"acetohexamide\",\n", + " \"glipizide\",\n", + " \"glyburide\",\n", + " \"tolbutamide\",\n", + " \"pioglitazone\",\n", + " \"rosiglitazone\",\n", + " \"acarbose\",\n", + " \"miglitol\",\n", + " \"troglitazone\",\n", + " \"tolazamide\",\n", + " \"examide\",\n", + " \"citoglipton\",\n", + " \"insulin\",\n", + " \"glyburide-metformin\",\n", + " \"glipizide-metformin\",\n", + " \"glimepiride-pioglitazone\",\n", + " \"metformin-rosiglitazone\",\n", + " \"metformin-pioglitazone\",\n", + "]\n", + "\n", + "# get the number of increased doses per medication and flip the output vertically\n", + "increased_meds = rdf.select(\n", + " pl.col(x).str.count_match(\"Up\").sum() for x in all_meds\n", + ").melt(variable_name=\"medication\", value_name=\"count\")\n", + "\n", + "# remove any medications that don't have at least 100 rows of data and get this result as a Polars dataframe\n", + "increased_meds = increased_meds.filter(pl.col(\"count\") > 20).collect().fetch()\n", + "\n", + "# convert output to a list via Pandas API\n", + "increased_meds = increased_meds.to_pandas()[\"medication\"].tolist()\n", + "increased_meds" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "eBulsGoG3Z5I", + "outputId": "9ccbd70d-809d-43f1-9aae-4b41592b2232" + }, + "execution_count": 226, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['metformin',\n", + " 'repaglinide',\n", + " 'nateglinide',\n", + " 'glimepiride',\n", + " 'glipizide',\n", + " 'glyburide',\n", + " 'pioglitazone',\n", + " 'rosiglitazone',\n", + " 'insulin']" + ] + }, + "metadata": {}, + "execution_count": 226 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We now do exactly the same for decreased medications." + ], + "metadata": { + "id": "GFA1-rz29W0X" + } + }, + { + "cell_type": "code", + "source": [ + "# get the number of increased doses per medication and flip the output vertically\n", + "decreased_meds = rdf.select(\n", + " pl.col(x).str.count_match(\"Down\").sum() for x in all_meds\n", + ").melt(variable_name=\"medication\", value_name=\"count\")\n", + "\n", + "# remove any medications that don't have at least 100 rows of data and get this result as a Polars dataframe\n", + "decreased_meds = decreased_meds.filter(pl.col(\"count\") > 20).collect().fetch()\n", + "\n", + "# convert output to a list via Pandas API\n", + "decreased_meds = decreased_meds.to_pandas()[\"medication\"].tolist()\n", + "decreased_meds" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ctt-Bg4f9dVH", + "outputId": "5b122acc-26ea-483b-9008-79b121fab3ed" + }, + "execution_count": 227, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['metformin',\n", + " 'repaglinide',\n", + " 'glimepiride',\n", + " 'glipizide',\n", + " 'glyburide',\n", + " 'pioglitazone',\n", + " 'rosiglitazone',\n", + " 'insulin']" + ] + }, + "metadata": {}, + "execution_count": 227 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "The next step is to loop over our list of `increased_meds` and get the percentage of patients who were readmitted to hospital within the following month after their dose of the drug was increased. We are able to use the `vstack` function to append each result for each drug into one table.\n", + "\n", + "We then simply add a column with the list of medicines in the same order and sort the list from highest to lowest." + ], + "metadata": { + "id": "Y_9as5FlqoZV" + } + }, + { + "cell_type": "code", + "source": [ + "# create a null table value for later use\n", + "table = None\n", + "\n", + "# iterate over medications list\n", + "for drugs in increased_meds:\n", + " # filter data down to cases where dosage increased\n", + " tmp = rdf.filter(pl.col(drugs) == \"Up\")\n", + " # get a RemoteLazyFrame of percentages of patients where each drug is increased were readmitted to hospital during study\n", + " percentages = tmp.select(\n", + " [\n", + " (\n", + " pl.col(\"is_readmitted\").sum() / pl.col(\"is_readmitted\").count() * 100\n", + " ).alias(\"overall readmitted %\"),\n", + " ]\n", + " )\n", + " # if first iteration, table and data_avilable are assigned percentages and row_count tables\n", + " if table == None:\n", + " table = percentages\n", + " # else we use vstack to add new row of percentages\n", + " else:\n", + " table = table.vstack(percentages)\n", + "\n", + "# convert table to Polars dataframe\n", + "table = table.collect().fetch()\n", + "\n", + "# create and add new column with medication names\n", + "new_col = pl.Series(\"medication\", increased_meds)\n", + "table = table.with_columns([new_col])\n", + "table.select([\"medication\", \"overall readmitted %\"]).sort(\n", + " pl.col(\"overall readmitted %\")\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 340 + }, + "id": "aEU6wEvYAhz6", + "outputId": "e51f858a-8992-4944-fb4c-74834b950207" + }, + "execution_count": 228, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "shape: (9, 2)\n", + "┌───────────────┬──────────────────────┐\n", + "│ medication ┆ overall readmitted % │\n", + "│ --- ┆ --- │\n", + "│ str ┆ f64 │\n", + "╞═══════════════╪══════════════════════╡\n", + "│ rosiglitazone ┆ 39.88764 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ metformin ┆ 40.76851 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ glimepiride ┆ 42.507645 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ glyburide ┆ 44.211823 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ ... ┆ ... │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ repaglinide ┆ 48.181818 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ glipizide ┆ 50.0 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ insulin ┆ 51.537646 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ pioglitazone ┆ 51.709402 │\n", + "└───────────────┴──────────────────────┘" + ], + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (9, 2)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "medication\n", + "\n", + "overall readmitted %\n", + "
\n", + "str\n", + "\n", + "f64\n", + "
\n", + ""rosiglitazone"\n", + "\n", + "39.88764\n", + "
\n", + ""metformin"\n", + "\n", + "40.76851\n", + "
\n", + ""glimepiride"\n", + "\n", + "42.507645\n", + "
\n", + ""glyburide"\n", + "\n", + "44.211823\n", + "
\n", + ""nateglinide"\n", + "\n", + "45.833333\n", + "
\n", + ""repaglinide"\n", + "\n", + "48.181818\n", + "
\n", + ""glipizide"\n", + "\n", + "50.0\n", + "
\n", + ""insulin"\n", + "\n", + "51.537646\n", + "
\n", + ""pioglitazone"\n", + "\n", + "51.709402\n", + "
\n", + "
" + ] + }, + "metadata": {}, + "execution_count": 228 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This gives us significiant results that merit further exploration with a difference of around 14% between the likelihood of an increased dose of our lowest and highest placed drugs on the list leading to readmission within the course of the study.\n", + "\n", + "We can run the same query for a reduction in medication, again leading to significant results." + ], + "metadata": { + "id": "PtGj-w4OrU_5" + } + }, + { + "cell_type": "code", + "source": [ + "# create a null table value for later use\n", + "table = None\n", + "\n", + "# iterate over medications list\n", + "for drugs in decreased_meds:\n", + " # filter data down to cases where dosage increased\n", + " tmp = rdf.filter(pl.col(drugs) == \"Down\")\n", + " # get a RemoteLazyFrame of percentages of patients where each drug is increased were readmitted to hospital during study\n", + " percentages = tmp.select(\n", + " [\n", + " (\n", + " pl.col(\"is_readmitted\").sum() / pl.col(\"is_readmitted\").count() * 100\n", + " ).alias(\"overall readmitted %\"),\n", + " ]\n", + " )\n", + " # if first iteration, table and data_avilable are assigned percentages and row_count tables\n", + " if table == None:\n", + " table = percentages\n", + " # else we use vstack to add new row of percentages\n", + " else:\n", + " table = table.vstack(percentages)\n", + "\n", + "table = table.collect().fetch()\n", + "new_col = pl.Series(\"medication\", decreased_meds)\n", + "table = table.with_columns([new_col])\n", + "table.select([\"medication\", \"overall readmitted %\"]).sort(\n", + " pl.col(\"overall readmitted %\")\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 312 + }, + "id": "nnGQB49dhwqE", + "outputId": "f0f36f25-88fa-452a-a34e-6d65e2d981d2" + }, + "execution_count": 229, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "shape: (8, 2)\n", + "┌───────────────┬──────────────────────┐\n", + "│ medication ┆ overall readmitted % │\n", + "│ --- ┆ --- │\n", + "│ str ┆ f64 │\n", + "╞═══════════════╪══════════════════════╡\n", + "│ rosiglitazone ┆ 31.034483 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ metformin ┆ 45.043478 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ glimepiride ┆ 47.938144 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ glyburide ┆ 48.758865 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ repaglinide ┆ 48.888889 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ insulin ┆ 52.790964 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ glipizide ┆ 52.857143 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ pioglitazone ┆ 53.389831 │\n", + "└───────────────┴──────────────────────┘" + ], + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (8, 2)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "medication\n", + "\n", + "overall readmitted %\n", + "
\n", + "str\n", + "\n", + "f64\n", + "
\n", + ""rosiglitazone"\n", + "\n", + "31.034483\n", + "
\n", + ""metformin"\n", + "\n", + "45.043478\n", + "
\n", + ""glimepiride"\n", + "\n", + "47.938144\n", + "
\n", + ""glyburide"\n", + "\n", + "48.758865\n", + "
\n", + ""repaglinide"\n", + "\n", + "48.888889\n", + "
\n", + ""insulin"\n", + "\n", + "52.790964\n", + "
\n", + ""glipizide"\n", + "\n", + "52.857143\n", + "
\n", + ""pioglitazone"\n", + "\n", + "53.389831\n", + "
\n", + "
" + ] + }, + "metadata": {}, + "execution_count": 229 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We see that the first four drugs (rosiglitazone, metformin, glimepiride and glyburide) and last four drugs (repaglinide, insulin, glipizide and pioglitazone) in each list are the same, which could suggest that they are more effective overall treatments, regardless of whether they are increased or decreased. \n", + "\n", + "However, this could also be explained by these medications being prescribed for milder diabetes or these being the go-to drugs, aka. the bottom four drugs are only prescribed when patients are not responding well to medication. This would need to be considered by the client." + ], + "metadata": { + "id": "DuMXzt7zIHp3" + } + }, + { + "cell_type": "markdown", + "source": [ + "### Conclusions\n", + "\n", + "This brings us to the end of our data exploration. We gained meaningful insights:\n", + "\n", + " - 20-30 year olds are the most at-risk age group of short-term hospital readmission and emergency visits.\n", + " \n", + " - The number of hospital admissions per age group increases with age.\n", + "\n", + " - Taking patients' A1C levels may encourage doctors to make changes in medication.\n", + " \n", + " - Not taking patients' A1C levels may increase the likelihood of hospital readmissions.\n", + "\n", + " - Regardless of dosage increases or decreases, the following medications appear most effective at reducing hospital readmissions: rosiglitazone, metformin, glimepiride and glyburide.\n", + "\n", + " - Regardless of dosage increases or decreases, the following medications appear less effective at reducing hospital readmissions: repaglinide, insulin, glipizide and pioglitazone.\n", + "\n", + "\n", + "This is a rich dataset with many avenues to explore, so feel free to continue exploring!\n", + "\n", + "However in our case, that's all we've got time for! Let's close our connection and stop the server. \n", + "\n", + "(Leave this next block commented if you want to continue to run queries on the dataset instead!)\n" + ], + "metadata": { + "id": "cSU9X1fDvvZQ" + } + }, + { + "cell_type": "code", + "source": [ + "# connection.close()\n", + "# bastionlab_server.stop(srv)" + ], + "metadata": { + "id": "xROO5Oxzvev-" + }, + "execution_count": 230, + "outputs": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "base", + "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.9.13 (main, Aug 25 2022, 23:26:10) \n[GCC 11.2.0]" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "d130ca42b532f14c740c9405384e6a25814bad609bad1a40b3b3f26954036080" + } + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/mkdocs.yml b/mkdocs.yml index f2d8b068..22c22bbb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -107,7 +107,7 @@ nav: - Data exploration: - Covid-19 cleaning and exploration: "docs/how-to-guides/covid_cleaning_exploration.ipynb" - Fraud detection cleaning and exploration: "docs/how-to-guides/fraud_detection.ipynb" - - Diabetes cleaning and exploration- part one: "docs/how-to-guides/diabetes_p1.ipynb" + - Diabetes cleaning and exploration- part one: "docs/how-to-guides/diabetes_exploration.ipynb" - Deep learning: - Fine Tuning Distilbert on BastionLab: "docs/how-to-guides/distilbert_example_notebook.ipynb" - 🛠️ API reference: "docs/resources/bastionlab/index.html" From b07674dcce6cffe4fcc7b7790a13668f6b1e60a8 Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Wed, 22 Feb 2023 10:33:46 +0100 Subject: [PATCH 03/22] intro done --- docs/docs/how-to-guides/diabetes_p1.ipynb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_p1.ipynb b/docs/docs/how-to-guides/diabetes_p1.ipynb index 072b6b31..bc64892f 100644 --- a/docs/docs/how-to-guides/diabetes_p1.ipynb +++ b/docs/docs/how-to-guides/diabetes_p1.ipynb @@ -8,21 +8,21 @@ }, "source": [ "
\n", - "

Data exploration of diabetes hospital admissions: Part I

\n", + "

Data exploration of diabetes hospital admissions

\n", " \n", " \"Open\n", "
\n", "______________________________________________________\n", "\n", - "Despite major technological breakthroughs in cybersecurity and privacy in recent years, secure off-premises data science collaboration has remained out of reach. This is a major problem for the health sector which has so much to gain from the power of data but also so much at risk when it comes to patients' highly sensitive medical records.\n", + "Despite major recent technological breakthroughs in cybersecurity and privacy, secure off-premises data science collaboration has remained out of reach. This is a major problem for the health sector which has so much to gain from the power of data but so much at risk when it comes to patients' highly sensitive records.\n", "\n", - "We are on a mission to make remote data science collaboration safe for the health sector. Using BastionLab, data owners can set strict access policies on datasets for collaborators, allowing them to run privacy-friendly queries and train and deploy ML models on datasets whilst blocking access to raw data.\n", + "BastionLab's goal is to make this issue disappear so that remote data science collaborations can happen safely in the medical industry. Its framework lets data owners set a strict access policies on datasets for collaborators and enforces that data scientists can explore or train ML models while never accessing the raw data.\n", "\n", - "In this how-to guide, we will explore a dataset of diabetic patients admitted to hospital in the US over a ten year period. Diabetes is a disease that affects over 10% of the US population and can lead to serious health complications. The dataset contains 51 columns of data, including readmission to hospital, changes to medication and primary, secondary and terciary patient diagnoses.\n", + "In this guide, we will explore a dataset of diabetic patients admitted to hospital in the US over a ten year period. Diabetes is a disease that affects over 10% of the US population and can lead to serious health complications. The dataset contains 51 columns of data, including readmission to hospital, changes to medication and primary, secondary and terciary patient diagnoses.\n", "\n", - "In part I of this two-part data exploration. We will see how the data owner can upload a dataset to BastionLab and how a data scientist can then connect to BastionLab and **clean the dataset**.\n", + "First, we will see how the data owner can upload a dataset to BastionLab and how a data scientist can then connect to BastionLab and **clean the dataset**. Then we'll go on analysing it - showing it is possible to do normal data science work without accessing the data in clear.\n", "\n", - "But before we can do that, we first need to get everything set up!\n", + "But before we can do that, let's get everything set up!\n", "\n", "## Pre-requisites\n", "___________________________________________\n", From cda26b1ba23432d38cb97dc03c60da825cbd89ef Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Wed, 22 Feb 2023 10:38:33 +0100 Subject: [PATCH 04/22] saving progress --- docs/docs/how-to-guides/diabetes_p1.ipynb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_p1.ipynb b/docs/docs/how-to-guides/diabetes_p1.ipynb index bc64892f..1429a544 100644 --- a/docs/docs/how-to-guides/diabetes_p1.ipynb +++ b/docs/docs/how-to-guides/diabetes_p1.ipynb @@ -51,32 +51,34 @@ "!pip install bastionlab\n", "!pip install bastionlab_server\n", "\n", - "# dowloading the dataset using Google Drive tool dgown\n", + "# dowloading the dataset using Google Drive tool gdown\n", "!pip install gdown\n", "!pip install --upgrade --no-cache-dir gdown\n", "!gdown --id \"1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI\"" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "NJ67chDB_G1l" }, "source": [ - "The dataset we are using for this how-to guide is based on the Diabetes 130-US hospitals for years 1999-2008 dataset. It contains 10 years of data on diabetes admissions from 130 US hospitals. It includes over 50 features representing patient and hospital outcomes.\n", + "The dataset we are using for this how-to guide is based on the Diabetes 130-US hospitals, for years 1999-2008. It contains 10 years of information on diabetes admissions from 130 US hospitals. It includes over 50 features representing patient and hospital outcomes.\n", "\n", ">For more detailed information on the dataset, you can check out the description and full dataset by following this [link](https://archive.ics.uci.edu/ml/datasets/diabetes+130-us+hospitals+for+years+1999-2008).\n", "\n", - "However, this dataset had already been pre-processed before publication which stopped us from showing you some key data cleaning steps. We therefore made a few modifications to replace some pre-grouped data columns with randomly populated data. You can check out exactly how we did this using Polars [here](https://colab.research.google.com/drive/174EJvK8u8mGGWb6ypLH9SKaeRnX-pEou?usp=share_link). " + "This dataset had already been pre-processed before publication which stopped us from showing you some key data cleaning steps. We made a few modifications to replace some pre-grouped data columns with randomly populated data. You can check out exactly how we did this using the Polars data science library [here](https://colab.research.google.com/drive/174EJvK8u8mGGWb6ypLH9SKaeRnX-pEou?usp=share_link). " ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "OjL01I5c_G1m" }, "source": [ - "## Data owner's POV\n", + "## Data owner's side\n", "___________________________________________\n", "\n", "### Launching the server\n", From 69f1ee9e58cbda43b92a0d5645ef2d26fa87bde3 Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Wed, 22 Feb 2023 10:41:04 +0100 Subject: [PATCH 05/22] changed modifications to right document --- .../how-to-guides/diabetes_exploration.ipynb | 1012 +++++++++-------- docs/docs/how-to-guides/diabetes_p1.ipynb | 26 +- 2 files changed, 520 insertions(+), 518 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index 29dfaab5..ff161fed 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -1,27 +1,28 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "jdvo0Bjb_G1c" }, "source": [ "
\n", - "

Data exploration of diabetes hospital admissions: Part I

\n", + "

Data exploration of diabetes hospital admissions

\n", " \n", " \"Open\n", "
\n", "______________________________________________________\n", "\n", - "Despite major technological breakthroughs in cybersecurity and privacy in recent years, secure off-premises data science collaboration has remained out of reach. This is a major problem for the health sector which has so much to gain from the power of data but also so much at risk when it comes to patients' highly sensitive medical records.\n", + "Despite major recent technological breakthroughs in cybersecurity and privacy, secure off-premises data science collaboration has remained out of reach. This is a major problem for the health sector which has so much to gain from the power of data but so much at risk when it comes to patients' highly sensitive records.\n", "\n", - "We are on a mission to make remote data science collaboration safe for the health sector. Using BastionLab, data owners can set strict access policies on datasets for collaborators, allowing them to run privacy-friendly queries and train and deploy ML models on datasets whilst blocking access to raw data.\n", + "BastionLab's goal is to make this issue disappear so that remote data science collaborations can happen safely in the medical industry. Its framework lets data owners set a strict access policies on datasets for collaborators and enforces that data scientists can explore or train ML models while never accessing the raw data.\n", "\n", - "In this how-to guide, we will explore a dataset of diabetic patients admitted to hospital in the US over a ten year period. Diabetes is a disease that affects over 10% of the US population and can lead to serious health complications. The dataset contains 51 columns of data, including readmission to hospital, changes to medication and primary, secondary and terciary patient diagnoses.\n", + "In this guide, we will explore a dataset of diabetic patients admitted to hospital in the US over a ten year period. Diabetes is a disease that affects over 10% of the US population and can lead to serious health complications. The dataset contains 51 columns of data, including readmission to hospital, changes to medication and primary, secondary and terciary patient diagnoses.\n", "\n", - "In part I of this two-part data exploration. We will see how the data owner can upload a dataset to BastionLab and how a data scientist can then connect to BastionLab and **clean the dataset**.\n", + "First, we will see how the data owner can upload a dataset to BastionLab and how a data scientist can then connect to BastionLab and **clean the dataset**. Then we'll go on analysing it - showing it is possible to do normal data science work without accessing the data in clear.\n", "\n", - "But before we can do that, we first need to get everything set up!\n", + "But before we can do that, let's get everything set up!\n", "\n", "## Pre-requisites\n", "___________________________________________\n", @@ -50,23 +51,24 @@ "!pip install bastionlab\n", "!pip install bastionlab_server\n", "\n", - "# dowloading the dataset using Google Drive tool dgown\n", + "# dowloading the dataset using Google Drive tool gdown\n", "!pip install gdown\n", "!pip install --upgrade --no-cache-dir gdown\n", "!gdown \"1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI\"" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "NJ67chDB_G1l" }, "source": [ - "The dataset we are using for this how-to guide is based on the Diabetes 130-US hospitals for years 1999-2008 dataset. It contains 10 years of data on diabetes admissions from 130 US hospitals. It includes over 50 features representing patient and hospital outcomes.\n", + "The dataset we are using for this how-to guide is based on the Diabetes 130-US hospitals, for years 1999-2008. It contains 10 years of information on diabetes admissions from 130 US hospitals. It includes over 50 features representing patient and hospital outcomes.\n", "\n", ">For more detailed information on the dataset, you can check out the description and full dataset by following this [link](https://archive.ics.uci.edu/ml/datasets/diabetes+130-us+hospitals+for+years+1999-2008).\n", "\n", - "However, this dataset had already been pre-processed before publication which stopped us from showing you some key data cleaning steps. We therefore made a few modifications to replace some pre-grouped data columns with randomly populated data. You can check out exactly how we did this using Polars [here](https://colab.research.google.com/drive/174EJvK8u8mGGWb6ypLH9SKaeRnX-pEou?usp=share_link). " + "This dataset had already been pre-processed before publication which stopped us from showing you some key data cleaning steps. We made a few modifications to replace some pre-grouped data columns with randomly populated data. You can check out exactly how we did this using the Polars data science library [here](https://colab.research.google.com/drive/174EJvK8u8mGGWb6ypLH9SKaeRnX-pEou?usp=share_link). " ] }, { @@ -99,8 +101,8 @@ }, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "BastionLab server (version 0.3.7) already installed\n", "Libtorch (version 1.13.1) already installed\n", @@ -207,8 +209,8 @@ }, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "63c8152d-f5af-41ec-b22c-aea51a8465b5\n" ] @@ -261,16 +263,16 @@ "cell_type": "code", "execution_count": 197, "metadata": { - "id": "C7j4vdDd_G10", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "C7j4vdDd_G10", "outputId": "7941b960-a0e4-4e9d-f0a4-13ef5c9ba296" }, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "\u001b[31mThe query has been rejected by the data owner.\u001b[37m\n" ] @@ -328,22 +330,22 @@ "cell_type": "code", "execution_count": 199, "metadata": { - "id": "TT3mSjII_G13", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "TT3mSjII_G13", "outputId": "4a463355-2753-40d6-ce62-a2c8fa30c63a" }, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "FetchableLazyFrame(identifier=63c8152d-f5af-41ec-b22c-aea51a8465b5)" ] }, + "execution_count": 199, "metadata": {}, - "execution_count": 199 + "output_type": "execute_result" } ], "source": [ @@ -368,16 +370,16 @@ "cell_type": "code", "execution_count": 200, "metadata": { - "id": "G-g8rOnj_G15", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "G-g8rOnj_G15", "outputId": "797dedc6-f4c5-4bb7-8830-3c2b8295fbbc" }, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "['encounter_id', 'patient_nbr', 'race', 'gender', 'age', 'weight', 'admission_type_id', 'discharge_disposition_id', 'admission_source_id', 'time_in_hospital', 'payer_code', 'medical_specialty', 'num_lab_procedures', 'num_procedures', 'num_medications', 'number_outpatient', 'number_emergency', 'number_inpatient', 'diag_1', 'diag_2', 'diag_3', 'number_diagnoses', 'max_glu_serum', 'A1Cresult', 'metformin', 'repaglinide', 'nateglinide', 'chlorpropamide', 'glimepiride', 'acetohexamide', 'glipizide', 'glyburide', 'tolbutamide', 'pioglitazone', 'rosiglitazone', 'acarbose', 'miglitol', 'troglitazone', 'tolazamide', 'examide', 'citoglipton', 'insulin', 'glyburide-metformin', 'glipizide-metformin', 'glimepiride-pioglitazone', 'metformin-rosiglitazone', 'metformin-pioglitazone', 'change', 'diabetesMed', 'readmitted']\n" ] @@ -541,39 +543,16 @@ "cell_type": "code", "execution_count": 204, "metadata": { - "id": "Pzz5qvSJWd2V", "colab": { "base_uri": "https://localhost:8080/", "height": 285 }, + "id": "Pzz5qvSJWd2V", "outputId": "d0316533-6304-4dce-8357-e0caa0d897da" }, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": [ - "shape: (7, 2)\n", - "┌───────────────┬─────────────────┐\n", - "│ column name ┆ null values (%) │\n", - "│ --- ┆ --- │\n", - "│ str ┆ f64 │\n", - "╞═══════════════╪═════════════════╡\n", - "│ max_glu_serum ┆ 94.746772 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ A1Cresult ┆ 83.277322 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ readmitted ┆ 53.911916 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ race ┆ 2.233555 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ diag_3 ┆ 1.398306 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ diag_2 ┆ 0.351787 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ diag_1 ┆ 0.020636 │\n", - "└───────────────┴─────────────────┘" - ], "text/html": [ "
\n", "\n", - "\n", - "shape: (7, 2)\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "column name\n", - "\n", - "null values (%)\n", - "
\n", - "str\n", - "\n", - "f64\n", - "
\n", - ""max_glu_serum"\n", - "\n", - "94.746772\n", - "
\n", - ""A1Cresult"\n", - "\n", - "83.277322\n", - "
\n", - ""readmitted"\n", - "\n", - "53.911916\n", - "
\n", - ""race"\n", - "\n", - "2.233555\n", - "
\n", - ""diag_3"\n", - "\n", - "1.398306\n", - "
\n", - ""diag_2"\n", - "\n", - "0.351787\n", - "
\n", - ""diag_1"\n", - "\n", - "0.020636\n", - "
\n", - "
" - ], - "text/plain": [ - "shape: (7, 2)\n", - "┌───────────────┬─────────────────┐\n", - "│ column name ┆ null values (%) │\n", - "│ --- ┆ --- │\n", - "│ str ┆ f64 │\n", - "╞═══════════════╪═════════════════╡\n", - "│ max_glu_serum ┆ 94.746772 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ A1Cresult ┆ 83.277322 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ readmitted ┆ 53.911916 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ race ┆ 2.233555 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ diag_3 ┆ 1.398306 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ diag_2 ┆ 0.351787 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ diag_1 ┆ 0.020636 │\n", - "└───────────────┴─────────────────┘" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# melt table to a two-column table with the column name 'column' and corresponding percetage of null values 'null values', sort in descending order and display\n", - "percent_missing = percent_missing.melt(\n", - " variable_name=\"column name\",\n", - " value_name=\"null values (%)\",\n", - ").sort(pl.col(\"null values (%)\"), reverse=True)\n", - "\n", - "# filter out columns with no null values and display\n", - "percent_missing.filter(pl.col(\"null values (%)\") > 0).collect().fetch()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "4n0jnBPyYLjf" - }, - "source": [ - "There are several strategies for dealing with null values such as deleting these rows from the dataset with the `drop_nulls` method or filling null values with the `fill_null` method. But in our case, we are just happy to have visibility over which columns including null values and to what extent so that we can handle and analyse these columns with this in mind." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "-WUugovwve2c" - }, - "source": [ - "### Grouping data: ICD-9 medical codes\n", - "Grouping data is going to be the largest and most crucial task in this data cleaning job. This is a dataset with a low of wide-ranging numerical values which need to be grouped so that our data analysts can gain meaningul insights.\n", - "\n", - "Let's start with our diagnoses columns: `diag_1`, `diag_2` and `diag_3`.\n", - "\n", - "These columns contain the primary, secondary and terciary diagnoses given to patients. These diagnoses are given using [ICD-9 medical codes](https://en.wikipedia.org/wiki/List_of_ICD-9_codes) which are three digit codes ranging from 1 to 1000, as well as E800–E999 codes and V01–V82 codes.\n", - "\n", - "By grabbing all the unique values in the `diag_1` column and counting them, we can see that we have over 700 different values in this column!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 121 - }, - "id": "7pVHpmLWj6_w", - "outputId": "c7d50a9f-f919-4893-a1f4-50b1ba7d20c5" - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "shape: (1, 1)\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "diag_1\n", - "
\n", - "u32\n", - "
\n", - "717\n", - "
\n", - "
" - ], - "text/plain": [ - "shape: (1, 1)\n", - "┌────────┐\n", - "│ diag_1 │\n", - "│ --- │\n", - "│ u32 │\n", - "╞════════╡\n", - "│ 717 │\n", - "└────────┘" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tmp = rdf.select(\"diag_1\").unique()\n", - "tmp.select(pl.col(\"diag_1\").count()).collect().fetch()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "cPsmfkBpkPCv" - }, - "source": [ - "Standard groupings of these codes have already been designed. What we want to do is replace the hundreds of unique codes we have in our our diagnoses columns with these groupings!\n", - "\n", - "To do this, we will again use Polars `when().then().otherwise()` functions to perform a find and replace operation. We will use `when()` to check if the codes in each cell are either E or V codes or fall within a certain numerical range.\n", - "\n", - "However, these diagnoses columns are currently string columns, since the E and V codes are not entirely numerical. This is problematic since we cannot perform numerical comparisons on these cells and we cannot convert the column type to a numerical one because of these 'E' and 'V' values!\n", - "\n", - "We will solve this problem in three steps:\n", - "\n", - "1) We will find and replace all E codes with a \"-1\" value and V codes with a \"-2\" value.\n", - "\n", - "2) We will `select()` our columns and `cast()` all values in these columns to float values.\n", - "\n", - "3) We will perform the find and replace operation to group all ICD-9 codes into their associated group- of which there are 17, plus E codes and V codes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "xPNFpZ7lW8qR" - }, - "outputs": [], - "source": [ - "# iterate over the three diagnoses columns\n", - "for col in [\"diag_1\", \"diag_2\", \"diag_3\"]:\n", - " # step one: replace troublesome E and V codes with temporary -1 and -2 codes\n", - " rdf = rdf.with_columns(\n", - " [\n", - " pl.when(\n", - " pl.col(col).str.starts_with(\"E\")\n", - " ) # use Polars str.starts_with method to identify E codes\n", - " .then(\"-1\")\n", - " .when(pl.col(col).str.starts_with(\"V\"))\n", - " .then(\"-2\")\n", - " .otherwise(pl.col(col))\n", - " .keep_name()\n", - " ]\n", - " )\n", - "\n", - " # step two: cast all values in column to float values\n", - " rdf = rdf.with_columns([pl.col(col).cast(pl.Float64)])\n", - "\n", - " # step three: replace all codes with their corresponding group\n", - " rdf = rdf.with_columns(\n", - " [\n", - " pl.when(pl.col(col) >= 800)\n", - " .then(\"injury and poisoning\")\n", - " .when(pl.col(col) >= 780)\n", - " .then(\"symptoms, signs & ill-defined\")\n", - " .when(pl.col(col) >= 760)\n", - " .then(\"perinatal\")\n", - " .when(pl.col(col) >= 740)\n", - " .then(\"congenital anomalies\")\n", - " .when(pl.col(col) >= 710)\n", - " .then(\"musculoskeletal & connective tissue\")\n", - " .when(pl.col(col) >= 680)\n", - " .then(\"skin\")\n", - " .when(pl.col(col) >= 630)\n", - " .then(\"pregnancy, childbirth and peurperium\")\n", - " .when(pl.col(col) >= 580)\n", - " .then(\"genitourinary\")\n", - " .when(pl.col(col) >= 520)\n", - " .then(\"digestive\")\n", - " .when(pl.col(col) >= 460)\n", - " .then(\"respiratory\")\n", - " .when(pl.col(col) >= 390)\n", - " .then(\"circulatory\")\n", - " .when(pl.col(col) >= 320)\n", - " .then(\"nervous system and sense organs\")\n", - " .when(pl.col(col) >= 290)\n", - " .then(\"mental disorders\")\n", - " .when(pl.col(col) >= 280)\n", - " .then(\"blood and blood-forming organs\")\n", - " .when(pl.col(col) >= 240)\n", - " .then(\"neoplasms\")\n", - " .when(pl.col(col) >= 140)\n", - " .then(\"endocrine, nutritional, metabolic and immunity\")\n", - " .when(pl.col(col) >= 1)\n", - " .then(\"infectious and parasitic\")\n", - " .when(pl.col(col) == -1)\n", - " .then(\"E code (injury\")\n", - " .when(pl.col(col) == -2)\n", - " .then(\"V code (other)\")\n", - " .otherwise(\n", - " pl.col(col)\n", - " ) # otherwise (null values) keep original value from the column\n", - " .alias(\n", - " col\n", - " ) # give resulting column same name as previously- therefore replacing old columns\n", - " ]\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "P1MquUrNlXDO" - }, - "source": [ - "By performing the same query as previously to count `diag_1`'s unique values, we see there is now a much more manageable 19 labels in our data column! This will be similar for the `diag_2` and `diag_3` columns." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 121 - }, - "id": "YfC9CmWWdu0n", - "outputId": "c81284d2-8e09-49b6-f411-512da2421902" - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "shape: (1, 1)\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "diag_1\n", - "
\n", - "u32\n", - "
\n", - "19\n", - "
\n", - "
" - ], - "text/plain": [ - "shape: (1, 1)\n", - "┌────────┐\n", - "│ diag_1 │\n", - "│ --- │\n", - "│ u32 │\n", - "╞════════╡\n", - "│ 19 │\n", - "└────────┘" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tmp = rdf.select(\"diag_1\").unique()\n", - "tmp.select(pl.col(\"diag_1\").count()).collect().fetch()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BvdGu7GmsZVu" - }, - "source": [ - "### Grouping data: A1C, max glucose levels and readmittance\n", - "\n", - "We want to group together data in another three other columns using the same `.then().when().otherwise()` methods.\n", - "\n", - "The first two are `A1Cresult`, which contains patients' HbA1c level, and `max_glu_serum`, which contains their blood glucose level. We want to group these into `very high`, `high`, `normal` groups based on levels defined in our project brief.\n", - "\n", - "These columns are both currently string columns, so we will also need to convert them to float values in order to perform numerical comparisons on them." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "FgyrnPAlsZ0u" - }, - "outputs": [], - "source": [ - "# cast `max_glu_serum` and `A1Cresult` columns to float values\n", - "rdf = rdf.with_columns(\n", - " [pl.col(\"max_glu_serum\").cast(pl.Float64), pl.col(\"A1Cresult\").cast(pl.Float64)]\n", - ")\n", - "\n", - "# group values in A1Cresult column\n", - "rdf = rdf.with_columns(\n", - " [\n", - " pl.when(pl.col(\"A1Cresult\") >= 8)\n", - " .then(\"very high\")\n", - " .when(pl.col(\"A1Cresult\") >= 7)\n", - " .then(\"high\")\n", - " .when(pl.col(\"A1Cresult\") >= 0)\n", - " .then(\"normal\")\n", - " .otherwise(pl.col(\"A1Cresult\"))\n", - " .keep_name()\n", - " ]\n", - ")\n", - "\n", - "# group values in max_glu_serum column\n", - "rdf = rdf.with_columns(\n", - " [\n", - " pl.when(pl.col(\"max_glu_serum\") >= 300)\n", - " .then(\"very high\")\n", - " .when(pl.col(\"max_glu_serum\") >= 200)\n", - " .then(\"high\")\n", - " .when(pl.col(\"max_glu_serum\") >= 0)\n", - " .then(\"normal\")\n", - " .otherwise(pl.col(\"max_glu_serum\"))\n", - " .keep_name()\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Buu2nja5w6Db" - }, - "source": [ - "The final column we want to group is the `readmitted` column which records the number of days before any further re-hospitalization linked to the patients' diabetic condition.\n", - "\n", - "We will group this column into `short-term` and `long-term` and `n/a` (not applicable) groups.\n", - "\n", - "Simiar to in previous examples, we must first convert values in this column from strings to integer values." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "9cca9DhSw6We" - }, - "outputs": [], - "source": [ - "# cast readmitted column to integer values\n", - "rdf = rdf.with_columns([pl.col(\"readmitted\").cast(pl.Int64)])\n", - "\n", - "# group values\n", - "rdf = rdf.with_columns(\n", - " [\n", - " pl.when(pl.col(\"readmitted\") < 31)\n", - " .then(\"short-term\")\n", - " .when(pl.col(\"readmitted\") >= 31)\n", - " .then(\"long-term\")\n", - " .otherwise(\"n/a\")\n", - " .keep_name()\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "kuwxAGYBoOQJ" - }, - "source": [ - "### Grouping data: binning ages\n", - "The next grouping task we will perform is to group ages into intervals of 10 years. We do this both to increase data privacy and to more easily draw correlations linked to broader age groups.\n", - "\n", - "We won't need to perform an `when().then().otherwise()` query here since BastionLab has its own `ApplyBins` tool.\n", - "\n", - "`ApplyBins` is a PyTorch module and the grouping of numbers takes place in its `forward` function. We can pass PyTorch modules to BastionLab's `apply_udf` function which will apply the `forward` function to any specified columns.\n", - "\n", - "All in all, we just three steps to bin our age column data:\n", - "\n", - "1) We import `ApplyBins` from `bastionlab.polars.utils`.\n", - "1) We instantiate our `ApplyBins` PyTorch module class with our bins interval given as the only argument.\n", - "2) We use `apply_udf`, providing a list of the column we want to modify and the PyTorch module, `ApplyBins`, that we wish to apply to these columns." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "2EC3smnWc06Q" - }, - "outputs": [], - "source": [ - "from bastionlab.polars.utils import ApplyBins\n", - "\n", - "# get an instance of ApplyBins module which will bin data into groups of 10\n", - "model = ApplyBins(10)\n", - "\n", - "# apply bins to \"age\" column\n", - "rdf = rdf.apply_udf([\"age\"], model)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "1pOQYPYSsVns" - }, - "source": [ - "> Note, you can create your own custom PyTorch modules and apply them to columns using `apply_udf`. This is BastionLab's way of allowing you to apply custom functions on datasets, whilst restricting what you can do for security reasons. Functionality like `lambda`, `map` and `apply` are blocked by BastionLab as they are too permissive and could be misused." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "gYRVmqTitckT" - }, - "source": [ - "### Adding columns\n", - "\n", - "Up until this point we have been using the `.when().then().otherwise()` and `with_columns` methods to make changes to existing columns, but by providing a new column name to the `alias` method, we can create a new column.\n", - "\n", - "In the following example, we will create a `is_readmitted` column which will store `False` for all the \"n/a\" values in our original `readmitted` column and `True` for any other values. This will allow us to quickly query whether certain groups of data have been readmitted or not!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "B2JGdBhmteAz" - }, - "outputs": [], - "source": [ - "rdf = rdf.with_columns(\n", - " [\n", - " pl.when(pl.col(\"readmitted\") == \"n/a\")\n", - " .then(False)\n", - " .otherwise(True)\n", - " .alias(\n", - " \"is_readmitted\"\n", - " ) # ending the .when().then().otherwise() pattern with .alias() allows us to provide a new column name\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "edoL2_uy_G19" - }, - "source": [ - "### Converting column types\n", - "\n", - "We have already seen examples where we have `explicity` converted the datatype of our columns using the `cast` method. Here we will `implicity` convert the datatype by replacing the \"yes\" and \"no\" values in our `change` column, which represent whether a patient's medication has been changed, to a boolean True or False value. \n", - "\n", - "The datatype of this column will be changed automatically by this operation as we can see below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "fMhSrD8__G19", - "outputId": "5230be79-58b9-4318-c5bb-052cd03e35d1" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[polars.datatypes.Utf8]" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# print out initial datatype of \"change\" column\n", - "\n", - "rdf.select(\"change\").dtypes" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "hYWJ9FB70mcM", - "outputId": "cc2736c7-e4be-48dd-805d-352ba0d6196e" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[polars.datatypes.Boolean]" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# replaces Yes/No values with True/False\n", - "rdf = rdf.with_columns(\n", - " [pl.when(pl.col(\"change\") == \"No\").then(False).otherwise(True).keep_name()]\n", - ")\n", - "\n", - "# print out datatype of column post find and replace operation\n", - "rdf.select(\"change\").dtypes" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "CYS-Mkl1tD8t" - }, - "source": [ - "### Saving our RemoteLazyFrame and disconnecting\n", - "\n", - "Our dataframe is all clean and ready for the next step: data analysis/ visualization. Data scientist #1 is going to be reassigned to another task. They will save their cleaned RemoteLazyFrame and make a note of the identifier to share with data scientist #2.\n", - "\n", - "We need to perform `collect()` before saving or getting an identifier for our RemoteLazyFrame since the `save` method and `identifier` attribute are only available for FetchableLazyFrames.\n", - "\n", - ">Note, the data owner must have set the `savable` option to `True` when uploading the dataframe for this operation to be possible!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 35 - }, - "id": "DWu6ToX53bm9", - "outputId": "3063c7ae-df03-4b74-d7a3-e2ceffc56083" - }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, - "text/plain": [ - "'49b66d7a-6c80-45fb-8278-9992c91f8666'" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rdf.collect().save()\n", - "saved_identifier = rdf.collect().identifier\n", - "saved_identifier" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "NgkiBinG6DJ2" - }, - "source": [ - "They can now close their connection to the BastionLab server." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "qoiADM1W6OC_" - }, - "outputs": [], - "source": [ - "connection.close()" - ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.10" - }, - "orig_nbformat": 4, - "vscode": { - "interpreter": { - "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" - } - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} From 2f061a97d281a170b4bf0d40bbd40a5d7bd687ab Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Wed, 22 Feb 2023 11:00:17 +0100 Subject: [PATCH 09/22] changed mkdocs order and name --- docs/docs/how-to-guides/diabetes_exploration.ipynb | 10 +++++++--- mkdocs.yml | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index fe25f454..ce04ad57 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -236,6 +236,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "ywAyp-2y_G1y" @@ -243,11 +244,14 @@ "source": [ "`send_df()` will return a FetchableLazyFrame instance, which we will work with directly from now on. \n", "\n", - ">Note that we talk about two types of LazyFrames in BastionLab: `RemoteLazyFrames` and `FetchableLazyFrames`. \n", + "
\n", + "

Note

\n", + "

We talk about two types of LazyFrames in BastionLab: `RemoteLazyFrames` and `FetchableLazyFrames`. \n", "\n", - "> In BastionLab, when we run a query, it is not immediately executed. Like with Polar's LazyFrames, pending queries are only executed when we call `collect`. `FetchableLazyFrames` are BastionLab's remote lazy frames when there are no pending queries to run, either because we have just uploaded or got the dataframe using `get_df` or because we have already ran `collect` after our latest query. To display these lazy frames we call the `fetch` method, which will verify that the data frame is safe to display, i.e. is it the result of a safe aggregated query as specified in the privacy policy.\n", + "In BastionLab, when we run a query, it is not immediately executed. Like with Polar's LazyFrames, pending queries are only executed when we call `collect`. `FetchableLazyFrames` are BastionLab's remote lazy frames when there are no pending queries to run, either because we have just uploaded or got the dataframe using `get_df` or because we have already ran `collect` after our latest query. To display these lazy frames we call the `fetch` method, which will verify that the data frame is safe to display, i.e. is it the result of a safe aggregated query as specified in the privacy policy.\n", "\n", - "> A `RemoteLazyFrame` is just a `FetchableLazyFrame` with pending queries still to run (as they have not yet been `collected`). When we call `collect()` these operations are run server-side and the result of this is our `FetchableLazyFrame`." + "A `RemoteLazyFrame` is just a `FetchableLazyFrame` with pending queries still to run (as they have not yet been `collected`). When we call `collect()` these operations are run server-side and the result of this is our `FetchableLazyFrame`.

\n", + "
" ] }, { diff --git a/mkdocs.yml b/mkdocs.yml index 1809e971..e387fb3d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -112,8 +112,8 @@ nav: - 🌍 How-to-guides: - Data exploration: - Covid-19 cleaning and exploration: "docs/how-to-guides/covid_cleaning_exploration.ipynb" + - Diabetes cleaning and exploration: "docs/how-to-guides/diabetes_exploration.ipynb" - Fraud detection cleaning and exploration: "docs/how-to-guides/fraud_detection.ipynb" - - Diabetes cleaning and exploration- part one: "docs/how-to-guides/diabetes_exploration.ipynb" - Deep learning: - Fine Tuning Distilbert on BastionLab: "docs/how-to-guides/distilbert_example_notebook.ipynb" - 💡 Concepts: From 34dbd306caaae0467d7f3a022cec34afefc8109d Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Wed, 22 Feb 2023 11:06:38 +0100 Subject: [PATCH 10/22] saving changes --- docs/docs/how-to-guides/diabetes_exploration.ipynb | 2 +- mkdocs.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index ce04ad57..ac6a2026 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -8,7 +8,7 @@ }, "source": [ "
\n", - "

Data exploration of diabetes hospital admissions

\n", + "

Explore a dataset of diabetes hospital admissions

\n", " \n", " \"Open\n", "
\n", diff --git a/mkdocs.yml b/mkdocs.yml index e387fb3d..cd0153ee 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -112,7 +112,7 @@ nav: - 🌍 How-to-guides: - Data exploration: - Covid-19 cleaning and exploration: "docs/how-to-guides/covid_cleaning_exploration.ipynb" - - Diabetes cleaning and exploration: "docs/how-to-guides/diabetes_exploration.ipynb" + - Diabetes data analysis: "docs/how-to-guides/diabetes_exploration.ipynb" - Fraud detection cleaning and exploration: "docs/how-to-guides/fraud_detection.ipynb" - Deep learning: - Fine Tuning Distilbert on BastionLab: "docs/how-to-guides/distilbert_example_notebook.ipynb" From 2c1e7edcb87636f7e4788c664fe17a4a2590aa5b Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Wed, 22 Feb 2023 11:09:52 +0100 Subject: [PATCH 11/22] solved typo --- docs/docs/how-to-guides/diabetes_exploration.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index e0db1268..1f09297b 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -8,9 +8,9 @@ }, "source": [ "
\n", - "

Explore a dataset of diabetes hospital admissions

\n", - " \n", - " \"Open\n", + "

Explore a dataset of diabetes hospital admissions

\n", + " \n", + "\"Open\n", "
\n", "______________________________________________________\n", "\n", From 48b2ec9e3f21c790b12812ef5f44277bdf9b850c Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Wed, 22 Feb 2023 12:29:57 +0100 Subject: [PATCH 12/22] saved progress --- .../how-to-guides/diabetes_exploration.ipynb | 87 ++++++++++++------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index 1f09297b..39196d90 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -30,8 +30,14 @@ "### Installation and dataset\n", "\n", "In order to run this notebook, we need to:\n", - "- Ensure we have [Python3.7](https://www.python.org/downloads/) (or greater) and [Python Pip](https://pypi.org/project/pip/) installed\n", - "- Install [BastionLab](https://bastionlab.readthedocs.io/en/latest/docs/getting-started/installation/) and the [BastionLab server](https://pypi.org/project/bastionlab-server/0.3.7/) pip packages\n", + "- Ensure we have [Python3.7](https://www.python.org/downloads/) (or greater) and [Python Pip](https://pypi.org/project/pip/) installed.\n", + "- Install [BastionLab](https://bastionlab.readthedocs.io/en/latest/docs/getting-started/installation/) and the [BastionLab server](https://pypi.org/project/bastionlab-server/0.3.7/) pip packages. \n", + "\n", + "
\n", + "

Important: Polars data science library

\n", + "

Among their dependencies is Polars, a Pandas-like data science library that we use with BastionLab. It works nearly identically to Pandas, but it is much faster

\n", + "
\n", + "\n", "- [Download the dataset](https://drive.google.com/file/d/1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI/view?usp=share_link) we will be using in this notebook.\n", "\n", "You can download the BastionLab pip packages and the dataset by running the following code block.\n", @@ -83,9 +89,9 @@ "\n", "### Launching the server\n", "\n", - "Let's start by putting ourselves in the shoes of the data owner.\n", + "Let's start by putting ourselves in the shoes of the data owner. \n", "\n", - "But first, let's get the BastionLab server running.\n", + "First, we need to get the BastionLab server running.\n", "\n", "In production we recommend this is done using our Docker image, but for testing purposes you can use our `bastionlab_server` package, which removes the need for user authentication." ] @@ -120,6 +126,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "IBWNyTnz_G1p" @@ -128,7 +135,8 @@ ">*For more details on how you can set up the server using our Docker image, check out our [Installation Tutorial](../getting-started/installation.md).*\n", "\n", "### Connecting to the server\n", - "Next, we will connect to the server in order to be able to upload the dataset." + "\n", + "Then we connect to the server to upload the dataset." ] }, { @@ -155,15 +163,17 @@ "source": [ "### Creating a custom privacy policy\n", "\n", - "We can now create a [custom access policy](https://bastionlab.readthedocs.io/en/latest/docs/tutorials/defining_policy_privacy/) for the dataset which determines how much access collaborators will get to the dataset. \n", + "On to the fun parts!\n", "\n", - "In this example, we create a policy with the following configuration:\n", + "BastionLab's main feature is that it lets you create a [custom access policy](https://bastionlab.readthedocs.io/en/latest/docs/tutorials/defining_policy_privacy/) for the dataset. It will determine how much access collaborators will get, so it needs to be carefuly set up. \n", + "\n", + "For this guide, we create a policy with the following configuration:\n", "\n", "-> `Aggregation(min_agg_size=10):` Any data extracted from the dataset should be the result of an aggregation of at least ten rows.\n", "\n", "-> `unsafe_handling=Reject()`: Any attempted query which breaches this policy will be rejected by the server.\n", "\n", - "-> `savable=True`: The data scientist can save changes made to the dataset in BastionLab (this will create a new dataset - it will not overwrite the original dataset).\n" + "-> `savable=True`: The data scientist can save changes made to the dataset in BastionLab. (This will create a new dataset. It will *not* overwrite the original dataset.)\n" ] }, { @@ -181,6 +191,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "Q7HHSM3e_G1v" @@ -190,13 +201,13 @@ "\n", "Now that the policy has been created, we can upload the dataset to the BastionLab server instance.\n", "\n", - "Firstly, we need to convert our CSV file into a Polars DataFrame by using the Polars `read_csv` function, supplying the path to the CSV file as a string argument.\n", + "We need to convert our CSV file into a Polars DataFrame by using the Polars `read_csv` function, supplying the path to the CSV file as a string argument.\n", "\n", "Next, we use BastionLab's `client.polars.send_df` to upload the dataframe with our custom policy.\n", "\n", - "Finally, we save the FetchableLazyFrame using the `save` method with no arguments. We can make a note of the FetchableLazyFrame's identifier to be shared with data scientists to help them to remotely access the FetchableLazyFrame!\n", + "Finally, we save the FetchableLazyFrame using the `save` method with no arguments. We'll need to keep the FetchableLazyFrame's identifier, so we can share it with data scientists to help them remotely access the frame.\n", "\n", - ">Note we need to save FetchableLazyFrames to avoid them being lost when the server is stopped and restarted or crashes." + ">We need to save FetchableLazyFrames to avoid them being lost when the server is stopped and restarted or crashes." ] }, { @@ -245,22 +256,21 @@ "`send_df()` will return a FetchableLazyFrame instance, which we will work with directly from now on. \n", "\n", "
\n", - "

Note

\n", + "

Note: Frames in BastionLab

\n", "

We talk about two types of LazyFrames in BastionLab: `RemoteLazyFrames` and `FetchableLazyFrames`. \n", "\n", - "In BastionLab, when we run a query, it is not immediately executed. Like with Polar's LazyFrames, pending queries are only executed when we call `collect`. `FetchableLazyFrames` are BastionLab's remote lazy frames when there are no pending queries to run, either because we have just uploaded or got the dataframe using `get_df` or because we have already ran `collect` after our latest query. To display these lazy frames we call the `fetch` method, which will verify that the data frame is safe to display, i.e. is it the result of a safe aggregated query as specified in the privacy policy.\n", + "In BastionLab, when we run a query, it is not immediately executed. Like with Polar's LazyFrames, pending queries are only executed when we call collect. FetchableLazyFrames are BastionLab's remote lazy frames when there are no pending queries to run, either because we have just uploaded or got the dataframe using get_df or because we have already ran collect after our latest query. To display these lazy frames we call the fetch method, which will verify that the data frame is safe to display, i.e. is it the result of a safe aggregated query as specified in the privacy policy.\n", "\n", - "A `RemoteLazyFrame` is just a `FetchableLazyFrame` with pending queries still to run (as they have not yet been `collected`). When we call `collect()` these operations are run server-side and the result of this is our `FetchableLazyFrame`.

\n", - "
" + "A RemoteLazyFrame is just a FetchableLazyFrame with pending queries still to run (as they have not yet been collected). When we call collect() these operations are run server-side and the result of this is our FetchableLazyFrame.

\n", + "\n" ] }, { + "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "YRC1y4uX_G10" - }, + "metadata": {}, "source": [ - "Let's finish off by testing what happens if we breach our security policy by trying to display an entire column from our dataset with the `collect().fetch()` methods. \n", + "Let's complete the set up by testing what happens if we breach our security policy! We'll try to display an entire column from our dataset with the `collect().fetch()` methods. \n", "\n", ">*You can learn more about how to use both of those methods in [our quick tour](https://bastionlab.readthedocs.io/en/latest/docs/quick-tour/quick-tour/#running-queries).*" ] @@ -289,6 +299,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "x1Zu2YQi_G11" @@ -298,7 +309,7 @@ "\n", "We cannot view the output of the query because it does not aggregate at least 10 rows of data as specified in our privacy policy. It tries to print out individual rows instead!\n", "\n", - "Now that the dataset has been uploaded, it's time for our data scientists to get working... \n", + "All is working, so now that the dataset has been uploaded, it's time for our data scientists to start their exploration... \n", "\n", "The data owner can now connection their connection to the server." ] @@ -321,14 +332,14 @@ "id": "HJzNveFG_G13" }, "source": [ - "## Data scientist #1 setup\n", + "## Data scientist setup\n", "__________________________________________\n", "\n", "### Connecting to the dataset\n", "\n", "We'll now jump into the role of the data scientist responsible for cleaning the dataset for this data analysis project.\n", "\n", - "We first need to connect to the `bastion_lab` server and get a FetchableLazyFrame instance of the dataset. We'll use' the `get_df()` method and supply it with the id shared with us by the data owner to do this.\n", + "We (the data scientist) will first need to connect to the `bastion_lab` server and get a `FetchableLazyFrame` instance of the dataset. We'll use' the `get_df()` method and supply it with the id shared with us by the data owner.\n", "\n", "We store our FetchableLazyFrame in the `rdf` variable which we'll be working with from here on." ] @@ -406,6 +417,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "CQC7tfaF_G15" @@ -416,9 +428,14 @@ "\n", "\n", "### Dropping columns\n", - "You may have noticed, this dataset contains a lot of columns! This is great as it it gives us a wide choice of correlations to explore. However, we will not have time to explore all of them in this analysis! We can therefore drop the columns that we won't be using- either because they are irrelavant, or because they didn't lead us to the most interesting correlations for this analysis!\n", "\n", - "We can do this by using the`drop` method, providing it with a list of the names of columns to be dropped. This is a RemoteLazyFrame method which corresponds directly to the [Polars drop() function](https://pola-rs.github.io/polars/py-polars/html/reference/lazyframe/api/polars.LazyFrame.drop.html#polars.LazyFrame.drop)." + "You may have noticed that this dataset contains *a lot* of columns! This is great as it it gives us a wide choice of correlations to explore. But we don't want to bore you to death with a 50 pages long tutorial, so we will not explore all of them in this analysis.\n", + "\n", + "So we'll drop the columns that we won't be using - either because they are irrelevant, or because they didn't lead us to the most interesting correlations.\n", + "\n", + "We can do this by using the `drop()` method and providing it with a list of the names of columns to be dropped. \n", + "\n", + ">This is a RemoteLazyFrame method which works the same as the [Polars drop()](https://pola-rs.github.io/polars/py-polars/html/reference/lazyframe/api/polars.LazyFrame.drop.html#polars.LazyFrame.drop) function." ] }, { @@ -453,15 +470,17 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "vabmc_jjOQCo" }, "source": [ - "There are now 36 columns to work with intead of 51- this will make the RemoteLazyFrame a little easier to work with!" + "There are now 36 columns to work with intead of 51! This will make the RemoteLazyFrame a little easier to work with." ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "7ausY-PC_G16" @@ -470,13 +489,13 @@ "\n", "### Checking for null values\n", "\n", - "We now want to assess how many null values we have in each column. This will help us to know if we have enough data to draw meaningful conclusions from each column and gives us the chance to fill or delete null values if relevant.\n", + "Next step: assessing how many null values we have in each column. This will help us know if we have enough data to draw meaningful conclusions from each column. We can also fill or delete null values if relevant.\n", "\n", - "However, based on the description of the dataset shared with us by the data owner, we know that some column cells have been filled with '?' instead of being left blank.\n", + "In this particular case, the data owner shared with us a description of the dataset and we know that some column cells have been filled with `?` instead of being left blank.\n", "\n", - "Before we can get an accurate picture of null values, we first need to replace all these '?' values with null values. We will do this by using [Polars .when().then().otherwise()` functions](https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.when.html). \n", + "Before we can get an accurate picture of null values, we first need to replace all these `?` values with `null` values. We will do this by using [Polars .when().then().otherwise()`](https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.when.html) functions. \n", "\n", - "One final hurdle is that we can only search and replace '?' strings in columns with the 'Utf8' (string) datatype- otherwise an error will be produced. We must therefore firstly grab pl.Utf8 columns only and apply our search and replace operation to these strings!" + "One final hurdle is that we can only search and replace `?` strings in columns with the `Utf8` (string) datatype - otherwise an error will be produced. This is why we'll grab `pl.Utf8` columns only before we apply our search and replace operation to these strings!" ] }, { @@ -490,7 +509,7 @@ "# step one: getting a list of all Utf8/string columns\n", "selects = rdf.select(pl.col(pl.Utf8)).columns\n", "\n", - "# step two: we replace all '? cells in these columns with null values\n", + "# step two: we replace all '?' cells in these columns with null values\n", "rdf = rdf.with_columns(\n", " [\n", " pl.when(pl.col(x) == \"?\").then(None).otherwise(pl.col(x)).keep_name()\n", @@ -500,23 +519,25 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "c1Frpi9GUtdW" }, "source": [ - "In step two, we use the Polars `with_columns` function to add our new columns with null values instead of question marks to our RemoteLazyFrame. By using the `keep_name` function, these columns keep their original column name and therefore replace the original columns in the dataset. We save the result as `rdf`, storing the updated version of the dataset in our `rdf` variable." + "In step two, we used the `with_columns` function to add our new columns with `null` values, instead of `?` to `rdf`. By using the `keep_name` function, the columns keep their original name and replace the old ones in the dataset. " ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "vMMX8JZnKitA" }, "source": [ - "Now that this is done, we can go ahead and calculate how many null values each column contains.\n", + "Finally, we can go ahead and calculate how many null values each column contains.\n", "\n", - "We do this by iterating over all the columns and getting a percentage of the `sum` of all the value that return `True` to the `is_null` function." + "We do this by iterating over all the columns and getting a percentage of the `sum` of all the values that return `True` to the `is_null` function." ] }, { From ed985b62fec34e03e76045b0361abf3330348ece Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Wed, 22 Feb 2023 13:25:03 +0100 Subject: [PATCH 13/22] reviewed part 1 --- .../how-to-guides/diabetes_exploration.ipynb | 90 +++++++++++-------- 1 file changed, 55 insertions(+), 35 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index 39196d90..4c903efc 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -495,7 +495,7 @@ "\n", "Before we can get an accurate picture of null values, we first need to replace all these `?` values with `null` values. We will do this by using [Polars .when().then().otherwise()`](https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.when.html) functions. \n", "\n", - "One final hurdle is that we can only search and replace `?` strings in columns with the `Utf8` (string) datatype - otherwise an error will be produced. This is why we'll grab `pl.Utf8` columns only before we apply our search and replace operation to these strings!" + "One final hurdle is that we can only search and replace `?` strings in columns with the `Utf8` (string) datatype - otherwise an error will be produced. This is why we'll grab `pl.Utf8` columns only before we apply our search and replace operation to these strings!\n" ] }, { @@ -557,14 +557,15 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "3uMcNqVZWhdN" }, "source": [ - "We can then view the percentage of null values for each column as a two-column list by using Polars `melt` function to flip the query results from a 2 row by 5 column grid, to a 2 column by 5 row grid. We use the `sort` function to show the columns in order from the column with the highest percentage of null values to the lowest.\n", + "We can then view the percentage of null values in each column of our dataset as a two-column table. We'll use [Polars `melt()`](https://pola-rs.github.io/polars/py-polars/html/reference/dataframe/api/polars.DataFrame.melt.html) function to flip the query results from a '2 row / 5 column' table, to a '2 column / 5 row' table. We use the `sort()` function to show the columns in order from the column with the highest percentage of null values to the lowest.\n", "\n", - "Finally, we remove any columns with no null values from our output since they are not of interest to us here." + "Then we print our the table excluding any results where the percentage of null values is `0%`, since these results are not of interest to us." ] }, { @@ -722,7 +723,9 @@ } ], "source": [ - "# melt table to a two-column table with the column name 'column' and corresponding percetage of null values 'null values', sort in descending order and display\n", + "# melt table to a two-column table with the column name 'column' \n", + "# and corresponding percetage of null values 'null values', sort\n", + "# in descending order and display\n", "percent_missing = percent_missing.melt(\n", " variable_name=\"column name\",\n", " value_name=\"null values (%)\",\n", @@ -733,26 +736,33 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "4n0jnBPyYLjf" }, "source": [ - "There are several strategies for dealing with null values such as deleting these rows from the dataset with the `drop_nulls` method or filling null values with the `fill_null` method. But in our case, we are just happy to have visibility over which columns including null values and to what extent so that we can handle and analyse these columns with this in mind." + "BastionLab supports various strategies for removing or filling null values from our dataset, but in this case, we don't want to remove the null values from the dataset. We just want to be aware of the amount of null values in each column of our dataset so we can query accordingly." ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "-WUugovwve2c" }, "source": [ - "### Grouping data: ICD-9 medical codes\n", - "Grouping data is going to be the largest and most crucial task in this data cleaning job. This is a dataset with a low of wide-ranging numerical values which need to be grouped so that our data analysts can gain meaningul insights.\n", + "### Grouping data\n", + "\n", + "Grouping data is going to be the largest and most crucial task in this data cleaning job. \n", "\n", - "Let's start with our diagnoses columns: `diag_1`, `diag_2` and `diag_3`.\n", + "This diabetes dataset has a lot of of wide-ranging numerical values. They need to be grouped so that our data analysts can gain meaningul insights from them.\n", "\n", - "These columns contain the primary, secondary and terciary diagnoses given to patients. These diagnoses are given using [ICD-9 medical codes](https://en.wikipedia.org/wiki/List_of_ICD-9_codes) which are three digit codes ranging from 1 to 1000, as well as E800–E999 codes and V01–V82 code.\n", + "#### ICD-9 medical codes\n", + "\n", + "Let's start with the diagnoses columns: `diag_1`, `diag_2` and `diag_3`.\n", + "\n", + "They contain the primary, secondary and terciary diagnoses given to patients. These diagnoses are given using [**ICD-9** medical codes](https://en.wikipedia.org/wiki/List_of_ICD-9_codes) which are three digit codes ranging from **1** to **1000**, as well as **E800–E999** codes and **V01–V82** code.\n", "\n", "By grabbing all the unique values in the `diag_1` column and counting them, we can see that we have over 700 different values in this column!" ] @@ -848,24 +858,25 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "cPsmfkBpkPCv" }, "source": [ - "Standard groupings of these codes have already been designed. What we want to do is replace the hundreds of unique codes we have in our our diagnoses columns with these groupings!\n", + "Standard groupings of these codes have already been designed. So what we want to do is replace the hundreds of unique codes we have in our our diagnoses columns with these groupings.\n", "\n", - "To do this, we will again use Polars `when().then().otherwise()` functions to perform a find and replace operation. We will use `when()` to check if the codes in each cell are either E or V codes or fall within a certain numerical range.\n", + "To do this, we will again use Polars `when().then().otherwise()` functions to perform a find and replace operation. We will use `when()` to check if the codes in each cell are either **E** or **V** codes or fall within a certain numerical range.\n", "\n", - "However, these diagnoses columns are currently string columns, since the E and V codes are not entirely numerical. This is problematic since we cannot perform numerical comparisons on these cells and we cannot convert the column type to a numerical one because of these 'E' and 'V' values!\n", + "The problem is that these diagnoses columns are currently string columns because **E** and **V** codes are not entirely numerical. Until it's solved, we cannot perform numerical comparisons on these cells and we cannot convert the column type to a numerical one.\n", "\n", - "We will solve this problem in three steps:\n", + "Here's how we'll handle this:\n", "\n", - "1) We will find and replace all E codes with a \"-1\" value and V codes with a \"-2\" value.\n", + "1) We will find and replace all **E** codes with a `-1` value and **V** codes with a `-2` value.\n", "\n", "2) We will `select()` our columns and `cast()` all values in these columns to float values.\n", "\n", - "3) We will perform the find and replace operation to group all ICD-9 codes into their associated group- of which there are 17, plus E codes and V codes." + "3) We will perform the find and replace operation to group all **ICD-9** codes into their associated group - of which there are 17, plus **E** codes and **V** codes." ] }, { @@ -947,12 +958,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "P1MquUrNlXDO" }, "source": [ - "By performing the same query as previously to count `diag_1`'s unique values, we see there is now a much more manageable 19 labels in our data column! This will be similar for the `diag_2` and `diag_3` columns." + "By performing the same query as previously to count `diag_1`'s unique values, we see there is now a much more manageable 19 labels in our data column. This will be similar for the `diag_2` and `diag_3` columns." ] }, { @@ -1046,12 +1058,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "pKAp3OvKcwuX" }, "source": [ - "We notice in our project brief that there is only 1 E code value in the `diag_1` column, so we will remove this value from our dataset before continuing by using the `filter` function." + "We notice in our project brief that there is only one **E** code value in the `diag_1` column, so we will remove this value from our dataset before continuing by using the `filter` function." ] }, { @@ -1066,16 +1079,17 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "BvdGu7GmsZVu" }, "source": [ - "### Grouping data: A1C, max glucose levels and readmittance\n", + "#### A1C, max glucose levels and readmittance\n", "\n", "We want to group together data in another three other columns using the same `.then().when().otherwise()` methods.\n", "\n", - "The first two are `A1Cresult`, which contains patients' HbA1c level, and `max_glu_serum`, which contains their blood glucose level. We want to group these into `very high`, `high`, `normal` groups based on levels defined in our project brief.\n", + "The first two are **`A1Cresult`**, which contains patients' **HbA1c** level, and `max_glu_serum`, which contains their blood glucose level. We want to group these into `very high`, `high`and `normal` groups based on levels defined in our project brief.\n", "\n", "These columns are both currently string columns, so we will also need to convert them to float values in order to perform numerical comparisons on them." ] @@ -1093,7 +1107,7 @@ " [pl.col(\"max_glu_serum\").cast(pl.Float64), pl.col(\"A1Cresult\").cast(pl.Float64)]\n", ")\n", "\n", - "# group values in A1Cresult column\n", + "# group values in `A1Cresult` column\n", "rdf = rdf.with_columns(\n", " [\n", " pl.when(pl.col(\"A1Cresult\") >= 8)\n", @@ -1107,7 +1121,7 @@ " ]\n", ")\n", "\n", - "# group values in max_glu_serum column\n", + "# group values in `max_glu_serum` column\n", "rdf = rdf.with_columns(\n", " [\n", " pl.when(pl.col(\"max_glu_serum\") >= 300)\n", @@ -1123,6 +1137,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "Buu2nja5w6Db" @@ -1132,7 +1147,7 @@ "\n", "We will group this column into `short-term` and `long-term` and `n/a` (not applicable) groups.\n", "\n", - "Simiar to in previous examples, we must first convert values in this column from strings to integer values." + "In the same way as in the previous examples, we must first convert values in this column from strings to integer values." ] }, { @@ -1160,23 +1175,24 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "kuwxAGYBoOQJ" }, "source": [ - "### Grouping data: binning ages\n", - "The next grouping task we will perform is to group ages into intervals of 10 years. We do this both to increase data privacy and to more easily draw correlations linked to broader age groups.\n", + "#### Binning ages\n", + "The next grouping task we will perform is to group ages into intervals of 10 years. We do this both to increase data privacy and draw correlations linked to broader age groups more easily.\n", "\n", - "We won't need to perform an `when().then().otherwise()` query here since BastionLab has its own `ApplyBins` tool.\n", + "We won't need to perform a `when().then().otherwise()` query here because BastionLab has its own `ApplyBins` tool.\n", "\n", "`ApplyBins` is a PyTorch module and the grouping of numbers takes place in its `forward` function. We can pass PyTorch modules to BastionLab's `apply_udf` function which will apply the `forward` function to any specified columns.\n", "\n", - "All in all, we just three steps to bin our age column data:\n", + "All in all, we just need three steps to bin our age column data:\n", "\n", "1) We import `ApplyBins` from `bastionlab.polars.utils`.\n", - "1) We instantiate our `ApplyBins` PyTorch module class with our bins interval given as the only argument.\n", - "2) We use `apply_udf`, providing a list of the column we want to modify and the PyTorch module, `ApplyBins`, that we wish to apply to these columns." + "1) We instantiate the `ApplyBins` PyTorch module class with our bins interval.\n", + "2) We use `apply_udf`, providing a list of the column we want to modify, and the PyTorch module `ApplyBins` that we wish to apply to these columns." ] }, { @@ -1197,15 +1213,17 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "1pOQYPYSsVns" }, "source": [ - "> Note, you can create your own custom PyTorch modules and apply them to columns using `apply_udf`. This is BastionLab's way of allowing you to apply custom functions on datasets, whilst restricting what you can do for security reasons. Functionality like `lambda`, `map` and `apply` are blocked by BastionLab as they are too permissive and could be misused." + "> Note, you can create your own custom PyTorch modules and apply them to columns using `apply_udf`. This is BastionLab's way of allowing you to apply custom functions on datasets, while restricting what you can do for security reasons. Functionality like `lambda`, `map` and `apply` are blocked by BastionLab as they are too permissive and could be misused." ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "gYRVmqTitckT" @@ -1213,9 +1231,9 @@ "source": [ "### Adding columns\n", "\n", - "Up until this point we have been using the `.when().then().otherwise()` and `with_columns` methods to make changes to existing columns, but by providing a new column name to the `alias` method, we can create a new column.\n", + "Up until this point we have been using the `.when().then().otherwise()` and `with_columns` methods to make changes to existing columns. But we can also provide a new column name to the `alias` method to create a new column.\n", "\n", - "In the following example, we will create a `is_readmitted` column which will store `False` for all the \"n/a\" values in our original `readmitted` column and `True` for any other values. This will allow us to quickly query whether certain groups of data have been readmitted or not!" + "In the following example, we will create a `is_readmitted` column which will store `False` for all the `n/a` values in our original `readmitted` column, and `True` for any other values. This will allow us to quickly query whether certain groups of data have been readmitted or not." ] }, { @@ -1239,6 +1257,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "edoL2_uy_G19" @@ -1246,7 +1265,7 @@ "source": [ "### Converting column types\n", "\n", - "We have already seen examples where we have `explicity` converted the datatype of our columns using the `cast` method. Here we will `implicity` convert the datatype by replacing the \"yes\" and \"no\" values in our `change` column, which represent whether a patient's medication has been changed, to a boolean True or False value. \n", + "We have already seen examples where we have explicity converted the datatype of our columns using the `cast` method. Here we will implicity convert the datatype by replacing the `yes` and `no` values in our `change` column (which represent whether a patient's medication has been changed) to a boolean `True` or `False` value. \n", "\n", "The datatype of this column will be changed automatically by this operation as we can see below." ] @@ -1312,6 +1331,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "CYS-Mkl1tD8t" @@ -1319,11 +1339,11 @@ "source": [ "### Saving our RemoteLazyFrame and disconnecting\n", "\n", - "Our dataframe is all clean and ready for the next step: data analysis/ visualization. Data scientist #1 is going to be reassigned to another task. They will save their cleaned RemoteLazyFrame and make a note of the identifier to share with data scientist #2.\n", + "Our dataframe is all clean and ready for the next step: data analysis and visualization. We, Data scientist #1, are going to be reassigned to another task. We will save our cleaned RemoteLazyFrame and make note of the identifier so we can share it with Data scientist #2.\n", "\n", - "We need to perform `collect()` before saving or getting an identifier for our RemoteLazyFrame since the `save` method and `identifier` attribute are only available for FetchableLazyFrames.\n", + "We need to perform `collect()` before saving or getting an identifier for our RemoteLazyFrame, because the `save` method and `identifier` attribute are only available for FetchableLazyFrames.\n", "\n", - ">Note, the data owner must have set the `savable` option to `True` when uploading the dataframe for this operation to be possible!" + ">Note, the data owner must have set the `savable` option to `True` when uploading the dataframe for this operation to be possible! But here, we did so we won't run into an issue." ] }, { From c12216e977340b205387872660c2367abee5940f Mon Sep 17 00:00:00 2001 From: lyie28 Date: Wed, 22 Feb 2023 17:46:36 +0100 Subject: [PATCH 14/22] added pies --- client/src/bastionlab/polars/remote_polars.py | 81 ++--- .../how-to-guides/diabetes_exploration.ipynb | 284 ++++++++++-------- 2 files changed, 175 insertions(+), 190 deletions(-) diff --git a/client/src/bastionlab/polars/remote_polars.py b/client/src/bastionlab/polars/remote_polars.py index 94f8fd1f..f6b2f31d 100644 --- a/client/src/bastionlab/polars/remote_polars.py +++ b/client/src/bastionlab/polars/remote_polars.py @@ -430,61 +430,6 @@ def with_row_count(self: LDF, name: str = "index") -> LDF: # because if not this leads to panics etc. when we follow this with other operations that use the new column before next using collect() return ret.collect() - def describe(self: LDF) -> pl.DataFrame: - """ - Provides the following summary statistics for our RemoteLazyFrame: - - count - - null count - - mean - - std - - min - - max - - median - Raises: - Exception: Where necessary queries to get statistical information for the operation are rejected by the data owner - Returns: - A Polars DataFrame containing statistical information - """ - ret = self.select( - [ - pl.col("*").count().suffix("_count"), - pl.col("*").null_count().suffix("_null_count"), - pl.col("*").mean().suffix("_mean"), - pl.col("*").std().suffix("_std"), - pl.col("*").min().suffix("_min"), - pl.col("*").max().suffix("_max"), - pl.col("*").median().suffix("_median"), - ] - ) - stats = ret.collect().fetch() - RequestRejected.check_valid_df(stats) - description = pl.DataFrame( - { - "describe": [ - "count", - "null_count", - "mean", - "std", - "min", - "max", - "median", - ], - **{ - x: [ - stats.select(f"{x}_count")[0, 0], - stats.select(f"{x}_null_count")[0, 0], - stats.select(f"{x}_mean")[0, 0], - stats.select(f"{x}_std")[0, 0], - stats.select(f"{x}_min")[0, 0], - stats.select(f"{x}_max")[0, 0], - stats.select(f"{x}_median")[0, 0], - ] - for x in self.columns - }, - } - ) - return description - def join( self: LDF, other: LDF, @@ -624,14 +569,24 @@ def pieplot( various exceptions: Note that exceptions may be raised from matplotlib pyplot's pie or subplots functions, for example if fig_kwargs keywords are not valid. """ + tmp = self if parts not in self.columns: raise ValueError("Parts column not found in dataframe") if type(labels) == str and labels not in self.columns: raise ValueError("Labels column not found in dataframe") + # run previous operations to ensure order of columns are as expected + if type(labels) == str and type(parts) == str: + tmp = tmp.collect() # get list of values in parts column - parts_tmp = self.select(pl.col(parts)).collect().fetch().to_numpy() - parts_list = [x[0] for x in parts_tmp] + parts_list = ( + tmp.select(pl.col(parts)) + .collect() + .fetch() + .select(parts) + .to_series(0) + .to_list() + ) # get total for calculating percentages total = sum(parts_list) @@ -641,8 +596,14 @@ def pieplot( # get labels list if type(labels) == str: - labels_tmp = self.select(pl.col(labels)).collect().fetch().to_numpy() - labels_list = [x[0] for x in labels_tmp] + labels_list = ( + tmp.select(labels) + .collect() + .fetch() + .select(labels) + .to_series(0) + .to_list() + ) else: labels_list = labels @@ -651,7 +612,7 @@ def pieplot( if fig_kwargs == None: fig, ax = plt.subplots(figsize=(7, 4), subplot_kw=dict(aspect="equal")) else: - if "figsize" not in self.kwargs: + if "figsize" not in fig_kwargs: fig_kwargs["figsize"] = (7, 4) fig, ax = plt.subplots(**fig_kwargs) if pie_labels == True: diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index 4c903efc..2524bee6 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -98,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 193, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -106,18 +106,7 @@ "id": "A85GsYOi_G1o", "outputId": "97b964bd-61b6-4cc6-e5e7-b9f2a2587bd7" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "BastionLab server (version 0.3.7) already installed\n", - "Libtorch (version 1.13.1) already installed\n", - "TLS certificates already generated\n", - "Bastionlab server is now running on port 50056\n" - ] - } - ], + "outputs": [], "source": [ "# launch bastionlab_server test package\n", "import bastionlab_server\n", @@ -141,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 194, + "execution_count": 3, "metadata": { "id": "6zzV7xrs_G1q" }, @@ -178,7 +167,7 @@ }, { "cell_type": "code", - "execution_count": 195, + "execution_count": 4, "metadata": { "id": "mRJjgd1C_G1t" }, @@ -212,7 +201,7 @@ }, { "cell_type": "code", - "execution_count": 196, + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -225,7 +214,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "63c8152d-f5af-41ec-b22c-aea51a8465b5\n" + "801444d3-0742-43e2-a199-a454cce00928\n" ] } ], @@ -277,7 +266,7 @@ }, { "cell_type": "code", - "execution_count": 197, + "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -316,7 +305,7 @@ }, { "cell_type": "code", - "execution_count": 198, + "execution_count": 7, "metadata": { "id": "mcM4pR6D_G11" }, @@ -346,7 +335,7 @@ }, { "cell_type": "code", - "execution_count": 199, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -358,10 +347,10 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=63c8152d-f5af-41ec-b22c-aea51a8465b5)" + "FetchableLazyFrame(identifier=801444d3-0742-43e2-a199-a454cce00928)" ] }, - "execution_count": 199, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -386,7 +375,7 @@ }, { "cell_type": "code", - "execution_count": 200, + "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -440,7 +429,7 @@ }, { "cell_type": "code", - "execution_count": 201, + "execution_count": 10, "metadata": { "id": "s0NI6rTqOKWN" }, @@ -500,7 +489,7 @@ }, { "cell_type": "code", - "execution_count": 202, + "execution_count": 11, "metadata": { "id": "F2KwhZB_fTC3" }, @@ -542,7 +531,7 @@ }, { "cell_type": "code", - "execution_count": 203, + "execution_count": 12, "metadata": { "id": "SAqqUz6I_G16" }, @@ -570,7 +559,7 @@ }, { "cell_type": "code", - "execution_count": 204, + "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -608,10 +597,6 @@ " .dataframe td {\n", " padding-bottom: 0;\n", " }\n", - "\n", - " .dataframe td {\n", - " line-height: 95%;\n", - " }\n", "\n", "\n", "shape: (7, 2)\n", @@ -717,13 +702,13 @@ "└───────────────┴─────────────────┘" ] }, - "execution_count": 204, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# melt table to a two-column table with the column name 'column' \n", + "# melt table to a two-column table with the column name 'column'\n", "# and corresponding percetage of null values 'null values', sort\n", "# in descending order and display\n", "percent_missing = percent_missing.melt(\n", @@ -769,7 +754,7 @@ }, { "cell_type": "code", - "execution_count": 205, + "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -807,10 +792,6 @@ " .dataframe td {\n", " padding-bottom: 0;\n", " }\n", - "\n", - " .dataframe td {\n", - " line-height: 95%;\n", - " }\n", "\n", "
\n", "shape: (1, 1)\n", @@ -847,7 +828,7 @@ "└────────┘" ] }, - "execution_count": 205, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -881,7 +862,7 @@ }, { "cell_type": "code", - "execution_count": 206, + "execution_count": 15, "metadata": { "id": "xPNFpZ7lW8qR" }, @@ -969,7 +950,7 @@ }, { "cell_type": "code", - "execution_count": 207, + "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1007,10 +988,6 @@ " .dataframe td {\n", " padding-bottom: 0;\n", " }\n", - "\n", - " .dataframe td {\n", - " line-height: 95%;\n", - " }\n", "\n", "
\n", "shape: (1, 1)\n", @@ -1047,7 +1024,7 @@ "└────────┘" ] }, - "execution_count": 207, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -1069,7 +1046,7 @@ }, { "cell_type": "code", - "execution_count": 208, + "execution_count": 17, "metadata": { "id": "yIRH-_QNdEwL" }, @@ -1096,7 +1073,7 @@ }, { "cell_type": "code", - "execution_count": 209, + "execution_count": 18, "metadata": { "id": "FgyrnPAlsZ0u" }, @@ -1152,7 +1129,7 @@ }, { "cell_type": "code", - "execution_count": 210, + "execution_count": 19, "metadata": { "id": "9cca9DhSw6We" }, @@ -1197,7 +1174,7 @@ }, { "cell_type": "code", - "execution_count": 211, + "execution_count": 20, "metadata": { "id": "2EC3smnWc06Q" }, @@ -1238,7 +1215,7 @@ }, { "cell_type": "code", - "execution_count": 212, + "execution_count": 21, "metadata": { "id": "B2JGdBhmteAz" }, @@ -1272,7 +1249,7 @@ }, { "cell_type": "code", - "execution_count": 213, + "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1287,7 +1264,7 @@ "[polars.datatypes.Utf8]" ] }, - "execution_count": 213, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1300,7 +1277,7 @@ }, { "cell_type": "code", - "execution_count": 214, + "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1315,7 +1292,7 @@ "[polars.datatypes.Boolean]" ] }, - "execution_count": 214, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1348,7 +1325,7 @@ }, { "cell_type": "code", - "execution_count": 215, + "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1360,14 +1337,11 @@ "outputs": [ { "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, "text/plain": [ - "'57a34384-f881-4059-ae5a-6a7d1483a1ae'" + "'538cbcf3-b100-42fb-a1ed-48a07c7085c7'" ] }, - "execution_count": 215, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1389,7 +1363,7 @@ }, { "cell_type": "code", - "execution_count": 216, + "execution_count": 25, "metadata": { "id": "qoiADM1W6OC_" }, @@ -1411,7 +1385,7 @@ }, { "cell_type": "code", - "execution_count": 217, + "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1423,10 +1397,10 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=57a34384-f881-4059-ae5a-6a7d1483a1ae)" + "FetchableLazyFrame(identifier=538cbcf3-b100-42fb-a1ed-48a07c7085c7)" ] }, - "execution_count": 217, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1454,7 +1428,7 @@ }, { "cell_type": "code", - "execution_count": 218, + "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1492,7 +1466,7 @@ }, { "cell_type": "code", - "execution_count": 219, + "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1504,14 +1478,12 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEGCAYAAACkQqisAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAZw0lEQVR4nO3debgldX3n8fdHOm64ANLhId2Q7hk7KDou2CI+OG4YFmOAyaABjbYOkZkMKkafKMQkuIQkThKNjokZIigmCiIudBwEW8Q9LI1s3bRIB0SaQbtjsxiJC+Q7f9TvhmPndnOovqfuvfT79TznOVXfqjq/7zm34NtVv6pfpaqQJKmPB812ApKk+csiIknqzSIiSerNIiJJ6s0iIknqbcFsJzC03XffvZYsWTLbaUjSvHL55Zf/U1Ut3DK+wxWRJUuWsHr16tlOQ5LmlSQ3TRf3dJYkqTeLiCSpN4uIJKk3i4gkqTeLiCSpN4uIJKk3i4gkqTeLiCSpN4uIJKm3He6OdUnzy1vf+tYHZFsPFB6JSJJ6s4hIknqziEiSerOISJJ6s4hIknqbWBFJcnqSjUnWjMT+NMk3k1yd5FNJdhlZdlKS9UmuS3LISPzQFluf5MSR+NIkl7T4x5I8eFLfRZI0vUkeiXwIOHSL2CrgiVX1JOBbwEkASfYFjgae0Lb5qyQ7JdkJ+EvgMGBf4Ji2LsA7gXdX1WOB24BjJ/hdJEnTmFgRqaovA5u3iH2uqu5usxcDi9v0EcBZVfXjqroRWA/s317rq+qGqvoJcBZwRJIAzwfOadufARw5qe8iSZrebPaJ/Dfgs216EXDzyLINLba1+GOA20cK0lR8WkmOS7I6yepNmzbNUPqSpFkpIkneAtwNfGSI9qrq1KpaXlXLFy78d8+ZlyT1NPiwJ0leCbwIOKiqqoVvAfYaWW1xi7GV+PeBXZIsaEcjo+tLkgYy6JFIkkOBNwGHV9VdI4tWAkcneUiSpcAy4FLgMmBZuxLrwXSd7ytb8bkIOKptvwI4d6jvIUnqTPIS3zOBfwD2SbIhybHA+4BHAquSXJnkrwGqai1wNnAtcD5wfFXd044yXgNcAKwDzm7rArwZeEOS9XR9JKdN6rtIkqY3sdNZVXXMNOGt/o++qk4BTpkmfh5w3jTxG+iu3pIkzRLvWJck9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1ZhGRJPVmEZEk9WYRkST1tmC2E5A0d6075QuDtfX4tzx/sLY0czwSkST1ZhGRJPVmEZEk9TaxIpLk9CQbk6wZie2WZFWS69v7ri2eJO9Nsj7J1Un2G9lmRVv/+iQrRuJPS3JN2+a9STKp7yJJmt4kj0Q+BBy6RexE4MKqWgZc2OYBDgOWtddxwPuhKzrAycAzgP2Bk6cKT1vn1SPbbdmWJGnCJlZEqurLwOYtwkcAZ7TpM4AjR+Ifrs7FwC5J9gQOAVZV1eaqug1YBRzalj2qqi6uqgI+PPJZkqSBDN0nskdV3dqmvwvs0aYXATePrLehxbYV3zBNfFpJjkuyOsnqTZs2bd83kCT9m1nrWG9HEDVQW6dW1fKqWr5w4cIhmpSkHcLQReR77VQU7X1ji98C7DWy3uIW21Z88TRxSdKAhi4iK4GpK6xWAOeOxF/RrtI6ALijnfa6ADg4ya6tQ/1g4IK27M4kB7Srsl4x8lmSpIFMbNiTJGcCzwV2T7KB7iqrPwHOTnIscBPwkrb6ecALgfXAXcCrAKpqc5J3AJe19d5eVVOd9f+T7gqwhwGfbS9J0oAmVkSq6pitLDpomnULOH4rn3M6cPo08dXAE7cnR0nS9vGOdUlSbxYRSVJvFhFJUm8WEUlSbxYRSVJvFhFJUm8WEUlSbxYRSVJvFhFJUm8WEUlSbxYRSVJvWx07a/Q559Opqm/MfDqSpPlkWwMw/nl7fyiwHLgKCPAkYDXwzMmmJkma67Z6OquqnldVzwNuBfZrTwZ8GvBUfACUJInx+kT2qaprpmaqag3w+MmlJEmaL8Z5nsjVST4A/F2bfxlw9eRSkiTNF+MUkVcBvwWc0Oa/DLx/YhlJkuaN+ywiVfWjJH8NnFdV1w2QkyRpnrjPPpEkhwNXAue3+ackWTnpxCRJc984HesnA/sDtwNU1ZXA0kkmJUmaH8YpIj+tqju2iNUkkpEkzS/jdKyvTfJSYKcky4DXAV+fbFqSpPlgnCLyWuAtwI+BjwIXAO+YZFKSNNec/fH9B2vrJS++dLC2ttc4ReRXquotdIUEgCQvBj4+sawkSfPCOH0iJ40ZG1uS306yNsmaJGcmeWiSpUkuSbI+yceSPLit+5A2v74tXzLyOSe1+HVJDtmenCRJ99+2RvE9DHghsCjJe0cWPQq4u2+DSRbR9avsW1X/kuRs4OjW1rur6qx2X8qxdDc1HgvcVlWPTXI08E7g15Ps27Z7AvALwOeT/FJV3dM3N0nS/bOtI5H/Rzda74+Ay0deK4Ht/Vf/AuBhSRYAD6cb5PH5wDlt+RnAkW36iDZPW35QkrT4WVX146q6EVhPdymyJGkgWz0SqaqrgKuS7FFVZ4wuS3IC8J4+DVbVLUn+DPgO8C/A5+iK0+1VNXWEswFY1KYXATe3be9OcgfwmBa/eOSjR7f5GUmOA44D2HvvvfukLUmaxjh9IkdPE3tl3waT7Ep3FLGU7jTUzsChfT9vHFV1ahvKfvnChQsn2ZQk7VC21SdyDPBSYOkWw5w8Eti8HW2+ALixqja1dj4JHAjskmRBOxpZzL3PLLkF2AvY0E5/PRr4/kh8yug2kqQBbOsS36/T9VXszr1POQT4Ads3FPx3gAOSPJzudNZBdH0vFwFHAWcBK4Bz2/or2/w/tOVfqKpqhe2jSd5Fd0SzDJg/F1dL0gPAtvpEbgJuYoYfg1tVlyQ5B/gG3VVeVwCnAv8XOCvJH7bYaW2T04C/TbKe7gjo6PY5a9uVXde2zzneK7MkaVjbOp311ap6VpIf8LNjZQWoqnpU30ar6mS6gR1H3cA0V1dV1Y+AF2/lc04BTumbhyRp+2zrSORZ7f2Rw6UjSZpPxhn2ZOqKqr1G16+qb0wqKWlHd8pvHDVYW2/5u3PueyVpK+6ziCR5B90lvTcA/9rCRXdzoCRpBzbOkchLgP9YVT+ZdDKSpPllnJsN1wC7TDoRSdL8M86RyB8DVyRZQ/dMEQCq6vCJZSVJmhfGKSJn0I2cew339olIkjRWEbmrqt5736tJknY04xSRryT5Y7rhR0ZPZ3mJryTt4MYpIk9t7weMxLzEV5J030Wkqp43RCKSpPlnW2NnvWFbG1bVu2Y+HUnSfLKtI5GpMbP2AZ5O1ycC8Ks45LokiW0PwPg2gCRfBvarqh+0+bfSDdsuSdrBjXPH+h7A6JAnP2kxSdIObpyrsz4MXJrkU23+SLobECVJO7hxrs46Jcn5wLNa6FVVdcVk05IkzQdjPU+kqi5PcjPwUIAke1fVdyaamSRpzrvPPpEkhye5HrgR+FJ7/+ykE5MkzX3jdKy/g+5u9W9V1VLgBcDFE81KkjQvjFNEflpV3wcelORBVXURsHzCeUmS5oFx+kRuT/II4CvAR5JsBH442bQkSfPBOEciRwB3Aa8Hzgf+ke6udUnSDm6cS3x/mOQXgWVVdUaShwM7TT41SdJcN87VWa8GzgH+TwstAj69PY0m2SXJOUm+mWRdkmcm2S3JqiTXt/dd27pJ8t4k65NcnWS/kc9Z0da/PsmK7clJknT/jXM663jgQOBOgKq6Hvj57Wz3PcD5VfU44MnAOuBE4MKqWgZc2OYBDgOWtddxwPsBkuwGnAw8A9gfOHmq8EiShjFOEflxVf3b2FlJFtA9lKqXJI8Gng2cBlBVP6mq2+n6XqaGUzmDbngVWvzD1bkY2CXJnsAhwKqq2lxVtwGrgEP75iVJuv/GKSJfSvK7wMOS/DLwceDvt6PNpcAm4INJrkjygSQ7A3tU1a1tne9y7yCPi4CbR7bf0GJbi/87SY5LsjrJ6k2bNm1H6pKkUeMUkTfT/U//GuC/A+cBv7cdbS4A9gPeX1VPpbtc+MTRFaqq2I6jnS1V1alVtbyqli9cuHCmPlaSdnjbvDoryU7A2tZ38Tcz1OYGYENVXdLmz6ErIt9LsmdV3dpOV21sy28B9hrZfnGL3QI8d4v4F2coR0nSGLZ5JFJV9wDXJdl7phqsqu8CNyfZp4UOAq6le3Li1BVWK4Bz2/RK4BXtKq0DgDvaaa8LgIOT7No61A9uMUnSQMa5Y31XYG2SSxm5U72qDt+Odl9Ld/f7g4EbgFfRFbSzkxwL3AS8pK17HvBCYD3dTY+vau1vTvIO4LK23turavN25CRJup/GKSK/P9ONVtWVTD/+1kHTrFt0lxlP9zmnA6fPbHaSpHGNc8f6l4ZIRJI0/4xzdZYkSdOyiEiSerOISJJ622qfSJJrmP6Gv9D1dz9pYllJkuaFbXWsv2iwLCRJ89JWi0hV3TRkIpKk+Wec54kckOSyJP+c5CdJ7kly5xDJSZLmtnE61t8HHANcDzwM+E3gLyeZlCRpfhjr6qyqWg/sVFX3VNUH8bkdkiTGG/bkrjbG1ZVJ/hdwK14aLElivGLw8rbea+gGYNwL+LVJJiVJmh/GKSJHVtWPqurOqnpbVb0BL/+VJDFeEVkxTeyVM5yHJGke2tYd68cALwWWJlk5suhRgM/tkCRts2P963Sd6LsDfz4S/wFw9SSTkiTND/d1x/pNwDOT7AE8vS1aV1V3D5GcJGluG+eO9RcDlwIvpntk7SVJjpp0YpKkuW+c+0R+D3h6VW0ESLIQ+DxwziQTkyTNfeNcnfWgqQLSfH/M7SRJD3DjHImcn+QC4Mw2/+vAZyeXkiRpvrjPIlJVv5Pk14BntdCpVfWpyaYlSZoP7rOIJHlnVb0Z+OQ0MekB531v/PvB2nrNn//qYG1JkzBO38YvTxM7bKYTkSTNP1stIkl+qz1nfZ8kV4+8bmQGbjZMslOSK5J8ps0vTXJJkvVJPtZGDibJQ9r8+rZ8ychnnNTi1yU5ZHtzkiTdP9s6Evko8KvAyvY+9XpaVf3GDLR9ArBuZP6dwLur6rHAbcCxLX4scFuLv7utR5J9gaOBJ9A93+Svkuw0A3lJksa01SJSVXdU1ber6piqumnktd3jZiVZDPwK8IE2H+D53HvvyRnAkW36iDZPW35QW/8I4Kyq+nFV3QisB/bf3twkSeObrfs9/gJ4E/Cvbf4xwO0jw6lsABa16UXAzQBt+R1t/X+LT7PNz0hyXJLVSVZv2rRpJr+HJO3QBi8iSV4EbKyqy4dqs6pOrarlVbV84cKFQzUrSQ9449xsONMOBA5P8kLgoXRDy78H2CXJgna0sRi4pa1/C93TFDckWQA8mu6u+an4lNFtJEkDGPxIpKpOqqrFVbWErmP8C1X1MuAiYGpgxxXAuW16Jfc+GOuotn61+NHt6q2lwDK6gSIlSQOZjSORrXkzcFaSPwSuAE5r8dOAv02ynu5hWEcDVNXaJGcD1wJ3A8dX1T3Dpy1JO65ZLSJV9UXgi236Bqa5uqqqfkQ3DP10258CnDK5DCVJ2+JovJKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4sIpKk3iwikqTeLCKSpN4GLyJJ9kpyUZJrk6xNckKL75ZkVZLr2/uuLZ4k702yPsnVSfYb+awVbf3rk6wY+rtI0o5uNo5E7gbeWFX7AgcAxyfZFzgRuLCqlgEXtnmAw4Bl7XUc8H7oig5wMvAMYH/g5KnCI0kaxuBFpKpurapvtOkfAOuARcARwBlttTOAI9v0EcCHq3MxsEuSPYFDgFVVtbmqbgNWAYcO+FUkaYc3q30iSZYATwUuAfaoqlvbou8Ce7TpRcDNI5ttaLGtxadr57gkq5Os3rRp04zlL0k7ulkrIkkeAXwCeH1V3Tm6rKoKqJlqq6pOrarlVbV84cKFM/WxkrTDm5UikuTn6ArIR6rqky38vXaaiva+scVvAfYa2Xxxi20tLkkayGxcnRXgNGBdVb1rZNFKYOoKqxXAuSPxV7SrtA4A7minvS4ADk6ya+tQP7jFJEkDWTALbR4IvBy4JsmVLfa7wJ8AZyc5FrgJeElbdh7wQmA9cBfwKoCq2pzkHcBlbb23V9XmYb6CJAlmoYhU1VeBbGXxQdOsX8DxW/ms04HTZy47SdL9MRtHItK0vvTs5wzW1nO+/KXB2pIeyBz2RJLUm0VEktSbRUSS1JtFRJLUm0VEktSbRUSS1JtFRJLUm/eJSNI88eRzhhvZ6aqjDhlrPY9EJEm9WUQkSb1ZRCRJvVlEJEm9WUQkSb15dZYAOPB/HzhYW1977dcGa0vSZHkkIknqzSIiSerNIiJJ6s0iIknqzSIiSerNIiJJ6s0iIknqzftE5oDvvP0/DdLO3n9wzSDtSNpxeCQiSept3heRJIcmuS7J+iQnznY+krQjmddFJMlOwF8ChwH7Asck2Xd2s5KkHcd87xPZH1hfVTcAJDkLOAK4dpyNn/Y7H55gaj/r8j99xWBtSdJQUlWznUNvSY4CDq2q32zzLweeUVWv2WK944Dj2uw+wHXb0ezuwD9tx/YzZS7kMRdygLmRx1zIAeZGHnMhB5gbecyFHGBm8vjFqlq4ZXC+H4mMpapOBU6dic9Ksrqqls/EZ833POZCDnMlj7mQw1zJYy7kMFfymAs5TDqPed0nAtwC7DUyv7jFJEkDmO9F5DJgWZKlSR4MHA2snOWcJGmHMa9PZ1XV3UleA1wA7AScXlVrJ9zsjJwWmwFzIY+5kAPMjTzmQg4wN/KYCznA3MhjLuQAE8xjXnesS5Jm13w/nSVJmkUWEUlSbxaR+2G2hlhJcnqSjUnWjMR2S7IqyfXtfdcJ57BXkouSXJtkbZIThs4jyUOTXJrkqpbD21p8aZJL2t/lY+0ii4lLslOSK5J8ZjbySPLtJNckuTLJ6hYbdL9obe6S5Jwk30yyLskzB94v9mm/wdTrziSvn6Xf4rfbvrkmyZltnx16vzihtb82yetbbGK/hUVkTLM8xMqHgEO3iJ0IXFhVy4AL2/wk3Q28sar2BQ4Ajm/ff8g8fgw8v6qeDDwFODTJAcA7gXdX1WOB24BjJ5jDqBOAdSPzs5HH86rqKSP3AAy9XwC8Bzi/qh4HPJnuNxksj6q6rv0GTwGeBtwFfGrIHACSLAJeByyvqifSXexzNAPuF0meCLyabjSPJwMvSvJYJvlbVJWvMV7AM4ELRuZPAk4asP0lwJqR+euAPdv0nsB1A/8e5wK/PFt5AA8HvgE8g+5O3AXT/Z0m2P7i9h/j84HPABk6D+DbwO5bxAb9ewCPBm6kXaQzW3mMtHsw8LVZ+i0WATcDu9Fd+foZ4JAh9wvgxcBpI/O/D7xpkr+FRyLjm9pBpmxosdmyR1Xd2qa/C+wxVMNJlgBPBS4ZOo92CulKYCOwCvhH4PaqurutMtTf5S/o/uP81zb/mFnIo4DPJbm8De0Dw+8XS4FNwAfbqb0PJNl5FvKYcjRwZpseNIequgX4M+A7wK3AHcDlDLtfrAH+c5LHJHk48EK6G7In9ltYRB4AqvvnxSDXaid5BPAJ4PVVdefQeVTVPdWdtlhMd8j+uEm2N50kLwI2VtXlQ7e9hWdV1X50p1iPT/Ls0YUD7RcLgP2A91fVU4EfssWpkqH2z9bXcDjw8S2XDZFD62c4gq6w/gKwM//+NPREVdU6utNnnwPOB64E7tlinRn9LSwi45trQ6x8L8meAO1946QbTPJzdAXkI1X1ydnKA6Cqbgcuojs9sEuSqRtnh/i7HAgcnuTbwFl0p7TeM3Qe7V++VNVGuj6A/Rn+77EB2FBVl7T5c+iKymzsF4cB36iq77X5oXN4AXBjVW2qqp8Cn6TbV4beL06rqqdV1bPp+mC+xQR/C4vI+ObaECsrgRVtegVdH8XEJAlwGrCuqt41G3kkWZhklzb9MLo+mXV0xeSoIXIAqKqTqmpxVS2h2w++UFUvGzKPJDsneeTUNF1fwBoG3i+q6rvAzUn2aaGD6B7FMGgezTHceyqLWcjhO8ABSR7e/nuZ+i0G3T+T/Hx73xv4NeCjTPK3mGRH0wPtRXd+8Vt05+HfMmC7Z9KdY/0p3b/8jqU7B38hcD3weWC3CefwLLpD4KvpDpGvbL/HYHkATwKuaDmsAf6gxf8DcCmwnu5UxkMG/Ns8F/jM0Hm0tq5qr7VT++PQ+0Vr8ynA6vZ3+TSw6yzsnzsD3wcePRKbjd/ibcA32/75t8BDht4/ga/QFa+rgIMm/Vs47IkkqTdPZ0mSerOISJJ6s4hIknqziEiSerOISJJ6s4hIknqziEiSerOISANJ8uk2WOLaqQETkxyb5FvpnpPyN0ne1+ILk3wiyWXtdeDsZi9Nz5sNpYEk2a2qNrchWy6jGyb8a3RjTf0A+AJwVVW9JslHgb+qqq+24SsuqKrHz1ry0lYsuO9VJM2Q1yX5L216L+DlwJeqajNAko8Dv9SWvwDYtxuCCYBHJXlEVf3zkAlL98UiIg0gyXPpCsMzq+quJF+kG2Npa0cXDwIOqKofDZOh1I99ItIwHg3c1grI4+geMbwz8Jwku7ahwv/ryPqfA147NZPkKYNmK43JIiIN43xgQZJ1wJ8AF9M9V+KP6EZ4/Rrd427vaOu/Dlie5Ook1wL/Y/CMpTHYsS7Noql+jnYk8ing9Kr61GznJY3LIxFpdr21PTN+DXAj3fM4pHnDIxFJUm8eiUiSerOISJJ6s4hIknqziEiSerOISJJ6+/8a8pQAO9R/oAAAAABJRU5ErkJggg==", + "image/png": "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AIBnczk0/ZzXEt1www3asGGDpk6dqieeeELR0dF65plnFB8fb6557LHHdPr0aU2YMEElJSW6+eablZqaqoCAAHPNmjVrlJiYqIEDB8rHx0fDhw/X0qVLzfng4GBt27ZNCQkJ6tWrl5o3b66UlJTL3m4AAABcfVwOTT+322+/Xbfffvtl5202m5544gk98cQTl13TtGlTvfbaaz/6Ol27dtW///3vK64TAADUbS5f0wQAAHA1IjQBAABYQGgCAACwgNAEAABggaULwe+++27LO1y/fv0VFwMAAOCpLIWm4ODg2q4DAADAo1kKTatWrartOgAAADwa1zQBAABYcEU3t3zrrbe0bt065efnq6Kiwmlu//79NVIYAACAJ3H5SNPSpUs1ZswYhYaG6sCBA+rTp4+aNWumzz77TLfddltt1AgAAOB2Loemv//971q5cqWeffZZ+fn56bHHHlNaWpoefvhhlZaW1kaNAAAAbudyaMrPz1e/fv0kSYGBgTp58qQk6YEHHtDrr79es9UBAAB4CJdDU1hYmIqLiyVJkZGR+uijjyRJeXl5MgyjZqsDAADwEC6HpltuuUWbNm2SJI0ZM0aTJk3Sb37zG91777266667arxAAAAAT+Dyp+dWrlwph8MhSUpISFCzZs20e/du3XHHHfrDH/5Q4wUCAAB4ApdD04kTJxQREWE+HjlypEaOHCnDMFRQUKDIyMgaLRAAAMATuHx6Ljo6Wl9//fVF48XFxYqOjq6RogAAADyNy6HJMAzZbLaLxk+dOqWAgIAaKQoAAMDTWD49l5ycLEmy2WyaMWOGGjRoYM5VVVUpMzNT3bt3r/ECAQAAPIHl0HTgwAFJ5480HTp0SH5+fuacn5+funXrpkceeaTmKwQAAPAAlkPT+++/L+n8bQaWLFmioKCgWisKAADA07j86blVq1aZfz5x4oQk6Zprrqm5igAAADyQyxeCOxwOPfHEEwoODlZUVJSioqIUEhKi2bNnm/dvAgAAqGtcPtI0bdo0vfjii3rqqad00003SZJ27dqlWbNm6ezZs5o7d26NFwkAAOBuLoeml19+WS+88ILuuOMOc6xr165q1aqV/vSnPxGaAABAneTy6bni4mJ16NDhovEOHTqYX+QLAABQ17gcmrp166bnnnvuovHnnntO3bp1q5GiAAAAPI3Lp+fmz5+vIUOG6L333lNMTIwkKSMjQwUFBXrnnXdqvEAAAABP4PKRpl/+8pc6duyY7rrrLpWUlKikpER33323cnNz1b9//9qoEQAAwO1cPtKUn5+viIiIS17wnZ+fr8jIyBopDAAAwJO4fKQpOjpaX3/99UXj3377raKjo2ukKAAAAE/jcmgyDEM2m+2i8VOnTikgIKBGigIAAPA0lk/PJScnS5JsNptmzJihBg0amHNVVVXKzMxU9+7da7xAAAAAT2A5NB04cEDS+SNNhw4dkp+fnznn5+enbt266ZFHHqn5CgEAADyA5dD0/vvvS5LGjBmjJUuWKCgoqNaKAgAA8DQuf3pu1apVtVEHAACAR3P5QnAAAICrEaEJAADAAkITAACABYQmAAAAC1y+EBwAasJzf9ns7hIuK3HhUHeXAMADcaQJAADAAkITAACABYQmAAAACwhNAAAAFnhVaHrqqadks9mUlJRkjp09e1YJCQlq1qyZGjVqpOHDh6uwsNDpefn5+RoyZIgaNGigFi1a6NFHH9W5c+ec1nzwwQfq2bOn/P391bZtW61evfpn6AgAAHgLrwlNe/fu1f/7f/9PXbt2dRqfNGmSNm/erDfffFM7duzQl19+qbvvvtucr6qq0pAhQ1RRUaHdu3fr5Zdf1urVq5WSkmKuycvL05AhQ/TrX/9a2dnZSkpK0u9//3tt3br1Z+sPAAB4Nq8ITadOnVJ8fLyef/55NWnSxBwvLS3Viy++qEWLFumWW25Rr169tGrVKu3evVsfffSRJGnbtm365JNP9Oqrr6p79+667bbbNHv2bC1btkwVFRWSpBUrVig6OloLFy5Ux44dlZiYqN/+9rdavHjxZWsqLy9XWVmZ0wYAAOourwhNCQkJGjJkiGJjY53Gs7KyVFlZ6TTeoUMHRUZGKiMjQ5KUkZGhLl26KDQ01FwTFxensrIyHT582Fzzw33HxcWZ+7iUefPmKTg42NwiIiJ+cp8AAMBzeXxoWrt2rfbv36958+ZdNGe32+Xn56eQkBCn8dDQUNntdnPNhYGper567sfWlJWV6fvvv79kXVOnTlVpaam5FRQUXFF/AADAO3j0HcELCgo0ceJEpaWlKSAgwN3lOPH395e/v7+7ywAAAD8Tjz7SlJWVpaKiIvXs2VO+vr7y9fXVjh07tHTpUvn6+io0NFQVFRUqKSlxel5hYaHCwsIkSWFhYRd9mq768f9aExQUpMDAwFrqDgAAeBOPDk0DBw7UoUOHlJ2dbW69e/dWfHy8+ef69esrPT3dfE5ubq7y8/MVExMjSYqJidGhQ4dUVFRkrklLS1NQUJA6depkrrlwH9VrqvcBAADg0afnGjdurM6dOzuNNWzYUM2aNTPHx40bp+TkZDVt2lRBQUH685//rJiYGN14442SpEGDBqlTp0564IEHNH/+fNntdk2fPl0JCQnm6bWHHnpIzz33nB577DGNHTtW27dv17p16/T222//vA0DAACP5dGhyYrFixfLx8dHw4cPV3l5ueLi4vT3v//dnK9Xr562bNmiP/7xj4qJiVHDhg01evRoPfHEE+aa6Ohovf3225o0aZKWLFmia665Ri+88ILi4uLc0RIAAPBAXheaPvjgA6fHAQEBWrZsmZYtW3bZ50RFRemdd9750f3+6le/0oEDB2qiRAAAUAd59DVNAAAAnoLQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACzw6NM2bN0833HCDGjdurBYtWmjYsGHKzc11WnP27FklJCSoWbNmatSokYYPH67CwkKnNfn5+RoyZIgaNGigFi1a6NFHH9W5c+ec1nzwwQfq2bOn/P391bZtW61evbq22wMAAF7Eo0PTjh07lJCQoI8++khpaWmqrKzUoEGDdPr0aXPNpEmTtHnzZr355pvasWOHvvzyS919993mfFVVlYYMGaKKigrt3r1bL7/8slavXq2UlBRzTV5enoYMGaJf//rXys7OVlJSkn7/+99r69atP2u/AADAc/m6u4Afk5qa6vR49erVatGihbKysjRgwACVlpbqxRdf1GuvvaZbbrlFkrRq1Sp17NhRH330kW688UZt27ZNn3zyid577z2Fhoaqe/fumj17tiZPnqxZs2bJz89PK1asUHR0tBYuXChJ6tixo3bt2qXFixcrLi7uZ+8bAAB4Ho8+0vRDpaWlkqSmTZtKkrKyslRZWanY2FhzTYcOHRQZGamMjAxJUkZGhrp06aLQ0FBzTVxcnMrKynT48GFzzYX7qF5TvY9LKS8vV1lZmdMGAADqLq8JTQ6HQ0lJSbrpppvUuXNnSZLdbpefn59CQkKc1oaGhsput5trLgxM1fPVcz+2pqysTN9///0l65k3b56Cg4PNLSIi4if3CAAAPJfXhKaEhATl5ORo7dq17i5FkjR16lSVlpaaW0FBgbtLAgAAtcijr2mqlpiYqC1btmjnzp265pprzPGwsDBVVFSopKTE6WhTYWGhwsLCzDV79uxx2l/1p+suXPPDT9wVFhYqKChIgYGBl6zJ399f/v7+P7k3AADgHTz6SJNhGEpMTNSGDRu0fft2RUdHO8336tVL9evXV3p6ujmWm5ur/Px8xcTESJJiYmJ06NAhFRUVmWvS0tIUFBSkTp06mWsu3Ef1mup9AAAAePSRpoSEBL322mv617/+pcaNG5vXIAUHByswMFDBwcEaN26ckpOT1bRpUwUFBenPf/6zYmJidOONN0qSBg0apE6dOumBBx7Q/PnzZbfbNX36dCUkJJhHih566CE999xzeuyxxzR27Fht375d69at09tvv+223gEAgGfx6CNNy5cvV2lpqX71q1+pZcuW5vbGG2+YaxYvXqzbb79dw4cP14ABAxQWFqb169eb8/Xq1dOWLVtUr149xcTE6P7779eDDz6oJ554wlwTHR2tt99+W2lpaerWrZsWLlyoF154gdsNAAAAk0cfaTIM43+uCQgI0LJly7Rs2bLLromKitI777zzo/v51a9+pQMHDrhcIwAAuDp49JEmAAAAT0FoAgAAsIDQBAAAYAGhCQAAwAKPvhAcwMV2DPilu0v4Ub/cucPdJQBAreBIEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAs4At7AQBAjer21lZ3l3BZB38bd8XP5UgTAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAv4GhVcNW569iZ3l/CjPvzzh+4uAQDwIzjSBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAAL+MJeWJL/RBd3l3BZkSmH3F0CAOAqwJEmAAAACwhNAAAAFhCaAAAALCA0/cCyZcvUunVrBQQEqG/fvtqzZ4+7SwIAAB6A0HSBN954Q8nJyZo5c6b279+vbt26KS4uTkVFRe4uDQAAuBmh6QKLFi3S+PHjNWbMGHXq1EkrVqxQgwYN9NJLL7m7NAAA4GbccuD/VFRUKCsrS1OnTjXHfHx8FBsbq4yMjIvWl5eXq7y83HxcWloqSSorK3NaN2D667VUcc3YOWeUpXUnz1bVciVX7oc/88s59/25Wq7kp7Hax+lzdaOP78vP1HIlV85qD2crK2u5kp/Gah+nzp6u5UqunNUeLvz72BNZ7ePMGc/9u1ay3kfVGe/5b6r6sWEY//vJBgzDMIwvvvjCkGTs3r3bafzRRx81+vTpc9H6mTNnGpLY2NjY2NjY6sBWUFDwP7MCR5qu0NSpU5WcnGw+djgcKi4uVrNmzWSz2WrlNcvKyhQREaGCggIFBQXVymv8HOpCH3WhB6lu9FEXepDow5PUhR6kutHHz9GDYRg6efKkwsPD/+daQtP/ad68uerVq6fCwkKn8cLCQoWFhV203t/fX/7+/k5jISEhtVmiKSgoyGt/AS5UF/qoCz1IdaOPutCDRB+epC70INWNPmq7h+DgYEvruBD8//j5+alXr15KT083xxwOh9LT0xUTE+PGygAAgCfgSNMFkpOTNXr0aPXu3Vt9+vTRM888o9OnT2vMmDHuLg0AALgZoekC9957r77++mulpKTIbrere/fuSk1NVWhoqLtLk3T+lODMmTMvOi3obepCH3WhB6lu9FEXepDow5PUhR6kutGHp/VgMwwrn7EDAAC4unFNEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNHmJZcuWqXXr1goICFDfvn21Z88ed5f0o3bu3KmhQ4cqPDxcNptNGzdudJo3DEMpKSlq2bKlAgMDFRsbq+PHj7un2MuYN2+ebrjhBjVu3FgtWrTQsGHDlJub67Tm7NmzSkhIULNmzdSoUSMNHz78ohukutvy5cvVtWtX8+ZwMTExevfdd815b+jhh5566inZbDYlJSWZY97Qx6xZs2Sz2Zy2Dh06mPPe0EO1L774Qvfff7+aNWumwMBAdenSRfv27TPnveF3vHXr1he9HzabTQkJCZK84/2oqqrSjBkzFB0drcDAQF177bWaPXu20/eoecN7cfLkSSUlJSkqKkqBgYHq16+f9u7da857TA8/+UvbUOvWrl1r+Pn5GS+99JJx+PBhY/z48UZISIhRWFjo7tIu65133jGmTZtmrF+/3pBkbNiwwWn+qaeeMoKDg42NGzcaBw8eNO644w4jOjra+P77791T8CXExcUZq1atMnJycozs7Gxj8ODBRmRkpHHq1ClzzUMPPWREREQY6enpxr59+4wbb7zR6NevnxurvtimTZuMt99+2zh27JiRm5tr/PWvfzXq169v5OTkGIbhHT1caM+ePUbr1q2Nrl27GhMnTjTHvaGPmTNnGtdff73x1VdfmdvXX39tzntDD4ZhGMXFxUZUVJTxu9/9zsjMzDQ+++wzY+vWrcZ//vMfc403/I4XFRU5vRdpaWmGJOP99983DMM73o+5c+cazZo1M7Zs2WLk5eUZb775ptGoUSNjyZIl5hpveC9GjBhhdOrUydixY4dx/PhxY+bMmUZQUJBx4sQJwzA8pwdCkxfo06ePkZCQYD6uqqoywsPDjXnz5rmxKut+GJocDocRFhZmLFiwwBwrKSkx/P39jddff90NFVpTVFRkSDJ27NhhGMb5muvXr2+8+eab5pojR44YkoyMjAx3lWlJkyZNjBdeeMHrejh58qTRrl07Iy0tzfjlL39phiZv6WPmzJlGt27dLjnnLT0YhmFMnjzZuPnmmy87762/4xMnTjSuvfZaw+FweM37MWTIEGPs2LFOY3fffbcRHx9vGIZ3vBdnzpwx6tWrZ2zZssVpvGfPnsa0adM8qgdOz3m4iooKZWVlKTY21hzz8fFRbGysMjIy3FjZlcvLy5PdbnfqKTg4WH379vXonkpLSyVJTZs2lSRlZWWpsrLSqY8OHTooMjLSY/uoqqrS2rVrdfr0acXExHhdDwkJCRoyZIhTvZJ3vRfHjx9XeHi42rRpo/j4eOXn50vyrh42bdqk3r1765577lGLFi3Uo0cPPf/88+a8N/6OV1RU6NVXX9XYsWNls9m85v3o16+f0tPTdezYMUnSwYMHtWvXLt12222SvOO9OHfunKqqqhQQEOA0HhgYqF27dnlUD9wR3MN98803qqqquuiu5KGhoTp69Kibqvpp7Ha7JF2yp+o5T+NwOJSUlKSbbrpJnTt3lnS+Dz8/v4u+qNkT+zh06JBiYmJ09uxZNWrUSBs2bFCnTp2UnZ3tNT2sXbtW+/fvd7rOoZq3vBd9+/bV6tWr1b59e3311Vd6/PHH1b9/f+Xk5HhND5L02Wefafny5UpOTtZf//pX7d27Vw8//LD8/Pw0evRor/wd37hxo0pKSvS73/1Okvf8NzVlyhSVlZWpQ4cOqlevnqqqqjR37lzFx8dL8o6/bxs3bqyYmBjNnj1bHTt2VGhoqF5//XVlZGSobdu2HtUDoQmwICEhQTk5Odq1a5e7S7ki7du3V3Z2tkpLS/XWW29p9OjR2rFjh7vLsqygoEATJ05UWlraRf836k2q/+9fkrp27aq+ffsqKipK69atU2BgoBsrc43D4VDv3r315JNPSpJ69OihnJwcrVixQqNHj3ZzdVfmxRdf1G233abw8HB3l+KSdevWac2aNXrttdd0/fXXKzs7W0lJSQoPD/eq9+If//iHxo4dq1atWqlevXrq2bOnRo0apaysLHeX5oTTcx6uefPmqlev3kWf2CgsLFRYWJibqvppquv2lp4SExO1ZcsWvf/++7rmmmvM8bCwMFVUVKikpMRpvSf24efnp7Zt26pXr16aN2+eunXrpiVLlnhND1lZWSoqKlLPnj3l6+srX19f7dixQ0uXLpWvr69CQ0O9oo8fCgkJ0XXXXaf//Oc/XvNeSFLLli3VqVMnp7GOHTuapxq97Xf8888/13vvvaff//735pi3vB+PPvqopkyZopEjR6pLly564IEHNGnSJM2bN0+S97wX1157rXbs2KFTp06poKBAe/bsUWVlpdq0aeNRPRCaPJyfn5969eql9PR0c8zhcCg9PV0xMTFurOzKRUdHKywszKmnsrIyZWZmelRPhmEoMTFRGzZs0Pbt2xUdHe0036tXL9WvX9+pj9zcXOXn53tUH5ficDhUXl7uNT0MHDhQhw4dUnZ2trn17t1b8fHx5p+9oY8fOnXqlD799FO1bNnSa94LSbrpppsuuv3GsWPHFBUVJcl7fserrVq1Si1atNCQIUPMMW95P86cOSMfH+d/yuvVqyeHwyHJ+96Lhg0bqmXLlvruu++0detW3XnnnZ7Vw8962TmuyNq1aw1/f39j9erVxieffGJMmDDBCAkJMex2u7tLu6yTJ08aBw4cMA4cOGBIMhYtWmQcOHDA+Pzzzw3DOP/x0ZCQEONf//qX8fHHHxt33nmnx30E9o9//KMRHBxsfPDBB04fSz5z5oy55qGHHjIiIyON7du3G/v27TNiYmKMmJgYN1Z9sSlTphg7duww8vLyjI8//tiYMmWKYbPZjG3bthmG4R09XMqFn54zDO/o4y9/+YvxwQcfGHl5ecaHH35oxMbGGs2bNzeKiooMw/COHgzj/G0ffH19jblz5xrHjx831qxZYzRo0MB49dVXzTXe8DtuGOc/jRwZGWlMnjz5ojlveD9Gjx5ttGrVyrzlwPr1643mzZsbjz32mLnGG96L1NRU49133zU+++wzY9u2bUa3bt2Mvn37GhUVFYZheE4PhCYv8eyzzxqRkZGGn5+f0adPH+Ojjz5yd0k/6v333zckXbSNHj3aMIzzH4OdMWOGERoaavj7+xsDBw40cnNz3Vv0D1yqfknGqlWrzDXff/+98ac//clo0qSJ0aBBA+Ouu+4yvvrqK/cVfQljx441oqKiDD8/P+MXv/iFMXDgQDMwGYZ39HApPwxN3tDHvffea7Rs2dLw8/MzWrVqZdx7771O9zbyhh6qbd682ejcubPh7+9vdOjQwVi5cqXTvDf8jhuGYWzdutWQdMnavOH9KCsrMyZOnGhERkYaAQEBRps2bYxp06YZ5eXl5hpveC/eeOMNo02bNoafn58RFhZmJCQkGCUlJea8p/RgM4wLbhsKAACAS+KaJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBuGqlpqbq5ptvVkhIiJo1a6bbb79dn376qTm/e/dude/eXQEBAerdu7c2btwom82m7Oxsc01OTo5uu+02NWrUSKGhoXrggQf0zTffuKEbALWN0ATgqnX69GklJydr3759Sk9Pl4+Pj+666y45HA6VlZVp6NCh6tKli/bv36/Zs2dr8uTJTs8vKSnRLbfcoh49emjfvn1KTU1VYWGhRowY4aaOANQmm2EYhruLAABP8M033+gXv/iFDh06pF27dmn69Ok6ceKEAgICJEkvvPCCxo8frwMHDqh79+6aM2eO/v3vf2vr1q3mPk6cOKGIiAjl5ubquuuuc1crAGoBR5oAXLWOHz+uUaNGqU2bNgoKClLr1q0lSfn5+crNzVXXrl3NwCRJffr0cXr+wYMH9f7776tRo0bm1qFDB0lyOs0HoG7wdXcBAOAuQ4cOVVRUlJ5//nmFh4fL4XCoc+fOqqiosPT8U6dOaejQoXr66acvmmvZsmVNlwvAzQhNAK5K3377rXJzc/X888+rf//+kqRdu3aZ8+3bt9err76q8vJy+fv7S5L27t3rtI+ePXvqn//8p1q3bi1fX/46Beo6Ts8BuCo1adJEzZo108qVK/Wf//xH27dvV3Jysjl/3333yeFwaMKECTpy5Ii2bt2qv/3tb5Ikm80mSUpISFBxcbFGjRqlvXv36tNPP9XWrVs1ZswYVVVVuaUvALWH0ATgquTj46O1a9cqKytLnTt31qRJk7RgwQJzPigoSJs3b1Z2dra6d++uadOmKSUlRZLM65zCw8P14YcfqqqqSoMGDVKXLl2UlJSkkJAQ+fjw1ytQ1/DpOQCwaM2aNRozZoxKS0sVGBjo7nIA/Mw4CQ8Al/HKK6+oTZs2atWqlQ4ePKjJkydrxIgRBCbgKkVoAoDLsNvtSklJkd1uV8uWLXXPPfdo7ty57i4LgJtweg4AAMACrlQEAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWPD/AdwxdzJU93kAAAAAAElFTkSuQmCC", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -1535,7 +1507,7 @@ }, { "cell_type": "code", - "execution_count": 220, + "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1547,14 +1519,12 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAGwCAYAAAC0HlECAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyuklEQVR4nO3de1RV9br/8Q+gXEyBvHBLRIhSTNStJq0uZskQjePJcliZNSjNRm44O6SjaBla1rGbmpXJ6aLWSbPaO22nbZRQKRMzSTLMyAtnYzvBSJGUBIX5+6PD/Lny9g2xtRa+X2PMMVzz+zDX87DCPjLnmsvLsixLAAAAOCNvVzcAAADgCQhNAAAABghNAAAABghNAAAABghNAAAABghNAAAABghNAAAABlq5uoGWoqGhQT/88IPatWsnLy8vV7cDAAAMWJaln3/+WREREfL2PvPvkghNzeSHH35QZGSkq9sAAABNsHfvXnXu3PmMNYSmZtKuXTtJv37TAwMDXdwNAAAwUV1drcjISPv/42dCaGomjafkAgMDCU0AAHgYk0truBAcAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAQCtXNwAAwO9RVlamyspKV7dxzjp27KguXbq4ug38DoQmAIDHKCsrU1xcnGpqalzdyjlr06aNduzYQXDyIIQmAIDHqKysVE1NjR56aq4iY2Jd3U6T7d2zS7OnTFRlZSWhyYMQmgAAHicyJlaxPXq6ug1cYLgQHAAAwAChCQAAwAChCQAAwAChCQAAwAChCQAAwAChCQAAwAChCQAAwAChCQAAwIBLQ9OsWbN05ZVXql27dgoJCdGIESNUUlLiVDNo0CB5eXk5bQ888IBTTVlZmZKTk9WmTRuFhIRo0qRJOn78uFPN+vXr1bdvX/n5+Sk2NlaLFy8+qZ/58+era9eu8vf3V0JCgjZv3tzsMwMAAM/k0tCUn5+v1NRUbdq0Sbm5uTp27JiGDBmiI0eOONWNHz9e+/bts7dnnnnGXquvr1dycrLq6uq0ceNGvfHGG1q8eLGysrLsmtLSUiUnJ+uGG25QUVGR0tPTdd9992n16tV2zTvvvKOMjAxNnz5dX375pXr37q2kpCTt37///H8jAACA23Ppx6jk5OQ4PV68eLFCQkJUWFiogQMH2vvbtGmjsLCwUx5jzZo1+uabb/Txxx8rNDRUffr00cyZM5WZmakZM2bI19dX2dnZio6O1uzZsyVJcXFx2rBhg+bOnaukpCRJ0pw5czR+/Hjde++9kqTs7GytWrVKCxcu1JQpU0563traWtXW1tqPq6urz+2bAQAA3JpbXdN06NAhSVL79u2d9i9ZskQdO3ZUz549NXXqVKdPty4oKFB8fLxCQ0PtfUlJSaqurtb27dvtmsTERKdjJiUlqaCgQJJUV1enwsJCpxpvb28lJibaNb81a9YsBQUF2VtkZOQ5TA4AANyd23xgb0NDg9LT03XNNdeoZ8///yGMd955p6KiohQREaFt27YpMzNTJSUlev/99yVJ5eXlToFJkv24vLz8jDXV1dX65ZdfdPDgQdXX15+y5ttvvz1lv1OnTlVGRob9uLq6muAEAEAL5jahKTU1VcXFxdqwYYPT/vvvv9/+c3x8vMLDwzV48GDt3r1bl1566R/dps3Pz09+fn4ue34AAPDHcovTc2lpaVq5cqXWrVunzp07n7E2ISFBkrRr1y5JUlhYmCoqKpxqGh83Xgd1uprAwEAFBASoY8eO8vHxOWXN6a6lAgAAFxaXhibLspSWlqbly5dr7dq1io6OPuvXFBUVSZLCw8MlSQ6HQ19//bXTu9xyc3MVGBioHj162DV5eXlOx8nNzZXD4ZAk+fr6ql+/fk41DQ0NysvLs2sAAMCFzaWn51JTU7V06VJ98MEHateunX0NUlBQkAICArR7924tXbpUN910kzp06KBt27Zp4sSJGjhwoHr16iVJGjJkiHr06KG7775bzzzzjMrLyzVt2jSlpqbap88eeOABvfTSS5o8ebLGjh2rtWvX6t1339WqVavsXjIyMpSSkqL+/ftrwIABev7553XkyBH73XQAAODC5tLQtGDBAkm/3sDyRIsWLdI999wjX19fffzxx3aAiYyM1MiRIzVt2jS71sfHRytXrtSECRPkcDh00UUXKSUlRY8//rhdEx0drVWrVmnixImaN2+eOnfurNdee82+3YAk3X777frxxx+VlZWl8vJy9enTRzk5OSddHA4AAC5MLg1NlmWdcT0yMlL5+flnPU5UVJQ++uijM9YMGjRIW7duPWNNWlqa0tLSzvp8AADgwuMWF4IDAAC4O0ITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAAUITAACAgVaubgAA8McpKytTZWWlq9tosh07dri6BVzACE0AcIEoKytTXFycampqXN0K4JEITQBwgaisrFRNTY0eemquImNiXd1Ok2z5dJ3eenGOq9vABYrQBAAXmMiYWMX26OnqNppk755drm4BFzAuBAcAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADBAaAIAADDg0tA0a9YsXXnllWrXrp1CQkI0YsQIlZSUONUcPXpUqamp6tChg9q2bauRI0eqoqLCqaasrEzJyclq06aNQkJCNGnSJB0/ftypZv369erbt6/8/PwUGxurxYsXn9TP/Pnz1bVrV/n7+yshIUGbN29u9pkBAIBncmloys/PV2pqqjZt2qTc3FwdO3ZMQ4YM0ZEjR+yaiRMn6sMPP9R7772n/Px8/fDDD7r11lvt9fr6eiUnJ6uurk4bN27UG2+8ocWLFysrK8uuKS0tVXJysm644QYVFRUpPT1d9913n1avXm3XvPPOO8rIyND06dP15Zdfqnfv3kpKStL+/fv/mG8GAABwa61c+eQ5OTlOjxcvXqyQkBAVFhZq4MCBOnTokF5//XUtXbpUN954oyRp0aJFiouL06ZNm3TVVVdpzZo1+uabb/Txxx8rNDRUffr00cyZM5WZmakZM2bI19dX2dnZio6O1uzZsyVJcXFx2rBhg+bOnaukpCRJ0pw5czR+/Hjde++9kqTs7GytWrVKCxcu1JQpU/7A7woAAHBHbnVN06FDhyRJ7du3lyQVFhbq2LFjSkxMtGu6d++uLl26qKCgQJJUUFCg+Ph4hYaG2jVJSUmqrq7W9u3b7ZoTj9FY03iMuro6FRYWOtV4e3srMTHRrvmt2tpaVVdXO20AAKDlcpvQ1NDQoPT0dF1zzTXq2bOnJKm8vFy+vr4KDg52qg0NDVV5ebldc2JgalxvXDtTTXV1tX755RdVVlaqvr7+lDWNx/itWbNmKSgoyN4iIyObNjgAAPAIbhOaUlNTVVxcrGXLlrm6FSNTp07VoUOH7G3v3r2ubgkAAJxHLr2mqVFaWppWrlypTz75RJ07d7b3h4WFqa6uTlVVVU6/baqoqFBYWJhd89t3uTW+u+7Emt++466iokKBgYEKCAiQj4+PfHx8TlnTeIzf8vPzk5+fX9MGBgAAHselv2myLEtpaWlavny51q5dq+joaKf1fv36qXXr1srLy7P3lZSUqKysTA6HQ5LkcDj09ddfO73LLTc3V4GBgerRo4ddc+IxGmsaj+Hr66t+/fo51TQ0NCgvL8+uAQAAFzaX/qYpNTVVS5cu1QcffKB27drZ1w8FBQUpICBAQUFBGjdunDIyMtS+fXsFBgbqP/7jP+RwOHTVVVdJkoYMGaIePXro7rvv1jPPPKPy8nJNmzZNqamp9m+CHnjgAb300kuaPHmyxo4dq7Vr1+rdd9/VqlWr7F4yMjKUkpKi/v37a8CAAXr++ed15MgR+910AADgwubS0LRgwQJJ0qBBg5z2L1q0SPfcc48kae7cufL29tbIkSNVW1urpKQkvfzyy3atj4+PVq5cqQkTJsjhcOiiiy5SSkqKHn/8cbsmOjpaq1at0sSJEzVv3jx17txZr732mn27AUm6/fbb9eOPPyorK0vl5eXq06ePcnJyTro4HAAAXJhcGposyzprjb+/v+bPn6/58+eftiYqKkofffTRGY8zaNAgbd269Yw1aWlpSktLO2tPAADgwuM2754DAABwZ4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA61c3QAAeIKysjJVVla6uo1zsmPHDle3AHg0QhMAnEVZWZni4uJUU1Pj6lbQwrSEINuxY0d16dLF1W38IQhNAHAWlZWVqqmp0UNPzVVkTKyr22myLZ+u01svznF1G5B0sHK/vLy9ddddd7m6lXPWpk0b7dix44IIToQmADAUGROr2B49Xd1Gk+3ds8vVLeD/HK6ultXQ4PFBfO+eXZo9ZaIqKysJTQAA4Pzx9CB+oeHdcwAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAYITQAAAAZcGpo++eQTDR8+XBEREfLy8tKKFSuc1u+55x55eXk5bUOHDnWqOXDggMaMGaPAwEAFBwdr3LhxOnz4sFPNtm3bdN1118nf31+RkZF65plnTurlvffeU/fu3eXv76/4+Hh99NFHzT4vAADwXC4NTUeOHFHv3r01f/7809YMHTpU+/bts7e3337baX3MmDHavn27cnNztXLlSn3yySe6//777fXq6moNGTJEUVFRKiws1LPPPqsZM2bolVdesWs2btyo0aNHa9y4cdq6datGjBihESNGqLi4uPmHBgAAHqmVK5982LBhGjZs2Blr/Pz8FBYWdsq1HTt2KCcnR1988YX69+8vSXrxxRd100036bnnnlNERISWLFmiuro6LVy4UL6+vrriiitUVFSkOXPm2OFq3rx5Gjp0qCZNmiRJmjlzpnJzc/XSSy8pOzv7lM9dW1ur2tpa+3F1dfXvnh8AAHgOt7+maf369QoJCVG3bt00YcIE/fTTT/ZaQUGBgoOD7cAkSYmJifL29tbnn39u1wwcOFC+vr52TVJSkkpKSnTw4EG7JjEx0el5k5KSVFBQcNq+Zs2apaCgIHuLjIxslnkBAIB7alJouvHGG1VVVXXS/urqat14443n2pNt6NChevPNN5WXl6enn35a+fn5GjZsmOrr6yVJ5eXlCgkJcfqaVq1aqX379iovL7drQkNDnWoaH5+tpnH9VKZOnapDhw7Z2969e89tWAAA4NaadHpu/fr1qqurO2n/0aNH9emnn55zU43uuOMO+8/x8fHq1auXLr30Uq1fv16DBw9utudpCj8/P/n5+bm0BwAA8Mf5XaFp27Zt9p+/+eYbp9/E1NfXKycn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aLLImFjF9vDMf4js3bPr7EUAWjy3vRAcAADAnRCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADBCaAAAADLh1aJoxY4a8vLyctu7du9vrR48eVWpqqjp06KC2bdtq5MiRqqiocDpGWVmZkpOT1aZNG4WEhGjSpEk6fvy4U8369evVt29f+fn5KTY2VosXL/4jxgMAAB7ErUOTJF1xxRXat2+fvW3YsMFemzhxoj788EO99957ys/P1w8//KBbb73VXq+vr1dycrLq6uq0ceNGvfHGG1q8eLGysrLsmtLSUiUnJ+uGG25QUVGR0tPTdd9992n16tV/6JwAAMC9tXJ1A2fTqlUrhYWFnbT/0KFDev3117V06VLdeOONkqRFixYpLi5OmzZt0lVXXaU1a9bom2++0ccff6zQ0FD16dNHM2fOVGZmpmbMmCFfX19lZ2crOjpas2fPliTFxcVpw4YNmjt3rpKSkk7bV21trWpra+3H1dXVzTw5AABwJ27/m6adO3cqIiJCMTExGjNmjMrKyiRJhYWFOnbsmBITE+3a7t27q0uXLiooKJAkFRQUKD4+XqGhoXZNUlKSqqurtX37drvmxGM01jQe43RmzZqloKAge4uMjGyWeQEAgHty69CUkJCgxYsXKycnRwsWLFBpaamuu+46/fzzzyovL5evr6+Cg4OdviY0NFTl5eWSpPLycqfA1LjeuHammurqav3yyy+n7W3q1Kk6dOiQve3du/dcxwUAAG7MrU/PDRs2zP5zr169lJCQoKioKL377rsKCAhwYWeS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lzp06KCAgADFx8dry5Yt9ron/Ix37dr1pNfDy8tLqampkjzj9aivr9ejjz6q6OhoBQQE6NJLL9XMmTOdPkfNE16Ln3/+Wenp6YqKilJAQICuvvpqffHFF/a628xwzh/ahvNu2bJllq+vr7Vw4UJr+/bt1vjx463g4GCroqLC1a2d1kcffWQ98sgj1vvvv29JspYvX+60/tRTT1lBQUHWihUrrK+++sr693//dys6Otr65ZdfXNPwKSQlJVmLFi2yiouLraKiIuumm26yunTpYh0+fNiueeCBB6zIyEgrLy/P2rJli3XVVVdZV199tQu7Ptnf//53a9WqVdZ3331nlZSUWA8//LDVunVrq7i42LIsz5jhRJs3b7a6du1q9erVy3rwwQft/Z4wx/Tp060rrrjC2rdvn739+OOP9ronzGBZlnXgwAErKirKuueee6zPP//c2rNnj7V69Wpr165ddo0n/Izv37/f6bXIzc21JFnr1q2zLMszXo8nn3zS6tChg7Vy5UqrtLTUeu+996y2bdta8+bNs2s84bW47bbbrB49elj5+fnWzp07renTp1uBgYHW999/b1mW+8xAaPIAAwYMsFJTU+3H9fX1VkREhDVr1iwXdmXut6GpoaHBCgsLs5599ll7X1VVleXn52e9/fbbLujQzP79+y1JVn5+vmVZv/bcunVr67333rNrduzYYUmyCgoKXNWmkYsvvth67bXXPG6Gn3/+2brsssus3Nxc6/rrr7dDk6fMMX36dKt3796nXPOUGSzLsjIzM61rr732tOue+jP+4IMPWpdeeqnV0NDgMa9HcnKyNXbsWKd9t956qzVmzBjLsjzjtaipqbF8fHyslStXOu3v27ev9cgjj7jVDJyec3N1dXUqLCxUYmKivc/b21uJiYkqKChwYWdNV1paqvLycqeZgoKClJCQ4NYzHTp0SJLUvn17SVJhYaGOHTvmNEf37t3VpUsXt52jvr5ey5Yt05EjR+RwODxuhtTUVCUnJzv1K3nWa7Fz505FREQoJiZGY8aMUVlZmSTPmuHvf/+7+vfvr1GjRikkJER/+tOf9Oqrr9rrnvgzXldXp7feektjx46Vl5eXx7weV199tfLy8vTdd99Jkr766itt2LBBw4YNk+QZr8Xx48dVX18vf39/p/0BAQHasGGDW83AHcHdXGVlperr60+6K3loaKi+/fZbF3V1bsrLyyXplDM1rrmbhoYGpaen65prrlHPnj0l/TqHr6/vSR/U7I5zfP3113I4HDp69Kjatm2r5cuXq0ePHioqKvKYGZYtW6Yvv/zS6TqHRp7yWiQkJGjx4sXq1q2b9u3bp8cee0zXXXediouLPWYGSdqzZ48WLFigjIwMPfzww/riiy/0l7/8Rb6+vkpJSfHIn/EVK1aoqqpK99xzjyTP+W9qypQpqq6uVvfu3eXj46P6+no9+eSTGjNmjCTP+Pu2Xbt2cjgcmjlzpuLi4hQaGqq3335bBQUFio2NdasZCE2AgdTUVBUXF2vDhg2ubqVJunXrpqKiIh06dEh//etflZKSovz8fFe3ZWzv3r168MEHlZube9K/Rj1J47/+JalXr15KSEhQVFSU3n33XQUEBLiws9+noaFB/fv313/9139Jkv70pz+puLhY2dnZSklJcXF3TfP6669r2LBhioiIcHUrv8u7776rJUuWaOnSpbriiitUVFSk9PR0RUREeNRr8T//8z8aO3asLrnkEvn4+Khv374aPXq0CgsLXd2aE07PubmOHTvKx8fnpHdsVFRUKCwszEVdnZvGvj1lprS0NK1cuVLr1q1T586d7f1hYWGqq6tTVVWVU707zuHr66vY2Fj169dPs2bNUu/evTVv3jyPmaGwsFD79+9X37591apVK7Vq1Ur5+fl64YUX1KpVK4WGhnrEHL8VHBysyy+/XLt27fKY10KSwsPD1aNHD6d9cXFx9qlGT/sZ/+c//6mPP/5Y9913n73PU16PSZMmacqUKbrjjjsUHx+vu+++WxMnTtSsWbMkec5rcemllyo/P1+HDx/W3r17tXnzZh07dkwxMTFuNQOhyc35+vqqX79+ysvLs/c1NDQoLy9PDofDhZ01XXR0tMLCwpxmqq6u1ueff+5WM1mWpbS0NC1fvlxr165VdHS003q/fv3UunVrpzlKSkpUVlbmVnOcSkNDg2praz1mhsGDB+vrr79WUVGRvfXv319jxoyx/+wJc/zW4cOHtXv3boWHh3vMayFJ11xzzUm33/juu+8UFRUlyXN+xhstWrRIISEhSk5Otvd5yutRU1Mjb2/n/5X7+PiooaFBkue9FhdddJHCw8N18OBBrV69WjfffLN7zfCHXnaOJlm2bJnl5+dnLV682Prmm2+s+++/3woODrbKy8td3dpp/fzzz9bWrVutrVu3WpKsOXPmWFu3brX++c9/Wpb169tHg4ODrQ8++MDatm2bdfPNN7vdW2AnTJhgBQUFWevXr3d6W3JNTY1d88ADD1hdunSx1q5da23ZssVyOByWw+FwYdcnmzJlipWfn2+VlpZa27Zts6ZMmWJ5eXlZa9assSzLM2Y4lRPfPWdZnjHHQw89ZK1fv94qLS21PvvsMysxMdHq2LGjtX//fsuyPGMGy/r1tg+tWrWynnzySWvnzp3WkiVLrDZt2lhvvfWWXeMJP+OW9eu7kbt06WJlZmaetOYJr0dKSop1ySWX2LcceP/9962OHTtakydPtms84bXIycmx/vGPf1h79uyx1qxZY/Xu3dtKSEiw6urqLMtynxkITR7ixRdftLp06WL5+vpaAwYMsDZt2uTqls5o3bp1lqSTtpSUFMuyfn0b7KOPPmqFhoZafn5+1uDBg62SkhLXNv0bp+pfkrVo0SK75pdffrH+/Oc/WxdffLHVpk0b65ZbbrH27dvnuqZPYezYsVZUVJTl6+trderUyRo8eLAdmCzLM2Y4ld+GJk+Y4/bbb7fCw8MtX19f65JLLrFuv/12p3sbecIMjT788EOrZ8+elp+fn9W9e3frlVdecVr3hJ9xy7Ks1atXW5JO2ZsnvB7V1dXWgw8+aHXp0sXy9/e3YmJirEceecSqra21azzhtXjnnXesmJgYy9fX1woLC7NSU1Otqqoqe91dZvCyrBNuGwoAAIBT4pomAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmAAAAA4QmABesnJwcXXvttQoODlaHDh30b//2b9q9e7e9vnHjRvXp00f+/v7q37+/VqxYIS8vLxUVFdk1xcXFGjZsmNq2bavQ0FDdfffdqqysdME0AM43QhOAC9aRI0eUkZGhLVu2KC8vT97e3rrlllvU0NCg6upqDR8+XPHx8fryyy81c+ZMZWZmOn19VVWVbrzxRv3pT3/Sli1blJOTo4qKCt12220umgjA+eRlWZbl6iYAwB1UVlaqU6dO+vrrr7VhwwZNmzZN33//vfz9/SVJr732msaPH6+tW7eqT58+euKJJ/Tpp59q9erV9jG+//57RUZGqqSkRJdffrmrRgFwHvCbJgAXrJ07d2r06NGKiYlRYGCgunbtKkkqKytTSUmJevXqZQcmSRowYIDT13/11Vdat26d2rZta2/du3eXJKfTfABahlaubgAAXGX48OGKiorSq6++qoiICDU0NKhnz56qq6sz+vrDhw9r+PDhevrpp09aCw8Pb+52AbgYoQnABemnn35SSUmJXn31VV133XWSpA0bNtjr3bp101tvvaXa2lr5+flJkr744gunY/Tt21d/+9vf1LVrV7VqxV+nQEvH6TkAF6SLL75YHTp00CuvvKJdu3Zp7dq1ysjIsNfvvPNONTQ06P7779eOHTu0evVqPffcc5IkLy8vSVJqaqoOHDig0aNH64svvtDu3bu1evVq3Xvvvaqvr3fJXADOH0ITgAuSt7e3li1bpsLCQvXs2VMTJ07Us88+a68HBgbqww8/VFFRkfr06aNHHnlEWVlZkmRf5xQREaHPPvtM9fX1GjJkiOLj45Wenq7g4GB5e/PXK9DS8O45ADC0ZMkS3XvvvTp06JACAgJc3Q6APxgn4QHgNN58803FxMTokksu0VdffaXMzEzddtttBCbgAkVoAoDTKC8vV1ZWlsrLyxUeHq5Ro0bpySefdHVbAFyE03MAAAAGuFIRAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAAKEJAADAwP8DbR/icyogki8AAAAASUVORK5CYII=", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -1581,7 +1551,7 @@ }, { "cell_type": "code", - "execution_count": 221, + "execution_count": 30, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1593,26 +1563,22 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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cq23wxx+a+rUqXI4HBo5cqRrzA7zeOaZZ+RwONyWZs2audbbYQ6SdOzYMQ0ePFi1a9dWaGio4uPjtWfPHtd6O/x+x8XFlXgvHA6HkpKSJNnnvXA6nRo3bpwaNGig0NBQNWrUSJMnT3b73iA7vB9nzpzRyJEjVb9+fYWGhqpLly7avXu3a31AzOEPfyHSf7DFixeboKAg88Ybb5h///vf5oEHHjARERHm5MmT/o5Wqo8++siMHTvWLFu2zEgyy5cvd1s/depUEx4ebtLS0szevXtN//79TYMGDczZs2f9E/gSevXqZebNm2f2799vMjMzTZ8+fUxsbKzJz893bfPQQw+ZmJgYs379erNnzx5z3XXXmS5duvgxdUkrVqwwH374oTl48KA5cOCAefrpp03VqlXN/v37jTH2mMOv7dq1y8TFxZnWrVubESNGuMbtMI8JEyaYli1bmuPHj7uW77//3rXeDnM4ffq0qV+/vrn//vvNzp07zddff23WrFljDh8+7NrGDr/fp06dcnsf1q1bZySZjRs3GmPs8V4YY8yUKVNM7dq1zcqVK01WVpZ57733TPXq1c3MmTNd29jh/Rg4cKBp0aKF2bx5szl06JCZMGGCCQsLM99++60xJjDmQJH5Azp16mSSkpJcj51Op4mOjjapqal+TOW53xaZ4uJiExkZaV544QXXWE5OjgkODjbvvPOOHxJ65tSpU0aS2bx5szHml8xVq1Y17733nmubL774wkgy27dv91dMj9SsWdO8/vrrtpvDmTNnTJMmTcy6devMjTfe6CoydpnHhAkTTJs2bS65zi5zGD16tOnWrVup6+36+z1ixAjTqFEjU1xcbJv3whhj+vbta4YNG+Y2dvvtt5tBgwYZY+zxfhQWFprKlSublStXuo23b9/ejB07NmDmwKmly3T+/Hmlp6erZ8+errFKlSqpZ8+e2r59ux+TXb6srCydOHHCbU7h4eHq3LlzQM8pNzdXklSrVi1JUnp6ui5cuOA2j2bNmik2NjZg5+F0OrV48WIVFBQoISHBdnNISkpS37593fJK9novDh06pOjoaDVs2FCDBg3S0aNHJdlnDitWrFDHjh111113qW7dumrXrp3mzp3rWm/H3+/z58/rrbfe0rBhw+RwOGzzXkhSly5dtH79eh08eFCStHfvXm3dulW9e/eWZI/34+eff5bT6VRISIjbeGhoqLZu3Rowcwj4O/sGqh9++EFOp7PEHYbr1aunL7/80k+p/pgTJ05I0iXndHFdoCkuLtbIkSPVtWtXtWrVStIv8wgKCirxZaGBOI99+/YpISFB586dU/Xq1bV8+XK1aNFCmZmZtpnD4sWLlZGR4Xbe/CK7vBedO3fW/Pnz1bRpUx0/flwTJ07U9ddfr/3799tmDl9//bVmz56t5ORkPf3009q9e7eGDx+uoKAgJSYm2vL3Oy0tTTk5Obr//vsl2efPkySNGTNGeXl5atasmSpXriyn06kpU6Zo0KBBkuzx922NGjWUkJCgyZMnq3nz5qpXr57eeecdbd++XY0bNw6YOVBkYGtJSUnav3+/tm7d6u8ol6Vp06bKzMxUbm6u3n//fSUmJmrz5s3+juWx7OxsjRgxQuvWrSvxf212cvH/kiWpdevW6ty5s+rXr693331XoaGhfkzmueLiYnXs2FHPPfecJKldu3bav3+/5syZo8TERD+nuzz//Oc/1bt3b0VHR/s7imXvvvuuFi1apLffflstW7ZUZmamRo4cqejoaFu9H2+++aaGDRumq666SpUrV1b79u117733Kj093d/RXDi1dJnq1KmjypUrl7ha/uTJk4qMjPRTqj/mYm67zOnRRx/VypUrtXHjRl199dWu8cjISJ0/f145OTlu2wfiPIKCgtS4cWN16NBBqampatOmjWbOnGmbOaSnp+vUqVNq3769qlSpoipVqmjz5s2aNWuWqlSponr16tliHr8VERGha665RocPH7bNexEVFaUWLVq4jTVv3tx1isxuv99HjhzR//3f/+kvf/mLa8wu74UkjRo1SmPGjNE999yj+Ph4DRkyRI8//rhSU1Ml2ef9aNSokTZv3qz8/HxlZ2dr165dunDhgho2bBgwc6DIXKagoCB16NBB69evd40VFxdr/fr1SkhI8GOyy9egQQNFRka6zSkvL087d+4MqDkZY/Too49q+fLl2rBhgxo0aOC2vkOHDqpatarbPA4cOKCjR48G1Dwupbi4WEVFRbaZQ48ePbRv3z5lZma6lo4dO2rQoEGun+0wj9/Kz8/XV199paioKNu8F127di1xG4KDBw+qfv36kuzz+33RvHnzVLduXfXt29c1Zpf3QpIKCwtVqZL7P7GVK1dWcXGxJPu9H9WqVVNUVJR++uknrVmzRgMGDAicOZTbZcUV0OLFi01wcLCZP3+++fzzz82DDz5oIiIizIkTJ/wdrVRnzpwxn376qfn000+NJDN9+nTz6aefmiNHjhhjfvkoXUREhPnggw/MZ599ZgYMGBBwHwd8+OGHTXh4uNm0aZPbxzQLCwtd2zz00EMmNjbWbNiwwezZs8ckJCSYhIQEP6YuacyYMWbz5s0mKyvLfPbZZ2bMmDHG4XCYtWvXGmPsMYdL+fWnloyxxzyeeOIJs2nTJpOVlWW2bdtmevbsaerUqWNOnTpljLHHHHbt2mWqVKlipkyZYg4dOmQWLVpkrrjiCvPWW2+5trHD77cxv3wCNDY21owePbrEOju8F8YYk5iYaK666irXx6+XLVtm6tSpY5566inXNnZ4P1avXm1WrVplvv76a7N27VrTpk0b07lzZ3P+/HljTGDMgSLzB7300ksmNjbWBAUFmU6dOpkdO3b4O1KZNm7caCSVWBITE40xv3wkcNy4caZevXomODjY9OjRwxw4cMC/oX/jUvklmXnz5rm2OXv2rHnkkUdMzZo1zRVXXGFuu+02c/z4cf+FvoRhw4aZ+vXrm6CgIHPllVeaHj16uEqMMfaYw6X8tsjYYR533323iYqKMkFBQeaqq64yd999t9v9V+wwB2OM+de//mVatWplgoODTbNmzcxrr73mtt4Ov9/GGLNmzRoj6ZLZ7PJe5OXlmREjRpjY2FgTEhJiGjZsaMaOHWuKiopc29jh/ViyZIlp2LChCQoKMpGRkSYpKcnk5OS41gfCHBzG/Oo2gwAAADbCNTIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAs7q1avVrVs3RUREqHbt2rrlllv01VdfudZ/8sknatu2rUJCQtSxY0elpaXJ4XAoMzPTtc3+/fvVu3dvVa9eXfXq1dOQIUP0ww8/+GE2AHyJIgMg4BQUFCg5OVl79uzR+vXrValSJd12220qLi5WXl6e+vXrp/j4eGVkZGjy5MkaPXq02/45OTn605/+pHbt2mnPnj1avXq1Tp48qYEDB/ppRgB8hW+/BhDwfvjhB1155ZXat2+ftm7dqr/97W/69ttvFRISIkl6/fXX9cADD+jTTz9V27Zt9eyzz+rjjz/WmjVrXM/x7bffKiYmRgcOHNA111zjr6kA8DKOyAAIOIcOHdK9996rhg0bKiwsTHFxcZKko0eP6sCBA2rdurWrxEhSp06d3Pbfu3evNm7cqOrVq7uWZs2aSZLbKSoA9lfF3wEA4Lf69eun+vXra+7cuYqOjlZxcbFatWql8+fPe7R/fn6++vXrp+eff77EuqioKG/HBeBHFBkAAeXHH3/UgQMHNHfuXF1//fWSpK1bt7rWN23aVG+99ZaKiooUHBwsSdq9e7fbc7Rv315Lly5VXFycqlThrzmgIuPUEoCAUrNmTdWuXVuvvfaaDh8+rA0bNig5Odm1/r//+79VXFysBx98UF988YXWrFmjf/zjH5Ikh8MhSUpKStLp06d17733avfu3frqq6+0Zs0aDR06VE6n0y/zAuAbFBkAAaVSpUpavHix0tPT1apVKz3++ON64YUXXOvDwsL0r3/9S5mZmWrbtq3Gjh2r8ePHS5Lrupno6Ght27ZNTqdTN998s+Lj4zVy5EhFRESoUiX+2gMqEj61BMD2Fi1apKFDhyo3N1ehoaH+jgOgHHHyGIDtLFy4UA0bNtRVV12lvXv3avTo0Ro4cCAlBvgPRJEBYDsnTpzQ+PHjdeLECUVFRemuu+7SlClT/B0LgB9wagkAANgWV70BAADbosgAAADbosgAAADbosgAAADbosgAAADbosgAAADbosgAAADbosgAAADb+n8R/ayVYeHKSgAAAABJRU5ErkJggg==", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAGwCAYAAACzXI8XAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAx1klEQVR4nO3deVxVdeL/8fd14YILoCZbgiLuC65ppG3qVFiY5ZSllVaj43yxUqbJSM20DGtmcmlMK01nMpcWtW2SygXTNBXFZVRSokQTrBxAUFHh8/ujh/fXTSQOgvce5vV8PM7j4T3n3MP70w17d87nnOswxhgBAADYUA1PBwAAAKgoigwAALAtigwAALAtigwAALAtigwAALAtigwAALAtigwAALCtWp4OUNVKSkr0/fffq379+nI4HJ6OAwAAysEYoxMnTigsLEw1alz8vEu1LzLff/+9wsPDPR0DAABUQFZWlpo0aXLR7dW+yNSvX1/Sz/8g/P39PZwGAACUR35+vsLDw13/Hb+Yal9kzl9O8vf3p8gAAGAzvzUthMm+AADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtmp5OgAAoPp65plnPB2hTN6eD7+NIgMAwG94+50eno5wUXfftcXTETyKS0sAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2PFpk5syZo+joaPn7+8vf318xMTH65JNPXNtvuOEGORwOt2XUqFEeTAwAALyJRx+I16RJE02bNk0tW7aUMUb//Oc/dfvtt2vHjh1q3769JGnEiBGaMmWK6z116tTxVFwAAOBlPFpk4uLi3F5PnTpVc+bM0ebNm11Fpk6dOgoJCfFEPAAA4OW85isKiouL9c4776iwsFAxMTGu9W+99ZYWLVqkkJAQxcXFaeLEiWWelSkqKlJRUZHrdX5+fpXmBoCqsG/qGk9HKFPb8X08HQGQ5AVFZvfu3YqJidHp06dVr149rVixQu3atZMkDRkyRE2bNlVYWJh27dqlcePGKT09XcuXL7/o8ZKSkjR58uTLFR8AAHiQx4tM69atlZaWpry8PL377rsaNmyYUlJS1K5dO40cOdK1X8eOHRUa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oMC1z6hRo0x4eLhZvXq12bZtm7n66qvNNddc48HUF/rggw/Mxx9/bL7++muTnp5unnrqKVO7dm2zZ88eY4w9xvBLW7ZsMc2aNTPR0dHmsccec623wzgmTZpk2rdvb44ePepafvjhB9d2O4zh+PHjpmnTpmb48OHmq6++Mt98841JTk42Bw8edO1jh9/vY8eOuX0On332mZFk1q5da4yxx2dhjDFTp041jRo1Mh999JHJzMw077zzjqlXr56ZOXOmax87fB533323adeunUlJSTEHDhwwkyZNMv7+/ubw4cPGGO8YA0XmEvTo0cPEx8e7XhcXF5uwsDCTlJTkwVTl9+siU1JSYkJCQsxf//pX17rc3FzjdDrNkiVLPJCwfI4dO2YkmZSUFGPMz5lr165t3nnnHdc++/btM5LMpk2bPBWzXBo0aGDmzZtnuzGcOHHCtGzZ0nz22Wfm+uuvdxUZu4xj0qRJplOnTqVus8sYxo0bZ3r37n3R7Xb9/X7sscdMVFSUKSkpsc1nYYwxt956q3nooYfc1t15551m6NChxhh7fB4nT540NWvWNB999JHb+q5du5rx48d7zRi4tFRBZ86cUWpqqvr16+daV6NGDfXr10+bNm3yYLKKy8zMVHZ2ttuYAgIC1LNnT68eU15eniSpYcOGkqTU1FSdPXvWbRxt2rRRRESE146juLhYS5cuVWFhoWJiYmw3hvj4eN16661ueSV7fRYHDhxQWFiYmjdvrqFDh+rQoUOS7DOGDz74QN27d9ddd92loKAgdenSRa+//rprux1/v8+cOaNFixbpoYceksPhsM1nIUnXXHONVq9era+//lqStHPnTm3YsEGxsbGS7PF5nDt3TsXFxfL19XVb7+fnpw0bNnjNGLz+yb7e6scff1RxcfEFTxgODg7W/v37PZTq0mRnZ0tSqWM6v83blJSUaMyYMerVq5c6dOgg6edx+Pj4XPBlod44jt27dysmJkanT59WvXr1tGLFCrVr105paWm2GcPSpUu1fft2t+vm59nls+jZs6cWLlyo1q1b6+jRo5o8ebKuvfZa7dmzxzZj+OabbzRnzhwlJCToqaee0tatW/Xoo4/Kx8dHw4YNs+Xv98qVK5Wbm6vhw4dLss+/T5L05JNPKj8/X23atFHNmjVVXFysqVOnaujQoZLs8fdt/fr1FRMTo2effVZt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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -1660,7 +1626,7 @@ }, { "cell_type": "code", - "execution_count": 222, + "execution_count": 31, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1672,14 +1638,12 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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MrRgwQLV1tYqJydHkpSdna2EhATl5+dLkh5++GFdeOGF6tOnj44cOaJ58+Zp3759uvXWWwO5DAAA0E4EvNyMGjVKBw8eVF5ensrLy5WamqrCwkLvRcalpaUKCfn3C0xfffWVJkyYoPLycnXr1k1paWl6//33lZycHKglAACAdsRhjDGBDnE6VVdXKyoqSlVVVeratWug4+AEhj41NNARTmjDpA0tmrfu4mGnOEnbDHt3XaAjAECLtebf76D7tBQAAMDJUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtUG4AAICtWCo3M2bM0L59+/ydBQAAoM0slZvXX39dZ599toYPH67ly5ervr7e37kAAAAssVRuSkpKtGnTJp133nmaPHmyYmNjdfvtt2vTpk3+zgcAANAqlq+5GTRokH73u9/piy++0DPPPKP9+/dr6NChGjhwoJ588klVVVW1+FwLFy5UUlKSIiIiNHjwYG3cuLFFx61YsUIOh0PXXHONxVUAAAC7afMFxcYYHT9+XA0NDTLGqFu3bnr66aeVmJiolStX/uDxK1eulMvl0owZM7R582alpKRoxIgRqqysPOlx//rXv3TvvffqoosuausSAACAjVguN8XFxcrNzVVcXJzuvvtuDRo0SNu3b9e6deu0a9cuzZ49W3feeecPnmf+/PmaMGGCcnJylJycrIKCAnXq1EnLli074TGNjY0aM2aMZs6cqd69e1tdAgAAsCFL5WbAgAG68MILtXfvXj3zzDMqKyvT3Llz1adPH++c0aNH6+DBgyc9T0NDg4qLi5WVlfXvQCEhysrKUlFR0QmPe/jhh9W9e3fdcsstP5i1vr5e1dXVPhsAALCvDlYOuv766zV+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tc+8xvqvW53/dPp+3hM5eqzxFCdpm5au45uvvznFSaxr6Rpqv2m/a5Bavo6v6+tOcRLrWrqGY8ePn+IkbdPSddQcqz3FSdqmpev4z7+T25uWrqGuzh5/1zbWtd8/U99fw3ePjTE/eGxAy83pkJ+fr5kzZzYZT0xMDEAa66Keui3QEfwjPyrQCdosakrwr0GSFBX867h/YaAT+MesPwb/cyFJmhXoAG03d+7cQEfwi5ybg//P1IlWcPToUUX9wN9fAS03MTExCg0NVUVFhc94RUWFYmNjmz0mNja2VfOnTZsml8vlfezxeHT48GGdeeaZcjgcbVxB86qrq5WYmKiysjJ17dr1lPyM08EO67DDGiTW0Z7YYQ2SPdZhhzVIrKOljDE6evSo4uPjf3BuQMtNWFiY0tLS5Ha7dc0110j6tny43W7l5uY2e0xmZqbcbrfuuusu79g777yjzMzMZueHh4crPDzcZyw6Otof8X9Q165dg/oP6nfssA47rEFiHe2JHdYg2WMddliDxDpa4odesflOwN+WcrlcGjdunNLT05WRkaEFCxaotrZWOTk5kqTs7GwlJCQoPz9fkjR58mQNGzZMTzzxhK666iqtWLFCH374oRYvXhzIZQAAgHYi4OVm1KhROnjwoPLy8lReXq7U1FQVFhZ6LxouLS1VSMi/P9Q1ZMgQLV++XA8++KAeeOABnXPOOXrttdfUv3//QC0BAAC0IwEvN5KUm5t7wreh1q5d22Tsuuuu03XXXXeKU1kXHh6uGTNmNHk7LNjYYR12WIPEOtoTO6xBssc67LAGiXWcCg7Tks9UAQAABImA36EYAADAnyg3AADAVig3AADAVig3AADAVig3p8DChQuVlJSkiIgIDR48WBs3bgx0pJN69913NXLkSMXHx8vhcOi1117z2W+MUV5enuLi4hQZGamsrCzt2rUrMGFPID8/XxdccIG6dOmi7t2765prrtHOnTt95hw7dkwTJ07UmWeeqc6dO+tXv/pVk7tdB9KiRYs0cOBA7w2wMjMz9be//c27v73nP5G5c+fK4XD43HgzGNby29/+Vg6Hw2fr27evd38wrEGSPv/8c910000688wzFRkZqQEDBujDDz/07g+G3++kpKQmz4XD4dDEiRMlBcdz0djYqIceeki9evVSZGSkzj77bD3yyCM+35MUDM+F9O3XH9x1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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -1716,7 +1680,7 @@ }, { "cell_type": "code", - "execution_count": 223, + "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1754,10 +1718,6 @@ " .dataframe td {\n", " padding-bottom: 0;\n", " }\n", - "\n", - " .dataframe td {\n", - " line-height: 95%;\n", - " }\n", "\n", "
\n", "shape: (4, 2)\n", @@ -1833,7 +1793,7 @@ "└───────────┴───────────┘" ] }, - "execution_count": 223, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1851,6 +1811,38 @@ "ret.sort(pl.col(\"change\"), reverse=True).collect().fetch()" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can visualize this as a pie chart using the `pieplot` method and pasing it the name of the columns that should be used as `labels` and the name of the column that should be used for the pie chart `parts` or slices." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ret.pieplot(\n", + " parts=\"change\",\n", + " labels=\"A1Cresult\",\n", + " title=\"percentage of changes in medication per A1Cresult group\",\n", + ")" + ] + }, { "cell_type": "markdown", "metadata": { @@ -1864,7 +1856,7 @@ }, { "cell_type": "code", - "execution_count": 224, + "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1902,10 +1894,6 @@ " .dataframe td {\n", " padding-bottom: 0;\n", " }\n", - "\n", - " .dataframe td {\n", - " line-height: 95%;\n", - " }\n", "\n", "
\n", "shape: (4, 2)\n", @@ -1981,7 +1969,7 @@ "└───────────┴───────────────────────┘" ] }, - "execution_count": 224, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2002,7 +1990,31 @@ }, { "cell_type": "code", - "execution_count": 225, + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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rbh79265fxxKpUItHrGxsejbty+ef/55HDt2DN988w2GDRuGpk2bAsh/EhctWoRZs2bpTiV1cHBAbGwsduzYgXHjxmHatGklriM8PBwbNmzA66+/jhMnTqBjx4549OgR9u7diwkTJqBfv37o3Lkzxo8fj3feeQdRUVF47rnnYGNjgytXrmDLli348MMPMWjQoHJtW7NmzSCXy7FkyRI8fPgQSqUS3bp1Q7t27eDi4oIRI0ZgypQpkMlk+PrrrwsVVgqFApGRkZg8eTK6deuGsLAwxMXFYd26dfDz89Orul9++WVs3rwZr7zyCvbv34/27dtDo9Hg0qVL2Lx5M3755Re0bNmyyJw2NjZYsmQJRo4cic6dO2Po0KG602nr169fZJNradLS0lCnTh0MGjQITZs2hb29Pfbu3YuTJ09i+fLl5V7euHHjsHr1akREROCPP/5A/fr1sXXrVhw5cgQrVqwoU8c1Pz8/ODs747PPPoODgwPs7OzwzDPPlHgMvEWLFli1ahUWLVqEBg0awN3dHd26dcObb76J//znP+jTp4/uNOpHjx7h3Llz2Lp1K+Li4gr10ZDau+++i/379+OZZ57B2LFjERgYiKSkJJw+fRp79+7VfVH36dMH27dvR//+/RESEoLY2Fh89tlnCAwM1Nvhh4aGon379pg5cybi4uIQGBiI7du3F9rpG8Nvv/2GSZMmYfDgwWjYsCHy8vLw9ddf6wosAFiwYAEOHjyIkJAQeHt7Iz4+Hp9++inq1Kmja+EyxPvqcZcvX0b37t0RFhaGwMBAWFtbY8eOHbh//z5efPHFUh+vUqmwe/dujBgxAs888wx+/vln/PTTT/j3v/+tO4RijH0VkP+DRi6XF/tDo2/fvpg9eza+++47vP766wCAr7/+GtevX9d18D148KCutenll1/W/VIfMmQIzp07h8WLF+PMmTMYOnQovL29kZiYiN27d2Pfvn2ljlxqZWWFL774Ar169UKTJk0wcuRI1K5dG7dv38b+/fvh6OiIH374ocz7njFjxmDr1q14/vnnERYWhqtXr+Kbb74pcYiAAi1atAAATJkyBT179oRcLi/29fXw8MDUqVOxfPly3Xfd2bNn8fPPP6NmzZplaj1xc3PDrFmzMH/+fDz//PPo27cvoqOj8emnn6JVq1Z6nfPLu12urq7o0KEDRo4cifv372PF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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ret.pieplot(\n", + " parts=\"short-term readmitted\",\n", + " labels=\"A1Cresult\",\n", + " title=\"percentage of short-term readmissons per A1Cresult group\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 36, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2040,10 +2052,6 @@ " .dataframe td {\n", " padding-bottom: 0;\n", " }\n", - "\n", - " .dataframe td {\n", - " line-height: 95%;\n", - " }\n", "\n", "
\n", "shape: (4, 2)\n", @@ -2119,7 +2127,7 @@ "└───────────┴──────────────────────┘" ] }, - "execution_count": 225, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -2139,6 +2147,30 @@ "ret.sort(pl.col(\"long-term readmitted\"), reverse=True).collect().fetch()" ] }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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PDyEs7Oz/vni7B+Lu125r/N3330nJk6cKLy8vISdnZ3o0qVLvu/P8qJULRqRkZGoVq0aPvzwQxw8eBCff/457t+/j1WrVunnmT17Nt5//31ERkZi6NChuH37Nv773/+iRYsWOH78uMHR9d27d9GxY0e88sor6N+/P7y8vKDVatG5c2fs3LkTr7zyCsaMGYOUlBRs374dJ0+eRGBgIABgxIgRWLFiBQYNGoTRo0fj0qVLWLhwIY4fP44DBw4YVOjx8fHo2bMnhgwZgoEDB2LZsmWIiopC/fr1UatWLbRo0QKjR4/G559/jv/7v/9DSEgIAOj/XbFiBezt7fH222/D3t4eu3btwpQpU5CcnIyPPvpIv55FixZh1KhRaN68Od566y0kJCSge/fucHFxQeXKlfXz6XQ6dO3aFfv378fw4cMREhKC2NhYfPLJJzh37hw2bdpU5PuQu90NGzbEhx9+iFu3buGzzz7DgQMH9K/xpEmTULNmTSxZsgQzZsyAv7+//rUrrmnTpmH69Olo164dXn/9dcTFxWHRokU4cuRIvtf4/v376NChA3r06IHIyEisW7cOEyZMQFhYGDp27Agg50igTZs2uHHjBsaMGQNvb2+sXbsWu3fvLlaeTz/9FG+++Sbs7e0xadIkAICXlxeAnNawli1b4tq1axgxYgSqVq2KP/74AxMnTsSNGzfw6aefGixr+fLlSE9Px/Dhw2FjYwNXV1f9c71790ZISAjmzJmDX3/9FbNmzYKrqysWL16MNm3aYO7cuYiOjsa4cePQsGHDYp0+2LVrF3744QeMGjUK7u7uqFatGm7duoXGjRtDkiSMGjUKHh4e+O233zBkyBAkJydj7NixAHKazZcuXYo+ffpg2LBhSElJwTfffIPw8HAcPnwYdevWBZBzdNytWzfs378fr732GkJCQrBx40YMHDiwwExarRYdO3ZEixYtMG/ePERHR2PUqFHQaDSYNGkS+vXrhx49euCrr77CgAED8MILL8Df37/AZWVmZiI8PBwZGRl488034e3tjWvXruGXX35BUlISnJyccOrUKXTu3Bm1a9fGjBkzYGNjg/j4eBw4cEC/nLS0NLRq1Qrx8fEYNWoU/P398eOPPyIqKgpJSUkYM2aMwXrXrl2LlJQUjBgxApIkYd68eejRowcuXryo/3y+/PLLOHXqFN58801Uq1YN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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ret.pieplot(\n", + " parts=\"long-term readmitted\",\n", + " labels=\"A1Cresult\",\n", + " title=\"percentage of long-term readmissons per A1Cresult group\",\n", + ")" + ] + }, { "cell_type": "markdown", "metadata": { @@ -2170,7 +2202,7 @@ }, { "cell_type": "code", - "execution_count": 226, + "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2193,7 +2225,7 @@ " 'insulin']" ] }, - "execution_count": 226, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -2250,7 +2282,7 @@ }, { "cell_type": "code", - "execution_count": 227, + "execution_count": 39, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2272,7 +2304,7 @@ " 'insulin']" ] }, - "execution_count": 227, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -2304,7 +2336,7 @@ }, { "cell_type": "code", - "execution_count": 228, + "execution_count": 40, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2342,10 +2374,6 @@ " .dataframe td {\n", " padding-bottom: 0;\n", " }\n", - "\n", - " .dataframe td {\n", - " line-height: 95%;\n", - " }\n", "\n", "
\n", "shape: (9, 2)\n", @@ -2471,7 +2499,7 @@ "└───────────────┴──────────────────────┘" ] }, - "execution_count": 228, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -2523,7 +2551,7 @@ }, { "cell_type": "code", - "execution_count": 229, + "execution_count": 41, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2561,10 +2589,6 @@ " .dataframe td {\n", " padding-bottom: 0;\n", " }\n", - "\n", - " .dataframe td {\n", - " line-height: 95%;\n", - " }\n", "\n", "
\n", "shape: (8, 2)\n", @@ -2680,7 +2704,7 @@ "└───────────────┴──────────────────────┘" ] }, - "execution_count": 229, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -2759,7 +2783,7 @@ }, { "cell_type": "code", - "execution_count": 230, + "execution_count": 42, "metadata": { "id": "xROO5Oxzvev-" }, From a012ceac30965b58f07c8c787565ed90ac910a66 Mon Sep 17 00:00:00 2001 From: lyie28 Date: Thu, 23 Feb 2023 11:58:29 +0100 Subject: [PATCH 15/22] cut down p1 --- .../how-to-guides/diabetes_exploration.ipynb | 505 +++--------------- 1 file changed, 72 insertions(+), 433 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index 2524bee6..a0788359 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "id": "hK-HDaMI_G1j" }, @@ -214,7 +214,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "801444d3-0742-43e2-a199-a454cce00928\n" + "4ab1725e-7ecc-4750-b004-1df14a191cb9\n" ] } ], @@ -347,7 +347,7 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=801444d3-0742-43e2-a199-a454cce00928)" + "FetchableLazyFrame(identifier=4ab1725e-7ecc-4750-b004-1df14a191cb9)" ] }, "execution_count": 8, @@ -452,6 +452,10 @@ " \"number_inpatient\",\n", " \"number_diagnoses\",\n", " \"diabetesMed\",\n", + " \"diag_1\",\n", + " \"diag_2\",\n", + " \"diag_3\",\n", + " \"max_glu_serum\",\n", "]\n", "\n", "# replace rdf with our updated RemoteLazyFrame with to_drop columns deleted\n", @@ -599,7 +603,7 @@ " }\n", "\n", "
\n", - "shape: (7, 2)\n", + "shape: (3, 2)\n", "\n", "\n", "\n", "\n", "\n", - "\n", - "\n", - "\n", - "\n", "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", "\n", "
\n", @@ -621,14 +625,6 @@ "
\n", - ""max_glu_serum"\n", - "\n", - "94.746772\n", - "
\n", ""A1Cresult"\n", "\n", @@ -651,55 +647,23 @@ "2.233555\n", "
\n", - ""diag_3"\n", - "\n", - "1.398306\n", - "
\n", - ""diag_2"\n", - "\n", - "0.351787\n", - "
\n", - ""diag_1"\n", - "\n", - "0.020636\n", - "
\n", "" ], "text/plain": [ - "shape: (7, 2)\n", - "┌───────────────┬─────────────────┐\n", - "│ column name ┆ null values (%) │\n", - "│ --- ┆ --- │\n", - "│ str ┆ f64 │\n", - "╞═══════════════╪═════════════════╡\n", - "│ max_glu_serum ┆ 94.746772 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ A1Cresult ┆ 83.277322 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ readmitted ┆ 53.911916 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ race ┆ 2.233555 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ diag_3 ┆ 1.398306 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ diag_2 ┆ 0.351787 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ diag_1 ┆ 0.020636 │\n", - "└───────────────┴─────────────────┘" + "shape: (3, 2)\n", + "┌─────────────┬─────────────────┐\n", + "│ column name ┆ null values (%) │\n", + "│ --- ┆ --- │\n", + "│ str ┆ f64 │\n", + "╞═════════════╪═════════════════╡\n", + "│ A1Cresult ┆ 83.277322 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ readmitted ┆ 53.911916 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ race ┆ 2.233555 │\n", + "└─────────────┴─────────────────┘" ] }, "execution_count": 13, @@ -741,318 +705,7 @@ "\n", "Grouping data is going to be the largest and most crucial task in this data cleaning job. \n", "\n", - "This diabetes dataset has a lot of of wide-ranging numerical values. They need to be grouped so that our data analysts can gain meaningul insights from them.\n", - "\n", - "#### ICD-9 medical codes\n", - "\n", - "Let's start with the diagnoses columns: `diag_1`, `diag_2` and `diag_3`.\n", - "\n", - "They contain the primary, secondary and terciary diagnoses given to patients. These diagnoses are given using [**ICD-9** medical codes](https://en.wikipedia.org/wiki/List_of_ICD-9_codes) which are three digit codes ranging from **1** to **1000**, as well as **E800–E999** codes and **V01–V82** code.\n", - "\n", - "By grabbing all the unique values in the `diag_1` column and counting them, we can see that we have over 700 different values in this column!" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 121 - }, - "id": "7pVHpmLWj6_w", - "outputId": "bdc449f2-0e05-4595-c1fd-8935d6de4722" - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "shape: (1, 1)\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "diag_1\n", - "
\n", - "u32\n", - "
\n", - "717\n", - "
\n", - "
" - ], - "text/plain": [ - "shape: (1, 1)\n", - "┌────────┐\n", - "│ diag_1 │\n", - "│ --- │\n", - "│ u32 │\n", - "╞════════╡\n", - "│ 717 │\n", - "└────────┘" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tmp = rdf.select(\"diag_1\").unique()\n", - "tmp.select(pl.col(\"diag_1\").count()).collect().fetch()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "cPsmfkBpkPCv" - }, - "source": [ - "Standard groupings of these codes have already been designed. So what we want to do is replace the hundreds of unique codes we have in our our diagnoses columns with these groupings.\n", - "\n", - "To do this, we will again use Polars `when().then().otherwise()` functions to perform a find and replace operation. We will use `when()` to check if the codes in each cell are either **E** or **V** codes or fall within a certain numerical range.\n", - "\n", - "The problem is that these diagnoses columns are currently string columns because **E** and **V** codes are not entirely numerical. Until it's solved, we cannot perform numerical comparisons on these cells and we cannot convert the column type to a numerical one.\n", - "\n", - "Here's how we'll handle this:\n", - "\n", - "1) We will find and replace all **E** codes with a `-1` value and **V** codes with a `-2` value.\n", - "\n", - "2) We will `select()` our columns and `cast()` all values in these columns to float values.\n", - "\n", - "3) We will perform the find and replace operation to group all **ICD-9** codes into their associated group - of which there are 17, plus **E** codes and **V** codes." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "id": "xPNFpZ7lW8qR" - }, - "outputs": [], - "source": [ - "# iterate over the three diagnoses columns\n", - "for col in [\"diag_1\", \"diag_2\", \"diag_3\"]:\n", - " # step one: replace troublesome E and V codes with temporary -1 and -2 codes\n", - " rdf = rdf.with_columns(\n", - " [\n", - " pl.when(\n", - " pl.col(col).str.starts_with(\"E\")\n", - " ) # use Polars str.starts_with method to identify E codes\n", - " .then(\"-1\")\n", - " .when(pl.col(col).str.starts_with(\"V\"))\n", - " .then(\"-2\")\n", - " .otherwise(pl.col(col))\n", - " .keep_name()\n", - " ]\n", - " )\n", - "\n", - " # step two: cast all values in column to float values\n", - " rdf = rdf.with_columns([pl.col(col).cast(pl.Float64)])\n", - "\n", - " # step three: replace all codes with their corresponding group\n", - " rdf = rdf.with_columns(\n", - " [\n", - " pl.when(pl.col(col) >= 800)\n", - " .then(\"injury and poisoning\")\n", - " .when(pl.col(col) >= 780)\n", - " .then(\"symptoms, signs & ill-defined\")\n", - " .when(pl.col(col) >= 760)\n", - " .then(\"perinatal\")\n", - " .when(pl.col(col) >= 740)\n", - " .then(\"congenital anomalies\")\n", - " .when(pl.col(col) >= 710)\n", - " .then(\"musculoskeletal & connective tissue\")\n", - " .when(pl.col(col) >= 680)\n", - " .then(\"skin\")\n", - " .when(pl.col(col) >= 630)\n", - " .then(\"pregnancy, childbirth and peurperium\")\n", - " .when(pl.col(col) >= 580)\n", - " .then(\"genitourinary\")\n", - " .when(pl.col(col) >= 520)\n", - " .then(\"digestive\")\n", - " .when(pl.col(col) >= 460)\n", - " .then(\"respiratory\")\n", - " .when(pl.col(col) >= 390)\n", - " .then(\"circulatory\")\n", - " .when(pl.col(col) >= 320)\n", - " .then(\"nervous system and sense organs\")\n", - " .when(pl.col(col) >= 290)\n", - " .then(\"mental disorders\")\n", - " .when(pl.col(col) >= 280)\n", - " .then(\"blood and blood-forming organs\")\n", - " .when(pl.col(col) >= 240)\n", - " .then(\"neoplasms\")\n", - " .when(pl.col(col) >= 140)\n", - " .then(\"endocrine, nutritional, metabolic and immunity\")\n", - " .when(pl.col(col) >= 1)\n", - " .then(\"infectious and parasitic\")\n", - " .when(pl.col(col) == -1)\n", - " .then(\"E code (injury)\")\n", - " .when(pl.col(col) == -2)\n", - " .then(\"V code (other)\")\n", - " .otherwise(\n", - " None\n", - " ) # otherwise (null values) keep original value from the column\n", - " .alias(\n", - " col\n", - " ) # give resulting column same name as previously- therefore replacing old columns\n", - " ]\n", - " )" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "P1MquUrNlXDO" - }, - "source": [ - "By performing the same query as previously to count `diag_1`'s unique values, we see there is now a much more manageable 19 labels in our data column. This will be similar for the `diag_2` and `diag_3` columns." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 121 - }, - "id": "YfC9CmWWdu0n", - "outputId": "04223b57-76a5-4108-99ef-20eb5862b907" - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "shape: (1, 1)\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "diag_1\n", - "
\n", - "u32\n", - "
\n", - "19\n", - "
\n", - "
" - ], - "text/plain": [ - "shape: (1, 1)\n", - "┌────────┐\n", - "│ diag_1 │\n", - "│ --- │\n", - "│ u32 │\n", - "╞════════╡\n", - "│ 19 │\n", - "└────────┘" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tmp = rdf.select(\"diag_1\").unique()\n", - "tmp.select(pl.col(\"diag_1\").count()).collect().fetch()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "pKAp3OvKcwuX" - }, - "source": [ - "We notice in our project brief that there is only one **E** code value in the `diag_1` column, so we will remove this value from our dataset before continuing by using the `filter` function." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "id": "yIRH-_QNdEwL" - }, - "outputs": [], - "source": [ - "rdf = rdf.filter(pl.col(\"diag_1\") != \"E code (injury)\")" + "This diabetes dataset has a lot of of wide-ranging numerical values. They need to be grouped so that our data analysts can gain meaningul insights from them." ] }, { @@ -1064,24 +717,24 @@ "source": [ "#### A1C, max glucose levels and readmittance\n", "\n", - "We want to group together data in another three other columns using the same `.then().when().otherwise()` methods.\n", + "We want to group together data in another three other columns using Polars `.then().when().otherwise()` methods to replace values meeting certain criteria with a new value.\n", "\n", - "The first two are **`A1Cresult`**, which contains patients' **HbA1c** level, and `max_glu_serum`, which contains their blood glucose level. We want to group these into `very high`, `high`and `normal` groups based on levels defined in our project brief.\n", + "The first two are **`A1Cresult`**, which contains patients' **HbA1c** level. We want to group these into `very high`, `high`and `normal` groups based on levels defined in our project brief.\n", "\n", "These columns are both currently string columns, so we will also need to convert them to float values in order to perform numerical comparisons on them." ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 14, "metadata": { "id": "FgyrnPAlsZ0u" }, "outputs": [], "source": [ - "# cast `max_glu_serum` and `A1Cresult` columns to float values\n", + "# cast `A1Cresult` columns to float values\n", "rdf = rdf.with_columns(\n", - " [pl.col(\"max_glu_serum\").cast(pl.Float64), pl.col(\"A1Cresult\").cast(pl.Float64)]\n", + " [pl.col(\"A1Cresult\").cast(pl.Float64)]\n", ")\n", "\n", "# group values in `A1Cresult` column\n", @@ -1096,20 +749,6 @@ " .otherwise(pl.col(\"A1Cresult\"))\n", " .keep_name()\n", " ]\n", - ")\n", - "\n", - "# group values in `max_glu_serum` column\n", - "rdf = rdf.with_columns(\n", - " [\n", - " pl.when(pl.col(\"max_glu_serum\") >= 300)\n", - " .then(\"very high\")\n", - " .when(pl.col(\"max_glu_serum\") >= 200)\n", - " .then(\"high\")\n", - " .when(pl.col(\"max_glu_serum\") >= 0)\n", - " .then(\"normal\")\n", - " .otherwise(pl.col(\"max_glu_serum\"))\n", - " .keep_name()\n", - " ]\n", ")" ] }, @@ -1129,7 +768,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 15, "metadata": { "id": "9cca9DhSw6We" }, @@ -1174,7 +813,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 16, "metadata": { "id": "2EC3smnWc06Q" }, @@ -1215,7 +854,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 17, "metadata": { "id": "B2JGdBhmteAz" }, @@ -1249,7 +888,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1264,7 +903,7 @@ "[polars.datatypes.Utf8]" ] }, - "execution_count": 22, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1277,7 +916,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1292,7 +931,7 @@ "[polars.datatypes.Boolean]" ] }, - "execution_count": 23, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1325,7 +964,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1338,10 +977,10 @@ { "data": { "text/plain": [ - "'538cbcf3-b100-42fb-a1ed-48a07c7085c7'" + "'6fb86802-1702-4f4f-8466-ef5db561ee30'" ] }, - "execution_count": 24, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1363,7 +1002,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 21, "metadata": { "id": "qoiADM1W6OC_" }, @@ -1385,7 +1024,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1397,10 +1036,10 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=538cbcf3-b100-42fb-a1ed-48a07c7085c7)" + "FetchableLazyFrame(identifier=6fb86802-1702-4f4f-8466-ef5db561ee30)" ] }, - "execution_count": 26, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1428,7 +1067,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1466,7 +1105,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1507,7 +1146,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1551,7 +1190,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1626,7 +1265,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1680,7 +1319,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1761,7 +1400,7 @@ "null\n", "\n", "\n", - "44.272954\n", + "44.273611\n", "\n", "\n", "\n", @@ -1787,13 +1426,13 @@ "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤\n", "│ high ┆ 50.738007 │\n", "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ null ┆ 44.272954 │\n", + "│ null ┆ 44.273611 │\n", "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┤\n", "│ normal ┆ 44.226143 │\n", "└───────────┴───────────┘" ] }, - "execution_count": 32, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1821,12 +1460,12 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 29, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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J06ePKk139atW0VwcLAwNzcXISEhtRpoq7ptpKCgQEyfPl24u7sLCwsL0aVLF3H06NEK18POnTs1AxmhmoG2srOzxUsvvSQ8PDyEqampCAwMrHKgrXt5e3tXO9Bc2frevHmzmD17tnBxcREWFhZi4MCB4sqVK+Xmr24bE+K/fefNmzerXLYQQrzwwgsCQJXjOcybN09raIDKBgkEKh5YLykpSbz00kuiefPmQqVSCUtLS9GuXTuxePFirf1OZduzEHc+i9mzZ4uAgABhZmYmmjRpIjp37iyWLVumGYPou+++Ew8//LBwcXERZmZmwsvLSzzzzDPixo0bWm399ddf4oEHHtDMs3z58hpdpipE5dtPZfbv3y/atGmjGRxs7dq1Yvr06UKlUmnNV9k2JMSd8TT69esnrK2thaWlpejZs2eF4wvV9H3dPdBWWFiYMDc3F0FBQeX+5hsaSYia/5ycN28e5s+fj5s3b2odR6XqqdVqODs7Y+jQoRUeEqH7s2LFCrz00ku4du0amjZtKnccasB+++039OzZE1u2bKl1Dyg1TEOGDMHZs2crPC9JH3x8fNCqVSv8+OOPsiy/vhjkvUgauoKCgnKHATZs2ID09HTealgH7r0XQkFBAdasWYPAwEAWF0RUpXv3H3Fxcfj555+5b64HvJtqPfjzzz/x0ksvYfjw4XBycsKpU6fw+eefo1WrVhg+fLjc8Rq8oUOHwsvLC+Hh4cjMzMSmTZtw4cKFSi9XJiIq4+fnh3HjxsHPzw9XrlzBJ598AjMzs0ovuaW6Y4FRD3x8fODp6YkPP/wQ6enpcHR0xJgxY/D222/X+Npzqly/fv2wdu1aREVFobS0FCEhIfj6668xYsQIuaMRkYHr378/Nm/ejOTkZJibm6NTp05YsmRJpQNDUt3V6hwMIiIioprgORhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURE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OXmzvnjaemJq26mY2nYqEjITcPj6YRy+fhgnU06isLRQ7nh6c93TAn7HajCjUgmLNuGw6dkT1j17wdzPt96zEZH+8V4kZFCioqIwfvx4ZGZmwsLCQu449yW/JB8nkk9oCo7E7ES5I9WrURnBGPJJxZeSKKysYNWlC6x79YR19+4wkXk0VyKqfywwSFYbNmyAn58fmjZtipiYGDz//PPo0aMHNm3aJHc0nbuSdQWHrx/GoeuHcDK58fVuuJfa4IOltwEAkoUFLEJDYdGmDSw7dIBVxw6QzMxkTkhE+sQCg2S1dOlSrFq1CsnJyXB3d8eQIUOwePFiWFpayh2tXhWXFuNi5kXEpsci9nYs/k3/F7G3YxvklSlKSQkfWx8EOwXjpRutYRPcCqrgIN5kjMjIscAgMiApuSn49/a/WkXHlawrKBWlckeDmcIMrlaucLV0hZetF4IcgxDsGIwWji1gYdKwD2cRke6xwCAycAUlBbiSdQXpBelIL0jH7YLbmv+/+/HtgtvILs6u0zJMFaZwtXSFq5Ur3Kzc4Gbpduf/y/5r5QZHlaOO3xkRNWYsMIgakeLSYqQXpCO3OBcKSQGlpIRSodT6f6VU/jHvJEtEusYCg4iIiHSOt4skIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOf+D8FOe3PL7KalAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -1856,7 +1495,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 30, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1921,7 +1560,7 @@ "null\n", "\n", "\n", - "11.436393\n", + "11.436258\n", "\n", "\n", "\n", @@ -1959,7 +1598,7 @@ "│ --- ┆ --- │\n", "│ str ┆ f64 │\n", "╞═══════════╪═══════════════════════╡\n", - "│ null ┆ 11.436393 │\n", + "│ null ┆ 11.436258 │\n", "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", "│ high ┆ 10.042172 │\n", "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", @@ -1969,7 +1608,7 @@ "└───────────┴───────────────────────┘" ] }, - "execution_count": 34, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1990,12 +1629,12 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 31, "metadata": {}, "outputs": [ { "data": { - "image/png": "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rbh79265fxxKpUItHrGxsejbty+ef/55HDt2DN988w2GDRuGpk2bAsh/EhctWoRZs2bpTiV1cHBAbGwsduzYgXHjxmHatGklriM8PBwbNmzA66+/jhMnTqBjx4549OgR9u7diwkTJqBfv37o3Lkzxo8fj3feeQdRUVF47rnnYGNjgytXrmDLli348MMPMWjQoHJtW7NmzSCXy7FkyRI8fPgQSqUS3bp1Q7t27eDi4oIRI0ZgypQpkMlk+PrrrwsVVgqFApGRkZg8eTK6deuGsLAwxMXFYd26dfDz89Orul9++WVs3rwZr7zyCvbv34/27dtDo9Hg0qVL2Lx5M3755Re0bNmyyJw2NjZYsmQJRo4cic6dO2Po0KG602nr169fZJNradLS0lCnTh0MGjQITZs2hb29Pfbu3YuTJ09i+fLl5V7euHHjsHr1akREROCPP/5A/fr1sXXrVhw5cgQrVqwoU8c1Pz8/ODs747PPPoODgwPs7OzwzDPPlHgMvEWLFli1ahUWLVqEBg0awN3dHd26dcObb76J//znP+jTp4/uNOpHjx7h3Llz2Lp1K+Li4gr10ZDau+++i/379+OZZ57B2LFjERgYiKSkJJw+fRp79+7VfVH36dMH27dvR//+/RESEoLY2Fh89tlnCAwM1Nvhh4aGon379pg5cybi4uIQGBiI7du3F9rpG8Nvv/2GSZMmYfDgwWjYsCHy8vLw9ddf6wosAFiwYAEOHjyIkJAQeHt7Iz4+Hp9++inq1Kmja+EyxPvqcZcvX0b37t0RFhaGwMBAWFtbY8eOHbh//z5efPHFUh+vUqmwe/dujBgxAs888wx+/vln/PTTT/j3v/+tO4RijH0VkP+DRi6XF/tDo2/fvpg9eza+++47vP766wCAr7/+GtevX9d18D148KCutenll1/W/VIfMmQIzp07h8WLF+PMmTMYOnQovL29kZiYiN27d2Pfvn2ljlxqZWWFL774Ar169UKTJk0wcuRI1K5dG7dv38b+/fvh6OiIH374ocz7njFjxmDr1q14/vnnERYWhqtXr+Kbb74pcYiAAi1atAAATJkyBT179oRcLi/29fXw8MDUqVOxfPly3Xfd2bNn8fPPP6NmzZplaj1xc3PDrFmzMH/+fDz//PPo27cvoqOj8emnn6JVq1Z6nfPLu12urq7o0KEDRo4cifv372PF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", + "image/png": "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", "text/plain": [ "
" ] @@ -2014,7 +1653,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2087,7 +1726,7 @@ "null\n", "\n", "\n", - "35.085608\n", + "35.085194\n", "\n", "\n", "\n", @@ -2119,7 +1758,7 @@ "╞═══════════╪══════════════════════╡\n", "│ very high ┆ 35.271977 │\n", "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ null ┆ 35.085608 │\n", + "│ null ┆ 35.085194 │\n", "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", "│ high ┆ 34.106484 │\n", "├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", @@ -2127,7 +1766,7 @@ "└───────────┴──────────────────────┘" ] }, - "execution_count": 36, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -2149,12 +1788,12 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 33, "metadata": {}, "outputs": [ { "data": { - "image/png": "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PDyEs7Oz/vni7B+Lu125r/N3330nJk6cKLy8vISdnZ3o0qVLvu/P8qJULRqRkZGoVq0aPvzwQxw8eBCff/457t+/j1WrVunnmT17Nt5//31ERkZi6NChuH37Nv773/+iRYsWOH78uMHR9d27d9GxY0e88sor6N+/P7y8vKDVatG5c2fs3LkTr7zyCsaMGYOUlBRs374dJ0+eRGBgIABgxIgRWLFiBQYNGoTRo0fj0qVLWLhwIY4fP44DBw4YVOjx8fHo2bMnhgwZgoEDB2LZsmWIiopC/fr1UatWLbRo0QKjR4/G559/jv/7v/9DSEgIAOj/XbFiBezt7fH222/D3t4eu3btwpQpU5CcnIyPPvpIv55FixZh1KhRaN68Od566y0kJCSge/fucHFxQeXKlfXz6XQ6dO3aFfv378fw4cMREhKC2NhYfPLJJzh37hw2bdpU5PuQu90NGzbEhx9+iFu3buGzzz7DgQMH9K/xpEmTULNmTSxZsgQzZsyAv7+//rUrrmnTpmH69Olo164dXn/9dcTFxWHRokU4cuRIvtf4/v376NChA3r06IHIyEisW7cOEyZMQFhYGDp27Agg50igTZs2uHHjBsaMGQNvb2+sXbsWu3fvLlaeTz/9FG+++Sbs7e0xadIkAICXlxeAnNawli1b4tq1axgxYgSqVq2KP/74AxMnTsSNGzfw6aefGixr+fLlSE9Px/Dhw2FjYwNXV1f9c71790ZISAjmzJmDX3/9FbNmzYKrqysWL16MNm3aYO7cuYiOjsa4cePQsGHDYp0+2LVrF3744QeMGjUK7u7uqFatGm7duoXGjRtDkiSMGjUKHh4e+O233zBkyBAkJydj7NixAHKazZcuXYo+ffpg2LBhSElJwTfffIPw8HAcPnwYdevWBZBzdNytWzfs378fr732GkJCQrBx40YMHDiwwExarRYdO3ZEixYtMG/ePERHR2PUqFHQaDSYNGkS+vXrhx49euCrr77CgAED8MILL8Df37/AZWVmZiI8PBwZGRl488034e3tjWvXruGXX35BUlISnJyccOrUKXTu3Bm1a9fGjBkzYGNjg/j4eBw4cEC/nLS0NLRq1Qrx8fEYNWoU/P398eOPPyIqKgpJSUkYM2aMwXrXrl2LlJQUjBgxApIkYd68eejRowcuXryo/3y+/PLLOHXqFN58801Uq1YNiYmJ2L59O65cuYJq1aoV+b5ptVp06NABjRs3xrx587BlyxZMnToV2dnZmDFjhn6+kuyP4uLi0KdPH4wYMQLDhg1DzZo1i8xw/fp17N69GytXrgQA9OnTB5988gkWLlxYqla48+fP4+zZsxg8eDAcHByK/XszZ86ESqXCuHHjkJGRAZVKhV27dqFjx46oX78+pk6dCisrKyxfvhxt2rTBvn370KhRIwDAa6+9hnXr1mHUqFEIDQ3F3bt3sX//fpw5cwb16tUr8TY8acSIEbh+/Tq2b9+O1atXF+t3Jk6ciHnz5qFLly4IDw/HiRMnEB4ejvT09ALnf+ONN+Dh4YEpU6bg0aNHAEq2fyyJ2bNn6/viJCYm4tNPP0W7du0QExPz1JYvs1OSqiT3SK9r164G09944w0BQJw4cUIIkXO0qlAoxOzZsw3mi42NFdbW1gbTc4+4v/rqK4N5ly1bJgCIjz/+OF+O3KOIffv2CQD5jrJyj4yfnJ57FLx37179tMTERGFjYyPeeecd/bQff/yx0KPq1NTUfNNGjBgh7Ozs9C0QGRkZws3NTTRs2FBkZWXp51uxYkW+I+/Vq1cLKysrsW/fPoNlfvXVVwKAOHDgQL715crMzBSenp7iP//5j0Fr0i+//CIAiClTpuin5VbjR44cKXR5eefNPcpLTEwUKpVKvPjiiwYtAgsXLhQAxLJly/TTct/LVatW6adlZGQIb29v8fLLL+unLViwQAAQmzZt0k9LS0sTwcHBxWrREEKIWrVq5WsdEkKImTNnCo1GI86dO2cw/b333hMKhUJ/RJB7NOTo6CgSExMN5s39nA8fPlw/LTs7W1SuXFlIkiTmzJmjn37//n1ha2tbZCtRLgDCyspKnDp1ymD6kCFDhI+Pj7hz547B9FdeeUU4OTnpP3fZ2dkiIyPDYJ779+8LLy8vMXjwYP20TZs2CQBi3rx5BvmbN29eYIsGAPHBBx/k2yZJksR3332nn3727Nl8R8d5WzRyW01+/PHHQl+HTz75RAAQt2/fLnSeTz/9VAAQa9as0U/LzMwUL7zwgrC3t9cfgee+j25ubgatBps3bxYAxM8//6zfJjxu+Sip3NfozTff1E/T6XQiIiJCqFQq/XaUZn+0ZcuWYueYP3++sLW11W/7uXPnBAB9q1hBimrRyH2NitOSIsS/73VAQIDBvlCn04mgoCARHh5u0MKTmpoq/P39Rfv27fXTnJycxMiRI4tcT2lbNIQQYuTIkU9txch18+ZNYW1tLbp3724wfdq0aflafnP3i82aNTNowS7J/rGkLRq+vr4GLU0//PCDACA+++yzYm2fOSnVibWRI0caPH7zzTcB5HTEAYANGzZAp9MhMjISd+7c0f94e3sjKCgo35GrjY0NBg0aZDBt/fr1cHd31y/7SZIkAQB+/PFHODk5oX379gbrqV+/Puzt7fOtJzQ0FM2bN9c/9vDwQM2aNXHx4sVibfeTVWRKSgru3LmD5s2bIzU1FWfPngUAHD16FHfv3sWwYcNgbf1vg1G/fv3g4uJisLwff/wRISEhCA4ONsjfpk0bACjyCP/o0aNITEzEG2+8YXCOPCIiAsHBwfj111+LtU1Ps2PHDmRmZmLs2LEG52GHDRsGR0fHfOuxt7dH//799Y9VKhUaNWpk8Bpv2bIFvr6+6Nq1q36aWq3GsGHDnjnvjz/+iObNm8PFxcXgNW3Xrh20Wi327t1rMP/LL79c6DnsoUOH6v9foVCgQYMGEEJgyJAh+unOzs4l+gy1bNkSoaGh+sdCCKxfvx5dunSBEMIgc3h4OB48eIBjx47pM+Qeuep0Oty7dw/Z2dlo0KCBfh4g5+/Q2toar7/+ukH+gv6WCtrW3G3SaDSIjIzUT69ZsyacnZ2L3FYnJycAwNatW5GamlrgPLmtmZs3b4ZOpytwnv/973/w9vZGnz599NOUSiVGjx6Nhw8f4vfffzeYv3fv3gZ/X7l/57lZbW1toVKpsGfPHty/f7/Q/EUZNWqU/v9zW58yMzOxY8cOACXfH/n7+yM8PLzY64+OjkZERIS+9SEoKAj169dHdHR0qbYnOTkZAErUmgEAAwcONNgXxsTE4Pz58+jbty/u3r2r3+5Hjx6hbdu22Lt3r/59dnZ2xqFDh3D9+vVSZTamnTt3Ijs7G2+88YbB9KL+ToYNGwaFQqF/XNL9Y0kMGDDA4L3p2bMnfHx89N+z5UmpTp0EBQUZPA4MDISVlZX+So3z589DCJFvvlx5m5J8fX3zNf1duHABNWvWNPiyzuv8+fN48OABPD09C3w+txNkrqpVq+abx8XFpdg7nlOnTmHy5MnYtWuX/o8014MHDwAAly9fBgBUr17d4Hlra+t8zbPnz5/HmTNnCv2iy5v/SbnrKai5NTg4GPv37y96Y4qpsPWoVCoEBATon89VuXJlfSGYy8XFBX///bfBMgMDA/PNl/c1e/jwIR4+fKh/rFAoiuzYBuS8pn///XexX9PCTgEA+T8vTk5OUKvVcHd3zzf97t27ReYqbH23b99GUlISlixZgiVLljw188qVK7FgwQKcPXvWoJPek8u9fPkyfHx8YG9vb7Ccwprm1Wp1vtfLycmpwPfSycmpyL8Xf39/vP322/j4448RHR2N5s2bo2vXrujfv7++COnduzeWLl2KoUOH4r333kPbtm3Ro0cP9OzZU7+zvnz5MoKCgvJ1Msw9jZn3c5f3vcotOnKz2tjYYO7cuXjnnXfg5eWFxo0bo3PnzhgwYAC8vb0L3Z5cVlZWCAgIMJhWo0YNADDY75Vkf1TUZy+vM2fO4Pjx4xgwYADi4+P101u1aoUvvvgCycnJcHR0LPbyAOjnT0lJKdHv5c19/vx5ACj01ByQs390cXHBvHnzMHDgQFSpUgX169dHp06dMGDAgHyvbVkobF/t6uqa76AwV95tL+n+sSTyfn9KkoTq1auXyysijXLVSd6dkU6ngyRJ+O233wyqv1x5d4ClPd+k0+ng6elZaEWfd+dZUBYAhV4i9qSkpCS0bNkSjo6OmDFjBgIDA6FWq3Hs2DFMmDCh0COzp+UPCwvDxx9/XODzVapUKfEy5fYsr3Fe8+fPN7hUzc/P76l/ZDqdDu3bt8f48eMLfD73yyFXUZ+9grblWbcv7/pyPzf9+/cvdEddu3ZtAMCaNWsQFRWF7t27491334WnpycUCgU+/PBDXLhwoVjrL0hh21TabV2wYAGioqKwefNmbNu2DaNHj9b356pcuTJsbW2xd+9e7N69G7/++iu2bNmC77//Hm3atMG2bdsKXW9ptuHJrGPHjkWXLl2wadMmbN26Fe+//z4+/PBD7Nq1q1iXgT5NSfdHJdnvrVmzBgDw1ltv4a233sr3/Pr16/O1Cj9NcHAwACA2NrZEv1fYZ/ijjz7S9xPKK3efHxkZiebNm2Pjxo3Ytm0bPvroI8ydOxcbNmzQ9+HK+32SS6vVluqzYUzP0jfCnLfL1EpVaJw/f96gsouPj4dOp9MfsQcGBkIIAX9//3w79uIKDAzEoUOHkJWVVWhnmsDAQOzYsQNNmzY1WueYwj4Me/bswd27d7FhwwaDTn+XLl0ymM/Pzw9AzmvSunVr/fTs7GwkJCTovzRy8584cQJt27YtdL2FyV1PXFyc/lRLrri4OP3zz+rJ9Tx51JGZmYlLly6hXbt2pVrm6dOnIYQw2O4nj9SAnKbDZs2a6R8/+R4X9noFBgbi4cOHpcolBw8PDzg4OECr1T4187p16xAQEIANGzYYbP/UqVMN5vPz88POnTvx8OFDg6I+Li7OuOGLEBYWhrCwMEyePBl//PEHmjZtiq+++gqzZs0CkNNC0LZtW7Rt2xYff/wxPvjgA0yaNAm7d+9Gu3bt4Ofnh7///hs6nc6gVSP3FGVpP9+BgYF455138M477+D8+fOoW7cuFixYoP8iL4xOp8PFixcN9mfnzp0DAIP9nrH3R0BOsbR27Vq0bt06XzM/kNM5Mzo6usSFRo0aNVCzZk1s3rwZn332Wb4DwOLK7Vzu6OhYrL87Hx8fvPHGG3jjjTeQmJiIevXqYfbs2fpCw8XFpcCRiy9fvvzUlo+S7Eef3Fc/+X129+7dYrdyl2T/WNLtym0pyiWEQHx8vMF3SHlRqj4aX3zxhcHj//73vwCg/6D06NEDCoUC06dPz3f0I4QoVjPzyy+/jDt37mDhwoX5nstdZmRkJLRaLWbOnJlvnuzs7EKH2S5K7nXReX83t+J8cnsyMzPx5ZdfGszXoEEDuLm54euvv0Z2drZ+enR0dL4Pb2RkJK5du4avv/46X460tDR9r+aCNGjQAJ6envjqq6+QkZGhn/7bb7/hzJkziIiIeMqWFk+7du2gUqnw+eefG2z7N998gwcPHpRqPeHh4bh27Rp++ukn/bT09PR8r0NAQADatWun/2natKn+OY1GU+D7GxkZiT///BNbt27N91xSUpLBe2IOFAoFXn75Zaxfvx4nT57M9/zt27cN5gUMP4OHDh3Cn3/+afA7nTp1QnZ2NhYtWqSfptVq9X+nppScnJzvNQ4LC4OVlZX+c3rv3r18v5d7JJw7T6dOnXDz5k18//33+nmys7Px3//+F/b29gWOHVGU1NTUfFcSBAYGwsHBweDvpyhP7ouEEFi4cCGUSiXatm0LwDT7IwA4cOAAEhISMGjQIPTs2TPfT+/evbF79+5S9XuYPn067t69i6FDhxb4t7Ft2zb88ssvRS6jfv36CAwMxPz58w1OdebK/QxrtVr9KeZcnp6eqFSpksF7EBgYiIMHDyIzM1M/7ZdffsHVq1efuj2F7b8L0rZtW1hbWxv8nQAo8DunMCXZP5Z0u1atWmVwWmvdunW4ceOG/nu2PClVi8alS5fQtWtXdOjQAX/++SfWrFmDvn37ok6dOgByXtBZs2Zh4sSJ+ks7HRwccOnSJWzcuBHDhw/HuHHjilzHgAEDsGrVKrz99ts4fPgwmjdvjkePHmHHjh1444030K1bN7Rs2RIjRozAhx9+iJiYGLz44otQKpU4f/48fvzxR3z22Wfo2bNnibatbt26UCgUmDt3Lh48eAAbGxu0adMGTZo0gYuLCwYOHIjRo0dDkiSsXr06XyGlUqkwbdo0vPnmm2jTpg0iIyORkJCAFStW5OuX8Oqrr+KHH37Aa6+9ht27d6Np06bQarU4e/YsfvjhB2zduhUNGjQoMKdSqcTcuXMxaNAgtGzZEn369NFf3lqtWrUCm1dLw8PDAxMnTsT06dPRoUMHdO3aFXFxcfjyyy/RsGFDg46fxTVixAgsXLgQffr0wZgxY+Dj44Po6Gh9p9biHJXUr18fixYtwqxZs1C9enV4enqiTZs2ePfdd/HTTz+hc+fO+kuXHz16hNjYWKxbtw4JCQn5+ljIbc6cOdi9ezeef/55DBs2DKGhobh37x6OHTuGHTt26L+YO3fujA0bNuCll15CREQELl26hK+++gqhoaEGO/guXbqgadOmeO+995CQkIDQ0FBs2LAh307eFHbt2oVRo0ahV69eqFGjBrKzs7F69Wp9QQUAM2bMwN69exEREQE/Pz8kJibiyy+/ROXKlfUtWMOHD8fixYsRFRWFv/76C9WqVcO6detw4MABfPrppyXuwHju3Dm0bdsWkZGRCA0NhbW1NTZu3Ihbt27hlVdeeervq9VqbNmyBQMHDsTzzz+P3377Db/++iv+7//+T39KxBT7IyDnIEWhUBRa1Hft2hWTJk3Cd999h7fffhsAsHr1aly+fFnfIXfv3r361qRXX31VfyTeu3dvxMbGYvbs2Th+/Dj69OkDPz8/3L17F1u2bMHOnTufOjKolZUVli5dio4dO6JWrVoYNGgQfH19ce3aNezevRuOjo74+eefkZKSgsqVK6Nnz56oU6cO7O3tsWPHDhw5cgQLFizQL2/o0KFYt24dOnTogMjISFy4cAFr1qwp1mX59evXBwCMHj0a4eHhUCgUhb6/Xl5eGDNmDBYsWKD/Pjtx4gR+++03uLu7F2s/VJL9Y0m3y9XVFc2aNcOgQYNw69YtfPrpp6hevbpROs2XuZJcopJ72d/p06dFz549hYODg3BxcRGjRo0qcMCu9evXi2bNmgmNRiM0Go0IDg4WI0eOFHFxcfp5cgd5KkhqaqqYNGmS8Pf3F0qlUnh7e4uePXuKCxcuGMy3ZMkSUb9+fWFrayscHBxEWFiYGD9+vLh+/bp+ntwBcvIqaBCtr7/+WgQEBAiFQmFw6d6BAwdE48aN9QNRjR8/XmzdurXASzI///xz4efnJ2xsbESjRo3EgQMHRP369UWHDh0M5svMzBRz584VtWrVEjY2NsLFxUXUr19fTJ8+XTx48KDA1+VJ33//vXjuueeEjY2NcHV1zTdglxDPdnlrroULF4rg4GChVCqFl5eXeP311wsdsCuvgQMHCj8/P4NpFy9eFBEREcLW1lZ4eHiId955R6xfv14AEAcPHnxqzps3b4qIiAjh4OCQ77LhlJQUMXHiRFG9enWhUqmEu7u7aNKkiZg/f77IzMwUQhgO9JRX7uc87+WXuQM35VXUZ/hJeDxgV0Fu3bolRo4cKapUqaL/rLdt21YsWbJEP49OpxMffPCB/nP13HPPiV9++aXA1/fu3bvi1Vdf1Q/Y9eqrrxY5YFdxtynv31Hey1svXrwoBg8eLAIDA4VarRaurq6idevWYseOHfrf2blzp+jWrZuoVKmSUKlUolKlSqJPnz75Lkm+deuWGDRokHB3dxcqlUqEhYUZZBei6PcRT1zWeefOHTFy5EgRHBwsNBqNcHJyEs8//7z44Ycf8v1eXgUN2OXl5SWmTp1qcEljrmfZH+WVmZkp3NzcRPPmzYucz9/fXzz33HP6xwUN1Jf7U9Dl47nviaenp7C2thYeHh6iS5cuYvPmzfp5ct/rwi5dPn78uOjRo4dwc3MTNjY2ws/PT0RGRoqdO3cKIXIudX/33XdFnTp1hIODg9BoNKJOnTriyy+/zLesBQsWCF9fX2FjYyOaNm0qjh49WqzLW7Ozs8Wbb74pPDw8hCRJT73UNTs7W7z//vvC29tb2NraijZt2ogzZ84INzc38dprr+nne9o+tDj7x+Ju15MDo02cOFF4enoKW1tbERERIS5fvlzk9pirUhUaRV3/TgXTarXC1dVVDB06VO4oZit3fIW8hRKRnAorxsgy5Y65MmvWLFnW/7SCrjyqeAPUl4H09PR8p1RWrVqFe/fuoVWrVvKEMjNpaWkGj9PT07F48WIEBQXB19dXplREVJHk3Q8B0I8ezH218ZjlTdXKu4MHD+Ktt95Cr1694ObmhmPHjuGbb77Bf/7zH/Tq1UvueGahR48eqFq1KurWrYsHDx5gzZo1OHv2bKkHHyIiKqnvv/8eK1asQKdOnWBvb4/9+/fj22+/xYsvvmjQ+ZyeDQsNE6hWrRqqVKmCzz//HPfu3YOrqysGDBiAOXPmlNmdQc1deHg4li5diujoaGi1WoSGhuK7775D79695Y5GRBVE7dq1YW1tjXnz5iE5OVnfQTS34ywZhyTytvETERERGQn7aBAREZHJsNAgIiIik2GhQURERCbDQoOIiIhMhoUGERERmQwLDSIiIjIZFhpERERkMiw0iIiIyGRYaBAREZHJsNAgIiIik2GhQURERCbDQoOIiIhMhoUGERERmQwLDSIiIjIZFhpERERkMiw0iIiIyGRYaBAREZHJsNAgIiIik2GhQURERCbDQoOIiIhMhoUGERERmQwLDSIiIjIZFhpERERkMiw0iIiIyGRYaBAREZHJsNAgIiIik2GhQURERCbDQoOIiIhMhoUGERERmQwLDSIiIjIZFhpERERkMiw0iIiIyGRYaBAREZHJWMsdgIiMLCsdSLsP6LIAXTag0+b8q83CLbjgrnCCtUKCtZUEaysrKBQSVAoruGpUUFhJcqcnIgvDQoOovMjOBB7eBFJuAik3Hv+b9/ENID2p0EUcqfwWRsU3LPA5Kwlws7eBl6MNPB3U8HK0gcfjf3Mfezmq4W5vw4KEiIqNhQaRudFpgdtxwPXjwPVjwPUY4P4lIPUeAGG61QrgdkoGbqdkAEgudD4rCfBwsEGwtyPCfJ0QVtkJYb5OqORsa7JsRFR+sdAgkpMQwN34x0XF458bfwNZj+ROViidAG4lZ+BW8m38fu62frq7vQr/8c0pOnL/ZfFBRCw0iMpSZipwcTdw5eC/RUXGA7lTGcWdh5nYE3cbe+LyFx91qzijTbAnwnydIEk87UJUkUhCCNO1xRIR8OguEPc/4OyvwMU9QHaabFF+KaKPRlnwdlSjTYgn2od4oUl1N9hYK2TLQkRlgy0aRKZw71JOYXH2V+DqIUBo5U5kFm4mp2PtoStYe+gK7FQKNA9yR7sQL7QN8YKrRiV3PCIyARYaRMZy/fi/xUXiabnTmL3UTC22nrqFraduwUoC6lV1QdsQL7QP9UJ1T3u54xGRkfDUCdGzuHsB+Gs5cHIjkPyP3GmeSu5TJ8VVu7IT+jf2Q9c6laBW8vQKUXnGQoOopLTZwNlfgKPLgEt7YcpLTo2tvBQauZztlOhZrzL6N/ZDNXeN3HGIqBR46oSouJKvA0eXA8dW5QycVS6Vrys+klKzsHT/JXxz4BKaVXfHq4390DbEiwOGEZUjLDSInubG38CfC4GTG3KG9S7Hymv7pRDAvvN3sO/8Hfg626JPoyp4pVFVuNvbyB2NiJ6Cp06ICiIEcH4b8Md/gYR9cqcxmp9938abFxrIHcMoVAorhP/HG6+1DECtSk5yxyGiQrBFgyivM78Au2YCt8/KnYSKkKnV4ecT1/HL39fRpXYlvPNiDfi5sR8HkblhoUGU65+/gG2TgCt/yp2ESkAI4KcT1/HbyRt4pWFVjG4bBA8HnlIhMhcsNIjuJwA7pgOnNqI8XUFChrK0AqsPXsb6Y/9gcFN/jGgZAAe1Uu5YRBUeCw2quNLuA3vnA4eXANpMudOQkaRmarFwdzyiD13GyNbV8eoLfhzqnEhGVnIHICpz2Zk5nTw/q5tzNQmLDIt0PzULs349gzbzf8cPR69Cq2NrFZEcWGhQxSEEELsOWNgA2DYZSE+SOxGVgWtJaRi/7m90+mwfYq4myR2HqMJhoUEVw5144JsXgfVDgKTLcqeRTwW+RXvcrRS8vOgPfPjbGWRk8yZ3RGWFhQZZvsNfA4ubA/8cljuJ7EQF7+yq1Qks/v0iIj7fz9YNojLCQoMsV/INYHUP4H/jgKxUudOQGYlPfIiXF/2BOb+dZesGkYmx0CDLdHI9sOgF4MJOuZOQmdLqBL76/QI6l3HrRqtWrTB27NhCn5ckCZs2bSr28vbs2QNJkpCUlPTM2YhMgZe3kmVJuw/8Og44uU7uJFROnH/cujGseQDeah8k+6WwN27cgIuLi6wZiIyJLRpkFHmPqlasWAFnZ+eyDXFhF/BlExYZVGJytW4UxNvbGzY2HNmULAcLDSr/stKA/72b0x8j5brcaagcO5/4ED0X/YHVB017ZZJOp8P48ePh6uoKb29vTJs2Tf9c3lMnf/zxB+rWrQu1Wo0GDRpg06ZNkCQJMTExBsv866+/0KBBA9jZ2aFJkyaIi4sz6TYQFRcLDSrf7sQDi1vkjO5Zwa+oIOPI1gm8v+kkJm2MRZZWZ5J1rFy5EhqNBocOHcK8efMwY8YMbN++Pd98ycnJ6NKlC8LCwnDs2DHMnDkTEyZMKHCZkyZNwoIFC3D06FFYW1tj8ODBJslOVFIsNAhATge10aNHF3iUlZCQkO8IKikpCZIkYc+ePbLkBQAk7Ae+aQfcOSdfBrJY0Yeu4NVvDuHeI+OPHFu7dm1MnToVQUFBGDBgABo0aICdO/N3XF67di0kScLXX3+N0NBQdOzYEe+++26By5w9ezZatmyJ0NBQvPfee/jjjz+Qnp5u9OxEJcVCg/SKe5RlFmLWAqtfyun8SWQiBy/eQ9eF+3H2ZrJRl1u7dm2Dxz4+PkhMTMw3X1xcHGrXrg21Wq2f1qhRo6cu08fHBwAKXCZRWWOhQXrFPcqSlRDAzhnAptd5j5JSqbgjg5bWP/fT8PKXf2DLyZtGW6ZSaXhXWUmSoNM922maJ5cpPR4B9lmXSWQMLDRIr7hHWbLJSgfWDQb2LZA7Sbkl2I2lVB5lavF69F/4bMd5iDJ8EWvWrInY2FhkZGTopx05cqTM1k9kDCw0SK+woywrq5yPyZM72KysrDLNhoe3gZWdgVMbyna9RI8JAXyy4xxGrT2OtMyyGU20b9++0Ol0GD58OM6cOYOtW7di/vz5AP5ttSAydyw06Kk8PDwA5AwklCvvpXUmlXgWWNoW+IdHciS/X2Nv4OVFf+DmA9N3tHR0dMTPP/+MmJgY1K1bF5MmTcKUKVMAwKDfBpE548ig9FS2trZo3Lgx5syZA39/fyQmJmLy5Mlls/ILu4AfooCMB2WzPqJiOH0jGZGL/8TaYc+jsotdiX63oCu1nhw3I++pmSZNmuDEiRP6x9HR0VAqlahatSqAnCvG8v5O3bp1y/QUD1FR2KJBxbJs2TJkZ2ejfv36GDt2LGbNmmX6lZ74DojuxSKDzNKVe6novfggEu48Mul6Vq1ahf379+PSpUvYtGkTJkyYgMjISNja2pp0vUTGIgmWvWSOTnwPbHoNEOw1b0ybfd/BmAv15Y5hUbwcbRA99HlU93QwyfLnzZuHL7/8Ejdv3oSPjw+6d++O2bNnw86uZC0pRHJhoUHmJ3YdsGE4IHj7bmNjoWEa7vYqrBn6PIK9HeWOQmR2eOqEzMvJ9SwyqNy58zATfb8+hPO3UuSOQmR2WGiQ+Ti1EVg/jEWGSfGSSFO59ygTfZcewiUT99kgKm9YaJB5OL+dRUYZ4HlS07qdkoG+Xx/E1XupckchMhssNEh+Vw4CPwwAdGU8CBiRCdx4kI4+Xx/E9aQ0uaMQmQUWGiSvmyeBtZFAFo8AyXL8cz8N/ZcewoNUFs9ELDRIPvcuAmt6AOkcJ4Msz8U7jzDq22PQ6njCiio2Fhokj9R7Obd5f3hL7iREJrPv/B3M/vWM3DGIZMVCg8qeTgesHwrcT5A7CZHJLTtwCT8cvSp3DCLZsNCgsrfnA+DCTrlTEJWZyRtP4q/L9+WOQSQLFhpUtuK2AHvny52CqExlanV4bc1fuPGAV6JQxcNCg8rOvYvAxuHgaA5UEd1OycDwVX8hPYtjxVDFwkKDykZWGvD9AF5hIjcODCqr2GsPMH7d33LHICpTLDSobPzyFnArVu4UFR5voSi/n05cxxe74+WOQVRmWGiQ6R1ZCpz4Vu4URGZjwbY47DrLS7upYmChQab1z1Fgy0S5UxCZFZ0Axq+Lxf1HmXJHITI5FhpkOo/uAD8MBLTcmRLldedhBqb8dEruGEQmx0KDTGfzKCD5H7lTEJmtn09cx5aTN+SOQWRSLDTINE5tBM79JncKIrM3edMpnkIhi8ZCg4wv/QHw23typyAqF3gKhSwdCw0yvh3TgIc35U5BVG7wFApZMhYaZFxXDgFHl8udggohOGKX2eIpFLJULDTIeLRZwM9jwCHGiUqOp1DIUrHQIOM58Blw+4zcKYjKLZ5CIUvEQoOM4+4FYO9HcqcgKvcmbzqJpFSeQiHLwUKDjOOXt4DsdLlTEJV7dx5mYuEu3guFLAcLDXp2J74DLv0udwoii7Hq4GVcT0qTOwaRUbDQoGeTdh/Y+n9ypyCyKJnZOnyy/ZzcMYiMgoUGPZs/FgKpd+VOQWRxNhy/hvjEFLljED0zFhpUemn3gcNL5E5BZJG0OoF5W+LkjkH0zFhoUOn9+SWQkSx3CiKLte30LRy7cl/uGETPhIUGlU5aEnBosdwpiCze3N/Oyh2B6Jmw0KDSOfglkPFA7hRUQhyztfw5dOkedsclyh2DqNRYaFDJpSUBB7+SOwVRhfHRljgIwTKRyicWGlRyh75iawZRGTp9Ixk/nbgudwyiUmGhQSWT/iDntAkRlalPd5xnqwaVSyw0qGQOLc4pNoioTF268wi/n7stdwyiEmOhQcWXngz8+YXcKYgqrDUHL8sdgajEWGhQ8R1eAqQnyZ2CqMLadTYR/9xPlTsGUYmw0KDi0WmBI0vlTkFUoekEsPbQFbljEJUICw0qnnNbgZQbcqegZybJHYCe0Q9HryIzWyd3DKJiY6FBxXNspdwJyAh40UL5d+dhJn47yaKfyg8WGvR0D64B57fLnYKIHlv9JzuFUvlhLXcAKgeOrwGEVu4URPTY0cv3ceZGMkJ8HOWOUmparRZZWVlyx6BSUiqVUCgUxZqXhQYVTYicQoOIzMrqg5fxwUthcscoMSEEbt68iaSkJLmj0DNydnaGt7c3JKnovl8sNKhoCfuBB+zlTmRuNh+/hokdg+GgVsodpURyiwxPT0/Y2dk99UuKzI8QAqmpqUhMzLnZn4+PT5Hzs9CgosX+IHcCIirAo0wtNsdcR//GfnJHKTatVqsvMtzc3OSOQ8/A1tYWAJCYmAhPT88iT6OwMygVLjsDOL1Z7hREVIitp27KHaFEcvtk2NnZyZyEjCH3fXxaXxsWGlS4c1t5XxMiM3bo4j08zMiWO0aJ8XSJZSju+8hCgwrH0yZEZi1Tq8Ne3miNzBwLDSpYRgpwbpvcKcjoeCRpaXacviV3hAqhVatWGDt2bKHPS5KETZs2FXt5e/bsgSRJFeLqG3YGpYIl7Ae0GXKnICMT4NCglmZ3XCK0OgGFVfkuIqu992uZri9hToRRl3fjxg24uLgYdZmWgi0aVLCLv8udgIiK4X5qFo4m3JM7RoXn7e0NGxsbuWOYJRYaVLCLe+ROQETFtOMMT5+UBZ1Oh/Hjx8PV1RXe3t6YNm2a/rm8p07++OMP1K1bF2q1Gg0aNMCmTZsgSRJiYmIMlvnXX3+hQYMGsLOzQ5MmTRAXF1c2G1OGWGhQfim3gNtn5E5BRMW080yi3BEqhJUrV0Kj0eDQoUOYN28eZsyYge3b898HKjk5GV26dEFYWBiOHTuGmTNnYsKECQUuc9KkSViwYAGOHj0Ka2trDB482NSbUebYR4PyY2sGUbly8c4jXLj9EIEe9nJHsWi1a9fG1KlTAQBBQUFYuHAhdu7cifbt2xvMt3btWkiShK+//hpqtRqhoaG4du0ahg0blm+Zs2fPRsuWLQEA7733HiIiIpCeng61Wm36DSojbNGg/C6xfwZRecOrT0yvdu3aBo99fHz0w3A/KS4uDrVr1zYoFho1avTUZeYO5V3QMsszFhqUHzuCEpU77Kdhekql4X1lJEmCTqcz2jJzB8B61mWaGxYaZOjOeSD5H7lTEFEJxVxNQka2Vu4YBKBmzZqIjY1FRsa/QwQcOXJExkTyYqFBhtg/w6IJDv1ssbK0AmdupMgdgwD07dsXOp0Ow4cPx5kzZ7B161bMnz8fQMUcfp2FBhlioWHZOF6XRYu9xnsTmQNHR0f8/PPPiImJQd26dTFp0iRMmTIFACyqk2dx8aoT+pdOByTskzsFEZXSyX/Kb6Fh7JE6jW3Pnj35pj05boYQhlV8kyZNcOLECf3j6OhoKJVKVK1aFUDOkOZ5f6du3br5plkCFhr0r5t/826tROUYWzTMx6pVqxAQEABfX1+cOHECEyZMQGRkJGxtbeWOVuZYaNC/Ek/LnYCInsH5xBRkZGthY62QO0qFd/PmTUyZMgU3b96Ej48PevXqhdmzZ8sdSxYsNOhfty1v6FuiiiS3Q2jdKs5yR6nwxo8fj/Hjx8sdwyywMyj96855uRMQ0TPi6RMyNyw06F932KJBVN6V5w6hZJlYaFCO7Ezg3iW5UxDRM2KLBpkbFhqU494FQHBUQaLyLrdDKJG5YKFBOe6ckzsBlQGBijcqYUWTpRU4yxFCyYyw0KAct1loEFmKK/dS5Y5ApMdCg3KwIyiRxUhMyXj6TFSm9uzZA0mSkJSUBABYsWIFnJ2dZc1UVjiOBuXgqRMii5GYnC53hJKb5lTG62On2bLCFg0ChOAYGkQWhC0aZE5YaBDw4B8gi+d0iSzFrfLYomHmWrVqhdGjR2P8+PFwdXWFt7c3pk2bBgBISEiAJEmIiYnRz5+UlARJkgq8GVtFw0KDgEeJcicgIiNii4ZprFy5EhqNBocOHcK8efMwY8YMbN++Xe5YZo99NAhIT5Y7AREZUbnso1EO1K5dG1OnTgUABAUFYeHChdi5cyeCgoJkTmbe2KJBQAYLDSJLkpyejfQsDtplbLVr1zZ47OPjg8REtgg/DQsNAjI4uE9FwQG7Ko7EZJ4+MTalUmnwWJIk6HQ6WFnlfJUKIfTPZWVllWk2c8ZCg3jqhMgC3Urh6ZOy4uHhAQC4ceOGftqTHUMrOvbRILZoEFkgtmiUHVtbWzRu3Bhz5syBv78/EhMTMXnyZLljmQ22aBD7aBBZoES2aJSpZcuWITs7G/Xr18fYsWMxa9YsuSOZDbZoEAsNIgv0KCNb7gglY+YjdRY0HsamTZv0/x8SEoI//vjD4Pkn+2y0atXK4HFUVBSioqKMHdMssUWD2EeDyAJl68TTZyIqAyw0iC0aRBZIy0KDzAQLDWJnUCILlKVloUHmgYUG8dQJkQXS6nRyRyACwEKDAEDLy+CILA37aJC54FUnBChUciegPDKs1UhT2SHVRoM0pS3SlDZIVaqRZq1CmkKJVIUCaQol0qyskCpJSLOSkAqBNAikQYtUnRZpIhtpuiykajOQps1AmjYdC46dxm//Wyn35lEZcHF8FehSS+4YRCw0CIDCRu4E5ZJWUuQUAo+LgVSlGmmPi4FUayXSFCqkKRRItbJCmpUCaZKEVEkgDUAadEgV2UgT2sfFQCbSdI8Lgux0aMWT96lIf/zzANAi56eUkuwleDzTVlN5ISm4eyfzwE8iAdaW3aKRprRFmkqDNBs7pCptc4oBpQqpCtXjFgIFUq2skWZl9bhlAEiTcosBXU7LgMh+XAxkIk2bidTsNGTqMp9YSzaAhzk/AkDW4x8zc1ejA+8zWTFI1gq5IxABYKFBgFm0aGRbWee0Dqg0SFU9Lgas1UhVqpBmrUSqlRJpipxiINXKCmmShDRJPD5doEOa0CJVl3OqIE2XqT9dkK5Nh0482Sku7fEPnrl1oDy6acv+OBWGgoUGmQcWGlTsFg0BKaffgMoOaTZ2SLO2RarKBmnWOT+pCuvHxUDu6QIJaZCQKuly+g6Ix6cLdFk5pwueOFWQpXvy8D+3OSAF0AHILDgPldw1VarcEaiM8NSJ5YqKikJSUpLByKR5VatWDWPHjsXYsWOLtcyEhAT4+/vj+PHjqFu3rlFy5uInkbCh2nP421mDNAikCi3SoEWaTotU3b+nCtKy05CuzYBAbk92ASD18Q9yzhyUsxGPK6IEpXkP80zGIynL1+49bGVYma4vdmBsma6vrB05cgQajUbuGABYaBCAw1I6fr1v2X90lOOKIgmwtgayWRVaOoWTk9wR6CmysrKgVCpNsuzcW9ebA46jQXBQOsgdgcqIkADJ1VnuGFQGFO7uckewGEuWLEGlSpWgyzMIWrdu3TB48GD9482bN6NevXpQq9UICAjA9OnTkf1EUS9JEhYtWoSuXbtCo9Fg1qxZqF69OubPn2+w3JiYGEiShPj4+CJzzZ8/Hz4+PnBzc8PIkSORlfXvKehq1arh008/1T8+e/YsmjVrBrVajdDQUOzYsQOSJOU7/XLx4kW0bt0adnZ2qFOnDv7888/ivkyFYqFBcFCx0KhIdK480q0IrFloGE2vXr1w9+5d7N69Wz/t3r172LJlC/r16wcA2LdvHwYMGIAxY8bg9OnTWLx4MVasWIHZs2cbLGvatGl46aWXEBsbiyFDhmDw4MFYvny5wTzLly9HixYtUL169UIz7d69GxcuXMDu3buxcuVKrFixAitWrChwXq1Wi+7du8POzg6HDh3CkiVLMGnSpALnnTRpEsaNG4eYmBjUqFEDffr0MSiWSoOFBrHQqGAyne3kjkBlgIWG8bi4uKBjx45Yu3atftq6devg7u6O1q1bAwCmT5+O9957DwMHDkRAQADat2+PmTNnYvHixQbL6tu3LwYNGoSAgABUrVoVUVFRiIuLw+HDhwHknE5Zu3atQUtJYZkWLlyI4OBgdO7cGREREdi5c2eB827fvh0XLlzAqlWrUKdOHTRr1ixfAZRr3LhxiIiIQI0aNTB9+nRcvnz5qS0rT8NCg1hoVDCPnOS/nJlMj4WGcfXr1w/r169HRkbOJeLR0dF45ZVXYGWV8zV64sQJzJgxA/b29vqfYcOG4caNG0hN/fdqrwYNGhgst1KlSoiIiMCyZcsAAD///DMyMjLQq1evIvPUqlULiicuYfbx8UFiYmKB88bFxaFKlSrw9vbWT2vUqFGB89auXdtgmQAKXW5xsdAgOKoc5Y5AZSjZnn/2ls5Ko4GVra3cMSxKly5dIITAr7/+iqtXr2Lfvn360yYA8PDhQ0yfPh0xMTH6n9jYWJw/fx5qtVo/X0FXggwdOhTfffcd0tLSsHz5cvTu3Rt2dkW3PObtRCpJUr4+JKXx5HIlSQKAZ14urzohVLKvJHcEKkN3NQLV5A5BJsXWDONTq9Xo0aMHoqOjER8fj5o1a6JevXr65+vVq4e4uLgi+1UUplOnTtBoNFi0aBG2bNmCvXv3GjM6atasiatXr+LWrVvw8vICkHP5a1lhoUHwc/STOwKVoVt2HAHN0ik8WGiYQr9+/dC5c2ecOnUK/fv3N3huypQp6Ny5M6pWrYqePXvCysoKJ06cwMmTJzFr1qwil6tQKBAVFYWJEyciKCgIL7zwglFzt2/fHoGBgRg4cCDmzZuHlJQUTJ48GcC/rRamxEKD4KBygKvaFffS78kdhcrAdVWa3BHIxKzdzWcMheIqDwNotWnTBq6uroiLi0Pfvn0NngsPD8cvv/yCGTNmYO7cuVAqlQgODsbQoUOLtewhQ4bggw8+wKBBg4yeW6FQYNOmTRg6dCgaNmyIgIAAfPTRR+jSpYvBaR1TYaFBAHJaNVhoVAyXVclyRyATs3ZzkzuCRbKyssL169cLfT48PBzh4eGFPi+EKPS5a9euQalUYsCAAU/NUdBlrE+OmQHkDCn+pODgYOzfv1//+MCBAwCgP9VTrVq1fPmcnZ2LzFxcLDQIQE6hcTzxuNwxqAwkWN8HJAkwwg6EzJM1T52UGxkZGbh9+zamTZuGXr166ftQGNvGjRthb2+PoKAgxMfHY8yYMWjatCkCAwNNsr4nsfs5AWA/jYokQ9JCcuagXZZMWaWK3BGomL799lv4+fkhKSkJ8+bNM9l6UlJSMHLkSAQHByMqKgoNGzbE5s2bTba+J7FFgwCw0KhohJszcD9J7hhkIurgYLkjUDFFRUUhKirK5OsZMGBAsU7LmAJbNAgAC42KJtPFPO7qSMYn2dpC5e8vdwwiPRYaBACo6lAVEkx/mROZhzQn0/c0J3nYBAVBsuKuncwHP40EAFBbq+GlMU0nJDI/yfaKp89E5RJPm5C5YaFBen4OPH1SUdyz5xUnlkodwkKDzAsLDdJjP42KI9Hu2W77TObLhi0aZGZYaJBeiFuI3BGojFy34eigFsnKCuqaNeVOQWSAhQbpNfRuKHcEKiNXODqoRVJVqQKrp9z1kyqGatWq5RstVC4cR4P0/Bz94GnnicTURLmjkIldUibJHYFMwCak/LZKngku2+whZ8+U6foqMrZokAG2alQMD6VMSA4OcscgI+MVJ+VHZmbFuYsyCw0y0Mi7kdwRqKy4OcudgIzMtm4duSNYrFatWmH06NEYP348XF1d4e3tjWnTpumfv3LlCrp16wZ7e3s4OjoiMjISt27d0j8/bdo01K1bF0uXLoW/v7/+rqmSJGHx4sXo3Lkz7OzsEBISgj///BPx8fFo1aoVNBoNmjRpggsXLuiXdeHCBXTr1g1eXl6wt7dHw4YNsWPHjjJ7LUqKhQYZYItGxZHlYi93BDIiKzs72NWrJ3cMi7Zy5UpoNBocOnQI8+bNw4wZM7B9+3bodDp069YN9+7dw++//47t27fj4sWL6N27t8Hvx8fHY/369diwYQNiYmL002fOnIkBAwYgJiYGwcHB6Nu3L0aMGIGJEyfi6NGjEEJg1KhR+vkfPnyITp06YefOnTh+/Dg6dOiALl264MqVK2X1UpQI+2iQgSoOVeCj8cGNRzfkjkImluasBk+eWA67xo0hqVRyx7BotWvXxtSpUwEAQUFBWLhwIXbu3AkAiI2NxaVLl1Dl8Q3tVq1ahVq1auHIkSNo2DDnAC4zMxOrVq2Ch4eHwXIHDRqEyMhIAMCECRPwwgsv4P3339ffcn7MmDEYNGiQfv46deqgTp1/W69mzpyJjRs34qeffjIoSMwFWzQoH7ZqVAwpDkq5I5AR2bdoLncEi1e7dm2Dxz4+PkhMTMSZM2dQpUoVfZEBAKGhoXB2dsaZM/92OvXz88tXZORdbu5t4sPCwgympaenIzk552qxhw8fYty4cQgJCYGzszPs7e1x5swZs23RYKFB+bDQqBju88yJRbFvzkLD1JRKw+JckiTodLpi/75GU/DNDJ9criRJhU7LXde4ceOwceNGfPDBB9i3bx9iYmIQFhZmth1MeeqE8mGhUTHc5uigFkMVEAClr6/cMSqskJAQXL16FVevXtW3apw+fRpJSUkIDQ01+voOHDiAqKgovPTSSwByWjgSEhKMvh5jYYsG5eNr7wtfe+60LN1NdbrcEchI2Johr3bt2iEsLAz9+vXDsWPHcPjwYQwYMAAtW7ZEgwYNjL6+oKAgfYfSEydOoG/fviVqWSlrbNGgAjX0bohr8dfkjkEmdFX1UO4IZCQaC+ifUZ4H0JIkCZs3b8abb76JFi1awMrKCh06dMB///tfk6zv448/xuDBg9GkSRO4u7tjwoQJ+v4b5kgSQvA2jpTPtoRteOf3d+SOQSbkrtPgy7kP5I5Bz0iys0ONg3/CqhxccZKeno5Lly4ZjCNB5Vdx30+eOqECtazSEg4qXvxoye5YPYJky519eadp2LBcFBlUcbHQoALZKGzwot+LcscgU3NzlTsBPSNLOG1Clo2FBhWqS2AXuSOQiWW7sNWqXFMo4NCuvdwpiIrEQoMKVc+zHq8+sXDpzrZyR6BnYN+sGZRennLHICoSCw0qlCRJiAiIkDsGmdAjR44OWp459XxZ7gilwmsQLENx30cWGlSkLgE8fWLJkuwluSNQKSnc3ODQqpXcMUokd7TL1NRUmZOQMeS+j3lHTM2L42hQkao5VUOYexhi78TKHYVM4I6dFjXkDkGl4tS1K6Sn7ODNjUKhgLOzMxITEwEAdnZ2+uG1qfwQQiA1NRWJiYlwdnaGQqEocn4WGvRUnQM6s9CwUDdsM+SOQKXkXE5Pm3h7ewOAvtig8svZ2Vn/fhaFhQY9VUf/jvjo6EfI1vHeGJbmH5tHckegUrCtWxc2gYFyxygVSZLg4+MDT09PZGVlyR2HSkmpVD61JSMXCw16Khe1C5pVaoY9/+yROwoZWYKSI4OWR+W1NeNJCoWi2F9UVL6xMygVS+fAznJHIBO4pkgGytl5/opOsrODY8eOcscgKjYWGlQsbaq2gacdr9e3RJKbi9wRqAQcO3SAlUYjdwyiYmOhQcWitFJiQOgAuWOQCWhdHeWOQCXg3Kun3BGISoSFBhVbzxo9eaM1C5ThbCd3BComu0aNYPfcc3LHICoRFhpUbBqlBr1r9pY7BhnZI0fe+bO8cB85Uu4IRCXGQoNKpF9IP6is+MVkSR44cDdQHtg1aADN843kjkFUYtzDUIm427qjW/VucscgI7qn0ckdgYrBfRRbM6h8YqFBJTY0bCisrTgEi6W4aZspdwR6Ctv69aFp3FjuGESlwkKDSqySfSW8VP0luWOQkVxT8QZX5s79jdfljkBUaiw0qFSG1x4OpRUHerIEl1XJckegItjWrQv7pk3ljkFUaiw0qFS8Nd7oEdRD7hhkBJcVSYAVdwXmileaUHnHvQuV2tCwobwCxQJkSzpYuTrLHYMKoK5TG/bNm8kdg+iZsNCgUvPWeKNvSF+5Y5AR6Fyd5I5ABfBgawZZABYa9Exer/M6vDXecsegZ5ThzHtnmBv71q1h36KF3DGInhkLDXomdko7vNfwPblj0DNKc7KROwI9QbK1hffkSXLHIDIKFhr0zNr6tUXLyi3ljkHP4IGDQu4I9AT311+H0tdX7hhERsFCg4xi4vMTYWttK3cMKqV7GiF3BHrMJqg63AZFyR2DyGhYaJBR+Nr7Ynjt4XLHoFK6xdFBzYMkwXvqVEhKjlFDloOFBhnNwFoDEegUKHcMKoXr6nS5IxAAp+7dYdeggdwxiIyKhQYZjdJKicmNJ8sdg0rhCkcHlZ3CyQme49+VOwaR0bHQIKNq4N0AXQO7yh2DSuii9X25I1R4HuPegbWLi9wxiIyOhQYZ3bgG4+BkwwGgypN0KRuSM98zudg+9xyce/aUOwaRSbDQIKNzUbvgrXpvyR2DSkhwGHJZSGo1fGZMhyRJckchMgkWGmQSL9d4GW2rtpU7BpVAlgtHB5WD16T/g01QkNwxiEyGhQaZzMymM1HVoarcMaiY0pzVckeocBy7doFLr15yxyAyKRYaZDIOKgd83Opj2Cg4vHV5kGxvLXeECkUVEACfadPkjkFkciw0yKRqutbEpOd5z4by4L693AkqDkmthu+nn8DKzk7uKEQmx0KDTO6loJfQvXp3uWPQU9y2y5I7QoXhPXkS1DVqyB2DqEyw0KAyMen5SajpUlPuGFSE6zYcHbQsOHXryktZqUJhoUFlQm2txsetPoa9ku3z5uqqzUO5I1g8VUAAvKdOlTsGUZlioUFlpqpjVcxsOlPuGFQIjg5qWuyXQRUVCw0qU+382uHV0FfljkEFeGCVDknDsTRMxXvaVPbLoAqJhQaVubfrv416nvXkjkEFcXOWO4FFch85Es7du8sdg0gWLDSozFlbWePzNp8jyIWjIZqbbBcHuSNYHKcePeDx5ii5YxDJhoUGycLJxglL2i9BFYcqckehJ6Q528odwaJomjaFz4zpcscgkhULDZKNu607vn7xa3jZeckdhR576MDRQY3FJiQEvp99BsmarylVbCw0SFa+9r5Y8uISuKpd5Y5CAJLseQdRY1D5+aHq0q+hsGfnWiIWGiS7AKcAfNXuKzgo2T9Abrc1WrkjlHvWPj6ounwZrN3c5I5iMtWqVcOnn34qdwwqJ1hokFkIcQvBwrYLYWvNPgJyuqnm6KDPQuHqiqrffANlpUpyRyEyGyw0yGzU86qHT1p9AqWVUu4oFdZVFUcHLS0rBwdUXfo1bAL85Y6CzMxMuSMQ6bHQILPS1Lcp5jSfA4WkkDtKhXRRlSR3hHJJ4eqKqsuXQx0aWqrfb9WqFUaPHo3x48fD1dUV3t7emPbELeSvXLmCbt26wd7eHo6OjoiMjMStW7f0z0+bNg1169bF0qVL4e/vD7VaDQCQJAmLFy9G586dYWdnh5CQEPz555+Ij49Hq1atoNFo0KRJE1y4cEG/rAsXLqBbt27w8vKCvb09GjZsiB07dpTuhSECCw0yQy9WexFTX5gKCeyYWNYSrR5BsrGRO0a5ovT1RbW10bD9T61nWs7KlSuh0Whw6NAhzJs3DzNmzMD27duh0+nQrVs33Lt3D7///ju2b9+Oixcvonfv3ga/Hx8fj/Xr12PDhg2IiYnRT585cyYGDBiAmJgYBAcHo2/fvhgxYgQmTpyIo0ePQgiBUaP+Hefj4cOH6NSpE3bu3Injx4+jQ4cO6NKlC65cufJM20cVF6+7IrP0UtBLUClUeP/A+8jS8fblZcrNBbh+U+4U5YJNUBCqLF0KpZfnMy+rdu3amPr4hmtBQUFYuHAhdu7cCQCIjY3FpUuXUKVKzrgzq1atQq1atXDkyBE0bNgQQM7pklWrVsHDw8NguYMGDUJkZCQAYMKECXjhhRfw/vvvIzw8HAAwZswYDBo0SD9/nTp1UKdOHf3jmTNnYuPGjfjpp58MChKi4mKLBpmtiIAIfNH2C2iUvESwLGldHeWOUC7YPvcc/NasNkqRAeQUGk/y8fFBYmIizpw5gypVquiLDAAIDQ2Fs7Mzzpw5o5/m5+eXr8jIu1wvr5wxa8LCwgympaenIzk5GUBOi8a4ceMQEhICZ2dn2Nvb48yZM2zRoFJjoUFm7YVKL2B5+HK427rLHaXCSOfooE+ladkCVZcvg8LJyWjLVCoNO0FLkgSdTlf8TIXcEO/J5UqSVOi03HWNGzcOGzduxAcffIB9+/YhJiYGYWFh7GBKpcZCg8xeiFsIVndcDT9HP7mjVAiPHFVyRzBrTt26osoXX8DqcYdLUwsJCcHVq1dx9epV/bTTp08jKSkJoaXsfFqUAwcOICoqCi+99BLCwsLg7e2NhIQEo6+HKg4WGlQuVHaojDUd16C+V325o1g8jg5aONeBA+EzZ06ZDiverl07hIWFoV+/fjh27BgOHz6MAQMGoGXLlmjQoIHR1xcUFKTvUHrixAn07du3RC0rRHmx0KByw1ntjK/bf43u1bvLHcWi3dXwSyUfKyt4jnsHXhPf059qKCuSJGHz5s1wcXFBixYt0K5dOwQEBOD77783yfo+/vhjuLi4oEmTJujSpQvCw8NRr149k6yLKgZJCCHkDkFUUstPLsenxz6FTvBL0dj6PghB9y9j5Y5hNhSurqj00TzYN20qdxSicoktGlSgqKgodO/evch5Snq/g4SEBEiSZHCNf2kN+s8gfNb6M9hZ2z3zssjQNVWq3BHMhm2D+vDfuJFFBtEzYKFBpXbkyBEMHz5ctvW3qtIK33b+FiGuIbJlsEQJygdyR5CfJMFt6BD4rVhhtMtXiSoqFhoWLivLdINdeXh4wM5O3haFAKcAREdEY/B/BsNK4sfZGK4okoAy7OxobqycnFD5iy/gOW5cmXb6JLJU3DObiSVLlqBSpUr5end369YNgwcP1j/evHkz6tWrB7VajYCAAEyfPh3Z2dn65yVJwqJFi9C1a1doNBrMmjUL1atXx/z58w2WGxMTA0mSEB8fX2Su+fPnw8fHB25ubhg5cqRB4ZL31MnZs2fRrFkzqNVqhIaGYseOHZAkCZs2bTJY5sWLF9G6dWvY2dmhTp06+PPPP4v7MhVIaaXEW/XfwjcvfoNKGt4181kJCZBcneWOIQt17doI2LAeDm1ayx2FyGKw0DATvXr1wt27d7F79279tHv37mHLli3o168fAGDfvn0YMGAAxowZg9OnT2Px4sVYsWIFZs+ebbCsadOm4aWXXkJsbCyGDBmCwYMHY/ny5QbzLF++HC1atED16tULzbR7925cuHABu3fvxsqVK7FixQqsWLGiwHm1Wi26d+8OOzs7HDp0CEuWLMGkSZMKnHfSpEkYN24cYmJiUKNGDfTp08egWCqtBt4NsK7rOkQERDzzsio6navxBqIqL1z690e1Nauh9PWVOwqRRWGhYSZcXFzQsWNHrF27Vj9t3bp1cHd3R+vWOUdX06dPx3vvvYeBAwciICAA7du3x8yZM7F48WKDZfXt2xeDBg1CQEAAqlatiqioKMTFxeHw4cMAck6nrF271qClpLBMCxcuRHBwMDp37oyIiAj9vRfy2r59Oy5cuIBVq1ahTp06aNasWb4CKNe4ceMQERGBGjVqYPr06bh8+fJTW1aKy0HlgDnN52Bei3lwUDkYZZkVUaZzxelkq3Bzg+9nn8F78iRIKg5WRmRsLDTMSL9+/bB+/XpkZGQAAKKjo/HKK6/AyirnbTpx4gRmzJgBe3t7/c+wYcNw48YNpKb+e6VA3kF8KlWqhIiICCxbtgwA8PPPPyMjIwO9evUqMk+tWrWgUPx7u/bcey8UJC4uDlWqVIG3t7d+WqNGjQqc98l7L/j4+ABAocstrY7+HbGh6wY08i44AxXtkVMFuIOrJMG5Vy8E/u9XOIa/KHcaIovFQsOMdOnSBUII/Prrr7h69Sr27dunP20C5NzsaPr06YiJidH/xMbG4vz581A/MRxyQfc8GDp0KL777jukpaVh+fLl6N2791M7cj7rvReKs9y891kwJm+NN5a+uBTv1H8HSivl03+B9JLtLXvXYBNUHX7Ra+Azc4ZR71dCRPmxS7UZUavV6NGjB6KjoxEfH4+aNWsajMhXr149xMXFFdmvojCdOnWCRqPBokWLsGXLFuzdu9eY0VGzZk1cvXoVt27d0t8h8siRI0ZdR2lIkoSo/0ShiW8TzD08F4dvHpY7UrlwVyNQTe4QJiCp1XB//XW4DR4EScnik6gssNAwM/369UPnzp1x6tQp9O/f3+C5KVOmoHPnzqhatSp69uwJKysrnDhxAidPnsSsWbOKXK5CoUBUVBQmTpyIoKAgvPDCC0bN3b59ewQGBmLgwIGYN28eUlJSMHnyZAAo8yGbC1LDpQa+Cf8Gu6/sxsd/fYyE5AS5I5m1W3aWd6dOTfPm8J7yPlRP3G6diEzPsttHy6E2bdrA1dUVcXFx6Nu3r8Fz4eHh+OWXX7Bt2zY0bNgQjRs3xieffAI/v+Ld1XTIkCHIzMzEoEGDjJ5boVBg06ZNePjwIRo2bIihQ4fqrzpRl9FdLoujddXW2NBtA95r9B6cbZzljmO2rqvS5I5gNAoPd/h+vABVv17CIoNIBrzXSQWyb98+tG3bFlevXtWf3jClAwcOoFmzZoiPj0dgYKDJ11dSyZnJWHxiMb49+y2ydKYb2Kw8qpnljpnzb8od45lINjZweeUVuI8aCYUDr0AikgsLjQogIyMDt2/fxsCBA+Ht7Y3o6GiTrGfjxo2wt7dHUFAQ4uPjMWbMGLi4uGD//v0mWZ+xXE2+ik+OfYLtl7fLHcVsqIQCa+ZmAuVw9yDZ2MA5MhJuw4ZC6cnhw4nkxlMnFcC3334LPz8/JCUlYd68eSZbT0pKCkaOHIng4GBERUWhYcOG2Lx5s8nWZyxVHKvg41YfY2WHlfiP23/kjmMWMiUtJBdnuWOUiKRSwaV/fwRu2wbvSf/HIoPITLBFg+gJQghsSdiCFadW4PTd03LHkdUP6yoD5xPkjvFUkkoF55494TZiOJRlcEqQiEqGhQZRIY7dOoY1Z9Zg15Vd0Aqt3HHK3JodwVAdOSl3jEJJSiWcer4M9xEjoHxioDgiMi+8vJWoEPW86qGeVz3ceHgD38Z9i/Xn1iM5M1nuWGUm1ckG5jggt5WjI5y6doXbkMFQPh5ZlojMF1s0iIopLTsNP1/4GdFnonHxwUW545jcgrP1UGWj+QxwZtegAZwje8EhPBxWNhVgiHQiC8FCg6iEhBD44/ofWHNmDQ5cOwABy/wTmnT1OdRZI+/orgo3Nzh17wbnnj1h4+8vaxYiKh2eOiEqIUmS0NS3KZr6NsWlB5ewMX4jtiVsw7WH1+SOZlSJdtnyrNjKCpomTeDcqxcc2rTmUOFE5RxbNIiMJPZ2LLYmbMW2y9tw49ENueM8s4iH1THwv2fLbH2q6oFwfDEczi/3gNLXt8zWS0SmxUKDyMiEEDhx+wR2XdmFPf/swaUHl+SOVCphmZ54f8F1ky1fUquhef55aFq2gH2LllBVZnFBZIlYaBCZ2JXkK9hzdQ9+/+d3HLt1DNlCplMSJWQvVFg2J9Woy1RWqQL7Fi1g37IF7J5/np06iSoAFhpEZSg5MxkxiTGIvROL2DuxOHXnFJIykuSOVagfF9pCpKSU+vetNBrY1qkNTfMWsG/ZEjYB7NBJVNGw0CCS2dWUqzh55yRi78Ti5J2TOHvvLNKyzePuqT9+6wORcLVY8ypcXaEOCYE6NOTxv6FQ+vlBkiQTpyQic8ZCg8jMaHVaxCfF6wuP8/fP41bqLdxNu1vmp13WbgmC9fEz+aZb+/hAHRqqLyjUoSEcnZOICsRCg6ic0Akd7qbdRWJqIm6l3kJiaqLB/+f++yjrUamWL0GCk40TXNQucLFxgYvaBUMvB8A7XQVrb28ovX2g9PGGtbc3+1YQUbGx0CCyMKlZqcjSZQHIuQJG/9/j/zeY/vhflUIFJ5UTFFYKOaMTkQVioUFEREQmYyV3ACIiIrJcLDSIiIjIZFhoEBERkcmw0CAiIiKTYaFBREREJsNCg4iIiEyGhQYRERGZDAsNIiIiMhkWGkRERGQyLDSIiIjIZFhoEBERkcmw0CAiIiKTYaFBREREJsNCg4iIiEyGhQYRERGZDAsNIiIiMhkWGkRERGQyLDSIiIjIZFhoEBERkcmw0CAiIiKTYaFBREREJsNCg4iIiEyGhQYRERGZDAsNIiIiMhkWGkRERGQyLDSIiIjIZFhoEBERkcmw0CAiIiKTYaFBREREJsNCg4iIiEyGhQYRERGZDAsNIiIiMhkWGkRERGQyLDSIiIjIZFhoEBERkcmw0CAiIiKTYaFBREREJsNCg4iIiEyGhQYRERGZzP8DxSLHXXcu5BEAAAAASUVORK5CYII=", + "image/png": "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fgprbg0ICMDBgweLP5gSKmo/SqUSvr6+usfzVKtWTVcI5nF2dsY///yjt00/P78C6+V/zlJTU5Gamqr7XqFQFDuwDch9Tv/5558SP6dFdQEABd8vjo6OUKlUcHNzK7D87t27xeYqan+3b99GUlISli9fjuXLlz8x8+rVq7Fw4UKcP39eb5De49u9cuUKvL29YWdnp7edoprmVSpVgefL0dGx0NfS0dGx2N+XWrVq4Z133sGiRYsQERGBVq1aoUePHhg0aJCuCOnXrx9WrFiBESNGYNKkSejQoQN69+6NPn366E7WV65cgb+/f4FBhnndmPnfd/lfq7yiIy+rtbU15s2bh3fffReenp547rnn0K1bNwwePBheXl5FHk8eCwsL+Pr66i2rU6cOAOid90pzPiruvZdfdHQ0Tp06hcGDByM2Nla3vG3btvjiiy+QnJwMBweHEm8PgG79lJSUUv1c/twXL14EgCK75oDc86OzszPmz5+PIUOGoHr16mjcuDG6du2KwYMHF3huy0NR52oXF5cCHwrz5D/20p4fSyP/309JklC7du0KeUWkQa46yX8y0mq1kCQJf/zxh171lyf/CbCs/U1arRYeHh5FVvT5T56FZQFQ5CVij0tKSkKbNm3g4OCAWbNmwc/PDyqVCidPnsTEiROL/GT2pPzBwcFYtGhRoY9Xr1691NuU29M8x/ktWLBA71I1Hx+fJ/6SabVadOrUCRMmTCj08bw/DnmKe+8VdixPe3z595f3vhk0aFCRJ+r69esDANatW4fw8HD06tUL7733Hjw8PKBQKPDhhx/i0qVLJdp/YYo6prIe68KFCxEeHo6tW7dix44dePPNN3XjuapVqwYbGxvs378fe/fuxW+//YZt27bhhx9+QPv27bFjx44i91uWY3g861tvvYXu3btjy5Yt2L59O95//318+OGH2LNnT4kuA32S0p6PSnPeW7duHQDg7bffxttvv13g8Y0bNxZoFX6SgIAAAEBUVFSpfq6o9/DHH3+sGyeUX945PywsDK1atcLmzZuxY8cOfPzxx5g3bx42bdqkG8OV/+9JHo1GU6b3hiE9zdgIUz4uYytToXHx4kW9yi42NhZarVb3id3Pzw9CCNSqVavAib2k/Pz8cPToUWRnZxc5mMbPzw+7du1CixYtDDY4pqg3w759+3D37l1s2rRJb9BfXFyc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", "text/plain": [ "
" ] @@ -2202,7 +1841,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2225,7 +1864,7 @@ " 'insulin']" ] }, - "execution_count": 38, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2282,7 +1921,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2304,7 +1943,7 @@ " 'insulin']" ] }, - "execution_count": 39, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -2336,7 +1975,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 36, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2499,7 +2138,7 @@ "└───────────────┴──────────────────────┘" ] }, - "execution_count": 40, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -2551,7 +2190,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2704,7 +2343,7 @@ "└───────────────┴──────────────────────┘" ] }, - "execution_count": 41, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -2783,7 +2422,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 38, "metadata": { "id": "xROO5Oxzvev-" }, From ad515bd1307c8c2ecd1a34e59431805e1dfada27 Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Thu, 23 Feb 2023 18:03:51 +0100 Subject: [PATCH 16/22] saving progress --- .../how-to-guides/diabetes_exploration.ipynb | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index a0788359..243c71b7 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -486,7 +486,7 @@ "\n", "In this particular case, the data owner shared with us a description of the dataset and we know that some column cells have been filled with `?` instead of being left blank.\n", "\n", - "Before we can get an accurate picture of null values, we first need to replace all these `?` values with `null` values. We will do this by using [Polars .when().then().otherwise()`](https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.when.html) functions. \n", + "Before we can get an accurate picture of null values, we first need to replace all these `?` values with `null` values. We will do this by using [Polars `.when().then().otherwise()`](https://pola-rs.github.io/polars/py-polars/html/reference/expressions/api/polars.when.html) functions. \n", "\n", "One final hurdle is that we can only search and replace `?` strings in columns with the `Utf8` (string) datatype - otherwise an error will be produced. This is why we'll grab `pl.Utf8` columns only before we apply our search and replace operation to these strings!\n" ] @@ -1012,14 +1012,16 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "3Gvx_sK5ypgD" }, "source": [ - "### Part II: data analysis and visualization\n", + "## Data analysis and visualization\n", + "_________________________________________\n", "\n", - "So data scientist #2 is now ready to begin their analysis of the cleaned dataset. Just like data scientist #1, they will first need to connect to the server and get the FetchableLazyFrame saved by data scientist #1." + "The dataset is clean and Data scientist #2 is now ready to begin their analysis. Just like Data scientist #1, they will first need to connect to the server and get the FetchableLazyFrame that was previously saved." ] }, { @@ -1057,12 +1059,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "z7-wG7DfzSyI" }, "source": [ - "We can again confirm that the original privacy policy is still in place by running a non-aggreagted query that would violate the policy." + "We'll confirm that the original privacy policy is still in place by running a non-aggreagted query that would violate the policy:" ] }, { @@ -1089,18 +1092,19 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "NfRexmoN0X9h" }, "source": [ - "Now that we are all set-up, we can dive into the analysis.\n", + "We are all set-up, so let's dive into the analysis.\n", "\n", "### Age as a factor in readmission and emergency trips\n", "\n", "Let's start by visualizing the number of patients who were readmitted to hospital for diabetes-related issues during the study.\n", "\n", - "To do this we group data by `age` and aggregate the `sum` of those who were readmitted. We then generate a barplot for this query." + "To do this we group data by `age` and aggregate the `sum` of those who were readmitted. We'll generate a barplot for this query." ] }, { @@ -1134,14 +1138,17 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "BdRDwT74BOrr" }, "source": [ - "In terms of the number of readmissions, we see a clear trend for readmission cases to increase with age, before dropping down in the 80-90 and 90-100 age groups. This may be due to increased mortality in these age ranges.\n", + "In terms of the number of readmissions, we see a clear trend: readmission cases increase with age, before dropping down in the 80-90 and 90-100 age groups. This could be due to increased mortality in these age ranges.\n", "\n", - "However, if we take a look at the mean number of cases per age group using `histplot`, we see that it follows the same trend, showing that this trend may not represent a higher risk of readmission for older patients, but rather a much increased number of diabetes patients in older age groups." + "If we take a look at the mean number of cases per age group using `histplot`, we see that it follows the same trend. But it shows that it may not represent a higher risk of readmission for older patients, rather a much increased number of diabetes patients in older age groups.\n", + "\n", + "***# LAST SENTENCE IS UNCLEAR. WHAT DO YOU MEAN?***" ] }, { @@ -1172,12 +1179,15 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "xPFiho5eEKNT" }, "source": [ - "If we zoom in on `short-term` and `long-term` readmittance individually and get the percentage of patients in these groups who are readmitted, rather than the count, we get a rather different picture.\n", + "If we zoom in on `short-term` and `long-term` readmittance individually and get the percentage of patients in these groups who are readmitted instead of the count, we get a rather different picture.\n", + "\n", + "***# SENTENCE IS TOO LONG. Maybe try to use more direct formulations and cut the sentences more so each one says one thing (2 tops)?***\n", "\n", "To get these percentage values, we divide the total number of short-term or long-term values in the readmitted column by the total values in this column.\n", "\n", From 5e16a051a77f1c9fdbbde9e186bdbbf2c7ada581 Mon Sep 17 00:00:00 2001 From: lyie28 Date: Fri, 24 Feb 2023 09:58:53 +0100 Subject: [PATCH 17/22] resolve --- .../how-to-guides/diabetes_exploration.ipynb | 843 +++++++++++++----- 1 file changed, 608 insertions(+), 235 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index 243c71b7..ae5d29c1 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -51,7 +51,83 @@ "metadata": { "id": "hK-HDaMI_G1j" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: bastionlab in /home/laura/anaconda3/lib/python3.9/site-packages (0.3.7)\n", + "Requirement already satisfied: pyarrow~=10.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (10.0.1)\n", + "Requirement already satisfied: numpy~=1.21 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.24.2)\n", + "Requirement already satisfied: seaborn~=0.12.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.12.2)\n", + "Requirement already satisfied: six~=1.16.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.16.0)\n", + "Requirement already satisfied: cryptography~=38.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (38.0.4)\n", + "Requirement already satisfied: grpcio==1.47.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.47.0)\n", + "Requirement already satisfied: pyserde~=0.9 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.9.8)\n", + "Requirement already satisfied: colorama~=0.4.6 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.4.6)\n", + "Requirement already satisfied: tokenizers==0.13.2 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.13.2)\n", + "Requirement already satisfied: typing-extensions~=4.4 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (4.5.0)\n", + "Requirement already satisfied: protobuf==3.20.2 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (3.20.2)\n", + "Requirement already satisfied: grpcio-tools==1.47.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.47.0)\n", + "Requirement already satisfied: torch==1.13.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.13.1)\n", + "Requirement already satisfied: tqdm~=4.64 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (4.64.1)\n", + "Requirement already satisfied: matplotlib==3.6.3 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (3.6.3)\n", + "Requirement already satisfied: polars==0.14.24 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.14.24)\n", + "Requirement already satisfied: setuptools in /home/laura/anaconda3/lib/python3.9/site-packages (from grpcio-tools==1.47.0->bastionlab) (67.3.3)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (1.0.7)\n", + "Requirement already satisfied: cycler>=0.10 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (0.11.0)\n", + "Requirement already satisfied: pillow>=6.2.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (9.4.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (1.4.4)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (3.0.9)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (4.38.0)\n", + "Requirement already satisfied: packaging>=20.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (23.0)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (2.8.2)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu11==11.7.99 in /home/laura/anaconda3/lib/python3.9/site-packages (from torch==1.13.1->bastionlab) (11.7.99)\n", + "Requirement already satisfied: nvidia-cublas-cu11==11.10.3.66 in /home/laura/anaconda3/lib/python3.9/site-packages (from torch==1.13.1->bastionlab) (11.10.3.66)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/laura/anaconda3/lib/python3.9/site-packages (from torch==1.13.1->bastionlab) (11.7.99)\n", + "Requirement already satisfied: nvidia-cudnn-cu11==8.5.0.96 in /home/laura/anaconda3/lib/python3.9/site-packages (from torch==1.13.1->bastionlab) (8.5.0.96)\n", + "Requirement already satisfied: wheel in /home/laura/anaconda3/lib/python3.9/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch==1.13.1->bastionlab) (0.38.4)\n", + "Requirement already satisfied: cffi>=1.12 in /home/laura/anaconda3/lib/python3.9/site-packages (from cryptography~=38.0->bastionlab) (1.15.1)\n", + "Requirement already satisfied: casefy in /home/laura/anaconda3/lib/python3.9/site-packages (from pyserde~=0.9->bastionlab) (0.1.7)\n", + "Requirement already satisfied: typing_inspect>=0.4.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from pyserde~=0.9->bastionlab) (0.8.0)\n", + "Requirement already satisfied: jinja2 in /home/laura/anaconda3/lib/python3.9/site-packages (from pyserde~=0.9->bastionlab) (3.0.3)\n", + "Requirement already satisfied: pandas>=0.25 in /home/laura/anaconda3/lib/python3.9/site-packages (from seaborn~=0.12.0->bastionlab) (1.5.3)\n", + "Requirement already satisfied: pycparser in /home/laura/anaconda3/lib/python3.9/site-packages (from cffi>=1.12->cryptography~=38.0->bastionlab) (2.21)\n", + "Requirement already satisfied: pytz>=2020.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from pandas>=0.25->seaborn~=0.12.0->bastionlab) (2022.7.1)\n", + "Requirement already satisfied: mypy-extensions>=0.3.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from typing_inspect>=0.4.0->pyserde~=0.9->bastionlab) (0.4.3)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from jinja2->pyserde~=0.9->bastionlab) (2.0.1)\n", + "Requirement already satisfied: bastionlab_server in /home/laura/anaconda3/lib/python3.9/site-packages (0.3.7)\n", + "Requirement already satisfied: gdown in /home/laura/anaconda3/lib/python3.9/site-packages (4.6.4)\n", + "Requirement already satisfied: filelock in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (3.6.0)\n", + "Requirement already satisfied: six in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (1.16.0)\n", + "Requirement already satisfied: requests[socks] in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (2.28.1)\n", + "Requirement already satisfied: beautifulsoup4 in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.11.1)\n", + "Requirement already satisfied: tqdm in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.64.1)\n", + "Requirement already satisfied: soupsieve>1.2 in /home/laura/anaconda3/lib/python3.9/site-packages (from beautifulsoup4->gdown) (2.3.1)\n", + "Requirement already satisfied: charset-normalizer<3,>=2 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2.0.4)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2022.9.14)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (3.3)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (1.26.11)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "Requirement already satisfied: gdown in /home/laura/anaconda3/lib/python3.9/site-packages (4.6.4)\n", + "Requirement already satisfied: six in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (1.16.0)\n", + "Requirement already satisfied: requests[socks] in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (2.28.1)\n", + "Requirement already satisfied: beautifulsoup4 in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.11.1)\n", + "Requirement already satisfied: filelock in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (3.6.0)\n", + "Requirement already satisfied: tqdm in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.64.1)\n", + "Requirement already satisfied: soupsieve>1.2 in /home/laura/anaconda3/lib/python3.9/site-packages (from beautifulsoup4->gdown) (2.3.1)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (1.26.11)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2022.9.14)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (3.3)\n", + "Requirement already satisfied: charset-normalizer<3,>=2 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2.0.4)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "Downloading...\n", + "From: https://drive.google.com/uc?id=1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI\n", + "To: /home/laura/bl4/docs/docs/how-to-guides/updated_diabetes_data.csv\n", + "100%|██████████████████████████████████████| 17.8M/17.8M [00:00<00:00, 35.1MB/s]\n" + ] + } + ], "source": [ "# installing BastionLab client & server packages\n", "!pip install bastionlab\n", @@ -106,7 +182,18 @@ "id": "A85GsYOi_G1o", "outputId": "97b964bd-61b6-4cc6-e5e7-b9f2a2587bd7" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BastionLab server (version 0.3.7) already installed\n", + "Libtorch (version 1.13.1) already installed\n", + "TLS certificates already generated\n", + "Bastionlab server is now running on port 50056\n" + ] + } + ], "source": [ "# launch bastionlab_server test package\n", "import bastionlab_server\n", @@ -171,12 +258,28 @@ "metadata": { "id": "mRJjgd1C_G1t" }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2023-02-23T12:14:14Z INFO bastionlab] Authentication is disabled.\n", + "[2023-02-23T12:14:14Z INFO bastionlab] Telemetry is enabled.\n", + "[2023-02-23T12:14:14Z INFO bastionlab] BastionLab server listening on 0.0.0.0:50056.\n", + "[2023-02-23T12:14:14Z INFO bastionlab] Server ready to take requests\n", + "Error: transport error\n", + "\n", + "Caused by:\n", + " 0: error creating server listener: Address already in use (os error 98)\n", + " 1: Address already in use (os error 98)\n" + ] + } + ], "source": [ "from bastionlab.polars.policy import Policy, Aggregation, Reject\n", "\n", "# defining the dataset's privacy policy\n", - "policy = Policy(Aggregation(min_agg_size=10), unsafe_handling=Reject(), savable=True)" + "policy = Policy(Aggregation(min_agg_size=1), unsafe_handling=Reject(), savable=True)" ] }, { @@ -214,7 +317,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "4ab1725e-7ecc-4750-b004-1df14a191cb9\n" + "fa9a68d1-891c-417e-aea6-44bb1dcbf777\n" ] } ], @@ -276,11 +379,208 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[31mThe query has been rejected by the data owner.\u001b[37m\n" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (101766, 1)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "age\n", + "
\n", + "i64\n", + "
\n", + "8\n", + "
\n", + "12\n", + "
\n", + "26\n", + "
\n", + "31\n", + "
\n", + "46\n", + "
\n", + "58\n", + "
\n", + "65\n", + "
\n", + "73\n", + "
\n", + "85\n", + "
\n", + "93\n", + "
\n", + "47\n", + "
\n", + "67\n", + "
\n", + "...\n", + "
\n", + "79\n", + "
\n", + "45\n", + "
\n", + "66\n", + "
\n", + "75\n", + "
\n", + "80\n", + "
\n", + "88\n", + "
\n", + "60\n", + "
\n", + "76\n", + "
\n", + "88\n", + "
\n", + "75\n", + "
\n", + "85\n", + "
\n", + "79\n", + "
\n", + "
" + ], + "text/plain": [ + "shape: (101766, 1)\n", + "┌─────┐\n", + "│ age │\n", + "│ --- │\n", + "│ i64 │\n", + "╞═════╡\n", + "│ 8 │\n", + "├╌╌╌╌╌┤\n", + "│ 12 │\n", + "├╌╌╌╌╌┤\n", + "│ 26 │\n", + "├╌╌╌╌╌┤\n", + "│ 31 │\n", + "├╌╌╌╌╌┤\n", + "│ ... │\n", + "├╌╌╌╌╌┤\n", + "│ 88 │\n", + "├╌╌╌╌╌┤\n", + "│ 75 │\n", + "├╌╌╌╌╌┤\n", + "│ 85 │\n", + "├╌╌╌╌╌┤\n", + "│ 79 │\n", + "└─────┘" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -347,7 +647,7 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=4ab1725e-7ecc-4750-b004-1df14a191cb9)" + "FetchableLazyFrame(identifier=fa9a68d1-891c-417e-aea6-44bb1dcbf777)" ] }, "execution_count": 8, @@ -977,7 +1277,7 @@ { "data": { "text/plain": [ - "'6fb86802-1702-4f4f-8466-ef5db561ee30'" + "'38676d2f-1eae-41af-b34a-7d4fa19a5f5e'" ] }, "execution_count": 20, @@ -1038,7 +1338,7 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=6fb86802-1702-4f4f-8466-ef5db561ee30)" + "FetchableLazyFrame(identifier=38676d2f-1eae-41af-b34a-7d4fa19a5f5e)" ] }, "execution_count": 22, @@ -1138,7 +1438,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": { "id": "BdRDwT74BOrr" @@ -1319,12 +1618,51 @@ ] }, { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "High or very high A1C levels can indicate an increased risk of diabetes complications. In this dataset, A1C levels are grouped into \"very high\", \"high\", \"normal\" and \"null\" (not taken).\n", + "\n", + "Let's start by using `pieplot` to get a snapshot of the distribution of A1C groups:" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rdf.groupby(\"A1Cresult\").agg(pl.count().alias(\"count\")).pieplot(parts=\"count\", labels=\"A1Cresult\", key=\"False\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see here that in the vast majority of cases, A1C levels were not checked." + ] + }, + { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "S11nqyg0oufI" }, "source": [ - "Next, let's take a look at the impact of A1C levels being checked during the hospital admission on the likelihood of a patient's medication being changed. The higher the level of A1C, the greater the risk of developing diabetes complications is." + "Next, let's take a look at the impact of A1C levels being checked during the hospital admission on the likelihood of a patient's medication being changed." ] }, { @@ -1460,38 +1798,6 @@ "ret.sort(pl.col(\"change\"), reverse=True).collect().fetch()" ] }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can visualize this as a pie chart using the `pieplot` method and pasing it the name of the columns that should be used as `labels` and the name of the column that should be used for the pie chart `parts` or slices." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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J06ePKk139atW0VwcLAwNzcXISEhtRpoq7ptpKCgQEyfPl24u7sLCwsL0aVLF3H06NEK18POnTs1AxmhmoG2srOzxUsvvSQ8PDyEqampCAwMrHKgrXt5e3tXO9Bc2frevHmzmD17tnBxcREWFhZi4MCB4sqVK+Xmr24bE+K/fefNmzerXLYQQrzwwgsCQJXjOcybN09raIDKBgkEKh5YLykpSbz00kuiefPmQqVSCUtLS9GuXTuxePFirf1OZduzEHc+i9mzZ4uAgABhZmYmmjRpIjp37iyWLVumGYPou+++Ew8//LBwcXERZmZmwsvLSzzzzDPixo0bWm399ddf4oEHHtDMs3z58hpdpipE5dtPZfbv3y/atGmjGRxs7dq1Yvr06UKlUmnNV9k2JMSd8TT69esnrK2thaWlpejZs2eF4wvV9H3dPdBWWFiYMDc3F0FBQeX+5hsaSYia/5ycN28e5s+fj5s3b2odR6XqqdVqODs7Y+jQoRUeEqH7s2LFCrz00ku4du0amjZtKnccasB+++039OzZE1u2bKl1Dyg1TEOGDMHZs2crPC9JH3x8fNCqVSv8+OOPsiy/vhjkvUgauoKCgnKHATZs2ID09HTealgH7r0XQkFBAdasWYPAwEAWF0RUpXv3H3Fxcfj555+5b64HvJtqPfjzzz/x0ksvYfjw4XBycsKpU6fw+eefo1WrVhg+fLjc8Rq8oUOHwsvLC+Hh4cjMzMSmTZtw4cKFSi9XJiIq4+fnh3HjxsHPzw9XrlzBJ598AjMzs0ovuaW6Y4FRD3x8fODp6YkPP/wQ6enpcHR0xJgxY/D222/X+Npzqly/fv2wdu1aREVFobS0FCEhIfj6668xYsQIuaMRkYHr378/Nm/ejOTkZJibm6NTp05YsmRJpQNDUt3V6hwMIiIioprgORhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURE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OXmzvnjaemJq26mY2nYqEjITcPj6YRy+fhgnU06isLRQ7nh6c93TAn7HajCjUgmLNuGw6dkT1j17wdzPt96zEZH+8V4kZFCioqIwfvx4ZGZmwsLCQu449yW/JB8nkk9oCo7E7ES5I9WrURnBGPJJxZeSKKysYNWlC6x79YR19+4wkXk0VyKqfywwSFYbNmyAn58fmjZtipiYGDz//PPo0aMHNm3aJHc0nbuSdQWHrx/GoeuHcDK58fVuuJfa4IOltwEAkoUFLEJDYdGmDSw7dIBVxw6QzMxkTkhE+sQCg2S1dOlSrFq1CsnJyXB3d8eQIUOwePFiWFpayh2tXhWXFuNi5kXEpsci9nYs/k3/F7G3YxvklSlKSQkfWx8EOwXjpRutYRPcCqrgIN5kjMjIscAgMiApuSn49/a/WkXHlawrKBWlckeDmcIMrlaucLV0hZetF4IcgxDsGIwWji1gYdKwD2cRke6xwCAycAUlBbiSdQXpBelIL0jH7YLbmv+/+/HtgtvILs6u0zJMFaZwtXSFq5Ur3Kzc4Gbpduf/y/5r5QZHlaOO3xkRNWYsMIgakeLSYqQXpCO3OBcKSQGlpIRSodT6f6VU/jHvJEtEusYCg4iIiHSOt4skIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOdYYBAREZHOscAgIiIinWOBQURERDrHAoOIiIh0jgUGERER6RwLDCIiItI5FhhERESkcywwiIiISOf+D8FOe3PL7KalAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ret.pieplot(\n", - " parts=\"change\",\n", - " labels=\"A1Cresult\",\n", - " title=\"percentage of changes in medication per A1Cresult group\",\n", - ")" - ] - }, { "cell_type": "markdown", "metadata": { @@ -1637,30 +1943,6 @@ "ret.sort(pl.col(\"short-term readmitted\"), reverse=True).collect().fetch()" ] }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ret.pieplot(\n", - " parts=\"short-term readmitted\",\n", - " labels=\"A1Cresult\",\n", - " title=\"percentage of short-term readmissons per A1Cresult group\",\n", - ")" - ] - }, { "cell_type": "code", "execution_count": 32, @@ -1796,30 +2078,6 @@ "ret.sort(pl.col(\"long-term readmitted\"), reverse=True).collect().fetch()" ] }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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fgprbg0ICMDBgweLP5gSKmo/SqUSvr6+usfzVKtWTVcI5nF2dsY///yjt00/P78C6+V/zlJTU5Gamqr7XqFQFDuwDch9Tv/5558SP6dFdQEABd8vjo6OUKlUcHNzK7D87t27xeYqan+3b99GUlISli9fjuXLlz8x8+rVq7Fw4UKcP39eb5De49u9cuUKvL29YWdnp7edoprmVSpVgefL0dGx0NfS0dGx2N+XWrVq4Z133sGiRYsQERGBVq1aoUePHhg0aJCuCOnXrx9WrFiBESNGYNKkSejQoQN69+6NPn366E7WV65cgb+/f4FBhnndmPnfd/lfq7yiIy+rtbU15s2bh3fffReenp547rnn0K1bNwwePBheXl5FHk8eCwsL+Pr66i2rU6cOAOid90pzPiruvZdfdHQ0Tp06hcGDByM2Nla3vG3btvjiiy+QnJwMBweHEm8PgG79lJSUUv1c/twXL14EgCK75oDc86OzszPmz5+PIUOGoHr16mjcuDG6du2KwYMHF3huy0NR52oXF5cCHwrz5D/20p4fSyP/309JklC7du0KeUWkQa46yX8y0mq1kCQJf/zxh171lyf/CbCs/U1arRYeHh5FVvT5T56FZQFQ5CVij0tKSkKbNm3g4OCAWbNmwc/PDyqVCidPnsTEiROL/GT2pPzBwcFYtGhRoY9Xr1691NuU29M8x/ktWLBA71I1Hx+fJ/6SabVadOrUCRMmTCj08bw/DnmKe+8VdixPe3z595f3vhk0aFCRJ+r69esDANatW4fw8HD06tUL7733Hjw8PKBQKPDhhx/i0qVLJdp/YYo6prIe68KFCxEeHo6tW7dix44dePPNN3XjuapVqwYbGxvs378fe/fuxW+//YZt27bhhx9+QPv27bFjx44i91uWY3g861tvvYXu3btjy5Yt2L59O95//318+OGH2LNnT4kuA32S0p6PSnPeW7duHQDg7bffxttvv13g8Y0bNxZoFX6SgIAAAEBUVFSpfq6o9/DHH3+sGyeUX945PywsDK1atcLmzZuxY8cOfPzxx5g3bx42bdqkG8OV/+9JHo1GU6b3hiE9zdgIUz4uYytToXHx4kW9yi42NhZarVb3id3Pzw9CCNSqVavAib2k/Pz8cPToUWRnZxc5mMbPzw+7du1CixYtDDY4pqg3w759+3D37l1s2rRJb9BfXFyc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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ret.pieplot(\n", - " parts=\"long-term readmitted\",\n", - " labels=\"A1Cresult\",\n", - " title=\"percentage of long-term readmissons per A1Cresult group\",\n", - ")" - ] - }, { "cell_type": "markdown", "metadata": { @@ -1830,28 +2088,110 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "TjaMlnbQIWcJ" }, "source": [ - "### Dosage increases and decreases as factors on overall readmission" + "### Medication as factor on overall readmission\n", + "\n", + "For the next part of our analysis, we will look at how treatment with different medications led to above or below average patient readmission.\n", + "\n", + "Let's start by getting the percentage of all patients in the study who were readmitted to hospital in the short or long-term." ] }, { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "shape: (1, 1)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "readmitted %\n", + "
\n", + "f64\n", + "
\n", + "46.088084\n", + "
\n", + "
" + ], + "text/plain": [ + "shape: (1, 1)\n", + "┌──────────────┐\n", + "│ readmitted % │\n", + "│ --- │\n", + "│ f64 │\n", + "╞══════════════╡\n", + "│ 46.088084 │\n", + "└──────────────┘" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rdf.select((pl.col(\"is_readmitted\").sum() / pl.col(\"is_readmitted\").count() * 100).alias(\"readmitted %\")).collect().fetch()" + ] + }, + { + "attachments": {}, "cell_type": "markdown", - "metadata": { - "id": "4dzRa_RN2_Oq" - }, + "metadata": {}, "source": [ - "We will now investigate the likelihood of increases or decreases of specific medications leading to short-term patient readmission.\n", + "Next let's get the percentage of patients readmitted to hospital for each medication, regardless of whether dosage was increased, decreased or remained the same.\n", "\n", - "Let's start by getting a list of the medications we want to look at. We will these lists down to drugs with more than 20 results to remove any medication with only a handful of results." + "Let's start by getting a list of the medications we want to look at. We will narrow this list down to drugs with more than 30 rows of data (\"increased\", \"steady\" or \"decreased\" dosage) to remove any medication with only a handful of results." ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 69, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1866,15 +2206,20 @@ "['metformin',\n", " 'repaglinide',\n", " 'nateglinide',\n", + " 'chlorpropamide',\n", " 'glimepiride',\n", " 'glipizide',\n", " 'glyburide',\n", " 'pioglitazone',\n", " 'rosiglitazone',\n", - " 'insulin']" + " 'acarbose',\n", + " 'miglitol',\n", + " 'tolazamide',\n", + " 'insulin',\n", + " 'glyburide-metformin']" ] }, - "execution_count": 34, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -1907,85 +2252,34 @@ " \"metformin-pioglitazone\",\n", "]\n", "\n", - "# get the number of increased doses per medication and flip the output vertically\n", - "increased_meds = rdf.select(\n", - " pl.col(x).str.count_match(\"Up\").sum() for x in all_meds\n", - ").melt(variable_name=\"medication\", value_name=\"count\")\n", - "\n", - "# remove any medications that don't have at least 100 rows of data and get this result as a Polars dataframe\n", - "increased_meds = increased_meds.filter(pl.col(\"count\") > 20).collect().fetch()\n", - "\n", - "# convert output to a list via Pandas API\n", - "increased_meds = increased_meds.to_pandas()[\"medication\"].tolist()\n", - "increased_meds" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "GFA1-rz29W0X" - }, - "source": [ - "We now do exactly the same for decreased medications." - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Ctt-Bg4f9dVH", - "outputId": "5b122acc-26ea-483b-9008-79b121fab3ed" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "['metformin',\n", - " 'repaglinide',\n", - " 'glimepiride',\n", - " 'glipizide',\n", - " 'glyburide',\n", - " 'pioglitazone',\n", - " 'rosiglitazone',\n", - " 'insulin']" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# get the number of increased doses per medication and flip the output vertically\n", - "decreased_meds = rdf.select(\n", - " pl.col(x).str.count_match(\"Down\").sum() for x in all_meds\n", + "# get the number of increased, decreased and stable doses per medication and flip the output vertically\n", + "meds = rdf.select(\n", + " pl.col(x).count() - pl.col(x).str.count_match(\"No\").sum() for x in all_meds\n", ").melt(variable_name=\"medication\", value_name=\"count\")\n", "\n", "# remove any medications that don't have at least 100 rows of data and get this result as a Polars dataframe\n", - "decreased_meds = decreased_meds.filter(pl.col(\"count\") > 20).collect().fetch()\n", + "meds = meds.filter(pl.col(\"count\") > 30).collect().fetch()\n", "\n", "# convert output to a list via Pandas API\n", - "decreased_meds = decreased_meds.to_pandas()[\"medication\"].tolist()\n", - "decreased_meds" + "meds = meds.to_pandas()[\"medication\"].tolist()\n", + "meds" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "Y_9as5FlqoZV" }, "source": [ - "The next step is to loop over our list of `increased_meds` and get the percentage of patients who were readmitted to hospital within the following month after their dose of the drug was increased. We are able to use the `vstack` function to append each result for each drug into one table.\n", + "The next step is to loop over our list of `meds`. On each iteration, we filter out any \"no\" values, indicating that a patient did not follow this treatment, and get the percentage of patients who were readmitted to hospital. We are able to use the `vstack` function to append each result for each drug into one table.\n", "\n", - "We then simply add a column with the list of medicines in the same order and sort the list from highest to lowest." + "We then add a column with the list of medicines in the same order and sort the list from lowest to highest percentage of readmissions." ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 70, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2025,7 +2319,7 @@ " }\n", "\n", "\n", - "shape: (9, 2)\n", + "shape: (14, 2)\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", @@ -2058,15 +2352,15 @@ ""metformin"\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", @@ -2074,23 +2368,55 @@ ""glyburide"\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", @@ -2098,23 +2424,31 @@ ""glipizide"\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", @@ -2122,33 +2456,33 @@ "" ], "text/plain": [ - "shape: (9, 2)\n", - "┌───────────────┬──────────────────────┐\n", - "│ medication ┆ overall readmitted % │\n", - "│ --- ┆ --- │\n", - "│ str ┆ f64 │\n", - "╞═══════════════╪══════════════════════╡\n", - "│ rosiglitazone ┆ 39.88764 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ metformin ┆ 40.76851 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ glimepiride ┆ 42.507645 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ glyburide ┆ 44.211823 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ ... ┆ ... │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ repaglinide ┆ 48.181818 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ glipizide ┆ 50.0 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ insulin ┆ 51.537646 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ pioglitazone ┆ 51.709402 │\n", - "└───────────────┴──────────────────────┘" + "shape: (14, 2)\n", + "┌────────────────┬──────────────────────┐\n", + "│ medication ┆ overall readmitted % │\n", + "│ --- ┆ --- │\n", + "│ str ┆ f64 │\n", + "╞════════════════╪══════════════════════╡\n", + "│ tolazamide ┆ 33.333333 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ metformin ┆ 43.250951 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ chlorpropamide ┆ 45.348837 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ glyburide ┆ 45.539906 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ ... ┆ ... │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ glipizide ┆ 48.730884 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ repaglinide ┆ 54.905783 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ acarbose ┆ 59.415584 │\n", + "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", + "│ miglitol ┆ 63.157895 │\n", + "└────────────────┴──────────────────────┘" ] }, - "execution_count": 36, + "execution_count": 70, "metadata": {}, "output_type": "execute_result" } @@ -2158,49 +2492,86 @@ "table = None\n", "\n", "# iterate over medications list\n", - "for drugs in increased_meds:\n", - " # filter data down to cases where dosage increased\n", - " tmp = rdf.filter(pl.col(drugs) == \"Up\")\n", - " # get a RemoteLazyFrame of percentages of patients where each drug is increased were readmitted to hospital during study\n", - " percentages = tmp.select(\n", + "for drugs in meds:\n", + " # filter data down to cases where dosage was steady, increased or decreased\n", + " tmp = rdf.filter(pl.col(drugs) != \"No\").select(\n", " [\n", " (\n", " pl.col(\"is_readmitted\").sum() / pl.col(\"is_readmitted\").count() * 100\n", " ).alias(\"overall readmitted %\"),\n", " ]\n", " )\n", - " # if first iteration, table and data_avilable are assigned percentages and row_count tables\n", + " # if first iteration, table give value of our tmp query, otherwise tmp query appended to end of table\n", " if table == None:\n", - " table = percentages\n", - " # else we use vstack to add new row of percentages\n", + " table = tmp\n", " else:\n", - " table = table.vstack(percentages)\n", + " table = table.vstack(tmp)\n", "\n", "# convert table to Polars dataframe\n", "table = table.collect().fetch()\n", "\n", - "# create and add new column with medication names\n", - "new_col = pl.Series(\"medication\", increased_meds)\n", - "table = table.with_columns([new_col])\n", - "table.select([\"medication\", \"overall readmitted %\"]).sort(\n", + "# create and add new column with medication names in same order as iteration and disaply results\n", + "new_col = pl.Series(\"medication\", meds)\n", + "table.with_columns([new_col]).select([\"medication\", \"overall readmitted %\"]).sort(\n", " pl.col(\"overall readmitted %\")\n", ")" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "PtGj-w4OrU_5" }, "source": [ - "This gives us significiant results that merit further exploration with a difference of around 14% between the likelihood of an increased dose of our lowest and highest placed drugs on the list leading to readmission within the course of the study.\n", + "This gives us significiant results with 12-13% less patients taking `tolazamide` or `tolbutamide` readmitted to hospital than the overall average, while 17% more patients taking `miglitol` were readmitted!\n", "\n", - "We can run the same query for a reduction in medication, again leading to significant results." + "There may be medical explanations for this such as certain drugs being linked to more complex cases.\n", + "\n", + "We can equally repeat the same process but zoom in just on dosages that were increased (`Up`), `decreased` (`Down`) or `steady` (`Steady`). In this case, let's take a look at dosages that were `decreased`. Feel free to replace the DOSAGE variable with `decreased` or `steady` or the condition to check for short or long-term readmissions only and re-run the cell if you want to take a look at how they compare." ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['metformin',\n", + " 'repaglinide',\n", + " 'glimepiride',\n", + " 'glipizide',\n", + " 'glyburide',\n", + " 'pioglitazone',\n", + " 'rosiglitazone',\n", + " 'insulin']" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# get the number of decreased doses per medication and flip the output vertically\n", + "DOSAGE = \"Down\"\n", + "meds = rdf.select(\n", + " pl.col(x).str.count_match(\"Down\").sum() for x in all_meds\n", + ").melt(variable_name=\"medication\", value_name=\"count\")\n", + "\n", + "# remove any medications that don't have at least 100 rows of data and get this result as a Polars dataframe\n", + "meds = meds.filter(pl.col(\"count\") > 30).collect().fetch()\n", + "\n", + "# convert output to a list via Pandas API\n", + "meds = meds.to_pandas()[\"medication\"].tolist()\n", + "meds" + ] + }, + { + "cell_type": "code", + "execution_count": 67, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2353,7 +2724,7 @@ "└───────────────┴──────────────────────┘" ] }, - "execution_count": 37, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } @@ -2363,9 +2734,9 @@ "table = None\n", "\n", "# iterate over medications list\n", - "for drugs in decreased_meds:\n", + "for drugs in meds:\n", " # filter data down to cases where dosage increased\n", - " tmp = rdf.filter(pl.col(drugs) == \"Down\")\n", + " tmp = rdf.filter(pl.col(drugs) == DOSAGE)\n", " # get a RemoteLazyFrame of percentages of patients where each drug is increased were readmitted to hospital during study\n", " percentages = tmp.select(\n", " [\n", @@ -2382,7 +2753,7 @@ " table = table.vstack(percentages)\n", "\n", "table = table.collect().fetch()\n", - "new_col = pl.Series(\"medication\", decreased_meds)\n", + "new_col = pl.Series(\"medication\", meds)\n", "table = table.with_columns([new_col])\n", "table.select([\"medication\", \"overall readmitted %\"]).sort(\n", " pl.col(\"overall readmitted %\")\n", @@ -2390,17 +2761,19 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "DuMXzt7zIHp3" }, "source": [ - "We see that the first four drugs (rosiglitazone, metformin, glimepiride and glyburide) and last four drugs (repaglinide, insulin, glipizide and pioglitazone) in each list are the same, which could suggest that they are more effective overall treatments, regardless of whether they are increased or decreased. \n", + "Here we see that patients with a decreased dosage of `rosiglitazone` were readmitted at a rate well below avergae. Meanwhile, patients who decreased their dosage of `insulin`, `glipizide` or `pioglitazone` were all at least 6% more likely to be readmitted to hospital.\n", "\n", - "However, this could also be explained by these medications being prescribed for milder diabetes or these being the go-to drugs, aka. the bottom four drugs are only prescribed when patients are not responding well to medication. This would need to be considered by the client." + "These results could helpe us to flag medications which are riskier to decrease or encourage us to decrease the dosages of others." ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "cSU9X1fDvvZQ" @@ -2410,17 +2783,17 @@ "\n", "This brings us to the end of our data exploration. We gained meaningful insights:\n", "\n", - " - 20-30 year olds are the most at-risk age group of short-term hospital readmission and emergency visits.\n", + "- 20-30 year olds are the most at-risk age group of short-term hospital readmission and emergency visits.\n", " \n", - " - The number of hospital admissions per age group increases with age.\n", + "- The number of hospital admissions per age group increases with age.\n", "\n", - " - Taking patients' A1C levels may encourage doctors to make changes in medication.\n", + "- Taking patients' A1C levels may encourage doctors to make changes in medication.\n", " \n", - " - Not taking patients' A1C levels may increase the likelihood of hospital readmissions.\n", + "- Not taking patients' A1C levels may increase the likelihood of hospital readmissions.\n", "\n", - " - Regardless of dosage increases or decreases, the following medications appear most effective at reducing hospital readmissions: rosiglitazone, metformin, glimepiride and glyburide.\n", + "- Patients following a treatment of `tolazamide` or `tolbutamide` were readmitted at a well below avergae rate, while those taking `miglitol` were readmitted at a rate well above average.\n", "\n", - " - Regardless of dosage increases or decreases, the following medications appear less effective at reducing hospital readmissions: repaglinide, insulin, glipizide and pioglitazone.\n", + "- Patients with a decreased dose of `rosiglitazone` were readmitted well below the average rate of readmission, while those with with a decreased dose of `insulin`, `glipizide` or `pioglitazone` readmitted at a significantly above average rate.\n", "\n", "\n", "This is a rich dataset with many avenues to explore, so feel free to continue exploring!\n", @@ -2432,7 +2805,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": { "id": "xROO5Oxzvev-" }, From ba910e7a0b98e5c096c3f5a91be7c312f5a22223 Mon Sep 17 00:00:00 2001 From: lyie28 Date: Fri, 24 Feb 2023 14:41:08 +0100 Subject: [PATCH 18/22] wip --- .../how-to-guides/diabetes_exploration.ipynb | 550 ++++++++++++++---- 1 file changed, 422 insertions(+), 128 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index ae5d29c1..1b4a51df 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 40, "metadata": { "id": "hK-HDaMI_G1j" }, @@ -57,40 +57,40 @@ "output_type": "stream", "text": [ "Requirement already satisfied: bastionlab in /home/laura/anaconda3/lib/python3.9/site-packages (0.3.7)\n", - "Requirement already satisfied: pyarrow~=10.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (10.0.1)\n", - "Requirement already satisfied: numpy~=1.21 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.24.2)\n", + "Requirement already satisfied: grpcio-tools==1.47.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.47.0)\n", + "Requirement already satisfied: colorama~=0.4.6 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.4.6)\n", + "Requirement already satisfied: cryptography~=38.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (38.0.4)\n", "Requirement already satisfied: seaborn~=0.12.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.12.2)\n", + "Requirement already satisfied: pyarrow~=10.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (10.0.1)\n", + "Requirement already satisfied: tqdm~=4.64 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (4.64.1)\n", + "Requirement already satisfied: matplotlib==3.6.3 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (3.6.3)\n", "Requirement already satisfied: six~=1.16.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.16.0)\n", - "Requirement already satisfied: cryptography~=38.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (38.0.4)\n", - "Requirement already satisfied: grpcio==1.47.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.47.0)\n", "Requirement already satisfied: pyserde~=0.9 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.9.8)\n", - "Requirement already satisfied: colorama~=0.4.6 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.4.6)\n", + "Requirement already satisfied: numpy~=1.21 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.24.2)\n", + "Requirement already satisfied: polars==0.14.24 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.14.24)\n", + "Requirement already satisfied: torch==1.13.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.13.1)\n", "Requirement already satisfied: tokenizers==0.13.2 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.13.2)\n", "Requirement already satisfied: typing-extensions~=4.4 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (4.5.0)\n", + "Requirement already satisfied: grpcio==1.47.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.47.0)\n", "Requirement already satisfied: protobuf==3.20.2 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (3.20.2)\n", - "Requirement already satisfied: grpcio-tools==1.47.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.47.0)\n", - "Requirement already satisfied: torch==1.13.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (1.13.1)\n", - "Requirement already satisfied: tqdm~=4.64 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (4.64.1)\n", - "Requirement already satisfied: matplotlib==3.6.3 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (3.6.3)\n", - "Requirement already satisfied: polars==0.14.24 in /home/laura/anaconda3/lib/python3.9/site-packages (from bastionlab) (0.14.24)\n", "Requirement already satisfied: setuptools in /home/laura/anaconda3/lib/python3.9/site-packages (from grpcio-tools==1.47.0->bastionlab) (67.3.3)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (1.0.7)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (4.38.0)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (2.8.2)\n", "Requirement already satisfied: cycler>=0.10 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (0.11.0)\n", - "Requirement already satisfied: pillow>=6.2.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (9.4.0)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (1.0.7)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (1.4.4)\n", - "Requirement already satisfied: pyparsing>=2.2.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (3.0.9)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (4.38.0)\n", "Requirement already satisfied: packaging>=20.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (23.0)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (2.8.2)\n", + "Requirement already satisfied: pillow>=6.2.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (9.4.0)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from matplotlib==3.6.3->bastionlab) (3.0.9)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu11==11.7.99 in /home/laura/anaconda3/lib/python3.9/site-packages (from torch==1.13.1->bastionlab) (11.7.99)\n", "Requirement already satisfied: nvidia-cublas-cu11==11.10.3.66 in /home/laura/anaconda3/lib/python3.9/site-packages (from torch==1.13.1->bastionlab) (11.10.3.66)\n", - "Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/laura/anaconda3/lib/python3.9/site-packages (from torch==1.13.1->bastionlab) (11.7.99)\n", "Requirement already satisfied: nvidia-cudnn-cu11==8.5.0.96 in /home/laura/anaconda3/lib/python3.9/site-packages (from torch==1.13.1->bastionlab) (8.5.0.96)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu11==11.7.99 in /home/laura/anaconda3/lib/python3.9/site-packages (from torch==1.13.1->bastionlab) (11.7.99)\n", "Requirement already satisfied: wheel in /home/laura/anaconda3/lib/python3.9/site-packages (from nvidia-cublas-cu11==11.10.3.66->torch==1.13.1->bastionlab) (0.38.4)\n", "Requirement already satisfied: cffi>=1.12 in /home/laura/anaconda3/lib/python3.9/site-packages (from cryptography~=38.0->bastionlab) (1.15.1)\n", "Requirement already satisfied: casefy in /home/laura/anaconda3/lib/python3.9/site-packages (from pyserde~=0.9->bastionlab) (0.1.7)\n", - "Requirement already satisfied: typing_inspect>=0.4.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from pyserde~=0.9->bastionlab) (0.8.0)\n", "Requirement already satisfied: jinja2 in /home/laura/anaconda3/lib/python3.9/site-packages (from pyserde~=0.9->bastionlab) (3.0.3)\n", + "Requirement already satisfied: typing_inspect>=0.4.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from pyserde~=0.9->bastionlab) (0.8.0)\n", "Requirement already satisfied: pandas>=0.25 in /home/laura/anaconda3/lib/python3.9/site-packages (from seaborn~=0.12.0->bastionlab) (1.5.3)\n", "Requirement already satisfied: pycparser in /home/laura/anaconda3/lib/python3.9/site-packages (from cffi>=1.12->cryptography~=38.0->bastionlab) (2.21)\n", "Requirement already satisfied: pytz>=2020.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from pandas>=0.25->seaborn~=0.12.0->bastionlab) (2022.7.1)\n", @@ -98,33 +98,34 @@ "Requirement already satisfied: MarkupSafe>=2.0 in /home/laura/anaconda3/lib/python3.9/site-packages (from jinja2->pyserde~=0.9->bastionlab) (2.0.1)\n", "Requirement already satisfied: bastionlab_server in /home/laura/anaconda3/lib/python3.9/site-packages (0.3.7)\n", "Requirement already satisfied: gdown in /home/laura/anaconda3/lib/python3.9/site-packages (4.6.4)\n", + "Requirement already satisfied: beautifulsoup4 in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.11.1)\n", "Requirement already satisfied: filelock in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (3.6.0)\n", - "Requirement already satisfied: six in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (1.16.0)\n", "Requirement already satisfied: requests[socks] in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (2.28.1)\n", - "Requirement already satisfied: beautifulsoup4 in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.11.1)\n", + "Requirement already satisfied: six in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (1.16.0)\n", "Requirement already satisfied: tqdm in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.64.1)\n", "Requirement already satisfied: soupsieve>1.2 in /home/laura/anaconda3/lib/python3.9/site-packages (from beautifulsoup4->gdown) (2.3.1)\n", - "Requirement already satisfied: charset-normalizer<3,>=2 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2.0.4)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2022.9.14)\n", "Requirement already satisfied: idna<4,>=2.5 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (3.3)\n", "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (1.26.11)\n", + "Requirement already satisfied: charset-normalizer<3,>=2 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2.0.4)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2022.9.14)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (1.7.1)\n", + "E0224 14:17:48.523615365 189320 backup_poller.cc:136] Run client channel backup poller: {\"created\":\"@1677244668.523548360\",\"description\":\"pollset_work\",\"file\":\"src/core/lib/iomgr/ev_epoll1_linux.cc\",\"file_line\":247,\"referenced_errors\":[{\"created\":\"@1677244668.523546282\",\"description\":\"Bad file descriptor\",\"errno\":9,\"file\":\"src/core/lib/iomgr/ev_epoll1_linux.cc\",\"file_line\":732,\"os_error\":\"Bad file descriptor\",\"syscall\":\"epoll_wait\"}]}\n", "Requirement already satisfied: gdown in /home/laura/anaconda3/lib/python3.9/site-packages (4.6.4)\n", - "Requirement already satisfied: six in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (1.16.0)\n", - "Requirement already satisfied: requests[socks] in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (2.28.1)\n", - "Requirement already satisfied: beautifulsoup4 in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.11.1)\n", - "Requirement already satisfied: filelock in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (3.6.0)\n", "Requirement already satisfied: tqdm in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.64.1)\n", + "Requirement already satisfied: filelock in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (3.6.0)\n", + "Requirement already satisfied: beautifulsoup4 in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (4.11.1)\n", + "Requirement already satisfied: requests[socks] in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (2.28.1)\n", + "Requirement already satisfied: six in /home/laura/anaconda3/lib/python3.9/site-packages (from gdown) (1.16.0)\n", "Requirement already satisfied: soupsieve>1.2 in /home/laura/anaconda3/lib/python3.9/site-packages (from beautifulsoup4->gdown) (2.3.1)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (1.26.11)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2022.9.14)\n", - "Requirement already satisfied: idna<4,>=2.5 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (3.3)\n", "Requirement already satisfied: charset-normalizer<3,>=2 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2.0.4)\n", + "Requirement already satisfied: idna<4,>=2.5 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (3.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (2022.9.14)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (1.26.11)\n", "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/laura/anaconda3/lib/python3.9/site-packages (from requests[socks]->gdown) (1.7.1)\n", "Downloading...\n", "From: https://drive.google.com/uc?id=1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI\n", "To: /home/laura/bl4/docs/docs/how-to-guides/updated_diabetes_data.csv\n", - "100%|██████████████████████████████████████| 17.8M/17.8M [00:00<00:00, 35.1MB/s]\n" + "100%|██████████████████████████████████████| 17.8M/17.8M [00:00<00:00, 35.4MB/s]\n" ] } ], @@ -174,7 +175,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 41, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -217,7 +218,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 42, "metadata": { "id": "6zzV7xrs_G1q" }, @@ -254,7 +255,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 43, "metadata": { "id": "mRJjgd1C_G1t" }, @@ -263,15 +264,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "[2023-02-23T12:14:14Z INFO bastionlab] Authentication is disabled.\n", - "[2023-02-23T12:14:14Z INFO bastionlab] Telemetry is enabled.\n", - "[2023-02-23T12:14:14Z INFO bastionlab] BastionLab server listening on 0.0.0.0:50056.\n", - "[2023-02-23T12:14:14Z INFO bastionlab] Server ready to take requests\n", - "Error: transport error\n", - "\n", - "Caused by:\n", - " 0: error creating server listener: Address already in use (os error 98)\n", - " 1: Address already in use (os error 98)\n" + "[2023-02-24T13:17:57Z INFO bastionlab] Authentication is disabled.\n", + "[2023-02-24T13:17:57Z INFO bastionlab] Telemetry is enabled.\n", + "[2023-02-24T13:17:57Z INFO bastionlab] BastionLab server listening on 0.0.0.0:50056.\n", + "[2023-02-24T13:17:57Z INFO bastionlab] Server ready to take requests\n" ] } ], @@ -304,7 +300,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -313,11 +309,22 @@ "outputId": "d8505f8e-5853-4adf-97f5-d6105db30761" }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Error: transport error\n", + "\n", + "Caused by:\n", + " 0: error creating server listener: Address already in use (os error 98)\n", + " 1: Address already in use (os error 98)\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "fa9a68d1-891c-417e-aea6-44bb1dcbf777\n" + "67e8e823-6d51-4f8a-ac68-846250990a35\n" ] } ], @@ -369,7 +376,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -578,7 +585,7 @@ "└─────┘" ] }, - "execution_count": 6, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -605,7 +612,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 46, "metadata": { "id": "mcM4pR6D_G11" }, @@ -635,7 +642,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -647,10 +654,10 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=fa9a68d1-891c-417e-aea6-44bb1dcbf777)" + "FetchableLazyFrame(identifier=67e8e823-6d51-4f8a-ac68-846250990a35)" ] }, - "execution_count": 8, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -675,7 +682,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 48, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -729,7 +736,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 49, "metadata": { "id": "s0NI6rTqOKWN" }, @@ -793,7 +800,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 50, "metadata": { "id": "F2KwhZB_fTC3" }, @@ -835,7 +842,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 51, "metadata": { "id": "SAqqUz6I_G16" }, @@ -863,7 +870,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 52, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -966,7 +973,7 @@ "└─────────────┴─────────────────┘" ] }, - "execution_count": 13, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -1026,7 +1033,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 53, "metadata": { "id": "FgyrnPAlsZ0u" }, @@ -1068,7 +1075,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 54, "metadata": { "id": "9cca9DhSw6We" }, @@ -1113,7 +1120,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 55, "metadata": { "id": "2EC3smnWc06Q" }, @@ -1154,7 +1161,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 56, "metadata": { "id": "B2JGdBhmteAz" }, @@ -1188,7 +1195,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 57, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1203,7 +1210,7 @@ "[polars.datatypes.Utf8]" ] }, - "execution_count": 18, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } @@ -1216,7 +1223,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 58, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1231,7 +1238,7 @@ "[polars.datatypes.Boolean]" ] }, - "execution_count": 19, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } @@ -1264,7 +1271,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 59, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1277,10 +1284,10 @@ { "data": { "text/plain": [ - "'38676d2f-1eae-41af-b34a-7d4fa19a5f5e'" + "'216fff2d-24dd-47b9-9c3d-3828595537d4'" ] }, - "execution_count": 20, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -1302,7 +1309,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 60, "metadata": { "id": "qoiADM1W6OC_" }, @@ -1326,7 +1333,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 61, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1338,10 +1345,10 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=38676d2f-1eae-41af-b34a-7d4fa19a5f5e)" + "FetchableLazyFrame(identifier=216fff2d-24dd-47b9-9c3d-3828595537d4)" ] }, - "execution_count": 22, + "execution_count": 61, "metadata": {}, "output_type": "execute_result" } @@ -1370,7 +1377,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 62, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1380,11 +1387,208 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[31mThe query has been rejected by the data owner.\u001b[37m\n" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "
\n", @@ -2047,10 +2341,10 @@ "
\n", - ""rosiglitazone"\n", + ""tolazamide"\n", "\n", - "39.88764\n", + "33.333333\n", "
\n", - "40.76851\n", + "43.250951\n", "
\n", - ""glimepiride"\n", + ""chlorpropamide...\n", "\n", - "42.507645\n", + "45.348837\n", "
\n", - "44.211823\n", + "45.539906\n", "
\n", - ""nateglinide"\n", + ""glimepiride"\n", "\n", - "45.833333\n", + "46.946638\n", "
\n", - ""repaglinide"\n", + ""glyburide-metf...\n", + "\n", + "47.592068\n", + "
\n", + ""insulin"\n", + "\n", + "48.171304\n", + "
\n", + ""pioglitazone"\n", "\n", - "48.181818\n", + "48.185044\n", + "
\n", + ""rosiglitazone"\n", + "\n", + "48.295365\n", + "
\n", + ""nateglinide"\n", + "\n", + "48.648649\n", "
\n", - "50.0\n", + "48.730884\n", "
\n", - ""insulin"\n", + ""repaglinide"\n", "\n", - "51.537646\n", + "54.905783\n", "
\n", - ""pioglitazone"\n", + ""acarbose"\n", "\n", - "51.709402\n", + "59.415584\n", + "
\n", + ""miglitol"\n", + "\n", + "63.157895\n", "
\n", + "shape: (101766, 1)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "age\n", + "
\n", + "i64\n", + "
\n", + "0\n", + "
\n", + "10\n", + "
\n", + "20\n", + "
\n", + "30\n", + "
\n", + "40\n", + "
\n", + "50\n", + "
\n", + "60\n", + "
\n", + "70\n", + "
\n", + "80\n", + "
\n", + "90\n", + "
\n", + "40\n", + "
\n", + "60\n", + "
\n", + "...\n", + "
\n", + "70\n", + "
\n", + "40\n", + "
\n", + "60\n", + "
\n", + "70\n", + "
\n", + "80\n", + "
\n", + "80\n", + "
\n", + "60\n", + "
\n", + "70\n", + "
\n", + "80\n", + "
\n", + "70\n", + "
\n", + "80\n", + "
\n", + "70\n", + "
\n", + "" + ], + "text/plain": [ + "shape: (101766, 1)\n", + "┌─────┐\n", + "│ age │\n", + "│ --- │\n", + "│ i64 │\n", + "╞═════╡\n", + "│ 0 │\n", + "├╌╌╌╌╌┤\n", + "│ 10 │\n", + "├╌╌╌╌╌┤\n", + "│ 20 │\n", + "├╌╌╌╌╌┤\n", + "│ 30 │\n", + "├╌╌╌╌╌┤\n", + "│ ... │\n", + "├╌╌╌╌╌┤\n", + "│ 80 │\n", + "├╌╌╌╌╌┤\n", + "│ 70 │\n", + "├╌╌╌╌╌┤\n", + "│ 80 │\n", + "├╌╌╌╌╌┤\n", + "│ 70 │\n", + "└─────┘" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -1409,7 +1613,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 63, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1452,7 +1656,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 64, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1499,7 +1703,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 65, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1574,7 +1778,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 66, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1629,12 +1833,12 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 78, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAFICAYAAABNxXXCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAvqUlEQVR4nO3dd3hUVeI+8PdOSSaZ9F4IgQAhARIQCV06izQRBZQeQOyruywKwoqg4ioWxGV1wc5PsSAKKsouINIFFAKhhfRGSEIgpGcymfn9wdcskZowM2fOzPt5Hp4lkzv3vrLh5cy55Shms9kMIiKSlkp0ACIiujUsciIiybHIiYgkxyInIpIci5yISHIsciIiybHIiYgkxyInIpIci5yISHIsciIiybHIiYgkxyInIpIci5yISHIsciIiybHIiYgkxyInIpIci5yISHIsciIiybHIiYgkxyInIpIci5yISHIsciIiybHIiYgkxyInIpIci5yISHIsciIiybHIiYgkxyInIpIci5yISHIsciIiybHIiYgkxyInIpIci5yISHIsciIiybHIiYgkxyInIpIci5yISHIsciIiybHIiYgkpxEdgJyTod6AMkMZygxlqDHWQK2ooVFpGn79/rVWpW34vYvaBSqFYw+iP2KRk8XU1tciuywbOWU5yC7LRkFlAcpqy1BWV4ZyQznKDeUoq730e4PJ0OT9qxQVvF284e/mDz+dH/x0fghwC0CIPgTB+mCE6kMR4h6CQPdAFj45FcVsNptFhyB5mMymhqLOKsu69PvybGSXZaOwshBmiP9xclW7oq1PW7T3a49o32i0922P9n7t4eniKToakVWwyOm6zlWfw9Hio0g+l4zk4mQcKzmGyrpK0bGaJUwfhmi/aMT4xaC9b3t0CuiEEH2I6FhEt4xFTo2crTyLg2cP4rfC3/Br4a/ILssWHcmqWnm1Qq+wXugV2gvdQ7tDr9WLjkTUZCxyJ2cym3C46DC2Zm/FjrwdyC3PFR1JGI2iQVxgHHqF9kKvsF7oFNAJGhVPI5H9Y5E7obr6Ouw/ux9bs7die+52nK85LzqSXfLQeiAhJAGDWw7G0MihcNe6i45EdFUscidRVVeF3fm7sS1nG3bl7UJ5XbnoSFJx07hhQMQAjIoahd5hvTlSJ7vCIndwB88exJcpX+Ln3J9RU18jOo5D8NP54c5Wd2JU1CjEBcaJjkPEIndEFYYKbEzfiHUp65B+MV10HIfWyqsVRkSNwF1t7kK4R7joOOSkWOQO5GTJSXyR8gV+yPwB1cZq0XGcikpRYUCLAZjSYQoSQhJExyEnwyKXXG19Lf6T9R98ceoLHD13VHQcAhDrF4spHaZgeOvh0Kq0ouOQE2CRS6rGWIMvUr7AB8c+4FUndirYPRjTO07Hve3u5RUvZFUscskY6g1Yd3od3k9+H8XVxaLj0E3wcfXBpJhJmBQ7Cd6u3qLjkANikUuizlSHb1K/wbvJ7+Js5VnRcagZ9Fo9ZnWahWkdp8FV7So6DjkQFrmdM5qM+C79O6w6ugr5Ffmi45AFhOhD8MRtT2BU1CgoiiI6DjkAFrkd+yHjB/wr6V/IKc8RHYWsoKN/R8ztNhfdQrqJjkKSY5HbodMXTuOl/S/ht8LfREchGxgYMRB/6/Y3RHpFio5CkmKR25EKQwX+lfQvfH7qcxjNRtFxyIY0Kg0mRE/AI50fgY/OR3QckgyL3E5sztqMVw68gnPV50RHIYH8dH5Y2GMh/tTqT6KjkERY5IKdrTyLF395ETvydoiOQnZkWKthWNhjIXx1vqKjkARY5IKYzCZ8duoz/PPwP6VdcYesy0/nh0U9F2Fw5GDRUcjOscgFOFd9Ds/sega/FPwiOgpJYHjr4VjYYyFvJqJrYpHb2N78vViwewFKakpERyGJBLgFYFHPRRjYcqDoKGSHWOQ2YjQZsfLwSnxw7AO7WGme5HRXm7uwsMdCPruFGmGR20BBRQGe3vk0koqTREchB9DWpy3eGvgWIrwiREchO8Eit7Jt2duwaO8ilBnKREchB+Lp4olX7ngFd7S4Q3QUsgMscisx1Bvw6sFX8XnK56KjkINSKSo81uUxzI6bzWe2ODkWuRVcrL2IJ356AoeKDomOQk5gcMvBWNp3KfRavegoJAiL3MJyy3Px6NZHkVWWJToKOZEo7yisGLgCrbxbiY5CArDILeho8VH8+ac/c8UeEsJD64F/3PEPDIgYIDoK2ZhKdABHsS1nG2b9ZxZLnISpqKvAk9ufxJcpX4qOQjbGEbkFfHLiE7z666swmU2ioxABAB7r8hge7vyw6BhkIyzyW2Aym/DqwVfxyclPREchusKkmEmY330+r2hxApxaaaY6Ux3m7pjLEie7tSnje5z57zOAqV50FLvRqlUrvPnmm6JjWByLvBmMJiPm7ZyHLdlbREchuip3jTveqVQhfN87wLpEoL5OdCSyIhZ5E5nMJizYvYAlTnbLVe2KlXWeiMs7eumFk98CX0wBjLVig90Eg8EgOoKUWORNYDab8eyeZ/Fj5o+ioxBdlUbR4HUEISHrYONvnN4MfHa/xct8wIABeOKJJ/D000/Dz88PISEhWLx4ccP3c3JyMGbMGHh4eMDLywsTJkxAYWFhw/cXL16MLl264L333kPr1q2h0+kAAIqiYNWqVRg1ahTc3d0RGxuLffv2IS0tDQMGDIBer0fv3r2Rnp7esK/09HSMGTMGwcHB8PDwQEJCArZu3WrR/157xSK/SWazGUv2LcG36d+KjkJ0VSpFhaUukeiftufqG6T/BHw9GzBZ9uqqjz/+GHq9Hvv378eyZcvw/PPPY8uWLTCZTBgzZgzOnz+PHTt2YMuWLcjIyMB9993X6P1paWlYv349vv76ayQlJTW8/sILL2DatGlISkpCTEwMJk2ahIceegjPPPMMfv31V5jNZjz++OMN21dUVGDEiBHYtm0bDh8+jDvvvBOjR49GTk6ORf977ZFGdABZvLT/JaxPXS86BtE1LXRrhxHHbzDld2Ij8MPfgFHLLXbc+Ph4PPfccwCAdu3aYeXKldi2bRsAIDk5GZmZmYiIuPSkxjVr1qBjx444ePAgEhISAFyaTlmzZg0CAwMb7XfGjBmYMGECAGDevHno1asXnn32WQwbNgwA8OSTT2LGjBkN23fu3BmdO3du+PqFF17AN998g2+//bZR4TsijshvwrKDy/jwK7Jrf/XsiAk3KvHf/foBsP0lix07Pj6+0dehoaEoKirCyZMnERER0VDiANChQwf4+Pjg5MmTDa9FRkZeUeJ/3G9wcDAAIC4urtFrNTU1KCu79GTRiooKzJ07F7GxsfDx8YGHhwdOnjzJETkBbx16C//vxP8THYPomh7wjsPMpE1Ne9OOVwB9INB99i0fX6vVNvpaURSYmjB9o9df/WFfl+/392vhr/ba78eaO3cutmzZgtdeew1t27aFm5sbxo0b5xQnUFnk1/Flypd4N/ld0TGIrul+33g8eej75r35x6cBd3+g0z2WDfV/YmNjkZubi9zc3IZR+YkTJ1BaWooOHTpY/Hh79uxBYmIixo4dC+DSCD0rK8vix7FHnFq5hr1n9uIf+/8hOgbRNY32jcOCQ00ciV/ObAK+eQhI3265UJcZMmQI4uLiMHnyZBw6dAgHDhzAtGnT0L9/f3Tr1s3ix2vXrl3DCdMjR45g0qRJTfpkIDMW+VWkl6Zj7s9zYTQbRUchuqpBvh3wwuHNUG51/dd6w6VrzAuOWibYZRRFwcaNG+Hr64t+/fphyJAhiIqKwhdffGHxYwHAG2+8AV9fX/Tu3RujR4/GsGHD0LVrV6scy97wWSt/cKHmAiZumoj8inzRUYiuqqdPe/zr6E641FvwmnDvlsCDPwN6f8vtk2yGI/LLGE1GPLXjKZY42a14rzZYcXyvZUscAC7mAF8lAvX8FCojFvllXv/1dew/u190DKKrivZoibdPH4a7odI6B8jcCWx51jr7Jqtikf+f79K/45MMyW5F6sOwKvM0vKtLrXugX94Gkr+y7jHI4jhHDiDlfAom/zAZtZb+uEpkASFugVhTUITQC7m2OaCLBzB7OxAYbZvj0S1z+hF5bX0t5u+azxInu+Tn6ovVxaW2K3EAMFQA66YDhirbHZNuidMX+Zu/vYm00jTRMYiu4Kn1wKqLdWhdnH7jjS2t6ASw6W+2Py41i1MX+f6C/fj05KeiYxBdwU3jhrerXRFTcEJciCNrgWNfizs+3TSnLfIyQxkW7l4I863eUEFkYVqVFm8afdAl97DoKMAPTwGV50SnoBtw2iJ/8ZcXUVhVeOMNiWxIraixTB2G3pl2chls1TlOsUjAKYv8x8wfucoP2R0FCpa4RmHI6V2iozR2YgNwfIPoFHQdTlfkhZWFePGXF0XHILrCPI8YjDm5TXSMq/thLlBZIjoFXYPTFfmze55FmaFMdAyiRh7z6oTJyf8RHePaKouBH58SnYKuwamK/IeMH7CvYJ/oGESNTPeJx8NHfhAd48aOrQdOfic6BV2F0xR5tbEab/z2hugYRI3c6xuHuYebuTCECN/PAarOi05Bf+A0Rf5e8nu8SoXsyp2+HbHosGQn3SuLgJ9eEJ2C/sApijy/Ih8fH/9YdAyiBnf4xOKlpK1QmSVcwea3j4HC46JT0GWcoshf//V1PkuF7EY373Z449hOaE11oqM0j7ke2DxfdAq6jMMX+YGCA9iSvUV0DCIAQEev1lh58gB0ddWio9yazJ3ASYnm9h2cQxd5vakeLx98WXQMIgBAG48W+HdqMvS15aKj3BIzFOS0GI3HfzbBWC/h1JAD0ogOYE3rTq9D6oVU0TGIEO4ejNU5mfCR/IqPsuAeWFQzERvSggAAPQ7kYGqvVmJDkeMuLFFhqMDwr4ejtLZUdBRyckE6f3xUWIKI8zmiozSbwScKq10T8Vp220avB3i4YMdTA6F3degxod1z2KmVz1M+Z4mTcD4u3lhdUiltiZvc/LGpxV8RV/T8FSUOAOcqDHhvV6aAZHQ5hxyR1xhrMGz9MJyvkftjLMnNQ6vHe5UadMxPFh2lycxqVySF349HcwaioMblutv6uGuxZ94gjsoFcsgR+frU9SxxEkqndsU/a92lLPG8FiMwXvMWxp4edsMSB4DSqjp8uj/bBsnoWhyuyOtMdbz5h4TSqDR43RyIbtm/iY7SJOVB3fCUzxvomzYFv170bNJ7392ViVpjvZWS0Y04XJF/n/49CioLRMcgJ6VSVPiHpiX6pe8VHeWm1Xm3wuqQxYjLmYN1Z0OatY/i8lp8+WuehZPRzXKoSS2T2YQPjn0gOgY5sWfd2uHO43LcgGbS+WBLwHTMyUxAZf2tj+lW70zHxIQIaNQONz60ew71J/7f7P8iqyxLdAxyUnM9O2CcBCVuVrsgOWIy+tUsx0NpPSxS4gCQe74a3x45Y5F9UdM4VJG/n/y+6AjkpB70jsP0o5tFx7ihgvBhmOSyAqNTRyKvxtXi+//3jnSL75NuzGGmVvbk78Gp86dExyAnNNknHn+282eKVwTehpeMU7A2PdSqxzldWIH9GSXoEeVv1eNQYw5T5F+kfCE6Ajmhu3zjMO/QJtExrsnoFYE1+kQ8nxlrs2OuPZDDIrcxhyjyoqoi7Mqzs5XHyeEN8e2I5w9vhgL7u6fO7OqNn4Km4onMHqgsUtv02D8eO4vFlQb46m98DTpZhkPMkW9I2wCj2Sg6BjmR3j7tsezINqjN9nXttFmlxYmIiRhoWI5Zqb1RabRtiQOAwWjC+kO8FNGWpC9ys9mMr1O/Fh2DnEgXrzZ48/geaOsNoqM0Uhg2BNN1KzAidTSyqnVCs3x2QM5ny8hK+qmV/Wf3I78iX3QMchIxnpF4O+UQ3AxVoqM0qAqIxzLTFHyU0UJ0lAbpxZX4JaMEPTlXbhPSF/l36d+JjkBOopU+HP/OOAXPmouiowAAjJ7h+MwjEYuyOsBsVkTHucJnB3JY5DYidZFXG6uxNXur6BjkBELdAvFuXi78K4pFR4HZ1RM7g6bg8cxeKC+237/CW04UotpQDzcX28/TOxup58i35WxDldF+PuKSY/J39cW7RRcQUir2BJ5ZpUFKxAT8yfgmpqfegXKj/ZY4AFQZ6vFzSpHoGBaTmJiIu++++7rbtGrVCm+++eZN7zMrKwuKoiApKemWstn3T8INfJ9u3zdhkPy8XDyxqtSAyHMZQnMUhw3EvIvj8FOqr9AcTbUpuQDD46x7E5I9OXjwIPR6vc2PK22RlxnKsL9gv+gY5MDcNG54u0qD9mePCMtQ7d8RryvT8F5GhLAMt2L7qSLU1NVDp7Wf6ZW6ujpotVqr7DswMNAq+70RaadW9p7Zy2vHyWpcVC54y+iNzrliSrzeIxSfhz2DTmeewXt5cpY4AFQa6rHjdPPOK6xevRphYWEwmUyNXh8zZgxmzpzZ8PXGjRvRtWtX6HQ6REVFYcmSJTAa/9cNiqLgnXfewV133QW9Xo8XX3wRbdu2xWuvvdZov0lJSVAUBWlpadfN9dprryE0NBT+/v547LHHUFdX1/C9P06tnDp1Cn379oVOp0OHDh2wdetWKIqCDRs2NNpnRkYGBg4cCHd3d3Tu3Bn79u272T8mABIXOe/kJGvRKBosU4WiZ+YBmx/b7KLHnoiH0O3iK5ifEYd6s7R/RRv8mNy89QHGjx+PkpISbN++veG18+fPY/PmzZg8eTIAYNeuXZg2bRqefPJJnDhxAqtWrcJHH32EpUuXNtrX4sWLMXbsWCQnJ2PWrFmYOXMmPvzww0bbfPjhh+jXrx/atr1ybdLfbd++Henp6di+fTs+/vhjfPTRR/joo4+uum19fT3uvvtuuLu7Y//+/Vi9ejUWLlx41W0XLlyIuXPnIikpCdHR0Zg4cWKjf4xuRMqfErPZjD35e0THIAekQMHzrq0wONW2AwWzokZaxL0YblqByan9caFO2lnPK2w7WdSs1YN8fX0xfPhwrF27tuG1r776CgEBARg4cCAAYMmSJZg/fz6mT5+OqKgoDB06FC+88AJWrVrVaF+TJk3CjBkzEBUVhZYtWyIxMREpKSk4cODSP9Z1dXVYu3Zto5H+tTKtXLkSMTExGDVqFEaOHIlt27ZdddstW7YgPT0da9asQefOndG3b98r/oH53dy5czFy5EhER0djyZIlyM7OvuEng8tJWeQnSk6gpKZEdAxyQM/oYzD65E82Peb50DvwkH4FhqTei1MV7jY9ti2U1xqxN715f18nT56M9evXo7a2FgDw6aef4v7774dKdam6jhw5gueffx4eHh4Nv2bPno2CggJUVf3virZu3bo12m9YWBhGjhyJDz64tBDNd999h9raWowfP/66eTp27Ai1+n/z/aGhoSgquvqVOSkpKYiIiEBIyP9WXerevftVt42Pj2+0TwDX3O/VSPnP/s78naIjkAN6wqsTJh75wWbHq/GLwVuqaXg7s5XNjinK7tRzGNg+qMnvGz16NMxmMzZt2oSEhATs2rULy5cvb/h+RUUFlixZgnvuueeK9+p0/3tMwdWuJHnggQcwdepULF++HB9++CHuu+8+uLtf/x/SP54kVRTlijn85rh8v4py6eaupuxXyiLfnbdbdARyMDN84jD7sG0eR1uvD8Y33tMxLzPeIebAb8bu1HPNep9Op8M999yDTz/9FGlpaWjfvj26du3a8P2uXbsiJSXluvPa1zJixAjo9Xq888472Lx5M3butOwAsX379sjNzUVhYSGCg4MBXLo80RqkK/ILNRdwrOSY6BjkQMb7xmGODZ4pbta640DIZDya3RclJda5/M1epRSWo6isBkFeTX+Y1+TJkzFq1CgcP34cU6ZMafS9RYsWYdSoUWjZsiXGjRsHlUqFI0eO4NixY3jxxRevu1+1Wo3ExEQ888wzaNeuHXr16tXkbNczdOhQtGnTBtOnT8eyZctQXl6Ov//97wD+N+q2FOmGA7vzd8NkvvWPMkQAMNy3E/5++EerHsOsqJAZcTdGYQXuSx2IEoNzlfjvmjtPPmjQIPj5+SElJQWTJk1q9L1hw4bh+++/x3//+18kJCSgZ8+eWL58OSIjI29q37NmzYLBYMCMGTOale161Go1NmzYgIqKCiQkJOCBBx5ouGrl8mkfS1DMZrP9PRX/Oubvmo9NGfa7IgvJo79PLN48sg0ak/XuRygN6Y0Flffjh+IAqx1DFvcnRODle+NvvKEN7dq1C4MHD0Zubm7D9Ic17dmzB3379kVaWhratGljsf1KN7VypEjcXXbkOLp7R+P15B1WK/Fa32i8rZ2GFVlRVtm/jH7JsJ8rzWpra1FcXIzFixdj/PjxVivxb775Bh4eHmjXrh3S0tLw5JNPok+fPhYtcUCyqZWLtReRV8GVR+jWxHlF4Z8nf4Grscbi+za5B2Bj+Fx0KnwOK3JY4pfLKqlCYZnl/8yb47PPPkNkZCRKS0uxbNkyqx2nvLwcjz32GGJiYpCYmIiEhARs3LjR4seRampl35l9eHDLg6JjkMTaekTgo/QT8K66YNH9mjVu+C1sIh7N7o+iWuecA78Zq6bejmEdQ268ITWJVCPy4yXHRUcgiUW4h2B1drpFS9wMBTktRmOsagXGnR7CEr+B42fKREdwSFLNkZ8oOSE6AkkqSBeAdwvOIrDsrMX2WRbcA4tqJmJDWtNvdHFWx/PtY3UlRyNVkR8/xxE5NZ2vizfeLSlH+HnLLAhs8GmD1S7T8Vp2029CcXYckVuHNEVeWlOKM5VnRMcgyXho9fh3uQlRRam3vC+Tmz9+9J+GORm3o9Yk1ayk3ThbVoNzFbUI8HAVHcWhSFPknB+nptKpXbGyxh0dzvx2S/sxq12RFH4/Hs0ZiII0Fwulc17Hz5Shf7SYBRgclTTDChY5NYVGpcFycwBuz2l+iZuhIC98BMZr3sLY08NQUMMSt4RjnCe3OGlG5KfOnxIdgSShVtR4WROBvik7mr2P8qBuWGKYjK/SrX+3n7M5WcB5ckuTpsjzynkjEN2YAgXP6dpg2ImtzXp/nXcrfOiWiJeyoi2cjH6Xc77qxhtRk0hT5AWVzVsuipzLXI9YjE3e3OT3mXQ+2BIwHXMyE1BZL82Mo5TyLlSLjuBwpCjyamM1SmtLRccgO/eIdxymJTXtgWpmtQuOhY3HI7lDkJfGKyls4XylAZW1RuhdpagfKUjxJ8nRON3IFJ94PHr4+ya9pyB8GOacvxv7Ur2tlIquJfdCFWJCvETHcBhyFHkFi5yu7W7fODzdhIUhKgJvw0vGKVibHmrFVHQ9ueerWeQWJEeRc0RO1zDUtyMWH94MBTd+9pvRKwJr9Il4PjPWBsnoevIu8ISnJbHISVp9fGLwypFtUJvrr7ud2dUbPwVNwxOZ3VFZpL7utmQbued5wtOS5ChyTq3QH3T1bovlx3dDW2+45jZmlRYnw8fh0byhyEq17NJadGsKLrLILUmOIueInC4T6xmJlad+g5vh2h/PC8OG4KnSe7Az1cd2weimXayuEx3BoUhR5IVVhaIjkJ1orQ/Hv9NPwrPm6rd5VwXE4xXTVHycEW7jZNQUZTUsckuSosgrDBWiI5AdCHMLwuq8HPhVnrvie0bPcHzmkYhFWR1gNisC0lFTlFVbb8FrZyRFkVfWVYqOQIIFuPrh3aIShJTmN3rd7OqJnUFT8HhmL5QXS/HjTODUiqXZ/U9+nakOBtO1T2iR4/N28cLqC9VoeS6z4TWzSoPT4ffg8TPDkJrqJjAdNUdFrRFmsxmKwk9PlmD3RV5Vx+tNnZm7xh1vV6rRrvBYw2vFYQMx7+I4/JTqKzAZ3Yp6kxkVtUZ46rjGqSXYfZFXG3mZkrNyVbvin3WeiM87CACo9u+I15VpeC8jQnAysoSL1XUscgux+yKvra8VHYEE0CgavKoEo3vWbtR7hGKdVyIWZnZEvZlPJnQUNXXXv5GLbp7dF7nRxLPbzkalqPCiSyQGZBzAnoiH8HhWH1w4Z/c/qtRE9SbRCRyH3f/tqDPx7Lazeca9Pdpf9MBw0wqcSnUXHYesxGS+8fNx6ObYf5HXs8idyQS/YfgppTPmn/MTHYWsrN7EIrcUuy/y+hs8EIkcy7HCQxhkLsC0ahUCThfBnJULcOTmkFpPWw+E81nwlmD3Re6i5srlzuSEthgngoqBIABdgfB6X/zpYgS6FLgiJPU8lNQswMjzJg5BxRPXlmL3Re6u4RypM8tXl+FDv+OAH4COgLdJhz9VRCLhrB4tMsqhPZkJc02N6JjUHCxyi7H/IteyyOl/LqpqsM4rBeu8AEQDrsPUGFTVHr2KvNE6qxq6E9kwl5WJjkk3QVHz2fCWYvdF7qbh7dd0bbVKPX7Up+PH1gBaA8oAoHdta/QrCUC77Dp4nsyDuejKh2yReCq9XnQEh2H3Rc6pFWoKswLs0eViT3guEA6gNxBnCMOgC6HokAf4pRTCnJ0nOiYBUHl4io7gMOy+yNUqNVzVrrzDk5ot2aUIycFFQDCA24FIYwCGXmyBzme0CEotgZKWDdTz6iibUqmg0nOQZil2X+TApVE5i5wsJVtTivf8SwF/AHGAv0mPoeUt0a3AHeEZF6E5lQVzLX/erEnl4cEnH1qQHEWudceF2guiY5CDKlFV4XPvU/jcG0AMoBuuwZDKGPQs8kJkZhV0J7NgLufiJpak9vAQHcGhSHH9D094ki3VKEZ875GGv0cdwtTBp3D/47X411/a4MiUBFT26wJVgL/oiNJTeTZvfnzAgAH4y1/+cs3vK4qCDRs23PT+fv75ZyiKgtLS0mblsRdSjMj1Wp7dJnHqYcYOt2zsiMgGIgD0AboYWmDQ+RDE5Jrhm1IAc+4Z0TGlovK0zoi8oKAAvr7O95x6KYo82D1YdASiRpJcziIp5CwQAiABiDIGYmhpC8Sd0SDo9DkgPRsw8fF+16IJCLTKfkNCQqyyX3snxdRKuCdXRCf7lqG5gFUByXg8/jAmjMvF43O9sPGROOTd3R2muGhAywUULqcNDmr2e00mE55++mn4+fkhJCQEixcvbvjeH6dW9u7diy5dukCn06Fbt27YsGEDFEVBUlJSo33+9ttv6NatG9zd3dG7d2+kpKQ0O58IUozIw/UscpJLkboCn/qcxKc+AGIBj5EuGFzZFj0KPdEysxKuJ7JgrnTeRcU1wc0fOX/88ceYM2cO9u/fj3379iExMRF9+vTB0KFDG21XVlaG0aNHY8SIEVi7di2ys7OvOb++cOFCvP766wgMDMTDDz+MmTNnYs+ePc3OaGtyFDlH5CS5CsWAjR6p2OgBoA2gGaxCv+q26HPOD22ya6E/kQPzeee5Mksb2vwij4+Px3PPPQcAaNeuHVauXIlt27ZdUeRr166Foih49913odPp0KFDB+Tn52P27NlX7HPp0qXo378/AGD+/PkYOXIkampqoNPpmp3TluQocg8WOTkWo2LCT+5Z+KllFtASwB1At9qWGHA+CDG5JnifPAPzmbOiY1qNNrz5f6fj4+MbfR0aGoqioqIrtktJSUF8fHyjMu7evfsN9xkaGgoAKCoqQsuWLZud05akKXIFCszgc6nJcf3qega/hp4BQgF0B9oZgzH0Qjg65asQcLoYyMhxmGeza1u0aP57/3C+QVEUmG7xxPLl+/z9RqVb3actSVHkLmoXBLgFoLi6WHQUIptJ1ZQgNbAECATQBQip98afyiJxW4ErQtMuQJWSKeWz2RV3d2j8rL8CVPv27fHJJ5+gtrYWrq6uAICDBw9a/bgiSFHkwKVROYucnNlZdQXW+B7HGl8AHQBvsw5DKiKRUKhHREYFXE5kwlxdLTrmDbm2amWT40yaNAkLFy7Egw8+iPnz5yMnJwevvfYaADjc4wHkKXLPcCQVJ4mOQWQ3Lio1WO+ZgvWeANoCLkPVGFAVjV7nfBCVVQP3kzkwXygVHfMKrtHRNjmOl5cXvvvuOzzyyCPo0qUL4uLisGjRIkyaNEmak5g3SzGb5Zh0W3l4JVYdXSU6BpE0FDPQozYc/UuCEJ1rhNfJfJjPXnlS0NaC5s2D/4xEIcf+9NNPMWPGDFy8eBFubo7z6A9pRuSxfrGiIxBJxawAv+jy8Ut4/qVns/cEOtSFYtCFUHTME7e4tWt0O5sda82aNYiKikJ4eDiOHDmCefPmYcKECQ5V4oBERR4XGCc6ApH07GFxa52NplYA4OzZs1i0aBHOnj2L0NBQjB8/HkuXLrXZ8W1FmqkVABi8bjCKqsR/NCRyVNZe3Frt54fovfLcMSkLaUbkABAfEI+tOVtFxyByWNZe3NpWJzqdjVRF3imgE4ucyIYsvbi1rmMHKyV1blIVeXxg/I03IiKrudXFrd1vu812YZ2IVHPkVXVV6PVZL5jM8tw6S+RsIo0+11zcut2e3dD4c4UlS5NqRO6udUeUdxTSStNERyGia7ja4tZ/Km+JXtXhiGWJW4UUC0tcLi6AlyESyaREVYXPvE9hxx0+oqM4LOmKvHNgZ9ERiKgZEkISREdwWNIVee+w3qIjEFEzdA+5+rPA6dZJV+ShHqFo491GdAwiaoJWXq0Q6G6dBZdJwiIHgL7hfUVHIKIm6BHaQ3QEhyZnkbdgkRPJZHDLwaIjODQpi/z2oNuh1+pFxyCim+Dr6ssTnVYmZZFr1VpOrxBJYmDLgdCopLplRTpSFjnAj2pEshjScojoCA5P2iK/I/wOaFXaG29IRMJ4uniiZ1hP0TEcnrRF7uHige6hvC6VyJ4NjBjIAZcNSFvkAHBnqztFRyCi6xgaOVR0BKcgdZEPazUMHloP0TGI6Cr0Wj3vxLYRqYvcTeOG4a2Hi45BRFfRr0U/uKhdRMdwClIXOQDc2+5e0RGI6CruanOX6AhOQ/oi7xjQETF+MaJjENFlIr0i0Sesj+gYTkP6IgeAe9rdIzoCEV1mQvQEKIoiOobTcIgiHxk1Ejq1TnQMIsKlc1d3t7tbdAyn4hBF7uXihSGRvHuMyB6MjBoJLxcv0TGcikMUOcDpFSJ7cX/7+0VHcDoOU+QJIQmI8o4SHYPIqXUN6or2fu1Fx3A6DlPkADArbpboCERObWLsRNERnJJDFfmI1iPQwqOF6BhETinILYhPJRXEoYpco9LggbgHRMcgckr3x9zPB2QJ4lBFDgB3tb0LofpQ0TGInIqfzg+TYyeLjuG0HK7ItSotZnaaKToGkVOZ1WkW3LXuomM4LYcrcuDSpYhBbkGiYxA5hSD3INwXc5/oGE7NIYvcRe2CxE6JomMQOYWH4h+Cq9pVdAyn5pBFDgDjo8fDX+cvOgaRQ4vwjODNeHbAYYtcp9FhRqcZomMQObRHOj8CjUojOobTc9giB4BJMZPQyquV6BhEDqmtT1uMjBopOgbBwYtcq9Zifvf5omMQOaTHujwGleLQFSINh/9/oU94HwyMGCg6BpFD6RzYmU8ctSMOX+QAMK/7PJ5VJ7IQtaLGsz2fFR2DLuMURR7uEY5ZnfhALSJLmBgzkU84tDNOUeQAMDNuJsI9wkXHIJJakFsQHr/tcdEx6A+cpshd1a54OuFp0TGIpPZU96eg1+pFx6A/cJoiB4BBLQehb3hf0TGIpDQgYgDubHWn6Bh0FU5V5ACwoPsCuGncRMcgkoqn1hN/7/F30THoGpyuyCO8IjC321zRMYik8tduf0WwPlh0DLoGpytyAJjQfgKnWIhuUkJIAsa1Gyc6Bl2HYjabzaJDiFBcVYx7vr0HpbWloqMQ2S0fVx+sG70OIfoQ0VHoOpxyRA4Age6BWNRrkegYRHZLgYKlfZeyxCXgtEUOAEMjh2JcND8yEl1NYqdE9GvRT3QMuglOO7XyuxpjDSZumoi00jTRUYjsxm1Bt+GDYR/wEbWScOoROXDpueWv9nsVOrVOdBQiu+Dj6oNl/ZaxxCXi9EUOAG1922JBjwWiYxAJx3lxObHI/8/YdmMxtcNU0TGIhErsyHlxGbHILzO321z0b9FfdAwiIboEdsETXZ8QHYOawelPdv5RZV0lpv44FakXUkVHIbKZFh4t8MmIT+DvxgXLZcQR+R/otXqsHLQS/jr+QJNz8HX1xb+H/pslLjEW+VWEeYRhxaAVXFWIHJ5OrcM/B/8TkV6RoqPQLWCRX0PnwM54vvfzomMQWY1aUWNZv2XoHNhZdBS6RSzy6xgRNQIPd35YdAwiq1jQYwEGtuTC5I6ARX4Dj3Z+FPe2u1d0DCKLeiDuAUxoP0F0DLIQFvkNKIqC53o9h7Ftx4qOQmQRo6NG48muT4qOQRbEyw9vkslswnN7n8OGtA2ioxA1W/8W/bF84HJoVVrRUciCOCK/SSpFhSW9l+CuNneJjkLULEMjh7LEHRSLvAlUigov9HmBZU7SGR01Gq/2e5Ul7qA4tdIMJrMJC3cvxPcZ34uOQnRD46LHYVHPRVAURXQUshIWeTOZzCYs2L0AmzI2iY5CdE1TYqdgXvd5omOQlbHIb0G9qR4v/PIC1qeuFx2F6Aqz42bzIVhOgkVuAe8nv48Vh1bADP5Rkn34821/xoPxD4qOQTbCIreQLdlbsGDXAtTU14iOQk5Mragxr/s8TIyZKDoK2RCL3IKSi5Px55/+jJKaEtFRyAl5aj3xav9X0Se8j+goZGMscgs7U3EGj217jIs5k01FeEZg5aCViPKJEh2FBGCRW0GFoQJ/2/E37D2zV3QUcgIJIQl4o/8b8NH5iI5CgrDIrcRoMuIf+/+BL09/KToKObCpHaZizu1zuOK9k2ORW9nGtI1Yun8pqo3VoqOQA3HTuGFJ7yUY3nq46ChkB1jkNpBRmoG/7fgb583JIiK9IvHGgDcQ7RstOgrZCRa5jdQYa/DygZd58xA1mwIF97W/D3O6zYGbxk10HLIjLHIb25q9FUv2LUFpbanoKCSRYPdgPN/nefQO6y06CtkhFrkAxVXFeHbPs9hzZo/oKCSBUVGj8EyPZ+Dl4iU6CtkpFrkgZrMZn536DG8eepMnQumqfF19sajXIgyJHCI6Ctk5FrlgBRUFeOXgK9iWs010FLIjAyIG4LlezyHALUB0FJIAi9xO7MrbhZcPvIyc8hzRUUigALcA/PX2v3LxEmoSFrkdMdQb8P6x9/F+8vuora8VHYdsyEXlgqkdpmJ2/GzotXrRcUgyLHI7lFeeh5cPvIwdeTtERyEbGBo5FHNun4MWni1ERyFJscjt2Pac7Xjl4CvIr8gXHYWsINYvFk8nPI1uId1ERyHJscjtnKHegPWp6/F+8vsorCoUHYcsIMAtAE/c9gTGtB0DlcL1z+nWscglYag34OvUr/Fe8nssdEl5u3pjYsxEJHZM5Dw4WRSLXDJ19XVYn7qehS6RYPdgTOswDeOix8Fd6y46DjkgFrmk6urrLo3Qj72Hs5VnRcehq4jyjsKMTjMwMmoktCqt6DjkwFjkkqurr8OG9A34/NTnOH3htOg4BCA+IB4z42ZiUMQgKIoiOg45ARa5AzlafBTrTq/Df7L+w9v+bUytqNE3vC+md5yOhJAE0XHIybDIHVC5oRybMjZh3el1HKVbWQuPFhjbbizGtBmDYH2w6DjkpFjkDu5o8VF8dforbM7azFG6hei1egxuORhj2oxBQkgCp09IOBa5kyg3lOOnnJ+wNXsr9p7ZC4PJIDqSVDQqDfqG9cXIqJEYEDEAOo1OdCSiBixyJ1RZV4ldebuwJXsL9p7Zi4q6CtGR7JKfzg+9wnqhT1gf3BF+B1epJ7vFIndydaY6HCo8hJ15O7EzbyeyyrJERxJGragRHxiPPmF90De8Lzr4d+C0CUmBRU6N5JbnIqkoCUeKj+Bo8VGkXkiF0WwUHctqQvWh6B3WG73DeqNnWE+uwkNSYpHTdVUbq3H83PGGYj9SfAQlNSWiYzVLC48WiPWPRaxfbMP/+rv5i45FdMtY5NRk+RX5OH7uOHLKc5Bbntvwq6iqCCazSXQ8eGg9EOoRimjf6Eul7ReLGP8YjrbJYbHIyWIM9QbkV+Q3FHteeR7OVJxBRV0FKuoqUFlXiQpDBaqMVc26FFKj0sBd444g9yAEuwcjRB+CYPdgBOuDEeIegmB9MILdg+Hh4mGF/zoi+8UiJyHqTfUN5V5ZV4lqYzVUigpqRQ21Sg2NooFGpYFOo4NOo4Obxo3PKyG6BhY5EZHk+FR7IiLJsciJiCTHIicikhyLnIhIcixyIiLJsciJiCTHIicikhyLnIhIcixyIiLJsciJiCTHIicikhyLnIhIcixyIiLJsciJiCTHIicikhyLnIhIcixyIiLJsciJiCTHIicikhyLnIhIcixyIiLJsciJiCTHIicikhyLnIhIcixyIiLJsciJiCTHIicikhyLnIhIcixyIiLJsciJiCTHIicikhyLnIhIcixyIiLJsciJiCTHIicikhyLnIhIcixyIiLJsciJiCTHIiciktz/B9L8Q4TAYQwzAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -1644,7 +1848,7 @@ } ], "source": [ - "rdf.groupby(\"A1Cresult\").agg(pl.count().alias(\"count\")).pieplot(parts=\"count\", labels=\"A1Cresult\", key=\"False\")" + "rdf.groupby(\"A1Cresult\").agg(pl.count().alias(\"count\")).pieplot(parts=\"count\", labels=\"A1Cresult\", key=\"False\", title=\"A1Cresult group distribution\")" ] }, { @@ -1667,7 +1871,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 68, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1780,7 +1984,7 @@ "└───────────┴───────────┘" ] }, - "execution_count": 28, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } @@ -1799,6 +2003,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "xX672CJwpAYv" @@ -1806,12 +2011,72 @@ "source": [ "Perhaps as expected, those with a very high or high A1Cresult were more likely to have a medication change. Interestingly, those who do not have their A1C level examined are only as likely to change medication as those with normal A1C levels. This shows doctors are less likely to change medication unless they know that A1C levels are higher than expected via exams.\n", "\n", + "We can visualize this with the `pieplot` function." + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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5OjoKFlbW0t+fn5ScHCw9Pfff1c4D8o71EGSavc6VCYjI0OysbGRAEi7du0qc5zMzExp8eLFkr+/v2RpaSm5urpK3bp1k9asWaPeTb2i/E8aOHCgBKBU/vJU9Lgl37MlD3WQJEnKzs6WXn/9dcnZ2Vmys7OThg0bJt24cUMCoHE4U3XeY08qKCiQXFxcpICAgAqfh4+Pj9ShQwf17cDAQAlAmT9l/c38+uuv0osvvii5u7tL5ubmkpubmzRkyJAqHRJQ23kgSZJUWFgovffee5KPj49kYWEheXp6SosXL5by8vI0xlMoFNKiRYskV1dXqV69elJQUJB08+bNcg91OHXqlDR9+nSpfv36kp2dnTRhwgQpNTW10udEmmSSpOWt30TlmDt3LrZs2YKsrCxhp6QzRMOHD8e1a9e0vt2tOiIiItChQwfs2rWrSgfYGyPR8+Drr7/G1KlTceHCBZ7AXQsM/sTWpJ9Kniw5NTUVO3fuRPfu3Vl81ZCYmIgjR45g0qRJOptmWSe6XrduHczMzNRnazJ2nAfGz+BPbE36qWvXrujZsydatmyJhw8f4quvvkJGRgaWLFkiOppBiI2NxZkzZ/Dll1/CwsICM2bM0Nm0P/74Y1y8eBG9evWCubk5jh49iqNHj2L69Ok6OxxJNM4D48fyozoxcOBA7N+/H1u3boVMJkPHjh3x1Vdf8VtzFZ06dQpTp06Fl5cXduzYUeZxkHWlW7duOHHiBFasWIGsrCx4eXlh+fLlZZ443VhxHhg/bvMjIiKTw21+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RERkclh+RFRlX3/9NZycnETHIKo1lh+RCQoODoZMJiv1c/PmTdHRiHTCXHQAIhJjwIAB2L59u8YwNzc3QWmIdItLfmTUFEoJj7MLcO9xDu4+ykF8ajZiU7JxOzkLN5OyEPMwE9EPM3HjQSbuPspBWk4BlEpJdGydsLKygoeHh8bP+vXr0aZNG9ja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KGBubq7znJW6f1lVgpEHgKyHotMYnqfaAG3HAG3HAvZPiU5DZHTMRAcgTR4eHuofR0dHyGQy9e2oqCjY29vj6NGj6NSpE6ysrBAeHo7g4GAMGzZM43Hmzp2Lnj17qm8rlUqEhITAx8cHNjY2aNeuHfbv3193T6RhB2BACPDmv8Dkg8BzrwMuTetueoZObgn49QEGrgHmRgIzw4Hn57D4iOqIHi4yUGXefvttrFmzBr6+vqhfv36V7hMSEoJdu3Zh8+bNaNq0KU6fPo2JEyfCzc0NgYGBdRfWTA749lT9DPgQeHQbiDkBxPwMxIUDRXl1N219V88VaNofaP4C4Nebpx0j0iGWnwF6//330a9fvyqPn5+fjw8//BC//PILunbtCgDw9fVFeHg4tmzZUrflV5KzL/DsDNVPYS4Q+wcQHw7cvaBaVVqUq7ssuubQCPB6DvDqqvrXvTVgxpUvRCKw/AxQ587V29Pv5s2byMnJKVWYBQUF6NChgzajVY+FDdCsv+oHABRFwMNrqiK8dwG4dx54HCcuX23ILQHX5oBnl/+VnZOX6FRE9P+x/AyQra2txm0zMzOU3G+psLBQ/f+srCwAwJEjR9CoUSON8ays9GjvQbm5althww6qA7cBIDsVSI5S7T2aEqP6NzUGSLsDSEqxeQFVybn4A24tVNfGc2uh+nH2VT0fItJL/Os0Am5uboiMjNQYFhERAQsL1cHPrVq1gpWVFe7cuaPbVZzaYOsC2D4PeD+vObwwD3h0S7UNMStJ9ZNd/G+yag/TrGSgMLtm05XJVacMq+esugaevYfqBNH2Hv+7bd8AcGrCkiMyQPyrNQK9e/fG6tWr8c0336Br167YtWsXIiMj1as07e3tMX/+fMybNw9KpRLdu3dHeno6zpw5AwcHB0yZMkXwM6gBC2vgqdaqn4ooClWnYSvKf+LfQkCRr/o/oDp2Tm4FmFsC5jaqHU8sbOr+ORCRMCw/IxAUFIQlS5Zg4cKFyMvLw8svv4zJkyfj2rVr6nFWrFgBNzc3hISE4Pbt23ByckLHjh3xzjvvCEyuA3IL1Y+lbeXjEpHJ4EHuRERkcrifNRERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmRyWHxERmZz/By9/XoKDUu84AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbUAAAFeCAYAAAACKYGcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9HElEQVR4nO3deVhUZeM+8HsYcNjBZRAVlVVFTVM000DEJTTLNMtyRzM1035aZra5lEbaYupbaotLaOVWaZn1WpqGtriAOwiIu4KggOzLPL8/eJmvIyCLMzwzc+7Pdc2lczjM3LMw95znbCohhAAREZEVsJEdgIiIyFhYakREZDVYakREZDVYakREZDVYakREZDVYakREZDVYakREZDVYakREZDVYakREZDUsrtRUKhXmzZunv7527VqoVCqcO3dOehZzMm/ePKhUKqSlpcmOYlIJCQl4+OGH4ebmBpVKhR9++EF2JItT9l4hsgYWV2p17eeffzbb4iJg7NixOH78OBYuXIioqCh06dJFdiRFGDZsGFQqFV599dVK51m4cCEGDRqExo0bV+sL4B9//IEnnngCnp6eqFevHjw8PPDYY4/hu+++M3J6smYWX2qjR49GXl4eWrZsaZLb//nnnzF//vwKf5aXl4c333zTJPdLVcvLy8Nff/2FZ599FlOnTsWoUaPg5eUlO5bVy8rKwo8//ghvb2988803qOzwsW+++SYOHjyITp06VXmbc+fORVhYGE6cOIFJkyZh5cqVeOWVV5CdnY2hQ4fi66+/NvbDICtlKzvAvVKr1VCr1VLu297eXsr9Uqnr168DANzd3Y12mzk5OXBycjLa7VlqhrvZunUrSkpKsHr1avTu3Rv79u1DaGhoufmSk5Ph7e2NtLQ0aLXaSm9vy5YtePvtt/Hkk0/i66+/hp2dnf5nr7zyCn799VcUFRWZ5LEA5v98U83UaEmtbOz9zJkzGDVqFNzc3KDVavHWW29BCIGLFy/i8ccfh6urKzw9PfHhhx+Wu42CggLMnTsX/v7+0Gg0aN68OWbNmoWCgoJy882YMQNarRYuLi4YNGgQLl26VO72KluntnPnToSGhsLFxQWurq7o2rWrwbe9P//8E0899RRatGihzzFjxgzk5eXp54mIiMAnn3wCoHT9WdmlTEVDKjExMRgwYABcXV3h7OyMPn364O+//64w8/79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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for group in [\"very high\", \"high\", None, \"normal\"]:\n", + " tmp = rdf.filter(pl.col(\"A1Cresult\") == group)\n", + " tmp.groupby(\"change\").agg(pl.count().alias(\"count\")).pieplot(parts=\"count\", labels=\"change\", title=(\"medication change for \" + (group if group else \"null\") + \" A1C group\"))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ "What we now want to know is whether this has an impact on the likelihood of patient readmission in the short and long term." ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 69, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1924,7 +2189,7 @@ "└───────────┴───────────────────────┘" ] }, - "execution_count": 30, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -1945,7 +2210,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 70, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2058,7 +2323,7 @@ "└───────────┴──────────────────────┘" ] }, - "execution_count": 32, + "execution_count": 70, "metadata": {}, "output_type": "execute_result" } @@ -2103,7 +2368,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 71, "metadata": {}, "outputs": [ { @@ -2170,7 +2435,7 @@ "└──────────────┘" ] }, - "execution_count": 34, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -2191,7 +2456,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 72, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -2219,7 +2484,7 @@ " 'glyburide-metformin']" ] }, - "execution_count": 69, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } @@ -2272,14 +2537,23 @@ "id": "Y_9as5FlqoZV" }, "source": [ - "The next step is to loop over our list of `meds`. On each iteration, we filter out any \"no\" values, indicating that a patient did not follow this treatment, and get the percentage of patients who were readmitted to hospital. We are able to use the `vstack` function to append each result for each drug into one table.\n", + "Now we are ready to perform our query to get a table containing the percentage of patients following a treatment with each drug who were readmitted to hospital.\n", + "\n", + "The query will work by iterating over all the drugs we want to include in our final table.\n", + "\n", + "For each iteration we will get a row to add to our final table, containing the percentage of readmitted patients for that drug.\n", "\n", - "We then add a column with the list of medicines in the same order and sort the list from lowest to highest percentage of readmissions." + "To do this, we filter down that medication's column to rows that do not contain \"No\". This gives us rows where the patient was following some sort of treatment with the drug.\n", + "We then caclulate the percentage of those patients who were readmitted and give the result a column name `overall readmitted`.\n", + "\n", + "Then we add this row to the table using `vstack`. If the table doesn't yet exist, our query result becomes the table, which we will then add to!\n", + "\n", + "We finally use collect().fetch() to get out output as a Polars dataframe that we can display." ] }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 73, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2288,6 +2562,47 @@ "id": "aEU6wEvYAhz6", "outputId": "e51f858a-8992-4944-fb4c-74834b950207" }, + "outputs": [], + "source": [ + "# create a null table value for later use\n", + "table = None\n", + "\n", + "# iterate over medications list\n", + "for drugs in meds:\n", + " # filter data down to cases where dosage was steady, increased or decreased\n", + " tmp = rdf.filter(pl.col(drugs) != \"No\").select(\n", + " [\n", + " (\n", + " pl.col(\"is_readmitted\").sum() / pl.col(\"is_readmitted\").count() * 100\n", + " ).alias(\"overall readmitted %\"),\n", + " ]\n", + " )\n", + " # if first iteration, table give value of our tmp query, otherwise tmp query appended to end of table\n", + " if table == None:\n", + " table = tmp\n", + " else:\n", + " table = table.vstack(tmp)\n", + "\n", + "# convert table to Polars dataframe\n", + "table = table.collect().fetch()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This table current contains the percentage of readmissions for each medication we iterated over, but it does not include a column with the medication names. \n", + "\n", + "We will add this by converting out list of medications into a Polars Series with the column name `medication` and adding it to our table using the `with_columns` method.\n", + "\n", + "We now have an `overall readmitted %` and `medication` column in our table. To swap the order so that the `medication` column goes first, we can use `select` and select the columns in the order we want. We then sort the table by lowest to highest `overall readmitted %` value." + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, "outputs": [ { "data": { @@ -2482,37 +2797,17 @@ "└────────────────┴──────────────────────┘" ] }, - "execution_count": 70, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# create a null table value for later use\n", - "table = None\n", - "\n", - "# iterate over medications list\n", - "for drugs in meds:\n", - " # filter data down to cases where dosage was steady, increased or decreased\n", - " tmp = rdf.filter(pl.col(drugs) != \"No\").select(\n", - " [\n", - " (\n", - " pl.col(\"is_readmitted\").sum() / pl.col(\"is_readmitted\").count() * 100\n", - " ).alias(\"overall readmitted %\"),\n", - " ]\n", - " )\n", - " # if first iteration, table give value of our tmp query, otherwise tmp query appended to end of table\n", - " if table == None:\n", - " table = tmp\n", - " else:\n", - " table = table.vstack(tmp)\n", - "\n", - "# convert table to Polars dataframe\n", - "table = table.collect().fetch()\n", - "\n", "# create and add new column with medication names in same order as iteration and disaply results\n", "new_col = pl.Series(\"medication\", meds)\n", - "table.with_columns([new_col]).select([\"medication\", \"overall readmitted %\"]).sort(\n", + "table = table.with_columns([new_col])\n", + "\n", + "table.select([\"medication\", \"overall readmitted %\"]).sort(\n", " pl.col(\"overall readmitted %\")\n", ")" ] @@ -2528,12 +2823,13 @@ "\n", "There may be medical explanations for this such as certain drugs being linked to more complex cases.\n", "\n", + "### NOTE TO OPHELIE- WE COULD DROP THE NEXT EXAMPLE AND JUST STICK WITH THE FIRST ONE FOR THIS SECTION?\n", "We can equally repeat the same process but zoom in just on dosages that were increased (`Up`), `decreased` (`Down`) or `steady` (`Steady`). In this case, let's take a look at dosages that were `decreased`. Feel free to replace the DOSAGE variable with `decreased` or `steady` or the condition to check for short or long-term readmissions only and re-run the cell if you want to take a look at how they compare." ] }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 75, "metadata": {}, "outputs": [ { @@ -2549,7 +2845,7 @@ " 'insulin']" ] }, - "execution_count": 66, + "execution_count": 75, "metadata": {}, "output_type": "execute_result" } @@ -2571,7 +2867,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 76, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2724,7 +3020,7 @@ "└───────────────┴──────────────────────┘" ] }, - "execution_count": 67, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } @@ -2732,8 +3028,6 @@ "source": [ "# create a null table value for later use\n", "table = None\n", - "\n", - "# iterate over medications list\n", "for drugs in meds:\n", " # filter data down to cases where dosage increased\n", " tmp = rdf.filter(pl.col(drugs) == DOSAGE)\n", @@ -2805,7 +3099,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 77, "metadata": { "id": "xROO5Oxzvev-" }, From 5b8cd86bb4ce408550139aa208b2acf57aa85c17 Mon Sep 17 00:00:00 2001 From: lyie28 Date: Fri, 24 Feb 2023 15:42:05 +0100 Subject: [PATCH 19/22] fmt --- client/src/bastionlab/polars/remote_polars.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/bastionlab/polars/remote_polars.py b/client/src/bastionlab/polars/remote_polars.py index de70c548..e7f438a7 100644 --- a/client/src/bastionlab/polars/remote_polars.py +++ b/client/src/bastionlab/polars/remote_polars.py @@ -548,7 +548,7 @@ def pieplot( key_loc: str = "center left", key_title: str = None, key_bbox=(1, 0, 0.5, 1), - **kwargs + **kwargs, ) -> None: """Draws a pie chart based on values within single column. pieplot collects necessary data only and calculates percentage values before calling matplotlib pyplot's pie function to create a pie chart. From bcf28bd1f191cbbe0d898f8d64f2d9f37641f8f9 Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Mon, 27 Feb 2023 16:24:30 +0100 Subject: [PATCH 20/22] reviewed part 2 --- .../how-to-guides/diabetes_exploration.ipynb | 319 +++--------------- 1 file changed, 41 insertions(+), 278 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index 58270ccc..8afea5f4 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -1096,13 +1096,15 @@ "id": "NfRexmoN0X9h" }, "source": [ - "We are all set-up, so let's dive into the analysis.\n", + "We are all set-up! Let's dive into the analysis.\n", "\n", "### Age as a factor in readmission and emergency trips\n", "\n", - "Let's start by visualizing the number of patients who were readmitted to hospital for diabetes-related issues during the study.\n", + "We'll start by visualizing the number of patients who were readmitted to hospital for diabetes-related issues during the study.\n", "\n", - "To do this we group data by `age` and aggregate the `sum` of those who were readmitted. We'll generate a barplot for this query." + "To do this we group data by `age` and aggregate the `sum` of those who were readmitted. We'll generate a barplot for this query.\n", + "\n", + "***# missing comment(s) in code =)***" ] }, { @@ -1136,6 +1138,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "BdRDwT74BOrr" @@ -1145,7 +1148,7 @@ "\n", "If we take a look at the mean number of cases per age group using `histplot`, we see that it follows the same trend. But it shows that it may not represent a higher risk of readmission for older patients, rather a much increased number of diabetes patients in older age groups.\n", "\n", - "***# LAST SENTENCE IS UNCLEAR. WHAT DO YOU MEAN?***" + "***# Last sentence is unclear. What do you mean?***" ] }, { @@ -1184,15 +1187,17 @@ "source": [ "If we zoom in on `short-term` and `long-term` readmittance individually and get the percentage of patients in these groups who are readmitted instead of the count, we get a rather different picture.\n", "\n", - "***# SENTENCE IS TOO LONG. Maybe try to use more direct formulations and cut the sentences more so each one says one thing (2 tops)?***\n", + "***# Sentence is too long. Maybe try to use more direct formulations and cut the sentences more so each one says one thing (2 tops)?***\n", "\n", "To get these percentage values, we divide the total number of short-term or long-term values in the readmitted column by the total values in this column.\n", "\n", - "To get the total short-term or long-term values, we use the str.count_match function to fill the readmitted column with True (1) values where the contents of the cell are short-term or long-term respectively and False (0) for any other values. We can use the sum function to count up all of these True values.\n", + "To get the total short-term or long-term values, we use the `str.count_match` function to fill the readmitted column with True (`1`) values where the contents of the cell are short-term or long-term respectively and False (`0`) for any other values. We can use the `sum()` function to count up all of these True values.\n", "\n", - "To get the total values in the readmitted column, we select the column and use count() function.\n", + "To get the total values in the readmitted column, we select the column and use `count()` function.\n", "\n", - "We can then set the column name to whatever we like using the alias function." + "We can then set the column name to whatever we like using the alias function.\n", + "\n", + "***# Here you could maybe put some of the previous info as comments in code and get the paragraph a bit easier to read? Or just put the info again so it's easier to go through the code?***\n" ] }, { @@ -1252,12 +1257,13 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "nlHmjMozE38p" }, "source": [ - "We see a slight trend of increased long-term readmissions as age increases, but interestingly, a much higher risk of short-term readmission in 20-30 year olds. This could be explained by younger patients perhaps not having yet found the correct treatment or lifestyle to manage their diabetes." + "We see a slight trend of increased long-term readmissions as age increases. But interestingly, there is a much higher risk of short-term readmission in 20-30 year olds. This could be explained by younger patients perhaps not having yet found the correct treatment or lifestyle to manage their diabetes." ] }, { @@ -1320,11 +1326,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "High or very high A1C levels can indicate an increased risk of diabetes complications. In this dataset, A1C levels are grouped into \"very high\", \"high\", \"normal\" and \"null\" (not taken).\n", + "High or very high A1C levels can indicate an increased risk of diabetes complications. In this dataset, A1C levels are grouped into `very high`, `high`, `normal` and `null` (A1C levels not taken).\n", "\n", - "Let's take a look at the impact of A1C levels being checked during the hospital admission on the likelihood of a patient's medication being changed.\n", + "Let's take a look at the impact A1C levels being checked during the hospital admission can have on the likelihood of a patient's medication being changed.\n", "\n", - "We group the dataset by A1Cresult group and get the percentage of patients in each of these groups who had a change to their medication during their hospital stay." + "We group the dataset by `A1Cresult` group and get the percentage of patients in each of these groups who had a change to their medication during their hospital stay." ] }, { @@ -1467,14 +1473,14 @@ "id": "xX672CJwpAYv" }, "source": [ - "Perhaps as expected, those with a very high or high A1Cresult were more likely to have a medication change. Interestingly, those who do not have their A1C level examined are only as likely to change medication as those with normal A1C levels. This shows doctors are less likely to change medication unless they know that A1C levels are higher than expected via exams.\n", + "As expected, those with a very high or high A1Cresult were more likely to have a medication change. But interestingly, those who do not have their A1C level examined are as likely to change medication as those with normal A1C levels. This shows doctors are less likely to change medication unless they know that A1C levels are higher than expected via exams.\n", "\n", "We can visualize this trend by comparing a piechart of medication change for those who did and did not have their A1C level recorded.\n", "\n", "To do this:\n", "\n", - "- We first create a subplot grid with space for two plots, ax1 and ax2.\n", - "- We then filter the dataset down into two datasets, a `taken` group which filters out any null data from the `A1Cresult` column and a `non_taken` group which filters out any non-null data from teh `A1Cresult` column.\n", + "- We first create a subplot grid with space for two plots, `ax1` and `ax2`.\n", + "- We filter the dataset down to two datasets: a `taken` group which filters out any null data from the `A1Cresult` column, and a `non_taken` group which filters out any non-null data from the `A1Cresult` column.\n", "- We group our two datasets by the `change` column and create a `count` column for our two change groups, `True` and `False`. \n", "- Finally we call `pieplot`.\n", "\n", @@ -1533,7 +1539,7 @@ "\n", "What we now want to know is whether this has an impact on the likelihood of patient readmission in the short and long term.\n", "\n", - "Let's start by getting the percentage of patients in each group who were readmitted to hispital within the following month after their hospital stay." + "Let's start by getting the percentage of patients in each group who were readmitted to hospital within the following month after their first stay." ] }, { @@ -1657,7 +1663,8 @@ } ], "source": [ - "# percentages of those readmitted within a month of initial hospital visit by A1C result group\n", + "# percentages of those readmitted within a month of initial hospital\n", + "# visit by A1C result group\n", "ret = rdf.groupby(pl.col(\"A1Cresult\")).agg(\n", " [\n", " (\n", @@ -1820,7 +1827,7 @@ "id": "HmsKOU2bqz6F" }, "source": [ - "We see that patients who did not have their A1C level taken are the most likely to be readmitted within a month of their hospital admission. They were also almost as likely as their \"very high\" counterparts to be readmitted in the long-term. \n", + "We see that patients who did not have their A1C level taken are the most likely to be readmitted within a month of their hospital admission. They were also almost as likely as their `very high` counterparts to be readmitted in the long-term. \n", "\n", "Our findings suggests that:\n", "- Taking patients' A1C levels may help encourage doctors to make changes in medication.\n", @@ -1838,7 +1845,9 @@ "\n", "For the next part of our analysis, we will look at how treatment with different medications led to above or below average patient readmission.\n", "\n", - "Let's start by getting the percentage of all patients in the study who were readmitted to hospital in the short or long-term." + "Let's start by getting the percentage of all patients in the study who were readmitted to hospital in the short or long-term.\n", + "\n", + "***# some comment in the code maybe here?***" ] }, { @@ -1930,7 +1939,7 @@ "source": [ "Next let's get the percentage of patients readmitted to hospital for each medication, regardless of whether dosage was increased, decreased or remained the same.\n", "\n", - "Let's start by getting a list of the medications we want to look at. We will narrow this list down to drugs with more than 30 rows of data (\"increased\", \"steady\" or \"decreased\" dosage) to remove any medication with only a handful of results." + "Let's start by getting a list of the medications we want to look at. We will narrow this list down to drugs with more than 30 rows of data (`increased`, `steady` or `decreased` dosage) to remove any medication with only a handful of results." ] }, { @@ -2022,12 +2031,13 @@ "\n", "For each iteration we will get a row to add to our final table, containing the percentage of readmitted patients for that drug.\n", "\n", - "To do this, we filter down that medication's column to rows that do not contain \"No\". This gives us rows where the patient was following some sort of treatment with the drug.\n", - "We then caclulate the percentage of those patients who were readmitted and give the result a column name `overall readmitted`.\n", + "- To do this, we filter down that medication's column to rows that do not contain `No`. This gives us rows where the patient was following some sort of treatment with the drug.\n", + "\n", + "- We calculate the percentage of those patients who were readmitted and give the result a column name `overall readmitted`.\n", "\n", - "Then we add this row to the table using `vstack`. If the table doesn't yet exist, our query result becomes the table, which we will then add to!\n", + "- We add this row to the table using `vstack`. If the table doesn't yet exist, our query result becomes the table, and we'll add to it!\n", "\n", - "We finally use collect().fetch() to get out output as a Polars dataframe that we can display." + "- We use `collect().fetch()` to get the output as a Polars dataframe that we can display." ] }, { @@ -2075,7 +2085,7 @@ "\n", "We will add this by converting out list of medications into a Polars Series with the column name `medication` and adding it to our table using the `with_columns` method.\n", "\n", - "We now have an `overall readmitted %` and `medication` column in our table. To swap the order so that the `medication` column goes first, we can use `select` and select the columns in the order we want. We then sort the table by lowest to highest `overall readmitted %` value." + "Our table will have the `overall readmitted %` column before the `medication` one. To swap the order so `medication` goes first, we'll use `select` and select the columns in the order we want. We'll then sort the table by lowest to highest `overall readmitted %` value." ] }, { @@ -2282,7 +2292,7 @@ } ], "source": [ - "# create and add new column with medication names in same order as iteration and disaply results\n", + "# create and add new column with medication names in same order as iteration and display results\n", "new_col = pl.Series(\"medication\", meds)\n", "table = table.with_columns([new_col])\n", "\n", @@ -2298,251 +2308,9 @@ "id": "PtGj-w4OrU_5" }, "source": [ - "This gives us significiant results with 12-13% less patients taking `tolazamide` or `tolbutamide` readmitted to hospital than the overall average, while 17% more patients taking `miglitol` were readmitted!\n", - "\n", - "There may be medical explanations for this such as certain drugs being linked to more complex cases.\n", - "\n", - "### NOTE TO OPHELIE- WE COULD DROP THE NEXT EXAMPLE AND JUST STICK WITH THE FIRST ONE FOR THIS SECTION IF WE FEEL LIKE THIS IS ALREADY LONG ENOUGH?\n", - "We can equally repeat the same process but zoom in just on dosages that were increased (`Up`), `decreased` (`Down`) or `steady` (`Steady`). In this case, let's take a look at dosages that were `decreased`. Feel free to replace the DOSAGE variable with `decreased` or `steady` or the condition to check for short or long-term readmissions only and re-run the cell if you want to take a look at how they compare." - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['metformin',\n", - " 'repaglinide',\n", - " 'glimepiride',\n", - " 'glipizide',\n", - " 'glyburide',\n", - " 'pioglitazone',\n", - " 'rosiglitazone',\n", - " 'insulin']" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# get the number of decreased doses per medication and flip the output vertically\n", - "DOSAGE = \"Down\"\n", - "meds = rdf.select(pl.col(x).str.count_match(\"Down\").sum() for x in all_meds).melt(\n", - " variable_name=\"medication\", value_name=\"count\"\n", - ")\n", - "\n", - "# remove any medications that don't have at least 100 rows of data and get this result as a Polars dataframe\n", - "meds = meds.filter(pl.col(\"count\") > 30).collect().fetch()\n", - "\n", - "# convert output to a list via Pandas API\n", - "meds = meds.to_pandas()[\"medication\"].tolist()\n", - "meds" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 312 - }, - "id": "nnGQB49dhwqE", - "outputId": "f0f36f25-88fa-452a-a34e-6d65e2d981d2" - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "shape: (8, 2)\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n", - "medication\n", - "\n", - "overall readmitted %\n", - "
\n", - "str\n", - "\n", - "f64\n", - "
\n", - ""rosiglitazone"\n", - "\n", - "31.034483\n", - "
\n", - ""metformin"\n", - "\n", - "45.043478\n", - "
\n", - ""glimepiride"\n", - "\n", - "47.938144\n", - "
\n", - ""glyburide"\n", - "\n", - "48.758865\n", - "
\n", - ""repaglinide"\n", - "\n", - "48.888889\n", - "
\n", - ""insulin"\n", - "\n", - "52.790964\n", - "
\n", - ""glipizide"\n", - "\n", - "52.857143\n", - "
\n", - ""pioglitazone"\n", - "\n", - "53.389831\n", - "
\n", - "
" - ], - "text/plain": [ - "shape: (8, 2)\n", - "┌───────────────┬──────────────────────┐\n", - "│ medication ┆ overall readmitted % │\n", - "│ --- ┆ --- │\n", - "│ str ┆ f64 │\n", - "╞═══════════════╪══════════════════════╡\n", - "│ rosiglitazone ┆ 31.034483 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ metformin ┆ 45.043478 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ glimepiride ┆ 47.938144 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ glyburide ┆ 48.758865 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ repaglinide ┆ 48.888889 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ insulin ┆ 52.790964 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ glipizide ┆ 52.857143 │\n", - "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n", - "│ pioglitazone ┆ 53.389831 │\n", - "└───────────────┴──────────────────────┘" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# create a null table value for later use\n", - "table = None\n", - "for drugs in meds:\n", - " # filter data down to cases where dosage increased\n", - " tmp = rdf.filter(pl.col(drugs) == DOSAGE)\n", - " # get a RemoteLazyFrame of percentages of patients where each drug is increased were readmitted to hospital during study\n", - " percentages = tmp.select(\n", - " [\n", - " (\n", - " pl.col(\"is_readmitted\").sum() / pl.col(\"is_readmitted\").count() * 100\n", - " ).alias(\"overall readmitted %\"),\n", - " ]\n", - " )\n", - " # if first iteration, table and data_avilable are assigned percentages and row_count tables\n", - " if table == None:\n", - " table = percentages\n", - " # else we use vstack to add new row of percentages\n", - " else:\n", - " table = table.vstack(percentages)\n", - "\n", - "table = table.collect().fetch()\n", - "new_col = pl.Series(\"medication\", meds)\n", - "table = table.with_columns([new_col])\n", - "table.select([\"medication\", \"overall readmitted %\"]).sort(\n", - " pl.col(\"overall readmitted %\")\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "id": "DuMXzt7zIHp3" - }, - "source": [ - "Here we see that patients with a decreased dosage of `rosiglitazone` were readmitted at a rate well below avergae. Meanwhile, patients who decreased their dosage of `insulin`, `glipizide` or `pioglitazone` were all at least 6% more likely to be readmitted to hospital.\n", + "This gives us significiant results: 12-13% less patients taking `tolazamide` or `tolbutamide` were readmitted to hospital compared to the overall average, while 17% more patients taking `miglitol` were readmitted!\n", "\n", - "These results could helpe us to flag medications which are riskier to decrease or encourage us to decrease the dosages of others." + "There may be medical explanations for this such as certain drugs being linked to more complex cases. In any case, those results could help flag medications which are riskier to decrease or encourage to decrease the dosages of others." ] }, { @@ -2554,7 +2322,7 @@ "source": [ "### Conclusions\n", "\n", - "This brings us to the end of our data exploration. We gained meaningful insights:\n", + "We gained meaningful insights from this explorations:\n", "\n", "- 20-30 year olds are the most at-risk age group of short-term hospital readmission and emergency visits.\n", " \n", @@ -2566,14 +2334,9 @@ "\n", "- Patients following a treatment of `tolazamide` or `tolbutamide` were readmitted at a well below avergae rate, while those taking `miglitol` were readmitted at a rate well above average.\n", "\n", - "- Patients with a decreased dose of `rosiglitazone` were readmitted well below the average rate of readmission, while those with with a decreased dose of `insulin`, `glipizide` or `pioglitazone` readmitted at a significantly above average rate.\n", - "\n", - "\n", - "This is a rich dataset with many avenues to explore, so feel free to continue exploring!\n", - "\n", - "However in our case, that's all we've got time for! Let's close our connection and stop the server. \n", + "This is a rich dataset with many avenues to explore, so feel free to continue exploring and running more queries on this notebook!\n", "\n", - "(Leave this next block commented if you want to continue to run queries on the dataset instead!)\n" + "But once you're done, you can close the connection and stop the server. To do so, uncomment the following code block:" ] }, { From dbefea13a470d3473a1edf31f5e4945dbb660540 Mon Sep 17 00:00:00 2001 From: lyie28 Date: Mon, 27 Feb 2023 16:56:40 +0100 Subject: [PATCH 21/22] Updated --- .../how-to-guides/diabetes_exploration.ipynb | 160 +++++++++++------- 1 file changed, 95 insertions(+), 65 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index 8afea5f4..d1b65ffd 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -214,7 +214,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "d38b27a2-9ad4-451e-bf8c-f0d280eee561\n" + "4d6d50ed-7d46-48a4-ad24-a87bec236b80\n" ] } ], @@ -347,7 +347,7 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=d38b27a2-9ad4-451e-bf8c-f0d280eee561)" + "FetchableLazyFrame(identifier=4d6d50ed-7d46-48a4-ad24-a87bec236b80)" ] }, "execution_count": 8, @@ -975,7 +975,7 @@ { "data": { "text/plain": [ - "'4e458c87-76c9-4900-9b4f-e8a93e2f7bdf'" + "'2d3b0bbe-0d8b-4e0a-88e6-97e73e64ca7e'" ] }, "execution_count": 20, @@ -1036,7 +1036,7 @@ { "data": { "text/plain": [ - "FetchableLazyFrame(identifier=4e458c87-76c9-4900-9b4f-e8a93e2f7bdf)" + "FetchableLazyFrame(identifier=2d3b0bbe-0d8b-4e0a-88e6-97e73e64ca7e)" ] }, "execution_count": 22, @@ -1102,9 +1102,7 @@ "\n", "We'll start by visualizing the number of patients who were readmitted to hospital for diabetes-related issues during the study.\n", "\n", - "To do this we group data by `age` and aggregate the `sum` of those who were readmitted. We'll generate a barplot for this query.\n", - "\n", - "***# missing comment(s) in code =)***" + "To do this we group data by `age` and aggregate the `sum` of those who were readmitted. We'll generate a barplot for this query." ] }, { @@ -1131,9 +1129,12 @@ } ], "source": [ + "# get total number of patients readmitted per each age group\n", "total_readmitted = rdf.groupby(\"age\").agg(\n", " pl.col(\"is_readmitted\").sum().alias(\"total readmitted\")\n", ")\n", + "\n", + "# visualize this query with barplot\n", "total_readmitted.barplot(x=\"age\", y=\"total readmitted\")" ] }, @@ -1144,11 +1145,9 @@ "id": "BdRDwT74BOrr" }, "source": [ - "In terms of the number of readmissions, we see a clear trend: readmission cases increase with age, before dropping down in the 80-90 and 90-100 age groups. This could be due to increased mortality in these age ranges.\n", - "\n", - "If we take a look at the mean number of cases per age group using `histplot`, we see that it follows the same trend. But it shows that it may not represent a higher risk of readmission for older patients, rather a much increased number of diabetes patients in older age groups.\n", + "In terms of the number of readmissions, we see a clear trend: the number of patients readmitted to the hospital increased with age, before dropping down in the 80-90 and 90-100 age groups. This could be due to increased mortality in these age ranges.\n", "\n", - "***# Last sentence is unclear. What do you mean?***" + "However, this trend is not representative of an increased risk of readmission, but rather it is relative to the number of patients in each group who took part in this study. If we look at the overall age distribution of the patients in the study, we see that it matches the trends seen in our previous bar plot." ] }, { @@ -1175,6 +1174,7 @@ } ], "source": [ + "# get age distribution of patients\n", "rdf.histplot(x=\"age\")" ] }, @@ -1185,19 +1185,11 @@ "id": "xPFiho5eEKNT" }, "source": [ - "If we zoom in on `short-term` and `long-term` readmittance individually and get the percentage of patients in these groups who are readmitted instead of the count, we get a rather different picture.\n", - "\n", - "***# Sentence is too long. Maybe try to use more direct formulations and cut the sentences more so each one says one thing (2 tops)?***\n", - "\n", - "To get these percentage values, we divide the total number of short-term or long-term values in the readmitted column by the total values in this column.\n", + "Let's now look at the percentage of patients in each age catgeory who were readmitted within a month of their hospital admission.\n", "\n", - "To get the total short-term or long-term values, we use the `str.count_match` function to fill the readmitted column with True (`1`) values where the contents of the cell are short-term or long-term respectively and False (`0`) for any other values. We can use the `sum()` function to count up all of these True values.\n", + "To get these percentage values, we divide the total number of short-termvalues in the readmitted column by the total values in this column.\n", "\n", - "To get the total values in the readmitted column, we select the column and use `count()` function.\n", - "\n", - "We can then set the column name to whatever we like using the alias function.\n", - "\n", - "***# Here you could maybe put some of the previous info as comments in code and get the paragraph a bit easier to read? Or just put the info again so it's easier to go through the code?***\n" + "We can then set the column name to whatever we like using the alias function." ] }, { @@ -1221,7 +1213,43 @@ }, "metadata": {}, "output_type": "display_data" - }, + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "short_term = rdf.groupby(\"age\").agg(\n", + " (\n", + " pl.col(\"readmitted\")\n", + " .str.count_match(\"short-term\")\n", + " .sum() # get number of patients in short-term readmitted catgeory\n", + " / pl.col(\n", + " \"readmitted\"\n", + " ).count() # get number of all patients in this age catgeory regardless of readmitted status\n", + " * 100\n", + " ).alias(\n", + " \"short-term readmitted\"\n", + " ) # set name for our new percentage column\n", + ")\n", + "\n", + "# display as bar plot\n", + "short_term.barplot(x=\"age\", y=\"short-term readmitted\")\n", + "plt.show()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will now do the same but for the percentage of patients in each age group who were readmitted at least a month after their first hospital visit." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAGwCAYAAACzXI8XAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAx1klEQVR4nO3deVxVdeL/8fd14YILoCZbgiLuC65ppG3qVFiY5ZSllVaj43yxUqbJSM20DGtmcmlMK01nMpcWtW2SygXTNBXFZVRSokQTrBxAUFHh8/ujh/fXTSQOgvce5vV8PM7j4T3n3MP70w17d87nnOswxhgBAADYUA1PBwAAAKgoigwAALAtigwAALAtigwAALAtigwAALAtigwAALAtigwAALCtWp4OUNVKSkr0/fffq379+nI4HJ6OAwAAysEYoxMnTigsLEw1alz8vEu1LzLff/+9wsPDPR0DAABUQFZWlpo0aXLR7dW+yNSvX1/Sz/8g/P39PZwGAACUR35+vsLDw13/Hb+Yal9kzl9O8vf3p8gAAGAzvzUthMm+AADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtigyAADAtmp5OgAAoPp65plnPB2hTN6eD7+NIgMAwG94+50eno5wUXfftcXTETyKS0sAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2KDIAAMC2PFpk5syZo+joaPn7+8vf318xMTH65JNPXNtvuOEGORwOt2XUqFEeTAwAALyJRx+I16RJE02bNk0tW7aUMUb//Oc/dfvtt2vHjh1q3769JGnEiBGaMmWK6z116tTxVFwAAOBlPFpk4uLi3F5PnTpVc+bM0ebNm11Fpk6dOgoJCfFEPAAA4OW85isKiouL9c4776iwsFAxMTGu9W+99ZYWLVqkkJAQxcXFaeLEiWWelSkqKlJRUZHrdX5+fpXmBoCqsG/qGk9HKFPb8X08HQGQ5AVFZvfu3YqJidHp06dVr149rVixQu3atZMkDRkyRE2bNlVYWJh27dqlcePGKT09XcuXL7/o8ZKSkjR58uTLFR8AAHiQx4tM69atlZaWpry8PL377rsaNmyYUlJS1K5dO40cOdK1X8eOHRUa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oMC1z6hRo0x4eLhZvXq12bZtm7n66qvNNddc48HUF/rggw/Mxx9/bL7++muTnp5unnrqKVO7dm2zZ88eY4w9xvBLW7ZsMc2aNTPR0dHmsccec623wzgmTZpk2rdvb44ePepafvjhB9d2O4zh+PHjpmnTpmb48OHmq6++Mt98841JTk42Bw8edO1jh9/vY8eOuX0On332mZFk1q5da4yxx2dhjDFTp041jRo1Mh999JHJzMw077zzjqlXr56ZOXOmax87fB533323adeunUlJSTEHDhwwkyZNMv7+/ubw4cPGGO8YA0XmEvTo0cPEx8e7XhcXF5uwsDCTlJTkwVTl9+siU1JSYkJCQsxf//pX17rc3FzjdDrNkiVLPJCwfI4dO2YkmZSUFGPMz5lr165t3nnnHdc++/btM5LMpk2bPBWzXBo0aGDmzZtnuzGcOHHCtGzZ0nz22Wfm+uuvdxUZu4xj0qRJplOnTqVus8sYxo0bZ3r37n3R7Xb9/X7sscdMVFSUKSkpsc1nYYwxt956q3nooYfc1t15551m6NChxhh7fB4nT540NWvWNB999JHb+q5du5rx48d7zRi4tFRBZ86cUWpqqvr16+daV6NGDfXr10+bNm3yYLKKy8zMVHZ2ttuYAgIC1LNnT68eU15eniSpYcOGkqTU1FSdPXvWbRxt2rRRRESE146juLhYS5cuVWFhoWJiYmw3hvj4eN16661ueSV7fRYHDhxQWFiYmjdvrqFDh+rQoUOS7DOGDz74QN27d9ddd92loKAgdenSRa+//rprux1/v8+cOaNFixbpoYceksPhsM1nIUnXXHONVq9era+//lqStHPnTm3YsEGxsbGS7PF5nDt3TsXFxfL19XVb7+fnpw0bNnjNGLz+yb7e6scff1RxcfEFTxgODg7W/v37PZTq0mRnZ0tSqWM6v83blJSUaMyYMerVq5c6dOgg6edx+Pj4XPBlod44jt27dysmJkanT59WvXr1tGLFCrVr105paWm2GcPSpUu1fft2t+vm59nls+jZs6cWLlyo1q1b6+jRo5o8ebKuvfZa7dmzxzZj+OabbzRnzhwlJCToqaee0tatW/Xoo4/Kx8dHw4YNs+Xv98qVK5Wbm6vhw4dLss+/T5L05JNPKj8/X23atFHNmjVVXFysqVOnaujQoZLs8fdt/fr1FRMTo2effVZt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", @@ -1234,26 +1262,23 @@ } ], "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "short_term = rdf.groupby(\"age\").agg(\n", - " (\n", - " pl.col(\"readmitted\").str.count_match(\"short-term\").sum()\n", - " / pl.col(\"readmitted\").count()\n", - " * 100\n", - " ).alias(\"short-term readmitted\")\n", - ")\n", "long_term = rdf.groupby(\"age\").agg(\n", " (\n", - " pl.col(\"readmitted\").str.count_match(\"long-term\").sum()\n", - " / pl.col(\"readmitted\").count()\n", + " pl.col(\"readmitted\")\n", + " .str.count_match(\"long-term\")\n", + " .sum() # get number of patients in long-term readmitted catgeory\n", + " / pl.col(\n", + " \"readmitted\"\n", + " ).count() # get number of all patients in this age catgeory regardless of readmitted status\n", " * 100\n", - " ).alias(\"long-term readmitted\")\n", + " ).alias(\n", + " \"long-term readmitted\"\n", + " ) # set name for our new percentage column\n", ")\n", "\n", - "short_term.barplot(x=\"age\", y=\"short-term readmitted\")\n", - "plt.show()\n", - "long_term.barplot(x=\"age\", y=\"long-term readmitted\")" + "# display as bar plot\n", + "long_term.barplot(x=\"age\", y=\"long-term readmitted\")\n", + "plt.show()" ] }, { @@ -1263,7 +1288,7 @@ "id": "nlHmjMozE38p" }, "source": [ - "We see a slight trend of increased long-term readmissions as age increases. But interestingly, there is a much higher risk of short-term readmission in 20-30 year olds. This could be explained by younger patients perhaps not having yet found the correct treatment or lifestyle to manage their diabetes." + "We see a slight trend of increased long-term readmissions as age increases. But most interestingly, there is a much higher risk of short-term readmission in 20-30 year olds. This could be explained by younger patients perhaps not having yet found the correct treatment or lifestyle to manage their diabetes." ] }, { @@ -1278,7 +1303,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1335,7 +1360,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1448,7 +1473,7 @@ "└───────────┴───────────┘" ] }, - "execution_count": 28, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1491,7 +1516,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -1544,7 +1569,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1657,7 +1682,7 @@ "└───────────┴───────────────────────┘" ] }, - "execution_count": 30, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1687,7 +1712,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1800,7 +1825,7 @@ "└───────────┴──────────────────────┘" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1845,14 +1870,12 @@ "\n", "For the next part of our analysis, we will look at how treatment with different medications led to above or below average patient readmission.\n", "\n", - "Let's start by getting the percentage of all patients in the study who were readmitted to hospital in the short or long-term.\n", - "\n", - "***# some comment in the code maybe here?***" + "Let's start by getting the percentage of all patients in the study who were readmitted to hospital in the short or long-term." ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "metadata": {}, "outputs": [ { @@ -1919,17 +1942,24 @@ "└──────────────┘" ] }, - "execution_count": 32, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "rdf.select(\n", - " (pl.col(\"is_readmitted\").sum() / pl.col(\"is_readmitted\").count() * 100).alias(\n", - " \"readmitted %\"\n", + "# get average percentage of patients who are readmitted\n", + "(\n", + " rdf.select(\n", + " (\n", + " pl.col(\"is_readmitted\").sum() / pl.col(\"is_readmitted\").count() * 100\n", + " ).alias( # calculate percentage\n", + " \"readmitted %\"\n", + " ) # set column name\n", " )\n", - ").collect().fetch()" + " .collect()\n", + " .fetch()\n", + ")" ] }, { @@ -1944,7 +1974,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1972,7 +2002,7 @@ " 'glyburide-metformin']" ] }, - "execution_count": 33, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -2042,7 +2072,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -2090,7 +2120,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -2286,7 +2316,7 @@ "└────────────────┴──────────────────────┘" ] }, - "execution_count": 35, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -2341,7 +2371,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": { "id": "xROO5Oxzvev-" }, @@ -2357,7 +2387,7 @@ "provenance": [] }, "kernelspec": { - "display_name": "Python 3", + "display_name": "base", "language": "python", "name": "python3" }, @@ -2371,12 +2401,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.9.13" }, "orig_nbformat": 4, "vscode": { "interpreter": { - "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + "hash": "d130ca42b532f14c740c9405384e6a25814bad609bad1a40b3b3f26954036080" } } }, From 201611d9f6e7449f0c455cd6b802283612c3ab20 Mon Sep 17 00:00:00 2001 From: Knulpinette Date: Wed, 1 Mar 2023 11:54:33 +0100 Subject: [PATCH 22/22] reviewed! good to go :) --- .../how-to-guides/diabetes_exploration.ipynb | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/docs/how-to-guides/diabetes_exploration.ipynb b/docs/docs/how-to-guides/diabetes_exploration.ipynb index d1b65ffd..6a3b1b38 100644 --- a/docs/docs/how-to-guides/diabetes_exploration.ipynb +++ b/docs/docs/how-to-guides/diabetes_exploration.ipynb @@ -20,7 +20,7 @@ "\n", "In this guide, we will explore a dataset of diabetic patients admitted to hospital in the US over a ten year period. Diabetes is a disease that affects over 10% of the US population and can lead to serious health complications. The dataset contains 51 columns of data, including readmission to hospital, changes to medication and primary, secondary and terciary patient diagnoses.\n", "\n", - "First, we will see how the data owner can upload a dataset to BastionLab and how a data scientist can then connect to BastionLab and **clean the dataset**. Then we'll go on analysing it - showing it is possible to do normal data science work without accessing the data in clear.\n", + "First, we will see how the data owner can upload a dataset to BastionLab and how a data scientist can then connect to BastionLab and **clean the dataset**. Then we'll go on **analysing it** - showing it is possible to do classic data science work without accessing the data in clear.\n", "\n", "But before we can do that, let's get everything set up!\n", "\n", @@ -33,9 +33,9 @@ "- Ensure we have [Python3.7](https://www.python.org/downloads/) (or greater) and [Python Pip](https://pypi.org/project/pip/) installed.\n", "- Install [BastionLab](https://bastionlab.readthedocs.io/en/latest/docs/getting-started/installation/) and the [BastionLab server](https://pypi.org/project/bastionlab-server/0.3.7/) pip packages. \n", "\n", - "
\n", - "

Important: Polars data science library

\n", - "

Among their dependencies is Polars, a Pandas-like data science library that we use with BastionLab. It works nearly identically to Pandas, but it is much faster

\n", + ">
\n", + ">

Important: Polars data science library

\n", + ">

Among BastionLab dependencies is Polars, a Pandas-like data science library that we use with BastionLab. It works nearly identically to Pandas, but it is much faster

\n", "
\n", "\n", "- [Download the dataset](https://drive.google.com/file/d/1NPQoKKG3CdvXTNkHVNYhRQZ8GGiPNlvI/view?usp=share_link) we will be using in this notebook.\n", @@ -244,13 +244,13 @@ "source": [ "`send_df()` will return a FetchableLazyFrame instance, which we will work with directly from now on. \n", "\n", - "
\n", - "

Note: Frames in BastionLab

\n", - "

We talk about two types of LazyFrames in BastionLab: `RemoteLazyFrames` and `FetchableLazyFrames`. \n", - "\n", - "In BastionLab, when we run a query, it is not immediately executed. Like with Polar's LazyFrames, pending queries are only executed when we call collect. FetchableLazyFrames are BastionLab's remote lazy frames when there are no pending queries to run, either because we have just uploaded or got the dataframe using get_df or because we have already ran collect after our latest query. To display these lazy frames we call the fetch method, which will verify that the data frame is safe to display, i.e. is it the result of a safe aggregated query as specified in the privacy policy.\n", - "\n", - "A RemoteLazyFrame is just a FetchableLazyFrame with pending queries still to run (as they have not yet been collected). When we call collect() these operations are run server-side and the result of this is our FetchableLazyFrame.

\n", + ">
\n", + ">

Note: Frames in BastionLab

\n", + ">

We talk about two types of LazyFrames in BastionLab: `RemoteLazyFrames` and `FetchableLazyFrames`. \n", + ">\n", + ">In BastionLab, when we run a query, it is not immediately executed. Like with Polar's LazyFrames, pending queries are only executed when we call collect. FetchableLazyFrames are BastionLab's remote lazy frames when there are no pending queries to run, either because we have just uploaded or got the dataframe using get_df or because we have already ran collect after our latest query. To display these lazy frames we call the fetch method, which will verify that the data frame is safe to display, i.e. is it the result of a safe aggregated query as specified in the privacy policy.\n", + ">\n", + ">A RemoteLazyFrame is just a FetchableLazyFrame with pending queries still to run (as they have not yet been collected). When we call collect() these operations are run server-side and the result of this is our FetchableLazyFrame.

\n", "
\n" ] }, @@ -298,7 +298,7 @@ "\n", "We cannot view the output of the query because it does not aggregate at least 10 rows of data as specified in our privacy policy. It tries to print out individual rows instead!\n", "\n", - "All is working, so now that the dataset has been uploaded, it's time for our data scientists to start their exploration... \n", + "All is working, so now that the dataset has been uploaded, it's time for our data scientists to start their exploration!\n", "\n", "The data owner can now connection their connection to the server." ] @@ -719,7 +719,7 @@ "\n", "We want to group together data in another three other columns using Polars `.then().when().otherwise()` methods to replace values meeting certain criteria with a new value.\n", "\n", - "The first two are **`A1Cresult`**, which contains patients' **HbA1c** level. We want to group these into `very high`, `high`and `normal` groups based on levels defined in our project brief.\n", + "The first two are **`A1Cresult`**, which contains patients' **HbA1c** level. We want to group these into `very high`, `high` and `normal` groups based on levels defined in our project brief.\n", "\n", "These columns are both currently string columns, so we will also need to convert them to float values in order to perform numerical comparisons on them." ] @@ -1147,7 +1147,7 @@ "source": [ "In terms of the number of readmissions, we see a clear trend: the number of patients readmitted to the hospital increased with age, before dropping down in the 80-90 and 90-100 age groups. This could be due to increased mortality in these age ranges.\n", "\n", - "However, this trend is not representative of an increased risk of readmission, but rather it is relative to the number of patients in each group who took part in this study. If we look at the overall age distribution of the patients in the study, we see that it matches the trends seen in our previous bar plot." + "However, this trend is not representative of an increased risk of readmission, it is relative to the number of patients in each group who took part in this study. If we look at the overall age distribution of the patients in the study, we see that it matches the trends seen in our previous bar plot." ] }, { @@ -2065,7 +2065,7 @@ "\n", "- We calculate the percentage of those patients who were readmitted and give the result a column name `overall readmitted`.\n", "\n", - "- We add this row to the table using `vstack`. If the table doesn't yet exist, our query result becomes the table, and we'll add to it!\n", + "- We add this row to the table using `vstack`. If the table doesn't yet exist, our query result becomes the table, and we'll add to it.\n", "\n", "- We use `collect().fetch()` to get the output as a Polars dataframe that we can display." ] @@ -2111,9 +2111,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This table current contains the percentage of readmissions for each medication we iterated over, but it does not include a column with the medication names. \n", + "The current table contains the percentage of readmissions for each medication we iterated over, but it does not include a column with the medication names. \n", "\n", - "We will add this by converting out list of medications into a Polars Series with the column name `medication` and adding it to our table using the `with_columns` method.\n", + "We will add this by converting out list of medications into a `Polars Series` with the column name `medication` and adding it to our table using the `with_columns` method.\n", "\n", "Our table will have the `overall readmitted %` column before the `medication` one. To swap the order so `medication` goes first, we'll use `select` and select the columns in the order we want. We'll then sort the table by lowest to highest `overall readmitted %` value." ]