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

2565 lines
3.3 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-09 07:43:44 -08:00
"execution_count": 1,
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",
2022-12-09 07:43:44 -08:00
"from scipy.cluster.hierarchy import dendrogram\n",
2022-11-14 12:40:38 -08:00
"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-09 07:43:44 -08:00
"execution_count": 2,
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-09 07:43:44 -08:00
"execution_count": 3,
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-09 07:43:44 -08:00
"execution_count": 3,
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-09 07:43:44 -08:00
"execution_count": 4,
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-09 07:43:44 -08:00
"execution_count": 5,
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-09 07:43:44 -08:00
"execution_count": 6,
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-09 07:43:44 -08:00
"execution_count": 7,
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-09 07:43:44 -08:00
"execution_count": 8,
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-09 07:43:44 -08:00
"execution_count": 9,
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-09 07:43:44 -08:00
"execution_count": 10,
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-09 07:43:44 -08:00
"execution_count": 11,
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-09 07:43:44 -08:00
"execution_count": 12,
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-09 07:43:44 -08:00
"execution_count": 13,
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-09 07:43:44 -08:00
"execution_count": 14,
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-09 07:43:44 -08:00
"execution_count": 15,
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-09 07:43:44 -08:00
"execution_count": 16,
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-09 07:43:44 -08:00
"execution_count": 17,
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-09 07:43:44 -08:00
"execution_count": 18,
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-09 07:43:44 -08:00
"execution_count": 18,
2022-11-14 12:40:38 -08:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isna().sum()"
]
},
{
"cell_type": "code",
2022-12-09 07:43:44 -08:00
"execution_count": 19,
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-09 07:43:44 -08:00
"execution_count": 20,
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-09 07:43:44 -08:00
"execution_count": 21,
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-09 07:43:44 -08:00
"execution_count": 22,
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",
2022-12-09 07:43:44 -08:00
"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-09 07:43:44 -08:00
"execution_count": 23,
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",
2022-12-09 07:43:44 -08:00
"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": [
2022-12-09 07:43:44 -08:00
"## 5) Clustering"
2022-11-14 12:40:38 -08:00
]
},
{
"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-12-09 07:43:44 -08:00
"id": "dd44db07",
"metadata": {},
"outputs": [],
"source": [
"def plot_dendrogram(model, **kwargs):\n",
" # Create linkage matrix and then plot the dendrogram\n",
" # as given by sklearn docs\n",
" # create the counts of samples under each node\n",
" counts = np.zeros(model.children_.shape[0])\n",
" n_samples = len(model.labels_)\n",
" for i, merge in enumerate(model.children_):\n",
" current_count = 0\n",
" for child_idx in merge:\n",
" if child_idx < n_samples:\n",
" current_count += 1 # leaf node\n",
" else:\n",
" current_count += counts[child_idx - n_samples]\n",
" counts[i] = current_count\n",
"\n",
" linkage_matrix = np.column_stack(\n",
" [model.children_, model.distances_, counts]\n",
" ).astype(float)\n",
"\n",
" # Plot the corresponding dendrogram\n",
" dendrogram(linkage_matrix, **kwargs)"
]
},
{
"cell_type": "code",
"execution_count": 32,
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-09 07:43:44 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACXgElEQVR4nOzdd5hU1f0H4M/QmzUoGkvsFUHUSIy9x27sGlvUqLHEWGLvJWpMYo81xl6xK2rUKL/Ye48NxIgFQZTed35/4E52ZYFlWZjd2fd9nn2YnXt35jt77ixzz+eecwrFYrEYAAAAAAAAACCtyl0AAAAAAAAAADQVQnQAAAAAAAAA+J4QHQAAAAAAAAC+J0QHAAAAAAAAgO8J0QEAAAAAAADge0J0AAAAAAAAAPieEB0AAAAAAAAAvidEBwAAAAAAAIDvCdEBAAAAAAAA4HtCdIDZbNKkSbnzzjuz1157pXfv3unevXvWWWedHHbYYXn++een2v/444/P8ssvn+WXXz5fffXVHKtzwoQJ+eSTT+bY882s6t/JvvvuW7YaXnvttaywwgr57W9/O9M/++KLL5Zew9/+9rfZUN3Mu+eee0o13X///VNt//DDD2dq/6Zg0KBBpRpPOumkqba/8cYbWXXVVUv7nHnmmUlqt0/11+DBg2v97BdffDHVPi+++OIceV2NbdiwYenevXu22mqrTJgwodzlAADQhEyYMCHXX399dt1116y55ppZeeWVs9Zaa2X//fdP3759p9p/r732yvLLL5+VVlqpdN+0zn/q2rc5qaqqyscff1znts8//zyjR4+ewxXVttFGG2X55ZfPpptuOsuPNWzYsAwdOrRe+7788svZZZdd0rNnz6y22mrZfffdUywWZ7mGWbHvvvuWjsFq0zunve2227L55pune/fu+dnPfpZzzz03SfLll1/m0EMPzeqrr54ePXpkyy23TP/+/efoa5lVs+PYLFcfTVN4n83IZ599lh49emTbbbed6Z+dUZ9GOcyoP+uHfUdNsf+rLtM7hv/73/9m7bXXLu1zyCGHZNKkSbXap/rr9ddfr/WzEyZMSM+ePWvtc88998yhV9W4JkyYkLXXXjs///nPM3z48HKXA2UhRAeYjb7++uvssssuOeWUU/LSSy/lu+++y8SJEzNkyJA8/vjj2XfffXP++eeXu8z07ds3W265ZR566KFyl9JkTZ48OWeccUaKxWJ+9atflbuc2eqTTz7JYYcdloMPPrjcpTSq/v3756CDDsrYsWOTJDvssENOOeWUae7/w4tc6rropbmaf/7584tf/CIff/xxrr322nKXAwBAEzFu3LjsvffeOffcc/PGG29k+PDhmTRpUoYNG5ZnnnkmRx55ZE477bRyl1kWzz77bHbYYYepPj8PHz48559/fn7xi1/k22+/LVN1jWfcuHG58sors+mmm9YrLB47dmwOPvjgvPnmmxk3blxGjx6dkSNHplAozIFqG8err76a008/PQMHDszEiRPz7bffZuLEiUmSE088MU888URGjRqV8ePHp3///plvvvnKXHH9VNKx2ZxeyznnnJPx48dXfN/R4MGDc+KJJ2a77bYrdymNasiQIdlvv/1KFxGts846ueiii9KmTZs693/22Wdrff/aa69l3Lhxs73OOaFdu3bZaaed8s033+RPf/pTucuBsqj7nQ/ALJswYUJ++9vf5t13302S7Lrrrtlpp53SuXPnvPDCC7nwwgszcuTIXHfddVlllVWy5ZZblqXOV199NUceeWRZnntm9OvXL8mUD3Dl8Nhjj+X999/P4osvnrXXXrssNTS2LbbYIj//+c+TJPPMM0/p/oMOOiiffvppFllkkXKV1ui+/PLL7L///vnuu++SJFtvvXXOOeec6XbsPPfcc9l+++1L31dSiJ4ku+++ex588MFcffXV2WOPPTLvvPOWuyQAAMrs9ttvL42q22GHHbL77rtnnnnmyUcffZSzzz47X375ZW6//fZss802WWONNZIkF198cSZMmNCsQtOZNXjw4Oy3335JkhVWWKHWtgsuuCB33XVXOcqaLf7xj3/koosuqvf+H3/8cUaNGpUkWXfddXPKKaekqqpqNlU3a6Z1DvzGG2+Ubh9yyCHZbrvt0rFjx1rbFlhggVx33XWZPHly5p9//jlW86yopGOzubyWt956K0899VQ6d+6cbbbZptzlNIpevXqV+uS6dOlSuv/444/Pc889V66yZouRI0fmgAMOyGeffZYkWXPNNXP55ZdPty/y+eefz2GHHVbr+0qy22675eqrr87dd9+d/fbbL0svvXS5S4I5SogOMJvce++9eeedd5JMmUbshBNOKG1beumls+iii+bAAw9Mktx9991lC9HLPcVafS200EJlff7rrrsuSfKLX/yiYjqHOnbsWOoYqKm5HBP19d1332X//ffPl19+mSTZZJNNcv7556dVq7on5FlkkUXy+eefT3Xi88ILLyRJFl100QwaNGj2Fj0HrLbaallwwQXz9ddf58477yz9PQIAoOWq/sybJKeccko6deqUJPnJT36SiRMn5ve//32SKSFBdYjeXALFWTG9c6RKO3+a2ddTPdNXMiVs+8lPftLYJTWaaZ0D13wNa6+9dpZYYonS92PGjEkypR9nueWWm+01NqZKOjaby2v5+9//niTZYIMNSn8/m7t27drV2SfXXNqkvsaPH59DDjkk77//fpJk1VVXzZVXXpkOHTrUuX9139Gbb76Z0aNHp3Pnzkkqr+9o4YUXTs+ePfP666/nhhtuKC2LCC2F6dwBZpN77703SdKqVascdNBBU21ff/31c/7556dv376lD9nTMr01kaa1hvrrr7+egw8+OGuttVZWWmmlrLbaatl5551z9913l/a55557ak0vddlll021Vs+bb76ZAw88MGussUZ69OiR7bffPrfccstUV5ZX13Duuefmj3/8Y3r16pXVVlut1vP90FdffZWTTjopG264Ybp3754ePXpkiy22yIUXXjjVOs0/XKuornWIprdedX1fR10+++yzvP3220mmBLA1fffddznvvPOy2WabZdVVV82qq66azTbbLOeee25GjBgxw8dOkpdeeil77bVXevbsmd69e+fUU0/NqFGjSq/j0ksvrbX/kCFD8sc//jGbbbZZVllllfTu3TsHH3xwXnrppVr71fwdXXvttTnmmGPSo0eP9O7dO88++2yd68Etv/zy+e9//5tkylpjyy+/fPbaa686677llluy+eabl2ZSuO2222ptrz4211tvvQwePDhHH3101lhjjayxxho57rjjMnz48Pz3v//N4Ycfnl69euWnP/1pjjjiiHz99dd1Ps4Pj/H6GDt2bA466KDSNITrrrtuLrzwwmlOw5UkvXv3TjJlOYaPPvooyZTRFUOGDEky5UrkaXnggQey4447pmfPnll99dWzzz77TDW1V1L/46bmWmJPPfVU7rvvvmy77bZZZZVVssEGG+Siiy7KpEmTaj32fffdl9122y2rr756VlpppfTu3Tv7779/Xn311Vr7FQqFbLTRRkmSO+64Y5qvCQCAlqPmaLtjjz027733Xun7zTbbLM8//3yef/757L///qX7G7rO+TfffJMTTjgha665Znr16pUDDjigFF7UVN/zn2Taa9xeeumlpW2vvPJKrW0z+gz/4osvZv311y99f++995bO0/baa6/06dOntG3jjTeutQZ3VVVVbrzxxmyzzTa1aq8+v5yR6jXOf/e73+Wtt97KPvvsk1VXXTVrrbVWTj311NJMW/Xx6KOPZt99903v3r1L53AXX3xxaRR5MuXc6+KLLy59v/fee2f55ZefZhC011571TpfvOSSS6bqU3jnnXdy9NFHZ91110337t2z/vrr56STTiqN9KxW8/z0ySefzG677Zbu3btngw02mO7rHDVqVM4555ysu+666dGjR3bZZZdafQHTeo6a58A1z7l/9atfZfnlly+dh1Z74YUXSvdX+7//+7/stdde6dWrV3r16pXddtttqmXyZnReniQjRozIueeeW+obWW+99XLqqad
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": "iVBORw0KGgoAAAANSUhEUgAAB9sAAAHeCAYAAAA7AmvEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACn10lEQVR4nOzdeZyN5f/H8fc9qzHGOraQtWQbW19SWUNFlkqWSoQQyddSSCIR2iwRWiRkyb5GZKnIkuxC2aIkYyyDGbOc8/tjfnN/Z8wZZjkz91lez8fDw5mz3Odz5rrPmXNf7/u6LsNut9sFAAAAAAAAAAAAAADSzMfqAgAAAAAAAAAAAAAAcDeE7QAAAAAAAAAAAAAApBNhOwAAAAAAAAAAAAAA6UTYDgAAAAAAAAAAAABAOhG2AwAAAAAAAAAAAACQToTtAAAAAAAAAAAAAACkE2E7AAAAAAAAAAAAAADpRNgOAAAAAAAAAAAAAEA6EbYDAAAAAAAAAAAAAJBOhO0AkMXi4uL0zTffqGPHjqpdu7YqV66shx9+WK+88op+/vnnFPcfPHiwypcvr/Lly+uff/7JtjpjYmJ08uTJbHu+9Er8nXTu3NmyGn799Vfdd999evnll9P92B07dpiv4ZNPPsmC6tJvyZIlZk3Lly9PcfuxY8fSdX9XcPbsWbPGoUOHprh97969qlatmnmfkSNHSkrePon/zp8/n+yxf//9d4r77NixI1tel7NFRESocuXKat68uWJiYqwuBwAAAC4kJiZGM2fOVLt27VSrVi1VqlRJderUUdeuXbVmzZoU9+/YsaPKly+vihUrmteldvzj6L7uxGaz6Y8//nB4219//aXr169nc0XJNWrUSOXLl1eTJk0yva2IiAiFh4en6b67du1S27ZtVbVqVdWoUUMdOnSQ3W7PdA2Z0blzZ3MfTHS7Y9p58+bp0UcfVeXKlfXAAw9ozJgxkqRz586pd+/eqlmzpsLCwtSsWTMdP348W19LZmXFvmlVH40rvM/u5MyZMwoLC1PLli3T/dg79WlY4U79Wbf2Hbli/5cjt9uH//zzTz300EPmfXr16qW4uLhk7ZP4b8+ePckeGxMTo6pVqya7z5IlS7LpVTlXTEyMHnroIT344IO6cuWK1eUALo2wHQCy0L///qu2bdtq2LBh2rlzpy5fvqzY2FhduHBB69evV+fOnTVu3Diry9SaNWvUrFkzrVq1yupSXFZ8fLzefvtt2e12Pffcc1aXk6VOnjypV155RT179rS6FKc6fvy4evTooaioKEnSU089pWHDhqV6/1tPhnF0coy7yp8/vx577DH98ccf+vzzz60uBwAAAC4iOjpaL7zwgsaMGaO9e/fqypUriouLU0REhH766Sf169dPw4cPt7pMS2zdulVPPfVUiu/PV65c0bhx4/TYY4/p0qVLFlXnPNHR0Zo2bZqaNGmSplA5KipKPXv21L59+xQdHa3r168rMjJShmFkQ7XOsXv3bo0YMUKnTp1SbGysLl26pNjYWEnSG2+8oQ0bNujatWu6efOmjh8/rnz58llccdp40r7pTq9l9OjRunnzpsf3HZ0/f15vvPGGWrVqZXUpTnXhwgV16dLFPNno4Ycf1oQJE+Tn5+fw/lu3bk3286+//qro6OgsrzM7BAQEqE2bNrp48aLee+89q8sBXJrjTwgAQKbFxMTo5Zdf1qFDhyRJ7dq1U5s2bRQcHKzt27dr/PjxioyM1IwZM1SlShU1a9bMkjp3796tfv36WfLc6bFlyxZJCV/0rLBu3TodOXJEd999tx566CFLanC2xx9/XA8++KAkKU+ePOb1PXr00OnTp1WsWDGrSnO6c+fOqWvXrrp8+bIk6YknntDo0aNv2wG0bds2tW7d2vzZk8J2SerQoYNWrlypTz/9VM8++6zy5s1rdUkAAACw2Pz5881Rek899ZQ6dOigPHny6Pfff9eoUaN07tw5zZ8/Xy1atND9998vSZo4caJiYmLcKlxNr/Pnz6tLly6SpPvuuy/Zbe+//74WLlxoRVlZ4ssvv9SECRPSfP8//vhD165dkyTVrVtXw4YNk81my6LqMie1Y+C9e/eal3v16qVWrVopKCgo2W0FCxbUjBkzFB8fr/z582dbzZnhSfumu7yW/fv3a9OmTQoODlaLFi2sLscpqlevbvbJ5cqVy7x+8ODB2rZtm1VlZYnIyEh169ZNZ86ckSTVqlVLU6ZMuW1f5M8//6xXXnkl2c+epH379vr000+1ePFidenSRWXLlrW6JMAlEbYDQBZZunSpDh48KClh+rIhQ4aYt5UtW1bFixdX9+7dJUmLFy+2LGy3emq3tCpSpIilzz9jxgxJ0mOPPeYxnUhBQUFmB0JS7rJPpNXly5fVtWtXnTt3TpLUuHFjjRs3Tj4+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": "iVBORw0KGgoAAAANSUhEUgAAB+wAAALFCAYAAADp1BpAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAADspElEQVR4nOzdeZxO9f//8eeZfWPs+zbGMsyCIkklJLvskqQsEVrITlEUElKij1RoQcbeoJRS1jbMGPsaso2xjBmzX78/fOf6zWVmmBkzzjXmcb/dumXOdr3Ouc71uuY2z3Pex7BYLBYBAAAAAAAAAAAAAIB7ysHsAgAAAAAAAAAAAAAAyI8I7AEAAAAAAAAAAAAAMAGBPQAAAAAAAAAAAAAAJiCwBwAAAAAAAAAAAADABAT2AAAAAAAAAAAAAACYgMAeAAAAAAAAAAAAAAATENgDAAAAAAAAAAAAAGACAnsAAAAAAAAAAAAAAExAYA8AAAAAAAAAAAAAgAkI7AEAAIBcEh8frwULFqhbt2566KGH5O/vrwYNGqhPnz5at25dmuV79uyp6tWrq2bNmtZpO3fuVPXq1VW9enXNmTPntsvmJcnJyTpy5Ei6886cOaPo6Oh7XNH94dChQ+rVq5fq1Kmj2rVr6+mnn9bly5dNrWns2LHWc/j06dOSMj6vJenHH39Uu3btFBgYqHr16un111+XJF29elWjRo1S/fr1FRgYqCeffFI7duy417tzVyIjIxUREWF2GTni448/tr6Hf/31l9nlZEtG59rdOH36tPW4jB079u6LzIJDhw7d09fLjn/++Ud+fn56+eWXs7zu7fqGWVasWGGtafXq1Wnm3/qe3Gl5e3Cnc3j37t2qXbu2dZl33nlHku37k/Lf+fPnbdb977//0iyzc+fOe7JfOS0yMlIBAQFq3bq14uPjzS4HAAAAeRyBPQAAAJALYmNj9fzzz2vy5MnavXu3rl69qsTEREVGRmrLli0aMmSIxo8fb3aZpti6das6duyo+fPn20y/evWqpk6dqhYtWpgeMudVr7zyinbs2KGYmBjduHFDp06dUqFChcwuK9POnDmjIUOG6ODBg4qPj9e1a9d048YNSdK0adO0cuVKXblyRfHx8Tp16pQ8PT1NrjhzYmNj9emnn6pZs2Y6evSo2eVAtz/X8prz589rzJgxevrpp80u5baSkpL09ttvy2KxqEePHmaXk6uOHz+uwYMHa8CAAWaXkqOOHj2q/v37Wz8rHTt21Jtvvpnh8tu3b7/tz3lZkSJF1KJFCx05ciTN7zMAAABAVjmZXQAAAABwP1qyZIl27dol6eYftLt37y5vb28dPnxYkyZN0tmzZ7VkyRK1bdtWdevWlSTNmjVL8fHxMgzDzNJz1fnz59W7d29Jkp+fn828adOmadmyZWaUdV+IjIzUiRMnJN08tjNnzlRSUpJdnk916tTR5s2bJUleXl7W6WFhYUpMTJQkderUSf3795ejo6Okm3d1SpKrq6u+/vprubi4yNfX994Wnk1ffvmlPvzwQ7PLQCq3O9fymlGjRmnbtm1ml3FHP/zwgw4cOKAKFSqoYcOGZpeTI1q2bKlHHnlEkuTt7W2d3r9/f508eVJly5Y1q7Qcd/bsWfXp00dXrlyRJLVp00bvvvvubb9jtm3bpvbt21t/vp8Ce0nq3r271q5dq3nz5unZZ5/NUxfIAQAAwL4Q2AMAAAC5IPVQ3W+++aY8PDwkSRUrVlRCQoJ16OXt27dbA/siRYrc8zrvNYvFkq15uLPUdwf7+/urcuXKJlZzey4uLipVqlSa6an34aGHHlLFihWtP8fExEiSSpQooaCgoNwvMgdxbtuf251reU1eOb+++OILSVKLFi3s8kKi7HB3d5e7u3ua6XnlPcmsK1euqE+fPjp79qwk6cknn9TUqVPl4JD+wJ1ly5bVmTNn0gT0Kb8blStXzvqIlLzsgQceUIkSJXThwgV99913eumll8wuCQAAAHkUQ+IDAAAAucDFxcX67xEjRmjfvn3Wn5966ilt375d27dvV58+fazTs/tc+kuXLmn06NF66KGHVKdOHfXt21cHDhxIs9zFixf13nvv6amnnlJgYKDq16+vAQMG6I8//kizbMqzZV944QWb6bd7bvWaNWvUqVMn1apVSw8++KB69eqlrVu3Wufv3LlTjRo1sv68cuVKVa9eXR9//LF69uyp4OBg67ymTZuqevXq1p+Tk5O1aNEitW3b1qb2sLCwTB2jc+fOaezYsWrcuLECAgIUFBSkli1baubMmek+e3bLli3q06eP6tWrp1q1aql58+aaPn26rl69mmbZ7du3a8CAAXrkkUcUEBCgJ598Uu+9916aZ5WnPnZ//PGH2rRpo4CAALVt21ZJSUmSpD179uill15S3bp1FRQUpPbt2+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"
]
},
2022-12-09 07:43:44 -08:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
2022-11-14 12:40:38 -08:00
{
"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"
]
},
2022-12-09 07:43:44 -08:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
2022-11-14 12:40:38 -08:00
{
"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"
]
},
2022-12-09 07:43:44 -08:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
2022-11-14 12:40:38 -08:00
{
"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"
]
},
2022-12-09 07:43:44 -08:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
2022-11-14 12:40:38 -08:00
{
"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"
]
},
2022-12-09 07:43:44 -08:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
2022-11-14 12:40:38 -08:00
{
"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"
]
},
2022-12-09 07:43:44 -08:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
2022-11-14 12:40:38 -08:00
{
"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"
]
},
2022-12-09 07:43:44 -08:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
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 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-09 07:43:44 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjq0lEQVR4nOzdd5hU1f0/8PdQpVijQWNvIUZE0STGFtvPHqyxiz1qrLH3GFusiRpN1GgMdlHsihor31ixFxRREBUrqKGXhZ3fH7iTXVhgWRZmy+v1PPs47MzOfGbuveM9533POYVisVgMAAAAAAAAAJBW5S4AAAAAAAAAABoLIToAAAAAAAAAfE+IDgAAAAAAAADfE6IDAAAAAAAAwPeE6AAAAAAAAADwPSE6AAAAAAAAAHxPiA4AAAAAAAAA3xOiAwAAAAAAAMD3hOgAAAAAAAAA8D0hOtBoTZkyJXfeeWd69eqVddddN926dcuGG26YI488Mi+88MIMjz/llFPStWvXdO3aNV9++eV8q3Py5Mn56KOP5tvrzamqz2T//fcvWw2vvfZafvKTn+R3v/vdHP/tSy+9VHoPf//73+dBdXPunnvuKdV0//33z3D/4MGD5+jxjclLL72Uo48+OhtttFG6deuWHj16ZIcddshll12W0aNHl7u8WZr+c29IvXr1SteuXfPTn/601vvfeuutnHjiidl0003TrVu3rLPOOtl9993zr3/9KxMnTqzx2HLu0/PyM9pss83StWvXbLHFFvPsNaobNGhQunbtmgMOOGC+vB4AwOxMnjw5vXv3zu67755f/OIXWX311bPeeuvloIMOSr9+/WZ4fG3nmDM7V5zd+WhjV1lZmQ8//LDW+z777LOMGzduPldUU0Oey3777bcZOXJknR778ssvZ7fddsuaa66ZtddeO3vuuWeKxeJc1zA39t9//9I+WGVWbdrbb789W221Vbp165Zf/vKXueCCC5IkX3zxRY444oiss8466d69e7bddtsMGTJkvr6XuTUv9s1y9dE0huNsdj799NN0794922+//Rz/7fDhw0uf7emnnz4Pqptzs2v7T98+b4z9XzPz3nvv5aSTTsqmm26aNdZYI2uttVa23XbbnH/++fnqq6/KXd4szctjYXZ900OGDMkf/vCHbLHFFunevXt69OiRHXfcMVdeeWVGjRpV47Hl3KfL2b/W0L799tt069Yt2223XSZPnjxfXpPmRYgONEpff/11dtttt5x55pkZMGBA/vvf/6aioiIjRozI448/nv333z8XXXRRuctMv379su222+ahhx4qdymN1tSpU3P22WenWCxm7733Lnc589RHH32UI488Mocddli5S6mXG2+8Mfvuu28ee+yxfP3116moqMj48eMzaNCgXHPNNdlpp50yYsSIcpc5g6+++iqnnXZadthhh7K8/mWXXZZdd901DzzwQD7//PNUVFRk7NixeeONN3LhhRdml112ybfffluW2qo09X2zNj/5yU+y9tpr5/nnn2/0F6cAAM3fxIkTs+++++aCCy7IG2+8kVGjRmXKlCn59ttv8+yzz+bYY4/NWWedVe4yy+K5557LzjvvnOuvv77G70eNGpWLLrooW2+9db777rsyVddwJk6cmGuuuSZbbLFFncLiCRMm5LDDDsubb76ZiRMnZty4cRkzZkwKhcJ8qLZhvPrqq/njH/+YYcOGpaKiIt99910qKiqSJKeddlqeeOKJjB07NpMmTcqQIUOy6KKLlrniumlO+2ZTei/nn39+Jk2a1Oz7jsrdhzG3Hn/88eyyyy65//778/nnn2fy5MmZMGFChgwZkptuuinbb7/9TC+aKqdyHwu33XZbtt9++/Tp0yeffPJJJk2alPHjx+e9997LVVddle23377sg7Sa+r5Zm8UWWyxbb711PvzwwxnOQ6Au2pS7AIDpTZ48Ob/73e8ycODAJMnuu++e3/zmN+nUqVNefPHFXHbZZRkzZkxuuOGGrLHGGtl2223LUuerr76aY489tiyvPSf69++fJGnXrl1ZXv+xxx7LoEGDstxyy2WDDTYoSw0NbZtttsn666+fJFl44YVLvz/00EPz8ccfZ+mlly5XafU2YsSIXHrppUmSlVdeOccff3xWWWWVjBo1Ktddd13+/e9/Z/jw4bn88stz/vnnl7namk455ZQ8//zzZXnt3r1755prrkmS/PjHP87vf//7rLLKKvn0009z5ZVX5o033siHH36Yk046qawn6/Nj3+zTp0+mTp2a1q1bz7PXmN6ee+6Z1157LX/5y1+y3XbbpU0bp7YAQHnccccdef3115MkO++8c/bcc88svPDC+eCDD3Leeefliy++yB133JGePXvmZz/7WZLkiiuuyOTJk5tUaDqnvvrqqxx44IFJpl0EWd0ll1ySu+66qxxlzRP/+te/cvnll9f58R9++GHGjh2bJNloo41y5plnprKych5VN3dm1gZ+4403SrcPP/zw7LDDDunQoUON+5ZYYonccMMNmTp1ahZbbLH5VvPcaE77ZlN5L2+99VaefvrpdOrUKT179ix3OQ2iR48epT65zp07l35fzj6MuTV58uScddZZmTp1an74wx/m5JNPzuqrr56JEyfmjjvuyB133JH//ve/Oe+889K7d+9yl1tDOY+Fxx9/PGeffXaSZOmll86xxx6b7t27Z8SIEfnHP/6R/v3758svv8xRRx2VBx54IK1alWfs6/zYN8tx7rPnnnvmwQcfzD/+8Y/stddeWWSRRebba9P06WkEGp17770377zzTpJp04ideuqppftWXnnlLLPMMjnkkEOSJHfffXfZQvRyT7FWV0suuWRZX/+GG25Ikmy99dbNpnOoQ4cOpY6B6prKPlGb119/vTSt0d57753NN9+8dN+f//znbLjhhhk1alStSymUW7k+91GjRuWKK65IMq0RdPvtt5caxssvv3xpKvxPP/00L774YoYPH55lllmmLLXOj89oiSWWmOevMb3NNtss7dq1y5dffpnHHnss22233XyvAQAgSV588cXS7TPPPDMdO3ZMMu28sKKiIr///e+TJC+88EIpRG8qgeLcmNV5aFNuP9VmTt/PhAkTSrd79OiR5ZdfvqFLajAzawNXfw8bbLBBVlhhhdK/x48fn2RaP86Pf/zjeV5jQ2pO+2ZTeS///Oc/kySbbLJJ6fuzqWvXrl2tfXJNZZvU5oMPPsg333yTJOnZs2d+/etfl+47++yz8+qrr+aDDz7IgAED5vtF9rNTrs99ypQp+dOf/pRk2sUUt956a5Zaaqkk/+s72nvvvfP6669n6NChee2110rnCfPb/PiMynHus/baa+eHP/xhvv7669x5552lXAHqwnTuQKNz7733JklatWqVQw89dIb7N95441x00UXp169f6SR7Zma1fszM1ql5/fXXc9hhh2W99dbLT3/606y99trZddddc/fdd5cec88999SYXuqqq65K165dc88995R+9+abb+aQQw7Jz372s3Tv3j077rhjbr311hmuLK+q4YILLsif/vSn9OjRI2uvvXaN15vel19+mdNPP720/nL37t2zzTbb5LLLLpthfZfp19uq/pnM7Oell16a4/dRm08//TRvv/12kuT//b//V+O+//73v7nwwguz5ZZbZq211spaa62VLbfcMhdccEGd194eMGBAevXqlTXXXDPrrrtu/vCHP2Ts2LGl93HllVfWePyIESPypz/9KVtuuWXWWGONrLvuujnssMMyYMCAGo+r/hldf/31OeGEE9K9e/esu+66ee6552pdD65r16755JNPkkxbX6lr167p1atXrXXfeuut2WqrrUozKdx+++017q/aN3/1q1/lq6++yvHHH5+f/exn+dnPfpaTTz45o0aNyieffJKjjjoqPXr0yM9//vMcc8wx+frrr2t9npmtxVRd9ZkKrrvuujzyyCOZNGlS6b4nn3wyL7zwQo19vPrnMHDgwFxxxRXZZJNNssYaa2TnnXfOE088McPrjB49OhdccEFp3/3Vr36VP/zhDzPUXvXYSy65pPRZrb/++jn
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-09 07:43:44 -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-09 07:43:44 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACt10lEQVR4nOzdeZyN5f/H8feZlRmTJWuyi4SxFaGyJUVCypJ9KSLJUpEUIrShFG2a7GMnBpHlW5ZGRfbEIDuDMMxmzvn9MZ37N8ec2ZezvZ6Px/fxPeacuc/nnOu+p/u+3vd1XSaLxWIRAAAAAAAAAAAAAACQl6MLAAAAAAAAAAAAAADAWRCiAwAAAAAAAAAAAADwH0J0AAAAAAAAAAAAAAD+Q4gOAAAAAAAAAAAAAMB/CNEBAAAAAAAAAAAAAPgPIToAAAAAAAAAAAAAAP8hRAcAAAAAAAAAAAAA4D+E6AAAAAAAAAAAAAAA/IcQHQAAAAAAAAAAAACA/xCiA3Bat2/f1qJFi9StWzfVq1dP1apV0yOPPKJXXnlFO3bsSPb6ESNGqHLlyqpcubLOnz+fa3XGxcXp+PHjufZ+GWX9Tnr27OmwGv744w/df//9evnllzP8u7/++qvxGb744oscqC7jli1bZtS0cuXKZM8fOXIkQ693Jr/++qteffVVPfroo6pWrZpq1aqlNm3aaMqUKbp+/bqjy0vVnd97durWrZsqV66sBx54wO7ze/fu1euvv64mTZqoWrVqqlOnjjp27KjvvvtOMTExNq915D6dk99R06ZNVblyZTVv3jzH3iOpw4cPq3LlyurVq1euvB8AAEBa4uLiFBISoo4dO6pu3bqqWrWq6tevrz59+igsLCzZ6+2dY6Z0rpjW+aizM5vNOnr0qN3nzpw5o5s3b+ZyRbay81z2ypUrioyMTNdrd+3apQ4dOqhGjRqqXbu2OnfuLIvFkuUasqJnz57GPmiV2jXtggUL1KJFC1WrVk0PP/ywJk6cKEk6d+6cBg4cqDp16ig4OFgtW7bUsWPHcvWzZFVO7JuO6qNxhuMsLadOnVJwcLCeeeaZDP/u6dOnje921KhROVBdxqV17X/n9bkz9n+l5NChQ3rjjTfUpEkTVa9eXTVr1lTLli01YcIEXbhwwdHlpSonj4W0+qaPHTumd955R82bN1dwcLBq1aqltm3b6rPPPtO1a9dsXuvIfdqR/WvZ7cqVK6pWrZpatWqluLi4XHlPuBdCdABO6eLFi+rQoYNGjx6t8PBw/fvvv4qPj9elS5e0YcMG9ezZU5MnT3Z0mQoLC1PLli21evVqR5fitBISEjR27FhZLBZ16dLF0eXkqOPHj+uVV15R//79HV1Kpnz//ffq3r271q9fr4sXLyo+Pl63bt3S4cOHNXPmTLVr106XLl1ydJnJXLhwQW+99ZbatGnjkPefMmWKnn/+ea1atUpnz55VfHy8oqKitGfPHk2aNEnt27fXlStXHFKblavvm/bcf//9ql27trZv3+70N6cAAAD3FxMTo+7du2vixInas2ePrl27ptu3b+vKlSv65ZdfNGTIEL377ruOLtMhtm3bpmeffVbffPONzc+vXbumyZMn68knn9TVq1cdVF32iYmJ0cyZM9W8efN0hcXR0dHq37+//vzzT8XExOjmzZu6ceOGTCZTLlSbPX7//XeNGTNGJ06cUHx8vK5evar4+HhJ0ltvvaWNGzcqKipKsbGxOnbsmAoWLOjgitPHnfZNV/osEyZMUGxsrNv3HTm6DyOrNmzYoPbt22vlypU6e/as4uLiFB0drWPHjmn27Nl65plnUrxpypEcfSzMnz9fzzzzjEJDQ/XPP/8oNjZWt27d0qFDhzR9+nQ988wzDh+k5er7pj2FChXSk08+qaNHjyY7DwHSw8fRBQDAneLi4vTyyy/rwIEDkqSOHTvqueeeU2BgoHbu3KkpU6boxo0bmjVrlqpXr66WLVs6pM7ff/9dQ4YMcch7Z8TWrVslSX5+fg55//Xr1+vw4cMqXbq0GjZs6JAasttTTz2lBg0aSJLy589v/Lxfv346efKkSpYs6ajSMu3SpUv66KOPJEkVKlTQsGHDVLFiRV27dk1ff/21fvzxR50+fVpTp07VhAkTHFytrREjRmj79u0Oee+QkBDNnDlTklSpUiW99tprqlixok6dOqXPPvtMe/bs0dGjR/XGG2849GQ9N/bN0NBQJSQkyNvbO8fe406dO3fWH3/8oU8++UStWrWSjw+ntgAAwDEWLlyo3bt3S5KeffZZde7cWfnz59fff/+t8ePH69y5c1q4cKFat26tBx98UJI0bdo0xcXFuVRomlEXLlxQ7969JSXeBJnUhx9+qMWLFzuirBzx3XffaerUqel+/dGjRxUVFSVJevTRRzV69GiZzeYcqi5rUroG3rNnj/F4wIABatOmjfLmzWvzXJEiRTRr1iwlJCSoUKFCuVZzVrjTvukqn2Xv3r3avHmzAgMD1bp1a0eXky1q1apl9Mnly5fP+Lkj+zCyKi4uTu+++64SEhJUtGhRvfnmm6patapiYmK0cOFCLVy4UP/++6/Gjx+vkJAQR5drw5HHwoYNGzR27FhJUsmSJTVkyBAFBwfr0qVL+uqrr7R161adP39egwYN0qpVq+Tl5Zixr7mxbzri3Kdz58764Ycf9NVXX+mFF15QgQIFcu294froaQTgdJYvX679+/dLSpxGbOTIkcZzFSpU0L333quXXnpJkrR06VKHheiOnmItvYoXL+7Q9581a5Yk6cknn3SbzqG8efMaHQNJuco+Yc/u3buNaY26dOmiZs2aGc99/PHHeuSRR3Tt2jW7Syk4mqO+92vXrmnatGmSEi+CFixYYFwYlylTxpgK/9SpU9q5c6dOnz6te++91yG15sZ3VKRIkRx/jzs1bdpUfn5+On/+vNavX69WrVrleg0AAACStHPnTuPx6NGjFRAQICnxvDA+Pl6vvfaaJGnHjh1GiO4qgWJWpHYe6srXT/Zk9PNER0cbj2vVqqUyZcpkd0nZJqVr4KSfoWHDhipbtqzx71u3bklK7MepVKlSjteYndxp33SVz/Ltt99Kkho3bmz8/XR1fn5+dvvkXKVN7Pn77791+fJlSVLr1q319NNPG8+NHTtWv//+u/7++2+Fh4fn+k32aXHU93779m29//77khJvppg3b55KlCgh6f/7jrp06aLdu3crIiJCf/zxh3GekNty4ztyxLlP7dq1VbRoUV28eFGLFi0ycgUgPZjOHYDTWb58uSTJy8tL/fr1S/Z8o0aNNHnyZIWFhRkn2SlJbf2YlNap2b17t/r376/69evrgQceUO3atfX8889r6dKlxmuWLVtmM73U9OnTVblyZS1btsz42Z9//qmXXnpJDz74oIKDg9W2bVvNmzcv2Z3l1homTpyo999/X7Vq1VLt2rVt3u9O58+f16hRo4z1l4ODg/XUU09pypQpydZ3uXO9raTfSUr/+/XXXzP8Oew5deqU9u3bJ0l6/PHHbZ77999/NWnSJD3xxBOqWbOmatasqSeeeEITJ05M99rb4eHh6tatm2rUqKF69erpnXfeUVRUlPE5PvvsM5vXX7p0Se+//76eeOIJVa9eXfXq1VP//v0VHh5u87qk39E333yj4cOHKzg4WPXq1dO2bdvsrgdXuXJl/fPPP5IS11eqXLmyunXrZrfuefPmqUWLFsZMCgsWLLB53rpvPvbYY7pw4YKGDRumBx98UA8++KDefPNNXbt2Tf/8848GDRqkWrVq6aGHHtLgwYN18eJFu9tJaS2mpJLOVPD1119r7dq1io2NNZ776aeftGPHDpt9POn3cODAAU2bNk2NGzdW9erV9eyzz2rjxo3J3uf69euaOHGise8+9thjeuedd5LVbn3thx9+aHxXDRo0UK9evfTLL78Yr2natKlNsF+5cmU1bdo0WX0//fSTOnXqpGrVqqlx48b6999/JUlbtmxRjx491KBBA1WrVk316tVTr169jLvFU7N+/XqjY6hr1642d5ZLUmBgoN5//319//33+u2339IM0FNaFyqlddG
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-09 07:43:44 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAACsmUlEQVR4nOzdeZyN5f/H8feZFUOWrMkukp1KqCwlRYqy76HIkiyFSkWENhRRSrKPnRhElm+RpmRfY5CdQRhmM+f8/hjn/s0xZ8yZ9T5zzuv5ePRo5pwz9/05577v476v931dl8Vms9kEAAAAAAAAAAAAAADkY3YBAAAAAAAAAAAAAAC4C0J0AAAAAAAAAAAAAABuI0QHAAAAAAAAAAAAAOA2QnQAAAAAAAAAAAAAAG4jRAcAAAAAAAAAAAAA4DZCdAAAAAAAAAAAAAAAbiNEBwAAAAAAAAAAAADgNkJ0AAAAAAAAAAAAAABuI0QHAAAAAAAAAAAAAOA2QnQAbuvWrVtasGCBOnXqpFq1aqlSpUp6/PHH1bdvX/3++++JXj906FCVL19e5cuX17lz5zKtzpiYGB07dizT1pdS9s+ka9euptXw999/68EHH9Trr7+e4r/9448/jPfw9ddfZ0B1KbdkyRKjpuXLlyd6/vDhwyl6vTv5448/9MYbb+iJJ55QpUqVVL16db344osaP368rl27ZnZ5d3Xn556eOnXqpPLly+uhhx5y+vzu3bv11ltvqUGDBqpUqZJq1qypNm3a6IcfflBUVJTDa83cpzPyM2rYsKHKly+vRo0aZdg6Ejp48KDKly+vV155JVPWBwAAkJyYmBjNmDFDbdq00aOPPqqKFSuqdu3a6t69u0JCQhK93tk5ZlLnismdj7o7q9WqI0eOOH3u9OnTunHjRiZX5Cg9z2UvX76s8PBwl177559/qnXr1qpatapq1Kihdu3ayWazpbmGtOjatauxD9rd7Zp23rx5aty4sSpVqqTHHntMY8aMkSSdPXtWffr0Uc2aNVWlShU1adJER48ezdT3klYZsW+a1UbjDsdZck6ePKkqVarohRdeSPHfnjp1yvhs33333QyoLuWSu/a/8/rcHdu/knLgwAG9/fbbatCggSpXrqxq1aqpSZMmGj16tM6fP292eXeVkcdCcm3TR48e1fvvv69GjRqpSpUqql69upo3b66vvvpKV69edXitmfu0me1r6e3y5cuqVKmSmjZtqpiYmExZJzwLIToAt3ThwgW1bt1aw4cPV2hoqP777z/Fxsbq4sWLWrdunbp27apx48aZXaZCQkLUpEkTrVy50uxS3FZcXJxGjBghm82mDh06mF1Ohjp27Jj69u2rXr16mV1Kqvz444/q3Lmz1q5dqwsXLig2NlY3b97UwYMHNXXqVLVo0UIXL140u8xEzp8/r3feeUcvvviiKesfP368WrVqpRUrVujMmTOKjY1VRESEdu7cqbFjx+rll1/W5cuXTanNLqvvm848+OCDqlGjhrZu3er2N6cAAADPFxUVpc6dO2vMmDHauXOnrl69qlu3buny5cv67bffNGDAAH3wwQdml2mKLVu26KWXXtJ3333n8PjVq1c1btw4Pfvss7py5YpJ1aWfqKgoTZ06VY0aNXIpLI6MjFSvXr20a9cuRUVF6caNG7p+/bosFksmVJs+tm/frg8//FDHjx9XbGysrly5otjYWEnSO++8o/Xr1ysiIkLR0dE6evSo8ubNa3LFrvGkfTMrvZfRo0crOjra49uOzG7DSKt169bp5Zdf1vLly3XmzBnFxMQoMjJSR48e1cyZM/XCCy8kedOUmcw+FubOnasXXnhBwcHB+vfffxUdHa2bN2/qwIEDmjRpkl544QXTO2ll9X3TmXz58unZZ5/VkSNHEp2HAK7wM7sAALhTTEyMXn/9de3bt0+S1KZNG7Vs2VJBQUHatm2bxo8fr+vXr2v69OmqXLmymjRpYkqd27dv14ABA0xZd0ps3rxZkhQQEGDK+teuXauDBw+qePHiqlu3rik1pLfnnntOderUkSTlzp3beLxnz546ceKEihYtalZpqXbx4kV99tlnkqQyZcpo0KBBKlu2rK5evapp06bp559/1qlTpzRhwgSNHj3a5GodDR06VFu3bjVl3TNmzNDUqVMlSeXKldObb76psmXL6uTJk/rqq6+0c+dOHTlyRG+//bapJ+uZsW8GBwcrLi5Ovr6+GbaOO7Vr105///23vvjiCzVt2lR+fpzaAgAAc8yfP187duyQJL300ktq166dcufOrX/++UejRo3S2bNnNX/+fDVr1kwPP/ywJGnixImKiYnJUqFpSp0/f17dunWTFH8TZEKffvqpFi5caEZZGeKHH37QhAkTXH79kSNHFBERIUl64oknNHz4cFmt1gyqLm2SugbeuXOn8XPv3r314osvKnv27A7PFShQQNOnT1dcXJzy5cuXaTWnhSftm1nlvezevVsbN25UUFCQmjVrZnY56aJ69epGm1zOnDmNx81sw0irmJgYffDBB4qLi1PBggU1ZMgQVaxYUVFRUZo/f77mz5+v//77T6NGjdKMGTPMLteBmcfCunXrNGLECElS0aJFNWDAAFWpUkUXL17Ut99+q82bN+vcuXPq16+fVqxYIR8fc/q+Zsa+aca5T7t27fTTTz/p22+/Vfv27ZUnT55MWzeyPloaAbidpUuXau/evZLihxEbNmyY8VyZMmV0//3367XXXpMkLV682LQQ3ewh1lxVuHBhU9c/ffp0SdKzzz7rMY1D2bNnNxoGEsoq+4QzO3bsMIY16tChg5566injuc8//1yPP/64rl696nQqBbOZ9blfvXpVEydOlBR/ETRv3jzjwrhEiRLGUPgnT57Utm3bdOrUKd1///2m1JoZn1GBAgUyfB13atiwoQICAnTu3DmtXbtWTZs2zfQaAAAAJGnbtm3Gz8OHD1eOHDkkxZ8XxsbG6s0335Qk/f7770aInlUCxbS423loVr5+cial7ycyMtL4uXr16ipRokR6l5RukroGTvge6tatq5IlSxq/37x5U1J8O065cuUyvMb05En7ZlZ5L99//70kqX79+sb3Z1YXEBDgtE0uq2wTZ/755x9dunRJktSsWTM9//zzxnMjRozQ9u3b9c8//yg0NDTTb7JPjlmf+61bt/Txxx9Lir+ZYs6cOSpSpIik/2876tChg3bs2KGwsDD9/fffxnlCZsuMz8iMc58aNWqoYMGCunDhghYsWGDkCoArGM4dgNtZunSpJMnHx0c9e/ZM9Hy9evU0btw4hYSEGCfZSbnb/DFJzVOzY8cO9erVS7Vr19ZDDz2kGjVqqFWrVlq8eLHxmiVLljgMLzVp0iSVL19eS5YsMR7btWuXXnvtNT388MOqUqWKmjdvrjlz5iS6s9xew5gxY/Txxx+revXqqlGjhsP67nTu3Dm9++67xvzLVapU0XPPPafx48cnmt/lzvm2En4mSf33xx9/pPh9OHPy5Ent2bNHkvT00087PPfff/9p7NixeuaZZ1StWjVVq1ZNzzzzjMaMGePy3NuhoaHq1KmTqlatqlq1aun9999XRESE8T6++uorh9dfvHhRH3/8sZ555hlVrlxZtWrVUq9evRQaGurwuoSf0XfffafBgwerSpUqqlWrlrZs2eJ0Prjy5cvr33//lRQ/v1L58uXVqVMnp3XPmTNHjRs3NkZSmDdvnsPz9n3zySef1Pnz5zVo0CA9/PDDevjhhzVkyBBdvXpV//77r/r166fq1avrkUceUf/+/XXhwgWny0lqLqaEEo5UMG3aNK1evVrR0dHGc7/88ot+//13h3084eewb98+TZw4UfXr11flypX10ksvaf369YnWc+3aNY0ZM8bYd5988km9//77iWq3v/bTTz81Pqs6derolVde0W+//Wa8pmHDhg7Bfvny5dWwYcNE9f3yyy9q27atKlWqpPr16+u///6TJG3atEldunRRnTp1VKlSJdWqVUuvvPKKcbf43axdu9ZoGOrYsaPDneWSFBQUpI8//lg//vij/vrrr2QD9KTmhUpqXrSrV69
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-09 07:43:44 -08:00
"image/png": "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adSoUTKbzelUXeokdg68b98+43a/fv3UvHlzZc2a1eax/Pnza9asWYqNjVWePHkyrObUcKdtM7N8lgMHDmjr1q0KCAhQs2bNnF1OmqhWrZrRJpc9e3bjfme2YaRWVFSUPvjgA8XGxqpAgQIaPny4KlasqIiICC1cuFALFy7Uv//+q7FjxyooKMjZ5dpw5r6wadMmjR49WpJUpEgRDR48WIGBgbp69aq+/fZbbd++XZcuXdLAgQO1atUqeXk5p+9rRmybzjj26dChg1avXq1vv/1Wr776qnLlypVh743Mj5ZGAC5n+fLlOnTokKS4YcRGjBhhPFa6dGk98sgj6t27tyRp6dKlTgvRnT3EmqMKFSrk1PefNWuWJOmFF15wm8ahrFmzGg0D8WWWbcKevXv3GsMadezYUc8++6zx2Oeff66nnnpKt27dsjuVgrM563u/deuWpkyZIinuJGjBggXGiXHx4sWNofDPnTunXbt26fz583rkkUecUmtGfEf58+dP9/e4X8OGDeXn56dLly5p48aNatq0aYbXAAAAIEm7du0ybo8aNUrZsmWTFHdcGB0drTfffFOS9NtvvxkhemYJFFPjQcehmfn8yZ7kfp7w8HDjdrVq1VS8ePG0LinNJHYOHP8z1K1bVyVKlDD+vnfvnqS4dpyyZcume41pyZ22zczyWb7//ntJ0jPPPGP8fmZ2fn5+dtvkMss6seevv/7S9evXJUnNmjXTSy+9ZDw2evRo7dmzR3/99ZdCQkIy/CL7pDjre4+JidHHH38sKe5iinnz5qlw4cKS/r/tqGPHjtq7d69CQ0P1559/GscJGS0jviNnHPtUr15dBQoU0JUrV7Ro0SIjVwAcwXDuAFzO8uXLJUleXl7q06dPgsfr16+viRMnat26dcZBdmIeNH9MYvPU7N27V3379lXt2rVVoUIFVa9eXW3atNHSpUuN5yxbtsxmeKmpU6eqXLlyWrZsmXHf/v371bt3bz3++OMKDAxUixYtNG/evARXlltrGD9+vD7++GNVq1ZN1atXt3m/+126dEkjR4405l8ODAzUiy++qEmTJiWY3+X++bbifyeJ/ff7778n+3PYc+7cOR08eFCS9Nxzz9k89u+//2rChAl6/vnnVbVqVVWtWlXPP/+8xo8f7/Dc2yEhIercubOqVKmiWrVq6f3331dYWJjxOb766iub51+9elUff/yxnn/+eVWuXFm1atVS3759FRISYvO8+N/Rd999p2HDhikwMFC1atXSjh077M4HV65cOf3999+S4uZXKleunDp37my37nnz5qlx48bGSAoLFiywedy6bT799NO6fPmyhg4dqscff1yPP/64hg8frlu3bunvv//WwIEDVa1aNT3xxBMaNGiQrly5Ync5ic3FFF/8kQpmzpyp9evXKzIy0njs559/1m+//Wazjcf/Hg4fPqwpU6bomWeeUeXKlfXKK69o8+bNCd7n9u3bGj9+vLHtPv3003r//fcT1G597qeffmp8V3Xq1FH37t3166+/Gs9p2LChTbBfrlw5NWzYMEF9P//8s9q3b69KlSrpmWee0b///itJ2rZtm7p27ao6deqoUqVKqlWrlrp3725cLf4gGzduNBqGOnXqZHNluSQFBATo448/1o8//qg//vgjyQA9sXmhEpsX7datWxo
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-09 07:43:44 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAHeCAYAAAAsIPsNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC3+klEQVR4nOzdd3hT5f/G8TudQEH2kj0EZZSl8AVlLwFZouwNMkVkKEtEEARcgIKgKFR2WQJCAUGGCiKI7CkUkL1ldtHk90fN+TU0pelMmr5f1+VlmnHyyTkn4ZznPs/zmCwWi0UAAAAAAAAAAAAAAEAezi4AAAAAAAAAAAAAAABXQYgOAAAAAAAAAAAAAMB/CNEBAAAAAAAAAAAAAPgPIToAAAAAAAAAAAAAAP8hRAcAAAAAAAAAAAAA4D+E6AAAAAAAAAAAAAAA/IcQHQAAAAAAAAAAAACA/xCiAwAAAAAAAAAAAADwH0J0AAAAAAAAAAAAAAD+Q4gOwGU9evRIS5cuVadOnVSlShWVKVNGL730kt588039/vvvMZ4/fPhwlSxZUiVLltSVK1dSrM7w8HCdOXMmxd4vvqzrpGvXrk6r4a+//tKzzz6rvn37xvu1f/zxh/EZvvrqq2SoLv5Wrlxp1LR69eoYj588eTJez3clf/zxh9566y1Vr15dZcqUUYUKFdS8eXNNmTJFd+/edXZ5T/T4ek9KnTp1UsmSJVWqVCm7jx88eFDvvPOOateurTJlyqhSpUpq06aN5s6dq9DQUJvnOnOfTs51VKdOHZUsWVL169dPtveI7vjx4ypZsqS6deuWIu8HAAAQl/DwcAUEBKhNmzaqXLmySpcurapVq6pHjx4KCgqK8Xx7x5ixHSvGdTzq6sxms06dOmX3sYsXL+rBgwcpXJGtpDyWvXXrlm7cuOHQc/fs2aPWrVurXLlyqlixotq1ayeLxZLoGhKja9euxj5o9aRz2sWLF6thw4YqU6aM/ve//2nixImSpMuXL6t///6qVKmS/P391bhxY50+fTpFP0tiJce+6aw2Glf4nsXl/Pnz8vf3V7NmzeL92gsXLhjrdtSoUclQXfzFde7/+Pm5K7Z/xebYsWN69913Vbt2bZUtW1bly5dX48aNNWHCBF29etXZ5T1Rcn4X4mqbPn36tN5//33Vr19f/v7+qlChglq0aKEvv/xSd+7csXmuM/dpZ7avJbVbt26pTJkyatKkicLDw1PkPeFeCNEBuKRr166pdevWGj16tHbv3q1///1XERERun79ujZt2qSuXbtq8uTJzi5TQUFBaty4sdauXevsUlxWZGSkxo4dK4vFog4dOji7nGR15swZvfnmm+rTp4+zS0mQ77//Xp07d9bGjRt17do1RURE6OHDhzp+/LhmzZqlli1b6vr1684uM4arV69q5MiRat68uVPef8qUKXr99de1Zs0aXbp0SREREbp//77279+vSZMmqVWrVrp165ZTarNK7fumPc8++6wqVqyonTt3uvzFKQAAwP2Fhoaqc+fOmjhxovbv3687d+7o0aNHunXrln777TcNGjRIY8aMcXaZTrFjxw69+uqr+vbbb23uv3PnjiZPnqyXX35Zt2/fdlJ1SSc0NFSzZs1S/fr1HQqLQ0JC1KdPHx04cEChoaF68OCB7t27J5PJlALVJo29e/fqgw8+0NmzZxUREaHbt28rIiJCkjRy5Eht3rxZ9+/fV1hYmE6fPq2sWbM6uWLHuNO+mZo+y4QJExQWFub2bUfObsNIrE2bNqlVq1ZavXq1Ll26pPDwcIWEhOj06dOaN2+emjVrFutFU87k7O/CokWL1KxZMwUGBuqff/5RWFiYHj58qGPHjmn69Olq1qyZ0ztppfZ9055s2bLp5Zdf1qlTp2IchwCO8HJ2AQDwuPDwcPXt21dHjhyRJLVp00avvfaa/Pz8tGvXLk2ZMkX37t3TnDlzVLZsWTVu3Ngpde7du1eDBg1yynvHx/bt2yVJPj4+Tnn/jRs36vjx4ypYsKBefPFFp9SQ1Bo1aqRq1apJkjJnzmzc37t3b507d0758uVzVmkJdv36dX366aeSpGLFimnIkCEqXry47ty5o9mzZ+unn37ShQsXNHXqVE2YMMHJ1doaPny4du7c6ZT3DggI0KxZsyRJJUqU0Ntvv63ixYvr/Pnz+vLLL7V//36dOnVK7777rlMP1lNi3wwMDFRkZKQ8PT2T7T0e165dO/3111/6/PPP1aRJE3l5cWgLAACcY8mSJdq3b58k6dVXX1W7du2UOXNm/f333xo/frwuX76sJUuWqGnTpnr++eclSdOmTVN4eHiqCk3j6+rVq+revbukqIsgo/vkk0+0bNkyZ5SVLObOnaupU6c6/PxTp07p/v37kqTq1atr9OjRMpvNyVRd4sR2Drx//37jdr9+/dS8eXOlT5/e5rGcOXNqzpw5ioyMVLZs2VKs5sRwp30ztXyWgwcPauvWrfLz81PTpk2dXU6SqFChgtEmlzFjRuN+Z7ZhJFZ4eLjGjBmjyMhI5cqVS8OGDVPp0qUVGhqqJUuWaMmSJfr33381fvx4BQQEOLtcG878LmzatEljx46VJOXLl0+DBg2Sv7+/rl+/rm+++Ubbt2/XlStXNGDAAK1Zs0YeHs7p+5oS+6Yzjn3atWunH3/8Ud98843at2+vLFmypNh7I/WjpRGAy/nhhx90+PBhSVHDiI0YMcJ4rFixYsqfP7969eolSVqxYoXTQnRnD7HmqDx58jj1/efMmSNJevnll92mcSh9+vRGw0B0qWWfsGffvn3GsEYdOnRQ3bp1jcc+++wzvfTSS7pz547dqRSczVnr/c6dO5o2bZqkqJOgxYsXGyfGhQoVMobCP3/+vHbt2qULFy4of/78Tqk1JdZRzpw5k/09HlenTh35+PjoypUr2rhxo5o0aZLiNQAAAEjSrl27jNujR49WhgwZJEUdF0ZEROjtt9+WJP3+++9GiJ5aAsXEeNJxaGo+f7Invp8nJCTEuF2hQgUVKlQoqUtKMrGdA0f/DC+++KIKFy5s/P3w4UNJUe04JUqUSPYak5I77Zup5bN89913kqRatWoZv5+pnY+Pj902udSyTez5+++/dfPmTUlS06ZN9corrxiPjR07Vnv37tXff/+t3bt3p/hF9nFx1np/9OiRPvroI0lRF1MsXLhQefPmlfT/bUcdOnTQvn37FBwcrL/++ss4TkhpKbGOnHHsU7FiReXKlUvXrl3T0qVLjVwBcATDuQNwOT/88IMkycPDQ717947xeM2aNTV58mQFBQUZB9mxedL8MbHNU7Nv3z716dNHVatWValSpVSxYkW9/vrrWrFihfGclStX2gwvNX36dJUsWVIrV6407jtw4IB69eql559/Xv7+/mrRooUWLlwY48pyaw0TJ07URx99pAoVKqhixYo27/e4K1euaNSoUcb8y/7+/mrUqJGmTJkSY36Xx+fbir5OYvvvjz/+iPfnsOf8+fM6dOiQJKlevXo2j/3777+aNGmSGjRooPLly6t8+fJq0KCBJk6c6PDc27t371anTp1Urlw5ValSRe+//77u379vfI4vv/zS5vnXr1/XRx99pAYNGqhs2bKqUqWK+vTpo927d9s8L/o6+vbbbzV06FD5+/urSpUq2rFjh9354EqWLKl//vlHUtT8SiVLllSnTp3s1r1w4UI1bNjQGElh8eLFNo9b980aNWro6tWrGjJkiJ5//nk9//zzGjZsmO7cuaN//vlHAwYMUIUKFfTCCy9o4MCBunbtmt3lxDYXU3TRRyqYPXu21q9fr7CwMOOxn3/+Wb///rvNPh59PRw5ckTTpk1TrVq1VLZsWb366qvavHlzjPe5e/euJk6caOy7NWrU0Pvvvx+jdutzP/nkE2NdVatWTd26ddNvv/1mPKdOnTo2wX7JkiVVp06dGPX9/PPPatu2rcqUKaNatWrp33//lSRt27ZNXbp0UbVq1VSmTBlVqVJF3bp1M64Wf5KNGzcaDUMdO3a0ubJckvz8/PTRRx/p+++/159//hlngB7bvFCxzYt2584dTZw4UfXr11f
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-09 07:43:44 -08:00
"image/png": "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GjVqlKxWaypVlzzxnQMfOnTIuN23b181b95cGTNmtHssT548mjt3riIjI5UzZ840qzk5XGnbTC/v5fDhw9q+fbv8/PzUrFkzs8tJEZUrVzba5DJnzmzcb2YbRnKFh4dr9OjRioyM1BNPPKFhw4apbNmyCg0N1eLFi7V48WL9888/Gj9+vPz9/c0u146Z+8KWLVs0duxYSVKBAgU0aNAgVahQQdevX9c333yjnTt36sqVKxowYIDWrl0rDw9z+r6mxbZpxrFP27Zt9eOPP+qbb75Ru3btlD179jR7baR/tDQCcDqrVq3SkSNHJEUNIzZixAjjsRIlSqhgwYLq2bOnJGnFihWmhehmD7HmqHz58pn6+nPnzpUkvfzyyy7TOJQxY0ajYSCm9LJNxOXgwYPGsEbt27dX/fr1jcc+//xzPf/887pz506cUymYzazP/c6dO5o2bZqkqJOgRYsWGSfGRYoUMYbCv3Dhgvbu3auLFy+qYMGCptSaFp9Rnjx5Uv01HlWvXj35+PjoypUr2rx5s5o2bZrmNQAAAEjS3r17jdujRo1SpkyZJEUdF0ZEROidd96RJO3Zs8cI0dNLoJgcjzsOTc/nT3FJ7PsJCQkxbleuXFlFihRJ6ZJSTHznwDHfQ61atVS0aFHj/w8ePJAU1Y5TqlSpVK8xJbnStple3su3334rSapTp47x/Zne+fj4xNkml17WSVxOnz6tmzdvSpKaNWumV155xXhs7NixOnDggE6fPq2AgIA0v8g+IWZ97g8fPtTHH38sKepiigULFih//vyS/td21L59ex08eFCBgYH6/fffjeOEtJYWn5EZxz5VqlTRE088oWvXrmnp0qVGrgA4guHcATidVatWSZI8PDzUq1evWI+/+OKLmjx5sjZs2GAcZMfncfPHxDdPzcGDB9W7d2/VqFFDZcqUUZUqVfTmm29qxYoVxnNWrlxpN7zU9OnTVbp0aa1cudK4748//lDPnj317LPPqkKFCmrRooUWLFgQ68ry6BomTpyojz/+WJUrV1aVKlXsXu9RV65c0ciRI435lytUqKDGjRtrypQpseZ3eXS+rZifSXw/+/btS/T7iMuFCxf0559/SpJeeuklu8f++ecfTZo0SQ0bNlSlSpVUqVIlNWzYUBMnTnR47u2AgAB17NhRFStWVPXq1fXhhx8qODjYeB9ffvml3fOvX7+ujz/+WA0bNlT58uVVvXp19e7dWwEBAXbPi/kZzZkzR0OHDlWFChVUvXp17dq1K8754EqXLq2//vpLUtT8SqVLl1bHjh3jrHvBggVq1KiRMZLCokWL7B6P3jZfeOEFXb16VUOGDNGzzz6rZ599VsOGDdOdO3f0119/acCAAapcubKee+45DRw4UNeuXYtzOfHNxRRTzJEKZs+erY0bNyosLMx47Oeff9aePXvstvGYn8PRo0c1bdo01alTR+XLl9frr7+urVu3xnqdu3fvauLEica2+8ILL+jDDz+MVXv0cz/99FPjs6pZs6a6du2qX3/91XhOvXr17IL90qVLq169erHq+/nnn9WmTRuVK1dOderU0T///CNJ2rFjhzp37qyaNWuqXLlyql69urp27WpcLf44mzdvNhqGOnToYHdluST5+fnp448/1vfff6/ffvstwQA9vnmh4psX7c6dO5o4caI
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-09 07:43:44 -08:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB+wAAALFCAYAAADp1BpAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUZd7G8ftMeu+kQQJJKEoJqIiIiqKINJViF7trL2BB1FddsRfUlVXXsoK4i6wURSmKoigIYoEAoSeQkJDee0Iy7x9JDhmSQGiZAb+f6+Jicto858yZZ5K5z/M7htVqtQoAAAAAAAAAAAAAALQri70bAAAAAAAAAAAAAADAXxGBPQAAAAAAAAAAAAAAdkBgDwAAAAAAAAAAAACAHRDYAwAAAAAAAAAAAABgBwT2AAAAAAAAAAAAAADYAYE9AAAAAAAAAAAAAAB2QGAPAAAAAAAAAAAAAIAdENgDAAAAAAAAAAAAAGAHBPYAAAAAAAAAAAAAANgBgT0AAAAcUnV1tWbMmKGrrrpKZ555pnr27KmBAwfq1ltv1eLFi5stP2HCBHXv3l2nnnqqOe3XX39V9+7d1b17d73zzjsHXfZEUldXp507d7Y4Lz09XWVlZe3copPD9u3bdeONN6pfv37q27evLrvsMhUUFNi1TU888YR5DqelpUlq/byWpG+//VaXXnqpevfurf79++vBBx+UJBUVFemxxx7TgAED1Lt3b1100UVas2ZNe+/OUcnPz1dubq69m3FMvP322+Zr+Pvvv9u7OUektXPtaKSlpZnH5Yknnjj6Rh6G7du3t+vzHYk///xTPXr00F133XXY6x6s37CX+fPnm2368ssvm80/8DU51PKO5Ndff9X999+vc889V7169VK/fv102WWX6Y033lBxcbG9m3dQx/O9cKjfvzZs2KBHHnlEF1xwgXr16qXTTz9dV111lT7++GNVVlbaLGvPc/p4HqMhQ4aoe/fuGjp06HF7jqa2bt2q7t276+abb26X5wMAAEDLCOwBAADgcCorK3XDDTfoxRdf1Pr161VUVKR9+/YpPz9fK1eu1MSJE/X000/bu5l2sWrVKo0dO1YffvihzfSioiK9/PLLuuSSS+weMp+o7rvvPq1Zs0bl5eWqqKjQnj175O/vb+9mtVl6eromTpyobdu2qbq6WsXFxaqoqJAkvfrqq1qwYIEKCwtVXV2tPXv2yMvLy84tbpvKykq99957Gjp0qJKSkuzdHOjg59qJJisrS48//rguu+wyezfloGpra/X3v/9dVqtV1113nb2bc1zt2rVL9957r+688057N+WIzJw5UzfccIO++eYbZWdnq6amRuXl5dq6davee+89jRkzRjk5OfZuZjP2fi+88cYbuuKKK7Rw4ULt3btXNTU1Ki0t1fr16/XSSy9p3Lhxys/Pt0vbGp3o52ZLevToodNOO02//PKLw18IAwAAcDJztncDAAAAgAN99tlnWrdunSRp7Nixuuaaa+Tn56cdO3boueeeU0ZGhj777DONHj1aZ5xxhiTprbfeUnV1tQzDsGfTj6usrCzdcsstkuq/YG3q1Vdf1eeff26PZp0U8vPztXv3bkn1x/aNN95QbW2tQ55P/fr104oVKyRJ3t7e5vSNGzdq3759kqRx48bpjjvukJOTkyRp/fr1kiQ3Nzd9+umncnV1VWxsbPs2/Ah9/PHHevPNN+3dDDRxsHPtRPPYY4/pl19+sXczDumbb77R1q1bFRUVpUGDBtm7OcfE8OHDdfbZZ0uS/Pz8zOl33HGHUlJSFBkZaa+mHbGcnBy99tprkqTY2Fg99NBDiouLU1FRkT744AN9++23SktL05tvvqnnn3/ezq21Zc/3wowZM/Tee+9Jkrp166YHH3xQcXFx2rNnj95++22tX79eO3fu1KOPPtrsgsX21B7n5pw5c1RbW9uufeo111yjP//8U9OmTdPIkSPl7MzXxQAAAO2N38AAAADgcJqW6v6///s/eXp6SpKio6NVU1Njll5evXq1GdgHBga2ezvbm9VqPaJ5OLSmo4N79uypmJgYO7bm4FxdXRUWFtZsetN9OPPMMxUdHW3+XF5eLknq0KGD+vTpc/wbeQxxbjueg51rJ5oT5fz697//LUm65JJLHPJCoiPh4eEhDw+PZtNPlNekJevWrVN1dbUk6brrrtOFF15oznv99dd1zjnnqKioSKtXr7ZXE1tlr+NeVFSkt956S5IUGRmp2bNnmxejRUdHm7cT2LNnj9asWaO0tDR17NjRLm1tj2MUEhJy3J/jQEOGDJGrq6syMzP1zTffaOTIke3eBgAAgL86SuIDAADA4bi6upqPH330UW3evNn8+eKLL9bq1au1evVq3Xrrreb0I70vfV5enqZMmaIzzzxT/fr102233aatW7c2Wy4nJ0cvvPCCLr74YvXu3VsDBgzQnXfeqbVr1zZbtvGeqjfddJPN9IPdt3rhwoUaN26c4uPjdfrpp+vGG2/UqlWrzPm//vqrBg8ebP68YMECde/eXW+//bYmTJiguXPnmvMuvPBCde/e3fy5rq5On3zyiUaPHm3T9o0bN7bpGGVmZuqJJ54w7ynbp08fDR8+XG+88YYZTDS1cuVK3Xrrrerfv7/i4+M1bNgwvf766yoqKmq27OrVq3XnnXfq7LPPVq9evXTRRRfphRdeaHav8qbHbu3atRo1apR69eql0aNHq7a2VpKUkJCgv/3tbzrjjDPUp08fXX755frPf/6jurq6g+7fY489piFDhpg/z5s3zzy2jXbv3q3/+7//M4/BoEGDNHHixGbnStN76s6fP1+33367evXqpbPPPls7duxotQ3V1dX6xz/+oQsvvFC9e/fW6NGjtXTp0haXbem+vUOGDNFjjz1mLjN58mSzDd27d1d6erokac+ePerevbsmTJhgLtvW49b4nC+++KJeeOEF9evXT6eddprmzZsnSaqqqtL06dM1bNgwc58feugh7dq1y2Y7Te9DvXXrVs2YMcNcZ9iwYZoxY4bNa9MY5EjSDTfcoO7duystLa3VY/nYY4+pe/fuGjBggEpKSjR16lSdc8456tOnj6688kqtXLnSZvnW+o7W7o/ceH/hhx9+WOvWrdP111+v+Ph4nXvuufrnP/+puro6rV69WldddZX69Omjc889V6+++mqL7xWpPvx+/vnndfbZZys+Pl7XXHONzXu/UVZWlp544gmdc8455nvl5ZdfVklJSYv7M3bsWC1YsMDc9yeffLLVYybVn4MfffSRxowZo379+qlfv3666qqrNHfuXJuQqrVz7ddffz3o9jds2KB7771XAwcOVO/evXXRRRfpmWeeUVZW1kHXk/a/pt27d1dmZqY5vbV73jeeiyNHjlSfPn3Us2dPDR48WI899pgyMjJs9qVpcNq9e3ebvqCt5/Sh+qeioiK9+OKLGjp0qHr37q1evXrpwgsv1NSpU1vsFw+0Z88es7++6KKLbOYVFhbqpZde0sUXX6y+ffuqb9++uvjii/Xiiy+2+V7pa9eu1YQJExQfH68BAwboqaeeUmlpqblPTftCqe2fh01fnw8//FAPP/yw+vTpowEDBmjVqlUt3pO+e/fuSk1NlVR/64UD+6um/vOf/2jYsGHq3bu3RowYodmzZ9vMbzxvzjvvPGVlZemhhx7SGWecoTPOOEOTJ09WUVGRUlNTdd9996lfv37q37+/HnjgAWVnZ7e4nQPPv5Y0/f3lgw8+0JIlS1RVVWXO+/7777V69WrNnz/fXK7pcUhMTNRbb72l888/X71799bYsWP13XffNXue4uJivfjii+Zn0nnnnaennnqqWdsbl3311VfNY3X22Wfr5ptvtukLD/ZeaNq+77//XldffbV69eql888/X4WFhZKkH3/8UTfeeKP5WT5gwADdfPPNZjWYg/nmm2/Mi8quv/56m8oxkuTl5aUXXnhBM2fO1O+//37IsP5w+/S2vj8PdW629TVp+hn1888/68ILL1SvXr3M32lbuof94XxuNkpLS9OkSZPM329vv/12JScnm8enadu9vb01YMAASfUj/AE
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",
"clustering = Clustering()\n",
"clustering.make_models(df, df_transform)"
]
},
2022-12-09 07:43:44 -08:00
{
"cell_type": "code",
"execution_count": 36,
"id": "55e547b9",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def make_dendogram(df_transform):\n",
" # to generate the entire tree irrespective of clusters\n",
" model_dendo = AgglomerativeClustering(n_clusters=None,\n",
" linkage='complete', distance_threshold=0)\n",
" model_dendo.fit(df_transform)\n",
" plt.title(\"Agglomerative Clustering Dendrogram\")\n",
" # plot the top three levels of the dendrogram\n",
" plot_dendrogram(model_dendo, truncate_mode=\"level\", p=3)\n",
" plt.xlabel(\"Number of points in node\")\n",
" plt.ylabel(\"Height\")\n",
" plt.show()\n",
" \n",
"make_dendogram(df_transform)"
]
},
2022-11-14 12:40:38 -08:00
{
"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": [
2022-12-09 07:43:44 -08:00
"### Main characteristics of features in the clusters proposed"
2022-11-14 12:40:38 -08:00
]
},
{
"cell_type": "code",
2022-12-09 07:43:44 -08:00
"execution_count": null,
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-09 07:43:44 -08:00
"execution_count": null,
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-09 07:43:44 -08:00
"execution_count": null,
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": []
},
2022-12-09 07:43:44 -08:00
"outputs": [],
2022-11-14 12:40:38 -08:00
"source": [
"def graph_builder():\n",
2022-12-09 07:43:44 -08:00
" \"\"\"Graphs for the main characteristics \n",
" The best model was chosen based on the results of the graph\"\"\"\n",
2022-11-14 12:40:38 -08:00
" 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
}