{ "cells": [ { "cell_type": "markdown", "id": "looking-courage", "metadata": { "papermill": { "duration": 0.024036, "end_time": "2021-05-27T00:07:33.575998", "exception": false, "start_time": "2021-05-27T00:07:33.551962", "status": "completed" }, "tags": [] }, "source": [ "# Amazon SageMaker Studio Walkthrough\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "576a382a", "metadata": {}, "source": [ "---\n", "\n", "This notebook's CI test result for us-west-2 is as follows. CI test results in other regions can be found at the end of the notebook. \n", "\n", "\n", "\n", "---" ] }, { "cell_type": "markdown", "id": "2e85a7f0", "metadata": { "papermill": { "duration": 0.024036, "end_time": "2021-05-27T00:07:33.575998", "exception": false, "start_time": "2021-05-27T00:07:33.551962", "status": "completed" }, "tags": [] }, "source": [ "_**Using Gradient Boosted Trees to Predict Mobile Customer Departure**_\n", "\n", "---\n", "\n", "This notebook walks you through some of the main features of Amazon SageMaker Studio. \n", "\n", "* [Amazon SageMaker Experiments](https://docs.aws.amazon.com/sagemaker/latest/dg/experiments.html)\n", " * Manage multiple trials\n", " * Experiment with hyperparameters and charting\n", "* [Amazon SageMaker Debugger](https://docs.aws.amazon.com/sagemaker/latest/dg/train-debugger.html)\n", " * Debug your model \n", "* [Model hosting](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-hosting.html)\n", " * Set up a persistent endpoint to get predictions from your model\n", "* [SageMaker Model Monitor](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html)\n", " * Monitor the quality of your model\n", " * Set alerts for when model quality deviates\n", " \n", "Run this notebook from within Studio. For Studio onboarding and set up instructions, see [README](README.md).\n", "\n", "---\n", "\n", "## Contents\n", "\n", "1. [Background](#Background) - Predicting customer churn with XGBoost\n", "1. [Data](#Data) - Prep the dataset and upload it to Amazon S3\n", "1. [Train](#Train) - Train with the Amazon SageMaker XGBoost algorithm\n", " - [Amazon SageMaker Experiments](#Amazon-SageMaker-Experiments)\n", " - [Amazon SageMaker Debugger](#Amazon-SageMaker-Debugger)\n", "1. [Host](#Host)\n", "1. [SageMaker Model Monitor](#SageMaker-Model-Monitor)\n", "\n", "---\n", "\n", "## Background\n", "\n", "_This notebook has been adapted from an [AWS blog post](https://aws.amazon.com/blogs/ai/predicting-customer-churn-with-amazon-machine-learning/). \n", "\n", "Losing customers is costly for any business. Identifying unhappy customers early on gives you a chance to offer them incentives to stay. This notebook describes using machine learning (ML) for automated identification of unhappy customers, also known as customer churn prediction. It uses Amazon SageMaker features for managing experiments, training the model, and monitoring the deployed model. \n", "\n", "Let's import the Python libraries we'll need for this exercise." ] }, { "cell_type": "code", "execution_count": 2, "id": "guilty-instrumentation", "metadata": { "execution": { "iopub.execute_input": "2021-05-27T00:07:33.628811Z", "iopub.status.busy": "2021-05-27T00:07:33.628168Z", "iopub.status.idle": "2021-05-27T00:07:51.411063Z", "shell.execute_reply": "2021-05-27T00:07:51.411446Z" }, "papermill": { "duration": 17.811928, "end_time": "2021-05-27T00:07:51.411586", "exception": false, "start_time": "2021-05-27T00:07:33.599658", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[31mERROR: aiobotocore 1.2.1 has requirement botocore<1.19.53,>=1.19.52, but you'll have botocore 1.20.81 which is incompatible.\u001b[0m\n", "Collecting sagemaker-experiments\n", " Downloading sagemaker_experiments-0.1.31-py3-none-any.whl (42 kB)\n", "\u001b[K |████████████████████████████████| 42 kB 1.3 MB/s eta 0:00:011\n", "\u001b[?25hRequirement already satisfied: boto3>=1.16.27 in /opt/conda/lib/python3.7/site-packages (from sagemaker-experiments) (1.17.81)\n", "Requirement already satisfied: botocore<1.21.0,>=1.20.81 in /opt/conda/lib/python3.7/site-packages (from boto3>=1.16.27->sagemaker-experiments) (1.20.81)\n", "Requirement already satisfied: s3transfer<0.5.0,>=0.4.0 in /opt/conda/lib/python3.7/site-packages (from boto3>=1.16.27->sagemaker-experiments) (0.4.2)\n", "Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /opt/conda/lib/python3.7/site-packages (from boto3>=1.16.27->sagemaker-experiments) (0.10.0)\n", "Requirement already satisfied: urllib3<1.27,>=1.25.4 in /opt/conda/lib/python3.7/site-packages (from botocore<1.21.0,>=1.20.81->boto3>=1.16.27->sagemaker-experiments) (1.25.8)\n", "Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /opt/conda/lib/python3.7/site-packages (from botocore<1.21.0,>=1.20.81->boto3>=1.16.27->sagemaker-experiments) (2.8.1)\n", "Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.7/site-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.21.0,>=1.20.81->boto3>=1.16.27->sagemaker-experiments) (1.14.0)\n", "Installing collected packages: sagemaker-experiments\n", "Successfully installed sagemaker-experiments-0.1.31\n" ] } ], "source": [ "import sys\n", "\n", "!{sys.executable} -m pip install -qU awscli boto3 \"sagemaker>=1.71.0,<2.0.0\"\n", "!{sys.executable} -m pip install sagemaker-experiments" ] }, { "cell_type": "code", "execution_count": 3, "id": "composite-greensboro", "metadata": { "execution": { "iopub.execute_input": "2021-05-27T00:07:51.469204Z", "iopub.status.busy": "2021-05-27T00:07:51.468727Z", "iopub.status.idle": "2021-05-27T00:07:52.602862Z", "shell.execute_reply": "2021-05-27T00:07:52.603249Z" }, "papermill": { "duration": 1.165375, "end_time": "2021-05-27T00:07:52.603385", "exception": false, "start_time": "2021-05-27T00:07:51.438010", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import io\n", "import os\n", "import sys\n", "import time\n", "import json\n", "from IPython.display import display\n", "from time import strftime, gmtime\n", "import boto3\n", "import re\n", "\n", "\n", "import sagemaker\n", "from sagemaker import get_execution_role\n", "from sagemaker.predictor import csv_serializer\n", "from sagemaker.debugger import rule_configs, Rule, DebuggerHookConfig\n", "from sagemaker.model_monitor import DataCaptureConfig, DatasetFormat, DefaultModelMonitor\n", "from sagemaker.s3 import S3Uploader, S3Downloader\n", "\n", "from smexperiments.experiment import Experiment\n", "from smexperiments.trial import Trial\n", "from smexperiments.trial_component import TrialComponent\n", "from smexperiments.tracker import Tracker" ] }, { "cell_type": "code", "execution_count": 4, "id": "fleet-antique", "metadata": { "execution": { "iopub.execute_input": "2021-05-27T00:07:52.666002Z", "iopub.status.busy": "2021-05-27T00:07:52.665428Z", "iopub.status.idle": "2021-05-27T00:07:53.183202Z", "shell.execute_reply": "2021-05-27T00:07:53.182756Z" }, "papermill": { "duration": 0.5543, "end_time": "2021-05-27T00:07:53.183308", "exception": false, "start_time": "2021-05-27T00:07:52.629008", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "sess = boto3.Session()\n", "sm = sess.client(\"sagemaker\")\n", "role = sagemaker.get_execution_role()" ] }, { "cell_type": "markdown", "id": "equivalent-intro", "metadata": { "papermill": { "duration": 0.025411, "end_time": "2021-05-27T00:07:53.234309", "exception": false, "start_time": "2021-05-27T00:07:53.208898", "status": "completed" }, "tags": [] }, "source": [ "---\n", "## Data\n", "\n", "Mobile operators' records show which customers ended up churning and which continued using the service. We can use this historical information to train an ML model that can predict customer churn. After training the model, we can pass the profile information of an arbitrary customer (the same profile information that we used to train the model) to the model, and have the model predict whether this customer will churn.\n", "\n", "The dataset that we use is publicly available and was mentioned in the book [Discovering Knowledge in Data](https://www.amazon.com/dp/0470908742/) by Daniel T. Larose. It's attributed by the author to the University of California Irvine Repository of Machine Learning Datasets. The downloaded and preprocessed dataset is in the `data` folder that accompanies this notebook. It's been split into training and validation datasets. To see how the dataset was preprocessed, see this [XGBoost customer churn notebook that starts with the original dataset](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/introduction_to_applying_machine_learning/xgboost_customer_churn/xgboost_customer_churn.ipynb). \n", "\n", "We'll train on a CSV file without the header. But for now, the following cell uses `pandas` to load some of the data from a version of the training data that has a header. \n", "\n", "Explore the data to see the dataset's features and what data will be used to train a the model." ] }, { "cell_type": "code", "execution_count": 5, "id": "talented-complaint", "metadata": { "execution": { "iopub.execute_input": "2021-05-27T00:07:53.291163Z", "iopub.status.busy": "2021-05-27T00:07:53.290431Z", "iopub.status.idle": "2021-05-27T00:07:53.346672Z", "shell.execute_reply": "2021-05-27T00:07:53.347057Z" }, "papermill": { "duration": 0.08743, "end_time": "2021-05-27T00:07:53.347197", "exception": false, "start_time": "2021-05-27T00:07:53.259767", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Errno 2] No such file or directory: '/root/amazon-sagemaker-examples/aws_sagemaker_studio/getting_started'\n", "/opt/ml/processing/input\n" ] }, { "data": { "text/html": [ "
| \n", " | Churn | \n", "Account Length | \n", "VMail Message | \n", "Day Mins | \n", "Day Calls | \n", "Eve Mins | \n", "Eve Calls | \n", "Night Mins | \n", "Night Calls | \n", "Intl Mins | \n", "Intl Calls | \n", "CustServ Calls | \n", "State_AK | \n", "State_AL | \n", "State_AR | \n", "State_AZ | \n", "State_CA | \n", "State_CO | \n", "State_CT | \n", "State_DC | \n", "State_DE | \n", "State_FL | \n", "State_GA | \n", "State_HI | \n", "State_IA | \n", "State_ID | \n", "State_IL | \n", "State_IN | \n", "State_KS | \n", "State_KY | \n", "State_LA | \n", "State_MA | \n", "State_MD | \n", "State_ME | \n", "State_MI | \n", "State_MN | \n", "State_MO | \n", "State_MS | \n", "State_MT | \n", "State_NC | \n", "State_ND | \n", "State_NE | \n", "State_NH | \n", "State_NJ | \n", "State_NM | \n", "State_NV | \n", "State_NY | \n", "State_OH | \n", "State_OK | \n", "State_OR | \n", "State_PA | \n", "State_RI | \n", "State_SC | \n", "State_SD | \n", "State_TN | \n", "State_TX | \n", "State_UT | \n", "State_VA | \n", "State_VT | \n", "State_WA | \n", "State_WI | \n", "State_WV | \n", "State_WY | \n", "Area Code_408 | \n", "Area Code_415 | \n", "Area Code_510 | \n", "Int'l Plan_no | \n", "Int'l Plan_yes | \n", "VMail Plan_no | \n", "VMail Plan_yes | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "0 | \n", "106 | \n", "0 | \n", "274.4 | \n", "120 | \n", "198.6 | \n", "82 | \n", "160.8 | \n", "62 | \n", "6.0 | \n", "3 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
| 1 | \n", "0 | \n", "28 | \n", "0 | \n", "187.8 | \n", "94 | \n", "248.6 | \n", "86 | \n", "208.8 | \n", "124 | \n", "10.6 | \n", "5 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
| 2 | \n", "1 | \n", "148 | \n", "0 | \n", "279.3 | \n", "104 | \n", "201.6 | \n", "87 | \n", "280.8 | \n", "99 | \n", "7.9 | \n", "2 | \n", "2 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
| 3 | \n", "0 | \n", "132 | \n", "0 | \n", "191.9 | \n", "107 | \n", "206.9 | \n", "127 | \n", "272.0 | \n", "88 | \n", "12.6 | \n", "2 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
| 4 | \n", "0 | \n", "92 | \n", "29 | \n", "155.4 | \n", "110 | \n", "188.5 | \n", "104 | \n", "254.9 | \n", "118 | \n", "8.0 | \n", "4 | \n", "3 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 2328 | \n", "0 | \n", "106 | \n", "0 | \n", "194.8 | \n", "133 | \n", "213.4 | \n", "73 | \n", "190.8 | \n", "92 | \n", "11.5 | \n", "7 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
| 2329 | \n", "1 | \n", "125 | \n", "0 | \n", "143.2 | \n", "80 | \n", "88.1 | \n", "94 | \n", "233.2 | \n", "135 | \n", "8.8 | \n", "7 | \n", "4 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
| 2330 | \n", "0 | \n", "129 | \n", "0 | \n", "143.7 | \n", "114 | \n", "297.8 | \n", "98 | \n", "212.6 | \n", "86 | \n", "11.4 | \n", "8 | \n", "4 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
| 2331 | \n", "0 | \n", "159 | \n", "0 | \n", "198.8 | \n", "107 | \n", "195.5 | \n", "91 | \n", "213.3 | \n", "120 | \n", "16.5 | \n", "7 | \n", "5 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
| 2332 | \n", "0 | \n", "99 | \n", "33 | \n", "179.1 | \n", "93 | \n", "238.3 | \n", "102 | \n", "165.7 | \n", "96 | \n", "10.6 | \n", "1 | \n", "2 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "
2333 rows × 70 columns
\n", "