diff --git a/your-code/main.ipynb b/your-code/main.ipynb index 0102ef9..72fcf5e 100755 --- a/your-code/main.ipynb +++ b/your-code/main.ipynb @@ -7,706 +7,2017 @@ "# Before your start:\n", "- Read the README.md file\n", "- Comment as much as you can and use the resources in the README.md file\n", - "- Happy learning!" + "- Happy learning!\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ - "# Import your libraries:\n" + "#Import your libraries\n", + "import pandas as pd\n", + "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Challenge 1 - Explore the Scikit-Learn Datasets\n", + "# Challenge 1 - Explore the Internal Dataset\n", "\n", - "Before starting to work on our own datasets, let's first explore the datasets that are included in this Python library. These datasets have been cleaned and formatted for use in ML algorithms." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First, we will load the diabetes dataset. Do this in the cell below by importing the datasets and then loading the dataset to the `diabetes` variable using the `load_diabetes()` function ([documentation](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html))." + "In this lab, we will start off by working with the wine dataset in scikit-learn. We will select the wine dataset and use a clustering algorithm to learn more about the functionalities of this library. \n", + "\n", + "We start off by loading the dataset using the `load_wine` function ([documentation](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html)). In the cell below, we will import the function from scikit-learn." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "from sklearn.datasets import load_wine" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's explore this variable by looking at the different attributes (keys) of `diabetes`. Note that the `load_diabetes` function does not return dataframes. It returns you a Python dictionary." + "In the cell below, use the `load_wine` function and assign the wine dataset to a variable called `wine`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "wine = load_wine()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### The next step is to read the description of the dataset. \n", - "\n", - "Print the description in the cell below using the `DESCR` attribute of the `diabetes` variable. Read the data description carefully to fully understand what each column represents.\n", - "\n", - "*Hint: If your output is ill-formatted by displaying linebreaks as `\\n`, it means you are not using the `print` function.*" + "In the next step, list the keys of the variable `wine` to examine its contents. Note that the `load_wine` function does not return dataframes. It returns you a Python dictionary." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names'])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "wine.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Based on the data description, answer the following questions:\n", - "\n", - "1. How many attributes are there in the data? What do they mean?\n", - "\n", - "1. What is the relation between `diabetes['data']` and `diabetes['target']`?\n", - "\n", - "1. How many records are there in the data?" + "Next, list the feature names. These are the different characteristics of the wine. " ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Enter your answer here:\n" + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['alcohol',\n", + " 'malic_acid',\n", + " 'ash',\n", + " 'alcalinity_of_ash',\n", + " 'magnesium',\n", + " 'total_phenols',\n", + " 'flavanoids',\n", + " 'nonflavanoid_phenols',\n", + " 'proanthocyanins',\n", + " 'color_intensity',\n", + " 'hue',\n", + " 'od280/od315_of_diluted_wines',\n", + " 'proline']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "wine['feature_names']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Now explore what are contained in the *data* portion as well as the *target* portion of `diabetes`. \n", + "Print the description of the dataset in the cell below using the `DESCR` attribute of the `wine` variable.\n", "\n", - "Scikit-learn typically takes in 2D numpy arrays as input (though pandas dataframes are also accepted). Inspect the shape of `data` and `target`. Confirm they are consistent with the data description." + "*Hint: If your output is ill-formatted by displaying linebreaks as `\\n`, it means you are not using the print function.*" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Challenge 2 - Perform Supervised Learning on the Dataset" + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ".. _wine_dataset:\n", + "\n", + "Wine recognition dataset\n", + "------------------------\n", + "\n", + "**Data Set Characteristics:**\n", + "\n", + " :Number of Instances: 178 (50 in each of three classes)\n", + " :Number of Attributes: 13 numeric, predictive attributes and the class\n", + " :Attribute Information:\n", + " \t\t- Alcohol\n", + " \t\t- Malic acid\n", + " \t\t- Ash\n", + "\t\t- Alcalinity of ash \n", + " \t\t- Magnesium\n", + "\t\t- Total phenols\n", + " \t\t- Flavanoids\n", + " \t\t- Nonflavanoid phenols\n", + " \t\t- Proanthocyanins\n", + "\t\t- Color intensity\n", + " \t\t- Hue\n", + " \t\t- OD280/OD315 of diluted wines\n", + " \t\t- Proline\n", + "\n", + " - class:\n", + " - class_0\n", + " - class_1\n", + " - class_2\n", + "\t\t\n", + " :Summary Statistics:\n", + " \n", + " ============================= ==== ===== ======= =====\n", + " Min Max Mean SD\n", + " ============================= ==== ===== ======= =====\n", + " Alcohol: 11.0 14.8 13.0 0.8\n", + " Malic Acid: 0.74 5.80 2.34 1.12\n", + " Ash: 1.36 3.23 2.36 0.27\n", + " Alcalinity of Ash: 10.6 30.0 19.5 3.3\n", + " Magnesium: 70.0 162.0 99.7 14.3\n", + " Total Phenols: 0.98 3.88 2.29 0.63\n", + " Flavanoids: 0.34 5.08 2.03 1.00\n", + " Nonflavanoid Phenols: 0.13 0.66 0.36 0.12\n", + " Proanthocyanins: 0.41 3.58 1.59 0.57\n", + " Colour Intensity: 1.3 13.0 5.1 2.3\n", + " Hue: 0.48 1.71 0.96 0.23\n", + " OD280/OD315 of diluted wines: 1.27 4.00 2.61 0.71\n", + " Proline: 278 1680 746 315\n", + " ============================= ==== ===== ======= =====\n", + "\n", + " :Missing Attribute Values: None\n", + " :Class Distribution: class_0 (59), class_1 (71), class_2 (48)\n", + " :Creator: R.A. Fisher\n", + " :Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)\n", + " :Date: July, 1988\n", + "\n", + "This is a copy of UCI ML Wine recognition datasets.\n", + "https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data\n", + "\n", + "The data is the results of a chemical analysis of wines grown in the same\n", + "region in Italy by three different cultivators. There are thirteen different\n", + "measurements taken for different constituents found in the three types of\n", + "wine.\n", + "\n", + "Original Owners: \n", + "\n", + "Forina, M. et al, PARVUS - \n", + "An Extendible Package for Data Exploration, Classification and Correlation. \n", + "Institute of Pharmaceutical and Food Analysis and Technologies,\n", + "Via Brigata Salerno, 16147 Genoa, Italy.\n", + "\n", + "Citation:\n", + "\n", + "Lichman, M. (2013). UCI Machine Learning Repository\n", + "[https://archive.ics.uci.edu/ml]. Irvine, CA: University of California,\n", + "School of Information and Computer Science. \n", + "\n", + ".. topic:: References\n", + "\n", + " (1) S. Aeberhard, D. Coomans and O. de Vel, \n", + " Comparison of Classifiers in High Dimensional Settings, \n", + " Tech. Rep. no. 92-02, (1992), Dept. of Computer Science and Dept. of \n", + " Mathematics and Statistics, James Cook University of North Queensland. \n", + " (Also submitted to Technometrics). \n", + "\n", + " The data was used with many others for comparing various \n", + " classifiers. The classes are separable, though only RDA \n", + " has achieved 100% correct classification. \n", + " (RDA : 100%, QDA 99.4%, LDA 98.9%, 1NN 96.1% (z-transformed data)) \n", + " (All results using the leave-one-out technique) \n", + "\n", + " (2) S. Aeberhard, D. Coomans and O. de Vel, \n", + " \"THE CLASSIFICATION PERFORMANCE OF RDA\" \n", + " Tech. Rep. no. 92-01, (1992), Dept. of Computer Science and Dept. of \n", + " Mathematics and Statistics, James Cook University of North Queensland. \n", + " (Also submitted to Journal of Chemometrics).\n", + "\n" + ] + } + ], + "source": [ + "# Your code here:\n", + "print(wine['DESCR'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The data have already been split to predictor (*data*) and response (*target*) variables. Given this information, we'll apply what we have previously learned about linear regression and apply the algorithm to the diabetes dataset.\n", - "\n", - "#### Let's briefly revisit the linear regression formula:\n", - "\n", - "```\n", - "y = β0 + β1X1 + β2X2 + ... + βnXn + ϵ\n", - "```\n", + "#### From the description, we see that all columns are numeric. We also know that there is no missing data \n", "\n", - "...where:\n", - "\n", - "- X1-Xn: data \n", - "- β0: intercept \n", - "- β1-βn: coefficients \n", - "- ϵ: error (cannot explained by model)\n", - "- y: target\n", - "\n", - "Also take a look at the `sklearn.linear_model.LinearRegression` [documentation](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html).\n", - "\n", - "#### In the cell below, import the `linear_model` class from `sklearn`. " + "Let's plot the alcohol content histogram. Recall that we are working with a numpy array and will need to use a matplotlib function to produce a histogram. " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Create a new instance of the linear regression model and assign the new instance to the variable `diabetes_model`." + "# imports\n", + "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "plt.hist(wine['data'][:,0])\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Next, let's split the training and test data.\n", + "# Challenge 2 - Clustering the Internal Dataset\n", "\n", - "Define `diabetes_data_train`, `diabetes_target_train`, `diabetes_data_test`, and `diabetes_target_test`. Use the last 20 records for the test data and the rest for the training data." + "In this portion of the lab, we will cluster the data to find common traits between the different wines. We will use the k-means clustering algorithm to achieve this goal.\n", + "\n", + "#### We start by importing k-means from scikit-learn and then proceed to create 4 clusters." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "# imports\n", + "from sklearn.cluster import KMeans" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1.29328070e+01, 2.66192982e+00, 2.40315789e+00, 1.99807018e+01,\n", + " 1.01842105e+02, 2.04912281e+00, 1.46315789e+00, 4.01929825e-01,\n", + " 1.43350877e+00, 5.75333333e+00, 8.65087719e-01, 2.29631579e+00,\n", + " 6.97087719e+02],\n", + " [1.38600000e+01, 1.79391304e+00, 2.50695652e+00, 1.70739130e+01,\n", + " 1.06000000e+02, 2.94304348e+00, 3.11086957e+00, 2.98695652e-01,\n", + " 1.92608696e+00, 6.26000000e+00, 1.10000000e+00, 3.03565217e+00,\n", + " 1.33856522e+03],\n", + " [1.25042424e+01, 2.44318182e+00, 2.28378788e+00, 2.07772727e+01,\n", + " 9.24696970e+01, 2.07333333e+00, 1.79545455e+00, 3.84696970e-01,\n", + " 1.47181818e+00, 4.07242423e+00, 9.46212121e-01, 2.50484848e+00,\n", + " 4.52545455e+02],\n", + " [1.35275000e+01, 1.92593750e+00, 2.37093750e+00, 1.77250000e+01,\n", + " 1.06500000e+02, 2.72500000e+00, 2.74250000e+00, 2.88750000e-01,\n", + " 1.87593750e+00, 4.98875000e+00, 1.04268750e+00, 3.08906250e+00,\n", + " 1.01743750e+03]])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "kmeans = KMeans(n_clusters=4)\n", + "census_clusters = kmeans.fit(wine['data'])\n", + "census_clusters.cluster_centers_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Fit the training data and target to `diabetes_model`. Print the *intercept* and *coefficients* of the model." + "#### Print the cluster labels." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3, 3, 1, 1, 0, 1, 1, 1, 3, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 0, 0, 0,\n", + " 3, 3, 0, 0, 1, 1, 3, 3, 1, 1, 3, 1, 3, 3, 3, 3, 3, 0, 0, 3, 3, 0,\n", + " 3, 3, 3, 3, 3, 1, 3, 1, 1, 1, 3, 3, 3, 1, 1, 2, 0, 2, 0, 2, 2, 0,\n", + " 2, 2, 0, 0, 3, 2, 2, 3, 3, 2, 2, 2, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2,\n", + " 0, 0, 2, 2, 2, 2, 2, 3, 0, 2, 0, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0,\n", + " 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2,\n", + " 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 2, 2, 2, 2, 0,\n", + " 0, 0, 2, 3, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0,\n", + " 0, 2])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "kmeans.labels_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Inspecting the results\n", - "\n", - "From the outputs you should have seen:\n", - "\n", - "- The intercept is a float number.\n", - "- The coefficients are an array containing 10 float numbers.\n", - "\n", - "This is the linear regression model fitted to your training dataset.\n", + "#### Compute the size of each cluster. This can be done by counting the number of occurrences of each unique label in the list above.\n", "\n", - "#### Using your fitted linear regression model, predict the *y* of `diabetes_data_test`." + "Which is the largest cluster of the 4?" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Print your `diabetes_target_test` and compare with the prediction. " + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2 66\n", + "0 57\n", + "3 32\n", + "1 23\n", + "dtype: int64" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "pd.Series(kmeans.labels_).value_counts()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "# Your answer here:\n", + "# Los clusters mas grandes son el 0 y 2\n", + "# Para el grupo 0 y 2 existe el mismo numeros de registros." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Is `diabetes_target_test` exactly the same as the model prediction? Explain." + "#### Inspect the shape of `wine['data']`" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(178, 13)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your explanation here:\n" + "# Your code here:\n", + "wine['data'].shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Bonus Challenge 1 - Hypothesis Testing with `statsmodels`\n", - "\n", - "After generating the linear regression model from the dataset, you probably wonder: then what? What is the statistical way to know if my model is reliable or not?\n", - "\n", - "Good question. We'll discuss that using Scikit-Learn in Challenge 5. But for now, let's use a fool-proof way by using the ([Linear Regression class of StatsModels](https://www.statsmodels.org/dev/regression.html)) which can also conduct linear regression analysis plus much more such as calcuating the F-score of the linear model as well as the standard errors and t-scores for each coefficient. The F-score and t-scores will tell you whether you can trust your linear model.\n", - "\n", - "To understand the statistical meaning of conducting hypothesis testing (e.g. F-test, t-test) for slopes, read [this webpage](https://onlinecourses.science.psu.edu/stat501/node/297/) at your leisure time. We'll give you a brief overview next.\n", - "\n", - "* The F-test of your linear model is to verify whether at least one of your coefficients is significantly different from zero. Translating that into the *null hypothesis* and *alternative hypothesis*, that is:\n", - "\n", - " ```\n", - " H0 : β1 = β2 = ... = β10 = 0\n", - " HA : At least one βj ≠ 0 (for j = 1, 2, ..., 10)\n", - " ```\n", - "\n", - "* The t-tests on each coefficient is to check whether the confidence interval for the variable contains zero. If the confidence interval contains zero, it means the null hypothesis for that variable is not rejected. In other words, this particular vaiable is not contributing to your linear model and you can remove it from your formula.\n", - "\n", - "Read the documentations of [StatsModels Linear Regression](https://www.statsmodels.org/dev/regression.html) as well as its [`OLS` class](https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.OLS.html) which stands for *ordinary least squares*.\n", - "\n", - "#### In the next cell, analyze `diabetes_data_train` and `diabetes_target_train` with the linear regression model of `statsmodels`. Print the fit summary.\n", - "\n", - "Your output should look like:\n", - "\n", - "![statsmodels regression](../statsmodels.png)" + "#### Inspect the first 5 records in `wine['data']`" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([127., 100., 101., 113., 118., 112., 96., 121., 97., 98., 105.,\n", + " 95., 89., 91., 102., 112., 120., 115., 108., 116., 126., 102.,\n", + " 101., 95., 96., 124., 93., 94., 107., 96., 101., 106., 104.,\n", + " 132., 110., 100., 110., 98., 98., 128., 117., 90., 101., 103.,\n", + " 107., 111., 102., 101., 103., 108., 92., 94., 111., 115., 118.,\n", + " 116., 118., 102., 108., 88., 101., 100., 94., 87., 104., 98.,\n", + " 78., 78., 110., 151., 103., 86., 87., 139., 101., 97., 86.,\n", + " 112., 136., 101., 86., 86., 78., 85., 94., 99., 90., 88.,\n", + " 84., 70., 81., 86., 80., 88., 98., 162., 134., 85., 88.,\n", + " 88., 97., 88., 98., 86., 85., 90., 80., 84., 92., 94.,\n", + " 107., 88., 103., 88., 84., 85., 86., 108., 80., 87., 96.,\n", + " 119., 102., 86., 82., 85., 86., 92., 88., 80., 122., 104.,\n", + " 98., 106., 85., 94., 89., 96., 88., 101., 96., 89., 97.,\n", + " 92., 112., 102., 80., 86., 92., 113., 123., 112., 116., 98.,\n", + " 103., 93., 89., 97., 98., 89., 88., 107., 106., 106., 90.,\n", + " 88., 111., 88., 105., 112., 96., 86., 91., 95., 102., 120.,\n", + " 120., 96.])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "wine['data'][:,4]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Interpreting hypothesis testing results\n", + "You now know the data object is a 2-dimensional array in which there are 178 rows and 13 columns. Each row is a data record and each column is a feature.\n", "\n", - "Answer the following questions in the cell below:\n", + "#### What is the average ash content for each cluster? \n", "\n", - "1. What is the F-score of your linear model and is the null hypothesis rejected?\n", + "*Hints:* \n", "\n", - "1. Does any of the t-tests of the coefficients produce a confidence interval containing zero? What are they?\n", + "* *Ash* is the 3rd column.\n", "\n", - "1. How will you modify your linear reguression model according to the test results above?" + "* The data object is not a Pandas dataframe so you can't apply `pandas.DataFrame.groupby`. Instead, you can use `np.average`." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your answers here:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Challenge 3 - Peform Supervised Learning on a Pandas Dataframe" + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "labels\n", + "0 2.403158\n", + "1 2.506957\n", + "2 2.283788\n", + "3 2.370937\n", + "Name: 2, dtype: float64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "pd.concat([pd.DataFrame(wine['data']),pd.DataFrame(kmeans.labels_,columns=['labels'])],axis=1).groupby('labels').mean()[2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now that we have dealt with data that has been formatted for scikit-learn, let's look at data that we will need to format ourselves.\n", + "# Challenge 3 - Load and Explore an External Dataset\n", "\n", - "In the next cell, load the `auto-mpg.csv` file included in this folder and assign it to a variable called `auto`." + "We will now load an external dataset using Pandas and use scikit learn to explore the data. In this portion of the lab, we will use a [patient dataset from Kaggle](https://www.kaggle.com/miles99/patient-admission-dataset-for-learning-data-mining). " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "patients = pd.read_csv('../patient-admission-dataset-for-learning-data-mining.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Look at the first 5 rows using the `head()` function:" + "In the next cell, print the first five rows of the data using the `head()` function." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idpatient_namepatient_emaildoctor_phonepatient_genderpatient_dobpatient_diabeticpatient_allergicpatient_weight_kgpatient_height_smpatient_nhs_numberdoctor_nameappointment_datepatient_showis_regular_visitprescribed_medicinesdiagnosis
01Celestyna Dillimorecdillimore0@dion.ne.jp674-914-1212Female10/18/2018FalseTrue591768.200152e+09Sarena Waliszek5/1/2018TrueTruetriamcinolone acetonideI669
12Meta Michielimmichieli1@loc.gov172-580-3586Female2/8/2018FalseTrue77186NaNFarris Robinet12/7/2017TrueTrueNaNNaN
23Cordie Sanctocsancto2@cafepress.com794-222-5085Female10/9/2018TrueTrue901776.145594e+09Kaspar Spitaro10/5/2018FalseFalseNaNNaN
34Josh De Ambrosisjde3@amazon.co.jp856-540-5195Male9/10/2018TrueTrue70150NaNRafferty Fowls10/21/2018FalseTrueNaNNaN
45Delinda Alfonsinidalfonsini4@opensource.org938-978-1131Female2/26/2018FalseTrue821404.804758e+08Glenna MacNeachtain11/15/2018FalseFalseNaNNaN
\n", + "
" + ], + "text/plain": [ + " id patient_name patient_email doctor_phone \\\n", + "0 1 Celestyna Dillimore cdillimore0@dion.ne.jp 674-914-1212 \n", + "1 2 Meta Michieli mmichieli1@loc.gov 172-580-3586 \n", + "2 3 Cordie Sancto csancto2@cafepress.com 794-222-5085 \n", + "3 4 Josh De Ambrosis jde3@amazon.co.jp 856-540-5195 \n", + "4 5 Delinda Alfonsini dalfonsini4@opensource.org 938-978-1131 \n", + "\n", + " patient_gender patient_dob patient_diabetic patient_allergic \\\n", + "0 Female 10/18/2018 False True \n", + "1 Female 2/8/2018 False True \n", + "2 Female 10/9/2018 True True \n", + "3 Male 9/10/2018 True True \n", + "4 Female 2/26/2018 False True \n", + "\n", + " patient_weight_kg patient_height_sm patient_nhs_number \\\n", + "0 59 176 8.200152e+09 \n", + "1 77 186 NaN \n", + "2 90 177 6.145594e+09 \n", + "3 70 150 NaN \n", + "4 82 140 4.804758e+08 \n", + "\n", + " doctor_name appointment_date patient_show is_regular_visit \\\n", + "0 Sarena Waliszek 5/1/2018 True True \n", + "1 Farris Robinet 12/7/2017 True True \n", + "2 Kaspar Spitaro 10/5/2018 False False \n", + "3 Rafferty Fowls 10/21/2018 False True \n", + "4 Glenna MacNeachtain 11/15/2018 False False \n", + "\n", + " prescribed_medicines diagnosis \n", + "0 triamcinolone acetonide I669 \n", + "1 NaN NaN \n", + "2 NaN NaN \n", + "3 NaN NaN \n", + "4 NaN NaN " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "patients.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Evaluate the data to ensure that all numeric columns are correctly detected as such by pandas. If a column is misclassified as object, coerce it to numeric." + "Next, print the column types and check which columns have been misclassified by pandas." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "id int64\n", + "patient_name object\n", + "patient_email object\n", + "doctor_phone object\n", + "patient_gender object\n", + "patient_dob object\n", + "patient_diabetic bool\n", + "patient_allergic bool\n", + "patient_weight_kg int64\n", + "patient_height_sm int64\n", + "patient_nhs_number float64\n", + "doctor_name object\n", + "appointment_date object\n", + "patient_show bool\n", + "is_regular_visit bool\n", + "prescribed_medicines object\n", + "diagnosis object\n", + "dtype: object" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "patients.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "What is the newest model year and the oldest model year?" + "#### We can see that none of the date columns have been correctly classified. Also, some columns contain qualitative data that can be dropped.\n", + "\n", + "First, transform the `patient_dob` and `appointment_date` columns to datetime using the `pd.to_datetime` function." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "patients['patient_dob'] = pd.to_datetime(patients['patient_dob'])\n", + "patients['appointment_date'] = pd.to_datetime(patients['appointment_date'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Check the dataset for missing values and remove all rows containing at least one missing value." + "Next, drop the `id`, `patient_name`, `patient_email`, `patient_nhs_number`, and `doctor_phone` columns. These are not quantitative columns and will not contribute to our analysis." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "patients.drop(['id','patient_name','patient_email','patient_nhs_number','doctor_phone'],axis=1,inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Find the frequency table for the `cylinders` column using the `value_counts()` function. How many possible values of cylinders are there?" + "Now we work on the missing data. Most ML algorithms will not perform as intended if there are missing data.\n", + "\n", + "In the cell below, count how many rows contain missing data in each column. You should see three columns contain missing data:\n", + "\n", + "* `doctor_name`: 58 missing data\n", + "* `prescribed_medicines`: 488 missing data\n", + "* `diagnosis`: 488 missing data" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "patient_gender 0\n", + "patient_dob 0\n", + "patient_diabetic 0\n", + "patient_allergic 0\n", + "patient_weight_kg 0\n", + "patient_height_sm 0\n", + "doctor_name 58\n", + "appointment_date 0\n", + "patient_show 0\n", + "is_regular_visit 0\n", + "prescribed_medicines 488\n", + "diagnosis 488\n", + "dtype: int64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "patients.isna().sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We would like to generate a linear regression model that will predict mpg. To do this, first drop the `car_name` column since it does not contain any quantitative data. Next separate the dataframe to predictor and response variables. Separate those into test and training data with 80% of the data in the training set and the remainder in the test set. \n", + "The main issues are found in the `prescribed_medicines` and `diagnosis` columns. Can we simply drop these rows?\n", + "\n", + "The answer is not yet. Because when there are missing data in these columns, it doesn't mean the data records are broken. Instead, it means no medication was prescribed and no diagnosis was recorded. Therefore, once we fill in the missing data these columns will be fine. But we'll revisit these columns and decide whether we will eventually drop them when we look at how many unique values are there in these categorical columns. \n", "\n", - "Assign the predictor and response training data to `X_train` and `y_train` respectively. Similarly, assign the predictor and response test data to `X_test` and `y_test`.\n", + "For the `prescribed_medicines` column, fill the missing values with the value `no prescription`. For the `diagnosis` column, fill the missing values with `no diagnosis`.\n", "\n", - "*Hint: To separate data for training and test, use the `train_test_split` method we used in previous labs.*" + "*Hint: Use [`pandas.DataFrame.fillna`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html).*" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "patients['prescribed_medicines'] = patients.prescribed_medicines.fillna('no prescription')\n", + "patients['diagnosis'] = patients.prescribed_medicines.fillna('no diagnosis')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now we will processed and peform linear regression on this data to predict the mpg for each vehicle. \n", - "\n", - "#### In the next cell, create an instance of the linear regression model and call it `auto_model`. Fit `auto_model` with your training data." + "How about `doctor_name`? Since a doctor visit without a doctor name might not be meaningful, we will drop these rows." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "patient_gender 0\n", + "patient_dob 0\n", + "patient_diabetic 0\n", + "patient_allergic 0\n", + "patient_weight_kg 0\n", + "patient_height_sm 0\n", + "doctor_name 0\n", + "appointment_date 0\n", + "patient_show 0\n", + "is_regular_visit 0\n", + "prescribed_medicines 0\n", + "diagnosis 0\n", + "dtype: int64" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "patients.dropna(inplace=True)\n", + "patients.isna().sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Challenge 4 - Evaluate the Model\n", - "\n", - "In addition to evaluating your model with F-test and t-test, you can also use the *Coefficient of Determination* (a.k.a. *r squared score*). This method does not simply tell *yes* or *no* about the model fit but instead indicates how much variation can be explained by the model. Based on the r squared score, you can decide whether to improve your model in order to obtain a better fit.\n", - "\n", - "You can learn about the r squared score [here](). Its formula is:\n", - "\n", - "![R Squared](../r-squared.png)\n", - "\n", - "...where:\n", - "\n", - "* yi is an actual data point.\n", - "* ŷi is the corresponding data point on the estimated regression line.\n", + "#### Another step in preprocessing that can be performed by scikit-learn is label encoding. \n", "\n", - "By adding the squares of the difference between all yi-ŷi pairs, we have a measure called SSE (*error sum of squares*) which is an application of the r squared score to indicate the extent to which the estimated regression model is different from the actual data. And we attribute that difference to the random error that is unavoidable in the real world. Obviously, we want the SSE value to be as small as possible.\n", + "We have 4 columns that are of `bool` type. We would like to convert them to an integer column containing either zero or one. We can do this using [scikit-learn's label encoder](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html).\n", "\n", - "#### In the next cell, compute the predicted *y* based on `X_train` and call it `y_pred`. Then calcualte the r squared score between `y_pred` and `y_train` which indicates how well the estimated regression model fits the training data.\n", - "\n", - "*Hint: r squared score can be calculated using `sklearn.metrics.r2_score` ([documentation](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.r2_score.html)).*" + "In the cell below, import the label encoder and encode the 4 boolean columns (*patient_diabetic*, *patient_allergic*, *patient_show*, *is_regular_visit*) with `0` and `1`. " ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "from sklearn.preprocessing import LabelEncoder\n", + "le = LabelEncoder()\n", + "patients['patient_diabetic'] = le.fit_transform(patients['patient_diabetic'])\n", + "patients['patient_allergic'] = le.fit_transform(patients['patient_allergic'])\n", + "patients['patient_show'] = le.fit_transform(patients['patient_show'])\n", + "patients['is_regular_visit'] = le.fit_transform(patients['is_regular_visit'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Our next step is to evaluate the model using the test data. \n", - "\n", - "We would like to ensure that our model is not overfitting the data. This means that our model was made to fit too closely to the training data by being overly complex. If a model is overfitted, it is not generalizable to data outside the training data. In that case, we need to reduce the complexity of the model by removing certain features (variables).\n", - "\n", - "In the cell below, use the model to generate the predicted values for the test data and assign them to `y_test_pred`. Compute the r squared score of the predicted `y_test_pred` and the oberserved `y_test` data." + "Print the data dtypes to confirm those four `bool` columns are converted to `int64`." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "patient_gender object\n", + "patient_dob datetime64[ns]\n", + "patient_diabetic int64\n", + "patient_allergic int64\n", + "patient_weight_kg int64\n", + "patient_height_sm int64\n", + "doctor_name object\n", + "appointment_date datetime64[ns]\n", + "patient_show int64\n", + "is_regular_visit int64\n", + "prescribed_medicines object\n", + "diagnosis object\n", + "dtype: object" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "patients.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Explaining the results\n", + "#### The last step is to handle the `object` data.\n", "\n", - "The r squared scores of the training data and the test data are pretty close (0.8146 vs 0.7818). This means our model is not overfitted. However, there is still room to improve the model fit. Move on to the next challenge." + "There are 4 `object` columns now: `patient_gender`, `doctor_name`, `prescribed_medicines`, and `diagnosis`. The gender columns\n", + "\n", + "In the next cell, check the unique values of each of the `object` columns using `value_counts()`." ] }, { - "cell_type": "markdown", - "metadata": {}, + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Female', 'Male'], dtype=object)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Challenge 5 - Improve the Model Fit\n", - "\n", - "While the most common way to improve the fit of a model is by using [regularization](https://datanice.github.io/machine-learning-101-what-is-regularization-interactive.html), there are other simpler ways to improve model fit. The first is to create a simpler model. The second is to increase the train sample size.\n", - "\n", - "Let us start with the easier option and increase our train sample size to 90% of the data. Create a new test train split and name the new predictors and response variables `X_train09`, `X_test09`, `y_train09`, `y_test09`." + "# Your code here:\n", + "patients.patient_gender.unique()" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['Sarena Waliszek', 'Farris Robinet', 'Kaspar Spitaro',\n", + " 'Rafferty Fowls', 'Glenna MacNeachtain', 'Cissy Markey',\n", + " 'Ryley Swallow', 'Wyn Grassett', 'Dulce McKerley',\n", + " 'Gabie Brafield', 'Oralie Swaffer', 'Humfried Cartmel',\n", + " 'Madelina Scurrell', 'Carly SperaJillie Katt', 'Jilly McGrill',\n", + " 'Hermina Domeny', 'Flossy Canlin', 'Nerte Elmer',\n", + " 'Rouvin McKinstry'], dtype=object)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "patients.doctor_name.unique()" ] }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Initialize a new linear regression model. Name this model `auto_model09`. Fit the model to the new sample (training) data." + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['triamcinolone acetonide', 'no prescription',\n", + " 'octinoxate, avobenzone, and octocrylene',\n", + " 'Glipizide and Metformin Hydrochloride',\n", + " 'Benazepril Hydrochloride', 'WITCH HAZEL',\n", + " 'Terbinafine Hydrochloride', 'Tretinoin', 'Magesium Citrate',\n", + " 'Psyllium Husks', 'aluminum hydroxide', 'Estradiol',\n", + " 'Propranolol Hydrochloride', 'Avobenzone, Octinoxate, Octisalate',\n", + " 'NEOMYCIN SULFATE', 'Sulfamethoxazole and Trimethoprim',\n", + " 'Helium Oxygen Mixture', 'NITROGEN',\n", + " 'acetaminophen, dextromethorphan Hbr, Phenylephrine HCl',\n", + " 'Diphenhydramine Hydrochloride and Zinc Acetate',\n", + " 'Human chorionic gonadotropin (hCG),',\n", + " 'Arsenicum album, Calcarea carbonica, Ignatia amara Kali carbonicum, Lachesis mutus, Natrum muriaticum,',\n", + " 'ABILIFY', 'ALUMINUM SULFATE', 'Natural Medicine',\n", + " 'amoxicillin and clavulanate potassium', 'Ammonium Lactate',\n", + " 'Risperidone', 'fomepizole',\n", + " 'bisoprolol fumarate and hydrochlorothiazide', 'DOCUSATE SODIUM',\n", + " 'dimethicone, octinoxate, octisalate, oxybenzone',\n", + " 'codeine phosphate and guaifenesin', 'ALCOHOL', 'Pineapple',\n", + " 'dextromethorphan polistirex',\n", + " 'ACONITUM NAPELLUS, ARNICA MONTANA, LEDUM PALUSTRE TWIG, MAGNESIUM PHOSPHATE, DIBASIC TRIHYDRATE, TOXICODENDRON PUBESCENS LEAF, and VISCUM ALBUM FRUITING TOP',\n", + " 'Acetaminophen, Dextromethorphan Hydrobromide, Phenylephrine Hydrochloride',\n", + " 'Oxcarbazepine', 'OCTINOXATE and TITANIUM DIOXIDE', 'Ibuprofen',\n", + " 'Metoclopramide Hydrochloride',\n", + " 'OCTINOXATE, OCTISALATE, ZINC OXIDE, OXYBENZONE', 'Oxygen',\n", + " 'Avobenzone, Octinoxate, Octisalate, Oxybenzone', 'Salt Cedar',\n", + " 'Pyrithione Zinc', 'TRAMADOL HYDROCHLORIDE',\n", + " 'Levocetirizine Dihydrochloride', 'SODIUM FLUORIDE', 'Triclosan',\n", + " 'Pyrithione zinc', 'Citalopram', 'Metoprolol Tartrate',\n", + " 'propafenone hydrochloride', 'Silicea Belladonna',\n", + " 'Valacyclovir hydrochloride', 'Protriptyline Hydrochloride',\n", + " 'Dexamethasone', 'Ketoconazole', 'Erythromycin',\n", + " 'ESCITALOPRAM OXALATE', 'alcohol',\n", + " 'AVOBENZONE, OCTOCRYLENE, OXYBENZONE', 'moexipril hydrochloride',\n", + " 'Docusate sodium and Sennosides',\n", + " 'Oats, Common, Cultivated Avena sativa', 'Amlodipine Besylate',\n", + " 'HOMOSALATE, OXYBENZONE, OCTISALATE, AVOBENZONE, OCTOCRYLENE',\n", + " 'Metformin Hydrochloride', 'Gabapentin', 'OCTINOXATE',\n", + " 'Mountain Cedar', 'Artichoke', 'Droperidol',\n", + " 'Arnica montana, Caladium seguinum, Carduus marianus, Damiana, Galium aparine, Glandula suprarenalis suis, Hepar suis, Korean ginseng, Lactuca virosa,',\n", + " 'Valsartan and Hydrochlorothiazide',\n", + " 'Diphenhydramine Hydrochloride', 'Ranitidine Hydrochloride',\n", + " 'Chelidonium Majus, Hepar Suis, Cholesterinum, Lycopodium Clavatum, Tarentula Hispana, Arsenicum Album, Belladonna',\n", + " 'Omeprazole', 'morphine sulfate',\n", + " 'OCTINOXATE, TITANIUM DIOXIDE, and ZINC OXIDE',\n", + " 'Titanium Dioxide, Zinc Oxide, and Octinoxate',\n", + " 'albuterol sulfate', 'Octinoxate and Oxybenzone',\n", + " 'vilazodone hydrochloride', 'benztropine mesylate',\n", + " 'Ketorolac Tromethamine', 'Titanium dioxide',\n", + " 'Camphor Menthol Methyl Salicylate', 'clonazepam', 'Mirtazapine',\n", + " 'epinephrine', 'Menthol', 'False Ragweed Bur', 'Zinc Oxide',\n", + " 'AVOBENZONE, OCTISALATE, OCTOCRYLENE', 'ALTERNARIA TENUIS',\n", + " 'Dextromethophan Hydrobromide, Chlorpheniramine Maleate, Phenylephrine Hydrochloride',\n", + " 'Nadolol', 'fluvastatin', 'VERAPAMIL HYDROCHLORIDE',\n", + " 'Spasms Weakness', 'CALENDULA OFFICINALIS FLOWERING TOP',\n", + " 'Titanium Dioxide, Zinc Oxide', 'Treatment Set TS350393',\n", + " 'Naproxen Sodium', 'Cucumber',\n", + " 'Antihemophilic Factor (Recombinant)', 'fentanyl', 'Acetaminophen',\n", + " 'Carvedilol', 'synthetic conjugated estrogens, B',\n", + " 'Lidocaine Hydrochloride-Menthol', 'Green Pea English',\n", + " 'amlodipine besylate and atorvastatin calcium',\n", + " 'Aluminum Zirconium Trichlorohydrex Gly', 'BENZETHONIUM CHLORIDE',\n", + " 'Oxycodone and Acetaminophen', 'TITANIUM DIOXIDE',\n", + " 'LYTTA VESICATORIA', 'TRICHOPHYTON MENTAGROPHYTES',\n", + " 'Venlafaxine Hydrochloride', 'Pectin and Echinacea Purpurea',\n", + " 'Avobenzone, Octinoxate, Octisalate, Octocrylene',\n", + " 'divalproex sodium', 'alnus incana subsp. rugosa pollen',\n", + " 'ATRACTYLODES JAPONICA ROOT',\n", + " 'Homosalate Oxybenzone Octocrylene Octisalate Avobenzone',\n", + " 'Salicylic Acid', 'Hydrocortisone', 'Hog Epithelium',\n", + " 'TRIHEXYPHENIDYL HYDROCHLORIDE', 'Senna and Docusate Sodium',\n", + " 'Privet', 'ACETAMINOPHEN and PYRILAMINE MALEATE',\n", + " 'TRAMETES VERSICOLOR FRUITING BODY', 'Warfarin Sodium',\n", + " 'Benzoyl Peroxide', 'Enoxaparin Sodium',\n", + " 'Guaifenesin and Dextromethorphan Hydrobromide', 'acetaminophen',\n", + " 'Duloxetine', 'Medroxyprogesterone Acetate',\n", + " 'tramadol hydrochloride', 'POLYVINYL ALCOHOL',\n", + " 'bacitracin zinc, neomycin, polymyxin B', 'Nicotine Polacrilex',\n", + " 'sildenafil citrate', 'Lansoprazole', 'Pantoprazole Sodium',\n", + " 'GRANISETRON HYDROCHLORIDE',\n", + " 'Agnus 30c, Aurum Nat Mur. 30c, Aletris 30c, Dioscorea 30c',\n", + " 'mupirocin', 'FERRIC OXIDE RED', 'Purixan', 'KAPOK',\n", + " 'Granisetron Hydrochloride', 'Eastern Cottonwood',\n", + " 'Aurum Lavender Rose',\n", + " 'Uricum acidum, Benzoicum acidum, Berber. vulg., Bryonia, Cantharis, Carduus benedictus, Ceanothus, Chelidonium majus, Chionanthus virginica, Cinchona, Dioscorea, Dolichos, Iris versicolor, Juniperus com., Nux vom., Ptelea, Taraxacum, Carduus mar., Cynara scolymus, Solidago',\n", + " 'Neurospora intermedia', 'Dimethicone', 'phytonadione',\n", + " 'DEXTROMETHORPHAN HYDROBROMIDE, GUAIFENESIN, PHENYLEPHRINE HYDROCHLORIDE',\n", + " 'Octinoxate and Titanium Dioxide', 'BISMUTH SUBSALICYLATE',\n", + " 'Methyl salicylate, Menthol, Capsaicin', 'ketoconazole',\n", + " 'CLOTRIMAZOLE', 'tobramycin and dexamethasone', 'Sodium Fluoride',\n", + " 'mesna', 'TRICLOSAN',\n", + " 'norethindrone acetate and ethinyl estradiol and ferrous fumarate',\n", + " 'ACETAMINOPHEN, DOXYLAMINE SUCCINATE HCL, DEXTROMETHORPHAN HYDROBROMIDE',\n", + " 'GLYCERIN', 'isopropyl alcohol',\n", + " 'Acetaminophen, Dextromethorphan HBr, Guaifenesin, Phenylephrine HCl',\n", + " 'montelukast sodium',\n", + " 'ACONITUM NAPELLUS and BRYONIA ALBA ROOT and PHOSPHORUS',\n", + " 'Oxymorphone Hydrochloride', 'BENZALKONIUM CHLORIDE',\n", + " 'SERTRALINE HYDROCHLORIDE', 'Birch Black',\n", + " 'Acetaminophen, Dextromethorphan HBr, Doxylamine succinate',\n", + " 'OXYBENZONE, AVOBENZONE, OCTOCRYLENE', 'OXYGEN',\n", + " 'SALICYLIC ACID, TITANIUM DIOXIDE, ZINC OXIDE', 'providone iodine',\n", + " 'oxybutynin chloride', 'Strawberry',\n", + " 'Fibrinogen Human Thrombin Human',\n", + " 'avobenzone, homosalate, octisalate, octocrylene', 'Fluoxetine',\n", + " 'Chlorpheniramine Maleate',\n", + " 'Aluminum Zirconium Tetrachlorohydrex GLY', 'Amoxicillin',\n", + " 'romidepsin', 'HYDROQUINONE', 'OCTINOXATE and OXYBENZONE',\n", + " 'Etodolac', 'Cefuroxime', 'cysteamine hydrochloride', 'MENTHOL',\n", + " 'Octinoxate, Titanium Dioxide', 'doxepin hydrochloride',\n", + " 'Potassium Chloride', 'Aurum 5', 'Metaxalone', 'HYDROCORTISONE',\n", + " 'Triclocarban', 'diazepam', 'Ramipril',\n", + " 'Acetaminophen, Guaifenesin, Phenylephrine HCl',\n", + " 'Loperamide Hydrochloride', 'ACETAMINOPHEN',\n", + " 'Levonorgestrel and Ethinyl Estradiol',\n", + " 'Phenazopyridine Hydrochloride', 'House Dust', 'TOLNAFTATE',\n", + " 'PSEUDOGNAPHALIUM OBTUSIFOLIUM, CAUSTICUM, COLCHICUM AUTUMNALE BULB, CITRULLUS COLOCYNTHIS FRUIT PULP, IRON, LITHIUM BENZOATE, TOXICODENDRON PUBESCENS LEAF and FILIPENDULA ULMARIA ROOT',\n", + " 'benzocaine and glycerin', 'clocortolone pivalate',\n", + " 'donepezil hydrochloride', 'fluvastatin sodium', 'Docetaxel',\n", + " 'Dextromethorphan HBr, Guaifenesin', 'fentanyl citrate',\n", + " 'Disulfiram', 'Potassium Iodide', 'Tetracycline Hydrochloride',\n", + " 'Leucine, Phenylalanine, Lysine, Methionine, Isoleucine, Valine, Histidine, Threonine, Tryptophan, Alanine, Glycine, Arginine, Proline, Serine, Tyrosine, Dextrose',\n", + " 'Bethanechol Chloride',\n", + " 'Norethindrone and Ethinyl Estradiol Tablets', 'Sodium chloride',\n", + " 'Polyethylene Glycol 3350, Sodium Sulfate Anhydrous, Sodium Bicarbonate, Sodium Chloride, Potassium Chloride',\n", + " 'petrolatum', 'amoxicillin',\n", + " 'ZINC OXIDE, OCTINOXATE, and OCTISALATE', 'Yellow Dock',\n", + " 'Agnus castus, Aralia quinquefolia, Arnica montana, Damiana, Lactuca virosa, Natrum muriaticum, Onosmodium virginianum, Oophorinum, Phosphoricum acidum, Pituitarum posterium, Salix nigra, Sepia, Thuja occidentalis',\n", + " 'MOMETASONE FUROATE', 'CEFTAZIDIME', 'Bismuth subsalicylate',\n", + " 'MAGNESIUM HYDROXIDE', 'Hepatitis B Immune Globulin (Human)',\n", + " 'Eprosartan Mesylate and Hydrochlorothiazide',\n", + " 'levothyroxine sodium tablets', 'Captopril', 'Miconazole Nitrate',\n", + " 'Levothyroxine Sodium', 'CETYLPYRIDINIUM CHLORIDE', 'Topiramate',\n", + " 'peginterferon alfa-2b',\n", + " 'LOSARTAN POTASSIUM AND HYDROCHLOROTHIAZIDE', 'Titanium Dioxide',\n", + " 'famotidine, calcium carbonate and magnesium hydroxide',\n", + " 'Aralia racemosa, Arsenicum album, Histaminum hydrochloricum, Nux vomica, Oleum animale, Phosphorus, Silicea, Sulphur',\n", + " 'Diphenhydramine HCl', 'Water', 'Sweetgum',\n", + " 'Lidocaine Hydrochloride and Hydrocortisone Acetate', 'Octinoxate',\n", + " 'Pseudoephedrine Hydrochloride', 'MAGNESIUM CITRATE', 'Eucalyptol',\n", + " 'Hydrocodone Bitartrate and Acetaminophen', 'LACTULOSE',\n", + " 'VANCOMYCIN HYDROCHLORIDE', 'ERYTHROMYCIN STEARATE',\n", + " 'Lidocaine Hydrochloride', 'Titanium dioxide and Zinc oxide',\n", + " 'Benzalkonium Chloride', 'salicylic acid',\n", + " 'Octinoxate and Titanium dioxide',\n", + " 'CONJUGATED ESTROGENS and MEDROXYPROGESTERONE ACETATE', 'Aspirin',\n", + " 'methylcellulose',\n", + " 'Acetaminophen, Dextromethorphan Hydrobromide, Doxylamine Succinate',\n", + " 'sodium fluoride', 'Lemon', 'Urea Cream with Moisturizing Cream',\n", + " 'benzocaine', 'zinc acetate', 'POVIDONE-IODINE',\n", + " 'Sodium Fluoride F-18', 'Bupropion Hydrochloride',\n", + " 'cocoa butter, phenylephrine HCl', 'Isopropyl Alcohol',\n", + " 'PETROLATUM', 'Simvastatin', 'Carelessweed',\n", + " 'Aloe socotrina, Alumina, Apis mellifica', 'FENTANYL',\n", + " 'valsartan and hydrochlorothiazide', 'Mupirocin', 'WATER',\n", + " 'polidocanol', 'Butalbital and Acetaminophen Tablets',\n", + " 'GINKGO BILOBA LEAF', 'hydroxocobalamin',\n", + " 'avobenzone, homosalate, octisalate, oxybenzone',\n", + " 'tapentadol hydrochloride', 'Aluminum Chlorohydrate',\n", + " 'Rough Marsh Elder', 'Prazosin Hydrochloride', 'Fenofibric Acid',\n", + " 'methimazole', 'Oat Grain', 'AVOBENZONE, OCTINOXATE,OCTISALATE',\n", + " 'TITANIUM DIOXIDE, OCTINOXATE', 'ZINC OXIDE', 'sodium selenite',\n", + " 'Trandolapril', 'DROSERA ROTUNDIFOLIA', 'Rhodotorula mucilaginosa',\n", + " 'False Ragweed',\n", + " 'Avobenzone, Homosalate, Octisalate, Octocrylene, and Oxybenzone',\n", + " 'Heparin Sodium', 'Cypress Arizona', 'allopurinol',\n", + " 'Asterias rubens, Bryonia, Conium maculatum, Galium aparine, Hoang-nan, Lachesis mutus, Nux vomica, Ova tosta, Sepia and Viscum album',\n", + " 'Simethicone', 'Pyrazinamide', 'Losartan Potassium', 'Furosemide',\n", + " 'ALUMINUM CHLOROHYDRATE', 'Hydrocortisone Acetate',\n", + " 'OCTINOXATE, TITANIUM DIOXIDE, DIMETHICONE, ALUMINUM HYDROXIDE, STEARIC ACID, HYDROXYPROLINE,',\n", + " 'Metoprolol succinate', 'Cefuroxime Axetil',\n", + " 'Diltiazem Hydrochloride', 'Glyburide', 'Vancomycin Hydrochloride',\n", + " 'Octisalate and Zinc Oxide',\n", + " 'Aluminum Zirconium Pentachlorohydrex Gly',\n", + " 'OCTINOXATE, TITANIUM DIOXIDE, OXYBENZONE',\n", + " 'Boricum Gluconicum, Calcarea Gluconica, Chromium Gluconicum, Cobaltum Gluconicum, Cuprum Gluconicum',\n", + " 'lidocaine hydrochloride', 'Acetaminophen, Aspirin, Caffeine',\n", + " 'SOYBEAN OIL', 'Doxazosin', 'Lisinopril and hydrochlorothiazide',\n", + " 'estradiol acetate', 'Sertraline Hydrochloride',\n", + " 'Zinc Oxide, Titanium Dioxide', 'Folic Acid',\n", + " 'California Black Walnut', 'ATORVASTATIN CALCIUM',\n", + " 'MIDODRINE HYDROCHLORIDE', 'levothyroxine sodium',\n", + " 'metformin hydrochloride', 'Atorvastatin Calcium', 'acitretin',\n", + " 'Apis Rhus', 'TITANIUM DIOXIDE and ZINC OXIDE',\n", + " 'Para Grass Pollen', 'HYDROCODONE BITARTRATE AND IBUPROFEN',\n", + " 'MYRRH GOLD', 'Calcium carbonate and Magnesium hydroxide',\n", + " '.beta.-carotene, ascorbic acid, cholecalciferol, .alpha.-tocopherol acetate, dl-, thiamine mononitrate, riboflavin, niacinamide, pyridoxine hydrochloride, folic acid, cyanocobalamin, calcium carbonate, ferrous fumarate, potassium iodide and zinc oxide',\n", + " 'Cefprozil', 'Enalapril Maleate',\n", + " 'octinoxate, octisalate, octocrylene, oxybenzone', 'Hormodendrum',\n", + " 'Acetaminophen, Diphenhydramine HCl', 'Antiseptic handwash',\n", + " 'Aesculus hippocastanum, Arnica montana, Berberis vulgaris, Carbo vegetabilis, Echinacea angustifolia, Hamamelis virginiana, Hydrofluoricum acidum, Lycopodium clavatum, Secale cornutum, Sulfur',\n", + " 'bethanechol chloride', 'Glycerin', 'Mango Blossom',\n", + " 'Hydrocodone Bitartrate and Ibuprofen',\n", + " 'OCTINOXATE, OXYBENZONE, TITANIUM DIOXIDE',\n", + " 'Duloxetine hydrochloride', 'clobazam', 'Hydrogen Peroxide',\n", + " 'AMOXICILLIN', 'Norethindrone and Ethinyl Estradiol',\n", + " 'Cyclopentolate Hydrochloride', 'Promethazine Hydrochloride',\n", + " 'Benzocaine', 'AVOBENZONE, OCTINOXATE, OCTISALATE, OCTOCRYLENE',\n", + " 'MINERAL OIL,PETROLATUM,PHENYLEPHRINE',\n", + " 'diphenhydramine citrate and ibuprofen',\n", + " 'ezetimibe and simvastatin', 'Soft Cheat Brome',\n", + " 'Desmopressin Acetate', 'ENALAPRIL MALEATE',\n", + " 'atorvastatin calcium', 'Formaldehyde', 'nitroglycerin',\n", + " 'IRON SUPPLEMENT',\n", + " 'aluminum hydroxide, magnesium carbonate, sodium bicarbonate'],\n", + " dtype=object)" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "patients.prescribed_medicines.unique()" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['triamcinolone acetonide', 'no prescription',\n", + " 'octinoxate, avobenzone, and octocrylene',\n", + " 'Glipizide and Metformin Hydrochloride',\n", + " 'Benazepril Hydrochloride', 'WITCH HAZEL',\n", + " 'Terbinafine Hydrochloride', 'Tretinoin', 'Magesium Citrate',\n", + " 'Psyllium Husks', 'aluminum hydroxide', 'Estradiol',\n", + " 'Propranolol Hydrochloride', 'Avobenzone, Octinoxate, Octisalate',\n", + " 'NEOMYCIN SULFATE', 'Sulfamethoxazole and Trimethoprim',\n", + " 'Helium Oxygen Mixture', 'NITROGEN',\n", + " 'acetaminophen, dextromethorphan Hbr, Phenylephrine HCl',\n", + " 'Diphenhydramine Hydrochloride and Zinc Acetate',\n", + " 'Human chorionic gonadotropin (hCG),',\n", + " 'Arsenicum album, Calcarea carbonica, Ignatia amara Kali carbonicum, Lachesis mutus, Natrum muriaticum,',\n", + " 'ABILIFY', 'ALUMINUM SULFATE', 'Natural Medicine',\n", + " 'amoxicillin and clavulanate potassium', 'Ammonium Lactate',\n", + " 'Risperidone', 'fomepizole',\n", + " 'bisoprolol fumarate and hydrochlorothiazide', 'DOCUSATE SODIUM',\n", + " 'dimethicone, octinoxate, octisalate, oxybenzone',\n", + " 'codeine phosphate and guaifenesin', 'ALCOHOL', 'Pineapple',\n", + " 'dextromethorphan polistirex',\n", + " 'ACONITUM NAPELLUS, ARNICA MONTANA, LEDUM PALUSTRE TWIG, MAGNESIUM PHOSPHATE, DIBASIC TRIHYDRATE, TOXICODENDRON PUBESCENS LEAF, and VISCUM ALBUM FRUITING TOP',\n", + " 'Acetaminophen, Dextromethorphan Hydrobromide, Phenylephrine Hydrochloride',\n", + " 'Oxcarbazepine', 'OCTINOXATE and TITANIUM DIOXIDE', 'Ibuprofen',\n", + " 'Metoclopramide Hydrochloride',\n", + " 'OCTINOXATE, OCTISALATE, ZINC OXIDE, OXYBENZONE', 'Oxygen',\n", + " 'Avobenzone, Octinoxate, Octisalate, Oxybenzone', 'Salt Cedar',\n", + " 'Pyrithione Zinc', 'TRAMADOL HYDROCHLORIDE',\n", + " 'Levocetirizine Dihydrochloride', 'SODIUM FLUORIDE', 'Triclosan',\n", + " 'Pyrithione zinc', 'Citalopram', 'Metoprolol Tartrate',\n", + " 'propafenone hydrochloride', 'Silicea Belladonna',\n", + " 'Valacyclovir hydrochloride', 'Protriptyline Hydrochloride',\n", + " 'Dexamethasone', 'Ketoconazole', 'Erythromycin',\n", + " 'ESCITALOPRAM OXALATE', 'alcohol',\n", + " 'AVOBENZONE, OCTOCRYLENE, OXYBENZONE', 'moexipril hydrochloride',\n", + " 'Docusate sodium and Sennosides',\n", + " 'Oats, Common, Cultivated Avena sativa', 'Amlodipine Besylate',\n", + " 'HOMOSALATE, OXYBENZONE, OCTISALATE, AVOBENZONE, OCTOCRYLENE',\n", + " 'Metformin Hydrochloride', 'Gabapentin', 'OCTINOXATE',\n", + " 'Mountain Cedar', 'Artichoke', 'Droperidol',\n", + " 'Arnica montana, Caladium seguinum, Carduus marianus, Damiana, Galium aparine, Glandula suprarenalis suis, Hepar suis, Korean ginseng, Lactuca virosa,',\n", + " 'Valsartan and Hydrochlorothiazide',\n", + " 'Diphenhydramine Hydrochloride', 'Ranitidine Hydrochloride',\n", + " 'Chelidonium Majus, Hepar Suis, Cholesterinum, Lycopodium Clavatum, Tarentula Hispana, Arsenicum Album, Belladonna',\n", + " 'Omeprazole', 'morphine sulfate',\n", + " 'OCTINOXATE, TITANIUM DIOXIDE, and ZINC OXIDE',\n", + " 'Titanium Dioxide, Zinc Oxide, and Octinoxate',\n", + " 'albuterol sulfate', 'Octinoxate and Oxybenzone',\n", + " 'vilazodone hydrochloride', 'benztropine mesylate',\n", + " 'Ketorolac Tromethamine', 'Titanium dioxide',\n", + " 'Camphor Menthol Methyl Salicylate', 'clonazepam', 'Mirtazapine',\n", + " 'epinephrine', 'Menthol', 'False Ragweed Bur', 'Zinc Oxide',\n", + " 'AVOBENZONE, OCTISALATE, OCTOCRYLENE', 'ALTERNARIA TENUIS',\n", + " 'Dextromethophan Hydrobromide, Chlorpheniramine Maleate, Phenylephrine Hydrochloride',\n", + " 'Nadolol', 'fluvastatin', 'VERAPAMIL HYDROCHLORIDE',\n", + " 'Spasms Weakness', 'CALENDULA OFFICINALIS FLOWERING TOP',\n", + " 'Titanium Dioxide, Zinc Oxide', 'Treatment Set TS350393',\n", + " 'Naproxen Sodium', 'Cucumber',\n", + " 'Antihemophilic Factor (Recombinant)', 'fentanyl', 'Acetaminophen',\n", + " 'Carvedilol', 'synthetic conjugated estrogens, B',\n", + " 'Lidocaine Hydrochloride-Menthol', 'Green Pea English',\n", + " 'amlodipine besylate and atorvastatin calcium',\n", + " 'Aluminum Zirconium Trichlorohydrex Gly', 'BENZETHONIUM CHLORIDE',\n", + " 'Oxycodone and Acetaminophen', 'TITANIUM DIOXIDE',\n", + " 'LYTTA VESICATORIA', 'TRICHOPHYTON MENTAGROPHYTES',\n", + " 'Venlafaxine Hydrochloride', 'Pectin and Echinacea Purpurea',\n", + " 'Avobenzone, Octinoxate, Octisalate, Octocrylene',\n", + " 'divalproex sodium', 'alnus incana subsp. rugosa pollen',\n", + " 'ATRACTYLODES JAPONICA ROOT',\n", + " 'Homosalate Oxybenzone Octocrylene Octisalate Avobenzone',\n", + " 'Salicylic Acid', 'Hydrocortisone', 'Hog Epithelium',\n", + " 'TRIHEXYPHENIDYL HYDROCHLORIDE', 'Senna and Docusate Sodium',\n", + " 'Privet', 'ACETAMINOPHEN and PYRILAMINE MALEATE',\n", + " 'TRAMETES VERSICOLOR FRUITING BODY', 'Warfarin Sodium',\n", + " 'Benzoyl Peroxide', 'Enoxaparin Sodium',\n", + " 'Guaifenesin and Dextromethorphan Hydrobromide', 'acetaminophen',\n", + " 'Duloxetine', 'Medroxyprogesterone Acetate',\n", + " 'tramadol hydrochloride', 'POLYVINYL ALCOHOL',\n", + " 'bacitracin zinc, neomycin, polymyxin B', 'Nicotine Polacrilex',\n", + " 'sildenafil citrate', 'Lansoprazole', 'Pantoprazole Sodium',\n", + " 'GRANISETRON HYDROCHLORIDE',\n", + " 'Agnus 30c, Aurum Nat Mur. 30c, Aletris 30c, Dioscorea 30c',\n", + " 'mupirocin', 'FERRIC OXIDE RED', 'Purixan', 'KAPOK',\n", + " 'Granisetron Hydrochloride', 'Eastern Cottonwood',\n", + " 'Aurum Lavender Rose',\n", + " 'Uricum acidum, Benzoicum acidum, Berber. vulg., Bryonia, Cantharis, Carduus benedictus, Ceanothus, Chelidonium majus, Chionanthus virginica, Cinchona, Dioscorea, Dolichos, Iris versicolor, Juniperus com., Nux vom., Ptelea, Taraxacum, Carduus mar., Cynara scolymus, Solidago',\n", + " 'Neurospora intermedia', 'Dimethicone', 'phytonadione',\n", + " 'DEXTROMETHORPHAN HYDROBROMIDE, GUAIFENESIN, PHENYLEPHRINE HYDROCHLORIDE',\n", + " 'Octinoxate and Titanium Dioxide', 'BISMUTH SUBSALICYLATE',\n", + " 'Methyl salicylate, Menthol, Capsaicin', 'ketoconazole',\n", + " 'CLOTRIMAZOLE', 'tobramycin and dexamethasone', 'Sodium Fluoride',\n", + " 'mesna', 'TRICLOSAN',\n", + " 'norethindrone acetate and ethinyl estradiol and ferrous fumarate',\n", + " 'ACETAMINOPHEN, DOXYLAMINE SUCCINATE HCL, DEXTROMETHORPHAN HYDROBROMIDE',\n", + " 'GLYCERIN', 'isopropyl alcohol',\n", + " 'Acetaminophen, Dextromethorphan HBr, Guaifenesin, Phenylephrine HCl',\n", + " 'montelukast sodium',\n", + " 'ACONITUM NAPELLUS and BRYONIA ALBA ROOT and PHOSPHORUS',\n", + " 'Oxymorphone Hydrochloride', 'BENZALKONIUM CHLORIDE',\n", + " 'SERTRALINE HYDROCHLORIDE', 'Birch Black',\n", + " 'Acetaminophen, Dextromethorphan HBr, Doxylamine succinate',\n", + " 'OXYBENZONE, AVOBENZONE, OCTOCRYLENE', 'OXYGEN',\n", + " 'SALICYLIC ACID, TITANIUM DIOXIDE, ZINC OXIDE', 'providone iodine',\n", + " 'oxybutynin chloride', 'Strawberry',\n", + " 'Fibrinogen Human Thrombin Human',\n", + " 'avobenzone, homosalate, octisalate, octocrylene', 'Fluoxetine',\n", + " 'Chlorpheniramine Maleate',\n", + " 'Aluminum Zirconium Tetrachlorohydrex GLY', 'Amoxicillin',\n", + " 'romidepsin', 'HYDROQUINONE', 'OCTINOXATE and OXYBENZONE',\n", + " 'Etodolac', 'Cefuroxime', 'cysteamine hydrochloride', 'MENTHOL',\n", + " 'Octinoxate, Titanium Dioxide', 'doxepin hydrochloride',\n", + " 'Potassium Chloride', 'Aurum 5', 'Metaxalone', 'HYDROCORTISONE',\n", + " 'Triclocarban', 'diazepam', 'Ramipril',\n", + " 'Acetaminophen, Guaifenesin, Phenylephrine HCl',\n", + " 'Loperamide Hydrochloride', 'ACETAMINOPHEN',\n", + " 'Levonorgestrel and Ethinyl Estradiol',\n", + " 'Phenazopyridine Hydrochloride', 'House Dust', 'TOLNAFTATE',\n", + " 'PSEUDOGNAPHALIUM OBTUSIFOLIUM, CAUSTICUM, COLCHICUM AUTUMNALE BULB, CITRULLUS COLOCYNTHIS FRUIT PULP, IRON, LITHIUM BENZOATE, TOXICODENDRON PUBESCENS LEAF and FILIPENDULA ULMARIA ROOT',\n", + " 'benzocaine and glycerin', 'clocortolone pivalate',\n", + " 'donepezil hydrochloride', 'fluvastatin sodium', 'Docetaxel',\n", + " 'Dextromethorphan HBr, Guaifenesin', 'fentanyl citrate',\n", + " 'Disulfiram', 'Potassium Iodide', 'Tetracycline Hydrochloride',\n", + " 'Leucine, Phenylalanine, Lysine, Methionine, Isoleucine, Valine, Histidine, Threonine, Tryptophan, Alanine, Glycine, Arginine, Proline, Serine, Tyrosine, Dextrose',\n", + " 'Bethanechol Chloride',\n", + " 'Norethindrone and Ethinyl Estradiol Tablets', 'Sodium chloride',\n", + " 'Polyethylene Glycol 3350, Sodium Sulfate Anhydrous, Sodium Bicarbonate, Sodium Chloride, Potassium Chloride',\n", + " 'petrolatum', 'amoxicillin',\n", + " 'ZINC OXIDE, OCTINOXATE, and OCTISALATE', 'Yellow Dock',\n", + " 'Agnus castus, Aralia quinquefolia, Arnica montana, Damiana, Lactuca virosa, Natrum muriaticum, Onosmodium virginianum, Oophorinum, Phosphoricum acidum, Pituitarum posterium, Salix nigra, Sepia, Thuja occidentalis',\n", + " 'MOMETASONE FUROATE', 'CEFTAZIDIME', 'Bismuth subsalicylate',\n", + " 'MAGNESIUM HYDROXIDE', 'Hepatitis B Immune Globulin (Human)',\n", + " 'Eprosartan Mesylate and Hydrochlorothiazide',\n", + " 'levothyroxine sodium tablets', 'Captopril', 'Miconazole Nitrate',\n", + " 'Levothyroxine Sodium', 'CETYLPYRIDINIUM CHLORIDE', 'Topiramate',\n", + " 'peginterferon alfa-2b',\n", + " 'LOSARTAN POTASSIUM AND HYDROCHLOROTHIAZIDE', 'Titanium Dioxide',\n", + " 'famotidine, calcium carbonate and magnesium hydroxide',\n", + " 'Aralia racemosa, Arsenicum album, Histaminum hydrochloricum, Nux vomica, Oleum animale, Phosphorus, Silicea, Sulphur',\n", + " 'Diphenhydramine HCl', 'Water', 'Sweetgum',\n", + " 'Lidocaine Hydrochloride and Hydrocortisone Acetate', 'Octinoxate',\n", + " 'Pseudoephedrine Hydrochloride', 'MAGNESIUM CITRATE', 'Eucalyptol',\n", + " 'Hydrocodone Bitartrate and Acetaminophen', 'LACTULOSE',\n", + " 'VANCOMYCIN HYDROCHLORIDE', 'ERYTHROMYCIN STEARATE',\n", + " 'Lidocaine Hydrochloride', 'Titanium dioxide and Zinc oxide',\n", + " 'Benzalkonium Chloride', 'salicylic acid',\n", + " 'Octinoxate and Titanium dioxide',\n", + " 'CONJUGATED ESTROGENS and MEDROXYPROGESTERONE ACETATE', 'Aspirin',\n", + " 'methylcellulose',\n", + " 'Acetaminophen, Dextromethorphan Hydrobromide, Doxylamine Succinate',\n", + " 'sodium fluoride', 'Lemon', 'Urea Cream with Moisturizing Cream',\n", + " 'benzocaine', 'zinc acetate', 'POVIDONE-IODINE',\n", + " 'Sodium Fluoride F-18', 'Bupropion Hydrochloride',\n", + " 'cocoa butter, phenylephrine HCl', 'Isopropyl Alcohol',\n", + " 'PETROLATUM', 'Simvastatin', 'Carelessweed',\n", + " 'Aloe socotrina, Alumina, Apis mellifica', 'FENTANYL',\n", + " 'valsartan and hydrochlorothiazide', 'Mupirocin', 'WATER',\n", + " 'polidocanol', 'Butalbital and Acetaminophen Tablets',\n", + " 'GINKGO BILOBA LEAF', 'hydroxocobalamin',\n", + " 'avobenzone, homosalate, octisalate, oxybenzone',\n", + " 'tapentadol hydrochloride', 'Aluminum Chlorohydrate',\n", + " 'Rough Marsh Elder', 'Prazosin Hydrochloride', 'Fenofibric Acid',\n", + " 'methimazole', 'Oat Grain', 'AVOBENZONE, OCTINOXATE,OCTISALATE',\n", + " 'TITANIUM DIOXIDE, OCTINOXATE', 'ZINC OXIDE', 'sodium selenite',\n", + " 'Trandolapril', 'DROSERA ROTUNDIFOLIA', 'Rhodotorula mucilaginosa',\n", + " 'False Ragweed',\n", + " 'Avobenzone, Homosalate, Octisalate, Octocrylene, and Oxybenzone',\n", + " 'Heparin Sodium', 'Cypress Arizona', 'allopurinol',\n", + " 'Asterias rubens, Bryonia, Conium maculatum, Galium aparine, Hoang-nan, Lachesis mutus, Nux vomica, Ova tosta, Sepia and Viscum album',\n", + " 'Simethicone', 'Pyrazinamide', 'Losartan Potassium', 'Furosemide',\n", + " 'ALUMINUM CHLOROHYDRATE', 'Hydrocortisone Acetate',\n", + " 'OCTINOXATE, TITANIUM DIOXIDE, DIMETHICONE, ALUMINUM HYDROXIDE, STEARIC ACID, HYDROXYPROLINE,',\n", + " 'Metoprolol succinate', 'Cefuroxime Axetil',\n", + " 'Diltiazem Hydrochloride', 'Glyburide', 'Vancomycin Hydrochloride',\n", + " 'Octisalate and Zinc Oxide',\n", + " 'Aluminum Zirconium Pentachlorohydrex Gly',\n", + " 'OCTINOXATE, TITANIUM DIOXIDE, OXYBENZONE',\n", + " 'Boricum Gluconicum, Calcarea Gluconica, Chromium Gluconicum, Cobaltum Gluconicum, Cuprum Gluconicum',\n", + " 'lidocaine hydrochloride', 'Acetaminophen, Aspirin, Caffeine',\n", + " 'SOYBEAN OIL', 'Doxazosin', 'Lisinopril and hydrochlorothiazide',\n", + " 'estradiol acetate', 'Sertraline Hydrochloride',\n", + " 'Zinc Oxide, Titanium Dioxide', 'Folic Acid',\n", + " 'California Black Walnut', 'ATORVASTATIN CALCIUM',\n", + " 'MIDODRINE HYDROCHLORIDE', 'levothyroxine sodium',\n", + " 'metformin hydrochloride', 'Atorvastatin Calcium', 'acitretin',\n", + " 'Apis Rhus', 'TITANIUM DIOXIDE and ZINC OXIDE',\n", + " 'Para Grass Pollen', 'HYDROCODONE BITARTRATE AND IBUPROFEN',\n", + " 'MYRRH GOLD', 'Calcium carbonate and Magnesium hydroxide',\n", + " '.beta.-carotene, ascorbic acid, cholecalciferol, .alpha.-tocopherol acetate, dl-, thiamine mononitrate, riboflavin, niacinamide, pyridoxine hydrochloride, folic acid, cyanocobalamin, calcium carbonate, ferrous fumarate, potassium iodide and zinc oxide',\n", + " 'Cefprozil', 'Enalapril Maleate',\n", + " 'octinoxate, octisalate, octocrylene, oxybenzone', 'Hormodendrum',\n", + " 'Acetaminophen, Diphenhydramine HCl', 'Antiseptic handwash',\n", + " 'Aesculus hippocastanum, Arnica montana, Berberis vulgaris, Carbo vegetabilis, Echinacea angustifolia, Hamamelis virginiana, Hydrofluoricum acidum, Lycopodium clavatum, Secale cornutum, Sulfur',\n", + " 'bethanechol chloride', 'Glycerin', 'Mango Blossom',\n", + " 'Hydrocodone Bitartrate and Ibuprofen',\n", + " 'OCTINOXATE, OXYBENZONE, TITANIUM DIOXIDE',\n", + " 'Duloxetine hydrochloride', 'clobazam', 'Hydrogen Peroxide',\n", + " 'AMOXICILLIN', 'Norethindrone and Ethinyl Estradiol',\n", + " 'Cyclopentolate Hydrochloride', 'Promethazine Hydrochloride',\n", + " 'Benzocaine', 'AVOBENZONE, OCTINOXATE, OCTISALATE, OCTOCRYLENE',\n", + " 'MINERAL OIL,PETROLATUM,PHENYLEPHRINE',\n", + " 'diphenhydramine citrate and ibuprofen',\n", + " 'ezetimibe and simvastatin', 'Soft Cheat Brome',\n", + " 'Desmopressin Acetate', 'ENALAPRIL MALEATE',\n", + " 'atorvastatin calcium', 'Formaldehyde', 'nitroglycerin',\n", + " 'IRON SUPPLEMENT',\n", + " 'aluminum hydroxide, magnesium carbonate, sodium bicarbonate'],\n", + " dtype=object)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "patients.diagnosis.unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Compute the predicted values and r squared score for our new model and new sample data." + "#### The number of unique values is large for all three columns except `patient_gender`. We will handle these columns differently.\n", + "\n", + "For `diagnosis`, there are too many unique values which will make ML difficult. However, we can re-encode the values to either with or without diagnosis. Remember at an earlier step we filled in the missing values of this column with *no diagnosis*? We can re-encode *no diagnosis* to `0` and all other values to `1`. In this way we can tremendously simply this column.\n", + "\n", + "For `prescribed_medicines`, we can drop this column because it is perfectly correlated with `diagnosis`. Whenever there is no diagnosis, there is no prescribed medicine. So we don't need to keep this duplicated data.\n", + "\n", + "How about `doctor_name`? There are not excessive unique values but still quite many (19). We may either drop or keep it but keeping it will make the analysis more complicated. So due to the length of this lab let's drop it.\n", + "\n", + "How about `gender`? This one is easy. Just like re-encoding the boolean values, we can re-encode gender to `0` and `1` because there are only 2 unique values.\n", + "\n", + "In the next cells, do the following:\n", + "\n", + "1. Create a new column called `diagnosis_int` that has `0` and `1` based on the values in `diagnosis`.\n", + "\n", + "1. Create a new column called `patient_gender_int` that has `0` and `1` based on the values in `patient_gender`.\n", + "\n", + "1. Drop the following columns: `doctor_name`, `diagnosis`, `prescribed_medicines`, and `patient_gender`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "patients['diagnosis_int'] = le.fit_transform(patients.diagnosis)\n", + "patients['patient_gender_int'] = le.fit_transform(patients.patient_gender)\n", + "patients.drop(['doctor_name','diagnosis','prescribed_medicines','patient_gender'],axis=1,inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Compute the r squared score for the smaller test set. Is there an improvement in the test r squared?" + "Let's look at the head again to ensure the re-encoding and dropping are successful:" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
patient_dobpatient_diabeticpatient_allergicpatient_weight_kgpatient_height_smappointment_datepatient_showis_regular_visitdiagnosis_intpatient_gender_int
02018-10-1801591762018-05-01113910
12018-02-0801771862017-12-07113710
22018-10-0911901772018-10-05003710
32018-09-1011701502018-10-21013711
42018-02-2601821402018-11-15003710
\n", + "
" + ], + "text/plain": [ + " patient_dob patient_diabetic patient_allergic patient_weight_kg \\\n", + "0 2018-10-18 0 1 59 \n", + "1 2018-02-08 0 1 77 \n", + "2 2018-10-09 1 1 90 \n", + "3 2018-09-10 1 1 70 \n", + "4 2018-02-26 0 1 82 \n", + "\n", + " patient_height_sm appointment_date patient_show is_regular_visit \\\n", + "0 176 2018-05-01 1 1 \n", + "1 186 2017-12-07 1 1 \n", + "2 177 2018-10-05 0 0 \n", + "3 150 2018-10-21 0 1 \n", + "4 140 2018-11-15 0 0 \n", + "\n", + " diagnosis_int patient_gender_int \n", + "0 391 0 \n", + "1 371 0 \n", + "2 371 0 \n", + "3 371 1 \n", + "4 371 0 " + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "patients.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Bonus Challenge 2 - Backward Elimination \n", - "\n", - "The main way to produce a simpler linear regression model is to reduce the number of variables used in the model. In scikit-learn, we can do this by using recursive feature elimination. You can read more about RFE [here](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html).\n", - "\n", - "In the next cell, we will import RFE" + "An interesting observation is that all patients are no older than 2 years. However, their weights and heights indicate that they are adults. This cannot be true. Therefore, we can either trust the weight and height columns or the DOB column. Since there are other columns that indicate that these are adults (they have emails, some have diabetes) we will drop the `patient_dob` column. We will also drop the `appointment_date` column since it has too many unique values to transform to a dummy variable. Drop the two columns in the cell below." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ - "from sklearn.feature_selection import RFE" + "# Your code here:\n", + "patients.drop(['patient_dob','appointment_date'],axis=1,inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Follow the documentation and initialize an RFE model using the `auto_model` linear regression model. Set `n_features_to_select=3`" + "#### Our data is now ready for clustering. Let's use k-means again.\n", + "\n", + "We start by initializing and fitting a model in the cell below. Call this model patients_cluster." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "KMeans(n_clusters=4)" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "patients_cluster = KMeans(n_clusters=4)\n", + "patients_cluster.fit(patients)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Fit the model and print the ranking" + "Attach the labels to the dataframe. Do this by accessing the `labels_` in the `patients_cluster` model and assign them to a new column in `patients` that you will call `labels`." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ - "# Your code here:\n" + "# Your code here:\n", + "patients['label'] = (patients_cluster.labels_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Feature importance is ranked from most important (1) to least important (4). Generate a model with the three most important features. The features correspond to variable names. For example, feature 1 is `cylinders` and feature 2 is `displacement`.\n", + "Now using a `groupby`, find the mean of every variable in `patients` and group by the `labels` column. This summary will allow us to see how the patients differ between the clusters. Your output should look similar to the image below.\n", + "\n", + "![groupby mean](../groupby-mean.png)\n", "\n", - "Perform a test-train split on this reduced column data and call the split data `X_train_reduced`, `X_test_reduced`, `y_test_reduced`, `y_train_reduced`. Use an 80% split." + "Additionally, add a comment to describe which columns have the largest difference between clusters." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here:\n" + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
patient_diabeticpatient_allergicpatient_weight_kgpatient_height_smpatient_showis_regular_visitdiagnosis_intpatient_gender_int
label
00.5036500.50365078.313869166.2700730.5620440.540146262.2773720.452555
10.5899280.51079181.978417165.5971220.5107910.46043249.3309350.546763
20.4925650.49442479.141264166.3513010.4721190.524164368.5855020.483271
30.5312500.57812582.640625163.8671880.5000000.562500157.7500000.531250
\n", + "
" + ], + "text/plain": [ + " patient_diabetic patient_allergic patient_weight_kg \\\n", + "label \n", + "0 0.503650 0.503650 78.313869 \n", + "1 0.589928 0.510791 81.978417 \n", + "2 0.492565 0.494424 79.141264 \n", + "3 0.531250 0.578125 82.640625 \n", + "\n", + " patient_height_sm patient_show is_regular_visit diagnosis_int \\\n", + "label \n", + "0 166.270073 0.562044 0.540146 262.277372 \n", + "1 165.597122 0.510791 0.460432 49.330935 \n", + "2 166.351301 0.472119 0.524164 368.585502 \n", + "3 163.867188 0.500000 0.562500 157.750000 \n", + "\n", + " patient_gender_int \n", + "label \n", + "0 0.452555 \n", + "1 0.546763 \n", + "2 0.483271 \n", + "3 0.531250 " + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Your code here:\n", + "patients.groupby('label').mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Generate a new model called `auto_model_reduced` and fit this model. Then proceed to compute the r squared score for the model. Did this cause an improvement in the r squared score?" + "# Bonus Challenge: Visualize K-Means Clusters\n", + "\n", + "How did k-means cluster the data? You can obtain an intuitive view with a scatter plot. Generate a 2-d cluster plot below using `matplotlib`. You need to choose 2 of the features from your cleaned and transformed dataset, and use color to represent the cluster label generated from k-means.\n", + "\n", + "If the scatter plot does not make any sense to you, it means the features you chose to visualize are not the right ones. You should be able to see 4 clear clusters with different colors in your visualization that suggests how k-means had clustered your data.\n", + "\n", + "![Cluster Visualization](../clusters.png)" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here: \n" + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Your code here:\n", + "list_colors = {'0':'#1f77b4','1':'#ff7f0e','2':'#2ca02c','3':'#d62728'}\n", + "colors = [list_colors[str(label)] for label in patients.label]\n", + "plt.scatter(patients.diagnosis_int,patients.patient_weight_kg,c=colors)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Conclusion\n", - "\n", - "You may obtain the impression from this lab that without knowing statistical methods in depth, it is difficult to make major progress in machine learning. That is correct. If you are motivated to become a data scientist, statistics is the subject you must be proficient in and there is no shortcut. \n", - "\n", - "Completing these labs is not likely to make you a data scientist. But you will have a good sense about what are there in machine learning and what are good for you. In your future career, you can choose one of the three tracks:\n", - "\n", - "* Data scientists who need to be proficient in statistical methods.\n", - "\n", - "* Data engineers who need to be good at programming.\n", - "\n", - "* Data integration specialists who are business or content experts but also understand data and programming. This cross-disciplinary track brings together data, technology, and business and will be in high demands in the next decade." + "Additionally, you can visualize the clusters in 3-D scatter plot. Give it a try below." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADyCAYAAACGY8MpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAB24UlEQVR4nO29eXxcV333/z733tm0jHbJkhfZlvd9z0KANBs0TeIsEBL6QHgKJeWBFkqBJ0ChQFsIbX4szwtoaRK2lCYlWxOyQRZCSrM4i215t2zLlq19GS2zz733/P64c8ej0Yw0kmbGdjyfvBRLM3fuPTNzP+d8z3f5fIWUkiKKKOL8gXKmB1BEEUUUFkXSF1HEeYYi6Yso4jxDkfRFFHGeoUj6Ioo4z1AkfRFFnGfQpni+GM8rooj8QxTyYsWVvogizjMUSV9EEecZiqQvoojzDEXSF1HEeYYi6Yso4jxDkfRFFHGeoUj6Ioo4z1AkfRFFnGcokr6IIs4zFElfRBHnGYqkL6KI8wxF0hdRxHmGIumLKOI8Q5H0RRRxnqFI+jME0zTP9BCKOE8xVT19ETmGlBJd1wkGgwgh0DQNh8OBqqooSnEOLiL/EFPo3hdFNHII0zSJxWKJf6WUJH/+iqLgcDjQNK04CZxfKKiIRpH0BYCUEsMwiMViAAghEr8nH2P/tLe309TUhMfjKU4C5wcKSvqieZ9nSCkZHh4mFovh9XoRQiTILcTp71oIkfg7HA4nXhuJRIhEIgCoqprYCmiaNu71RRSRLYqkzyNsM35wcBDDMKioqJjW65NXdiklpmkSDocTE4Y9CdiWQHESKCIbFEmfBySb8zY5dV3P+vW2NZD6WDKpkycBG8VJoIhsUCR9jiGlJBqNYppmgqjpSDxbFCeBImaKIulzCNM0iUajCfPbJlkq6ZMngnREnMkkkWkSCIVCiceLk0ARUCR9TmDH3nVdRwgxwcuej5V+KtiTgD2WdJNAKBSiqqqqOAmcZyiSfpZIZ86nYrqkz+d2IHkS2L9/P5s2bUqM2U4U0jQNRVGKk8DbFEXSzwK6ro+LvWciyZlY6aeCPV5Ns24B2/loOxxTowPFSeDtgyLpZwDbnN+zZw8LFiygvLx80uPPhpU+m2um+gRSJwFN0xI/xUng3EWR9NNEciqt/TMVZkL6M410k0CqZVOcBM5NFEmfJVJTaRVFQVGUrMicSnopJT09Pbjdbrxeb9r02rN1O2BDSkksFpswCSQXDxUngbMTRdJnAfsGNwxj0lBcJiQfF4lEaG1txePxMDw8zOHDh3G5XFRVVVFVVUVZWdk5QRZ7z28j3SSQWjdwLryv8wFF0k+BTLF3sFb7bM17gMHBQQ4ePMjy5cvxer2Jc4ZCIYaHh+no6MDv9yciAZqmUVJSck6QJd0kEI1GiUQiDA0NUVJSQkVFRWI7MJnjs4j8okj6DJgq9g7T26v7fD4CgQBbtmzB5XIRjUYTz3k8HjweD42NjUgpOXDgAFJKjh07RjAYpKysjOrqaqqqqnC73Tl7j/lE8iQwOjqKpmmJScAmvMPhSGwHipNA4VAkfRpkE3sHstrTh8NhDhw4gBCCLVu2THlj22Sora2lqqoKKSV+vx+fz8ehQ4eIRCJ4vd7EdsDpdM74fRYKUkoURUlMAvZnFo1GE5OfoihFQZECoUj6FESjUUZGRhJ768lIKoSY1LwfGBjg0KFDLFiwAJ/PN6GUNtOEkfycEILy8nLKy8tZsGABpmkyNjbG0NAQnZ2dieq96upqKisrE3H3swn25GkjOS0YipNAoXH23SFnCLY57/f7OXLkCJs2bZryNZmIa5omR44cYXR0lC1bthCLxfD5fDkZp6IoVFRUUFFRwaJFizAMg5GREXw+HydOnACgsrKSqqoqKioqxu2zzxQy1RjYKE4ChUWR9IyPvauqmvU+PZ0jLxwO09raSk1NDZs3b06o5ExHCHM6vgJVVamurqa6uhqwsgSHh4cZGBjg6NGjqKpKVVUV1dXVlJeXnxGyTEX6VKSbBOwtV/IkUFQVmhnOa9Knk7HK1iNvH59Mzv7+fg4fPszKlSsTJLSPKxQ0TaO2tpba2lrAWi19Ph/d3d0cOnRoXHiwULkA0yV9KtLlCBRVhWaO85b0mWLv2SbcwGnSm6ZJW1sbfr+frVu3TnCunck0XKfTSUNDAw0NDQDjwoPBYJA9e/YkJoF8hQdnS/pUTKYl0NnZSVVVFeXl5cUy4gw4L0mfi9g7WDdfJBLh9ddfp66ublzFWupxZ0uGXXJ4cMeOHSxevBifz5fX8GCuSZ+K5O8wEAhQWVlZFBSZBOcV6VNlrDLF3rMlvd/vp7e3lw0bNlBVVZXxuLO14EYIQWlpKaWlpcybNy9v4cF8kz4Ztl8mk76gjfN5EjhvSJ9t7D2bL980TQ4fPozP52P+/PmTEt4+59my0k+GdOHB0dFRfD5fIjxoRwamEx604/SFQGp4EIqqQqk4L0hvmiYnT56kvr5+1plfoVCI1tZW6uvrWbhw4bjMukw4W1f6qaAoCpWVlVRWVs4qPHgmVvrJkE5Q5HyaBN7WpE9OpT127Bhz5syZ1fl6e3s5cuQIq1atoqqqip6enryU1p6tSBce9Pl8U4YH062++YJpmtO2KrKZBJJzBM71SeBtS/rk2PtsvyDTNDl06BChUGicd34mVXbZ4FyZJDRNo66ujrq6OiBzeDC1m08+kYvvO90kkCwoAue2tNjbjvTpYu+z+UKCwSCtra3MmTOHFStWZJ1Km4zU4/x+P3v27EFKmXCSJZvH5wrpU5EuPOjz+YhEIrz11luUlJQUJDyYa/9BOp+AfY8dOXKEZcuWnVOCIm8r0qdWxqV+8NPdW/b09HD06FFWr15NZWXlhOenU1prk7irq4vjx4+zatUqHA7HuOw5TdOorq4mEongcDiyHufZCjs82NXVxcaNGwmHw4nwYCgUoqysLDEJ5DI8mG+noX1vmaaZ6D6cqir02GOP8Z73vCcxAZ5NeNuQPtWcT+fBzZb0tlJsJBJh27ZtGQk4nZXeNE32799PNBpl27ZtABiGMc48tmvP+/r66O/vZ3BwMLFH9ng8U17nbIVNxEKEBwsJwzDSlgVLKXnooYe4+OKLi6TPB7KJvcPpVXmqVSAYDBIMBpk7dy4rV66cdJLINnsvHA5POGe6Nlcul4vGxkZ0XUdVVbxeLz6fj8OHDydIYSfOnGuWQLpJOB/hwULCMIyMuR52otPZiLPvk5wGMqXSpkM2pnhPTw/Hjh3D7XbT3NycVe37VOe08/FdLhcLFy6cMP5MGXwAZWVllJWVMX/+/HGkOHXqFKZpUllZSXV19VlTTTcb5Co8WEhMFh4MBAJTqiSfKZyzpDdNk+7ubqqrq7Ny1k1GesMwOHjwINFolK1bt/Lmm29mHe/NtNJLKWlra2N0dJStW7fyxhtvZPfGJhl/MinsarrBwcGEPyA5XHY2O5KywUzDg4V0gNrmfTqEQqGzVuXonCN9srPu8OHDXHzxxVm9LhPpA4EAra2tzJ07l/nz5ye2CNncPJnOaYtfVlVVJcprp4NsfAWp1XSRSCRhBYyNjVFSUpLYCng8nnN+Esg2PGgYRsGSgSYjPXDWlvueU6RPTaWdDtIRtLu7m/b2dtasWYPX6008nm3+fTpyDg0NceDAAZYvX54gZCHgcrmYM2cOc+bMQUpJMBjE5/Nx5MgRwuEw5eXliUnA6XSekyHBZGQKD8ZiMXbs2FGQ8GAm0hcyA3EmOGdIn20LqUxIJr1hGBw4cABd19m2bdsEJ9FMQnFSSo4fP05fXx+bN2+elWk3naKfTK9P9pSnk9iqrKxE1/UpV6tzBR6PB5fLRVdXF5s3b05Menb1YHl5ec7Dg5N9dmcz8c960k8Ve88WqqpimmYiMSbZnE/FdEkfi8XYu3cvbrebrVu3nnVmXTqJLZ/PR09PD2+99dZZoa6TC9jRmUJVD2by3p/tVtRZTfqpYu/TgRCC3t5eBgcHJ5jzqZjOnj4ajfL666+zePHiWef2J481nzeO7SSzJ6loNMrQ0BBdXV2MjY3hdrsTW4FzRXcfMufd5ys8aJpm2mNDoRAlJSWzfj/5wllJ+nQtpCY7dqqb0jAMBgcHcTqdac35VGRjXksp6e7uZmxsjIsuuojS0tJJj093jTMNewxOp3OcPyAUCjE0NDTONLYnAZfLdYZHnRnZFtvkKjxoGEbazyMQCEz7figkzjrSTyf2rqoqhmFMSmLbnC8pKaGpqSmrWXwq894wDPbv349hGHi93px/wWcy914IQUlJCSUlJQnT2PYH7N+/H13Xz9qkmZlU2MHE8GAsFstKXDTTnt7v9xdJny0MwxjXAWU2sXeAzs5OTpw4wdq1a+nv75+Wym2mY+0Q3/z582loaOCtt97K6pznKoQQeL1evF4vCxcuTKyKQ0NDHD9+HEVRzhp/wExJnwqHw5FVeDAUCo0TQLVRXOmzgO2sO3XqFKFQiJaWlqxeZ6/0qdB1nf379wMkzPnBwcFpad+lO9bO2LN9AnZMONcoxEo/0/OnroqphHC73YlJoND+gHzV7WcKD46NjXHw4MFxhUMlJSVZp+A+88wzfPrTn+bw4cNHgHuklHcmPy+sN/N94GogCHxESvlW0vMq8AbQKaW8Jtv3c8ZJnxx71zRtWqGqdCv92NgYe/bsYcGCBcybN2/SY7M9r11PHw6H2bp1ayLvfabktMN7wWAwsVdONpMLqZE3W6QjxNDQEO3t7QQCAcrKyojFYkQikbz7A6SUBQk/2tWDQ0NDLFy4ECFEIjz4xhtv8Oijj+LxeDh58iTz589Pew7DMPjkJz/Js88+S0tLyyrgdSHE41LK/UmH/TGwNP5zAfAv8X9tfBo4AGT2SqfBGSW97ayznXGZVu5MSD5eSklnZycnT55k3bp1E2ZaRVGyPneyeR8Oh9m9ezf19fUzrqdPRiwWY8+ePZRpBk3SR3T/S3T5R5GaG23OasrmrTrrQz6TwePxMHfuXObOnYuUktHRUYaHhxP+gHy24LL9QIWCvVC53e5EeHDlypX4/X5eeOEFPv7xj3P11Vfzl3/5lxNeu2PHDpYsWcLixYuRUkaFEA8A24Fk0m8HfiGtG+JVIUSlEKJRStkthJgH/Anwj8BnpzPuM0L61Ni7vQ+bLuntFdk254UQbNu2Le1sryhK1gou9nntXnSpzStsTPcGGx0d5eDOl1mudVKpD2IoDmRdEzQ2oUdChIf34n/jDXrU+YTKmnE4HFOX1UoJSBBnX2xdCEFZWRlut5uNGzeO85IfP34cIURiK+D1eme9H8/Vnj5bpHPkaZpGTU0NV111FV/4whcyvrazszPVCjjF+FUcYC5wMuWYuUA38D3gC8C0q3oKTvrJYu8zIf3Y2Bj79++nubmZuXPnTnrsdLYOXV1d6LqeaC09awQH6Xn+X9gij+EwI0hXBQIFxd+F6Z2PVjGfsvpmymJhvD0HGQ4M4jh1nL4DfkK4cNQtwdvYQlV1NZqQiJGTqH17EMFBQCI1N2bdKszqFnBNbe0VKmMs+TrpvOQ+n4/e3t5EJaI9CZSWlk57fIVU3YXM3vts9vQZrLnUB9N9AFIIcQ3QJ6V8UwhxaVaDTULBSJ+NjNV0SC+lJBAI0N/fz6ZNm6b8kLMlfTQapauri9LS0qxaS08FU49y8uWHaWl/mDklElUPITUPwt+DKgWoDpTuPaCA9NQiIsN4h09RbkRRapYgS+swSxsI+boZGdrF8ZiTCn8bJU4VZ2UT7tpmhKqAEUXt3oXa9RbGnHWYTZvPitV/MiI6HA7q6+upr68HTjvIjh8/nvAH2JNANqmzmTLk8oVMjsNAIEBNTc2kr503bx4nT54c9xDQlXLYKWB+mmPeB1wnhLgacANeIcS/Syn/VzbjLgjps429Z0t6XdfZt28f0WiUJUuWZOUpzYb0w8PD7Nu3L1GjPlvCR/zDdD/3QxpHdzOmuRBKDFQnIjQIpok0YihRPwgFGQuhmAdAqBhaCSYKSmgQIUHEIpTKGKVGjPmBfmIVzURibiKnuujv2I3ubcZVs4Dy8iqcTg21ZxcYUcz5F8MZTgKajkfddpA1NTWNS521y56T/QHpREQKvdJD+i1eNiG7rVu30tbWRnt7O4sXL3YCtwAfTDnsceBT8f3+BcCIlLIb+GL8h/hK/7lsCQ8FIP1kLaRSkQ3pR0dH2bt3LwsXLpw0lTYVk5FeSsmJEyfo6elh06ZNDAwMzKrgBcA30Ef/f/+MRUo/7tp5BHu6EIE+MHRwuEAPowQHwIiCEUUQt+WEhmKaSMWJ4u+DkA9FmqC6QA8h3V7UYC/uhvW4qxupiIUxgt34hyN0jTUQ0w1KPG4qx17D4alHqVs6q/cxW8x0G5EuddbOD+jo6AAYJyKSrTJSIeD3+6cU0NA0jR/84Ae85z3vAcsD/xMp5T4hxF8ASCn/FXgKK1x3BCtk979zMb68kd521rW3t7NgwYKs0yMzkV5KycmTJ+ns7GT9+vWUlpZy4sSJrMlpF9ykQtd19u7dm0jRVRRlWk6/dOPs6OhgpO1lVpeFcQ52I0YClI12IoyxuMktEVJCNGQzHTAT/wojimpEQHVYT0sdKQRoLoQRg9AwSt8ezIa14PCgel1UhobwemswqpYQDAYJ+GL4d/ya/oZ3UV1Tk1ZsotB7+tnATgKyuwnZWXN9fX20tbXhdDpRFIXy8vKCvbdM18g2Tn/11Vdz9dVXAyQSU+Jkt3+XwCcnO4eU8kXgxWzGayMvpE+OvXd2dtLc3JzV6zJNDLFYjH379uFwOMZ556fjA0g3odgx/YULF9LU1DTu2JmEzQzDYN++fSgC1qvtqN27wHcShMARHUPI8Glz24h3xpH2VxC/ntTj3hvFmhjMKKguRDSAdFdYx2hORCyA4juKWb0UFA3p8qL42pEV8ykrLaFMq6Fh9BRzmzQGpZIopvF4PAlveSGQLwKmZs2Fw2Ha2toSwqKlpaXjRERyjcnuj/MuIy/VnJ8tRkZG2LdvH4sWLaKxsXHcc9NZkVOz7OwU3XQx/ZnUsweDQXbv3s38uU3M972CeuBRiIwh9DCoTlQzBJggHGAanHbUxjjtpE2+kUwwdZAqCAOkiYhFkE4PRP0II4YIDaEMHAJHKdJRCooKRszaPkTDxPp9KCe6qXVVUNu0CrnqnQQG/Iy89hqnenowQ2Hajh+nYt06qpubE3FzMxzG7O9H6jpC0xC1tagzJE6hVl23253QFKytrSUQCDA0NJQQFa2oqEhYCrkQFZ1sK3E26+NBDkmfKfY+m/N1dHTQ3d2dMOdTMZ2VXlXVRAThwIEDGIaRseJuuuE9W/xyfZOHipOPInb9O8LfB6pmkdCIImRc/daIx9XHv1ss4tuPKwhMwLDi8LH4e4yNIQzLWhASpLMEEEhFhVgQERlFGe4mFKonNFaJGYohy8bAoWPueJLY3fcjmpbiXbyMsopKeoJdlHd3E2hro7e8HL2lhaqxMUp6etGkiRwcwujrQxoGWn09ztWrcF9wIdq8uYhpNK8sVMJMcj29PQEkl9IODQ1x8uTJjE1GpoPJIgVnsxIu5Hilz0XdO5AQpXC5XIl9djpMN7XWrn1vamrKKKBhH5uNeS+lJBKJcLy9nQvrgjh3/hTR24oYPQVIME+3Rj59pUzjTVnlkx+35wMpwTQRGKA6rUiAqSMRCDOG1CUjxyAyFkISBlcpUotBVCHS40cRIE8eAhSUtRugpITyBQsojcXw7tlD9KX/xvC4CY75kcPDCIeG5ilBcbmQegxjcBC9swu1oYHS91yFmoUc2JkgfSqSS2mBhKhoapORqqqqrEVFJ1PN8fv95wfp7dU9lYS2qZztym8YBjt27KClpWVKUYrprPSDg4OMjo6ybds2KioqJj02G/M+FovR2toKRoytrqNor/4HREcRo93EGWqfjYkr+3Qg41l39p8GqCqgQCyIVBwIM4YZizC010moV6A4IqA5MYZH0LskxmgQoaoIjwtFlRihAxCKwsJm9IEBonv2oHecRBoG+HxopglOJ0JKzFiUiKIgB0OopknU78e9Zg36v/4rzg0bUWuqEZ4SHAubUdN0ASpkGC3b+yydqOjQ0NAEUdHJsiEnU0suRJ3BbJD3kJ1NzKm+DDtsFg6HufDCC7PaE2Wz0pumSVtbG2NjY5SWlk5J+GzOazsAWxYuIHzsUdTOXRDoQcSCYNo+Bvv9CiD7LMOpYYAhQDUQsShSqGDGCBxXCPWoqGUKQhHofgMzKkAzUJwaqApEoshSF8IIoh9pw+HzEfaWw5gfDAMZ8EMwiPB6rTwC00SEwzj8AWuiiUYxe3vxHzkCqorym9+ilJWher0oFRW41q2l7MYb0ZKcomfDSj8V7CYjjY2NCVHRoaEh2traCIfDaaW1zlUlXCgg6SdznthFKB6Ph4qKiqxnyalW+nA4TGtrKzU1NWzatIlXX301q/NOZt53dXXRcfQQWzydlLzwbWI9B1AwLOecGeV06C359bNd7VOhW/F+FAQ6eshEQaVycZRIqJRgr4YRMMDlwgyGwemyJjIVzJEAQoBUDJy9fcRKSixLwjAgFrPI7hsGp9N6zP4Bi+imiWLErQ1FwQyFMIJBpN9PzOcj8NoOPKtWIsrKUIRCqLQUZf485MKFiDy3qspFnD5ZX89uMpIsKmo3GXE4HGkns7NZENNG3kmvadqkxLSz4JYsWUJDQ0Oi0UQ2mGxFHhwc5ODBg6xYsWLKlMhszmuaJgcPHkQZOsrFvt+gHN6HiIyhSANkBEwTbGfdOILnu2JOYIbB4dIJR50IPYIZAD2iIcMx0E0I6pgJw0MgVQWEbpFdj/8bjSaeR0qIRKzfFcUivWlaPzbsIilFIErKMEMhCATQDYPR9naor0errgYh0EpKGD10mNIbb0BLicDkEvlIzkkVFbX9AV1dXYyOjhIIBBJbAds6zZb4M62nF0LMB34BzMFaZf5NSvn9bN9TTkmf7o2qqpq2b1uyZPTGjRsTQoLT9cinHiulpL29nYGBgRlLUafu6e3y2rmeCM2jLyJ6WhFmGCJ+TDSL9ELkn98TYCJ1BWlIogGVUJ9GNKCBIi3/n5SnhxRN+UxFFBAWke3P0DStFVwm+REyhUQNAzQNGQwhhQKBAACqpoHDgdB1dEUQ0Q0YGGB4dJTQ0CA1H/sYjjwRvxAZebY/wJZKa2xsTAhsDg0Ncdddd2EYBm1tbSxZsiQj+WdZT68DfxOfAMqBN4UQz6a8NiPyvvFIR8xoNMpbb71FJBJh69at45RDp5twk0xO+7yxWIwtW7bMWN88+bw+n48333yTJYubaR55DTHYhtADoLhBSlQZsVZ4c+LEVgjEAgrBIRdDbWXEQipGSMHUQXMaCEVYk1G6z9OOBkSj1mpvf462OZ+6sqfCNK3XGgaMjlr/xqML9uPuSJSyqiqc1dWoJSWEDrfR9q//SuuuXZw6dYpgMJjTz6KQabj2nt5uMrJy5Uouuugi7rjjDgzD4Atf+AK33XZbxten1tMDdj19MhL19FLKV4FEPb2toCOlHMNK481cYpqCgpv3Pp+P/fv3s3Tp0kR1VTJmSvqRkRH27t2b2CbMBvZ5jx8/Tm9vL5s3b8bjPwEjJ6xwnKMMQoOgh0Aq1g+FJX14WCPQ4yE6phLzaxhhQUzXTvsMXabll0iXFpCMHAh2jDk8RFQHqjQRisKJsnoGvbUojjIq8bBIHWFOuROXqlA2Moq7vJwR4MiRI/iDIcZEKbqjhJKSMmrL3bTUlVLinH7svJCkT+e9VxSF5uZm5s+fz6OPPjrp63NQTw+AEGIhsBF4LduxF8S8t7Xk2tvbE6WwmUIh0zXvdV2no6ODzs7OcduE2cBO5khuXiEO7oD+Noj4ITgE0gRpoJg6ufXOT41AjxP/KQ+KS6J5IDoiUN1gjgmEQ2LqAhkRSF3mbWi6UOgob2Bn/VK6SyyfSXdpDcOuMmrCI8wJD+NRFSKOKl52z2WVEuTdpT3Eevs5svMo/tUbeavbw/4eg1gshJB+XKKLUoegvMTDuvmVbGiuRdNUnKpVr9A9GiEYNfA4VOZWuplX6R53z+VLIy8dMjmns03BnU09feJJIcqAh4HPSClHp7xoHAXx3ofDYd566y3Kysqm7AAzHdIbhkE4HE7E33OhjxYc7OLEK4+weOw4i51zkW+9gqxdidj3XyijJ0kkzmhOMHWEmVsTNR1MXRALqkjTChD4u5xoJTpCEURDGkiJ1OOfadxsN2Micx7QLBHUXDzTvI3O0lrKYmFqQiMcrG4mrDqpDI0RdHg46i1lib+bhlgAAweHNS+vuWoprRsjdjzC/t5jjIV1HKqCpggqPBpCdREyTIbHDFpf7+aB1zupKVEZ0RUMFBq9HuZUuFAVgZRQXerk3UurWd14OrxbaPM+Fdkm5syynh4hhAOL8L+UUj4ynbHnnfThcJiuri7WrFmTKI6YDNmS3tazV1WVNWvWZD2ejJ5VI8bYjl8SPvQCS6uqGZBR0MOIkA9l70OIkZNYji/D8lzb+9c8QhoQGVEZ7ShB6taNbsaEZWToEkcZCKx9u5UeIDGiAmkKTrvrc4sYgt83rafXXUVj0AfAMW8jfoeHslgICSjSZEQr4ZW6FdSbIaqFzqgoJSA0vKpBf8yNX7EIb5omYROCIwblLhVDSmImNJS7ieomp4IGNR6BNGJ0DkYYGlXZMK+CmopSQrrJQ291M7AsyruXTi9CM1tkyj0JBoNZrfSzqaePe/XvBQ5IKb8z3bHnzbyXUnLs2DH6+/tpamrKivCQuQQ2GXa32bVr17Jnz55pjS8d6aURY/DZ76D0HaCuZT2KGUMZaYPIKAQGrGPcldZ+XhogtHgxTB7NetP6cZYaVC31E+h1Y4RUzBhIUxAZcRALOdC8EqFITB1MXbNcs/L0KSC33lpdKCzxdbBotJuu0hp6SqrpK6mkNBYm4HAz6PZiKCoKIJB0aeX0qAoxRcWBSYe7AWlqyIhhpRMLgSZAEdDrN3CoCpUejb7RCEJRUISkxFOCQxVUShgLRWjtGmOJfxSHAm6Xh9/sjeJ1F7YJZ6aMvGwbXcyynv4dwIeAPUKIXfHHviSlfCqbsedlpY9EIuzZswev18uyZcsYHh7O+rWT1dTbsfJoNJpVe6pU2BNK8gwdjUY58eIvaPQdxjtvMUpvK4x14w0EEMZJxFgPKIpVxWaHuIhYdfH5Uq1NZqsEzSnxzgsxctyNHnGgB1VMQxAdVWHEOk7Gw+3WhCZAASU+eaZOoTOdBExACoW5/iEGPF4W6d3oQkUCPlcpfSVVCASmBFMR6KoDKYQV0kPgB0wBAgVXPLIgpcSQEDOllbtoSsYiBqZh4nKA26ngj+hUlThAQHmJi9GwiigtYU6li1AoRGQ0wP0v7eOP51q9E+z02Xzu7zOZ99OpsJtpPb2U8g+k3+9nhZyT3k6KWbZsGXV1dQwNDU1b1jpqJ4okIRQKsXv37kR4ZCZfaGqIb3R0lH17drMx2kZpRSVKxx+stFaXFz0MONyWKa85EZHRuPPOyoSzltP8mveAFYYLKhi6QnTEQaDPiRFVrcrb5CHEC/WkLkEfPxmlknymo5aAiokqTRpCPoadpYQVlZDq5GR5g0VwBCYCIbAqAQVIBComEmtJl0BYlwgkQoAqwDCt1V5BWvJqpjVplQiNSGz8iEscKid8YeZXexLVdJ3DYXy6ZZUdOXKEvkAfPWoPIS2Ep8RDQ2kDa2rWMMczJyeTwWSkP5tr6SHHpA8Ggxw7dmxcUsxstOxt2KWrq1atSiinJCPbDKhkK6Kzs5OOjg42LPBSOjiKMnAUqZWAooERQdP94Pdb3voo1l5e2jefOcHPmunq07YF4nkxwQEHYyc8xIIqpi7Q/SpSgBGzLIzT71day6d9sSwYbU8CZprDJ7MCJAJTKCDAQPBK4xpa65Yw6izBEMJa5ePjkliEtz8ZI3FmJel81v9i8Q/JkPGJTDetzGCTtNaUpgpCMYNAxKDcbd3CTk2hOyipbKjkf0L/w+HIYWKxGIGxAOG+MLqp85TrKZZVL+P9y99PbUktUkpe73udXx35FcORYdyam3fNeRc3tNyAQ5285n4y0p/NFXaQY9KnU5DVNC1tRl4mpDawOHLkCCMjI2zdujVtH3F79c7Gc68oSkIjPxqNWt1qet5CjJyyVng9jAgMQHSMkmgIRcaQ0ogrWqnWhBCHjNNlqqlm0phLOkgY7XAx3FaKEVMtgoUVa1eh22cUSeeY3ao1mRWQ0O1LuZIUgt/P28TBmmZUU8dQNBQEhpIUQUi8SKT/nYmH2n/r8TnViEnCMQOvO/1tasQnhKgZYkA/wAH9Vd546W6iZhSHcBA0glaVn1BwaA5Go6P0dfexr2cfc5xzeGpk4hb4rYG3+H97/x+Xz72cr2z9CpqS4dqTkH62eSL5Rs7N+9nIWicfH4lEaG1tpaqqis2bN0+poJsN6aWU7Nmzh6amptNbhPAoYrTHioWFhhCmDkhUadnLwi6Wkca4zLbZUM0uv0n+10ZwUEPVoGZVgLFTLsI+V3z1S0e/3MOeBGJC5WR5Pf1uLx3lDZwqq0cCGia1wWGOVM4D0+RgzUJU00BI8/SrU7+rpBU/G8ikf0dCOpqioNphveRzS5ODgefoiLxJWDfQGaJElwyFhwgZIYTVWQC35sapOPE6vWiKxlujb0Eo8/VNTJ7tfJYDvgP88spfpl31MyUCnXcr/WTJOdlCVVWCwSBvvPEGy5cvT9Q8Z0K2QhpDQ0MMDQ2xdOlSFtSWIE78AREcRHnjJzDWiRjniRfxtTTzmpxK1ulCpPwLVlVuLKAhTYGiSrzNYSIBFUZdaY7OD/FjKLzRsIJXGldx3NtId0kNhqoipMSpx6gKjxCqWcyI20tUcViEB4y4s2788GY2xuSaRCEEUcOk2z+ET3TgKD2Gjp9YSZDn/COEzTFU4SBiBjEIMhQY/52ZmAT1IDElhj/qJ8pEf1EmnAqe4q9e+iv+5Y/+Jf0409zvZ7tqDhSwtDYbSCnp7u5mdHSUiy++OCtBw6lCfHadfm9vL03lgoYjD6C9dcSSsOp8AxEaTqqOS7xqyuvmg3JGDDzVUSKjDsyYghlV0JySiJzFFe2quXRPpfwdQ+FkeR26UDlcOZ++kmo0aaDpOhHVQchdxrC7fJykn6GoKNI8TdRZkN1GQjRMgFODqPMAzsqd+KWJK+bBcPQitDHGDL+1zZIKMv7f+PNY/wkEETMyo7Hs9u3m92/8npY5LVlFBc723vSQh4Kb1A8kW+mpWCzGrl27Ek0NslUwnSzEp+s6u3fvJhgMsm1pPQvafoY6dBhZNgcxcMgSvdBmVpSTc0hQNYGiSVxeq6lndEwlNJjOoTQNUmUZVpRA0OFGkyY765bgMWJ49DBCmgScHmJavFNvwsaJF/MIy7lnCpETwtuw7YaoHCSiRwkOrcUMNhOkE12MYBDEIIqJjkkUSWaB1NTJYLr4TeQ3CCE4evQor7/+OgcOHCAWi6UVZT3vzPuZwm5gsXjxYmpqati5c2fWr81k3gcCAVpbW1mwYAFz6ypQn/8qUnFgemoRvnaEvxccHogGcvlWZgxpgjQlsajK6DEPY50e9LBiqeQUwKw3hIJfc6ELlTVD7YQ0FwHNSVdZPVIIlDhxjHStsuzcgJyNzUS4+tDK96GUHAYEQujoIoYQMQRjmAWsd3i9/3XmvsPqxGuLagwODtLa2poQ2bSbbmQbp7dr6Q3D4OjRo3dMpze9EOK98edU0tThT4Uzrulz6tQp9u3bx/r165kzZ05OQnx9fX3s2rWL1atWMdcTQXnrZ4jBo6hGBKlHEAMHLW88AmLh9CcuMKSEwYOlnPxdDSPtJRgRBYyUfXIeHXiGUNCQdJbXURsaYb6/j5iiYSYRXubx+qdhgghjmJJYoAV9bBUgwdmD6upDcQ0hhZG3vKh0iJqn/QB2Qw23283mzZvZsGEDXq+Xvr4+/vRP/5RDhw5x//33c+jQoYwWrl1L//TTT7N//36AW4UQq1IOS66l/zhWLT1CCBX4Yfz5VRleOyny4r3Pxpw3DIP9+/cjpRxXLDPdRhPJK30ixDc8zAUNMVzP/w1Kb6u1qiMpRyB7XQgZA9VhbaILkGAzFaQJvTu9jBz32NksaZBfwpmKgmYaGEIhqLloHulhxF1uNdyIX9ocp8+fzkM/W8Sdp9IBeiVS7cKINGBG69FKjyKqXomn7ubiWtlDFeMjQ8l595qmJZpu3H///Vx66aWUl5fzla98hZ///Odpt6nJtfRxZN2bHlgIHJFSHgPI0Nd+UhTEvE9VxLVN7/nz5zN37txZZUjZK300GqW1tZUKr5et+qtoT/zIcocrDmsZdXiQpoEwQlZ3mVhh7xxpJ84IgVAk0oTIsINYUGHoUCmhAWeSy3qS8yT9nqt3YAiFEc1j5SpIk5jmpNdTgcRa5RMrfOKC6a6ci9HYERMr41FGaxHubpTSQ0hhYAQXoZYcSUQErbTjHFx2CrR4W8b9PVleiL2Kf+pTn8p4vlnW0qd7PPW1k6IgpE9WxO3p6eHYsWOsWbMmJ62VFEXB7/dz5MgRli2az5yd30Hd93Bc300DI2yRP2pgWUZ2Cm1h7MNYQMXf7SLQ7cI0lXjWnMSUVoZv1K+hB9Wk4cg0C6lI89ssJoC4R3/IVc6uuqW82riakOpECkHA4WHhSDcuI2JdQWRIBsowvpnD/k4EEEX1nECr3IlQ/dbZlYj1nOkGtbBbss9t/Ny4v7PNC8mEWdbSTzvfKxV5T84BywSKxWIcOXKEUChkZcLloLUQWHLUw8PDbFm/Gu+O76AcesLar2suy242oraXDIVYwWTspAlDbSWMdXjQI2q8WgVMXUGaEqFZ359pKuMD0/Z3mvp3GmSaACZ/FSAl7eVz+I9ll9FbWkNQc6OrWuI8wdqFGAh0RbPSbomb9qkXzKG3Pvl+Fs4RlNIjVokwXsAEowxUP2a0DtVzcrIT5RRu3CyvXj7usUykzzYdfJa19M4Mj2eNgjnydu3ahdvtZuPGjVkRfqp9vWma7Nu3j2AwSHNzM+UH/gPRvROhx6wVXg9DLJCkQ2+drxBGvZTQv7eMoQNlxIIW4YUiMQ1hVeSaAjOqYEaE1couo1sh+9GKlB+Z9JOK42X1vNS0ht4SqzS2t7SaEWcpEUUjrDoZcZYRcHjQFTUejlMmDiXhsc8V4udSRxBqAH1kK8bYBqSpcXpCUJCmG8zCBZ3++R3/POGxyVb6bIifXEsfLy67Bat2PhmPAx8WFi7kdG/614GlQohFQghnhtdOirx/egMDA/h8PpYtW5a6j8mITHXvNmx12oaGBiorKzFGulFOvgZ63CQ1opaTTkChzHgbpgG+thKG20oRqomiCYRQMA3TUrOZsJKnh4wnAM8Uya8NqU6Oe+cQVp0c8Tby1KKLCTg9GCgIaaKaBmHVQURzopgmZdGgFZcfF57L03QpIqglx9AqdqE4fAgRxjRLiY0twwwsh7FVCO8uhJBgOkE53fAz3xN4lbOKWs/EjNBMAhrZNHWB8bX08cjTr7KtpZdS6kKITwG/wQrZ/URKuW867yuv/emPHj2Kz+ejoaFhWllKk3XFGRwcpG3fTlYsmkdlTRk9wxGc3XFNQGsZPd0VVhbOM2/qEOx14jtaSrDXZV1aVzEiWPaUkbQyJJbj/N62PlcZL81dzxv1KzCEwpizhBPl9eiKlsYLFq9tF4IRV5mVDpdXSNSyfThrXkLRfCBiICQIE5UBNE87Ur6AGW5C6iXxz0vDMo2kPeS8YW7JXMJGmOHYMM00j3sukyNvOim4SbX0AP8ICbIT/z1tLX38uaewJoUZIS97etuT7vV62bJlC0eOHJlR7D15GyANnZ6dv0E99GveYXYjTlnqNXPCfmRw2OqeEgvFpagL56iD0/OMo8ygeqmf8LCGEUz6aMe99cxpsblESHGwu6aF9vI5lEUDSAQHquYTU+KfaaIiTp5204kMBTN5gObdibPmRYQ2jFDM+BxkWMSPQxBD9ZywTHqhI00HSKtRRz6H6FE9SCRep5eIPjF9dzJ9vFwIs+YbOSf9yMgIu3btGidxnanhRSakJtzooVGGH/8yNSMH8ZRXIcrmWJp1wx1osSgiOooICiQqBY+7m2BEFIQi0UMqPW95MSMqCQUJ4PQuO12ZTe4RQ6G9opHa0DCLR7r5w9x1HKqaT1RN01ZKiNNzUE4dc5mhuE/hqH4JxTEU/5yUOOGTr386P0CoYZACoeVfZrxUK8WQBlEjypySOWlTeM/lWnrIA+k1TZsgRT2bLDv/6DD+x79AffQkzoYWK849eASGT4IRQcSC1kolsRI3CgxpAsJkrNPN4P5yYiEFISSKE6uBpCwM0ZMxUFLJsYq5PD9/MxHVgVuPstR3ikNVCxJe+nEQ8UlptqWDWULz7hxHeIQZ/92+fhpLKNkCyNMYncKJJfdlUl9Sj1tzU+aYSGLDMNJqO5ztLapt5Jz0ZWVlEwoRZkr63t5eBl9/hNV6J2pNs/Vth3wI33FLtLLATrpkmAYE+5wMHy0hPOS0VGoBzHhRrgEFY1ESDAS7a1t4pvkCnEYUlxHFVATCFCwa7aKtakGGVxZqnDpmtNK6nrS3E7YSkWAqSy1fhBcIDGn1ZyjRSijVSnEqTpZULJlw7LkslQUFSs7RNI1IJPvSRkVR6Dqyh7LuV1h/6iEr9BboBFclhIchMpJ09Lggd0EQ6HMyuK8MM6qAkKguAyOmIo10nvnTxC/EFBDQXDy3YAuGEPSVVBF0eBDxrDpVmmhGDD2TFFRBeK9jhhYQ6bsGV90zlumeuHjm7zGfOw+n4sSUJqVaKaVqKaFYiIGRAdbVrmN0aJSqqqpxIqyZnMxF0idhOit9NBTA/da/0TTyFqUuFREetspfDQP83RDy5XewU8Df42RgbzlCsRNsJEZItVYtE3JxZ057Cktyyh2qaaajrJ6o6kBXVGvPjkBIiWbqU4yuEKx3gDaGGaklOvROXHW/HZ+NmGlUeRqaR/WgoGAIg3JHORKJw+lgWc0yrlx4JaOjo5w4cQJFUaipqaG6ujonSrhnEnmvp4fsST/iG8T34F8xd/gNlLI6cFdYiTaKav1klb2YP+hhhcF95agOMxFFj45p6OG44y4HOelZpN9PhGmClBiKys9X/DEBRwkxVbPOIrGKZoCYqmEohdWHnwgBRjlC82MEF2HGvAghEMJSxk2tKcwn4VVUaw+PiVOx9uh+3c+80nl8Ys0nWFC/gJaWFrZs2cLq1atxOp10dHTQ29vLiRMn6OnpGafcnG2jCxtDQ0NceeWVCCHahBDPCiGq0h0nhHivEOKQEOKIEOKOpMf/WQhxUAjRKoR4VAhRmc11C2beT0X6U6dOob/6b7ToHYTKGuLho/j+TkqrWWR4ZNJz5BtGBNzVEfSAA0MHPagk0moTirSTINWATX3FdM3/GAp7axbxfPMW+jxVSCEIaU5AWiHv1OvLuKBEvuplxkGiuLvQyvYjHCMgFcxIPbp/FVL3ojhGkEgM/0rUmlcnDiXPc7mKJTqqx1WT3MJNQA+wtX4rn13/WSpdleOOd7lcNDY20tjYyJ49e2hoaCAYDLJ3715M02RoaIhDhw6xbNmyrMdw5513cvnll/Pss88ujZP5DuD/Jh+TVEp7JVZqbnJL62eBL8YTdr4NfDH19elQMPM+U8jONE3279+PGQ2yKbwbyuoQUcuhIjWX5ZnXQ3GxizPnuEOCo9SkelkQM6bg73IxeKDMYpKZfUpqOqKPPyCphGwShBQHA54KKqMBvJEgPlc5JoLyWIhoZIxBd0VCxiq7QeWO9YqrG2fdbxHaKEIKpLRuM8XdiaNiJ0akHiO4CKE4MULNwHjSz8zcyR72Ht6pOFEVlVpPLZWOSv6k+U94b/N7UdIJhSTBNE0qKiqor69n4cKF6LrOH/7wB9566y0effRRnn/+eb7xjW+wevXqSc/z2GOP8eKLL9p//hx4kYmk3UaGUlop5W+TjnsVeF82778gBTeZzPtQKERraytz5sxhYawHoUeQzlKEGcOUAtQSpLMMMdplmfdnGEIB1WliRBTK5oaREgb2lZH57sx+9U/ky8upawR0FMKaE7ceJaJJrmn/H56fv4W2qnmo0SBuI4ohFHyucqt9dOKVElNJyQzMNbO0IRRPO6buQZHmeHe76UYiUV19qK4eIoOXIGRJnORJk1weXQsVzgpMaVLtqmZF1QqWVixlRdUKVlevxqW6pj4BE733mqZx6aWX8vvf/56/+Zu/yUrQFaC3t5fGxkYA4j3qJvZuz76U9s+A/8xm/GfMvLc74axatYoqRxT1ibthsA1lSOCW0srQis6NB8ILm2FnIxpQGDvpRg+qce06HVd1lFhAQQ+puLw6pQ0RAt3Z6fmlw2QpO+m2AhKIqSpOM4bHjFIeC2EIhSs7XqentJoRVxmKadIYHGLEVYapKKjydHMOmaiWyyWzJIr7JI6KN1FLjpHYjUsF0/BY/g9pRwwEilmO0Hy4qt5EH9mKpqhWuCyP33Gds46GsgaWVCzhksZL2FK3BWe6ZKUskMl7HwqFKC8vZ8WKFYnHrrjiCnp6eiYc+4//+I/ZXi7dFzXugxJCfBmrK8IvszlhXkifqp6T2sDi+PHj9Pf3s3nzZjxD+9Ee/zL42i0rQXVannojjBhsI9Ekchpx/tkiMqzR+5aX0JDzdDObpOVYcZiW4SEkmju5Djx7ZGPBJj9nH28AuqKiSEtNK6C5CThcOE2dzb0HeGHBVhQkqmngjfoZdpXHZSmkpW+X80C3gbP2ObTygyAl0nSR3ENH0fyghpCxSjBKEQLK3Q4UpZZR0Y9WuTOxr84X3tXwLj6y6iM0ljRS4arIyTmzDdk999xzGc/R0NBAd3c3jY2NxFVx+tIclrFdNYAQ4jbgGuBymaXkVMGUc6SU6LrOnj17cLvdbNmyBdV3DO23d1jqNq5yCA1bPd9j/njzhMImtgAEex2c+kONVbMj4v5Eu7NM/CM1o6olgqNKpGlmCDFnHvtMtqynrQErd/9IxTyem7+J1rqWxGPlsRAGUB4LIwGPHmXYFe8vJwQyD1skR83v0MoPIPVSUJI15S0LTZoukBqKcwAzouLWrA60hjRBG0VxDmLGMwnygVpXLd+48BszXtWng+lm5F133XX8/Oc/54477gC4DXgszWGJUlqgk6SW1nGBzP8LvFtKGcz2ugUrTDYMgx07drBw4UKampoAUN6420ptc1eCXgHBQYiG47dAUs/lPCMWVBg76WH0hIfwUNwMjSeHTTYCaQhMmTrjT07lmSboDDvL2FO7mBGHhzfrl7OntoWI5kCVEhNLhrqvtDpJNUAmnIGmomQs1E2KkUwfjkEc5fsswgMoYRQlDGoYIU5P2tJwI6WK5uqnRF2MIXXG5HGEEkEi0NCITSJhPVPMcc/htpW35ZzwmRbU6cbp77jjDm6++Wa++MUvtgEdwPsBhBBNWCq3V09RSvsDwAU8G/elvSql/IuprlsQ876np4dQKMRFF110+kPx96Kceh1Kqq2/PZXQH8FSnFDjN2yeV3oJRlQgDYGnJko0oBDzqxhRJfv5RpAUrss94Xs9VTyy5F3sqluKKQQxRaPfXYGpWI0s9bj2fNqBJT13WoZiPMlnVZ5kWlVxQg0gHMMINa5nkDwGqSCUcFxzQ6ITJGQOItUISjxGbuahSGpR2SIq3ZVc0nhJzs+dCdPtblNTU8Pzzz8PluJtAlLKLqxaevvvtKW0UsqJOcJZIK8rvWmatLW1Jbp+JM+Com9f/KaMr5RG1Po72arPcz28EYNYQLHaJTtNqlqCVC0OMniwjNHjHrKhqEwi/GRm+0wI317ewF2bbiWsOtBMk2FPOX5n0rimuT/PuTvUqEaaJqrLB4pd0pziiRDxfVLcdArQDqqM/5UfS26uYy4iKrjSeyXB/iCeGk/OSl4nE3c5b6vsbESjUXbv3k1VVRWbNm3i1VdfHaeIK4zo+Fh0eCTeFVbExTAkeS2TlVb2qqKClMLqRK0LEJLalX4URTJ8LIvsqkShyHgPeyqmQ89+TwW/WbCVh5ZehiEUDKEk6W1M40x5rYuXIGLEhi9CqX0Ooeikdz0Sz1a0k4LM1GdzinnueSyvWc5HVnyEJmcTQ0NDHDlyhHA4TGVlJdXV1VRVVc1Y2DJT40qwOirlSvsxn8gL6UdGRmhtbWXZsmXU1dUBE9VwpMubEsON3zQOjyV7pWdXiDFjxE+pug30kHb6ElJgxKBqeZDggJPo6PTbSqUjfzbOOwn8ZsFWHl76R4w5PBiIJH26aRK4ED5QbRQjsIJwrBb33AcQapB031Wh3LErK1bypS1fYrF3cWI1njv3dGea4eFhBgcHaW9vx+FwUFNTQ01NzZT96ZIxmT7ebKTcC4m8kN7v90+oqbdj9fZMKBs3xhtORK0wnZIkgKi5MaRAM1L7CaemsswC8Z2FqoAetky203UflvFZ0Rymf08q6bP7YjOZ85Ol4f5mwVYeWHZ5QtrKnCIzLCMKcfOJKIpigIxg6hWEu6/HM/c/LHVtCh93qRAV3Lr8VloqWtI+rygK1dXVVFdbPqRQKDTOCqioqKCmpmZKK2AyJdxs1XDPNPJC+nnz5k1IxpmQiuvwYKy4DnXPf0JZgxWyi4eeEkqrQjn9QSqOeAw/Yk0Us0XS0uvwGMSC4z8KMyZQ3am5AbMjfOoZkicAXSjM9/ezpfcgLzetsRpCzgSFuumU+HcpJBDG1EuxJ+O0I8jjsBo9jYiYoETLft/u8XimtAKqq6spKSkZR+TZat6fDcib9z4V6VJxzQ0fRjn1GmL4JJTUgLMUokFQHUghMFBRiVnefM1t3dBKiTUBmLHTQpgzGuTpXxUNhCoQpoI0LCpKE4aPlUw8eApMZ5VL3gYMeCoojwa46ehL3Hj0JR5ecilPLbxweiQu5CqTvGVXorjn/BfJ6jbJh+VzVG7VTZW7imF9mNVVk+e6Z0KqFRAOhxkcHOTo0aMTrIBMpNd1fVzN/dmMgo0ybf69qwz96u+jvvA1lJ5WTJcXJerH1CMI00RVNTDM04SHeJhIIL3zEP5u0KOns/aA7Ex/O45NIudGdZpIU02QPubXLM36aWCmN3jY4SKoWam8MUVDMU3ef+R3OI0Y/7XkXdmdpNBmpXl62+OqfQHFORS30go3LBWVMkcZYSPMCveKnGXbud3uCVbA0NAQ7e3t1nVVlUAgMM4KOFcENKCApNc0LX2lnacS4+rvYg4dQe57lNCB5ykbO4qpgoxLOwnfsdMefaEga5ZYDj9/z8zj+eNKd0HRrAwy4QAZg/CINn4umQQzLgoTAkPCrpoWnlh0MZ1ldRhCwaNHmDfWx3x/H3UhH/2eqgyvn9FVcwQHoOD0dKK4+rDyK5ImvgIMS1EU6tx16KbOO7zvyNs1kq2Arq4u+vv7x1kBVVVVDA0NTbuW/gMf+ADHjx/nyJEjzwI3Syl9qcdN1ZZaCPE54J+BOinlQDbXPqPmfdIL8LubaHW8k+Zr/xeeShftz/yQpcE3EeFhpKcGERpCuiugtA6cVixUuisRMSsNWSpOhOqwVv2E53+yQRJPWrP9B4DDjUABhyVKYUZVpmo6MZsq0FOltfzzplvxucuICQ2HqRPSXAy5vZwqq+NV1qCZk+Wln0mnkcCjVED5b5KUbAtrcJQ7ytGlzidXfRJnX/7TbMG6jysrK2lubsY0TUZGRjh06BCf/OQnCYVCfPe73+W6666jpSW9Q9GGXUt/xx13IIR4nunX0iOEmB9/rmM67+HMmvdx9Pf3c/jwYdauXZtoatk/773M23AHDhG/6fUYyrHnUPb8J2KsB5BQ1gjhEaQeiW/MBQgNU3GhmKmafClmv4wH6k3FmiikQAo1vkopEO81ly78lvzYTO7xdm8jv52/hd82b8NUBC49htPUGXWVEVNUBBJFWskruqImOTeTB5DqEiz8BNBSXc9xd082+iE5g0gkaSssrVjK/1nzf5jvns/hgcMFuX7ynl5RFKqqqrjwwgu5++67+eEPf0h5eTmvv/76lKSfbS19/PnvAl8gfc5+RhTUvE9VyZVS0t7ezuDgIFu3bh0nK6yqKoZp4nDHnWkOMFffhLn6JuyGlCgaSusDKL/5IkLqYJgYUlq5AGZywmk8HTW5bltYoUGBQOpRjJgGuo4UElXVCY+NN6kzed2zRVh18EjLu3h0ybsJaq5x54k4Lcdl/EOxJp10NnJGuzlHrBNRK9YuVaRRymRqak7VmkQVBSRRa9rJI/kFAlWoVmgMyZKKJdx10V2oqkowGMyqnVQuYBhGWoed3++nvr6ej33sY1mdZ7a19EKI64BOKeXu6YYJC7rSh8OnzW5d19m7dy8ul4vNmzdP+NJUVcU0M3jmhYKdvmuuuBbj5R9airnRIE5iFgWcmqW4g4iv5HGvvOI4vZoDSIlQFJSmFhxhPxgm+tx3I/sDcPLVNBePDyH+72Rxdxu9nkq+dPHt9MQLYkTS8RNi8Zm+wLwxKl4LX/UaWunh06MznUSHt6GPbEQaE4tIylyqtRUyHYm02nxBIHBrbgB0Q0dTNL666auYpolpmkSjUYQQk2bL5QqGYeByTRTbSJeCm69aeiFECfBl4KpsT5SMM7KnDwaD7N69mwULFjB37ty051AUJTsFXWcpx9d8hnlv/CPusmpwea1VU0qrC05k1DL9pQnOUiLuBlQh0XQ/IjgIpo50lYMRRS57D/qa9yPrViGf+ou4+X964km3f5/MAhBAUHHgNGJ8/s3/4KsXfZSAw/LSmznv+joTSNTy1rgUdSzukbc35xGcNb/DWf0Skf6r0Ec2Y/mSLNSUugiEgghWQvl/5/WtuFQXpmliSANN0fiHC/+BpbVLE6Tv7OyktLQUwzDQdR1VVRFC5GUCmEz+OpX0eaylbwEWAfYqPw94SwixTUo5cZZJQcFaVdsZeQMDA+zcuZNVq1ZlJDxkp6ArpaStrY1upZHui/8epazeInnIB7EA0l1p9ak3ddDcSK9V0msirVyA8jnEtt5O6LbnCH/4GWKXfQ1ZvxqEQKmoGLe6Zit6kfwTEypjrjIimpP6oI/LO9483fr5bMihF1GM4GJCJz5ObGwZlgc+ilDHEI4xhBpCaH7cjY9QuvQfcFS/AGoAVcBYIEgoBpc0vAdE/mok3EpcYktRaSpt4sd/9GMuaTpdObd//37KyspoaWnB6XSiaZrViNMwiMVixGKxxOSQC+SieSWcrqWPY8pa+uS21FLKPVLKeinlQinlQqzJYVM2hIcCmveKojA8PMzY2BhbtmxJayIlYyrS67pOa2srpaWltLS0MDo6SuyDjyC6d6EcesJy9qkujKZNyOolKEeeRmn/PWpsDNNRirHyBvRVN6JXLERRlAnWSenVf0zo978HZu4mCzpc8co2wVMLL+SFBZtRpIEpzoaMLhPF3YXDuwutfB8IiVBCGQks1BCu+mdx1vyBkt5PcPPqlfzJ1rl87He35m2ECgpOnDQ5mnhv43u5vOVy6iqtWg7TNNmzZw8VFRUsXLjQOl5REquwTXTTNBP3kb1Kz8YKmKx5ZU1NTdbnsWvp7733XrA88NOtpZ8xCmLeG4bBkSNHiMViXHDBBVl94JOR3t4eNDc309TUxMDAgDWTCwXZtAmjadOE1xjNF2EAJ0+eREpJU1MTUkoUIdJuR0re8Q5EeTmmzzcjwptAWHUigGPeOTzRcgmaaVCiR/E7pqGpl6dVXik9hLvxIUvsQioIoWexYkuEGiQ29wdcd/EDvO+pazDy1D9QQaHcUc5tK2/j5sU3MzAwQF9nH0cPHqW8vBy/328JqsYJP+H1KROAlHLCRGCTfzoTwGSNLpqbm7M+T1ItPcDl9i/Z1tInI77aZ428r/ShUIjdu3fT0NAApNcWS4dMpB8aGuLAgQOsWbOGioqKSY9NByEEo6OjibTJTJ5Pn9+P748upfKRR7M6byr0JGmq5+dbbaY0JI5J4+4TBjuja08NHTM8n9DxT+Go/gOOit0pUleTwyDCDU/dkKexWRDxzhe6aZWr2przuq7z5ptv4nQ6rV6Hg4PU1tZSW1s7IU/ehn3P2WS1SW//a9872VgB53rHWsgj6YUQDAwMcPDgQVavXk1ZWRn9/f1Zvz4dkU+ePElnZyebN2/G7XYnHlcUJas9m2EYVFVVMTo6yhtvvEFJSQl1dXXU1taOCxd2dnbS1dXF2s99Dt/RY0R378563DZsf7bf4WFv7WKchkV2kUFqKQEx4ZccQyb6x0nTRXTgcqRehqv+N1m9uhCuR0UoKELBqTipLzkdydJ1nV27djF//vyE5Fo4HGZgYIC2trZEzXxdXR1VVVUZyZvOCrAnAWBSKyCTI2+6e/ozibyQ3la87enpSRDUFsbMFskhO9M0OXjwILFYjK1bt06Yaada6ZNNO5fLxfLly5FSEggE6O/vZ9euXSiKQm1tLcFgkFgsxqZNm1BVlbr/7/+j64YbkH7/eNGPVMTlq+xjlLjrr89TgSqN0yG+dKt3gfPmpakiFAMhTKSE2Mg2FFc3jorWqV+c56EqwtLzK9VKEULwjkYrvTYWiyUIP2fOnMTxbrebefPmMW/ePEzTxOfzJZK9PB5PwgpIXiTGXS+DFWBPBPbvdkQgkyOvmHuP5a3funXraaWcad7YiqIQi8USCjw1NTWsXLkyo/mWaaVPJrxI2r8LISgrK6OsrIxFixYRDAZpbW1NmP3t7e3U1dXhraqk6pOfZOQn9yJNiQwGwYwLPUUiFtnjIUIr4UeDaBTNNE7H4ZPmikimjrF5hYHi7kSoIZAaRngu0tQQih4fukQfW4fmbZ10/sn33GQTXiBQhMI7m96J1+klGo2ya9cuFi5cSH19uhyW+OvjTSZramqQUhIMBhkYGGDfvn3ouk5NTQ21tbVUVFRkvB8nswKklIloQOo24FzpTQ95dOTNnz9/VmESVVUJhUK88cYbLFmyZNIvO9NKb39hdk1+pi86HA6zd+9eFixYQFNTE7quMzg4yMmTJxkbG6Ni9Soqb7wJ89FHoaQE4XEjVBWjf8CaBBQr40+tqgZFwRgYQJgmJbEw3mgQU1ER8UkgnKrMmk8mKWGcVS/jqHoV7HRmBEKYxEbWEh3eilZ6FEfVa1Z47gwRXkGJi5hYlY/lrnLqS+q5fc3tRCIRdu3aRUtLS1ZdY06PV1BaWkppaSnNzc2J77Szs5MDBw5QVlaWsAIySVwlWwFSSg4ePEhNTQ1CiAm+gGAweE50rIUChuymi7GxMXp6eti2bduUM2i6lT5bwo+NjbF3715WrFhBVZWVeqtpGg0NDTQ0NCRKK/vf/S5G6uuoeP0N3G++iSIlwuFAKgqipASlrAyhxm+SmmqMwSFKZIyGkI+GwCA9pTVJMfo48sgkoY7hab4bRRvBiiUk70MlWsVOHJVvgMwcPsy7eyF5RFLiUB2UOcpYWrGUr13wNVymi527drJs2bJEldtMkfydSikZGxujv7+fnTt3IoRITABlZWUT7hUpJYcPH0ZRFJYtW5Yw8+17LBgMsnPnzlmNr5A460hv5+P39fVRV1eXlcmUutInO2Um88TaJZLr16/PqJaaXFoply0jcMUV9Pf00N/ZCapKXXc34u57kNEIuN3WBON0otbXowQCVAcDXH38Ve5ecy0BR3xfmffaUwPPgp8gtOH4dSZ+BkKJ10GIpPqEQgwtDrfixqW6qPfUEzACeJ1eVlWtYvvi7SyvXE44HGbX7l0sX748MRnnCkIIvF4vXq+XlpYWotEoAwMDtLe3EwgEqKyspLa2lurqahRFoa2tDSkly5cvT0wI9n2l6zof+9jH+PznP59wLp7tyKv3Pt1jk+VHG4bB3r17cTgcrFq1ipMnT6Y9Lt15bY2ydPv3VEgp6ejoYGBggM2bN2etYJrwAyxZwqIlS4hEIvT39zOkKLgefRRXd49lAdjHu1y4vV4uu2g594tSguHTm/t8tvHQyg4itOEMslU6lix1KuxCpDwOzB4CAqfi5P1172eNsmaCqW37V1auXJkIy+YTTqeTpqYmmpqaEpbdwMAAR48eRdd1XC4Xq1evnnA/RaNRbrvtNq666io+/elPnxP6eFDgld5OxU1H+nA4zK5du5g7dy7z588nEAhMK/YOZEV4OxIgpWTjxo2zys92uVwJz7G+fTv9u3cz+uKLxPr7cXm9lK9dR+1VV6K5XDwdM/j8I/t5td2HbpqoQqApAmka+GO5nQQcNS8hRIzkXHlgEsIXDnax8rY52/jYhVZFmt/vT5jaUkrC4TArVqxIlFkXErZlV1VVxdGjRwkGg1RWVnLw4EGi0SjV1dWoqkpDQwOf+MQnuOSSS84pwkOBSW+LY6aurMPDw+zbt4+VK1cm9m7TSbixw4EDAwOTxmdjsRh79uyhurqa5ubmnH5RmqbRuHkzjZs3J8QV+vr6aH/rrUQ+wF3XL+Ngf5j7X+/k920DmIaBUFWaSjR8IR0pJaHYbHPETVR3F0xot2VOSfhC3bcezcP2RdsTn395eTnl5eXU19eze/du5s+fT09PD8eOHaOqqmrKuHs+cOzYMSKRCGvXrkUIwYIFCzAMg6GhIX7xi1/w4x//mKqqKq677jr8fv8548SDApv36Yjc1dXFiRMnJkhmT1pamwTbmbJq1Sp6enpoa2ujvLycuro6ampqErXPtsm4ePHiSSMBuYAtrlBVVTUuH6C1tRUhBB9scXLdHAer1m6lrMSFP2zwJz98DSlNIjqYcoLkR/ZIEDu1Fv/MrvAAmqLhUT3WvympyKOjo+zbt48NGzYk4t2pcfdMyVS5xrFjxwiFQhNMelVVqa6upq2tjY985CPcfPPNPPXUU4yNjRVJnwmpLasPHz5MMBhk69atE4QJsq2ysxN+kkk2OjpKf38/7e3tuFwuSktLGRgYYM2aNQU3GZPzARYuXEhbWxuDg4O4XS4O7rXyD+rr67n9nc3863+fwK2ZhGKz6OEqtfgqn1wmJCfNqy+U805IgSmtEtnF3sWJx0dGRjhw4MAEh2pq3D0QCDAwMEBrayumaVJbW5tw9ubKarOdeWvWrJlwTtM0+eu//mvmzJnDN77xDRRFYd26dTm5biFR8D29ruvous7u3bvxer1s2LBhUqdfOkzmsBNCUFFRQUVFBUuWLOH48eOcPHkSp9PJ4cOHqauro66uLme9zbKF7UsQQiSKjnRdZ2hoiJMnT7LEHOW9i5w8ddRAU0A3Z0p8gT62GrV8Twaxr+QjU3/JL4SwSP/e+e+l1GGt5j6fj0OHDrF+/Xo8nsyFSKmTZzQaTejUp3rcZ6pLf/z4ccbGxjIS/vOf/zylpaXceeedBd1q5BoFN+8DgQCHDh1i0aJFCbmgbF8PkxM+9bijR4/i9/u56KKL0DQt4W0/dOgQ0Wg0scqWl5fn1RFjGAatra1UVlaycOHCxLU0TaO+vp76+npM02TlyAhr55zk4b0+9g1IdGmZ+pnIn4nSUd87KCnfz/huoGleW2DfkyIUHKqDDyz9AGAVTx0+fJgNGzZkTJPNBKfTmSjCSfW4u1yuxDYg2/OeOHGC0dFR1qxZM4HQpmny5S9/GYDvfve75zThAUSmXttxzNjKNE1zgibe3r17GRgYYOPGjVmFYl5++WUuvvji04PJkvCGYbBv3z7cbjdLly5Ne5ydodXX14ff76eqqor6+noqKytz+qXaacRz587NOo4rpeR4r4+3jnaz99Qwo1FJY1UZC+dUMxg2+enLJxkL6+O+HFVYE4RDjcfbax+xquewpL1RYgVf2ZMhEJQ5yvjyli/zR/P+KEHQDRs2TKmtMF0Eg0H6+/sZGBhIpN/W1dXh9XrT3gsdHR34fD7Wrl2blvBf//rXGRoa4u67784X4Qv6jRSE9HZc/MSJE8yfP59FixZldY5k0mebYReJRGhtbaWxsZF58+ZlPVafz0dfXx/Dw8MJT3JNTc2sWhgFAgH27NnD0qVLpyWwkArbQunv7ycSiVBdXU1HxM1Lx4P4gjGqShxsXlDBHy2vZcfxYR7e2U3PWIhhz4OEXW8ghIFBDlqBzQJ1njr+buvfsbVhK319fRw/fpwNGzbk1SEHVsRmaGiI/v5+xsbG8Hq91NbWJpy8J0+eZHBwkHXr1k0gtJSSb37zm3R0dPCzn/0sn+2s3h6kl1ISjUYxTZP9+/cjpaSyshLDMDIKH6TCJn2yw26ymdbv97N3795Zkcx2BPb19VkON7c74QeYzg06MjLC/v37WbNmTU49u4ZhJCyUsbExKioqqKury7iXPTJyhPv23Mfz3c8TI5bmjPmFQPDhxR/m9o23oyoqvb29dHR0sGHDhoK3dZZSMjIywsDAAIODgwlH8fr16ydUyEkpueuuuzh48CD33XdfvltWvX1I7/f72bVrF/X19TQ3N9Pb20sgEJhSE9zGyy+/zNatW62BTrK6AwwMDHDkyBHWrl2b0xJHO9zW39+PEIK6ujrq6+sndTr19fXR3t7OunXrJj1utrDzAfr7+xkaGsLj8UwIafX29nLixAmWrl7Kn7/05/QEeojJ/JJfEQqa0Lhs7mVsb9iOM+BkbGwMh8NBNBpl8+bNOTfpp4tTp07R09NDfX09g4ODRCIRampqKC0tpaamhh//+Me8/vrrPPDAA4WYnN4epA+Hw7z88svjetT39/fj8/lYtmzZlK+XUrJjxw6am5upqamZdIXv6Oigr6+PdevW5dVctM3svr4+YrEYtbW11NfXjwsZnTx5MjGWQq5kyfkAAwMDCCFwOBxEIhE2bdqEpmn0Bnv55O8/SZe/K6cyVwKBW3VzdfPVXLf4OhyKg6bSJjza6QnPFkCpqqrC5/MlnG11dXUFnwA6Ozvp7e1l/fr1CevItqCeeuopvv3tb2OaJt/61re49tprC5EK/PYgvWmajI2NjfOe+nw+enp6WLly5aSvtR12w8PDdHV1MTIyQkVFBfX19YkiCPsahw8fRtd1Vq1aVVCvqp0B2NfXRyAQoKqqimg0ipQyrUOokJBScuTIEQYGBnC5XIlIRV1dHWqJys8O/ox/P/TvObueR/OwpW4L337Ht1HTiH6ePHmSgYEB1q1blyBZsrPNMIy8xNzToauri56ennGEtyGl5Cc/+QlPPfUUX/3qV3n22Wd597vfzbvf/e68jSeOtwfpwVoZkzE6OsqJEydYu3Zt5gumcdhJKRkeHqavr4+hoSHKysqoqamhp6eHyspKFi1adEZzn+28A5v0Xq83J47AmcBOetJ1nZUrVyb6B6T6Adpo464DdxE1Z+7gc+FC0zTev/T9fHz1x9MS/vjx4wwPD6d1lNmIxWIMDAzQ39+fiLnbfopcTp7d3d10dXWxYcOGtN/LL37xCx555BEee+yxvG7L0uDtQ3qbBDYCgQBtbW1s2LAh/cWycNhJKRkYGGD//v2oqkppaSkNDQ15T83MBFuKu6amhubm5rSOwPr6+oKMz3aaOp3OjKFKewLt7+/n1a5X+eXQLwnLMGEzi6afSbio7iIub76cK+dfmeg+k4pjx47h9/vTxr4new/2+IaGhnKWetvT08OpU6fYuHFjWsLff//9/PKXv+TXv/71mZC9evuSPhwOs2/fPjZv3jzhWLsGfiqHne0VX7VqFRUVFQQCAfr6+ujv77c07eKOtukme8wE4XCY1tZWmpubE2q/qbDHZ++z6+vrqaury/lKYhjGOB34bCwfKSVj/jFeOPoCj598nH3hqSXVNTR+f9Pv0ZTM3mw7MSocDqctSc0WqX4KILENKC0tzfq8vb29nDx5kg0bNqT1wj/88MPcc889PPHEE2cqh/7tS3pbvviCCy44fYEsE27Amq1PnDiR0SseDocTE4BhGIkJIB8zt9/vZ8+ePeMUd6ZCOBxORAIyOQJnAnt70dDQkHVuQjpEIhFeOfoKX933VSKM35o5FSffufg7bG3cOuk57K5D9vYil9suW+yiv7+fUCiUqMCbLKHKDhFu3LgxLeEff/xxfvCDH/DEE09QWVk547H92Z/9GU888QT19fXs3bsXgAcffJCvfe1rHDhwgB07drBly5bE8d/61re49957UVWVw4cPv1dKmZ0ccQ6QV9LbIoKJk0nJK6+8Mi7hJtuU2vb2dkZGRli7dm1WMVP7Bunt7SUSiSQIlouUWzt9dM2aNTMWQ4zFYol9diAQoLq6esobOB1s0cjJrI2ZIBKL0NHbQf9gP2bApLqyetJ8ALC+p0OHDgGMU5nJBwzDSFTgDQ8Pp9W86+vr48SJExlzAp5++mnuuusunnzyyVnLcb300kuUlZXx4Q9/OEH6AwcOoCgKt99+O3fddVeC9Pv37+fWW29lx44ddHV1sXjx4mPAMillQUohC1pwk3wTZJthZ+9TNU1j/fr1WRMiWQ3FTrk9ceIEfr+f6urqRMrtdG/Mnp6exMoxm1CTw+Fgzpw5zJkzB9M0GRoaoqenh0OHDuH1ehOlwZM5Au1GIrPN+EsHl8PF0nlLWTpv6Tg/wNGjR9PmA0gpOXDgAA6HgyVLluTdsaqqaoLkdk5IX18fO3fuRFVV3G43o6OjbNmyJS3hn3vuOb797W/z1FNPzZrwAO9617s4fvz4uMcyRakee+wxbrnlFlwul52degSrF/0rsx5IFjgjGnnJhJ+MxNFolNbWVurr61mwYMGMr5cqdDk0NER3dzcHDx5MGwrMNOaOjg4GBwcTce9cwdbct29gO+Hm2LFjaQkGp7cXtm8jnxBCpNUH2L17N0IIampqGBkZoby8nMWLFxc8kiKESAhxtLS00N3dnZic3nzzzUS40pa+/v3vf883vvENnnzyyWkp7OYKnZ2dXHjhhckPncLqRV8QFJz0tnb4VD3E7Lz1JUuW5PSLSSWYHQpsa2ujrKwsEWpLJnVyGGzDhg15jcELIaisrKSyspIlS5aMa8hhOyrdbjdHjx5l7dq1BddaT+0XYFsbhmEQDocxTXMcwQoNW7p827ZtOJ3ORLiys7OTH/3oR7zyyiu0t7fz29/+Nqfboekgw5Y6n7KJ45DfhOIUc940TWpqatixY0eiqq2qqmrCzTE4OEhbW9us9szZji95BRsbG0uk0Nqhturqag4dOkRpaWlC/rhQSCVYOBzm+PHjHDlyhJKSEvr6+pBS5j2hJRNM0+TQoUM0NjbS3Nw8jmAHDhyYsi4g1xgcHOTIkSNs3LgxYRWpqpooXx4ZGeHZZ5/lmmuu4YMf/CDf/OY3ueKKK/I+rlTMmzcvVfTV7jtfEBRkpU922C1ZsoSWlpZEdt6hQ4fGmdhdXV10d3fPes88XSTLItsrrL0FcLvdVFdXE4lEChIKzISRkRFGR0e55JJLEr0CbRGJ2fgpZgLDMNi9ezd1dXXMnz8fGE+wVD9AvvMVhoaGJhA+GW+++Saf+9zneOyxxxLdZadwYucN1113HR/84Af57Gc/S1dXF8BSYEehrp9X772tkjOZw05KmShr7enpQVVVli5daqWMFjibLRm22drS0kJ5eXkiFGibr3asuFA4deoUvb29aXP6bcHG/v5+RkZGEhmB+Vph7RDhnDlzmDt36q1ounh7Lj9Dn8+XEONIt1Ds3r2bv/iLv+Dhhx9myZIls75eOtx66628+OKLDAwM0NDQwNe//nWqq6v5y7/8S/r7+6msrGTDhg385jdWZO4f//Ef+clPfoKmaRw+fPhqKeXTeRlYGuSV9KOjo+N62WVagXRdZ+/evZSWllJXV5fIZrOz7VL32PmGLdKYzkkWjUYTRTd2TntDQ0NeTWw7lXXt2rVTkth2BNopy7YjsK6uLicFQHbn2Llz506qfDQZIpFIom7Brm6bqR9geHiYgwcPZrQM9+3bx0c/+lEefPBBli9fPqPxFgBvn+Sc2267jaNHj3LNNddwww03MG/evAlfqp3VNn/+/HE3UfIee2BgALfbnUi3zWf1ml2iu27duil19FKLbnJtYtuJLtFodEYFRfYKa3+Gs81YtDvHLliwIGdOMNsP0N/fz+jo6LT8ADbhM8ltHTx4kI985CPcf//9rF69elbjTJd8MzQ0xAc+8AGOHz/OwoUL+dWvfpVI1EpOvvl//+//8Z73vGey0799SC+lpLu7m4cffphHH32UYDDINddcw/bt21m8eHGiEiybrDY7DjswMJAIwU1X2GIqdHV10dnZyfr166d9XtM0E8k29s2bTShwsvMdOHAATdNy5kC0MwL7+voSlW12xuJU57eTgBYtWpQolc41kv0AQ0NDk/oBbAXdTIRva2vjQx/6EPfddx/r16+f9djSJd984QtfoLq6mjvuuIM777wTn8/Ht7/97QnJN1dccQWHDx+ebBJ7+5A+FX19fTz66KM8/PDDnDx5kkgkwk9/+lO2bNkyrZs6GAwm9tiKoiScRzN1/NkZf6Ojo1mZ0FMhtWjEDgXW1tZmdW67vVd5eXneKgjtyra+vj6CwWDCxE5npdidY5csWZLzJKDJkGylwGk/gK7rCcnsdOnYx48f59Zbb+WnP/0pmzZtytl4jh8/zjXXXJMg/fLly3nxxRdpbGyku7ubSy+9lEOHDvGtb30LgC9+8YsAvOc97+FrX/saF110UaZTF5T0BY3T19fXc/vtt2MYBg899BA33ngj//RP/0RPTw/vec97uP7667MyY0tKSli4cCELFy5M5Nvv2bMHKWViAsi2oCVZmnr9+vU5Idi4ppcZQoGZ9ti2k6y+vj7hFc8HHA5HQk3WdgR2dXUlEpZsE9s26XPROXa6KC0tZdGiRSxatCjhB9i/fz+jo6M0NTUloinJ39nJkyf54Ac/yN13351TwqdDb29vYkva2NhIX18fMDH5Zt68eXR2duZ1LNPBGcnIu/zyy/nzP/9zHA4Hn/rUpxgeHubXv/413/rWt2hvb+fKK6/k+uuvzyrt1u12s2DBAhYsWJBQtjlw4AC6rk9ZcJNJmjqXSBcKTE4XtScAt9udMKEXLFjAnDlzcj6WTLD3+nV1deNM7La2NiKRCAsWLDjjHVxcLhder5eOjg62bdtGKBRK5AN4vV5GRkaor6/ntttu4wc/+AHbtm07Y2NNZz2fTb3uzgjpU72olZWVfOhDH+JDH/oQY2NjPPnkk3zve9/j0KFDXHbZZVx//fVs2bJlygkguaFkLBZLtEOKRqMTKtpsaep58+bN2As9EySvXqFQiP7+fvbu3YthGEQiEVpaWgpK+FTYCUsul4vBwUFWrFhBKBRKO0kVEmNjY+zduzfRBcdWLLajFb/4xS/41a9+xdKlS2lra2Pr1q15z/NoaGigu7s7Yd7b7dJSk29OnTp1VrWxLuiefroIhUI888wzPPTQQ+zevZt3v/vdXH/99Vx44YXT2nfbXvbe3l5CoRBerxefz8fy5cvPSO51KgKBQCLRxe/3p52kCgk7rz9VydeepOzS5ek4AnMxnnXr1qW12vr7+7nxxhu58847WbBgAU888QR/9Vd/lfMoT+qe/vOf/zw1NTUJR97Q0BD/9E//xL59+/jgBz+YcORdfvnltLW1nZ+OvNkgEonw7LPP8uCDD/Lmm29y8cUXc8MNN/COd7xjWjH8wcFB9u/fT1lZGeFwmOrqahoaGs5YrrgtCpKcR58aCrQ78RRijPaKOlVev21J2bXtdrgy12OcivCDg4PcdNNNfO1rX+Pqq6/O2XVTkS755vrrr+fmm2+mo6ODBQsW8OCDDyb8HsnJN9/73vf44z/+48lOXyT9VIhGo/zud7/joYce4pVXXmHbtm1s376dd7/73ZOG2mxn2vr163G73RPCbJWVlTQ0NOS8y00m2HX5k/Vxs51syaHAhoaGvLRuHh0dTUxA08mUSzfGXOTcBwIBWltbM05Aw8PD3HjjjXzpS1/iuuuum/F1zgIUST8d6LrOSy+9xEMPPcRLL73Exo0b2b59O5dddtm4fedU0tSpXW6SxS3zMQHYXV7Wr1+f9d7TDgX29fXh8/kSLbmzDQVOBjvRZapGklMhVcTUzrKcblLVVIQfHR3lpptu4q//+q953/veN+PxpuL73/8+d999N1JK/vzP/5zPfOYzkybh5AhF0s8UhmHwP//zPzz88MO88MILrFq1iuuuu44//OEPXH311fzRH/1RVgROp75rpwPnIpe9s7OT7u5u1q9fP+N9ZyYBzpmk29qdY2fSSHKqMSYnVTkcjkSUYLLrBINBdu/enbE7kN/v533vex+f+MQnuPXWW3M23r1793LLLbewY8cOnE4n733ve/mXf/kX7r777rRJODlEkfS5gGma/M///A+33347QgiWL1/ODTfcwHve855pleumksvj8STSgWdSD3D8+HF8Pt84DfhcwO/3J/bYydVuU1kRdjlqPhpJpiLVEZhcdGP7AexCp1WrVuH1eiecIxAI8IEPfICPfOQjfPjDH87p+B588EF+85vfcM899wDw93//97hcLu699960STg5RJH0ucJPfvIT/H4/n/rUp9i1axcPPvggzzzzDPPnz2f79u1cffXV01KdSV65+vv7cblciXTgqVZXuwFFJBLJe2MOm1x2vb2dr5BaS9Df3097e3tBGkmmwtYw7OvrIxwOU1NTg9fr5dixY6xevTot4UOhELfccgsf+MAH+NjHPpbzMR04cIDt27fzyiuv4PF4uPzyy9myZQv33Xcfw8PDiePsLj05RJH0+YSUkr179/Lggw/y1FNPUVdXx/bt27nmmmumnXGWLL+d3Gs+lUC2fpyiKHkXjExFalWgHWYLBoOcOHGCjRs3FryRZCoMw6Cnp4fDhw/jcDgSkYDkuoVI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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Your code here:\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "plt.scatter(patients.diagnosis_int,patients.patient_weight_kg,patients.patient_height_sm,c = colors)" ] } ], @@ -726,7 +2037,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.6" + "version": "3.8.8" } }, "nbformat": 4,