customer-data-analysis/clustering-customer-persona...

2486 lines
4.0 MiB
Plaintext
Raw Normal View History

2022-11-14 12:40:38 -08:00
{
"cells": [
{
"cell_type": "markdown",
"id": "b9181d5d",
"metadata": {
"papermill": {
"duration": 0.022276,
"end_time": "2022-08-28T13:50:03.958617",
"exception": false,
"start_time": "2022-08-28T13:50:03.936341",
"status": "completed"
},
"tags": []
},
"source": [
2022-11-30 16:06:03 -08:00
"# Section of the Notebook"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "markdown",
"id": "72dd993b",
"metadata": {
"papermill": {
"duration": 0.021173,
"end_time": "2022-08-28T13:50:04.002367",
"exception": false,
"start_time": "2022-08-28T13:50:03.981194",
"status": "completed"
},
"tags": []
},
"source": [
"1) **Choice of Metrics** \n",
"2) **Library import & Dataset** \n",
"3.1) **Feature generation** \n",
"3.2) **Data cleaning** \n",
2022-11-30 16:06:03 -08:00
"3.3) **Data scaling (Normalization | Standardization)** \n",
2022-11-14 12:40:38 -08:00
"4) **Dimensionality reduction** \n",
"5) **Clustering** \n",
"6) **Business Recommendations** "
]
},
{
"cell_type": "markdown",
"id": "25ec315a",
"metadata": {
"papermill": {
"duration": 0.021734,
"end_time": "2022-08-28T13:50:04.045639",
"exception": false,
"start_time": "2022-08-28T13:50:04.023905",
"status": "completed"
},
"tags": []
},
"source": [
2022-11-30 16:06:03 -08:00
"## Selection of Metrics"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "markdown",
"id": "99948a3c",
"metadata": {
"papermill": {
"duration": 0.021363,
"end_time": "2022-08-28T13:50:04.088385",
"exception": false,
"start_time": "2022-08-28T13:50:04.067022",
"status": "completed"
},
"tags": []
},
"source": [
"There are various metrics for clustering, for example:\n",
2022-11-30 16:06:03 -08:00
"* Silhouette coefficient \n",
"* Calinski-Harabasz Index \n",
"* Davies-Bouldin Index"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "markdown",
"id": "900f1f40",
"metadata": {
"papermill": {
"duration": 0.021263,
"end_time": "2022-08-28T13:50:04.131480",
"exception": false,
"start_time": "2022-08-28T13:50:04.110217",
"status": "completed"
},
"tags": []
},
"source": [
"\n"
]
},
{
"cell_type": "markdown",
"id": "2f870b78",
"metadata": {
"papermill": {
"duration": 0.021887,
"end_time": "2022-08-28T13:50:04.174852",
"exception": false,
"start_time": "2022-08-28T13:50:04.152965",
"status": "completed"
},
"tags": []
},
"source": [
2022-11-30 16:06:03 -08:00
"## Importing Libraries and Dataset"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 2,
2022-11-14 12:40:38 -08:00
"id": "1fbdee6d",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:04.222093Z",
"iopub.status.busy": "2022-08-28T13:50:04.220859Z",
"iopub.status.idle": "2022-08-28T13:50:07.209795Z",
"shell.execute_reply": "2022-08-28T13:50:07.208214Z"
},
"papermill": {
"duration": 3.016161,
"end_time": "2022-08-28T13:50:07.212927",
"exception": false,
"start_time": "2022-08-28T13:50:04.196766",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd \n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import plotly.express as px\n",
"import sklearn\n",
"from sklearn.preprocessing import MinMaxScaler\n",
"from sklearn.metrics import silhouette_score\n",
"from sklearn.metrics import silhouette_samples\n",
"from sklearn.decomposition import PCA\n",
"from sklearn.cluster import KMeans, AgglomerativeClustering, SpectralClustering, DBSCAN\n",
"from datetime import datetime\n",
"import warnings\n",
"import sys\n",
"import os"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 3,
2022-11-14 12:40:38 -08:00
"id": "db39198d",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:07.260113Z",
"iopub.status.busy": "2022-08-28T13:50:07.259192Z",
"iopub.status.idle": "2022-08-28T13:50:07.297684Z",
"shell.execute_reply": "2022-08-28T13:50:07.296601Z"
},
"papermill": {
"duration": 0.065015,
"end_time": "2022-08-28T13:50:07.300452",
"exception": false,
"start_time": "2022-08-28T13:50:07.235437",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
2022-11-30 16:06:03 -08:00
"df = pd.read_csv('marketing_campaign.csv')"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 4,
2022-11-14 12:40:38 -08:00
"id": "d4a47db8",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:07.347340Z",
"iopub.status.busy": "2022-08-28T13:50:07.346437Z",
"iopub.status.idle": "2022-08-28T13:50:07.387384Z",
"shell.execute_reply": "2022-08-28T13:50:07.385894Z"
},
"papermill": {
"duration": 0.068972,
"end_time": "2022-08-28T13:50:07.391082",
"exception": false,
"start_time": "2022-08-28T13:50:07.322110",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ID</th>\n",
" <th>Year_Birth</th>\n",
" <th>Education</th>\n",
" <th>Marital_Status</th>\n",
" <th>Income</th>\n",
" <th>Kidhome</th>\n",
" <th>Teenhome</th>\n",
" <th>Dt_Customer</th>\n",
" <th>Recency</th>\n",
" <th>MntWines</th>\n",
" <th>...</th>\n",
2022-12-04 16:00:27 -08:00
" <th>NumWebVisitsMonth</th>\n",
2022-11-14 12:40:38 -08:00
" <th>AcceptedCmp3</th>\n",
" <th>AcceptedCmp4</th>\n",
" <th>AcceptedCmp5</th>\n",
" <th>AcceptedCmp1</th>\n",
" <th>AcceptedCmp2</th>\n",
" <th>Complain</th>\n",
" <th>Z_CostContact</th>\n",
" <th>Z_Revenue</th>\n",
" <th>Response</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>5524</td>\n",
" <td>1957</td>\n",
" <td>Graduation</td>\n",
" <td>Single</td>\n",
" <td>58138.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
2022-11-30 16:06:03 -08:00
" <td>4/9/2012</td>\n",
2022-11-14 12:40:38 -08:00
" <td>58</td>\n",
" <td>635</td>\n",
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>7</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2174</td>\n",
" <td>1954</td>\n",
" <td>Graduation</td>\n",
" <td>Single</td>\n",
" <td>46344.0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
2022-11-30 16:06:03 -08:00
" <td>8/3/2014</td>\n",
2022-11-14 12:40:38 -08:00
" <td>38</td>\n",
" <td>11</td>\n",
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>5</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>4141</td>\n",
" <td>1965</td>\n",
" <td>Graduation</td>\n",
" <td>Together</td>\n",
" <td>71613.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>21-08-2013</td>\n",
" <td>26</td>\n",
" <td>426</td>\n",
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>4</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>6182</td>\n",
" <td>1984</td>\n",
" <td>Graduation</td>\n",
" <td>Together</td>\n",
" <td>26646.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
2022-11-30 16:06:03 -08:00
" <td>10/2/2014</td>\n",
2022-11-14 12:40:38 -08:00
" <td>26</td>\n",
" <td>11</td>\n",
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>6</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5324</td>\n",
" <td>1981</td>\n",
" <td>PhD</td>\n",
" <td>Married</td>\n",
" <td>58293.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>19-01-2014</td>\n",
" <td>94</td>\n",
" <td>173</td>\n",
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>5</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2022-11-30 16:06:03 -08:00
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95</th>\n",
" <td>7516</td>\n",
" <td>1983</td>\n",
" <td>Graduation</td>\n",
" <td>Married</td>\n",
" <td>30096.0</td>\n",
2022-11-14 12:40:38 -08:00
" <td>1</td>\n",
2022-11-30 16:06:03 -08:00
" <td>0</td>\n",
" <td>22-05-2014</td>\n",
" <td>30</td>\n",
" <td>5</td>\n",
2022-11-14 12:40:38 -08:00
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>6</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2022-11-30 16:06:03 -08:00
" <th>96</th>\n",
" <td>7247</td>\n",
" <td>1960</td>\n",
2022-11-14 12:40:38 -08:00
" <td>Graduation</td>\n",
2022-11-30 16:06:03 -08:00
" <td>Widow</td>\n",
" <td>47916.0</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>1</td>\n",
2022-11-30 16:06:03 -08:00
" <td>22-11-2012</td>\n",
" <td>72</td>\n",
" <td>505</td>\n",
2022-11-14 12:40:38 -08:00
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>6</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
2022-11-30 16:06:03 -08:00
" <td>1</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2022-11-30 16:06:03 -08:00
" <th>97</th>\n",
" <td>11100</td>\n",
" <td>1972</td>\n",
" <td>Graduation</td>\n",
" <td>Divorced</td>\n",
" <td>51813.0</td>\n",
2022-11-14 12:40:38 -08:00
" <td>1</td>\n",
2022-11-30 16:06:03 -08:00
" <td>1</td>\n",
" <td>11/4/2013</td>\n",
" <td>37</td>\n",
" <td>51</td>\n",
2022-11-14 12:40:38 -08:00
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>7</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
2022-11-30 16:06:03 -08:00
" <th>98</th>\n",
" <td>4646</td>\n",
" <td>1951</td>\n",
" <td>2n Cycle</td>\n",
" <td>Married</td>\n",
" <td>78497.0</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
2022-11-30 16:06:03 -08:00
" <td>1/12/2013</td>\n",
" <td>44</td>\n",
" <td>207</td>\n",
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>2</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
2022-11-30 16:06:03 -08:00
" <td>1</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
2022-11-30 16:06:03 -08:00
" <td>0</td>\n",
2022-11-14 12:40:38 -08:00
" </tr>\n",
" <tr>\n",
2022-11-30 16:06:03 -08:00
" <th>99</th>\n",
" <td>3037</td>\n",
" <td>1983</td>\n",
2022-11-14 12:40:38 -08:00
" <td>PhD</td>\n",
2022-11-30 16:06:03 -08:00
" <td>Married</td>\n",
" <td>50150.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>20-06-2013</td>\n",
" <td>32</td>\n",
" <td>135</td>\n",
2022-11-14 12:40:38 -08:00
" <td>...</td>\n",
2022-12-04 16:00:27 -08:00
" <td>5</td>\n",
2022-11-30 16:06:03 -08:00
" <td>0</td>\n",
2022-11-14 12:40:38 -08:00
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
2022-12-04 16:00:27 -08:00
"<p>100 rows × 29 columns</p>\n",
2022-11-14 12:40:38 -08:00
"</div>"
],
"text/plain": [
2022-11-30 16:06:03 -08:00
" ID Year_Birth Education Marital_Status Income Kidhome Teenhome \\\n",
"0 5524 1957 Graduation Single 58138.0 0 0 \n",
"1 2174 1954 Graduation Single 46344.0 1 1 \n",
"2 4141 1965 Graduation Together 71613.0 0 0 \n",
"3 6182 1984 Graduation Together 26646.0 1 0 \n",
"4 5324 1981 PhD Married 58293.0 1 0 \n",
".. ... ... ... ... ... ... ... \n",
"95 7516 1983 Graduation Married 30096.0 1 0 \n",
"96 7247 1960 Graduation Widow 47916.0 0 1 \n",
"97 11100 1972 Graduation Divorced 51813.0 1 1 \n",
"98 4646 1951 2n Cycle Married 78497.0 0 0 \n",
"99 3037 1983 PhD Married 50150.0 0 0 \n",
2022-11-14 12:40:38 -08:00
"\n",
2022-12-04 16:00:27 -08:00
" Dt_Customer Recency MntWines ... NumWebVisitsMonth AcceptedCmp3 \\\n",
"0 4/9/2012 58 635 ... 7 0 \n",
"1 8/3/2014 38 11 ... 5 0 \n",
"2 21-08-2013 26 426 ... 4 0 \n",
"3 10/2/2014 26 11 ... 6 0 \n",
"4 19-01-2014 94 173 ... 5 0 \n",
".. ... ... ... ... ... ... \n",
"95 22-05-2014 30 5 ... 6 0 \n",
"96 22-11-2012 72 505 ... 6 0 \n",
"97 11/4/2013 37 51 ... 7 0 \n",
"98 1/12/2013 44 207 ... 2 0 \n",
"99 20-06-2013 32 135 ... 5 0 \n",
2022-11-14 12:40:38 -08:00
"\n",
2022-12-04 16:00:27 -08:00
" AcceptedCmp4 AcceptedCmp5 AcceptedCmp1 AcceptedCmp2 Complain \\\n",
"0 0 0 0 0 0 \n",
"1 0 0 0 0 0 \n",
"2 0 0 0 0 0 \n",
"3 0 0 0 0 0 \n",
"4 0 0 0 0 0 \n",
".. ... ... ... ... ... \n",
"95 0 0 0 0 0 \n",
"96 1 0 0 0 0 \n",
"97 0 0 0 0 0 \n",
"98 0 0 1 0 0 \n",
"99 0 0 0 0 0 \n",
2022-11-14 12:40:38 -08:00
"\n",
2022-12-04 16:00:27 -08:00
" Z_CostContact Z_Revenue Response \n",
"0 3 11 1 \n",
"1 3 11 0 \n",
"2 3 11 0 \n",
"3 3 11 0 \n",
"4 3 11 0 \n",
".. ... ... ... \n",
"95 3 11 0 \n",
"96 3 11 0 \n",
"97 3 11 0 \n",
"98 3 11 0 \n",
"99 3 11 0 \n",
2022-11-14 12:40:38 -08:00
"\n",
2022-12-04 16:00:27 -08:00
"[100 rows x 29 columns]"
2022-11-14 12:40:38 -08:00
]
},
2022-12-04 16:00:27 -08:00
"execution_count": 4,
2022-11-14 12:40:38 -08:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2022-11-30 16:06:03 -08:00
"df.head(100)"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "markdown",
"id": "c9694fd0",
"metadata": {
"papermill": {
"duration": 0.021969,
"end_time": "2022-08-28T13:50:07.434882",
"exception": false,
"start_time": "2022-08-28T13:50:07.412913",
"status": "completed"
},
"tags": []
},
"source": [
"# Features:\n",
"______________________________________________________________________________________________________________\n",
"### People\n",
"\n",
"* ID: Customer's unique identifier \n",
"* Year_Birth: Customer's birth year \n",
"* Education: Customer's education level \n",
"* Marital_Status: Customer's marital status \n",
"* Income: Customer's yearly household income \n",
"* Kidhome: Number of children in customer's household \n",
"* Teenhome: Number of teenagers in customer's household \n",
"* Dt_Customer: Date of customer's enrollment with the company \n",
"* Recency: Number of days since customer's last purchase \n",
"* Complain: 1 if the customer complained in the last 2 years, 0 otherwise \n",
"\n",
"### Products\n",
"\n",
"* MntWines: Amount spent on wine in last 2 years\n",
"* MntFruits: Amount spent on fruits in last 2 years\n",
"* MntMeatProducts: Amount spent on meat in last 2 years\n",
"* MntFishProducts: Amount spent on fish in last 2 years\n",
"* MntSweetProducts: Amount spent on sweets in last 2 years\n",
"* MntGoldProds: Amount spent on gold in last 2 years\n",
"\n",
"### Promotion\n",
"\n",
"* NumDealsPurchases: Number of purchases made with a discount\n",
"* AcceptedCmp1: 1 if customer accepted the offer in the 1st campaign, 0 otherwise\n",
"* AcceptedCmp2: 1 if customer accepted the offer in the 2nd campaign, 0 otherwise\n",
"* AcceptedCmp3: 1 if customer accepted the offer in the 3rd campaign, 0 otherwise\n",
"* AcceptedCmp4: 1 if customer accepted the offer in the 4th campaign, 0 otherwise\n",
"* AcceptedCmp5: 1 if customer accepted the offer in the 5th campaign, 0 otherwise\n",
"* Response: 1 if customer accepted the offer in the last campaign, 0 otherwise\n",
"\n",
"### Place\n",
"\n",
"* NumWebPurchases: Number of purchases made through the companys website\n",
"* NumCatalogPurchases: Number of purchases made using a catalogue\n",
"* NumStorePurchases: Number of purchases made directly in stores\n",
"* NumWebVisitsMonth: Number of visits to companys website in the last month\n",
"______________________________________________________________________________________________________________\n"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 5,
2022-11-14 12:40:38 -08:00
"id": "f0dbda9a",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:07.482194Z",
"iopub.status.busy": "2022-08-28T13:50:07.480839Z",
"iopub.status.idle": "2022-08-28T13:50:07.511325Z",
"shell.execute_reply": "2022-08-28T13:50:07.509843Z"
},
"papermill": {
"duration": 0.057434,
"end_time": "2022-08-28T13:50:07.514712",
"exception": false,
"start_time": "2022-08-28T13:50:07.457278",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 2240 entries, 0 to 2239\n",
"Data columns (total 29 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 ID 2240 non-null int64 \n",
" 1 Year_Birth 2240 non-null int64 \n",
" 2 Education 2240 non-null object \n",
" 3 Marital_Status 2240 non-null object \n",
" 4 Income 2216 non-null float64\n",
" 5 Kidhome 2240 non-null int64 \n",
" 6 Teenhome 2240 non-null int64 \n",
" 7 Dt_Customer 2240 non-null object \n",
" 8 Recency 2240 non-null int64 \n",
" 9 MntWines 2240 non-null int64 \n",
" 10 MntFruits 2240 non-null int64 \n",
" 11 MntMeatProducts 2240 non-null int64 \n",
" 12 MntFishProducts 2240 non-null int64 \n",
" 13 MntSweetProducts 2240 non-null int64 \n",
" 14 MntGoldProds 2240 non-null int64 \n",
" 15 NumDealsPurchases 2240 non-null int64 \n",
" 16 NumWebPurchases 2240 non-null int64 \n",
" 17 NumCatalogPurchases 2240 non-null int64 \n",
" 18 NumStorePurchases 2240 non-null int64 \n",
" 19 NumWebVisitsMonth 2240 non-null int64 \n",
" 20 AcceptedCmp3 2240 non-null int64 \n",
" 21 AcceptedCmp4 2240 non-null int64 \n",
" 22 AcceptedCmp5 2240 non-null int64 \n",
" 23 AcceptedCmp1 2240 non-null int64 \n",
" 24 AcceptedCmp2 2240 non-null int64 \n",
" 25 Complain 2240 non-null int64 \n",
" 26 Z_CostContact 2240 non-null int64 \n",
" 27 Z_Revenue 2240 non-null int64 \n",
" 28 Response 2240 non-null int64 \n",
"dtypes: float64(1), int64(25), object(3)\n",
"memory usage: 507.6+ KB\n"
]
}
],
"source": [
"df.info()"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 6,
2022-11-14 12:40:38 -08:00
"id": "f7586411",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:07.561859Z",
"iopub.status.busy": "2022-08-28T13:50:07.561390Z",
"iopub.status.idle": "2022-08-28T13:50:07.567743Z",
"shell.execute_reply": "2022-08-28T13:50:07.566238Z"
},
"papermill": {
"duration": 0.03321,
"end_time": "2022-08-28T13:50:07.570611",
"exception": false,
"start_time": "2022-08-28T13:50:07.537401",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2022-11-30 16:06:03 -08:00
"Size of Dataset: (2240, 29)\n"
2022-11-14 12:40:38 -08:00
]
}
],
"source": [
2022-11-30 16:06:03 -08:00
"print(f'Size of Dataset: {df.shape}')"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 7,
2022-11-14 12:40:38 -08:00
"id": "f264ddf4",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:07.617293Z",
"iopub.status.busy": "2022-08-28T13:50:07.616780Z",
"iopub.status.idle": "2022-08-28T13:50:07.621925Z",
"shell.execute_reply": "2022-08-28T13:50:07.620972Z"
},
"papermill": {
"duration": 0.031732,
"end_time": "2022-08-28T13:50:07.624479",
"exception": false,
"start_time": "2022-08-28T13:50:07.592747",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
2022-11-30 16:06:03 -08:00
"# warnings are ignored.\n",
"warnings.filterwarnings('ignore') "
]
},
{
"cell_type": "markdown",
"id": "c2c96568",
"metadata": {},
"source": [
"### Optimize the memory usage (optional)\n",
"\n",
"* The dataframe entirely can be heavy of memory as it conists of all the dataset along with datatypes that can be reduced to fit with approriate data types."
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 8,
2022-11-14 12:40:38 -08:00
"id": "d9a8233c",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:07.672093Z",
"iopub.status.busy": "2022-08-28T13:50:07.671209Z",
"iopub.status.idle": "2022-08-28T13:50:07.685753Z",
"shell.execute_reply": "2022-08-28T13:50:07.684290Z"
},
"papermill": {
"duration": 0.041657,
"end_time": "2022-08-28T13:50:07.688614",
"exception": false,
"start_time": "2022-08-28T13:50:07.646957",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"def reduce_mem_usage(df: pd.DataFrame) -> pd.DataFrame:\n",
" \"\"\"Iterate through all the columns of a dataframe and modify the data type\n",
" to reduce memory usage\"\"\"\n",
" \n",
" start_mem = df.memory_usage().sum() / 1024**2\n",
" print('Memory usage of DataFrame is {:.2f} MB'.format(start_mem))\n",
" \n",
" for col in df.columns:\n",
" col_type = df[col].dtype\n",
" \n",
" if col_type != object:\n",
" c_min = df[col].min()\n",
" c_max = df[col].max()\n",
" if str(col_type)[:3] == 'int':\n",
" if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n",
" df[col] = df[col].astype(np.int8)\n",
" elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n",
" df[col] = df[col].astype(np.int16)\n",
" elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n",
" df[col] = df[col].astype(np.int32)\n",
" elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n",
" df[col] = df[col].astype(np.int64) \n",
" else:\n",
" if c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n",
" df[col] = df[col].astype(np.float32)\n",
" else:\n",
" df[col] = df[col].astype(np.float64)\n",
" else:\n",
" df[col] = df[col].astype('category')\n",
"\n",
" end_mem = df.memory_usage().sum() / 1024**2\n",
" print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))\n",
" print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))\n",
" \n",
" return df"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 9,
2022-11-14 12:40:38 -08:00
"id": "dddb9771",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:07.736125Z",
"iopub.status.busy": "2022-08-28T13:50:07.735629Z",
"iopub.status.idle": "2022-08-28T13:50:07.767871Z",
"shell.execute_reply": "2022-08-28T13:50:07.765951Z"
},
"papermill": {
"duration": 0.059641,
"end_time": "2022-08-28T13:50:07.770647",
"exception": false,
"start_time": "2022-08-28T13:50:07.711006",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Memory usage of DataFrame is 0.50 MB\n",
"Memory usage after optimization is: 0.11 MB\n",
"Decreased by 78.0%\n"
]
}
],
"source": [
"df = reduce_mem_usage(df)"
]
},
{
"cell_type": "markdown",
"id": "d8c840c5",
"metadata": {
"papermill": {
"duration": 0.022941,
"end_time": "2022-08-28T13:50:07.816120",
"exception": false,
"start_time": "2022-08-28T13:50:07.793179",
"status": "completed"
},
"tags": []
},
"source": [
2022-11-30 16:06:03 -08:00
"## 3.1) Feature generation"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 10,
2022-11-14 12:40:38 -08:00
"id": "66231ffd",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:07.866854Z",
"iopub.status.busy": "2022-08-28T13:50:07.865910Z",
"iopub.status.idle": "2022-08-28T13:50:07.875389Z",
"shell.execute_reply": "2022-08-28T13:50:07.874066Z"
},
"papermill": {
"duration": 0.038343,
"end_time": "2022-08-28T13:50:07.878640",
"exception": false,
"start_time": "2022-08-28T13:50:07.840297",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
2022-11-30 16:06:03 -08:00
"# Age of the Customer\n",
2022-12-04 16:00:27 -08:00
"df['Age'] = datetime.now().year - df['Year_Birth']\n",
"df['Dt_Customer'] = pd.to_datetime(df.Dt_Customer)"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 11,
2022-11-14 12:40:38 -08:00
"id": "6d70dd7b",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:07.927656Z",
"iopub.status.busy": "2022-08-28T13:50:07.927187Z",
"iopub.status.idle": "2022-08-28T13:50:07.955447Z",
"shell.execute_reply": "2022-08-28T13:50:07.954213Z"
},
"papermill": {
"duration": 0.056185,
"end_time": "2022-08-28T13:50:07.958468",
"exception": false,
"start_time": "2022-08-28T13:50:07.902283",
"status": "completed"
},
"tags": []
},
2022-12-04 16:00:27 -08:00
"outputs": [],
2022-11-14 12:40:38 -08:00
"source": [
"def get_different_year():\n",
" registration_year = pd.to_datetime(df['Dt_Customer'], format='%d-%m-%Y').apply(lambda x: x.year)\n",
" current_year = datetime.now().year\n",
" return current_year - registration_year\n",
"\n",
2022-11-30 16:06:03 -08:00
"df['Years_Since_Registration'] = get_different_year()"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 12,
2022-11-14 12:40:38 -08:00
"id": "1add1b3f",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:08.005426Z",
"iopub.status.busy": "2022-08-28T13:50:08.004545Z",
"iopub.status.idle": "2022-08-28T13:50:08.016059Z",
"shell.execute_reply": "2022-08-28T13:50:08.015005Z"
},
"papermill": {
"duration": 0.037797,
"end_time": "2022-08-28T13:50:08.018592",
"exception": false,
"start_time": "2022-08-28T13:50:07.980795",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"df[\"Education\"] = df[\"Education\"].replace({\"Basic\": 0, \"Graduation\": 1, \"2n Cycle\": 2, \"Master\": 2, \"PhD\": 3})\n",
"# Encoded in numbers in order"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 13,
2022-11-14 12:40:38 -08:00
"id": "1e356ea5",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:08.066519Z",
"iopub.status.busy": "2022-08-28T13:50:08.065713Z",
"iopub.status.idle": "2022-08-28T13:50:08.081091Z",
"shell.execute_reply": "2022-08-28T13:50:08.079966Z"
},
"papermill": {
"duration": 0.043231,
"end_time": "2022-08-28T13:50:08.083904",
"exception": false,
"start_time": "2022-08-28T13:50:08.040673",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"df['Marital_Status'] = df[\"Marital_Status\"].replace({\"Married\":\"Partner\", \"Together\":\"Partner\", \"Absurd\":\"Alone\",\n",
" \"Widow\":\"Alone\", \"YOLO\":\"Alone\", \"Divorced\":\"Alone\", \"Single\":\"Alone\"})\n",
"\n",
"step_2 = df['Marital_Status'].replace({'Alone': 1, 'Partner': 2})\n",
"\n",
2022-12-04 16:00:27 -08:00
"df[\"Family_Size\"] = df['Marital_Status'].replace({'Alone': 1, 'Partner': 2}).astype(np.int8) + df['Kidhome'].astype(np.int8) + df['Teenhome'].astype(np.int8) # Total number of people in the family\n",
2022-11-14 12:40:38 -08:00
"\n",
"df = pd.concat([df, pd.get_dummies(df['Marital_Status'])], axis=1) # Separate features for Alone and Partner"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 14,
2022-11-14 12:40:38 -08:00
"id": "ac685e10",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:08.131079Z",
"iopub.status.busy": "2022-08-28T13:50:08.130324Z",
"iopub.status.idle": "2022-08-28T13:50:08.139672Z",
"shell.execute_reply": "2022-08-28T13:50:08.138374Z"
},
"papermill": {
"duration": 0.036065,
"end_time": "2022-08-28T13:50:08.142371",
"exception": false,
"start_time": "2022-08-28T13:50:08.106306",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"mnt_cols = ['MntWines', 'MntFruits', 'MntMeatProducts', 'MntFishProducts', 'MntSweetProducts', 'MntGoldProds']\n",
"df['Sum_Mnt'] = df[mnt_cols].sum(axis=1) # Total amount spent on products"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 15,
2022-11-14 12:40:38 -08:00
"id": "bf8e3514",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:08.190191Z",
"iopub.status.busy": "2022-08-28T13:50:08.189415Z",
"iopub.status.idle": "2022-08-28T13:50:08.198065Z",
"shell.execute_reply": "2022-08-28T13:50:08.197120Z"
},
"papermill": {
"duration": 0.035303,
"end_time": "2022-08-28T13:50:08.200563",
"exception": false,
"start_time": "2022-08-28T13:50:08.165260",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"accepted_cmp_cols = ['AcceptedCmp1', 'AcceptedCmp2', 'AcceptedCmp3', 'AcceptedCmp4', 'AcceptedCmp5',\n",
" 'Response']\n",
"df['Num_Accepted_Cmp'] = df[accepted_cmp_cols].sum(axis=1) \n",
"# Number of companies in which the client accepted the offer"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 16,
2022-11-14 12:40:38 -08:00
"id": "bdf8dac4",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:08.247275Z",
"iopub.status.busy": "2022-08-28T13:50:08.246531Z",
"iopub.status.idle": "2022-08-28T13:50:08.255458Z",
"shell.execute_reply": "2022-08-28T13:50:08.254344Z"
},
"papermill": {
"duration": 0.035527,
"end_time": "2022-08-28T13:50:08.258183",
"exception": false,
"start_time": "2022-08-28T13:50:08.222656",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"total_purchases = ['NumWebPurchases', 'NumCatalogPurchases', 'NumStorePurchases']\n",
"df['Num_Total_Purchases'] = df[total_purchases].sum(axis=1) # Total number of purchases"
]
},
{
"cell_type": "markdown",
"id": "d8ef8896",
"metadata": {
"papermill": {
"duration": 0.0219,
"end_time": "2022-08-28T13:50:08.302246",
"exception": false,
"start_time": "2022-08-28T13:50:08.280346",
"status": "completed"
},
"tags": []
},
"source": [
"# Let's look at EDA:\n",
"______________________________________________________________________________________________________________"
]
},
{
"cell_type": "markdown",
"id": "40e210cd",
"metadata": {
"papermill": {
"duration": 0.021869,
"end_time": "2022-08-28T13:50:08.346271",
"exception": false,
"start_time": "2022-08-28T13:50:08.324402",
"status": "completed"
},
"tags": []
},
"source": [
"## First, let's look at the correlation matrix:"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 17,
2022-11-14 12:40:38 -08:00
"id": "94fe9d5c",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:08.393693Z",
"iopub.status.busy": "2022-08-28T13:50:08.392815Z",
"iopub.status.idle": "2022-08-28T13:50:10.957802Z",
"shell.execute_reply": "2022-08-28T13:50:10.956231Z"
},
"papermill": {
"duration": 2.594148,
"end_time": "2022-08-28T13:50:10.962906",
"exception": false,
"start_time": "2022-08-28T13:50:08.368758",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x1400 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
2022-12-04 16:00:27 -08:00
"metadata": {},
2022-11-14 12:40:38 -08:00
"output_type": "display_data"
}
],
"source": [
"to_corr = ['Age', 'Income', 'Kidhome', 'Teenhome', 'Recency', 'Complain', \n",
" 'MntWines', 'MntFruits', 'MntMeatProducts', 'MntFishProducts', 'MntSweetProducts', \n",
" 'MntGoldProds', 'NumDealsPurchases', 'AcceptedCmp1', 'AcceptedCmp2', 'AcceptedCmp3', \n",
" 'AcceptedCmp4', 'AcceptedCmp5', 'Response', 'NumWebPurchases', 'NumCatalogPurchases', \n",
" 'NumStorePurchases', 'NumWebVisitsMonth', 'Years_Since_Registration', 'Family_Size',\n",
" 'Sum_Mnt', 'Num_Accepted_Cmp', 'Num_Total_Purchases', 'Alone', 'Partner']\n",
"\n",
"cmap = sns.diverging_palette(220, 10, as_cmap=True)\n",
"matrix = np.triu(df[to_corr].corr())\n",
"plt.figure(figsize=(25, 14))\n",
"plt.title('Correlation matrix', fontsize=18)\n",
"sns.heatmap(df[to_corr].corr(), annot=True,\n",
" fmt='.1f', vmin=-0.4, center=0, cmap=cmap, mask=matrix)\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "90faf051",
"metadata": {
"papermill": {
"duration": 0.026543,
"end_time": "2022-08-28T13:50:11.019982",
"exception": false,
"start_time": "2022-08-28T13:50:10.993439",
"status": "completed"
},
"tags": []
},
"source": [
"## Next, look at the distributions of quantitative variables:"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 18,
2022-11-14 12:40:38 -08:00
"id": "2116d718",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:11.074918Z",
"iopub.status.busy": "2022-08-28T13:50:11.074100Z",
"iopub.status.idle": "2022-08-28T13:50:23.869035Z",
"shell.execute_reply": "2022-08-28T13:50:23.867626Z"
},
"papermill": {
"duration": 12.833249,
"end_time": "2022-08-28T13:50:23.878991",
"exception": false,
"start_time": "2022-08-28T13:50:11.045742",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 1610.61x1500 with 42 Axes>"
2022-11-14 12:40:38 -08:00
]
},
2022-12-04 16:00:27 -08:00
"metadata": {},
2022-11-14 12:40:38 -08:00
"output_type": "display_data"
}
],
"source": [
"to_plot = ['Income', 'Recency', 'Age', 'Years_Since_Registration', 'Sum_Mnt',\n",
" 'Num_Total_Purchases', 'Marital_Status']\n",
"sns.pairplot(df[to_plot], hue='Marital_Status', palette='Set1')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "301760a7",
"metadata": {
"papermill": {
"duration": 0.037934,
"end_time": "2022-08-28T13:50:23.956788",
"exception": false,
"start_time": "2022-08-28T13:50:23.918854",
"status": "completed"
},
"tags": []
},
"source": [
2022-11-30 16:06:03 -08:00
"## 3.2) Data cleaning"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "markdown",
"id": "becb2250",
"metadata": {
"papermill": {
"duration": 0.0365,
"end_time": "2022-08-28T13:50:24.030576",
"exception": false,
"start_time": "2022-08-28T13:50:23.994076",
"status": "completed"
},
"tags": []
},
"source": [
"## Remove gaps in the data:"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 19,
2022-11-14 12:40:38 -08:00
"id": "e85427d0",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:24.107029Z",
"iopub.status.busy": "2022-08-28T13:50:24.106545Z",
"iopub.status.idle": "2022-08-28T13:50:24.119539Z",
"shell.execute_reply": "2022-08-28T13:50:24.118496Z"
},
"papermill": {
"duration": 0.053881,
"end_time": "2022-08-28T13:50:24.121797",
"exception": false,
"start_time": "2022-08-28T13:50:24.067916",
"status": "completed"
},
2022-11-30 16:06:03 -08:00
"scrolled": true,
2022-11-14 12:40:38 -08:00
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"ID 0\n",
"Year_Birth 0\n",
"Education 0\n",
"Marital_Status 0\n",
"Income 24\n",
"Kidhome 0\n",
"Teenhome 0\n",
"Dt_Customer 0\n",
"Recency 0\n",
"MntWines 0\n",
"MntFruits 0\n",
"MntMeatProducts 0\n",
"MntFishProducts 0\n",
"MntSweetProducts 0\n",
"MntGoldProds 0\n",
"NumDealsPurchases 0\n",
"NumWebPurchases 0\n",
"NumCatalogPurchases 0\n",
"NumStorePurchases 0\n",
"NumWebVisitsMonth 0\n",
"AcceptedCmp3 0\n",
"AcceptedCmp4 0\n",
"AcceptedCmp5 0\n",
"AcceptedCmp1 0\n",
"AcceptedCmp2 0\n",
"Complain 0\n",
"Z_CostContact 0\n",
"Z_Revenue 0\n",
"Response 0\n",
"Age 0\n",
"Years_Since_Registration 0\n",
"Family_Size 0\n",
"Alone 0\n",
"Partner 0\n",
"Sum_Mnt 0\n",
"Num_Accepted_Cmp 0\n",
"Num_Total_Purchases 0\n",
"dtype: int64"
]
},
2022-12-04 16:00:27 -08:00
"execution_count": 19,
2022-11-14 12:40:38 -08:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isna().sum()"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 20,
2022-11-14 12:40:38 -08:00
"id": "5a689bb4",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:24.197184Z",
"iopub.status.busy": "2022-08-28T13:50:24.195980Z",
"iopub.status.idle": "2022-08-28T13:50:24.205508Z",
"shell.execute_reply": "2022-08-28T13:50:24.204269Z"
},
"papermill": {
"duration": 0.051032,
"end_time": "2022-08-28T13:50:24.208553",
"exception": false,
"start_time": "2022-08-28T13:50:24.157521",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"df.dropna(inplace=True) # Removed objects with gaps in income"
]
},
{
"cell_type": "markdown",
"id": "cc804158",
"metadata": {
"papermill": {
"duration": 0.036219,
"end_time": "2022-08-28T13:50:24.280612",
"exception": false,
"start_time": "2022-08-28T13:50:24.244393",
"status": "completed"
},
"tags": []
},
"source": [
"## Remove outliers in the data:"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 21,
2022-11-14 12:40:38 -08:00
"id": "21982d02",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:24.357434Z",
"iopub.status.busy": "2022-08-28T13:50:24.356548Z",
"iopub.status.idle": "2022-08-28T13:50:24.370733Z",
"shell.execute_reply": "2022-08-28T13:50:24.369666Z"
},
"papermill": {
"duration": 0.05638,
"end_time": "2022-08-28T13:50:24.373367",
"exception": false,
"start_time": "2022-08-28T13:50:24.316987",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"def remove_outliers(data: pd.DataFrame, column: str) -> pd.Series:\n",
" q3, q1 = np.nanpercentile(data[column], [75, 25])\n",
" iqr = q3 - q1\n",
" upper_bound = q3 + 1.5 * iqr\n",
" lower_bound = q1 - 1.5 * iqr\n",
" data = data[(data[column] > lower_bound) & (data[column] < upper_bound)]\n",
"\n",
" return data\n",
"\n",
"df = remove_outliers(df, 'Age')\n",
"df = remove_outliers(df, 'Income')"
]
},
{
"cell_type": "markdown",
"id": "bdddf64e",
"metadata": {
"papermill": {
"duration": 0.035761,
"end_time": "2022-08-28T13:50:24.445017",
"exception": false,
"start_time": "2022-08-28T13:50:24.409256",
"status": "completed"
},
"tags": []
},
"source": [
"## Remove unnecessary features:"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 22,
2022-11-14 12:40:38 -08:00
"id": "fe757220",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:24.518855Z",
"iopub.status.busy": "2022-08-28T13:50:24.518398Z",
"iopub.status.idle": "2022-08-28T13:50:24.526627Z",
"shell.execute_reply": "2022-08-28T13:50:24.525500Z"
},
"papermill": {
"duration": 0.048269,
"end_time": "2022-08-28T13:50:24.529075",
"exception": false,
"start_time": "2022-08-28T13:50:24.480806",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"df.drop(['Year_Birth', 'ID', 'Z_CostContact', 'Z_Revenue', 'Dt_Customer', 'Marital_Status'], axis=1, inplace=True)"
]
},
{
"cell_type": "markdown",
"id": "2a8eda0c",
"metadata": {
"papermill": {
"duration": 0.03541,
"end_time": "2022-08-28T13:50:24.600872",
"exception": false,
"start_time": "2022-08-28T13:50:24.565462",
"status": "completed"
},
"tags": []
},
"source": [
2022-11-30 16:06:03 -08:00
"## 3.3) Data scaling (Normalization | Standardization)"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 23,
2022-11-14 12:40:38 -08:00
"id": "95d6b516",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:24.748441Z",
"iopub.status.busy": "2022-08-28T13:50:24.747424Z",
"iopub.status.idle": "2022-08-28T13:50:24.760373Z",
"shell.execute_reply": "2022-08-28T13:50:24.759307Z"
},
"papermill": {
"duration": 0.055109,
"end_time": "2022-08-28T13:50:24.763522",
"exception": false,
"start_time": "2022-08-28T13:50:24.708413",
"status": "completed"
},
"tags": []
},
2022-12-04 16:00:27 -08:00
"outputs": [],
2022-11-14 12:40:38 -08:00
"source": [
"def scaling_func(df: pd.DataFrame) -> None:\n",
" mms = MinMaxScaler()\n",
" return pd.DataFrame(data=mms.fit_transform(df), columns=df.columns)\n",
"\n",
"\n",
"df_scaled = scaling_func(df)\n",
2022-11-30 16:06:03 -08:00
"# to ensure\n",
"df_scaled.index = df.index "
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "markdown",
"id": "238ce006",
"metadata": {
"papermill": {
"duration": 0.036003,
"end_time": "2022-08-28T13:50:24.835891",
"exception": false,
"start_time": "2022-08-28T13:50:24.799888",
"status": "completed"
},
"tags": []
},
"source": [
2022-11-30 16:06:03 -08:00
"## 4) Dimensionality reduction"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 24,
2022-11-14 12:40:38 -08:00
"id": "6c8a817f",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:24.986241Z",
"iopub.status.busy": "2022-08-28T13:50:24.985289Z",
"iopub.status.idle": "2022-08-28T13:50:25.127909Z",
"shell.execute_reply": "2022-08-28T13:50:25.126448Z"
},
"papermill": {
"duration": 0.189403,
"end_time": "2022-08-28T13:50:25.134659",
"exception": false,
"start_time": "2022-08-28T13:50:24.945256",
"status": "completed"
},
"tags": []
},
2022-12-04 16:00:27 -08:00
"outputs": [],
2022-11-14 12:40:38 -08:00
"source": [
"def dim_reduction(data: pd.DataFrame) -> pd.DataFrame:\n",
" n_components = 8\n",
" pca = PCA(n_components=n_components, random_state=42)\n",
" data = pd.DataFrame(pca.fit_transform(data), columns =([f'PC{i}' for i in range(1, n_components + 1)]))\n",
" return data\n",
"\n",
2022-11-30 16:06:03 -08:00
"# df: scaling + dimensionality reduction\n",
"df_transform = dim_reduction(df_scaled) \n",
"df_transform.index = df_scaled.index "
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "markdown",
"id": "811f7208",
"metadata": {
"papermill": {
"duration": 0.036946,
"end_time": "2022-08-28T13:50:25.291626",
"exception": false,
"start_time": "2022-08-28T13:50:25.254680",
"status": "completed"
},
"tags": []
},
"source": [
"<div style=\"padding:25px;color:white;margin:0;font-size:250%;text-align:center;display:fill;border-radius:10px;background-color:#298f50;overflow:hidden;font-weight:500;font-family:magra\">5) Clustering</div>"
]
},
{
"cell_type": "markdown",
"id": "35bdc8bd",
"metadata": {
"papermill": {
"duration": 0.03694,
"end_time": "2022-08-28T13:50:25.439167",
"exception": false,
"start_time": "2022-08-28T13:50:25.402227",
"status": "completed"
},
"tags": []
},
"source": [
"In this work, the following clustering algorithms will be used: (https://scikit-learn.org/stable/modules/clustering.html)\n",
"* K-means ++ \n",
"* Aglomerative clustering\n",
"* Spectral clustering\n",
"\n",
"\n",
"It is noteworthy that in these algorithms it is necessary to pre-specify the number of clusters. \n",
"We assume that the minimum number of clusters is two, the maximum number of clusters is eight. Based on this, for different cases of the number of clusters, we will build models. \n",
"If the metric is maximum for models with a large number of clusters, then we will iteratively increase the maximum number of clusters and build new models.\n"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 25,
2022-11-14 12:40:38 -08:00
"id": "7f355417",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:50:25.515926Z",
"iopub.status.busy": "2022-08-28T13:50:25.515437Z",
"iopub.status.idle": "2022-08-28T13:52:29.397837Z",
"shell.execute_reply": "2022-08-28T13:52:29.396253Z"
},
"papermill": {
"duration": 123.925892,
"end_time": "2022-08-28T13:52:29.401999",
"exception": false,
"start_time": "2022-08-28T13:50:25.476107",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACg8klEQVR4nOzdd5wU5f0H8M/Si4AiKvYuYkdjj11jQewajVGMGrsm1p8liSXGHktijUYRu2iIikajUUjsWKMosUdULFjonf39gbe5gwOO42CvvN+v172Y3Zmd/e7O7LIzn3mep1AsFosBAAAAAAAAANKs3AUAAAAAAAAAQH0hRAcAAAAAAACA7wnRAQAAAAAAAOB7QnQAAAAAAAAA+J4QHQAAAAAAAAC+J0QHAAAAAAAAgO8J0QEAAAAAAADge0J0AAAAAAAAAPieEB0AAAAAAAAAvidEB5jPpkyZkhtvvDHbbLNNunTpklatWmWppZbKXnvtlX/84x8zLX/IIYekUCikUCjkk08+WWB1Tpo0Ke+8884Ce765VfGebL/99mWr4dlnn02zZs2y++67z/VjBw4cWHoN559//nyobu716dOnVNPtt98+0/w333xzrpavDz766KNSjYcffvhM859//vm0b9++tMxxxx2XpOr2qfj77LPPqjz2448/nmmZgQMHLoiXVee++uqrtG7dOmuuuWYmTZpU7nIAAKhHJk2alD59+uTHP/5xNtpoo6y55prZdNNNc9hhh+WRRx6ZafmDDjoo3bp1yxprrFG674UXXki3bt3SrVu3XHvttbNdtiGZNm1a3nvvvWrnffrppxk7duwCrqiqbbfdNt26dcsOO+wwz+v65ptvMmLEiBotO3jw4Oy3335Zd911s/766+eAAw5IsVic5xrmxSGHHFLaByv85S9/Kd33wAMPVFn+rrvuyo477pi11lorm2yySS688MIkyfDhw3Psscdmgw02yDrrrJNddtkl77///gJ9LfNqfuybFe/jIYccUqfrnZP68Dmbk2HDhmWdddbJbrvtNteP/eSTT0rv7VlnnTUfqpt7s/o+rzDjucQ5LV9fzG4f/vjjj7P55puXljnmmGMyZcqUKtun4u/VV1+t8thJkyZl3XXXrbLMX/7ylwX0qurWpEmTsvnmm2ezzTbLyJEjy10OlIUQHWA+Gj58eDbZZJMcccQRGThwYL7++utMnjw5w4cPT//+/bP99tvn1FNPLXeZuffee9O9e/fceeed5S6l3po6dWqOOeaYFIvFHHvsseUuZ7565513stdee6VXr17lLqVOvf3229l1110zbty4JMnPfvaz/PGPf5zl8k888USV29Vd9NJQLbbYYtl3333z1ltv5ZJLLil3OQAA1BMTJkzIwQcfnAsvvDCvvfZaRo4cmSlTpuSbb77J008/nRNPPDFnn312ucssi2eeeSZ77bVXbrrppir3jxw5MhdffHF22mmnfPvtt2Wqru5MmDAh119/fXbYYYcahcXjx4/PUUcdlddffz0TJkzI2LFjM3r06BQKhQVQbd14+eWXc8455+Sjjz7K5MmT8+2332by5MlJkjPPPDNPPPFExowZk4kTJ+b999/PIossUuaKa6Yx7ZsN6bX87ne/y8SJE3PggQeWu5T56osvvsiZZ55Zq4Ym9dlXX32VQw89tHQR0Q9/+MNceeWVadGiRbXLP/PMM1Vuv/LKK5kwYcJ8r3NBaNWqVfbZZ598/fXXzh3RZFX/yQdgnk2aNCm77bZbXn755STJEUcckcMPPzwdOnTIk08+mTPPPDMjR47MZZddlh/84Af58Y9/XJY6n3nmmbI999wYNmxYkqRNmzZlef77778/r7/+elZeeeU6uaq/Pthvv/1KLfs7d+5cur9nz5557733svzyy5ertDo3bNiw7Ljjjvn666+TJAcccEBuuumm2Z7YeeKJJ3LwwQeXbjemED1Jjj766Nxxxx258MILc8wxx1TZBwAAaJruvvvuUqu6vfbaKwcccEA6deqUd999N+eff36GDx+eu+++O7169coPfvCDJMlVV12VSZMmNajQdG598cUXOfTQQ5Mkq6++epV5l156afr161eOsuaLW265JVdeeWWNl3/vvfcyZsyYJMkWW2yRX//615k2bdp8qm7e7Lzzztlss82SJJ06dSrd/9prr5WmjznmmOy+++5p27ZtlXmLLbZYbr755kydOrXBHDs1pn2zobyWf//733nqqafSvn37RtMwoUePHhk0aFCSZKGFFirdf/rpp+fZZ58tV1nzxejRo3P44YeXzkFutNFGueaaa9KqVatZPua5554r9XJYcbsx2X///fOnP/0p999/fw499NCsvPLK5S4JFigt0QHmkz59+uSll15Kkpx44om54YYbsuGGG2b11VfPMccck7vuuqu07M0331yuMsvexVpNLbPMMllmmWXSpUuXsjz/ZZddliTZd999G83JoXbt2pXe13bt2pXubyj7RE1988032XHHHUsHQXvssUf69u2bZs2q/xm0wgorJJk5NH/yySeTJCuuuOL8K3YB2myzzbLUUktl3Lhx+dOf/lTucgAAqAeef/750vSvf/3rrLPOOll++eWz/fbb5//+7/9K8yqHBJ07d07Xrl2zxBJLLNBaF6TZHSM1tuOnuX0948ePL0336NEjyy+/fL09Zmrbtm26du2arl27lkLypOpr2HzzzbPCCiuU9ueKnsxWXnnlrLbaaunevfuCLXoeNKZ9s6G8lj//+c9Jkq233rrKeZaGrFWrVqXPTeUQvaFsk5qaOHFijjnmmAwdOjRJst566+X666+fZWOepZdeOkny+uuvVxlioOL/0WWWWWY+V7xgLLnkkll33XVTLBZz6623lrscWOCE6ADzScUPi2bNmuWMM86Yaf7OO++cW2+9NW+99VYee+yx2a5rduM8z2oM9eeeey69evXK4osvnhYtWqRjx47ZeOONc8stt5SW6dOnT7bYYovS7XPPPTeFQiF9+vQp3ffCCy+kZ8+eWXjhhdO2bdv06NEj11xzzUxXllfUcNJJJ+XEE09Mhw4d0rFjxyrPN6NPPvkkhx9+eJZffvm0atUqbdu2Tffu3XPWWWdl4sSJ1a6/ouV05fdkVn+Vx6uu6euozocffpjBgwcnmR7AVvbNN9/k5JNPzqqrrpr27dunffv2WXXVVXPSSSflu+++m+O6k2TQoEGlA6wuXbrkqKOOyqhRo0qv45xzzqmy/Oeff54TTzwxq666atq0aZNFF100vXr1Kl0ZXKHye3TppZfmpz/9adq2bZtFF100jz/+eLVjnBcKhVKXff/9739TKBSy9dZbV1v3Nddck27duqVNmzZZY401cv3111eZX7FvLrPMMvn000/zk5/8JAsvvHAWXnjh9O7dO99++23ef//97L333unQoUMWWWSR7Lfffhk+fHi165lxH6+JcePGpWfPnnn77beTJDvttFPuueeeWXbDlaT0ej/77LMMGTIkSfLWW2+V6prV+5Ekd9xxRzbccMO0a9cunTp1ynbbbZfHH398puVqut9UHqt9wIAB6du3b9Zdd920adMmyy23XH79619nypQpVdbdt2/fbL755unUqVNatGiRLl26ZKeddpqpi7FCoVAao02IDgBAkiqt7U477bS89dZbpds/+tGP8txzz+W5557LYYcdVrq/tuOcf/311znjjDOy0UYbpUePHjn88MNL4UVlX331VS644IL86Ec/ytprr52NN944Rx11VF588cWZlp3VGLd//OMfS/MqLnav8OCDD2bvvffOuuuumw022CC9e/eu8tv5hRdeyFZbbVW63b9//3Tr1i1//OMfc9BBB+W+++4rzdtuu+2qjME9bdq09O3bN7169apS+xtvvFGj96hijPMTTjgh//73v9O7d++st9562XTTTfOb3/ymxsecSfLoo4/mkEMOycYbb5y11147u+yyS6666qpSK/JkesvSq666qnT74IMPTrdu3WZ5HHbQQQfloIMOKt3+wx/+MNP4v2+++WZOPvnkbLHFFllrrbWy1VZb5ayzzipd5Fy
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
2022-12-04 16:00:27 -08:00
"metadata": {},
2022-11-14 12:40:38 -08:00
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACeDElEQVR4nOzdd5hcZf034M+kN3ogIII06SQE+BHpTUB6lN4VEJAi0kFEuoCoFFGqMXSQ0CGA1ChNivQWIAQJNaElpCc77x9h590lm2R3s7szu3vf17VXZmfOnPmeec5O5jyf8zynUCwWiwEAAAAAAAAA0qHcBQAAAAAAAABApRCiAwAAAAAAAMA3hOgAAAAAAAAA8A0hOgAAAAAAAAB8Q4gOAAAAAAAAAN8QogMAAAAAAADAN4ToAAAAAAAAAPANIToAAAAAAAAAfEOIDgAAAAAAAADfEKIDNLNp06blH//4R/bee+8MGDAgq666atZff/0cdthhefLJJ2da/oQTTsgKK6yQFVZYIR9//HGL1TllypS8++67LfZ6DVX9nvz0pz8tWw3//e9/s+KKK+YXv/hFg5/7n//8p7QNf/3rX5uhuoa79dZbSzXdcccdMz0+fPjwBi1fCUaNGlWq8aSTTprp8RdeeCGrr756aZnTTz89Se32qf755JNPaj33ww8/nGmZ//znPy2yXU3t888/z6qrrpptttkmU6ZMKXc5AABUkClTpmTw4MHZdddds/baa2eVVVbJOuusk/333z9Dhw6dafm99947K6ywQlZeeeXSfbM6/qlr2dakqqoqb7/9dp2PffDBBxk/fnwLV1TbpptumhVWWCGbb775XK/r888/z5gxY+q17DPPPJNddtkl/fr1yxprrJHdd989xWJxrmuYGz/96U9L+2C12R3T3nDDDdlyyy2z6qqr5gc/+EHOPvvsJMlHH32UQw89NGuuuWb69u2brbfeOu+8806Lbsvcao59s1x9NJXwdzYn77//fvr27Zvtt9++wc+dU59GOcypP+vbfUeV2P9Vl9ntw//73/+y3nrrlZY55JBDMm3atFrtU/3z/PPP13rulClT0q9fv1rL3HrrrS20VU1rypQpWW+99bLuuuvmq6++Knc5UBZCdIBm9Omnn2aXXXbJySefnKeffjpffvllpk6dmtGjR+eBBx7IT3/605x77rnlLjNDhw7N1ltvnbvvvrvcpVSs6dOn57TTTkuxWMyee+5Z7nKa1bvvvpvDDjssBx98cLlLaVLvvPNODjrooEycODFJ8pOf/CQnn3zyLJf/9kkudZ300lotuOCC+dGPfpS33347V155ZbnLAQCgQkyaNCn77LNPzj777Lzwwgv56quvMm3atHz++ed57LHHcuSRR+aUU04pd5ll8fjjj+cnP/nJTN+fv/rqq5x77rn50Y9+lC+++KJM1TWdSZMm5dJLL83mm29er7B44sSJOfjgg/Piiy9m0qRJGT9+fMaNG5dCodAC1TaN5557LqeeempGjhyZqVOn5osvvsjUqVOTJL/+9a/z4IMP5uuvv87kyZPzzjvvZIEFFihzxfXTlvbN1rQtZ511ViZPntzm+44++eST/PrXv84OO+xQ7lKa1OjRo7PffvuVTiJaf/31c8EFF6RTp051Lv/444/X+v2///1vJk2a1Ox1toQuXbpkp512ymeffZbf//735S4HyqLuv3wA5tqUKVPyi1/8Iq+++mqSZNddd81OO+2Unj175qmnnsr555+fcePGZdCgQVlttdWy9dZbl6XO5557LkceeWRZXrshhg0blmTGF7hyuP/++/PGG29kySWXzHrrrVeWGpraVlttlXXXXTdJMt9885XuP+igg/Lee+9l8cUXL1dpTe6jjz7K/vvvny+//DJJsu222+ass86abcfOE088kYEDB5Z+b0shepLsvvvuueuuu3L55Zdnjz32yPzzz1/ukgAAKLMbb7yxNKruJz/5SXbffffMN998eeutt3LmmWfmo48+yo033pjtttsua621VpLkwgsvzJQpU1pVaNpQn3zySfbbb78kyYorrljrsfPOOy8333xzOcpqFn//+99zwQUX1Hv5t99+O19//XWSZIMNNsjJJ5+cqqqqZqpu7szqGPiFF14o3T7kkEOyww47pHv37rUeW3jhhTNo0KBMnz49Cy64YIvVPDfa0r7ZWrblpZdeyiOPPJKePXtmu+22K3c5TaJ///6lPrlevXqV7j/hhBPyxBNPlKusZjFu3LgccMABef/995Mka6+9dv7yl7/Mti/yySefzGGHHVbr97Zkt912y+WXX55bbrkl++23X5ZddtlylwQtSogO0Exuu+22vPLKK0lmTCN24oknlh5bdtll893vfjcHHnhgkuSWW24pW4he7inW6mvRRRct6+sPGjQoSfKjH/2ozXQOde/evdQxUFNr2Sfq68svv8z++++fjz76KEnywx/+MOeee246dKh7Qp7FF188H3zwwUwHPk899VSS5Lvf/W5GjRrVvEW3gDXWWCOLLLJIPv300/zjH/8ofR4BANB+VX/nTZKTTz45PXr0SJJ873vfy9SpU/OrX/0qyYyQoDpEby2B4tyY3TFSWzt+auj2VM/0lcwI2773ve81dUlNZlbHwDW3Yb311stSSy1V+n3ChAlJZvTjLL/88s1eY1NqS/tma9mWv/3tb0mSjTfeuPT52dp16dKlzj651tIm9TV58uQccsgheeONN5Ikq6++ei699NJ069atzuWr+45efPHFjB8/Pj179kzS9vqOFltssfTr1y/PP/98rrrqqtJlEaG9MJ07QDO57bbbkiQdOnTIQQcdNNPjG220Uc4999wMHTq09CV7VmZ3TaRZXUP9+eefz8EHH5x11lknK6+8ctZYY43svPPOueWWW0rL3HrrrbWml7r44otnulbPiy++mAMPPDBrrbVW+vbtm4EDB+a6666b6czy6hrOPvvs/O53v0v//v2zxhpr1Hq9b/v4449z0kknZZNNNsmqq66avn37Zquttsr5558/03Wav32torquQzS761XXdzvq8v777+fll19OMiOArenLL7/MOeecky222CKrr756Vl999WyxxRY5++yzM3bs2DmuO0mefvrp7L333unXr18GDBiQ3/72t/n6669L2/HnP/+51vKjR4/O7373u2yxxRZZbbXVMmDAgBx88MF5+umnay1X8z268sorc8wxx6Rv374ZMGBAHn/88TqvB7fCCivkf//7X5IZ1xpbYYUVsvfee9dZ93XXXZctt9yyNJPCDTfcUOvx6n1zww03zCeffJKjjz46a621VtZaa60cf/zx+eqrr/K///0vhx9+ePr375//+7//yxFHHJFPP/20zvV8ex+vj4kTJ+aggw4qTUO4wQYb5Pzzz5/lNFxJMmDAgCQzLsfw1ltvJZkxumL06NFJZpyJPCt33nlndtxxx/Tr1y9rrrlm9t1335mm9krqv9/UvJbYI488kttvvz3bb799VltttWy88ca54IILMm3atFrrvv3227PbbrtlzTXXzMorr5wBAwZk//33z3PPPVdruUKhkE033TRJctNNN81ymwAAaD9qjrY77rjj8tprr5V+32KLLfLkk0/mySefzP7771+6v7HXOf/ss89y4oknZu21107//v1zwAEHlMKLmup7/JPM+hq3f/7zn0uPPfvss7Uem9N3+P/85z/ZaKONSr/fdtttpeO0vffeO0OGDCk9ttlmm9W6BndVVVWuvvrqbLfddrVqrz6+nJPqa5z/8pe/zEsvvZR99903q6++etZZZ5389re/Lc20VR/33XdffvrTn2bAgAGlY7gLL7ywNIo8mXHsdeGFF5Z+32effbLCCivMMgjae++9ax0vXnTRRTP1Kbzyyis5+uijs8EGG2TVVVfNRhttlJNOOqk00rNazePThx56KLvttltWXXXVbLzxxrPdzq+//jpnnXVWNthgg/Tt2ze77LJLrb6AWb1GzWPgmsfce+65Z1ZYYYXScWi1p556qnR/tX/961/Ze++9079///Tv3z+77bbbTJfJm9NxeZKMHTs
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjJUlEQVR4nOzdeZzd0/0/8NedbLJZQ6jaVawh+EpV7UVRpLUvESVFLVU7VbWUoout1NamsUvtW1CKtLVX7UoQUakgEWRfZO7vj5j7m5FJMpnM5N6ZeT4fjzzcufczn/v+3HPnup/z+pxzCsVisRgAAAAAAAAAIFXlLgAAAAAAAAAAKoUQHQAAAAAAAAC+JEQHAAAAAAAAgC8J0QEAAAAAAADgS0J0AAAAAAAAAPiSEB0AAAAAAAAAviREBwAAAAAAAIAvCdEBAAAAAAAA4EtCdAAAAAAAAAD4khAdoJl98cUX+ctf/pL+/funb9++WXfddfPtb387Rx11VJ566qnZtj/llFPSq1ev9OrVKx9++OFCq3P69Ol59913F9rzza+a1+Sggw4qWw3//ve/s+aaa+bHP/7xfP/uM888UzqGP/zhD81Q3fy74447SjXdfffdsz0+fPjw+dq+EowaNapU42mnnTbb4y+++GI22GCD0jZnn312krrtU/Pvo48+qvO7H3zwwWzbPPPMMwvluJrauHHjsu6662bnnXfO9OnTy10OAAAVZPr06Rk8eHD23nvvbLLJJllnnXWy6aab5pBDDsnQoUNn275///7p1atX1l577dJ9czr/qW/blqS6ujpvv/12vY/973//y6RJkxZyRXVts8026dWrV7bbbrsF3te4ceMyduzYBm373HPPZa+99sr666+fDTfcMPvuu2+KxeIC17AgDjrooNJ7sMbczmlvvvnm7LDDDll33XXzzW9+M+edd16SZPTo0TnyyCOz0UYbpXfv3tlpp53yzjvvLNRjWVDN8d4sVx9NJfydzcv777+f3r17Z9ddd53v351Xn0Y5zKs/66t9R5XY/1Wfub2H//vf/2azzTYrbXPEEUfkiy++qNM+Nf9eeOGFOr87ffr0rL/++nW2ueOOOxbSUTWt6dOnZ7PNNsu3vvWtfP755+UuB8pCiA7QjD7++OPstddeOf300/Pss8/ms88+y4wZMzJmzJg8/PDDOeigg3LBBReUu8wMHTo0O+20U+67775yl1KxZs6cmbPOOivFYjH7779/uctpVu+++26OOuqoHH744eUupUm98847OeywwzJlypQkyQ9+8IOcfvrpc9z+qxe51HfRS0u15JJL5rvf/W7efvvt/PGPfyx3OQAAVIipU6fmwAMPzHnnnZcXX3wxn3/+eb744ouMGzcu//znP3PsscfmjDPOKHeZZfHEE0/kBz/4wWzfnz///PNccMEF+e53v5tPP/20TNU1nalTp+bKK6/Mdttt16CweMqUKTn88MPz0ksvZerUqZk0aVImTJiQQqGwEKptGs8//3zOPPPMjBw5MjNmzMinn36aGTNmJEl+9rOf5ZFHHsnEiRMzbdq0vPPOO1liiSXKXHHDtKb3Zks6lnPPPTfTpk1r9X1HH330UX72s59lt912K3cpTWrMmDE5+OCDSxcRffvb387FF1+c9u3b17v9E088Uefnf//735k6dWqz17kwdOzYMXvssUc++eST/PrXvy53OVAW9f/lA7DApk+fnh//+Md57bXXkiR777139thjj3Tt2jVPP/10LrrookyYMCGDBg3Keuutl5122qksdT7//PM59thjy/Lc82PYsGFJZn2BK4eHHnoob7zxRlZcccVsttlmZamhqe2444751re+lSRZbLHFSvcfdthhee+997L88suXq7QmN3r06BxyyCH57LPPkiTf+973cu655861Y+fJJ59Mv379Sj+3phA9Sfbdd9/ce++9ufrqq7Pffvtl8cUXL3dJAACU2S233FIaVfeDH/wg++67bxZbbLG89dZbOeecczJ69Ojccsst2WWXXbLxxhsnSS655JJMnz69RYWm8+ujjz7KwQcfnCRZc8016zz2m9/8Jrfeems5ymoWf/7zn3PxxRc3ePu33347EydOTJJsvvnmOf3001NdXd1M1S2YOZ0Dv/jii6XbRxxxRHbbbbd07ty5zmNLL710Bg0alJkzZ2bJJZdcaDUviNb03mwpx/Lyyy/nscceS9euXbPLLruUu5wm0adPn1KfXLdu3Ur3n3LKKXnyySfLVVazmDBhQgYOHJj3338/SbLJJpvk8ssvn2tf5FNPPZWjjjqqzs+tyT777JOrr746t99+ew4++OCsttpq5S4JFiohOkAzufPOO/Pqq68mmTWN2Kmnnlp6bLXVVsvXv/71HHrooUmS22+/vWwhermnWGuoZZddtqzPP2jQoCTJd7/73VbTOdS5c+dSx0BtLeU90VCfffZZDjnkkIwePTpJ8p3vfCcXXHBBqqrqn5Bn+eWXz//+97/ZTnyefvrpJMnXv/71jBo1qnmLXgg23HDDLLPMMvn444/zl7/8pfR5BABA21XznTdJTj/99HTp0iVJstJKK2XGjBn56U9/mmRWSFAToreUQHFBzO0cqbWdP83v8dTM9JXMCttWWmmlpi6pyczpHLj2MWy22WZZeeWVSz9Pnjw5yax+nDXWWKPZa2xKrem92VKO5U9/+lOSZKuttip9frZ0HTt2rLdPrqW0SUNNmzYtRxxxRN54440kyQYbbJArr7wyiyyySL3b1/QdvfTSS5k0aVK6du2apPX1HS233HJZf/3188ILL+Taa68tLYsIbYXp3AGayZ133pkkqaqqymGHHTbb41tuuWUuuOCCDB06tPQle07mtibSnNZQf+GFF3L44Ydn0003zdprr50NN9wwe+65Z26//fbSNnfccUed6aUuu+yy2dbqeemll3LooYdm4403Tu/evdOvX7/ceOONs11ZXlPDeeedl1/96lfp06dPNtxwwzrP91UffvhhTjvttGy99dZZd91107t37+y444656KKLZlun+atrFdW3DtHc1qtu6HHU5/33388rr7ySZFYAW9tnn32W888/P9tvv3022GCDbLDBBtl+++1z3nnnZfz48fPcd5I8++yz6d+/f9Zff/307ds3v/jFLzJx4sTScfz+97+vs/2YMWPyq1/9Kttvv33WW2+99O3bN4cffnieffbZOtvVfo3++Mc/5oQTTkjv3r3Tt2/fPPHEE/WuB9erV6/897//TTJrrbFevXqlf//+9dZ94403ZocddijNpHDzzTfXebzmvbnFFlvko48+yvHHH5+NN944G2+8cU4++eR8/vnn+e9//5ujjz46ffr0yf/93//lmGOOyccff1zvfr76Hm+IKVOm5LDDDitNQ7j55pvnoosumuM0XEnSt2/fJLOWY3jrrbeSzBpdMWbMmCSzrkSek3vuuSe777571l9//Wy00UYZMGDAbFN7JQ1/39ReS+yxxx7LXXfdlV133TXrrbdettpqq1x88cX54osv6uz7rrvuyj777JONNtooa6+9dvr27ZtDDjkkzz//fJ3tCoVCttlmmyTJkCFD5nhMAAC0HbVH25100kl5/fXXSz9vv/32eeqpp/LUU0/lkEMOKd3f2HXOP/nkk5x66qnZZJNN0qdPnwwcOLAUXtTW0POfZM5r3P7+978vPfavf/2rzmPz+g7/zDPPZMsttyz9fOedd5bO0/r375/bbrut9Ni2225bZw3u6urqXHfdddlll13q1F5zfjkvNWuc/+QnP8nLL7+cAQMGZIMNNsimm26aX/ziF6WZthriwQcfzEEHHZS+ffuWzuEuueSS0ijyZNa51yWXXFL6+cADD0yvXr3mGAT179+/zvnipZdeOlufwquvvprjjz8+m2++edZdd91sueWWOe2000ojPWvUPj/929/+ln322Sfrrrtuttpqq7ke58SJE3Puuedm8803T+/evbPXXnvV6QuY03PUPgeufc69//77p1evXqXz0BpPP/106f4af//739O/f//06dMnffr0yT777DPbMnnzOi9PkvHjx+e
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACnJklEQVR4nOzdeZyN5f/H8feZ1RiTbWyJbJFtGHxNKmvRIqWSLVIIkXwthaRUhOqbJUKLZJd9jYhUJJKsRdkikrEOZjPn/P4Y5/7NmTljtjNzn+X1fDw8OnPOPff5nHNdczr39b6v67bYbDabAAAAAAAAAAAAAACA/MwuAAAAAAAAAAAAAAAAd0GIDgAAAAAAAAAAAADADYToAAAAAAAAAAAAAADcQIgOAAAAAAAAAAAAAMANhOgAAAAAAAAAAAAAANxAiA4AAAAAAAAAAAAAwA2E6AAAAAAAAAAAAAAA3ECIDgAAAAAAAAAAAADADYToAAAAAAAAAAAAAADcQIgOALns+vXr+vLLL9W5c2dFRUWpRo0auvfee/Xiiy/qxx9/TLP9kCFDVKVKFVWpUkX//PNPntWZkJCgo0eP5tnzZZX9PXn22WdNq+GXX37RnXfeqRdeeCHLv/vTTz8Zr+Gjjz7KheqybsmSJUZNy5cvT/P4oUOHsrS9Ozh58qRR47Bhw9I8/uuvv6p27drGNm+99ZYkx/ax/ztz5ozD7546dSrNNj/99FOevC5XO3/+vGrUqKGWLVsqISHB7HIAAADgRhISEjRjxgy1a9dO9evXV/Xq1dWgQQN169ZNa9asSbN9586dVaVKFVWrVs24L73jH2fbehKr1ao///zT6WN///23rl69mscVOWrWrJmqVKmi5s2b53hf58+fV3R0dKa23bFjh9q2batatWqpTp066tChg2w2W45ryIlnn33W6IN2NzumnTdvnh544AHVqFFDd911l0aPHi1JOn36tPr06aO6desqIiJCDz/8sA4fPpynryWncqNvmjVG4w5/Zxk5ceKEIiIi9Oijj2b5dzMa0zBDRuNZqceO3HH8y5mb9eG//vpL99xzj7FN7969df36dYf2sf/btWuXw+8mJCSoVq1aDtssWbIkj16VayUkJOiee+7R3XffrUuXLpldDmAKQnQAyEX//vuv2rZtq+HDh2v79u26ePGiEhMTdfbsWa1fv17PPvusxo4da3aZWrNmjR5++GGtWrXK7FLcVlJSkt58803ZbDY9/fTTZpeTq44ePaoXX3xRvXr1MrsUlzp8+LB69uyp2NhYSdITTzyh4cOHp7t96pNcnJ304qmKFCmiBx98UH/++ac+/fRTs8sBAACAm4iLi9Mzzzyj0aNH69dff9WlS5d0/fp1nT9/Xj/88IP69++vN954w+wyTbFlyxY98cQTab4/X7p0SWPHjtWDDz6oCxcumFSd68TFxWnq1Klq3rx5psLi2NhY9erVS7t371ZcXJyuXr2qmJgYWSyWPKjWNXbu3KkRI0bo2LFjSkxM1IULF5SYmChJevXVV7VhwwZduXJF8fHxOnz4sAoXLmxyxZnjTX3Tk17LqFGjFB8f7/VjR2fOnNGrr76qxx57zOxSXOrs2bPq2rWrcRLRvffeq/HjxysgIMDp9lu2bHH4+ZdfflFcXFyu15kXgoKC1KZNG507d07vvvuu2eUApnD+lw8AyLGEhAS98MIL2r9/vySpXbt2atOmjUJDQ7Vt2zaNGzdOMTExmj59umrWrKmHH37YlDp37typ/v37m/LcWbF582ZJyV/gzLBu3Tr9/vvvKlu2rO655x5TanC1hx56SHfffbckqWDBgsb9PXv21PHjx1W6dGmzSnO506dPq1u3brp48aIk6ZFHHtGoUaNuOrCzdetWtW7d2vjZm0J0SerQoYNWrlypjz/+WB07dlShQoXMLgkAAAAmmz9/vjGr7oknnlCHDh1UsGBB/fHHHxo5cqROnz6t+fPnq1WrVqpXr54kacKECUpISPCo0DSrzpw5o65du0qS7rzzTofH3nvvPS1cuNCMsnLF559/rvHjx2d6+z///FNXrlyRJDVs2FDDhw+X1WrNpepyJr1j4F9//dW43bt3bz322GMKCQlxeKxYsWKaPn26kpKSVKRIkTyrOSe8qW96ymvZs2ePNm3apNDQULVq1crsclwiMjLSGJMrUKCAcf+QIUO0detWs8rKFTExMerevbtOnDghSapfv74mT55807HIH3/8US+++KLDz96kffv2+vjjj7V48WJ17dpVFStWNLskIE8RogNALlm6dKn27dsnKXkZsaFDhxqPVaxYUbfddpt69OghSVq8eLFpIbrZS6xlVsmSJU19/unTp0uSHnzwQa8ZHAoJCTEGBlLylD6RWRcvXlS3bt10+vRpSdL999+vsWPHys/P+YI8pUuX1t9//53mwGfbtm2SpNtuu00nT57M3aLzQJ06dVS8eHH9+++/+vLLL43PIwAAAPgu+3deSRo+fLjy588vSbr99tuVmJio//73v5KSQwJ7iO4pgWJO3OwYyduOn7L6euwrfUnJYdvtt9/u6pJcJr1j4JSv4Z577lG5cuWMn69duyYpeRyncuXKuV6jK3lT3/SU1/LZZ59Jkpo0aWJ8fnq6oKAgp2NyntImmRUfH6/evXvr999/lyTVrl1bU6dOVb58+Zxubx872r17t65evarQ0FBJ3jd2VKpUKdWqVUu7du3SF198YVwWEfAVLOcOALlk6dKlkiQ/Pz/17NkzzeONGzfW2LFjtWbNGuNLdnpudk2k9K6hvmvXLvXq1UsNGjRQtWrVVKdOHT311FNavHixsc2SJUsclpeaNGlSmmv17N69Wz169FC9evUUERGh1q1ba86cOWnOLLfXMHr0aL3zzjuKjIxUnTp1HJ4vtX/++UfDhg1T06ZNVaNGDUVEROihhx7SuHHj0lynOfW1ipxdh+hm16vO7Otw5sSJE9q7d6+k5AA2pYsXL2rMmDFq0aKFateurdq1a6tFixYaPXq0Ll++nOG+JWn79u3q3LmzatWqpaioKL3++uu6cuWK8To+/PBDh+3Pnj2rd955Ry1atFDNmjUVFRWlXr16afv27Q7bpXyPPv30Uw0aNEgRERGKiorSli1bnF4PrkqVKvrrr78kJV9rrEqVKurcubPTuufMmaMHHnjAWElh3rx5Do/b+2ajRo105swZDRw4UPXq1VO9evU0ePBgXbp0SX/99Zf69u2ryMhI/ec//1G/fv3077//Ot1P6j6eGbGxserZs6exDGHDhg01bty4dJfhkqSoqChJyZdj+OOPPyQlz644e/aspOQzkdOzYsUKPfnkk6pVq5bq1q2rLl26pFnaS8p8v0l5LbFNmzZp2bJlevTRR1WzZk01adJE48eP1/Xr1x32vWzZMrVv315169ZVtWrVFBUVpW7dumnnzp0O21ksFjVr1kyStGDBgnRfEwAAAHxHytl2r7zyig4cOGD83KJFC/3444/68ccf1a1bN+P+7F7n/Ny5cxo6dKjq16+vyMhIde/e3QgvUsrs8Y+U/jVuP/zwQ+Oxn3/+2eGxjL7D//TTT2rcuLHx89KlS43jtM6dO2vRokXGY/fdd5/DNbitVqtmzpypVq1aOdRuP77MiP0a5y+99JL27NmjLl26qHbt2mrQoIFef/11Y6WtzFi7dq2effZZRUVFGcdwEyZMMGaRS8nHXhMmTDB+fuaZZ1SlSpV0g6DOnTs7HC9OnDgxzZjCvn37NHDgQDVs2FA1atRQ48aNNWzYMGOmp13K49NvvvlG7du3V40aNdSkSZObvs4rV65o1KhRatiwoSIiItS2bVuHsYD0niPlMXDKY+6nn35aVapUMY5D7bZt22bcb/fdd9+pc+fOioyMVGRkpNq3b5/mMnkZHZdL0uXLlzV69GhjbKRRo0Z6/fXX0xwbp+zHFy5c0Pjx49W0aVPVrFlTrVq10sqVKx3a5mZ9Mz1HjhzRyy+/rHvvvVc1atRQ06ZN9fLLL+vIkSMZ/u7N/s6c/W1arVbNmDFDjz/+uCIjI1W9enXdc8896tu3r3EsnpnXktm
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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TpLUuHFjjRs3Tj4+jif4KVasmP76668UB0jbt2+XJBUvXlxnz57N2qKzQY0aNVSoUCH9+++/+uabb8zPIwAAAHivxO+8kjRs2DDlzJlTklSyZEnFxsbqv//9r6SEMCExbHeX4DEzbneM5GnHT+l9PYkzh0kJoVzJkiWdXZLTpHYMnPQ1PPTQQypVqpT5840bNyQl9OPce++9WV6jM3nSvukur+WLL76QJDVo0MD8/HR3AQEBDvvk3KVN0urmzZvq1auXjhw5IkmqVq2apk2bphw5cji8f2Lf0b59+3T9+nUFBwdL8ry+o6JFi6pq1aras2ePvvrqK3M5RgDJMY08AGSRpUuXSpJ8fHzUo0ePFLfXr19f48aN05o1a8wv46m53ZpNqa3xvmfPHvXs2VN16tRRxYoVVaNGDT3zzDNavHixeZ8lS5Ykm9Zq8uTJKdYS2rdvn7p37677779fYWFhat26tb7++usUZ6on1jBmzBi9++67ql69umrUqJHs+W71zz//aOjQoWrYsKEqV66ssLAwPf744xo/fnyKdaRvXUvJ0TpJt1tPO62vw5EzZ87owIEDkhKC2qQuX76ssWPHqmnTpqpWrZqqVaumpk2basyYMbp69eodty1JO3fuVMeOHVW1alXVrl1bb731lq5du2a+jo8//jjZ/S9cuKB3331XTZs2VZUqVVS7dm317NlTO3fuTHa/pL+jzz//XAMHDlRYWJhq166trVu3Olyvrnz58vrzzz8lJayFVr58eXXs2NFh3V9//bUeffRRc2aGefPmJbs9cd+sV6+ezp8/rwEDBuj+++/X/fffr0GDBunKlSv6888/1adPH1WvXl3/+c9/1LdvX/37778Ot3PrPp4WUVFR6tGjhzn9Yd26dTV+/PhUp/+SpNq1a0tKWAbi999/l5QwWuPChQuSEs5sTs2KFSv09NNPq2rVqqpZs6Y6deqUYkoxKe37TdK1zjZt2qRly5apZcuWqlKliho0aKAJEyYoLi4u2baXLVum9u3bq2bNmqpYsaJq166trl27avfu3cnuZxiGGjVqJElasGBBqq8JAAAA3iPp6L3XX39dhw8fNn9u2rSpfv75Z/3888/q2rWreX1G12G/ePGihgwZolq1aql69erq1q2bGXIkldbjHyn1NXg//vhj87Zffvkl2W13+g6/Y8cO1a9f3/x56dKl5nFax44dtWjRIvO2Rx55JNka4TabTbNmzVKLFi2S1Z54fHkniWuwv/rqq9q/f786deqkatWqqU6dOnrrrbfMmbvSYu3atercubNq165tHsNNnDjRHJUuJRx7TZw40fz5hRdeUPny5VMNjDp27JjseHHSpEkp+hQOHjyoAQMGqG7duqpcubLq16+voUOHmiNHEyU9Pv3+++/Vvn17Va5cWQ0aNLjt67x27ZpGjx6tunXrKiwsTG3btk3WF5DacyQ9Bk56zP3cc8+pfPny5nFoou3bt5vXJ/rhhx/UsWNHVa9eXdWrV1f79u1TLM93p+NySbp69arGjBlj9o3Uq1dPb731Vopj46T78aVLlzRhwgQ1bNhQVapUUYsWLbRy5cpkbXO7fTM1J06c0GuvvaaHH35YlStXVsOGDfXaa6/pxIkTd3zs7d5njt6bNptNM2fO1JNPPqnq1aurUqVKeuihh9SnTx/
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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58+flyS1atVKEydOlNXqfIKfkiVL6o8//kh1grRr1y5JUqlSpXTu3LmcLToX1K9fX8WKFdPff/+tJUuWGO9HAAAA8F7Jn3klafTo0cqfP78kqWzZskpISND//vc/SUlhQnLYnleCx+xI7xzJ086fMvt8kmcOk5JCubJly7q6JJdJ6xw45XO4++67Va5cOePr69evS0rqx6lcuXKO1+hKntQ288pz+fTTTyVJLVq0MN4/8zp/f3+nfXJ55TXJqLi4OPXv31/Hjh2TJNWtW1czZ85Uvnz5nO6f3Hd04MABRUdHKygoSJLn9R2VKFFCderU0b59+/T5558byzECcMQ08gCQQ1auXClJslqt6tu3b6rtzZs318SJE7V+/Xrjw3ha0luzKa013vft26d+/fqpcePGql69uurXr68nnnhCy5cvN/ZZsWKFw7RW06ZNS7WW0IEDB9SnTx/deeedql27tjp06KD58+enulI9uYbx48frrbfeUr169VS/fn2Hx7vZX3/9pVGjRunee+9VzZo1Vbt2bT344IOaNGlSqnWkb15Lydk6Semtp53R5+HM2bNndejQIUlJQW1K//zzjyZMmKA2bdqobt26qlu3rtq0aaPx48fr6tWrtzy2JO3evVvdu3dXnTp11KhRI7366qu6du2a8Tw++OADh/0vXryot956S23atFGtWrXUqFEj9evXT7t373bYL+XP6JNPPtGwYcNUu3ZtNWrUSDt27HC6Xl2VKlX0+++/S0paC61KlSrq3r2707rnz5+v+++/35iZYeHChQ7bk9tms2bNdOHCBQ0dOlR33nmn7rzzTg0fPlxXrlzR77//roEDB6pevXr6z3/+o0GDBunvv/92epyb23hGxMTEqG/fvsb0h02bNtWkSZPSnP5Lkho1aiQpaRmIX3/9VVLSaI2LFy9KSrqyOS1ffvmlHn/8cdWpU0cNGjRQjx49Uk0pJmW83aRc62zr1q1atWqVHnnkEdWqVUstWrTQ5MmTdePGDYdjr1q1Sl26dFGDBg1UvXp1NWrUSL169dLevXsd9rNYLGrZsqUkafHixWk+JwAAAHiPlKP3XnrpJR09etT4uk2bNvrhhx/0ww8/qFevXsb9WV2H/dKlSxo5cqQaNmyoevXqqXfv3kbIkVJGz3+ktNfg/eCDD4xtP/30k8O2W32G//HHH9W8eXPj65UrVxrnad27d9eyZcuMbffdd5/DGuE2m01z585Vu3btHGpPPr+8leQ12F944QUdPHhQPXr0UN26ddW4cWO9+uqrxsxdGbFhwwY988wzatSokXEON2XKFGNUupR07jVlyhTj66efflpVqlRJMzDq3r27w/ni1KlTU/UpHD58WEOHDlXTpk1Vs2ZNNW/eXKNGjTJGjiZLeX76zTffqEuXLqpZs6ZatGiR7vO8du2axo0bp6ZNm6p27drq1KmTQ19AWo+R8hw45Tn3k08+qSpVqhjnocl27dpl3J/s22+/Vffu3VWvXj3Vq1dPXbp0SbU8363OyyXp6tWrGj9+vNE30qxZM7366qupzo1TtuPLly9r8uTJuvfee1WrVi21a9dOa9ascXht0mubaQkPD9eLL76oe+65RzVr1tS9996rF198UeHh4bf83vR+z5z9btpsNs2ZM0ePPvqo6tWrpxo1aujuu+/WwIE
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACwQElEQVR4nOzdeZyN5f/H8feZ1ZgZ62QJEbLv+hFlydYiUWQrKXwRSZZCEhWhzRIhJWXfdxFZvkUikRDKIEoyxjKYzZzz+2Oa+ztjZs5s58x9ltfz8ejRmXPfc5/PPa45c+7rfV/XZbHZbDYBAAAAAAAAAAAAAAD5mF0AAAAAAAAAAAAAAACughAdAAAAAAAAAAAAAIB/EaIDAAAAAAAAAAAAAPAvQnQAAAAAAAAAAAAAAP5FiA4AAAAAAAAAAAAAwL8I0QEAAAAAAAAAAAAA+BchOgAAAAAAAAAAAAAA/yJEBwAAAAAAAAAAAADgX4ToAAAAAAAAAAAAAAD8ixAdAJzs1q1bWrp0qbp166b69eurWrVqeuCBB/Tiiy/q+++/T7X/8OHDVbFiRVWsWFF///13rtUZFxenU6dO5drrZVXSz+S5554zrYaffvpJlSpV0gsvvJDl7/3hhx+Mc/j444+dUF3WrVy50qhpzZo1qbafOHEiS/u7gnPnzhk1jhw5MtX2gwcPqlatWsY+b731lqSU/z5J/124cCHF9/7111+p9vnhhx9y5bwcLTIyUtWqVVPr1q0VFxdndjkAAABwIXFxcZo7d646deqkevXqqWrVqmrQoIF69uypjRs3ptq/W7duqlixoqpUqWI8l971T1r7uhOr1arff/89zW1//vmnbty4kcsVpdSsWTNVrFhRLVu2zPGxIiMjFRERkal99+3bp44dO6pmzZqqU6eOunTpIpvNluMacuK5554z2mASe9e0ixYt0kMPPaRq1arpvvvu0/jx4yVJ58+fV//+/VW3bl3VqFFDjz76qE6ePJmr55JTzmibZvXRuMLvWUbOnj2rGjVq6PHHH8/y92bUp2GGjPqzbu87csX+r7TYa8N//PGH7r//fmOffv366datWyn+fZL+O3DgQIrvjYuLU82aNVPss3Llylw6K8eKi4vT/fffr4YNG+rq1atmlwOYghAdAJzon3/+UceOHTVq1Cjt3btXV65cUXx8vC5evKgtW7boueee08SJE80uUxs3btSjjz6q9evXm12Ky0pISNCbb74pm82mp59+2uxynOrUqVN68cUX1bdvX7NLcaiTJ0+qT58+io6OliQ9+eSTGjVqVLr7336TS1o3vbirQoUK6eGHH9bvv/+uTz/91OxyAAAA4CJiYmL07LPPavz48Tp48KCuXr2qW7duKTIyUt99950GDRqk0aNHm12mKXbt2qUnn3wy1efnq1evauLEiXr44Yd1+fJlk6pznJiYGM2cOVMtW7bMVFgcHR2tvn376ueff1ZMTIxu3LihqKgoWSyWXKjWMfbv368xY8bo9OnTio+P1+XLlxUfHy9Jeu2117R161Zdv35dsbGxOnnypAoWLGhyxZnjSW3Tnc5l3Lhxio2N9fi+owsXLui1115T27ZtzS7FoS5evKgePXoYNxE98MADmjx5svz8/NLcf9euXSm+/umnnxQTE+P0OnNDQECAOnTooEuXLundd981uxzAFGn/5gMAciwuLk4vvPCCjhw5Iknq1KmTOnTooODgYO3Zs0eTJk1SVFSU5syZo+rVq+vRRx81pc79+/dr0KBBprx2VuzcuVNS4gc4M2zevFnHjh3TXXfdpfvvv9+UGhztkUceUcOGDSVJ+fPnN57v06ePzpw5oxIlSphVmsOdP39ePXv21JUrVyRJjz32mMaNG2e3Y2f37t1q166d8bUnheiS1KVLF61bt06ffPKJunbtqgIFCphdEgAAAEy2ePFiY1Tdk08+qS5duih//vz67bffNHbsWJ0/f16LFy9WmzZtdO+990qSpkyZori4OLcKTbPqwoUL6tGjhySpUqVKKba99957WrZsmRllOcXnn3+uyZMnZ3r/33//XdevX5ckNWrUSKNGjZLVanVSdTmT3jXwwYMHjcf9+vVT27ZtFRQUlGLbHXfcoTlz5ighIUGFChXKtZpzwpPaprucy6FDh7R9+3YFBwerTZs2ZpfjELVr1zb65EJCQoznhw8frt27d5tVllNERUWpV69eOnv2rCSpXr16mj59ut2+yO+//14vvvhiiq89SefOnfXJJ59oxYoV6tGjh8qVK2d2SUCuIkQHACdZtWqVDh8+LClxGrERI0YY28qVK6eSJUuqd+/ekqQVK1aYFqKbPcVaZhUrVszU158zZ44k6eGHH/aYzqGgoCCjYyA5d2kTmXXlyhX17NlT58+flyS1aNFCEydOlI9P2hPylChRQn/++WeqC589e/ZIkkqWLKlz5845t+hcUKdOHRUpUkT//POPli5darwfAQAAwHslfeaVpFGjRilv3rySpNKlSys+Pl4vv/yypMSQIClEd5dAMSfsXSN52vVTVs8naaYvKTFsK126tKNLcpj0roGTn8P999+vMmXKGF/fvHlTUmI/ToUKFZxeoyN5Utt0l3P57LPPJElNmzY13j/dXUBAQJp9cu7yb5JZsbGx6tevn44dOyZJqlWrlmbOnKk8efKkuX9S39HPP/+sGzduKDg4WJLn9R0VL15cNWvW1IEDB/TFF18YyyIC3oLp3AHASVatWiVJ8vHxUZ8+fVJtb9KkiSZOnKiNGzcaH7LTY29NpPTWUD9w4ID69u2rBg0aqEqVKqpTp46eeuoprVixwthn5cqVKaaXmjZtWqq1en7++Wf17t1b9957r2rUqKF27dppwYIFqe4sT6ph/Pjxeuedd1S7dm3VqVMnxevd7u+//9bIkSP14IMPqlq1aqpRo4YeeeQRTZo0KdU6zbevVZTWOkT21qvO7Hmk5ezZs/rll18kJQawyV25ckUTJkxQq1atVKtWLdWqVUutWrXS+PHjde3atQyPLUl79+5Vt27dVLNmTdWvX19vvPGGrl+/bpzHRx99lGL/ixcv6p133lGrVq1UvXp11a9fX3379tXevXtT7Jf8Z/Tpp59q6NChqlGjhurXr69du3aluR5cxYoV9ccff0hKXGusYsWK6tatW5p1L1iwQA899JAxk8KiRYtSbE9qm40bN9aFCxc0ZMgQ3Xvvvbr33ns1bNgwXb16VX/88YcGDBig2rVr6//+7/80cOBA/fPPP2ke5/Y2nhnR0dHq06ePMQ1ho0aNNGnSpHSn4ZKk+vXrS0pcjuG3336TlDi64uLFi5IS70ROz9q1a9W+fXvVrFlTdevWVffu3VNN7SVlvt0kX0ts+/btWr16tR5//HFVr15dTZs21eTJk3Xr1q0Ux169erU6d+6sunXrqkqVKqpfv7569uyp/fv3p9jPYrGoWbNmkqQlS5ake04AAADwHslH27366qs6evSo8XWrVq30/fff6/vvv1fPnj2N57O7zvmlS5c0YsQI1atXT7Vr11avXr2M8CK5zF7/SOmvcfvRRx8Z23788ccU2zL6DP/DDz+oSZMmxterVq0yrtO6deum5cuXG9uaN2+eYg1uq9WqL7/8Um3atElRe9L1ZUaS1jh/6aWXdOjQIXXv3l21atVSgwYN9MYbbxgzbWXGpk2b9Nxzz6l+/frGNdyUKVOMUeRS4rXXlClTjK+fffZZVaxYMd0gqFu3bimuF6dOnZqqT+Hw4cMaMmSIGjVqpGrVqqlJkyYaOXKkMdIzSfLr02+++UadO3dWtWrV1LRpU7vnef36dY0bN06NGjVSjRo11LFjxxR9Aem9RvJr4OTX3E8//bQqVqxoXIcm2bNnj/F8kv/+97/q1q2bateurdq1a6tz586plsnL6Lpckq5du6bx48cbfSONGzfWG2+8keraOHk7vnz5siZPnqwHH3xQ1atXV5s2bbRu3boU/zb22mZ6wsPD9corr+iBBx5QtWrV9OCDD+qVV15ReHh4ht9r7/csrd9Nq9WquXPn6oknnlDt2rVVtWpV3X///RowYIBxLZ6
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x800 with 1 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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9uill15S3bp1FRQUpPbt2+ubb75RcnLybfdv1KhRatKkifXn5cuXW49tihMnTujNN9+0HoOGDRtqyJAhac6V1M8hXrFihfr166eAgAA98sgjOnz4cIY1xMfH66OPPlLTpk0VGBiotm3basOGDekum96zqJs0aaJRo0ZZlxk5cqS1hurVq+vMmTOSpFOnTql69erq2bOnddnMHreU15w8ebLee+891alTRw888ICWL18uSYqLi9Ps2bPVvHlz6z6/8cYbOn78uM12Uj+H+sCBA1qwYIF1nebNm2vBggU2782sWbOsPz///POqXr36bcOqUaNGqXr16qpfv76ioqI0ceJEPfroowoKClLXrl21ZcsWm+Uz6h0ZPfO7SZMmql69uoYNG6Zdu3bpueeeU61atfTYY4/pk08+UXJysrZv365u3bopKChIjz32mKZNm5bhc5pv3Lihd999V4888ohq1aql7t2723z2U5w/f15jx47Vo48+av2sTJ06VVFRUenuT8eOHbVy5Urrvo8bNy7DYybdPAc///xzdejQQXXq1FGdOnXUrVs3BQcH2wSoGZ1rd3qWdmhoqAYPHqwGDRooMDBQTz75pCZMmJDmOd3pSXlPq1evrnPnzlmnZ/S88JRzsXXr1goKCpK/v78aNWqkUaNGWUPTlH1JHYpWr17dphdk9py+U3+6evWqJk+erGbNmikwMFABAQFq2rSpJk6cmG5fvNWpU6es/frJJ5+0mXflyhVNmTJFTz31lGrXrq3atWvrqaee0uTJk3Xt2rU7bluS/vjjD/Xs2VO1atVS/fr19dZbb+n69evWfUrdC6XMfx+mfn/mz5+vYcOGKSgoSPXr19fWrVvTfSZ99erV9e+//0q6+eiFW/tVat98842aN2+uwMBAtWrVSosXL7aZn3LePP744zp//rzeeOMN1a1bV3Xr1tXIkSN19epV/fvvv3rllVdUp04d1atXT6+99pouXLiQ7nZuPf8y48aNG+rfv7/1cR6PPfaYZs6cKSenjO8Bql+/viTpwoUL1u+NI0eO6OLFi5JuXiSTkTv9LpEis+dN6j74yy+/aNWqVWrXrp0CAwP1xBNP6MMPP7SOtpFi1apVeuaZZ/Tggw+qZs2aql+/vvr06aO///7bZjnDMKyft6VLl2a4TwAAAMCdcIc9AAAAkAvatm2rH374QZK0ceNGbdy4USVLllT9+vX1+OOPq2nTpta77u+GxWLRs88+ax0KXZJ+//13hYeHa9OmTdY7/w4dOqRevXopMjLSulx8fLx++eUX/frrrxo1alSacD4rPvjgA3322Wc203bs2KGdO3dq4sSJ6tKlS7a3LUnDhg1TSEiI9eeU2rds2aI5c+bo8ccfz3Dd69evq3v37vrvv/9sph87dkyffvqpDh06pLlz51qnf/XVV5o0aZLNsidOnNC8efO0ZcsWff3119Znp8+bN08zZsywCQNPnTqlhQsXat26dVq4cGG6w7YPGjTIGihUrVpVjo6O+vnnn/Xaa68pISHButz+/fv1zjvvaM+ePXr//fczc6jStX37dg0cONB6l7okRUREaN26ddq4caPef/99tWrVKs16qYMPJyenDIegt1gsevXVV/XLL79Ypx06dEivvfaaSpQoke26MyM7x23FihU2gU6dOnUUHx+v3r1
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x800 with 1 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACp3UlEQVR4nOzdd3xT1f/H8Xe6GGWDAqLIkiGzDBFZArJFcDAVQUBAhK8yZakgKCLK+MpXxIEIypAKsgrIkCobkVmsIAUFZIOsUlqa/P4oub+kTXfarNfz8fBhaG6TT3KS23vP+55zTBaLxSIAAAAAAAAAAAAAACA/VxcAAAAAAAAAAAAAAIC7IEQHAAAAAAAAAAAAAOAuQnQAAAAAAAAAAAAAAO4iRAcAAAAAAAAAAAAA4C5CdAAAAAAAAAAAAAAA7iJEBwAAAAAAAAAAAADgLkJ0AAAAAAAAAAAAAADuIkQHAAAAAAAAAAAAAOAuQnQAAAAAAAAAAAAAAO4iRAeQJnfu3NF3332n7t27q27duqpSpYoaNGiggQMHavv27Um2HzlypCpUqKAKFSro7Nmz2VZnbGysjh8/nm3Pl17W96Rnz54uq+G3335TxYoV9corr6T7d3fu3Gm8hk8++SQLqku/pUuXGjUtX748yf1HjhxJ1/bu5vjx40a9FSpU0IEDB1xShzu2vSuYzWb9+eefdj9z1f5uy5YtGjRokBo0aKAqVarokUceUffu3bVkyRLFx8fbbevKz33i76AzZfc+dcOGDapQoYLGjh2bLc8HAAAyJzY2VnPnzlXnzp31yCOPqHLlyqpXr5569+6tsLCwJNt3795dFSpU0MMPP2z8LLnjYEfbehJHx7VWp0+f1s2bN7O5IntNmzZVhQoV1Lx580w/1uXLl3Xx4sU0bbt792516tRJ1atXV82aNdW1a1dZLJZM15AZPXv2ND6DVikd3y9cuFAtW7ZUlSpV9Oijj2rSpEmSpDNnzujVV19VrVq1VK1aNbVp00bHjh3L1teSWVnx2XRVP407fM9Sc/LkSVWrVk1PPfVUun/31KlTxns7ZsyYLKgu/VLr10h87upp/SDXr19X9erVjZod/Z3LDu7Y9q6S+DP18ccfG+/Nr7/+mm11HDhwQMOHD1eTJk1UpUoV1apVS507d9ZXX32lmJgYu21d+bnPyv4jZx5XpEVkZKQqVKigl156KVueD1mHEB1Aqs6fP69OnTrpzTff1K5du/Tvv/8qLi5OFy5c0Pr169WzZ09NnjzZ1WUqLCxMbdq00apVq1xdituKj4/X+PHjZbFY9Pzzz7u6nCx1/PhxDRw4UP3793d1KZkSGhpq9+/Fixe7qBJs3bpVzzzzjL744guX1hEXF6dRo0apd+/e+vHHH3XhwgXFxcXp6tWr2rVrl8aOHasePXokORHKbgcOHFD37t01YcIEl9bhTE2aNNF9992n0NDQbD3hBQAA6RcTE6MXX3xRkyZN0r59+3T16lXduXNHly9f1pYtWzR48GC9/fbbri7TJZI7rr169aomT56sVq1a6cqVKy6qznliYmL06aefqnnz5mkKi2/duqX+/ftr//79iomJ0c2bN3X9+nWZTKZsqNY59uzZo3HjxunEiROKi4vTlStXFBcXJ0kaPXq0NmzYoBs3buj27ds6duyYChYs6OKK08abPpue9Freffdd3b592+v7j86dO6fRo0erffv2ri4lU1auXGnXD/Ddd9+5sBrf5k79IdOmTVPHjh21YsUK/fPPP4qLi9ONGze0b98+vf/++3r22Wd1+fJll9boLX24tipWrKiaNWtq27ZtHjGIC8kLcHUBANxbbGysXnnlFUVEREiSOnfurOeee07BwcHasWOHpk2bpuvXr2vOnDmqWrWq2rRp45I69+zZo8GDB7vkudMjPDxckhQUFOSS51+3bp0iIyNVsmRJ1a9f3yU1OFvr1q312GOPSZLy589v/Lxfv37666+/VKJECVeVlml37txJcqAVFhamUaNGKU+ePC6qyjedO3dOvXr1kpRwIGxr1KhRev311yVJ99xzT5bXMnnyZC1dulSSVKdOHQ0YMEAlSpTQ0aNH9dFHHykqKkq7d+/WpEmTNH78+CyvJzldu3bVnTt39Mgjj2TZc2T3PtXf31+dOnXS9OnTNWXKFC5qAQDAjS1atEh79+6VJD3zzDPq2rWr8ufPr6NHj2rixIk6c+aMFi1apHbt2ql27dqSpBkzZig2NtajQtP0Sum4dsqUKVqyZIkrysoSX331laZPn57m7f/880/duHFDktSwYUO9+eabMpvNWVRd5iR3Hrxv3z7j9oABA9S+fXvlypXL7r577rlHc+bMUXx8vAoVKpRtNWeGN302PeW1HDhwQD/99JOCg4PVrl07V5fjFCEhIcY5pG2fysiRI7Vt2zZXleU0iQdh7NixQ3///bdKlizpoop8V3L9IS+99JI6duwoSdmy/507d64+/fRTSVL58uX1+uuvq1y5cjp58qQ+/vhj7du3T3/++adGjBjh0gEj2dGHu3jxYsXHx8vf3z/LniOxrl276rffftPUqVPVtm1bBQQQx3oiWg1AipYtW6ZDhw5JSphCbNSoUcZ9ZcuW1f3336++fftKkr7//nuXheiunl4trYoVK+bS558zZ44kqVWrVl7TMZQrVy6jU8CWp3wmUrJ582ZduHBBklSqVCmdOHFC0dHRWrlypbp27eri6nxLSp+n/Pnz23VcZaWoqCh98803kqTq1avrq6++UmBgoCTpwQcfNKZlvH79utauXas33nhDuXPnzpbaEsuO76Ar9qmtWrXS9OnTtW/fPu3bt081atTI9hoAAEDqduzYYdx+8803jWOiBx98UHFxccZFkNu3bzdCdE8JFDMjpWM0bziHspXe13Pr1i3jdkhIiB588EFnl+Q0yZ0H276G+vXrq1SpUsa/o6OjJSX05ZQvXz7La3Qmb/psespr+fLLLyVJjz/+uMvOKZ0tKCjI4Tmkp7RJSiIjI40BUNb+I4vFou+++07Dhg1zcXW+J7nPVJ48ebJtUMzVq1c1Y8YMSVKJEiW0cOFC47kffPBBhYSEqH379jp58qR27NihU6dO6f7778+W2hLLju9gdgx6Saxp06YKCgrS2bNntW7dOrVt2zbba0DmMZ07gBQtW7ZMkuTn56d+/folub9x48aaPHmywsLCjAPs5KS0Jk5yawrv3btX/fv3V7169fTwww+rZs2a6tixo77//ntjm6VLl9pNLTVz5kxVqFDBGKkpSfv371ffvn1Vu3ZtVatWTR06dNC3336b5Kpyaw2TJk3Se++9p5CQENWsWdPu+RI7e/asxowZY6wrU61aNbVu3VrTpk1TbGysw8e3rrVl+54k99/OnTvT/TocOXnypA4ePChJeuKJJ+zu+/fff/X++++rRYsWqlGjhmrUqKEWLVpo0qRJunbtWqqPLUm7du1S9+7dVb16ddWtW1dvvfWWbty4YbyOjz/+2G77Cxcu6L333lOLFi1UtWpV1a1bV/3799euXbvstrN9j7744gsNGzZM1apVU926dbV161aHa8FVqFBBf//9t6SEdcYqVKig7t27O6z722+/VcuWLY2ZFBYuXGh3v/Wz2ahRI507d05Dhw5V7dq1Vbt2bb3xxhu6evWq/v77bw0aNEghISGqU6eOXnvtNZ0/f97h46Rn3WzrVcR+fn6aMmWK/PwS/mynNCXX4sWL1a5dO1WtWlXNmjXTnDlztH37doefpzt37mj27Nlq0aKFqlSpojZt2mjp0qV27+mpU6dSrfPGjRuaMWOG2rZtq+rVq6t27drq0aOH1q9fn2Rb6+NOmzZNP/30k5599llVrVpVTzzxhPHeh4WF6amnnjJew+eff57kgPrcuXMaM2aMsR74E088ocmTJ+v69et221nXqnzmmWe0bNkyNWjQQNWqVTPWtL59+7Zmzpyptm3bqmbNmqpWrZqaNm2qsWPH6ty5c5IS1oNq3Lix8ZjLli2z+0wnbtvff//d+LejKUJbtGihChUqqFmzZsbrstZhXbvwscce09ChQ3X8+HG7312
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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FGFhYcY5pG2bytChQ7V582Z3leU0STthbN26Vf/++69KlSrlpop8V0rtIS+++KLatGkjSS7Z/86YMUOfffaZJKlChQr63//+p/Lly+vo0aP6+OOPtWPHDv39998aMmSIWzuMuKINd968eUpISJC/v3+2vUZSHTp00J9//qkJEyaoefPmCgggjs2JWGsAUrVo0SLt2bNHUuIQYsOGDTPuK1eunO6880716NFDkvTDDz+4LUR39/Bq6VW8eHG3vv706dMlSU2bNvWahqHg4GCjUcBWTtkmUrN+/XqdPXtWklS6dGkdOXJE165d07Jly9ShQwc3V+dbUtue8ufPb9dwlZ2ioqL07bffSpKqV6+ur7/+WoGBgZKku+++2xiW8cqVK1q1apVee+015cmTxyW1JeWK76A79qlNmzbVpEmTtGPHDu3YsUM1atRweQ0AACBtW7duNW6/8cYbxjHR3Xffrfj4eOMiyC1bthghek4JFLMitWM0bziHspXR93P9+nXjdlhYmO6++25nl+Q0KZ0H276HevXqqXTp0sb/r127JimxLadChQrZXqMzedO2mVPey1dffSVJeuSRR9x2TulsQUFBDs8hc8o6SU1kZKTRAcrafmSxWPT9999r0KBBbq7O96S0TeXNm9dlnWIuXbqkyZMnS5JKliypOXPmGK999913KywsTK1atdLRo0e1detWHTt2THfeeadLakvKFd9BV3R6Saphw4YKCgrSqVOntHr1ajVv3tzlNSDrGM4dQKoWLVokSfLz81PPnj2T3d+gQQONGzdO4eHhxgF2SlKbEyelOYW3b9+uXr16qW7durr33ntVs2ZNtWnTRj/88IPxmIULF9oNLTVlyhRVrFjR6KkpSTt37lSPHj1Uu3ZthYaGqnXr1vruu++SXVVurWHs2LF69913FRYWppo1a9q9XlKnTp3S8OHDjXllQkND9cQTT2jixImKi4tzuHzrXFu2n0lKP7/99luG34cjR48e1e7duyVJjz32mN19Fy9e1HvvvacmTZqoRo0aqlGjhpo0aaKxY8fq8uXLaS5bkiIiItSpUydVr15dderU0ciRIxUTE2O8j48//tju8WfPntW7776rJk2aqFq1aqpTp4569eqliIgIu8fZfkZffvmlBg0apNDQUNWpU0ebNm1yOBdcxYoV9e+//0pKnGesYsWK6tSpk8O6v/vuOz3++OPGSApz5syxu9+6bT788MM6ffq0Bg4cqNq1a6t27dp67bXXdOnSJf3777/q16+fwsLCdN999+nVV1/VmTNnHC4nI/NmW68i9vPz0/jx4+Xnl/hnO7UhuebNm6eWLVuqWrVqatSokaZPn64tW7Y43J5u3rypadOmqUmTJqpataqaNWumhQsX2n2mx44dS7POmJgYTZ48Wc2bN1f16tVVu3Ztde7cWWvWrEn2WOtyJ06cqJ9//lnPPPOMqlWrpscee8z47MPDw/Xkk08a7+GLL75IdkB9+vRpDR8+3JgP/LHHHtO4ceN05coVu8dZ56p8+umntWjRIj300EMKDQ015rS+ceOGpkyZoubNm6tmzZoKDQ1Vw4YNNWLECJ0+fVpS4nxQDRo0MJa5aNEiu2066br966+/jP87GiK0SZMmqlixoho1amS8L2sd1rkLH3zwQQ0cOFCHDx+2e+6SJUu
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACy2UlEQVR4nOzde5yM5f/H8ffsCbs2rM0hkVOWsCxKkoRIJErOiZBEfuVQOZQoJZ1QSjpoc97I2SIS5RSVs0SWcspphcXatTO/PzT3d2d39jy798zO6/l49GjM4Z7PzH3Pvfd9ve/ruiw2m80mAAAAAAAAAAAAAAAgH7MLAAAAAAAAAAAAAADAXRCiAwAAAAAAAAAAAADwH0J0AAAAAAAAAAAAAAD+Q4gOAAAAAAAAAAAAAMB/CNEBAAAAAAAAAAAAAPgPIToAAAAAAAAAAAAAAP8hRAcAAAAAAAAAAAAA4D+E6AAAAAAAAAAAAAAA/IcQHQAAAAAAAAAAAACA/xCiA8iU69ev65tvvlH37t1Vv3591ahRQ/fee6+ee+45bd68OdXzhw0bprCwMIWFhemff/7JszoTEhJ0+PDhPHu/rLJ/Jz179jStht9++01Vq1bVs88+m+XX/vzzz8Zn+OSTT3KhuqxbsGCBUdPixYtTPX7gwIEsPd/dHD582Kg3LCxMu3btMqUOd1z3ZrBarfrzzz8d7jNrf7dhwwYNHDhQ9957r2rUqKG77rpL3bt317x585SUlOTwXDO3+5S/QVfK633qmjVrFBYWpldeeSVP3g8AAORMQkKCIiMj1alTJ911112qXr26GjRooN69eys6OjrV87t3766wsDDdcccdxn1pHQc7e64ncXZca3f8+HFdvnw5jyty1LRpU4WFhal58+Y5XlZsbKzOnj2bqedu27ZNHTt2VK1atVSnTh116dJFNpstxzXkRM+ePY1t0C694/s5c+bowQcfVI0aNXT33Xdr3LhxkqSTJ09qwIABqlu3rsLDw9WqVSsdOnQoTz9LTuXGtmlWO407/M4ycvToUYWHh+uRRx7J8muPHTtmfLcjR47MheqyLqN2jZTnrp7WDnLp0iXVqlXLqNnZ37m84I7r3iwpt6mPPvrI+G5++eWXPKtj165devHFF9WkSRPVqFFDdevWVadOnfTVV18pPj7e4blmbve52X7kyuOKzNi/f7/CwsL01FNP5cn7IfcQogPI0OnTp9WxY0e9+uqr2rp1q/79918lJibqzJkzWr16tXr27Knx48ebXaaio6PVqlUrLVu2zOxS3FZSUpLGjBkjm82mbt26mV1Orjp8+LCee+459evXz+xScmT+/PkO/46KijKpEmzcuFGPPfaYvvjiC1PrSExM1PDhw9W7d2999913OnPmjBITE3XhwgVt3bpVr7zyinr06JHqRCiv7dq1S927d9cbb7xhah2u1KRJE91yyy2aP39+np7wAgCArIuPj9eTTz6pcePGaceOHbpw4YKuX7+u2NhYbdiwQYMGDdJrr71mdpmmSOu49sKFCxo/frxatmyp8+fPm1Sd68THx+vTTz9V8+bNMxUWX716Vf369dPOnTsVHx+vy5cv69KlS7JYLHlQrWv8+uuvGj16tI4cOaLExESdP39eiYmJkqQRI0ZozZo1iouL07Vr13To0CEVK1bM5IozJz9tm570Wd58801du3Yt37cfnTp1SiNGjFDbtm3NLiVHli5d6tAO8M0335hYjXdzp/aQCRMmqEOHDlqyZIlOnDihxMRExcXFaceOHXr77bfVvn17xcbGmlpjfmnDTa5q1aqqU6eONm3a5BGduJA2P7MLAODeEhIS9Oyzz2rv3r2SpE6dOunxxx9XUFCQtmzZogkTJujSpUuaNm2aatasqVatWplS56+//qpBgwaZ8t5ZsX79eklSQECAKe+/atUq7d+/X+XKlVPDhg1NqcHVHnroId1zzz2SpCJFihj3P/PMM/rrr79UpkwZs0rLsevXr6c60IqOjtbw4cNVuHBhk6ryTqdOnVKvXr0k3TgQTm748OF64YUXJEk333xzrtcyfvx4LViwQJJ05513qn///ipTpowOHjyo999/XzExMdq2bZvGjRunMWPG5Ho9aenSpYuuX7+uu+66K9feI6/3qb6+vurYsaMmTpyod999l4taAABwY3PnztX27dslSY899pi6dOmiIkWK6ODBgxo7dqxOnjypuXPnqk2bNqpXr54kadKkSUpISPCo0DSr0juufffddzVv3jwzysoVX331lSZOnJjp5//555+Ki4uTJDVq1EivvvqqrFZrLlWXM2mdB+/YscO43b9/f7Vt21aFChVyeOzmm2/WtGnTlJSUpJCQkDyrOSfy07bpKZ9l165d+uGHHxQUFKQ2bdqYXY5LREREGOeQydtUhg0bpk2bNplVlsuk7ISxZcsW/f333ypXrpxJFXmvtNpDnnrqKXXo0EGS8mT/GxkZqU8//VSSVKVKFb3wwguqXLmyjh49qo8++kg7duzQn3/+qZdeesnUDiN50YYbFRWlpKQk+fr65tp7pNSlSxf99ttv+uCDD9S6dWv5+RHHeiLWGoB0LVy4UHv27JF0Ywix4cOHG49VqlRJt956q/r27StJ+vbbb00L0c0eXi2zSpUqZer7T5s2TZLUsmXLfNMwVKhQIaNRIDlP2SbSs27dOp05c0aSVL58eR05ckRXrlzR0qVL1aVLF5Or8y7pbU9FihRxaLjKTTExMZo5c6YkqVatWvrqq6/k7+8vSbrtttuMYRkvXbqklStX6uWXX1ZgYGCe1JZSXvwGzdintmzZUhMnTtSOHTu0Y8cO1a5dO89rAAAAGduyZYtx+9VXXzWOiW677TYlJiYaF0Fu3rzZCNE9JVDMifSO0fLDOVRyWf08V69eNW5HRETotttuc3VJLpPWeXDyz9CwYUOVL1/e+PeVK1ck3WjLqVKlSq7X6Er5adv0lM/y5ZdfSpLuv/9+084pXS0gIMDpOaSnrJP07N+/3+gAZW8/stls+uabbzR06FCTq/M+aW1ThQsXzrNOMRcuXNCkSZMkSWXKlNGcOXOM977tttsUERGhtm3b6ujRo9qyZYuOHTumW2+9NU9qSykvfoN50eklpaZNmyogIED//POPVq1apdatW+d5Dcg5hnMHkK6FCxdKknx8fPTMM8+kerxx48YaP368oqOjjQPstKQ3J05acwpv375d/fr1U4MGDXTHHXeoTp066tChg7799lvjOQsWLHAYWmry5MkKCwszempK0s6dO9W3b1/Vq1dP4eHhateunWbNmpXqqnJ7DePGjdNbb72liIgI1alTx+H9Uvrnn380cuRIY16Z8PBwPfTQQ5owYYISEhKcLt8+11by7ySt/37++ecsfw5njh49qt27d0uSHnjgAYfH/v33X7399ttq0aKFateurdq1a6tFixYaN26cLl68mOGyJWnr1q3q3r27atWqpfr162vUqFGKi4szPsdHH33k8PwzZ87orbfeUosWLVSzZk3Vr19f/fr109atWx2el/w7+uKLLzR06FCFh4erfv362rhxo9O54MLCwvT3339LujHPWFhYmLp37+607lmzZunBBx80RlKYM2eOw+P2bfO+++7TqVOnNGTIENWrV0/16tXTyy+/rAsXLujvv//WwIEDFRERoTvvvFPPP/+8Tp8+7XQ5WZk3234VsY+Pj9599135+Nz4s53ekFxRUVFq06aNatasqWbNmmnatGnavHmz0+3p+vXrmjp1qlq0aKEaNWqoVatWWrBggcN3euzYsQzrjIuL06RJk9S6dWvVqlVL9erVU48ePbR69epUz7Uvd8KECfrhhx/Uvn171axZUw888IDx3UdHR+uRRx4xPsPnn3+e6oD61KlTGjlypDEf+AMPPKDx48fr0qVLDs+zz1X52GOPaeHChbr33nsVHh5uzGl97do1TZ48Wa1bt1adOnUUHh6upk2b6pVXXtGpU6ck3ZgPqnHjxsYyFy5c6LBNp1y3v//+u/FvZ0OEtmjRQmFhYWrWrJnxuex12OcuvOeeezRkyBAdPnzY4bWLFy8
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC1A0lEQVR4nOzde5yM5f/H8ffsyWFtTptDIqcsYVmUJCmiIlE5S4QQ+ZZDRUoqhQ4OJVLS5rzI2SJyKKdW5XyILOUUFmGxdu3M749t7t/O7ux5du+Z3dfz8ejR2Jm95zNzzdx739f7vq7LYrPZbAIAAAAAAAAAAAAAAPIyuwAAAAAAAAAAAAAAANwFIToAAAAAAAAAAAAAAP8hRAcAAAAAAAAAAAAA4D+E6AAAAAAAAAAAAAAA/IcQHQAAAAAAAAAAAACA/xCiAwAAAAAAAAAAAADwH0J0AAAAAAAAAAAAAAD+Q4gOAAAAAAAAAAAAAMB/CNEBAAAAAAAAAAAAAPgPITqAdLl165bmz5+vrl27qn79+qpRo4YefPBBvfzyy9q2bVuyxw8dOlRBQUEKCgrSP//8k2N1xsbG6tixYzn2fBllf0+6d+9uWg2///67qlatqpdeeinDv/vLL78Yr2Hy5MnZUF3GLVq0yKhp6dKlye4/fPhwhh7vbo4dO2bUGxQUpD179phShzu2vRmsVqv+/PNPh5+Ztb/bvHmzBgwYoAcffFA1atTQfffdp65du2rBggWKj493eKyZn/uk30FXyul96rp16xQUFKS33norR54PAABkTWxsrEJDQ9WhQwfdd999ql69uho0aKCePXsqPDw82eO7du2qoKAg3XPPPcbPUjoOdvZYT+LsuNbu1KlTunbtWg5X5KhJkyYKCgpSs2bNsrytixcvKioqKl2P3bFjh9q3b69atWqpTp066tSpk2w2W5ZryIru3bsbn0G71I7v586dq8cee0w1atTQ/fffr9GjR0uSzpw5o/79+6tu3boKDg5WixYtdPTo0Rx9LVmVHZ9Ns/pp3OF7lpYTJ04oODhYTz31VIZ/9+TJk8Z7O3z48GyoLuPS6tdIeu7qaf0gV69eVa1atYyanf2dywnu2PZmSfqZ+vzzz4335tdff82xOvbs2aPXXntNjzzyiGrUqKG6deuqQ4cO+vbbbxUTE+PwWDM/99nZf+TK44r0OHTokIKCgvTCCy/kyPMh+xCiA0jTuXPn1L59e7399tuKiIjQv//+q7i4OJ0/f15r165V9+7dNXbsWLPLVHh4uFq0aKEVK1aYXYrbio+P17vvviubzaYuXbqYXU62OnbsmF5++WX17dvX7FKyZOHChQ7/DgsLM6kSbNmyRc8884ymTZtmah1xcXEaNmyYevbsqR9++EHnz59XXFycLl++rIiICL311lvq1q1bshOhnLZnzx517dpV77//vql1uNIjjzyiO+64QwsXLszRE14AAJBxMTExev755zV69Gjt2rVLly9f1q1bt3Tx4kVt3rxZAwcO1DvvvGN2maZI6bj28uXLGjt2rB5//HFdunTJpOpcJyYmRl9++aWaNWuWrrD4xo0b6tu3r3bv3q2YmBhdu3ZNV69elcViyYFqXeO3337TyJEjdfz4ccXFxenSpUuKi4uTJL355ptat26doqOjdfPmTR09elRFixY1ueL0yU2fTU96LR988IFu3ryZ6/uPzp49qzfffFOtW7c2u5QsWb58uUM/wPz5802sJm9zp/6Q8ePHq127dlq2bJlOnz6tuLg4RUdHa9euXRozZoyeffZZXbx40dQac0sfbmJVq1ZVnTp1tHXrVo8YxIWU+ZhdAAD3Fhsbq5deekn79++XJHXo0EFt27aVv7+/tm/frvHjx+vq1auaPn26atasqRYtWphS52+//aaBAwea8twZsWnTJkmSn5+fKc+/Zs0aHTp0SOXKlVPDhg1NqcHVnnjiCT3wwAOSpMKFCxs/79Onj/766y+VKVPGrNKy7NatW8kOtMLDwzVs2DAVKlTIpKryprNnz6pHjx6SEg6EExs2bJheffVVSdLtt9+e7bWMHTtWixYtkiTde++96tevn8qUKaMjR47o008/VWRkpHbs2KHRo0fr3XffzfZ6UtKpUyfdunVL9913X7Y9R07vU729vdW+fXtNmDBBH3/8MRe1AADgxubNm6edO3dKkp555hl16tRJhQsX1pEjRzRq1CidOXNG8+bNU6tWrVSvXj1J0sSJExUbG+tRoWlGpXZc+/HHH2vBggVmlJUtvv32W02YMCHdj//zzz8VHR0tSWrUqJHefvttWa3WbKoua1I6D961a5dxu1+/fmrdurUKFCjgcN/tt9+u6dOnKz4+XsWKFcuxmrMiN302PeW17NmzRxs2bJC/v79atWpldjkuERISYpxDJu5TGTp0qLZu3WpWWS6TdBDG9u3b9ffff6tcuXImVZR3pdQf8sILL6hdu3aSlCP739DQUH355ZeSpCpVqujVV19V5cqVdeLECX3++efatWuX/vzzT73++uumDhjJiT7csLAwxcfHy9vbO9ueI6lOnTrp999/17hx49SyZUv5+BDHeiJaDUCqFi9erH379klKmEJs2LBhxn2VKlXSnXfeqd69e0uSvv/+e9NCdLOnV0uvUqVKmfr806dPlyQ9/vjjuaZjqECBAkanQGKe8plIzcaNG3X+/HlJUvny5XX8+HFdv35dy5cvV6dOnUyuLm9J7fNUuHBhh46r7BQZGalZs2ZJkmrVqqVvv/1Wvr6+kqS77rrLmJbx6tWrWr16td544w0VLFgwR2pLKie+g2bsUx9//HFNmDBBu3bt0q5du1S7du0crwEAAKRt+/btxu23337bOCa66667FBcXZ1wEuW3bNiNE95RAMStSO0bLDedQiWX09dy4ccO4HRISorvuusvVJblMSufBiV9Dw4YNVb58eePf169fl5TQl1OlSpVsr9GVctNn01NeyzfffCNJevjhh007p3Q1Pz8/p+eQntImqTl06JAxAMref2Sz2TR//nwNGTLE5OrynpQ+U4UKFcqxQTGXL1/WxIkTJUllypTR3Llzjee+6667FBISotatW+vEiRPavn27Tp48qTvvvDNHaksqJ76DOTHoJakmTZrIz89P//zzj9asWaOWLVvmeA3IOqZzB5CqxYsXS5K8vLzUp0+fZPc3btxYY8eOVXh4uHGAnZLU1sRJaU3hnTt3qm/fvmrQoIHuuece1alTR+3atdP3339vPGbRokUOU0tNmjRJQUFBxkhNSdq9e7d69+6tevXqKTg4WG3atNHs2bOTXVVur2H06NH68MMPFRISojp16jg8X1L//POPhg8fbqwrExwcrCeeeELjx49XbGys0+3b19pK/J6k9N8vv/yS4dfhzIkTJ7R3715J0qOPPupw37///qsxY8aoefPmql27tmrXrq3mzZtr9OjRunLlSprblqSIiAh17dpVtWrVUv369TVixAhFR0cbr+Pzzz93ePz58+f14Ycfqnnz5qpZs6bq16+vvn37KiIiwuFxid+jadOmaciQIQoODlb9+vW1ZcsWp2vBBQUF6e+//5aUsM5YUFCQunbt6rTu2bNn67HHHjNmUpg7d67D/fbP5kMPPaSzZ89q8ODBqlevnurVq6c33nhDly9f1t9//60BAwYoJCRE9957r1555RWdO3fO6XYysm62/SpiLy8vffzxx/LySvizndqUXGFhYWrVqpVq1qyppk2bavr06dq2bZvTz9OtW7c0depUNW/eXDVq1FCLFi20aNEih/f05MmTadYZHR2tiRMnqmXLlqpVq5bq1aunbt26ae3atckea9/u+PHjtWHDBj377LOqWbOmHn30UeO9Dw8P11NPPWW8hq+//jrZAfXZs2c1fPhwYz3wRx99VGPHjtXVq1cdHmdfq/KZZ57R4sWL9eCDDyo4ONhY0/rmzZuaNGmSWrZsqTp16ig4OFhNmjTRW2+9pbNnz0pKWA+qcePGxjYXL17s8JlO2rYHDx40/u1sitDmzZsrKChITZs2NV6XvQ772oUPPPCABg8erGPHjjn87tK
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9MAAAHeCAYAAAAo1SswAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC8XUlEQVR4nOzdd3xT1f/H8Xe6GG1lVQGRjRQECgUUQRGZKorgYIsgICKKyFAZiqgo4gKU6QAEBSpLVgFRhrKsIsiSIQVkCZQitKyO5PdHf7nfpk3bdN6kfT0fDx+GJr35JCe5vfe87znHYrPZbAIAAAAAAAAAAAAAAAYvswsAAAAAAAAAAAAAAMDdEKYDAAAAAAAAAAAAAJACYToAAAAAAAAAAAAAACkQpgMAAAAAAAAAAAAAkAJhOgAAAAAAAAAAAAAAKRCmAwAAAAAAAAAAAACQAmE6AAAAAAAAAAAAAAApEKYDAAAAAAAAAAAAAJACYToAAAAAAAAAAAAAACkQpgNwSUJCgr777jv16NFDjRo1Uu3atXXvvffqxRdf1LZt21I9fvjw4QoODlZwcLD+/fffPKszLi5OR48ezbPnyyz7e9KrVy/Tavjjjz9Uo0YNPf/885n+3V9//dV4DVOnTs2F6jJvyZIlRk3Lli1Ldf+hQ4cy9Xh3c/ToUaPe4OBg7d6925Q63LHtzWC1WvX33387/Mys/d3mzZs1cOBA3Xvvvapdu7buuusu9ejRQwsXLlRiYqLDY8383Kf8DuakvN6n/vjjjwoODtbrr7+eJ88HAACyJy4uTrNnz1bnzp111113qVatWmrcuLH69Omj8PDwVI/v0aOHgoODdccddxg/S+s42NljPYmz41q7U6dO6cqVK3lckaMWLVooODhYrVu3zva2oqOjFRUV5dJjf/vtN3Xq1El169ZV/fr11bVrV9lstmzXkB29evUyPoN26R3fz58/Xw888IBq166tu+++W+PGjZMknTlzRi+88IIaNGigkJAQtW3bVkeOHMnT15JdufHZNKufxh2+Zxk5ceKEQkJC9Oijj2b6d0+ePGm8t6NGjcqF6jIvo36NlOeuntYPEhMTo7p16xo1O/s7lxfcse3NkvIz9dlnnxnvze+//55ndezevVuvvPKKmjdvrtq1a6tBgwbq3LmzZs2apevXrzs81szPfW72H+XkcYUrDhw4oODgYD3zzDN58nzIfYTpADJ07tw5derUSW+88YYiIiL033//KT4+XufPn9e6devUq1cvjR8/3uwyFR4errZt22rlypVml+K2EhMT9dZbb8lms6l79+5ml5Orjh49qhdffFH9+/c3u5RsWbRokcO/w8LCTKoEW7Zs0eOPP64vv/zS1Dri4+M1YsQI9enTRz/88IPOnz+v+Ph4Xbp0SREREXr99dfVs2fPVCdEeW337t3q0aOH3nnnHVPryEnNmzfXrbfeqkWLFuXpiS8AAMi869ev6+mnn9a4ceO0a9cuXbp0SQkJCYqOjtbmzZs1ePBgvfnmm2aXaYq0jmsvXbqk8ePH68EHH9TFixdNqi7nXL9+XdOnT1fr1q1dCo2vXbum/v37688//9T169d15coVxcTEyGKx5EG1OWPHjh0aM2aMjh07pvj4eF28eFHx8fGSpJEjR+rHH39UbGysbty4oSNHjqhEiRImV+ya/PTZ9KTX8u677+rGjRv5vv/o7NmzGjlypNq3b292KdmyYsUKh36A7777zsRqCjZ36g+ZMGGCOnbsqOXLl+v06dOKj49XbGysdu3apffff19PPPGEoqOjTa0xv/ThJlejRg3Vr19fW7du9YjBXMiYj9kFAHBvcXFxev7557Vv3z5JUufOnfXkk0/K399f27dv14QJExQTE6OZM2eqTp06atu2rSl17tixQ4MHDzbluTNj06ZNkiQ/Pz9Tnn/t2rU6cOCAKlSooHvuuceUGnLaQw89pCZNmkiSihUrZvz8ueee0/Hjx1WuXDmzSsu2hISEVAdc4eHhGjFihAICAkyqqmA6e/asevfuLSnpgDi5ESNG6OWXX5Yk3Xzzzbley/jx47VkyRJJ0p133qkBAwaoXLlyOnz4sD7++GNFRkbqt99+07hx4/TWW2/lej1p6dq1qxISEnTXXXfl2nPk9T7V29tbnTp10sSJE/Xhhx9ycQsAAG5swYIF2rlzpyTp8ccfV9euXVWsWDEdPnxYY8eO1ZkzZ7RgwQK1a9dODRs2lCRNmjRJcXFxHhWeZlZ6x7UffvihFi5caEZZuWLWrFmaOHGiy4//+++/FRsbK0lq2rSp3njjDVmt1lyqLnvSOg/etWuXcXvAgAFq3769ihQp4nDfzTffrJkzZyoxMVElS5bMs5qzIz99Nj3ltezevVsbNmyQv7+/2rVrZ3Y5OSI0NNQ4h0zepzJ8+HBt3brVrLJyTMrBGNu3b9c///yjChUqmFRRwZVWf8gzzzyjjh07SlKe7H9nz56t6dOnS5KqV6+ul19+WdWqVdOJEyf02WefadeuXfr777/16quvmjpwJC/6cMPCwpSYmChvb+9ce46Uunbtqj/++EOffPKJHn74Yfn4EMd6MloPQLqWLl2qvXv3SkqaWmzEiBHGfVWrVtVtt92mfv36SZIWL15sWphu9rRrripTpoypzz9z5kxJ0oMPPphvOoiKFClidA4k5ymfifRs3LhR58+flyRVqlRJx44d09WrV7VixQp17drV5OoKlvQ+T8WKFXPowMpNkZGR+uabbyRJdevW1axZs+Tr6ytJqlixojFdY0xMjNasWaPXXntNRYsWzZPaUsqL76AZ+9QHH3xQEydO1K5du7Rr1y7Vq1cvz2sAAAAZ2759u3H7jTfeMI6JKlasqPj4eONiyG3bthlhuqcEi9mR3jFafjiHSi6zr+fatWvG7dDQUFWsWDGnS8oxaZ0HJ38N99xzjypVqmT8++rVq5KS+nKqV6+e6zXmpPz02fSU1/LVV19Jku6//37Tzilzmp+fn9NzSE9pk/QcOHDAGAhl7z+y2Wz67rvvNGzYMJOrK3jS+kwFBATk2eCYS5cuadKkSZKkcuXKaf78+cZzV6xYUaGhoWrfvr1OnDih7du36+TJk7rtttvypLaU8uI7mBeDX1Jq0aKF/Pz89O+//2rt2rV6+OGH87wG5BymeQeQrqVLl0qSvLy89Nxzz6W6v1mzZho/frzCw8ONA+20pLdmTlprDu/cuVP9+/dX48aNdccdd6h+/frq2LGjFi9ebDxmyZIlDlNOTZ48WcHBwcbITUn6888/1a9fPzVs2FAhISHq0KGDvv3221RXmdtrGDdunN577z2Fhoaqfv36Ds+X0r///qtRo0YZ686EhITooYce0oQJExQXF+d0+/a1uJK/J2n99+uvv2b6dThz4sQJ7dmzR5LUqlUrh/v+++8/vf/++2rTpo3q1aunevXqqU2bNho3bpwuX76c4bYlKSIiQj169FDdunXVqFEjjR49WrGxscbr+Oyzzxwef/78eb333ntq06aN6tSpo0aNGql///6KiIhweFzy9+jLL7/UsGHDFBISokaNGmnLli1O14oLDg7WP//8IylpHbLg4GD16NHDad3ffvutHnjgAWNmhfnz5zvcb/9s3nfffTp79qyGDh2qhg0bqmHDhnrttdd06dIl/fPPPxo4cKBCQ0N15513atCgQTp37pzT7WRmXW37VcVeXl768MMP5eWV9Gc7vam6wsLC1K5dO9WpU0ctW7bUzJkztW3bNqefp4SEBM2YMUNt2rRR7dq11bZtWy1ZssThPT158mSGdcbGxmrSpEl6+OGHVbduXTVs2FA9e/bUunXrUj3Wvt0JEyZow4YNeuKJJ1SnTh21atXKeO/Dw8P16KOPGq/hiy++SHVgffbsWY0aNcpYL7xVq1YaP368YmJiHB5nX8vy8ccf19KlS3XvvfcqJCTEWPP6xo0bmjx5sh5++GHVr19fISEhatGihV5//XWdPXtWUtJ6Uc2aNTO2uXTpUofPdMq2/euvv4x/O5s6tE2bNgoODlbLli2N12Wvw762YZMmTTR06FAdPXrU4XeXLVt
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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B1eX4xRBQUHGMWTSPpUxY8Zo165drirLae68CGPPnj36559/VLZsWRdVlHul1B/y3HPPqUuXLpKULdvfefPmadasWZKkKlWq6OWXX1blypV1+vRpff7559q/f7/+/vtvvfrqqy69YCQ7+nCDg4OVkJAgb2/vLFvHnXr06KE//vhDn376qdq3by8fH+JYT0SrAUjVypUrdejQIUmJQ4iNHTvWeKxSpUoqXbq0Bg4cKEn6/vvvXRaiu3p4tfQqUaKES9c/Z84cSdKjjz6aYzqG8uXLZ3QKJOUpn4nUbNu2TZcuXZIklS9fXhEREbpx44bWrFmjHj16uLi63CW1z1PBggVtOq6yUnh4uL777jtJUt26dTV37lz5+vpKksqVK2cMyxgdHa0NGzbotddeU/78+bOltjtlx3fQFdvURx99VFOnTtX+/fu1f/9+1atXL9trAAAAaduzZ49x+8033zT2icqVK6f4+HjjJMjdu3cbIbqnBIqZkdo+Wk44hkrK0ddz8+ZN43ZQUJDKlSvn7JKcJqXj4KSv4YEHHlD58uWN/9+4cUNSYl9OlSpVsrxGZ8pJn01PeS3ffPONJOnhhx922TGls/n5+dk9hvSUNklNWFiYcQGUtf/IYrFo6dKlGj16tIury31S+kwVKFAg2y6KuXr1qqZNmyZJKlWqlBYvXmysu1y5cgoKClLHjh11+vRp7dmzR2fOnFHp0qWzpbY7Zcd3MDsuerlTy5Yt5efnp3///VcbN25U+/bts70GZB7DuQNI1cqVKyVJXl5eeuGFF5I93rx5c02ePFkhISHGDnZKUpsTJ6U5hfft26dBgwapSZMmqlGjhurXr68uXbro+++/N56zYsUKm6Glpk+frqpVqxpXakrSn3/+qYEDB6phw4aqU6eOOnXqpIULFyY7q9xaw6RJk/T+++8rKChI9evXt1nfnf7991+NGzfOmFemTp06euyxxzRlyhTFxcXZXb51rq2k70lKP7/++qvDr8Oe06dP6+DBg5Kk1q1b2zz233//6YMPPlDbtm1Vr1491atXT23bttWkSZN07dq1NJctSaGhoerdu7fq1q2rxo0ba/z48YqJiTFex+eff27z/EuXLun9999X27ZtVbt2bTVu3FiDBg1SaGiozfOSvkdff/21Ro8erTp16qhx48bauXOn3bngqlatqn/++UdS4jxjVatWVe/eve3WvXDhQj3yyCPGSAqLFy+2edz62XzooYd04cIFjRo1Sg0bNlTDhg312muv6erVq/rnn380bNgwBQUF6b777tPw4cN18eJFu8txZN5s61nEXl5e+uijj+TllfhnO7UhuYKDg9WhQwfVrl1brVq10pw5c7R79267n6fbt29r9uzZatu2rWrVqqV27dppxYoVNu/pmTNn0qwzJiZG06ZNU/v27VW3bl01bNhQffr00aZNm5I917rcKVOmaOvWrercubNq166t1q1bG+99SEiInnjiCeM1fPXVV8l2qC9cuKBx48YZ84G3bt1akydPVnR0tM3zrHNVPvXUU1q5cqUefPBB1alTx5jT+tatW5o+fbrat2+v+vXrq06dOmrZsqXeeOMNXbhwQVLifFDNmzc3lrly5Uqbz/SdbfvXX38Z/7c3RGjbtm1VtWpVtWrVynhd1jqscxc2bdpUo0aN0smTJ21
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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5bzYvNXLli3T4MGD1aJFC91yyy164IEHtHnzZuv6P/74Q507d7b+/eOPPyo4OFjvvfeeRowYUWLo3W7duik4ONj6d2Fhob766iv17du3RO1RUVGXdYxOnjypF154QV26dFFYWJiaN2+unj17atasWcrNzb1g+02bNmnkyJFq27atWrRoobvuukszZsxQWlraBdtu2bJFo0aNUocOHRQWFqbu3bvrzTffvGCu8uLHbtu2berTp4/CwsLUt29f63yvO3fu1GOPPaY2bdqoefPmGjBggP773/+qsLDwoq9v4sSJ6tq1q/XvRYsWWY9tkUOHDumll16yHoOOHTtq7NixF5wrxecKXrx4sR599FGFhYWpQ4cOio+PL7OG3Nxcvfvuu+rWrZuaNWumvn37avXq1aVuW9p8xF27dtXEiROt20yYMMFaQ3BwsBISEiRJR48eVXBwsEaMGGHd9nKPW9FzTp06VW+++aZatWql1q1ba9GiRZKknJwczZ07V3fddZf1NT/33HM6ePBgif0Un483JiZG8+bNsz7mrrvu0rx580q8N3PmzLH+ff/99ys4OFjHjh0r81gWzUncrl07nTlzRlOmTNHtt9+u5s2ba8iQIdq0aVOJ7ctqO8qa97lr164KDg7WuHHjtH37dt13331q0aKFOnXqpP/85z8qLCzUli1bNHToUDVv3lydOnXS9OnTS/2sSOfC7//7v/9Thw4d1KJFCw0bNqzEZ7/IqVOn9MILL1jnPO7evbumTZumM2fOlPp6Bg0apB9//NH62i81b29ubq4+++wzDRw4UK1atVKrVq00dOhQLVy4sER4U9a59scff1x0/7t27dJTTz2l9u3bq1mzZurevbteffVVnTp16qKPk8qeZ7qsOe+LzsXevXurefPmCg0NVefOnTVx4kSdOHGixGvZsmWL9e/g4OASbcHlntOXap/S0tI0depUhYeHq1mzZgoLC1O3bt00ZcqUUtvF8x09etTaXnfv3r3EutTUVL311luKiIhQy5Yt1bJlS0VERGjq1KlKT0+/5L4ladu2bRoxYoRatGihdu3a6eWXX1ZGRob1NRVvC6XL/z4s/v58+umnGjdunJo3b6527dpp8+bNpc7NHRwcrCNHjkg6N/XC+e1Vcf/973911113qVmzZurVq5fmz59fYn3ReXPHHXfo1KlTeu6559SmTRu1adNGEyZMUFpamo4cOaLRo0erVatWatu2rZ5++mklJiaWup8rmee86DvZzs5O06dPl53duZ/Cvv/++zIfs2DBAuv3dLdu3fT5559ry5Yt1ucu/hnLz8/XRx99pIiICIWFhalXr15avHhxiWN6sXaySEZGhubMmaPevXurRYsWatOmjR544AFFRkZesG3RfmfNmqVff/1VgwcPtn6Wi479ypUr1a9fP+tr+OSTTy4If69XW1b8c966dWs1b95cXbt21YsvvmhtVy527SRd+N7u3bvX+ndpUy9FREQoODhY3bp1s76uy20nli5dan3MyJEjrWF9kerVq2vGjBn67rvvtGnTpkuG9UXfReHh4SWWlzXn/eVcyxV9Zouuq7Zt26bg4OASbf71ev9Ku1Yu3paePn1as2fPVpcuXazXRT/99NMFxyEmJkaPP/64WrdurVtuuUXPPvusEhMTrceneO0BAQHWGzL
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x800 with 1 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjTklEQVR4nOzdd5gV5f034M9SpVijQWOvxIgoajT2FqzB3hV71KjYe+89UaOJGo3Bigh2RY2VX6zYC4ooiIoVROl99/0D97y7sMCyLJwt931dXp7dMzvne87MHGaezzzPU1JWVlYWAAAAAAAAACBNil0AAAAAAAAAANQVQnQAAAAAAAAA+IUQHQAAAAAAAAB+IUQHAAAAAAAAgF8I0QEAAAAAAADgF0J0AAAAAAAAAPiFEB0AAAAAAAAAfiFEBwAAAAAAAIBfCNEBAAAAAAAA4BdCdKDOmjJlSu6///507do1G2ywQTp06JBNNtkkxx57bF599dUZlj/jjDPSvn37tG/fPt999918q3PSpEn5/PPP59vrzanyz+Tggw8uWg1vv/12fvvb3+Yvf/nLHP/t66+/XngP//znP+dBdXPuwQcfLNT0yCOPzPD8wIED52j5uuT111/Pcccdl0033TQdOnRIp06dsvPOO+faa6/NqFGjil3eLE3/udemrl27pn379vnd735X5fPvv/9+Tj311Gy55Zbp0KFD1l133ey99975z3/+kwkTJlRatpj79Lz8jLbaaqu0b98+nTt3nmevUdGAAQPSvn37HHLIIfPl9QAAZmfSpEnp3r179t5776y//vpZY401suGGG+awww5Lnz59Zli+qnPMmZ0rzu58tK4rLS3NZ599VuVzX3/9dcaOHTufK6qsNs9lR4wYkeHDh1dr2TfeeCN77bVX1lprrayzzjrZd999U1ZWNtc1zI2DDz64sA+Wm9U1bY8ePbLtttumQ4cO+cMf/pDLL788SfLtt9/mmGOOybrrrpuOHTtmhx12yKBBg+bre5lb82LfLFYbTV04zmbnq6++SseOHbPTTjvN8d8OHTq08NmeffbZ86C6OTe7a//pr8/rYvvXzHz88cc57bTTsuWWW2bNNdfM2muvnR122CGXXnppvv/++2KXN0vz8liYXdv0oEGDct5556Vz587p2LFjOnXqlF122SU33HBDRo4cWWnZYu7TxWxfq20jRoxIhw4dsuOOO2bSpEnz5TVpWIToQJ30ww8/ZK+99sq5556bfv365eeff87kyZMzbNiwPPPMMzn44INz5ZVXFrvM9OnTJzvssEMef/zxYpdSZ02dOjUXXnhhysrKsv/++xe7nHnq888/z7HHHpujjjqq2KXUyB133JEDDzwwTz/9dH744YdMnjw548aNy4ABA3LzzTdn1113zbBhw4pd5gy+//77nHXWWdl5552L8vrXXntt9txzzzz66KP55ptvMnny5IwZMybvvvturrjiiuy+++4ZMWJEUWorV9/3zar89re/zTrrrJNXXnmlzt+cAgA0fBMmTMiBBx6Yyy+/PO+++25GjhyZKVOmZMSIEXnppZdy4okn5vzzzy92mUXx8ssvZ7fddsttt91W6fcjR47MlVdeme222y4//fRTkaqrPRMmTMjNN9+czp07VyssHj9+fI466qi89957mTBhQsaOHZvRo0enpKRkPlRbO956661ccMEFGTJkSCZPnpyffvopkydPTpKcddZZefbZZzNmzJhMnDgxgwYNyqKLLlrkiqunIe2b9em9XHrppZk4cWKDbzsqdhvG3HrmmWey++6755FHHsk333yTSZMmZfz48Rk0aFDuvPPO7LTTTjO9aaqYin0s3Hvvvdlpp53Ss2fPfPnll5k4cWLGjRuXjz/+ODfeeGN22mmnonfSqu/7ZlUWW2yxbLfddvnss89mOA+B6mhW7AIApjdp0qT85S9/Sf/+/ZMke++9d/bYY4+0adMmr732Wq699tqMHj06t99+e9Zcc83ssMMORanzrbfeyoknnliU154Tffv2TZK0aNGiKK//9NNPZ8CAAVluueWy8cYbF6WG2rb99ttno402SpIsvPDChd8feeSR+eKLL7L00ksXq7QaGzZsWK655pokycorr5yTTz45q6yySkaOHJlbb701//3vfzN06NBcd911ufTSS4tcbWVnnHFGXnnllaK8dvfu3XPzzTcnSVZbbbWccMIJWWWVVfLVV1/lhhtuyLvvvpvPPvssp512WlFP1ufHvtmzZ89MnTo1TZs2nWevMb199903b7/9dv72t79lxx13TLNmTm0BgOK477778s477yRJdtttt+y7775ZeOGF8+mnn+aSSy7Jt99+m/vuuy9dunTJeuutlyS5/vrrM2nSpHoVms6p77//PoceemiSaTdBVnT11VenV69exShrnvjPf/6T6667rtrLf/bZZxkzZkySZNNNN825556b0tLSeVTd3JnZNfC7775beHz00Udn5513TqtWrSo9t8QSS+T222/P1KlTs9hii823mudGQ9o368t7ef/99/PCCy+kTZs26dKlS7HLqRWdOnUqtMm1bdu28PtitmHMrUmTJuX888/P1KlT8+tf/zqnn3561lhjjUyYMCH33Xdf7rvvvvz888+55JJL0r1792KXW0kxj4VnnnkmF154YZJk6aWXzoknnpiOHTtm2LBh+de//pW+ffvmu+++S7du3fLoo4+mSZPi9H2dH/tmMc599t133zz22GP517/+lf322y+LLLLIfHtt6j8tjUCd89BDD+XDDz9MMm0YsTPPPLPw3Morr5xlllkmRxxxRJLkgQceKFqIXuwh1qprySWXLOrr33777UmS7bbbrsE0DrVq1arQMFBRfdknqvLOO+8UhjXaf//9s/XWWxee++tf/5pNNtkkI0eOrHIqhWIr1uc+cuTIXH/99UmmXQT16NGjcGG8/PLLF4bC/+qrr/Laa69l6NChWWaZZYpS6/z4jJZYYol5/hrT22qrrdKiRYt89913efrpp7PjjjvO9xoAAJLktddeKzw+99xz07p16yTTzgsnT56cE044IUny6quvFkL0+hIozo1ZnYfW5+unqszp+xk/fnzhcadOnbL88svXdkm1ZmbXwBXfw8Ybb5wVVlih8PO4ceOSTGvHWW211eZ5jbWpIe2b9eW9/Pvf/06SbLHFFoXvz/quRYsWVbbJ1ZdtUpVPP/00P/74Y5KkS5cu+dOf/lR47sILL8xbb72VTz/9NP369ZvvN9nPTrE+9ylTpuSyyy5LMu1minvuuSdLLbVUkv/fdrT//vvnnXfeyeDBg/P2228XzhPmt/nxGRXj3GedddbJr3/96/zwww+5//77C7kCVIfh3IE656GHHkqSNGnSJEceeeQMz2+++ea58sor06dPn8JJ9szMav6Ymc1T88477+Soo47KhhtumN/97ndZZ511sueee+aBBx4oLPPggw9WGl7qxhtvTPv27fPggw8Wfvfee+/liCOOyHrrrZeOHTtml112yT333DPDneXlNVx++eW57LLL0qlTp6yzzjqVXm963333Xc4+++zC/MsdO3bM9ttvn2uvvXaG+V2mn2+r4mcys/9ef/31OX4fVfnqq6/ywQcfJEn++Mc/Vnru559/zhVXXJFtttkma6+9dtZee+1ss802ufzyy6s993a/fv3StWvXrLXWWtlggw1y3nnnZcyYMYX3ccMNN1RaftiwYbnsssuyzTbbZM0118wGG2yQo446Kv369au0XMXP6Lbbbsspp5ySjh07ZoMNNsjLL79c5Xxw7du3z5dffplk2vxK7du3T9euXaus+5577sm2225bGEmhR48elZ4v3zc322yzfP/99zn55JOz3nrrZb311svpp5+ekSNH5ssvv0y3bt3SqVOn/P73v8/xxx+fH374ocr1zGwupooqjlRw66235sknn8zEiRMLzz333HN59dVXK+3jFT+H/v375/rrr88WW2yRNddcM7vttlueffbZGV5n1KhRufzyywv77mabbZbzzjtvhtrLl7366qsLn9VGG22UQw45JC+99FJhma222qp
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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/tixY7p+/bok6dFHH9Vbb70ls9mcQ9VlT3rnwLt37zZuDxgwQG3btlVAQIDNfSVLltSsWbOUlJSk4sWL51rN2eFO+2Z+eS979+7V5s2bFRQUpNatW7u6HKcIDQ01+uQKFixo/N6VfRjZlZCQoLfffltJSUm688479dprr6latWqKi4vTwoULtXDhQv3zzz8aN26cwsLCXF2uDVd+FzZs2KAxY8ZIksqUKaMhQ4YoJCRE58+f15dffqnIyEidOXNGgwcP1qpVq+Tl5Zqxsbmxb7ri2KdLly767rvv9OWXX+rZZ59V0aJFc+214f7oiQSQ5yxfvlz79++XlDxN2ciRI437KlWqpLvvvlt9+/aVJC1dutRlIburp3BzVKlSpVz6+rNmzZIkPfHEE27TeRQQEGB0HKSUX/YJe3bt2mVMm9S1a1c1bdrUuO/jjz/WI488oitXrthdqsHVXPW5X7lyRVOmTJGUfJK0YMEC48S5XLlyxlT7f/31l3bs2KGTJ0/q7rvvdkmtufEZlSxZMsdfI7UmTZrIz89PZ86c0fr169WqVatcrwEAAECSduzYYdx+6623FBgYKCn5uDAxMVGvvPKKJGn79u1GyJ5fAsfsuN1xaH4+f7Ins+8nNjbWuB0aGqpy5co5uySnSe8cOOV7aNCggcqXL2/8fPPmTUnJ/ThVqlTJ8RqdyZ32zfzyXr7++mtJUqNGjYy/n/mdn5+f3T65/NIm9vz++++6ePGiJKl169Z68sknjfvGjBmjX3/9Vb///ruioqJy/SL8jLjqc79165bee+89SckXW8ybN0+lS5eW9G/fUdeuXbVr1y5FR0frt99+M44TcltufEauOPapXbu27rzzTp07d06LFy82cgXAGZguHkCes3z5ckmSl5eX+vXrl+b+hg0bauLEiYqIiDAOwtNzu/Vr0lsnZ9euXerfv7/q1aunBx54QLVr19YzzzyjpUuXGo9ZtmyZzfRVU6dOVdWqVbVs2TLjd3v27FHfvn314IMPKiQkRO3atdO8efPSXJlurWHChAl67733FBoaqtq1a9u8XmpnzpzRqFGjjPWfQ0JC1KJFC02aNCnN+jKp1/tK+Zmk99/PP/+c6fdhz19//aV9+/ZJkv773//a3PfPP//o/fff1+OPP65atWqpVq1aevzxxzVhwgSH1/6OiopS9+7dVbNmTdWtW1ejR4/W9evXjffx2Wef2Tz+/Pnzeu+99/T444+rRo0aqlu3rvr376+oqCibx6X8jL766isNHz5cISEhqlu3rrZu3Wp3PbqqVavqzz//lJS8vlPVqlXVvXt3u3XPmzdPzZs3N2ZiWLBggc391n3zscce09mzZzVs2DA9+OCDevDBB/Xaa6/pypUr+vPPPzV48GCFhobqoYce0ssvv6xz587Z3U56a0GllHKmg5kzZ2rt2rWKj4837vvhhx+0fft2m3085edw4MABTZkyRY0aNVKNGjX01FNPaePGjWle5+rVq5owYYKx7z722GMaPXp0mtqtj/3www+Nz6p+/frq2bOnfvrpJ+MxTZo0sQn+q1atqiZNmqSp74cfflDnzp1VvXp1NWrUSP/8848kacuWLerRo4fq16+v6tWrq27duurZs6dxtfntrF+/3ug46tatm82V6ZIUFBSk9957T99++61++eWXDAP
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACuSElEQVR4nOzdeZyN5f/H8feZFUOWrMkuEsZWCZUtKRKSfV9ClmRJSSoiabOkaNNkH2SLQWT5FolkX2OQnUEYZjPn/P4Y5/7NmTmzL2d7PR+PHp05y30+59z3fdz39b6v6zJZLBaLAAAAAAAAAAAAAACAvBxdAAAAAAAAAAAAAAAAzoIQHQAAAAAAAAAAAACAewjRAQAAAAAAAAAAAAC4hxAdAAAAAAAAAAAAAIB7CNEBAAAAAAAAAAAAALiHEB0AAAAAAAAAAAAAgHsI0QEAAAAAAAAAAAAAuIcQHQAAAAAAAAAAAACAewjRAQAAAAAAAAAAAAC4hxAdgNO6e/euFi1apK5du6p27dqqUqWKnnzySQ0aNEh//PFHoue/9dZbqlixoipWrKiLFy9mW53R0dE6efJktr1fWlm/kx49ejishr///lsPP/ywXn311TS/9s8//zQ+w1dffZUF1aXd0qVLjZpWrFiR6PFjx46l6fnO5M8//9Rrr72mp556SlWqVFGNGjXUsmVLTZ48WTdv3nR0eclK+L1npq5du6pixYp65JFH7D6+b98+vfHGG2rYsKGqVKmiWrVqqX379vrhhx8UGRlp81xHbtNZ+R01atRIFStWVJMmTbLsPeI7cuSIKlasqJ49e2bL+wEAAKQkOjpaQUFBat++vR5//HFVrlxZderUUe/evRUSEpLo+faOMZM6VkzpeNTZmc1mHT9+3O5j586d0+3bt7O5IluZeSx77do1hYWFpeq5O3fuVLt27VStWjXVrFlTHTt2lMViyXANGdGjRw9jG7RK7px2wYIFatq0qapUqaInnnhCEydOlCRduHBBAwcOVK1atRQYGKhmzZrpxIkT2fpZMiortk1HtdE4w36WkjNnzigwMFAvvvhiml979uxZ47sdPXp0FlSXdimd+yc8P3fG9q+kHD58WCNHjlTDhg1VtWpVVa9eXc2aNdOECRN06dIlR5eXrKzcF1Jqmz5x4oTeffddNWnSRIGBgapRo4ZatWqlL774Qjdu3LB5riO3aUe2r2W2a9euqUqVKmrevLmio6Oz5T3hXgjRATily5cvq127dhozZox27Nih//77TzExMbpy5YrWr1+vHj16aNKkSY4uUyEhIWrWrJlWrVrl6FKcVmxsrMaOHSuLxaLOnTs7upwsdfLkSQ0aNEj9+/d3dCnp8uOPP6pbt25at26dLl++rJiYGN25c0dHjhzRzJkz1bp1a125csXRZSZy6dIlvf3222rZsqVD3n/y5Mlq27atVq5cqfPnzysmJkbh4eHas2ePPvroI7Vp00bXrl1zSG1Wrr5t2vPwww+rZs2a2rZtm9NfnAIAANxfZGSkunXrpokTJ2rPnj26ceOG7t69q2vXrun333/X0KFD9d577zm6TIfYunWrXnrpJX333Xc299+4cUOTJk3Sc889p+vXrzuouswTGRmpmTNnqkmTJqkKiyMiItS/f3/t3btXkZGRun37tm7duiWTyZQN1WaOXbt26f3339epU6cUExOj69evKyYmRpL09ttva8OGDQoPD1dUVJROnDih/PnzO7ji1HGnbdOVPsuECRMUFRXl9m1Hjm7DyKj169erTZs2WrFihc6fP6/o6GhFREToxIkTmj17tl588cUkL5pyJEfvC/Pnz9eLL76o4OBg/fvvv4qKitKdO3d0+PBhTZ8+XS+++KLDO2m5+rZpT4ECBfTcc8/p+PHjiY5DgNTwcXQBAJBQdHS0Xn31VR08eFCS1L59e7388ssKCAjQ9u3bNXnyZN26dUuzZs1S1apV1axZM4fUuWvXLg0dOtQh750WW7ZskST5+fk55P3XrVunI0eOqGTJkqpXr55Dashszz//vOrWrStJyps3r3F/v379dPr0aRUvXtxRpaXblStX9Omnn0qSypUrp+HDh6t8+fK6ceOGvv32W/3yyy86e/aspkyZogkTJji4WltvvfWWtm3b5pD3DgoK0syZMyVJFSpU0Ouvv67y5cvrzJkz+uKLL7Rnzx4dP35cI0eOdOjBenZsm8HBwYqNjZW3t3eWvUdCHTt21N9//63PP/9czZs3l48Ph7YAAMAxFi5cqN27d0uSXnrpJXXs2FF58+bVP//8o/Hjx+vChQtauHChWrRooUcffVSSNHXqVEVHR7tUaJpWly5dUq9evSTFXQQZ3yeffKLFixc7oqws8cMPP2jKlCmpfv7x48cVHh4uSXrqqac0ZswYmc3mLKouY5I6B96zZ49xe8CAAWrZsqVy5sxp81ihQoU0a9YsxcbGqkCBAtlWc0a407bpKp9l37592rRpkwICAtSiRQtHl5MpatSoYbTJ5c6d27jfkW0YGRUdHa333ntPsbGxKly4sN58801VrlxZkZGRWrhwoRYuXKj//vtP48ePV1BQkKPLteHIfWH9+vUaO3asJKl48eIaOnSoAgMDdeXKFX3zzTfasmWLLl68qMGDB2vlypXy8nJM39fs2DYdcezTsWNH/fzzz/rmm2/UqVMn5cuXL9veG66PlkYATmfZsmU6cOCApLhhxEaNGmU8Vq5cOT344IPq27evJOmnn35yWIju6CHWUqto0aIOff9Zs2ZJkp577jm3aRzKmTOn0TAQn6tsE/bs3r3bGNaoc+fOaty4sfHYZ599pieffFI3btywO5WCoznqe79x44amTp0qKe4kaMGCBcaJcalSpYyh8M+cOaPt27fr7NmzevDBBx1Sa3Z8R4UKFcry90ioUaNG8vPz08WLF7Vu3To1b94822sAAACQpO3btxu3x4wZo1y5ckmKOy6MiYnR66+/Lkn6448/jBDdVQLFjEjuONSVz5/sSevniYiIMG7XqFFDpUqVyuySMk1S58DxP0O9evVUunRp4+87d+5IimvHqVChQpbXmJncadt0lc/y/fffS5IaNGhg/H66Oj8/P7ttcq6yTuz5559/dPXqVUlSixYt9MILLxiPjR07Vrt27dI///yjHTt2ZPtF9ilx1Pd+9+5dffjhh5LiLqaYN2+eihUrJun/2446d+6s3bt3KzQ0VH///bdxnJDdsuM7csSxT82aNVW4cGFdvnxZixYtMnIFIDUYzh2A01m2bJkkycvLS/369Uv0eP369TVp0iSFhIQYB9lJSW7+mKTmqdm9e7f69++vOnXq6JFHHlHNmjXVtm1b/fTTT8Zzli5dajO81PTp01WxYkUtXbrUuG/v3r3q27evHn30UQUGBqpVq1aaN29eoivLrTVMnDhRH374oWrUqKGaNWvavF9CFy9e1OjRo435lwMDA/X8889r8uTJieZ3STjfVvzvJKn//vzzzzR/DnvOnDmj/fv3S5KeeeYZm8f+++8/ffTRR3r22WdVvXp1Va9eXc8++6wmTpyY6rm3d+zYoa5du6patWqqXbu23n33XYWHhxuf44svvrB5/pUrV/Thhx/q2WefVdWqVVW7dm31799fO3bssHle/O/ou+++04gRIxQYGKjatWtr69atdueDq1ixov79919JcfMrVaxYUV27drVb97x589S0aVNjJIUFCxbYPG7dNp9++mldunRJw4cP16OPPqpHH31Ub775pm7cuKF///1XgwcPVo0aNfTYY49pyJAhunz5st3lJDUXU3zxRyr49ttvtWbNGkVFRRmP/frrr/rjjz9stvH438PBgwc1depUNWjQQFWrVtVLL72kDRs2JHqfmzdvauLEica2+/TTT+vdd99NVLv1uZ988onxXdWtW1c9e/bU77//bjynUaNGNsF+xYoV1ahRo0T1/frrr+rQoYOqVKmiBg0a6L///pMkbd68Wd27d1fdunVVpUoV1a5dWz179jSuFk/OunXrjIahLl262FxZLkkBAQH68MMP9eOPP+qvv/5KMUBPal6opOZFu3HjhiZ
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACrnElEQVR4nOzdeZyN5f/H8feZFWOPkLJHslMJyZaEbJGlLFlCJFkKlcoW2lCEFJN9GDuDyPItSyPZ1xhk33ezmXN+f0zn/s0xZ8w+Z3s9Hw+PzpzlPp9z7vs+3ff1vq/rMlksFosAAAAAAAAAAAAAAIC8HF0AAAAAAAAAAAAAAADOghAdAAAAAAAAAAAAAID/EKIDAAAAAAAAAAAAAPAfQnQAAAAAAAAAAAAAAP5DiA4AAAAAAAAAAAAAwH8I0QEAAAAAAAAAAAAA+A8hOgAAAAAAAAAAAAAA/yFEBwAAAAAAAAAAAADgP4ToAAAAAAAAAAAAAAD8hxAdgNO6f/++FixYoA4dOqhq1aoqW7asXnjhBb377rvatm1bvOcPHjxYpUqVUqlSpXThwoUMqzMqKkonTpzIsPdLLut38tZbbzmshr///ltPPfWU3nnnnWS/9s8//zQ+ww8//JAO1SXf4sWLjZqWLVsW7/GjR48m6/nO5M8//9R7772nmjVrqmzZsqpUqZKaNWumcePG6datW44u76Ee/N7TUocOHVSqVCk9/fTTdh/fu3evPvjgA9WpU0dly5ZVlSpV1KZNG82YMUMRERE2z3XkNp2e31HdunVVqlQp1a9fP93eI67Dhw+rVKlS6ty5c4a8HwAAQGKioqIUGBioNm3a6LnnnlOZMmVUrVo1de3aVSEhIfGeb+8YM6FjxcSOR52d2WzWsWPH7D529uxZ3b17N4MrspWWx7LXrl3TlStXkvTcHTt2qHXr1qpQoYIqV66sdu3ayWKxpLqG1HjrrbeMbdDqYee08+bNU4MGDVS2bFk9//zzGj16tCTp/Pnz6t27t6pUqaLy5curUaNGOn78eIZ+ltRKj23TUW00zrCfJeb06dMqX768mjZtmuzXnjlzxvhuP/7443SoLvkSO/d/8PzcGdu/EnLo0CF9+OGHqlOnjsqVK6eKFSuqUaNGGjVqlC5evOjo8h4qPfeFxNqmjx8/rk8//VT169dX+fLlValSJTVv3lzff/+9bt68afNcR27TjmxfS2vXrl1T2bJl1bhxY0VFRWXIe8K9EKIDcEqXLl1S69atNXToUIWGhurGjRuKjo7W5cuXtW7dOr311lsaO3aso8tUSEiIGjVqpJUrVzq6FKcVExOjYcOGyWKx6M0333R0OenqxIkTevfdd9WzZ09Hl5Iiv/zyizp27Ki1a9fq0qVLio6O1r1793T48GFNmTJFLVq00OXLlx1dZjwXL17URx99pGbNmjnk/ceNG6fXX39dy5cv17lz5xQdHa07d+5o9+7dGjNmjFq2bKlr1645pDYrV9827XnqqadUuXJlbd261ekvTgEAAO4vIiJCHTt21OjRo7V7927dvHlT9+/f17Vr1/THH3+oX79++uyzzxxdpkNs2bJFr732mn766Seb+2/evKmxY8fqlVde0fXr1x1UXdqJiIjQlClTVL9+/SSFxeHh4erZs6f27NmjiIgI3b17V7dv35bJZMqAatPGzp079fnnn+vkyZOKjo7W9evXFR0dLUn66KOPtH79et25c0eRkZE6fvy4cuXK5eCKk8adtk1X+iyjRo1SZGSk27cdOboNI7XWrVunli1batmyZTp37pyioqIUHh6u48ePa+bMmWratGmCF005kqP3hblz56pp06YKCgrSv//+q8jISN27d0+HDh3SxIkT1bRpU4d30nL1bdOe3Llz65VXXtGxY8fiHYcASeHj6AIA4EFRUVF65513dODAAUlSmzZt1KpVKwUEBGj79u0aN26cbt++renTp6tcuXJq1KiRQ+rcuXOn+vXr55D3To7NmzdLkvz8/Bzy/mvXrtXhw4dVqFAh1ahRwyE1pLWGDRuqevXqkqQcOXIY9/fo0UOnTp1SwYIFHVVail2+fFlff/21JKl48eIaMGCASpQooZs3b2ratGn69ddfdebMGY0fP16jRo1ycLW2Bg8erK1btzrkvQMDAzVlyhRJUsmSJfX++++rRIkSOn36tL7//nvt3r1bx44d04cffujQg/WM2DaDgoIUExMjb2/vdHuPB7Vr105///23vv32WzVu3Fg+PhzaAgAAx5g/f7527dolSXrttdfUrl075ciRQ//8849Gjhyp8+fPa/78+WrSpImeeeYZSdKECRMUFRXlUqFpcl28eFFdunSRFHsRZFxfffWVFi5c6Iiy0sWMGTM0fvz4JD//2LFjunPnjiSpZs2aGjp0qMxmczpVlzoJnQPv3r3buN2rVy81a9ZMmTNntnksb968mj59umJiYpQ7d+4Mqzk13GnbdJXPsnfvXm3cuFEBAQFq0qSJo8tJE5UqVTLa5LJmzWrc78g2jNSKiorSZ599ppiYGD366KMaNGiQypQpo4iICM2fP1/z58/XjRs3NHLkSAUGBjq6XBuO3BfWrVunYcOGSZIKFiyofv36qXz58rp8+bJ+/PFHbd68WRcuXFCfPn20fPlyeXk5pu9rRmybjjj2adeunVasWKEff/xRb7zxhnLmzJlh7w3XR0sjAKezZMkS7d+/X1LsMGJDhgwxHitevLgef/xxde/eXZK0aNEih4Xojh5iLany58/v0PefPn26JOmVV15xm8ahzJkzGw0DcbnKNmHPrl27jGGN3nzzTdWrV8947JtvvtELL7ygmzdv2p1KwdEc9b3fvHlTEyZMkBR7EjRv3jzjxLhw4cLGUPinT5/W9u3bdebMGT3++OMOqTUjvqO8efOm+3s8qG7duvLz89OFCxe0du1aNW7cOMNrAAAAkKTt27cbt4cOHaosWbJIij0ujI6O1vvvvy9J2rZtmxGiu0qgmBoPOw515fMne5L7ecLDw43blSpVUuHChdO6pDST0Dlw3M9Qo0YNFSlSxPj73r17kmLbcUqWLJnuNaYld9o2XeWz/Pzzz5Kk2rVrG7+frs7Pz89um5yrrBN7/vnnH129elWS1KRJE7366qvGY8OGDdPOnTv1zz//KDQ0NMMvsk+Mo773+/fv64svvpAUezHFnDlzVKBAAUn/33b05ptvateuXQoLC9Pff/9tHCdktIz4jhxx7FO5cmU9+uijunTpkhYsWGDkCkBSMJw7AKezZMkSSZKXl5d69OgR7/FatWpp7NixCgkJMQ6yE/Kw+WMSmqdm165d6tmzp6pVq6ann35alStX1uuvv65FixYZz1m8eLHN8FITJ05UqVKltHjxYuO+PXv2qHv37nrmmWdUvnx5NW/eXHPmzIl3Zbm1htGjR+uLL75QpUqVVLlyZZv3e9CFCxf08ccfG/Mvly9fXg0bNtS4cePize/y4Hxbcb+ThP79+eefyf4c9pw+fVr79u2TJL300ks2j924cUNjxozRyy+/rIoVK6pixYp6+eWXNXr06CTPvR0aGqoOHTqoQoUKqlq1qj799FPduXPH+Bzff/+9zfMvX76sL774Qi+//LLKlSunqlWrqmfPngoNDbV5Xtzv6KefftLAgQNVvnx5Va1aVVu2bLE7H1ypUqX077//SoqdX6lUqVLq0KGD3brnzJmjBg0aGCMpzJs3z+Zx67b54osv6uLFixowYICeeeYZPfPMMxo0aJBu3rypf//9V3369FGlSpX07LPPqm/fvrp06ZLd5SQ0F1NccUcqmDZtmlavXq3IyEjjsd9++03btm2z2cbjfg8HDhzQhAkTVLt2bZUrV06vvfaa1q9fH+99bt26pdGjRxvb7osvvqhPP/00Xu3W53711VfGd1W9enV17txZf/zxh/GcunXr2gT7pUqVUt26dePV99tvv6lt27YqW7asateurRs3bkiSNm3apE6dOql69eoqW7asqlatqs6dOxtXiz/M2rVrjYah9u3b21xZLkkBAQH64osv9Msvv+ivv/5KNEBPaF6ohOZFu3nzpka
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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R4+W2WxOpeqSJ75z4AMHDhi3+/XrpxYtWihz5sw2j+XNm1dz5sxRdHS0cuXKlWY1J4c77Zvp5bMcPHhQ27Ztk5+fn5o1a+bsclJElSpVjDa5rFmzGvc7sw0juSIjIzVmzBhFR0crX758GjZsmMqXL6/w8HAtWbJES5Ys0b///qvx48crICDA2eXacOZ3YfPmzRo7dqwkqVChQho0aJD8/f117do1ffPNNwoKCtLly5c1YMAArVmzRh4ezun7mhb7pjOOfdq3b68ff/xR33zzjTp06KAcOXKk2Xsj/aOlEYDL+eGHH3T48GFJMcOIjRgxwnisVKlSKly4sHr37i1JWrFihdNCdGcPseaoAgUKOPX958yZI0l68cUX3aZxKHPmzEbDQGzpZZ+wZ//+/cawRh07dlSDBg2Mxz777DM999xzunXrlt2pFJzNWev91q1bmjZtmqSYk6DFixcbJ8bFihUzhsI/f/68du/erQsXLqhw4cJOqTUt1lHevHlT/T0eVr9+ffn4+Ojy5cvatGmTmjZtmuY1AAAASNLu3buN26NHj1aWLFkkxRwXRkVF6e2335Yk7dq1ywjR00ugmByPOg5Nz+dP9iT284SFhRm3q1SpomLFiqV0SSkmvnPg2J/h2WefVfHixY2/79+/LymmHadMmTKpXmNKcqd9M718lu+++06SVLduXeP3M73z8fGx2yaXXraJPadOndKNGzckSc2aNdPLL79sPDZ27Fjt27dPp06d0p49e9L8IvuEOGu9P3jwQB999JGkmIspFi5cqIIFC0r6/7ajjh07av/+/QoODtaff/5pHCektbRYR8449qlatary5cunq1evatmyZUauADiC4dwBuJwffvhBkuTh4aE+ffrEebxOnTqaPHmy1q9fbxxkx+dR88fEN0/N/v371bdvX9WsWVPlypVT1apV9dprr2nFihXGc1auXGkzvNT06dNVtmxZrVy50rjvr7/+Uu/evfX000/L399fLVu21MKFC+NcWW6tYeLEifroo49UpUoVVa1a1eb9Hnb58mWNGjXKmH/Z399fL730kqZMmRJnfpeH59uKvU7i++/3339P9Oew5/z58zp06JAkqWHDhjaP/fvvv5o0aZJeeOEFVa5cWZUrV9YLL7ygiRMnOjz39p49e9S5c2dVqlRJNWrU0Pvvv6+7d+8an+PLL7+0ef61a9f00Ucf6YUXXlDFihVVo0YN9e3bV3v27LF5Xux19O2332ro0KHy9/dXjRo1tGPHDrvzwZUtW1Z///23pJj5lcqWLavOnTvbrXvhwoVq3LixMZLC4sWLbR637pvPP/+8rly5oiFDhujpp5/W008/rWHDhunWrVv6+++/NWDAAFWpUkXPPPOMBg4cqKtXr9pdTnxzMcUWe6SC2bNna8OGDYqIiDAe+/nnn7Vr1y6bfTz2ejhy5IimTZumunXrqmLFimrVqpW2bNkS531u376tiRMnGvvu888/r/fffz9O7dbnfvLJJ8a6qlWrlrp3767ffvvNeE79+vVtgv2yZcuqfv36cer7+eef1a5dO1WoUEF169bVv//+K0navn27unbtqlq1aqlChQqqUaOGunfvblwt/iibNm0yGoY6depkc2W5JPn5+emjjz7S999/rz/++CPBAD2+eaHimxft1q1bmjhxoho
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC5/0lEQVR4nOzdeZyN5f/H8feZFWNfGrIvUfalCClLCAkp+072JUshyRJJKZRCpIksYydrZPkWiUR2YozsexjMYs75/TGd+zfH7Ot95szr+Xj06Djnnvt8zrnve+a+r/d9XZfFZrPZBAAAAAAAAAAAAAAA5GZ2AQAAAAAAAAAAAAAAOAtCdAAAAAAAAAAAAAAA/kOIDgAAAAAAAAAAAADAfwjRAQAAAAAAAAAAAAD4DyE6AAAAAAAAAAAAAAD/IUQHAAAAAAAAAAAAAOA/hOgAAAAAAAAAAAAAAPyHEB0AAAAAAAAAAAAAgP8QogMAAAAAAAAAAAAA8B9CdABO69GjR1q6dKk6duyoatWqqWzZsnrhhRfUv39//fbbb1GWHzFihEqVKqVSpUrpypUrqVZnaGiozp49m2rvl1D276RLly6m1fDnn3/q6aefVp8+fRL8s7///rvxGb7++usUqC7hVq5cadS0Zs2aKK+fOnUqQcs7k99//10DBw5UrVq1VLZsWVWqVEnNmjXT1KlTdffuXbPLi9Xj33ty6tixo0qVKqXSpUtH+/qhQ4f0zjvvqE6dOipbtqyqVKmi1q1b67vvvlNwcLDDsmbu0yn5HdWtW1elSpVS/fr1U+w9Ijtx4oRKlSqlrl27psr7AQAAxCU0NFR+fn5q3bq1qlatqjJlyqh69erq3r27NmzYEGX56M4xYzpXjOt81NlZrVadPn062tcuXryo+/fvp3JFjpLzXPbWrVu6ceNGvJbdt2+fWrVqpQoVKqhy5cpq27atbDZbkmtIii5duhj7oF1s17SLFy9Ww4YNVbZsWT3//POaNGmSJOny5cvq16+fqlSpovLly6tx48Y6c+ZMqn6WpEqJfdOsNhpnOM7icv78eZUvX16vvfZagn/2woULxnc7atSoFKgu4eK69n/8+twZ279icvz4cb377ruqU6eOypUrp4oVK6px48aaOHGirl69anZ5sUrJYyGutukzZ87ogw8+UP369VW+fHlVqlRJzZs315dffqk7d+44LGvmPm1m+1pyu3XrlsqWLasmTZooNDQ0Vd4TroUQHYBTunbtmlq1aqXRo0dr7969+vfffxUWFqbr169ry5Yt6tKliyZPnmx2mdqwYYMaN26sdevWmV2K0woPD9e4ceNks9nUvn17s8tJUWfPnlX//v3Vu3dvs0tJlO+//16dOnXS5s2bde3aNYWFhenBgwc6ceKEZs2apRYtWuj69etmlxnF1atX9d5776lZs2amvP/UqVP15ptvau3atbp06ZLCwsIUFBSkgwcP6uOPP1bLli1169YtU2qzS+v7ZnSefvppVa5cWbt373b6m1MAAIDrCw4OVqdOnTRp0iQdPHhQd+7c0aNHj3Tr1i39+uuvGjx4sMaMGWN2mabYtWuXXn/9dc2dO9fh+Tt37mjy5Ml65ZVXdPv2bZOqSz7BwcGaNWuW6tevH6+w+OHDh+rdu7f++usvBQcH6/79+7p3754sFksqVJs89u/fr7FjxyowMFBhYWG6ffu2wsLCJEnvvfeetm7dqqCgIIWEhOjMmTPKkSOHyRXHjyvtm2nps0ycOFEhISEu33ZkdhtGUm3ZskUtW7bUmjVrdOnSJYWGhurhw4c6c+aM5s+fr9deey3Gm6bMZPaxsGjRIr322mvy9/fXP//8o5CQED148EDHjx/XjBkz9Nprr5neSSut75vRyZkzp1555RWdPn06ynkIEB8eZhcAAI8LDQ1Vnz59dPToUUlS69at9cYbb8jHx0d79uzR1KlTde/ePc2bN0/lypVT48aNTalz//79Gjx4sCnvnRA7d+6UJHl5eZny/ps3b9aJEydUqFAh1axZ05QaklujRo1Uo0YNSVK2bNmM53v16qVz584pf/78ZpWWaNevX9eUKVMkScWLF9fQoUNVokQJ3blzR3PmzNFPP/2kCxcuaNq0aZo4caLJ1ToaMWKEdu/ebcp7+/n5adasWZKkkiVL6u2331aJEiV0/vx5ffnllzp48KBOnz6td99919ST9dTYN/39/RUeHi53d/cUe4/HtW3bVn/++ac+//xzNWnSRB4enNoCAABzLFmyRAcOHJAkvf7662rbtq2yZcumv//+WxMmTNDly5e1ZMkSNW3aVM8++6wkafr06QoNDU1ToWlCXb16Vd26dZMUcRNkZJ9++qmWLVtmRlkp4rvvvtO0adPivfzp06cVFBQkSapVq5ZGjx4tq9WaQtUlTUzXwAcPHjQe9+3bV82aNVPGjBkdXsuTJ4/mzZun8PBw5cyZM9VqTgpX2jfTymc5dOiQtm/fLh8fHzVt2tTscpJFpUqVjDa5zJkzG8+b2YaRVKGhoRozZozCw8P1xBNPaPjw4SpTpoyCg4O1ZMkSLVmyRP/++68mTJggPz8/s8t1YOaxsGXLFo0bN06SlD9/fg0ePFjly5fX9evX9c0332jnzp26cuWKBgwYoLVr18rNzZy+r6mxb5px7tO2bVv9+OOP+uabb9SuXTtlz5491d4baR8tjQCczqpVq3TkyBFJEcOIjRw50nitePHiKlCggHr27ClJWrFihWkhutlDrMVX3rx5TX3/efPmSZJeeeUVl2kcypgxo9EwEFla2Seic+DAAWNYo/bt26tevXrGa5999pleeOEF3blzJ9qpFMxm1vd+584dTZ8+XVLERdDixYuNC+PChQsbQ+GfP39ee/bs0YULF1SgQAFTak2N7yhPnjwp/h6Pq1u3rry8vHTlyhVt3rxZTZo0SfUaAAAAJGnPnj3G49GjRytTpkySIs4Lw8LC9Pbbb0uSfvvtNyNETyuBYlLEdh6alq+fopPQz/Pw4UPjcaVKlVS4cOHkLinZxHQNHPkz1KxZU0WKFDH+/eDBA0kR7TglS5ZM8RqTkyvtm2nls3z77beSpNq1axu/P9M6Ly+vaNvk0so2ic7ff/+tmzdvSpKaNm2qV1991Xht3Lhx2r9/v/7++2/t3bs31W+yj4tZ3/ujR4/00UcfSYq4mWLhwoXKly+fpP9vO2rfvr0OHDiggIAA/fnnn8Z5QmpLje/IjHOfypUr64knntC1a9e0dOlSI1cA4oPh3AE4nVWrVkmS3Nzc1KtXryivv/TSS5o8ebI2bNhgnGTHJLb5Y2Kap+bAgQPq3bu3qlevrtKlS6ty5cp68803tWLFCmOZlStXOgwvNWPGDJUqVUorV640nvvrr7/Us2dPPfvssypfvryaN2+uhQsXRrmz3F7DpEmT9NFHH6lSpUqqXLmyw/s97sqVKxo1apQx/3L58uXVqFEjTZ06Ncr8Lo/PtxX5O4npv99//z3BnyM658+f1+HDhyVJL7/8ssNr//77rz7++GM1aNBAFStWVMWKFdWgQQNNmjQp3nNv7927Vx07dlSFChVUrVo1ffDBBwoKCjI+x5dffumw/PXr1/XRRx+pQYMGKleunKpVq6bevXtr7969DstF/o7mzp2rYcOGqXz58qpWrZp27doV7XxwpUqV0j///CMpYn6lUqVKqWPHjtHWvXDhQjVs2NAYSWHx4sUOr9v3zRdffFFXr17V0KFD9eyzz+rZZ5/V8OHDdefOHf3zzz8aMGCAKlWqpOeee06DBg3StWvXol1PTHMxRRZ5pII5c+Zo48aNCgkJMV77+eef9dtvvzns45G/h6NHj2r69OmqXbu2ypUrp9dff11bt26N8j53797VpEmTjH33xRdf1AcffBCldvuyn376qfFd1ahRQ127dtWvv/5qLFO3bl2HYL9UqVKqW7dulPp+/vlntWnTRmXLllXt2rX177//SpJ27Nihzp07q0aNGipbtqyqVaumrl27GneLx2bz5s1Gw1CHDh0c7iyXJB8fH3300Uf6/vvv9ccff8QZoMc0L1RM86LduXNHkyZNUv3
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x500 with 2 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB+wAAALFCAYAAADp1BpAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUZd7G8XsmfdJ7g4SQUJQSQBEBFUURqUpRsGB37b0A6mvDtYu6supaVhB3kZUmSlEURUGwkgChE0o66W3SSOb9I8kxQxIILRng+7kuLianzXPOnHkmmfs8v2Oy2Ww2AQAAAAAAAAAAAACAVmVu6wYAAAAAAAAAAAAAAHA6IrAHAAAAAAAAAAAAAKANENgDAAAAAAAAAAAAANAGCOwBAAAAAAAAAAAAAGgDBPYAAAAAAAAAAAAAALQBAnsAAAAAAAAAAAAAANoAgT0AAAAAAAAAAAAAAG2AwB4AAAAAAAAAAAAAgDZAYA8AAAAAAAAAAAAAQBsgsAcAAIBDqqys1MyZMzVhwgSdc8456tatm/r3769bbrlFS5cubbT8pEmT1KVLF5155pnGtF9++UVdunRRly5d9M477xxy2ZNJTU2Ndu7c2eS8tLQ0lZaWtnKLTg3bt2/XDTfcoN69e6tXr166/PLLlZ+f36ZteuKJJ4xzODU1VVLz57UkffPNNxo9erR69Oihvn376oEHHpAkFRYWasqUKerXr5969OihSy65ROvWrWvt3TkmeXl5ysnJaetmHBdvv/228Rr+/vvvbd2co9LcuXYsUlNTjePyxBNPHHsjj8D27dtb9fmOxp9//qmuXbvqzjvvPOJ1D9VvtJUFCxYYbfriiy8azT/4NTnc8o7kl19+0X333afzzz9f3bt3V+/evXX55ZfrjTfeUFFRUVs375BO5HvhcL9/bdiwQY8++qguuugide/eXWeddZYmTJigjz/+WOXl5XbLtuU5fSKP0eDBg9WlSxcNGTLkhD1HQ1u3blWXLl100003tcrzAQAAoGkE9gAAAHA45eXluv766/Xiiy8qISFBhYWFOnDggPLy8rR69Wo9+OCDevrpp9u6mW1izZo1Gjt2rD788EO76YWFhXr55Zd12WWXtXnIfLK69957tW7dOlmtVpWVlSklJUV+fn5t3awWS0tL04MPPqht27apsrJSRUVFKisrkyS9+uqrWrhwoQoKClRZWamUlBR5enq2cYtbpry8XO+9956GDBmiXbt2tXVzoEOfayebrKwsPf7447r88svbuimHVF1drWeffVY2m03XXnttWzfnhNq9e7fuuece3XHHHW3dlKMya9YsXX/99fr666+1f/9+VVVVyWq1auvWrXrvvfc0ZswYZWdnt3UzG2nr98Ibb7yhK6+8UosXL1Z6erqqqqpUUlKihIQEvfTSSxo3bpzy8vLapG31TvZzsyldu3ZVnz599PPPPzv8hTAAAACnMue2bgAAAABwsM8++0zr16+XJI0dO1ZXX321fH19tWPHDj3//PPKyMjQZ599plGjRunss8+WJL311luqrKyUyWRqy6afUFlZWbr55psl1X7B2tCrr76qzz//vC2adUrIy8vTnj17JNUe2zfeeEPV1dUOeT717t1bq1atkiR5eXkZ0zdu3KgDBw5IksaNG6fbb79dTk5OkqSEhARJkpubmz799FO5uroqNja2dRt+lD7++GO9+eabbd0MNHCoc+1kM2XKFP38889t3YzD+vrrr7V161ZFRUVp4MCBbd2c42LYsGEaMGCAJMnX19eYfvvtt2vv3r2KjIxsq6YdtezsbL322muSpNjYWD388MOKi4tTYWGhPvjgA33zzTdKTU3Vm2++qb///e9t3Fp7bflemDlzpt577z1JUufOnfXAAw8oLi5OKSkpevvtt5WQkKCdO3fqsccea3TBYmtqjXNz7ty5qq6ubtU+9eqrr9aff/6p6dOna8SIEXJ25utiAACA1sZvYAAAAHA4DUt1/9///Z8sFoskKTo6WlVVVUbp5bVr1xqBfUBAQKu3s7XZbLajmofDazg6uFu3burYsWMbtubQXF1dFRYW1mh6w30455xzFB0dbfxstVolSSEhIerZs+eJb+RxxLnteA51rp1sTpbz69///rck6bLLLnPIC4mOhoeHhzw8PBpNP1lek6asX79elZWVkqRrr71WF198sTHv9ddf13nnnafCwkKtXbu2rZrYrLY67oWFhXrrrbckSZGRkZozZ45xMVp0dLRxO4GUlBStW7dOqampateuXZu0tTWOUXBw8Al/joMNHjxYrq6uyszM1Ndff60RI0a0ehsAAABOd5TEBwAAgMNxdXU1Hj/22GPavHmz8fOll16qtWvXau3atbrllluM6Ud7X/rc3FxNnTpV55xzjnr37q1bb71VW7dubbRcdna2XnjhBV166aXq0aOH+vXrpzvuuEO//vpro2Xr76l644032k0/1H2rFy9erHHjxik+Pl5nnXWWbrjhBq1Zs8aY/8svv2jQoEHGzwsXLlSXLl309ttva9KkSZo3b54x7+KLL1aXLl2Mn2tqavTJJ59o1KhRdm3fuHFji45RZmamnnjiCeOesj179tSwYcP0xhtvGMFEQ6tXr9Ytt9yivn37Kj4+XkOHDtXrr7+uwsLCRsuuXbtWd9xxhwYMGKDu3bvrkksu0QsvvNDoXuUNj92vv/6qkSNHqnv37ho1apSqq6slSYmJifrb3/6ms88+Wz179tQVV1yh//znP6qpqTnk/k2ZMkWDBw82fp4/f75xbOvt2bNH//d//2ccg4EDB+rBBx9sdK40vKfuggULdNttt6l79+4aMGCAduzY0WwbKisr9Y9//EMXX3yxevTooVGjRmn58uVNLtvUfXsHDx6sKVOmGMtMnjzZaEOXLl2UlpYmSUpJSVGXLl00adIkY9mWHrf653zxxRf1wgsvqHfv3urTp4/mz58vSaqoqNCMGTM0dOhQY58ffvhh7d692247De9DvXXrVs2cOdNYZ+jQoZo5c6bda1Mf5EjS9ddfry5duig1NbXZYzllyhR16dJF/fr1U3FxsaZNm6bzzjtPPXv21FVXXaXVq1fbLd9c39Hc/ZHr7y/8yCOPaP369bruuusUHx+v888/X//85z9VU1OjtWvXasKECerZs6fOP/98vfrqq02+V6Ta8Pvvf/+7BgwYoPj4eF199dV27/16WVlZeuKJJ3TeeecZ75WXX35ZxcXFTe7P2LFjtXDhQmPfn3zyyWaPmVR7Dn700UcaM2aMevfurd69e2vChAmaN2+eXUjV3Ln2yy+/HHL7GzZs0D333KP+/furR48euuSSS/TMM88oKyvrkOtJf72mXbp0UWZmpjG9uXve15+LI0aMUM+ePdWtWzcNGjRIU6ZMUUZGht2+NAxOu3TpYtcXtPScPlz/VFhYqBdffFFDhgxRjx491L17d1188cWaNm1ak/3iwVJSUoz++pJLLrGbV1BQoJdeekmXXnqpevXqpV69eunSSy/Viy++2OJ7pf/666+aNGmS4uPj1a9fPz311FMqKSkx9qlhXyi1/POw4evz4Ycf6pFHHlHPnj3Vr18/rVmzpsl70nfp0kX79u2TVHvrhYP7q4b+85//aOjQoerRo4eGDx+uOXPm2M2vP28uuOACZWVl6eGHH9bZZ5+ts88+W5MnT1ZhYaH27dune++9V71791bfvn11//33a//+/U1u5+DzrykNf3/54IMPtGzZMlVUVBjzvvvuO61du1YLFiwwlmt4HJKSkvTWW2/pwgsvVI8ePTR27Fh9++23jZ6nqKhIL774ovGZdMEFF+ipp55q1Pb6ZV999VXjWA0YMEA33XSTXV94qPdCw/Z99913mjhxorp3764LL7xQBQUFkqQffvhBN9xwg/FZ3q9fP910001GNZhD+frrr42Lyq677jq7yjGS5OnpqRdeeEGzZs3S77//ftiw/kj79Ja+Pw93brb0NWn4GfXTTz/p4osvVvfu3Y3faZu6h/2RfG7WS01N1UMPPWT8fnvbbbcpOTnZOD4N2+7l5aV+/fpJqh3hDwAAgNb
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x800 with 1 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"****************************************************************************************************************\n"
]
}
],
"source": [
"class Clustering:\n",
" algorithms = ['KMeans', 'AgglomerativeClustering', 'SpectralClustering']\n",
" min_n_clusters = 2\n",
" max_n_clusters = 8\n",
2022-11-30 16:06:03 -08:00
" # Model distortions for different hyperparameters(n_clusters) \n",
" kmeans_distortions = [] \n",
2022-11-14 12:40:38 -08:00
" \n",
" @staticmethod\n",
" def sse_plot(): \n",
" \"\"\"Graphs for the SSE values (KMeans)\"\"\"\n",
" plt.figure(figsize=(25, 8))\n",
" sns.set_style(\"darkgrid\")\n",
" plt.title('Distortion values for different number of clusters (for Kmeans)', fontsize=14, fontweight='bold')\n",
" plt.xlabel('Clusters', fontsize=14, fontweight='bold')\n",
" plt.ylabel('SSE',fontsize=14, fontweight='bold')\n",
" plt.xticks(fontsize=14)\n",
" plt.yticks(fontsize=14)\n",
" plt.plot(list(range(Clustering.min_n_clusters, Clustering.max_n_clusters + 1)), Clustering.kmeans_distortions, marker='o')\n",
" plt.show()\n",
" \n",
" \n",
" @staticmethod\n",
" def silhouette_result(metrics_score:list, algorithm: str):\n",
" plt.figure(figsize=(25, 8))\n",
" sns.set_style(\"darkgrid\")\n",
" plt.title(f'Silhouette score for different number of clusters (algorithm: {algorithm})', fontsize=14, fontweight='bold')\n",
" plt.xlabel('Clusters', fontsize=14, fontweight='bold')\n",
" plt.ylabel('Silhouette', fontsize=14, fontweight='bold')\n",
" plt.xticks(fontsize=14)\n",
" plt.yticks(fontsize=14)\n",
" plt.plot(list(range(Clustering.min_n_clusters, Clustering.max_n_clusters + 1)), metrics_score, marker='o')\n",
" plt.show()\n",
" print('*' * 112)\n",
" \n",
" \n",
" def make_models(self, data_old: pd.DataFrame, data_modified: pd.DataFrame): \n",
" \"\"\"Method for creating models\"\"\"\n",
2022-11-30 16:06:03 -08:00
" for algorithm in Clustering.algorithms: \n",
" # metrics: silhouette score\n",
" metrics = [] \n",
2022-11-14 12:40:38 -08:00
" for n_clusters in range(Clustering.min_n_clusters, Clustering.max_n_clusters + 1): \n",
" if algorithm == 'AgglomerativeClustering':\n",
" ac = AgglomerativeClustering(n_clusters=n_clusters,\n",
" linkage='complete')\n",
" pred = ac.fit_predict(df_transform)\n",
" labels = pd.DataFrame(pred, columns =['Labels'], index=df.index)\n",
" metrics.append(silhouette_score(df_transform, labels))\n",
" Clustering.object_plot(labels, pred, algorithm)\n",
" \n",
" if algorithm == 'SpectralClustering':\n",
" sc = SpectralClustering(n_clusters=n_clusters)\n",
" pred = sc.fit_predict(df_transform)\n",
" labels = pd.DataFrame(pred, columns =['Labels'], index=df.index)\n",
" metrics.append(silhouette_score(df_transform, labels))\n",
" Clustering.object_plot(labels, pred, algorithm)\n",
" \n",
" if algorithm == 'KMeans': \n",
" kmeans = KMeans(n_clusters=n_clusters, \n",
" init=\"k-means++\", \n",
" n_init=10,\n",
" max_iter=280, \n",
" random_state=42)\n",
" pred = kmeans.fit_predict(df_transform) \n",
" labels = pd.DataFrame(pred, columns=['Labels'], index=df.index)\n",
" metrics.append(silhouette_score(df_transform, labels))\n",
" Clustering.kmeans_distortions.append(kmeans.inertia_) \n",
" Clustering.object_plot(labels, pred, algorithm)\n",
" \n",
" if algorithm == 'KMeans':\n",
" Clustering.sse_plot()\n",
" print('*' * 112)\n",
" \n",
" Clustering.silhouette_result(metrics, algorithm)\n",
" \n",
" \n",
" @staticmethod\n",
2022-11-30 16:06:03 -08:00
" def object_plot(labs: pd.DataFrame, predict:np.array, algorithm:str):\n",
2022-11-14 12:40:38 -08:00
" \"\"\"Graphs of the number of objects in a cluster and the silhouette coefficient\"\"\"\n",
" cluster_group = labs.groupby('Labels').size()\n",
" plt.figure(figsize=(25, 5))\n",
" plt.subplot(1, 2, 1)\n",
" sns.set_style(\"darkgrid\")\n",
" plt.title(f'Cluster size (algorithm: {algorithm})', fontsize=14, fontweight='bold')\n",
" sns.barplot(x=cluster_group.values, y=list(map(str, cluster_group.index)))\n",
" plt.xlabel('Number of objects', fontsize=14, fontweight='bold')\n",
" plt.ylabel('Сlusters', fontsize=14, fontweight='bold')\n",
" plt.xticks(fontsize=14)\n",
" plt.yticks(fontsize=14)\n",
" \n",
" plt.subplot(1, 2, 2) \n",
" cluster_labels = np.unique(predict)\n",
" silhouette_vals = silhouette_samples(df_transform, predict, metric='euclidean')\n",
" y_ax_lower, y_ax_upper = 0, 0\n",
" yticks = []\n",
" for i, с in enumerate(cluster_labels):\n",
" c_silhouette_vals = silhouette_vals[predict == с]\n",
" c_silhouette_vals.sort()\n",
" y_ax_upper += len(c_silhouette_vals)\n",
" plt.barh(range(y_ax_lower, y_ax_upper),\n",
" c_silhouette_vals,\n",
" height = 1,\n",
" edgecolor='none')\n",
"\n",
" yticks.append((y_ax_lower + y_ax_upper) / 2)\n",
" y_ax_lower += len(c_silhouette_vals) \n",
" silhouette_avg = np.mean(silhouette_vals)\n",
" plt.axvline(silhouette_avg, color=\"red\", linestyle=\"--\")\n",
" sns.set_style(\"darkgrid\")\n",
" plt.title(f'Silhouette plot for different clusters (algorithm: {algorithm})', fontsize=14, fontweight='bold') \n",
" val = float(''.join([i for i in str(silhouette_avg)][0:5]))\n",
" plt.xlabel(f'Silhouette = {val}', fontsize=14, fontweight='bold')\n",
" plt.ylabel('Clusters', fontsize=14, fontweight='bold')\n",
" plt.yticks(yticks, cluster_labels, fontsize=14)\n",
" plt.show()\n",
" print('*' * 112)\n",
" \n",
"\n",
"clustering = Clustering()\n",
"clustering.make_models(df, df_transform)"
]
},
{
"cell_type": "markdown",
"id": "6234c083",
"metadata": {
"papermill": {
"duration": 0.058793,
"end_time": "2022-08-28T13:52:29.521183",
"exception": false,
"start_time": "2022-08-28T13:52:29.462390",
"status": "completed"
},
"tags": []
},
"source": [
"# What can we say from these graphs: \n",
"* Good metric results for Agglomerative and Spectral Clustering algorithms \n",
"* Best Model: AgglomerativeClustering(n_clusters=3)."
]
},
{
"cell_type": "markdown",
"id": "a0db62cd",
"metadata": {
"papermill": {
"duration": 0.056866,
"end_time": "2022-08-28T13:52:29.635184",
"exception": false,
"start_time": "2022-08-28T13:52:29.578318",
"status": "completed"
},
"tags": []
},
"source": [
"# Now let's build graphs of the main characteristics for features int | float for the best models (since we got object labels)"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 26,
2022-11-14 12:40:38 -08:00
"id": "10d77a73",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:52:29.756771Z",
"iopub.status.busy": "2022-08-28T13:52:29.756257Z",
"iopub.status.idle": "2022-08-28T13:52:29.939735Z",
"shell.execute_reply": "2022-08-28T13:52:29.938377Z"
},
"papermill": {
"duration": 0.247759,
"end_time": "2022-08-28T13:52:29.942709",
"exception": false,
"start_time": "2022-08-28T13:52:29.694950",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"best_model = AgglomerativeClustering(n_clusters=3)\n",
"labels = pd.DataFrame(best_model.fit_predict(df_transform), columns=['Clusters'], index=df.index)\n",
"df = pd.concat([df, labels], axis=1)"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 27,
2022-11-14 12:40:38 -08:00
"id": "c474828f",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:52:30.058532Z",
"iopub.status.busy": "2022-08-28T13:52:30.057754Z",
"iopub.status.idle": "2022-08-28T13:52:30.065701Z",
"shell.execute_reply": "2022-08-28T13:52:30.064655Z"
},
"papermill": {
"duration": 0.070059,
"end_time": "2022-08-28T13:52:30.068513",
"exception": false,
"start_time": "2022-08-28T13:52:29.998454",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"object_cols = ['Education', 'Kidhome', 'Teenhome', 'Family_Size', 'Alone', 'Partner']\n",
"num_cols = ['Income', 'Recency', 'MntWines',\n",
" 'MntFruits', 'MntMeatProducts', 'MntFishProducts',\n",
" 'MntSweetProducts', 'MntGoldProds', 'NumDealsPurchases',\n",
" 'NumWebPurchases', 'NumCatalogPurchases','NumStorePurchases',\n",
" 'NumWebVisitsMonth', 'Age', 'Years_Since_Registration',\n",
" 'Sum_Mnt', 'Num_Accepted_Cmp', 'Num_Total_Purchases']"
]
},
{
"cell_type": "code",
2022-12-04 16:00:27 -08:00
"execution_count": 28,
2022-11-14 12:40:38 -08:00
"id": "4e349f89",
"metadata": {
"execution": {
"iopub.execute_input": "2022-08-28T13:52:30.193718Z",
"iopub.status.busy": "2022-08-28T13:52:30.193231Z",
"iopub.status.idle": "2022-08-28T13:52:44.046400Z",
"shell.execute_reply": "2022-08-28T13:52:44.044829Z"
},
"papermill": {
"duration": 13.91993,
"end_time": "2022-08-28T13:52:44.049878",
"exception": false,
"start_time": "2022-08-28T13:52:30.129948",
"status": "completed"
},
"tags": []
},
"outputs": [
2022-12-04 16:00:27 -08:00
{
"ename": "KeyError",
"evalue": "'Education'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"File \u001b[1;32mC:\\ProgramData\\Miniconda3\\lib\\site-packages\\pandas\\core\\indexes\\base.py:3629\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 3628\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m-> 3629\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3630\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n",
"File \u001b[1;32mC:\\ProgramData\\Miniconda3\\lib\\site-packages\\pandas\\_libs\\index.pyx:136\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n",
"File \u001b[1;32mC:\\ProgramData\\Miniconda3\\lib\\site-packages\\pandas\\_libs\\index.pyx:163\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[1;34m()\u001b[0m\n",
"File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:5198\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n",
"File \u001b[1;32mpandas\\_libs\\hashtable_class_helper.pxi:5206\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[1;34m()\u001b[0m\n",
"\u001b[1;31mKeyError\u001b[0m: 'Education'",
"\nThe above exception was the direct cause of the following exception:\n",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"Input \u001b[1;32mIn [28]\u001b[0m, in \u001b[0;36m<cell line: 64>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 61\u001b[0m histplot()\n\u001b[0;32m 62\u001b[0m barplot()\n\u001b[1;32m---> 64\u001b[0m \u001b[43mgraph_builder\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
"Input \u001b[1;32mIn [28]\u001b[0m, in \u001b[0;36mgraph_builder\u001b[1;34m()\u001b[0m\n\u001b[0;32m 60\u001b[0m boxplot()\n\u001b[0;32m 61\u001b[0m histplot()\n\u001b[1;32m---> 62\u001b[0m \u001b[43mbarplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
"Input \u001b[1;32mIn [28]\u001b[0m, in \u001b[0;36mgraph_builder.<locals>.barplot\u001b[1;34m()\u001b[0m\n\u001b[0;32m 48\u001b[0m data\u001b[38;5;241m.\u001b[39mcolumns \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNumber of objects\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[0;32m 49\u001b[0m data \u001b[38;5;241m=\u001b[39m data\u001b[38;5;241m.\u001b[39mreset_index()\n\u001b[0;32m 50\u001b[0m b\u001b[38;5;241m=\u001b[39m sns\u001b[38;5;241m.\u001b[39mbarplot(\n\u001b[0;32m 51\u001b[0m data\u001b[38;5;241m=\u001b[39mdata,\n\u001b[1;32m---> 52\u001b[0m x\u001b[38;5;241m=\u001b[39m\u001b[43mdata\u001b[49m\u001b[43m[\u001b[49m\u001b[43mcol\u001b[49m\u001b[43m]\u001b[49m,\n\u001b[0;32m 53\u001b[0m hue\u001b[38;5;241m=\u001b[39mdata\u001b[38;5;241m.\u001b[39mClusters,\n\u001b[0;32m 54\u001b[0m y\u001b[38;5;241m=\u001b[39mdata[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mNumber of objects\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[0;32m 55\u001b[0m ax\u001b[38;5;241m=\u001b[39maxes\u001b[38;5;241m.\u001b[39mreshape(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)[num])\n\u001b[0;32m 56\u001b[0m b\u001b[38;5;241m.\u001b[39mset_xlabel(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdata[col]\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m, fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m14\u001b[39m)\n\u001b[0;32m 57\u001b[0m b\u001b[38;5;241m.\u001b[39mset_ylabel(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mNumber of objects\u001b[39m\u001b[38;5;124m'\u001b[39m, fontsize\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m14\u001b[39m)\n",
"File \u001b[1;32mC:\\ProgramData\\Miniconda3\\lib\\site-packages\\pandas\\core\\frame.py:3505\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 3503\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m 3504\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[1;32m-> 3505\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3506\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[0;32m 3507\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n",
"File \u001b[1;32mC:\\ProgramData\\Miniconda3\\lib\\site-packages\\pandas\\core\\indexes\\base.py:3631\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[1;34m(self, key, method, tolerance)\u001b[0m\n\u001b[0;32m 3629\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[0;32m 3630\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[1;32m-> 3631\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[0;32m 3632\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[0;32m 3633\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[0;32m 3634\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[0;32m 3635\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[0;32m 3636\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n",
"\u001b[1;31mKeyError\u001b[0m: 'Education'"
]
},
2022-11-14 12:40:38 -08:00
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x3000 with 18 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x3000 with 18 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
2022-12-04 16:00:27 -08:00
"image/png": "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
2022-11-14 12:40:38 -08:00
"text/plain": [
2022-12-04 16:00:27 -08:00
"<Figure size 2500x1000 with 6 Axes>"
2022-11-14 12:40:38 -08:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def graph_builder():\n",
" \"\"\"Graphs of the main characteristics for features int | float for the best models.\n",
" The best model was chosen based on the results of the graphs\"\"\"\n",
" def boxplot():\n",
" n_cols = len(num_cols)\n",
" rows = n_cols // 3 \n",
" _, axes = plt.subplots(ncols=3, nrows=rows, figsize=(25, 5 * rows))\n",
" plt.subplots_adjust(wspace=0.3, hspace=0.4)\n",
" for num, col in enumerate(num_cols):\n",
" b = sns.boxplot(\n",
" data=df,\n",
" y=col,\n",
" x=\"Clusters\",\n",
" palette=\"Paired\",\n",
" ax=axes.reshape(-1)[num])\n",
" b.set_xlabel('Clusters', fontsize=14)\n",
" b.set_ylabel(f'{df[col].name}', fontsize=14)\n",
" sns.set_style('darkgrid')\n",
" \n",
" def histplot(): \n",
" n_cols = len(num_cols)\n",
" rows = n_cols // 3\n",
" _, axes = plt.subplots(ncols=3, nrows=rows, figsize=(25, 5 * rows))\n",
" plt.subplots_adjust(wspace=0.3, hspace=0.4)\n",
" for num, col in enumerate(num_cols):\n",
" h = sns.histplot(\n",
" data=df,\n",
" x=col,\n",
" hue=\"Clusters\",\n",
" multiple=\"stack\",\n",
" kde=True,\n",
" palette=\"Paired\",\n",
" ax=axes.reshape(-1)[num])\n",
" \n",
" h.set_xlabel(f'{df[col].name}', fontsize=14)\n",
" h.set_ylabel('Count', fontsize=14)\n",
" sns.set_style('darkgrid')\n",
" \n",
" def barplot():\n",
" n_cols = len(object_cols)\n",
" rows = n_cols // 3 + n_cols % 3\n",
" size_cluster = df.groupby(\"Clusters\").count().iloc[:, 0]\n",
" _, axes = plt.subplots(ncols=3, nrows=rows, figsize=(25, 5 * rows))\n",
" plt.subplots_adjust(wspace=0.3, hspace=0.4) \n",
" for num, col in enumerate(object_cols):\n",
" data = (df.groupby([\"Clusters\"])[col].value_counts().unstack(fill_value=0).T)\n",
" data = pd.DataFrame(data.unstack())\n",
" data.columns = [\"Number of objects\"]\n",
" data = data.reset_index()\n",
" b= sns.barplot(\n",
" data=data,\n",
" x=data[col],\n",
" hue=data.Clusters,\n",
" y=data['Number of objects'],\n",
" ax=axes.reshape(-1)[num])\n",
" b.set_xlabel(f'{data[col].name}', fontsize=14)\n",
" b.set_ylabel('Number of objects', fontsize=14)\n",
" sns.set_style('darkgrid')\n",
" \n",
" boxplot()\n",
" histplot()\n",
" barplot()\n",
" \n",
"graph_builder()"
]
},
{
"cell_type": "markdown",
"id": "bae4e70e",
"metadata": {
"papermill": {
"duration": 0.068264,
"end_time": "2022-08-28T13:52:44.191676",
"exception": false,
"start_time": "2022-08-28T13:52:44.123412",
"status": "completed"
},
"tags": []
},
"source": [
2022-11-30 16:06:03 -08:00
"## 6) Business Recommendations"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "markdown",
"id": "3804fd18",
"metadata": {
"papermill": {
"duration": 0.066646,
"end_time": "2022-08-28T13:52:44.325998",
"exception": false,
"start_time": "2022-08-28T13:52:44.259352",
"status": "completed"
},
"tags": []
},
"source": [
"# As a result of cluster analysis, we received three groups of buyers (clusters):\n",
"# 0 cluster:\n",
"* Middle income people (average income equals 50000)\n",
"* Average age is 52 years\n",
"* Have an education (Graduation, 2n Cycle, Master, PhD)\n",
"* People without family, people with families with and without children\n",
"* Quite often buy wines, but they also often buy meat\n",
"* Most often make purchases on the web\n",
"* The average number of purchases is 13\n",
"\n",
"# 1 cluster:\n",
"* High income people (average income equals 70000)\n",
"* Average age is 55 years\n",
"* Have an education (Graduation, 2n Cycle, Master, PhD)\n",
"* Have a family with children (Teenhome)\n",
"* Quite often buy wines, but they also often buy meat\n",
"* Most often make purchases in the stores themselves\n",
"* Most often make purchases (compared to other clusters)\n",
"\n",
"# 2 cluster:\n",
"* Average income equals 38000 \n",
"* Average age is 49 years\n",
"* Have an education (Graduation, 2n Cycle, Master, PhD)\n",
"* People with families with and without children\n",
"* A low number of purchases and, accordingly, spend little money on purchases "
]
}
],
"metadata": {
"kernelspec": {
2022-11-30 16:06:03 -08:00
"display_name": "Python 3 (ipykernel)",
2022-11-14 12:40:38 -08:00
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
2022-11-30 16:06:03 -08:00
"version": "3.9.12"
2022-11-14 12:40:38 -08:00
},
"papermill": {
"default_parameters": {},
"duration": 172.940742,
"end_time": "2022-08-28T13:52:46.152462",
"environment_variables": {},
"exception": null,
"input_path": "__notebook__.ipynb",
"output_path": "__notebook__.ipynb",
"parameters": {},
"start_time": "2022-08-28T13:49:53.211720",
"version": "2.3.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}