{ "cells": [ { "cell_type": "markdown", "id": "0c7ae510-5d86-4d43-9826-4c75064ac1cb", "metadata": {}, "source": [ "# Exploratory Data Analysis\n", "\n", "Analyzing in the data lifecycle confirms that the data can answer the questions that are proposed or solving a particular problem. This step can also focus on confirming a model is correctly addressing these questions and problems. This lesson is focused on Exploratory Data Analysis or EDA, which are techniques for defining features and relationships within the data and can be used to prepare the data for modeling.\n", "\n", "We'll be using an example dataset from [Kaggle](https://www.kaggle.com/balaka18/email-spam-classification-dataset-csv/version/1) to show how this can be applied with Python and the [Pandas](../pandas/intro_to_pandas) library. This dataset contains a count of some common words found in emails, the sources of these emails are anonymous.\n", "\n", "```{figure} ../images/ds/eda.png\n", "---\n", "name: eda\n", "---\n", "Exploratory Data Analysis\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "id": "764bf506-22ac-43b8-98e7-e622f25c2fb9", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "markdown", "id": "a1366cf8-1639-4829-8568-043b3ca4fc15", "metadata": {}, "source": [ "## Load the dataset" ] }, { "cell_type": "code", "execution_count": 2, "id": "c248e201-c734-4c13-8014-9f837cae9a9e", "metadata": {}, "outputs": [], "source": [ "email_df = pd.read_csv(\"../../data/emails.csv\")" ] }, { "cell_type": "markdown", "id": "5884e24c-fa03-48de-8f5e-8782eb72a5a5", "metadata": {}, "source": [ "## Data Profiling and Descriptive Statistics\n", "\n", "How do we evaluate if we have enough data to solve this problem? Data profiling can summarize and gather some general overall information about our dataset through techniques of descriptive statistics. Data profiling helps us understand what is available to us, and descriptive statistics helps us understand how many things are available to us.\n", "\n", "We can use Pandas's [`describe()` function](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html) for this. It provides the count, max and min values, mean, standard deviation and quantiles on the numerical data. Using descriptive statistics like the `describe()` function can help you assess how much you have and if you need more." ] }, { "cell_type": "code", "execution_count": 3, "id": "337c8aed-724b-457d-b7db-e7c4d55c486d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
thetoectandforofayouhouin...conneveyjayvaluedlayinfrastructuremilitaryallowingffdryPrediction
count5172.0000005172.0000005172.0000005172.0000005172.0000005172.0000005172.0000005172.0000005172.0000005172.000000...5172.0000005172.0000005172.0000005172.0000005172.0000005172.0000005172.0000005172.0000005172.0000005172.000000
mean6.6405656.1881285.1438523.0755993.1247102.62703055.5174012.4665512.02436210.600155...0.0050270.0125680.0106340.0980280.0042540.0065740.0040600.9147330.0069610.290023
std11.7450099.53457614.1011426.0459704.6805226.22984587.5741724.3144446.96787819.281892...0.1057880.1996820.1166930.5695320.0962520.1389080.0721452.7802030.0980860.453817
min0.0000000.0000001.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
25%0.0000001.0000001.0000000.0000001.0000000.00000012.0000000.0000000.0000001.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
50%3.0000003.0000001.0000001.0000002.0000001.00000028.0000001.0000000.0000005.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
75%8.0000007.0000004.0000003.0000004.0000002.00000062.2500003.0000001.00000012.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000001.0000000.0000001.000000
max210.000000132.000000344.00000089.00000047.00000077.0000001898.00000070.000000167.000000223.000000...4.0000007.0000002.00000012.0000003.0000004.0000003.000000114.0000004.0000001.000000
\n", "

8 rows × 3001 columns

\n", "
" ], "text/plain": [ " the to ect and for \\\n", "count 5172.000000 5172.000000 5172.000000 5172.000000 5172.000000 \n", "mean 6.640565 6.188128 5.143852 3.075599 3.124710 \n", "std 11.745009 9.534576 14.101142 6.045970 4.680522 \n", "min 0.000000 0.000000 1.000000 0.000000 0.000000 \n", "25% 0.000000 1.000000 1.000000 0.000000 1.000000 \n", "50% 3.000000 3.000000 1.000000 1.000000 2.000000 \n", "75% 8.000000 7.000000 4.000000 3.000000 4.000000 \n", "max 210.000000 132.000000 344.000000 89.000000 47.000000 \n", "\n", " of a you hou in ... \\\n", "count 5172.000000 5172.000000 5172.000000 5172.000000 5172.000000 ... \n", "mean 2.627030 55.517401 2.466551 2.024362 10.600155 ... \n", "std 6.229845 87.574172 4.314444 6.967878 19.281892 ... \n", "min 0.000000 0.000000 0.000000 0.000000 0.000000 ... \n", "25% 0.000000 12.000000 0.000000 0.000000 1.000000 ... \n", "50% 1.000000 28.000000 1.000000 0.000000 5.000000 ... \n", "75% 2.000000 62.250000 3.000000 1.000000 12.000000 ... \n", "max 77.000000 1898.000000 70.000000 167.000000 223.000000 ... \n", "\n", " connevey jay valued lay infrastructure \\\n", "count 5172.000000 5172.000000 5172.000000 5172.000000 5172.000000 \n", "mean 0.005027 0.012568 0.010634 0.098028 0.004254 \n", "std 0.105788 0.199682 0.116693 0.569532 0.096252 \n", "min 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "25% 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "50% 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "75% 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "max 4.000000 7.000000 2.000000 12.000000 3.000000 \n", "\n", " military allowing ff dry Prediction \n", "count 5172.000000 5172.000000 5172.000000 5172.000000 5172.000000 \n", "mean 0.006574 0.004060 0.914733 0.006961 0.290023 \n", "std 0.138908 0.072145 2.780203 0.098086 0.453817 \n", "min 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "25% 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "50% 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "75% 0.000000 0.000000 1.000000 0.000000 1.000000 \n", "max 4.000000 3.000000 114.000000 4.000000 1.000000 \n", "\n", "[8 rows x 3001 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "email_df.describe()" ] }, { "cell_type": "markdown", "id": "dccdf488-c18d-476d-a690-4eb49c928312", "metadata": {}, "source": [ "## Sampling and Querying\n", "\n", "Exploring everything in a large dataset can be very time consuming and a task that’s usually left up to a computer to do. However, sampling is a helpful tool in understanding of the data and allows us to have a better understanding of what’s in the dataset and what it represents. With a sample, you can apply probability and statistics to come to some general conclusions about your data. While there’s no defined rule on how much data you should sample it’s important to note that the more data you sample, the more precise of a generalization you can make of about data. Pandas has the [`sample()` function](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sample.html) in its library where you can pass an argument of how many random samples you’d like to receive and use.\n", "\n", "General querying of the data can help you answer some general questions and theories you may have. In contrast to sampling, queries allow you to have control and focus on specific parts of the data you have questions about. The [`query()` function](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html) in the Pandas library allows you to select columns and receive simple answers about the data through the rows retrieved." ] }, { "cell_type": "code", "execution_count": 4, "id": "59dd83c5-b7b2-4544-895f-d7ac3ba69cbf", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Email No.thetoectandforofayouhou...conneveyjayvaluedlayinfrastructuremilitaryallowingffdryPrediction
323Email 3244611325630...0000000101
1615Email 16166112112610...0000000000
315Email 3166523113480...0000000000
250Email 251221013448511...0000000000
3414Email 34152230313122...0000000000
4725Email 4726101244418720...0000000000
2999Email 3000001010500...0000000000
4131Email 41323421111330...0000000101
2353Email 2354001100900...0000000001
1359Email 1360111010300...0000000000
\n", "

10 rows × 3002 columns

\n", "
" ], "text/plain": [ " Email No. the to ect and for of a you hou ... connevey \\\n", "323 Email 324 4 6 1 1 3 2 56 3 0 ... 0 \n", "1615 Email 1616 6 1 1 2 1 1 26 1 0 ... 0 \n", "315 Email 316 6 5 2 3 1 1 34 8 0 ... 0 \n", "250 Email 251 22 10 1 3 4 4 85 1 1 ... 0 \n", "3414 Email 3415 2 2 3 0 3 1 31 2 2 ... 0 \n", "4725 Email 4726 10 12 4 4 4 1 87 2 0 ... 0 \n", "2999 Email 3000 0 0 1 0 1 0 5 0 0 ... 0 \n", "4131 Email 4132 3 4 2 1 1 1 13 3 0 ... 0 \n", "2353 Email 2354 0 0 1 1 0 0 9 0 0 ... 0 \n", "1359 Email 1360 1 1 1 0 1 0 3 0 0 ... 0 \n", "\n", " jay valued lay infrastructure military allowing ff dry \\\n", "323 0 0 0 0 0 0 1 0 \n", "1615 0 0 0 0 0 0 0 0 \n", "315 0 0 0 0 0 0 0 0 \n", "250 0 0 0 0 0 0 0 0 \n", "3414 0 0 0 0 0 0 0 0 \n", "4725 0 0 0 0 0 0 0 0 \n", "2999 0 0 0 0 0 0 0 0 \n", "4131 0 0 0 0 0 0 1 0 \n", "2353 0 0 0 0 0 0 0 0 \n", "1359 0 0 0 0 0 0 0 0 \n", "\n", " Prediction \n", "323 1 \n", "1615 0 \n", "315 0 \n", "250 0 \n", "3414 0 \n", "4725 0 \n", "2999 0 \n", "4131 1 \n", "2353 1 \n", "1359 0 \n", "\n", "[10 rows x 3002 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sampling 10 emails\n", "email_df.sample(10)" ] }, { "cell_type": "code", "execution_count": 5, "id": "3939e97e-d391-49ad-9f12-251a750b8de2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Email No.thetoectandforofayouhou...conneveyjayvaluedlayinfrastructuremilitaryallowingffdryPrediction
1Email 281324662102127...0000000100
3Email 4052205151210...0000000000
5Email 64514234510...0000000001
7Email 80223122160...0000000101
13Email 144571513713...0000000200
..................................................................
5156Email 515741310314820...0000000101
5159Email 516021310213820...0000000101
5162Email 51632312123200...0000000001
5170Email 51712710212820...0000000101
5171Email 51722224516514882...0000000000
\n", "

2033 rows × 3002 columns

\n", "
" ], "text/plain": [ " Email No. the to ect and for of a you hou ... connevey \\\n", "1 Email 2 8 13 24 6 6 2 102 1 27 ... 0 \n", "3 Email 4 0 5 22 0 5 1 51 2 10 ... 0 \n", "5 Email 6 4 5 1 4 2 3 45 1 0 ... 0 \n", "7 Email 8 0 2 2 3 1 2 21 6 0 ... 0 \n", "13 Email 14 4 5 7 1 5 1 37 1 3 ... 0 \n", "... ... ... .. ... ... ... .. ... ... ... ... ... \n", "5156 Email 5157 4 13 1 0 3 1 48 2 0 ... 0 \n", "5159 Email 5160 2 13 1 0 2 1 38 2 0 ... 0 \n", "5162 Email 5163 2 3 1 2 1 2 32 0 0 ... 0 \n", "5170 Email 5171 2 7 1 0 2 1 28 2 0 ... 0 \n", "5171 Email 5172 22 24 5 1 6 5 148 8 2 ... 0 \n", "\n", " jay valued lay infrastructure military allowing ff dry \\\n", "1 0 0 0 0 0 0 1 0 \n", "3 0 0 0 0 0 0 0 0 \n", "5 0 0 0 0 0 0 0 0 \n", "7 0 0 0 0 0 0 1 0 \n", "13 0 0 0 0 0 0 2 0 \n", "... ... ... ... ... ... ... .. ... \n", "5156 0 0 0 0 0 0 1 0 \n", "5159 0 0 0 0 0 0 1 0 \n", "5162 0 0 0 0 0 0 0 0 \n", "5170 0 0 0 0 0 0 1 0 \n", "5171 0 0 0 0 0 0 0 0 \n", "\n", " Prediction \n", "1 0 \n", "3 0 \n", "5 1 \n", "7 1 \n", "13 0 \n", "... ... \n", "5156 1 \n", "5159 1 \n", "5162 1 \n", "5170 1 \n", "5171 0 \n", "\n", "[2033 rows x 3002 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Returns rows where there are more occurrences of \"to\" than \"the\"\n", "email_df.query(\"the < to\")" ] }, { "cell_type": "markdown", "id": "8cf8ab3b-7d67-4697-afd9-22fdeaa25c8f", "metadata": {}, "source": [ "## Exploring to identify inconsistencies\n", "\n", "All the topics in this lesson can help identify missing or inconsistent values, but Pandas provides functions to check for some of these. [`isna()` or `isnull()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.isna.html) can check for missing values. One important piece of exploring for these values within your data is to explore why they ended up that way in the first place." ] }, { "cell_type": "code", "execution_count": 6, "id": "0163b7bf-6fa0-4664-b887-c650130571a3", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Email No.thetoectandforofayouhou...conneveyjayvaluedlayinfrastructuremilitaryallowingffdryPrediction
0FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
1FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
4FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
..................................................................
5167FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5168FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5169FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5170FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5171FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
\n", "

5172 rows × 3002 columns

\n", "
" ], "text/plain": [ " Email No. the to ect and for of a you \\\n", "0 False False False False False False False False False \n", "1 False False False False False False False False False \n", "2 False False False False False False False False False \n", "3 False False False False False False False False False \n", "4 False False False False False False False False False \n", "... ... ... ... ... ... ... ... ... ... \n", "5167 False False False False False False False False False \n", "5168 False False False False False False False False False \n", "5169 False False False False False False False False False \n", "5170 False False False False False False False False False \n", "5171 False False False False False False False False False \n", "\n", " hou ... connevey jay valued lay infrastructure military \\\n", "0 False ... False False False False False False \n", "1 False ... False False False False False False \n", "2 False ... False False False False False False \n", "3 False ... False False False False False False \n", "4 False ... False False False False False False \n", "... ... ... ... ... ... ... ... ... \n", "5167 False ... False False False False False False \n", "5168 False ... False False False False False False \n", "5169 False ... False False False False False False \n", "5170 False ... False False False False False False \n", "5171 False ... False False False False False False \n", "\n", " allowing ff dry Prediction \n", "0 False False False False \n", "1 False False False False \n", "2 False False False False \n", "3 False False False False \n", "4 False False False False \n", "... ... ... ... ... \n", "5167 False False False False \n", "5168 False False False False \n", "5169 False False False False \n", "5170 False False False False \n", "5171 False False False False \n", "\n", "[5172 rows x 3002 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "email_df.isna()" ] }, { "cell_type": "code", "execution_count": 7, "id": "12ad6c70-f5ef-473e-aeb0-4fbedcc4fd83", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Email No. 0\n", "the 0\n", "to 0\n", "ect 0\n", "and 0\n", " ..\n", "military 0\n", "allowing 0\n", "ff 0\n", "dry 0\n", "Prediction 0\n", "Length: 3002, dtype: int64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "email_df.isna().sum()" ] }, { "cell_type": "code", "execution_count": 8, "id": "6dcf5172-83d3-4cc2-ae58-7a9c0a8f0001", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Email No.thetoectandforofayouhou...conneveyjayvaluedlayinfrastructuremilitaryallowingffdryPrediction
0FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
1FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
4FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
..................................................................
5167FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5168FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5169FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5170FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5171FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
\n", "

5172 rows × 3002 columns

\n", "
" ], "text/plain": [ " Email No. the to ect and for of a you \\\n", "0 False False False False False False False False False \n", "1 False False False False False False False False False \n", "2 False False False False False False False False False \n", "3 False False False False False False False False False \n", "4 False False False False False False False False False \n", "... ... ... ... ... ... ... ... ... ... \n", "5167 False False False False False False False False False \n", "5168 False False False False False False False False False \n", "5169 False False False False False False False False False \n", "5170 False False False False False False False False False \n", "5171 False False False False False False False False False \n", "\n", " hou ... connevey jay valued lay infrastructure military \\\n", "0 False ... False False False False False False \n", "1 False ... False False False False False False \n", "2 False ... False False False False False False \n", "3 False ... False False False False False False \n", "4 False ... False False False False False False \n", "... ... ... ... ... ... ... ... ... \n", "5167 False ... False False False False False False \n", "5168 False ... False False False False False False \n", "5169 False ... False False False False False False \n", "5170 False ... False False False False False False \n", "5171 False ... False False False False False False \n", "\n", " allowing ff dry Prediction \n", "0 False False False False \n", "1 False False False False \n", "2 False False False False \n", "3 False False False False \n", "4 False False False False \n", "... ... ... ... ... \n", "5167 False False False False \n", "5168 False False False False \n", "5169 False False False False \n", "5170 False False False False \n", "5171 False False False False \n", "\n", "[5172 rows x 3002 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "email_df.isnull()" ] }, { "cell_type": "code", "execution_count": 9, "id": "498c6a1c-cfa5-45de-95ee-82fbec91ae63", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Email No. 0\n", "the 0\n", "to 0\n", "ect 0\n", "and 0\n", " ..\n", "military 0\n", "allowing 0\n", "ff 0\n", "dry 0\n", "Prediction 0\n", "Length: 3002, dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "email_df.isnull().sum()" ] }, { "cell_type": "markdown", "id": "1bbfbcaa-5411-41f7-8918-444258c6c219", "metadata": {}, "source": [ "## More exploration and analysis" ] }, { "cell_type": "code", "execution_count": 10, "id": "9c173f90-5e9e-48b6-9476-b5c3c09ca86d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of spam emails: 1500\n", "Number of non-spam emails: 3672\n", "Total number of emails: 5172\n" ] } ], "source": [ "# Count the number of spam and non-spam emails\n", "spam_count = email_df[email_df[\"Prediction\"] == 1].shape[0]\n", "non_spam_count = email_df[email_df[\"Prediction\"] == 0].shape[0]\n", "total_emails = email_df.shape[0]\n", "\n", "# Print the count of spam and non-spam emails\n", "print(\"Number of spam emails:\", spam_count)\n", "print(\"Number of non-spam emails:\", non_spam_count)\n", "print(\"Total number of emails:\", total_emails)" ] }, { "cell_type": "code", "execution_count": 11, "id": "966d0096-a395-4ff3-a633-9afb1ccb072b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Percentage of spam emails: 29.00%\n", "Percentage of non-spam emails: 71.00%\n" ] } ], "source": [ "# Percentage of spam and non-spam emails\n", "spam_percentage = (spam_count / total_emails) * 100\n", "non_spam_percentage = (non_spam_count / total_emails) * 100\n", "\n", "# Print the percentage of spam and non-spam emails\n", "print(\"Percentage of spam emails: {:.2f}%\".format(spam_percentage))\n", "print(\"Percentage of non-spam emails: {:.2f}%\".format(non_spam_percentage))" ] }, { "cell_type": "code", "execution_count": 12, "id": "99602377-6e87-4d17-ba13-1e38f6db8bfb", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
total_words
053
12203
2113
31019
41075
\n", "
" ], "text/plain": [ " total_words\n", "0 53\n", "1 2203\n", "2 113\n", "3 1019\n", "4 1075" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sum up all column values for each row\n", "numeric_columns = email_df.select_dtypes(include=np.number)\n", "\n", "email_df[\"total_words\"] = numeric_columns.sum(axis=1)\n", "email_df[[\"total_words\"]].head()" ] }, { "cell_type": "markdown", "id": "c2d7e66a-5b6c-47a4-b9a2-ff56525974e7", "metadata": {}, "source": [ "## Exploring with Visualizations\n", "\n", "You don’t have to wait until the data is thoroughly cleaned and analyzed to start creating visualizations. In fact, having a visual representation while exploring can help identify patterns, relationships, and problems in the data. Furthermore, visualizations provide a means of communication with those who are not involved with managing the data and can be an opportunity to share and clarify additional questions that were not addressed in the capture stage. Refer to the [section on Visualizations](../data_visualization/intro_to_matplotlib) to learn more about some popular ways to explore visually." ] }, { "cell_type": "code", "execution_count": 13, "id": "4058b61b-b087-448a-a2a9-77def9e88915", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Prediction\n", "0 3672\n", "1 1500\n", "Name: count, dtype: int64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "predictions = email_df[\"Prediction\"].value_counts()\n", "predictions" ] }, { "cell_type": "code", "execution_count": 14, "id": "a7134aac-2ea8-494b-91d1-5ed4104e61ae", "metadata": {}, "outputs": [ { "data": { "image/png": "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bJGXl5dq166tCRMmaMSIERo7dqwcHBzuuM/U1FSlpqZa1lNSUvLm4AAAQIFQoC+ZSdKpU6fk4+OjChUqqEePHoqLi5MkHTx4ULdv31aLFi0sY6tWraoyZcooJiZGkhQTE6PAwEB5eXlZxgQHByslJUXHjh276z4nTpwoNzc3y+Ln55dHRwcAAAqCAh2I6tevr4ULF2rjxo365JNPdObMGT377LO6evWqEhIS5ODgIHd3d6vXeHl5KSEhQZKUkJBgFYay+rP67iYiIkLJycmW5dy5c7l7YAAAoEAp0JfM2rRpY/m6Zs2aql+/vsqWLasVK1bIyckpz/br6OgoR0fHPNs+AAAoWAr0GaK/cnd3V+XKlfXzzz/L29tbaWlpSkpKshpz4cIFy5wjb2/vbHedZa3faV4SAAAwpkcqEF27dk2nT59W6dKlVbduXRUuXFjR0dGW/hMnTiguLk5BQUGSpKCgIB05ckSJiYmWMVFRUXJ1dVVAQEC+1w8AAAqmAn3J7I033lD79u1VtmxZnT9/XmPGjJG9vb1eeuklubm5qW/fvgoPD5eHh4dcXV01dOhQBQUFqUGDBpKkVq1aKSAgQL169dKUKVOUkJCgUaNGKSwsjEtiAADAokAHot9++00vvfSSfv/9d5UqVUrPPPOM9u3bp1KlSkmSpk+fLjs7O3Xu3FmpqakKDg7W3LlzLa+3t7fX+vXrNWjQIAUFBalo0aLq3bu3xo8fb6tDAgAABVCBDkTLli27Z3+RIkU0Z84czZkz565jypYtq//85z+5XRoAAHiMPFJziAAAAPICgQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABgegQgAABieoQLRnDlzVK5cORUpUkT169fXd999Z+uSAABAAWCYQLR8+XKFh4drzJgxOnTokGrVqqXg4GAlJibaujQAAGBjhglE06ZNU//+/fXKK68oICBA8+bN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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "predictions.plot(kind=\"bar\")\n", "\n", "plt.xticks([0, 1], [\"Not Spam\", \"Spam\"])\n", "plt.ylabel(\"Quantities\")\n", "plt.title(\"Non-spam vs Spam Emails\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 15, "id": "e753dfa0-93ec-45df-88c1-cc2c801aadb9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Email No.thetoectandforofayouhou...jayvaluedlayinfrastructuremilitaryallowingffdryPredictiontotal_words
5Email 64514234510...0000000011307
7Email 80223122160...000000101565
16Email 173122011700...000000101219
17Email 183621614717194255...0000003014323
25Email 261253214181428702...0000006014927
..................................................................
5162Email 51632312123200...000000001667
5163Email 5164001000100...00000000164
5166Email 5167101100400...000000001102
5169Email 51700011001100...000000001179
5170Email 51712710212820...000000101788
\n", "

1500 rows × 3003 columns

\n", "
" ], "text/plain": [ " Email No. the to ect and for of a you hou ... jay valued \\\n", "5 Email 6 4 5 1 4 2 3 45 1 0 ... 0 0 \n", "7 Email 8 0 2 2 3 1 2 21 6 0 ... 0 0 \n", "16 Email 17 3 1 2 2 0 1 17 0 0 ... 0 0 \n", "17 Email 18 36 21 6 14 7 17 194 25 5 ... 0 0 \n", "25 Email 26 12 53 2 14 18 14 287 0 2 ... 0 0 \n", "... ... ... .. ... ... ... .. ... ... ... ... ... ... \n", "5162 Email 5163 2 3 1 2 1 2 32 0 0 ... 0 0 \n", "5163 Email 5164 0 0 1 0 0 0 1 0 0 ... 0 0 \n", "5166 Email 5167 1 0 1 1 0 0 4 0 0 ... 0 0 \n", "5169 Email 5170 0 0 1 1 0 0 11 0 0 ... 0 0 \n", "5170 Email 5171 2 7 1 0 2 1 28 2 0 ... 0 0 \n", "\n", " lay infrastructure military allowing ff dry Prediction \\\n", "5 0 0 0 0 0 0 1 \n", "7 0 0 0 0 1 0 1 \n", "16 0 0 0 0 1 0 1 \n", "17 0 0 0 0 3 0 1 \n", "25 0 0 0 0 6 0 1 \n", "... ... ... ... ... .. ... ... \n", "5162 0 0 0 0 0 0 1 \n", "5163 0 0 0 0 0 0 1 \n", "5166 0 0 0 0 0 0 1 \n", "5169 0 0 0 0 0 0 1 \n", "5170 0 0 0 0 1 0 1 \n", "\n", " total_words \n", "5 1307 \n", "7 565 \n", "16 219 \n", "17 4323 \n", "25 4927 \n", "... ... \n", "5162 667 \n", "5163 64 \n", "5166 102 \n", "5169 179 \n", "5170 788 \n", "\n", "[1500 rows x 3003 columns]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spam_emails = email_df.query(\"Prediction == 1\")\n", "spam_emails" ] }, { "cell_type": "code", "execution_count": 16, "id": "15d4ce82-f698-4101-a7d9-8c4e80b24887", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Email No.thetoectandforofayouhou...jayvaluedlayinfrastructuremilitaryallowingffdryPredictiontotal_words
5Email 64514234510...0000000011307
7Email 80223122160...000000101565
16Email 173122011700...000000101219
17Email 183621614717194255...0000003014323
25Email 261253214181428702...0000006014927
\n", "

5 rows × 3003 columns

\n", "
" ], "text/plain": [ " Email No. the to ect and for of a you hou ... jay valued \\\n", "5 Email 6 4 5 1 4 2 3 45 1 0 ... 0 0 \n", "7 Email 8 0 2 2 3 1 2 21 6 0 ... 0 0 \n", "16 Email 17 3 1 2 2 0 1 17 0 0 ... 0 0 \n", "17 Email 18 36 21 6 14 7 17 194 25 5 ... 0 0 \n", "25 Email 26 12 53 2 14 18 14 287 0 2 ... 0 0 \n", "\n", " lay infrastructure military allowing ff dry Prediction total_words \n", "5 0 0 0 0 0 0 1 1307 \n", "7 0 0 0 0 1 0 1 565 \n", "16 0 0 0 0 1 0 1 219 \n", "17 0 0 0 0 3 0 1 4323 \n", "25 0 0 0 0 6 0 1 4927 \n", "\n", "[5 rows x 3003 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spam_emails.head()" ] }, { "cell_type": "code", "execution_count": 17, "id": "cf339d1f-e82a-49bb-85dc-fd142e2f1290", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "this 2303\n", "your 2096\n", "with 2006\n", "that 1361\n", "here 1295\n", " ... \n", "intrastate 0\n", "hakemack 0\n", "heather 0\n", "gomes 0\n", "payback 0\n", "Length: 2574, dtype: int64" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "long_word_columns = [word for word in spam_emails.columns[1:-2] if len(word) > 3]\n", "word_totals = spam_emails[long_word_columns].sum().sort_values(ascending=False)\n", "word_totals" ] }, { "cell_type": "code", "execution_count": 18, "id": "fb04e4aa-79f0-431e-a483-faac1649343f", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAALmCAYAAAC0H44aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACIA0lEQVR4nOzdd3xO9///8deVkMRKzMTeIwhCFLG3RkqpUbT2KKVWqVG1OuwqSlulVT723quovfeqooi9QmImJK/fH37X+eYSK3qd60p43G83t5ucc3Ku13VyjfM873EsqqoCAAAAALArF2cXAAAAAABvIsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAIizFi1aSPbs2e2yL4vFIgMHDrTLvuKr7NmzS4sWLYyf//rrL7FYLPLXX385rSYA5iNsAUiwLBbLK/0z+2Tm/PnzMmjQIClRooSkSpVK0qZNKxUrVpQ///zzmdvfvn1b2rVrJ+nSpZNkyZJJpUqVZN++fa/0WBUrVhSLxSJ58uR55vq1a9caz3vevHmv/ZxeZMWKFa91Yrxw4UIJCgqStGnTipubm2TMmFEaNmwo69evt3+Rb4iaNWtKqlSpRFVtlu/fv18sFotky5Yt1u+sX79eLBaLTJw40VFlxjstWrR47ueBh4eHs8sD8BZJ5OwCAOB1TZs2zebnqVOnytq1a2Mtz58/v6l1LF68WIYNGyZ16tSR5s2by+PHj2Xq1KlSrVo1+e2336Rly5bGttHR0RIcHCwHDx6Unj17Stq0aWXChAlSsWJF2bt373NDVEweHh5y6tQp2bVrl5QoUcJm3fTp08XDw0MePnxo9+dptWLFChk/fvwrBy5VlVatWsmUKVOkaNGi0r17d0mfPr1cvnxZFi5cKFWqVJGtW7dK6dKlTas5oSpbtqysXLlSjhw5IoUKFTKWb926VRIlSiQhISFy4cIFyZw5s8066+8mFA8ePJBEiex7SuLu7i6TJk2KtdzV1dWuj/OqTpw4IS4uXOMG3jaELQAJ1scff2zz844dO2Tt2rWxlputUqVKEhISImnTpjWWtW/fXvz9/aV///42YWvevHmybds2mTt3rtSvX19ERBo2bCh58+aVAQMGyIwZM176eLly5ZLHjx/LzJkzbcLWw4cPZeHChRIcHCzz58+34zP8b0aNGiVTpkyRrl27yvfffy8Wi8VY9+WXX8q0adPsfqL9prAGpi1btsQKWzVr1pT169fLli1bpFGjRsa6LVu2SJo0af7zRYaHDx+Km5ubQwKCGa1NiRIlcvhnwYu4u7s7uwQATsAlFgBvtHv37snnn38uWbJkEXd3d8mXL5+MHDkyVrcsi8UinTp1kunTp0u+fPnEw8NDAgICZNOmTS99jIIFC9oELZEnJ1Y1a9aUCxcuyJ07d4zl8+bNEx8fH/nggw+MZenSpZOGDRvK4sWLJSIi4pWeV+PGjWX27NkSHR1tLFu6dKncv39fGjZs+Mzf2b9/vwQFBYmnp6ckT55cqlSpIjt27LDZ5tGjRzJo0CDJkyePeHh4SJo0aaRs2bKydu1aEXnSPWv8+PEiYtuN83kePHggQ4YMEV9fXxk5cuQzt23atKlNaPz333+lQYMGkjp1akmaNKmUKlVKli9fbvM71vEuc+bMkUGDBkmmTJkkRYoUUr9+fQkLC5OIiAjp2rWreHt7S/LkyaVly5axjq31bz537lwpUKCAJEmSRAIDA+Xw4cMiIvLLL79I7ty5xcPDQypWrChnz56NVfvcuXMlICBAkiRJImnTppWPP/5YLl68aLNNixYtJHny5HLx4kWpU6eOJE+eXNKlSyc9evSQqKio5x47EZESJUqIm5ub0VpltXXrVilfvryUKFHCZl10dLTs2LFDSpcubRzruBzPWbNmSb9+/SRTpkySNGlSCQ8PFxGRRYsWiZ+fn3h4eIifn58sXLjwmfXOmjVLAgICJEWKFOLp6SmFChWSMWPGvPA5isQeszVw4ECxWCxy6tQpadGihaRMmVK8vLykZcuWcv/+/Zfu71VNmTJFLBaLbNmyRTp37izp0qWTlClTyieffCKRkZFy+/ZtadasmaRKlUpSpUolX3zxRazPjpEjR0rp0qUlTZo0kiRJEgkICHhmF96nx2w9y8mTJ6VevXqSPn168fDwkMyZM0ujRo0kLCzMbs8ZgGNxKRHAG0tVpXbt2rJhwwZp3bq1+Pv7y+rVq6Vnz55y8eJFGT16tM32GzdulNmzZ0vnzp3F3d1dJkyYIO+++67s2rVL/Pz84vz4V65ckaRJk0rSpEmNZfv375dixYrFai0oUaKETJw4Uf755x+bFoznadKkiQwcOFD++usvqVy5soiIzJgxQ6pUqSLe3t6xtj969KiUK1dOPD095YsvvpDEiRPLL7/8IhUrVpSNGzdKyZIlReTJSe6QIUOkTZs2UqJECQkPD5c9e/bIvn37pFq1avLJJ5/IpUuXntld81m2bNkioaGh0rVr11fqvnX16lUpXbq03L9/Xzp37ixp0qSRP/74Q2rXri3z5s2TunXr2mw/ZMgQSZIkifTu3VtOnTol48aNk8SJE4uLi4vcunVLBg4cKDt27JApU6ZIjhw5pH///ja/v3nzZlmyZIl07NjR2N97770nX3zxhUyYMEE+/fRTuXXrlgwfPlxatWplM75sypQp0rJlS3nnnXdkyJAhcvXqVRkzZoxs3bpV9u/fLylTpjS2jYqKkho1akjJkiVl5MiR8ueff8qoUaMkV65c0qFDh+ceD2vo37Jli7Hs/Pnzcv78eSldurTcvn3bJjgdPnxYwsPDjRaxuB7Pr7/+Wtzc3KRHjx4SEREhbm5usmbNGqlXr54UKFBAhgwZIjdv3pSWLVvadF0UeTJesHHjxlKlShUZNmyYiIgcP35ctm7dKl26dHnuc3yRhg0bSo4cOWTIkCGyb98+mTRpknh7exv7f5kbN27EWubm5iaenp42yz777DNJnz69DBo0SHbs2CETJ06UlClTyrZt2yRr1qzy3XffyYoVK2TEiBHi5+cnzZo1M353zJgxUrt2bfnoo48kMjJSZs2aJQ0aNJBly5ZJcHDwKz/XyMhIqVGjhkRERBj1XLx4UZYtWya3b98WLy+vV94XgHhEAeAN0bFjR435sbZo0SIVEf3mm29stqtfv75aLBY9deqUsUxEVER0z549xrJz586ph4eH1q1bN861nDx5Uj08PLRp06Y2y5MlS6atWrWKtf3y5ctVRHTVqlUv3G+FChW0YMGCqqpavHhxbd26taqq3rp1S93c3PSPP/7QDRs2qIjo3Llzjd+rU6eOurm56enTp41lly5d0hQpUmj58uWNZUWKFNHg4OAX1vD0cX6RMWPGqIjowoULX2n7rl27qojo5s2bjWV37tzRHDlyaPbs2TUqKkpV1XiOfn5+GhkZaWzbuHFjtVgsGhQUZLPfwMBAzZYtm80yEVF3d3c9c+aMseyXX35REdH06dNreHi4sbxPnz4qIsa2kZGR6u3trX5+fvrgwQNju2XLlqmIaP/+/Y1lzZs3VxHRwYMH2zx+0aJFNSAg4KXHpGfPnioieuHCBVVVnTlzpnp4eGhERISuWLFCXV1djVp//PFHFRHdunXrax3PnDlz6v37920e39/fXzNkyKC3b982lq1Zs0ZFxOaYdunSRT09PfXx48cvfU5PExEdMGCA8fOAAQNURGK9V+rWratp0qR56f6sx/xZ/2rUqGFs9/vvvxvLoqOjjeWBgYFqsVi0ffv2xrLHjx9r5syZtUKFCjaP9fTxioyMVD8/P61cubLN8mzZsmnz5s2Nn63HfMOGDaqqun///ljvWwAJH90IAbyxVqxYIa6urtK5c2eb5Z9//rmoqqxcudJmeWBgoAQEBBg/Z82aVd5//31ZvXr1S7t7xXT//n1p0KCBJEmSRIYOHWqz7sGDB88cu2Eds/LgwYNXfpwmTZrIggULJDIyUubNmyeurq6xWipEnrSqrFmzRurUqSM5c+Y0lmfIkEGaNGkiW7ZsMbqLpUyZUo4ePSonT5585TpexLrfFClSvNL2K1askBIlSthM7pA8eXJp166dnD17Vo4dO2azfbNmzSRx4sTGzyVLljQm5IipZMmScv78eXn8+LHN8ipVqthMX25t4atXr55Nzdbl//77r4iI7NmzR65duyaffvqpzXij4OBg8fX1jdVNT+TJOL6YypUrZ+zvRazHYvPmzSLypAthQECAuLm5SWBgoNF10LrOw8NDihcvLiJxP57NmzeXJEmSGD9fvnxZDhw4IM2bN7dpWalWrZoUKFDA5ndTpkwp9+7dM7qc2sOzjtnNmzeN19WLeHh4yNq1a2P9e/o9KSLSunVrmy6u1tdR69atjWWurq5SvHjxWH+zmMfr1q1bEhYWJuXKlXvlGUatrMd39erVdu0qCcC5CFsA3ljnzp2TjBkzxjrRt04ccO7cOZvlz5oJMG/evHL//n25fv36Kz1mVFSUNGrUSI4dOybz5s2TjBkz2qxPkiTJM8dlWWcPjHni9jLWsRwrV66U6dOny3vvvffMUHP9+nW5f/++5MuXL9a6/PnzS3R0tJw/f15ERAYPHiy3b9+WvHnzSqFChaRnz55y6NChV67padbuWjHHrb3IuXPnnlundX1MWbNmtfnZesKaJUuWWMujo6NjjX2Jy++LPDmZjlnHs2r19fWNVaeHh4ekS5fOZlmqVKmM/b1ImTJlxGKxGGOztm7dKmXKlBGRJwGnQIECNuveeecdcXNzM+qMy/HMkSOHzc/W9c96bzy9308//VTy5s0rQUFBkjlzZmnVqpWsWrXqpc/vRZ7++6RKlUpE5JWOm6urq1StWjXWP39//5c+zoteB08/9rJly6RUqVLi4eEhqVOnlnTp0slPP/0U53FWOXLkkO7du8ukSZMkbdq0UqNGDRk/fjzjtYAEjrAFAHbUtm1bWbZsmUyZMsUYSxVThgwZ5PLly7GWW5c9Hc5eJEOGDFKxYkUZNWqUbNq0SZo0afL6hf9/5cuXl9OnT8tvv/0mfn5+MmnSJClWrNgzp9B+Fb6+viIixqQT9va8cWDPW65PTW7wX3//Vf2X6cbTpEkjvr6+smXLFrl7964cOnTIZpr80qVLy5YtW+TChQsSEhLyn6Z8j0vYf5q3t7ccOHBAlixZYoyVDAoKkubNm7/2Pu39d4jr4zxreczH3rx5s9SuXVs8PDxkwoQJsmLFClm7dq00adLktWocNWqUHDp0SPr27SsPHjyQzp07S8GCBeXChQtx3heA+IGwBeCNlS1bNrl06VKsVpW///7bWB/Ts7rO/fPPP5I0adJYrRLP0rNnT/n9999l9OjR0rhx42du4+/vL/v27bOZRVBEZOfOnZI0aVLJmzfvSx8npiZNmsjmzZvF09NTatas+cxt0qVLJ0mTJpUTJ07EWvf333+Li4uLzRX81KlTS8uWLWXmzJly/vx5KVy4sM1McS+affBpZcuWlVSpUsnMmTNfqStmtmzZnlundX18YK3jWbWeOHHC7nWWLVtWDh8+LGvWrJGoqKhYYWvnzp3Gzbtjhq3/ejyt65/13njWft3c3KRWrVoyYcIEOX36tHzyyScydepUOXXq1MufZAI0f/588fDwkNWrV0urVq0kKChIqlat+p/2WahQIenXr59s2rRJNm/eLBcvXpSff/7ZThUDcDTCFoA3Vs2aNSUqKkp+/PFHm+WjR48Wi8UiQUFBNsu3b99uM87i/PnzsnjxYqlevfpLWyZGjBghI0eOlL59+75w5rX69evL1atXZcGCBcayGzduyNy5c6VWrVpxvhdP/fr1ZcCAATJhwgSj69jTXF1dpXr16rJ48WKb6cuvXr0qM2bMkLJlyxrd/W7evGnzu8mTJ5fcuXPbdH1MliyZiIjcvn37pfUlTZpUevXqJcePH5devXo982r///73P9m1a5eIPPmb7dq1S7Zv326sv3fvnkycOFGyZ88ea5yQsxQvXly8vb3l559/tjk2K1eulOPHj8dpFrpXUbZsWYmKipKRI0dKnjx5bMJ/6dKl5e7duzJhwgRxcXGxCWL/9XhmyJBB/P395Y8//rDpzrZ27dpY472efu24uLhI4cKFRURe+ZYGCY2rq6tYLBabCwlnz56VRYsWxXlf4eHhscYUFipUSFxcXN7Y4we8DZj6HcAbq1atWlKpUiX58ssv5ezZs1KkSBFZs2aNLF68WLp27Sq5cuWy2d7Pz09q1KhhM/W7iMigQYNe+DgLFy6UL774QvLkySP58+eX//3vfzbrq1WrJj4+PiLyJByVKlVKWrZsKceOHZO0adPKhAkTJCoq6qWP8yxeXl42rU7P880338jatWulbNmy8umnn0qiRInkl19+kYiICBk+fLixXYECBaRixYoSEBAgqVOnlj179si8efOkU6dOxjbWSUQ6d+4sNWrUEFdXV5ub6j6tZ8+ecvToURk1apRs2LBB6tevL+nTp5crV67IokWLZNeuXbJt2zYREendu7fMnDlTgoKCpHPnzpI6dWr5448/5MyZMzJ//nyH3GD3VSROnFiGDRsmLVu2lAoVKkjjxo2Nqd+zZ88u3bp1s+vjWVurtm/fHuteTXnz5pW0adPK9u3bpVChQjZTztvjeA4ZMkSCg4OlbNmy0qpVKwkNDZVx48ZJwYIF5e7du8Z2bdq0kdDQUKlcubJkzpxZzp07J+PGjRN/f///fIPl1/H48eNY70WrunXrGhcN/ovg4GD5/vvv5d1335UmTZrItWvXZPz48ZI7d+44j3Vcv369dOrUSRo0aCB58+aVx48fy7Rp08TV1VXq1av3n2sF4ByELQBvLBcXF1myZIn0799fZs+eLb///rtkz55dRowYIZ9//nms7StUqCCBgYEyaNAgCQkJkQIFCsiUKVOMq/PPc/DgQRF50tWqadOmsdZv2LDBCFuurq6yYsUK6dmzp4wdO1YePHgg77zzjkyZMuWZExnYS8GCBWXz5s3Sp08fGTJkiERHR0vJkiXlf//7nzHTnsiTALVkyRJZs2aNRERESLZs2eSbb76Rnj17Gtt88MEH8tlnn8msWbPkf//7n6jqC8OWi4uLTJ06Vd5//32ZOHGijBw5UsLDwyVdunRSvnx5GT58uAQGBoqIiI+Pj2zbtk169eol48aNk4cPH0rhwoVl6dKldm8t+q9atGghSZMmlaFDh0qvXr0kWbJkUrduXRk2bJhN4LGHnDlzSsaMGeXSpUs2LVdWpUuXliVLlsQar2WP4/nuu+/K3LlzpV+/ftKnTx/JlSuX/P7777J48WKj66KIyMcffywTJ06UCRMmyO3btyV9+vTy4YcfysCBA50SkiMiIp75fhQROXPmjF3CVuXKlWXy5MkydOhQ6dq1q+TIkUOGDRsmZ8+ejXPYKlKkiNSoUUOWLl0qFy9elKRJk0qRIkVk5cqVUqpUqf9cKwDnsKi9R5kCQAJksVikY8eOsbocAgAAvK740R8DAAAAAN4whC0AAAAAMAFhCwAAAABMwAQZACD2v0kqAAAALVsAAAAAYAJatl5BdHS0XLp0SVKkSCEWi8XZ5QAAAABwElWVO3fuSMaMGV96awvC1iu4dOmSZMmSxdllAAAAAIgnzp8/L5kzZ37hNoStV5AiRQoReXJAPT09nVwNAAAAAGcJDw+XLFmyGBnhRQhbr8DaddDT05OwBQAAAOCVhhcxQQYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkSObuAN0323svttq+zQ4Ptti8AAAAAjkXLFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGCCRM4uAI6Tvfdyu+3r7NBgu+0LAAAAeBPRsgUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACp4atIUOGyDvvvCMpUqQQb29vqVOnjpw4ccJmm4cPH0rHjh0lTZo0kjx5cqlXr55cvXrVZpuQkBAJDg6WpEmTire3t/Ts2VMeP35ss81ff/0lxYoVE3d3d8mdO7dMmTLF7KcHAAAA4C3m1LC1ceNG6dixo+zYsUPWrl0rjx49kurVq8u9e/eMbbp16yZLly6VuXPnysaNG+XSpUvywQcfGOujoqIkODhYIiMjZdu2bfLHH3/IlClTpH///sY2Z86ckeDgYKlUqZIcOHBAunbtKm3atJHVq1c79PkCAAAAeHtYVFWdXYTV9evXxdvbWzZu3Cjly5eXsLAwSZcuncyYMUPq168vIiJ///235M+fX7Zv3y6lSpWSlStXynvvvSeXLl0SHx8fERH5+eefpVevXnL9+nVxc3OTXr16yfLly+XIkSPGYzVq1Ehu374tq1atemld4eHh4uXlJWFhYeLp6fnCbbP3Xv4fjoCts0OD7bYvEWoDAAAA/qu4ZIN4NWYrLCxMRERSp04tIiJ79+6VR48eSdWqVY1tfH19JWvWrLJ9+3YREdm+fbsUKlTICFoiIjVq1JDw8HA5evSosU3MfVi3se7jaRERERIeHm7zDwAAAADiIt6ErejoaOnatauUKVNG/Pz8RETkypUr4ubmJilTprTZ1sfHR65cuWJsEzNoWddb171om/DwcHnw4EGsWoYMGSJeXl7GvyxZstjlOQIAAAB4e8SbsNWxY0c5cuSIzJo1y9mlSJ8+fSQsLMz4d/78eWeXBAAAACCBSeTsAkREOnXqJMuWLZNNmzZJ5syZjeXp06eXyMhIuX37tk3r1tWrVyV9+vTGNrt27bLZn3W2wpjbPD2D4dWrV8XT01OSJEkSqx53d3dxd3e3y3MDAAAA8HZyasuWqkqnTp1k4cKFsn79esmRI4fN+oCAAEmcOLGsW7fOWHbixAkJCQmRwMBAEREJDAyUw4cPy7Vr14xt1q5dK56enlKgQAFjm5j7sG5j3QcAAAAA2JtTW7Y6duwoM2bMkMWLF0uKFCmMMVZeXl6SJEkS8fLyktatW0v37t0lderU4unpKZ999pkEBgZKqVKlRESkevXqUqBAAWnatKkMHz5crly5Iv369ZOOHTsarVPt27eXH3/8Ub744gtp1aqVrF+/XubMmSPLl9tvBjwAAAAAiMmpLVs//fSThIWFScWKFSVDhgzGv9mzZxvbjB49Wt577z2pV6+elC9fXtKnTy8LFiww1ru6usqyZcvE1dVVAgMD5eOPP5ZmzZrJ4MGDjW1y5Mghy5cvl7Vr10qRIkVk1KhRMmnSJKlRo4ZDny8AAACAt4dTW7Ze5RZfHh4eMn78eBk/fvxzt8mWLZusWLHihfupWLGi7N+/P841AgAAAMDriDezEQIAAADAm4SwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYwKlha9OmTVKrVi3JmDGjWCwWWbRokc36Fi1aiMVisfn37rvv2mwTGhoqH330kXh6ekrKlCmldevWcvfuXZttDh06JOXKlRMPDw/JkiWLDB8+3OynBgAAAOAt59Swde/ePSlSpIiMHz/+udu8++67cvnyZePfzJkzbdZ/9NFHcvToUVm7dq0sW7ZMNm3aJO3atTPWh4eHS/Xq1SVbtmyyd+9eGTFihAwcOFAmTpxo2vMCAAAAgETOfPCgoCAJCgp64Tbu7u6SPn36Z647fvy4rFq1Snbv3i3FixcXEZFx48ZJzZo1ZeTIkZIxY0aZPn26REZGym+//SZubm5SsGBBOXDggHz//fc2oSymiIgIiYiIMH4ODw9/zWcIAAAA4G0V78ds/fXXX+Lt7S358uWTDh06yM2bN41127dvl5QpUxpBS0SkatWq4uLiIjt37jS2KV++vLi5uRnb1KhRQ06cOCG3bt165mMOGTJEvLy8jH9ZsmQx6dkBAAAAeFPF67D17rvvytSpU2XdunUybNgw2bhxowQFBUlUVJSIiFy5ckW8vb1tfidRokSSOnVquXLlirGNj4+PzTbWn63bPK1Pnz4SFhZm/Dt//ry9nxoAAACAN5xTuxG+TKNGjYz/FypUSAoXLiy5cuWSv/76S6pUqWLa47q7u4u7u7tp+wcAAADw5ovXLVtPy5kzp6RNm1ZOnTolIiLp06eXa9eu2Wzz+PFjCQ0NNcZ5pU+fXq5evWqzjfXn540FAwAAAID/KkGFrQsXLsjNmzclQ4YMIiISGBgot2/flr179xrbrF+/XqKjo6VkyZLGNps2bZJHjx4Z26xdu1by5csnqVKlcuwTAAAAAPDWcGrYunv3rhw4cEAOHDggIiJnzpyRAwcOSEhIiNy9e1d69uwpO3bskLNnz8q6devk/fffl9y5c0uNGjVERCR//vzy7rvvStu2bWXXrl2ydetW6dSpkzRq1EgyZswoIiJNmjQRNzc3ad26tRw9elRmz54tY8aMke7duzvraQMAAAB4Czg1bO3Zs0eKFi0qRYsWFRGR7t27S9GiRaV///7i6uoqhw4dktq1a0vevHmldevWEhAQIJs3b7YZTzV9+nTx9fWVKlWqSM2aNaVs2bI299Dy8vKSNWvWyJkzZyQgIEA+//xz6d+//3OnfQcAAAAAe3DqBBkVK1YUVX3u+tWrV790H6lTp5YZM2a8cJvChQvL5s2b41wfAAAAALyuBDVmCwAAAAASCsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACaIc9jat2+fHD582Ph58eLFUqdOHenbt69ERkbatTgAAAAASKjiHLY++eQT+eeff0RE5N9//5VGjRpJ0qRJZe7cufLFF1/YvUAAAAAASIjiHLb++ecf8ff3FxGRuXPnSvny5WXGjBkyZcoUmT9/vr3rAwAAAIAEKc5hS1UlOjpaRET+/PNPqVmzpoiIZMmSRW7cuGHf6gAAAAAggYpz2CpevLh88803Mm3aNNm4caMEBweLiMiZM2fEx8fH7gUCAAAAQEIU57D1ww8/yL59+6RTp07y5ZdfSu7cuUVEZN68eVK6dGm7FwgAAAAACVGiuP5C4cKFbWYjtBoxYoS4urrapSgAAAAASOhe6z5bt2/flkmTJkmfPn0kNDRURESOHTsm165ds2txAAAAAJBQxbll69ChQ1KlShVJmTKlnD17Vtq2bSupU6eWBQsWSEhIiEydOtWMOgEAAAAgQYlzy1b37t2lZcuWcvLkSfHw8DCW16xZUzZt2mTX4gAAAAAgoYpz2Nq9e7d88sknsZZnypRJrly5YpeiAAAAACChi3PYcnd3l/Dw8FjL//nnH0mXLp1digIAAACAhC7OYat27doyePBgefTokYiIWCwWCQkJkV69ekm9evXsXiAAAAAAJERxDlujRo2Su3fvire3tzx48EAqVKgguXPnlhQpUsi3335rRo0AAAAAkODEeTZCLy8vWbt2rWzdulUOHjwod+/elWLFiknVqlXNqA8AAAAAEqQ4hy2rMmXKSJkyZexZCwAAAAC8MeLcjbBz584yduzYWMt//PFH6dq1qz1qAgAAAIAEL85ha/78+c9s0SpdurTMmzfPLkUBAAAAQEIX57B18+ZN8fLyirXc09NTbty4YZeiAAAAACChi3PYyp07t6xatSrW8pUrV0rOnDntUhQAAAAAJHRxniCje/fu0qlTJ7l+/bpUrlxZRETWrVsno0aNkh9++MHe9QEAAABAghTnsNWqVSuJiIiQb7/9Vr7++msREcmePbv89NNP0qxZM7sXCDhT9t7L7bq/s0OD7bo/AAAAxF+vNfV7hw4dpEOHDnL9+nVJkiSJJE+e3N51AQAAAECC9tr32RIRSZcunb3qAAAAAIA3SpwnyLh69ao0bdpUMmbMKIkSJRJXV1ebfwAAAACA12jZatGihYSEhMhXX30lGTJkEIvFYkZdAAAAAJCgxTlsbdmyRTZv3iz+/v4mlAMAAAAAb4Y4dyPMkiWLqKoZtQAAAADAGyPOYeuHH36Q3r17y9mzZ00oBwAAAADeDHHuRvjhhx/K/fv3JVeuXJI0aVJJnDixzfrQ0FC7FQcAAAAACVWcw9YPP/xgQhkAAAAA8GaJc9hq3ry5GXUAAAAAwBslzmO2REROnz4t/fr1k8aNG8u1a9dERGTlypVy9OhRuxYHAAAAAAlVnMPWxo0bpVChQrJz505ZsGCB3L17V0REDh48KAMGDLB7gQAAAACQEMU5bPXu3Vu++eYbWbt2rbi5uRnLK1euLDt27LBrcQAAAACQUMU5bB0+fFjq1q0ba7m3t7fcuHHDLkUBAAAAQEIX57CVMmVKuXz5cqzl+/fvl0yZMtmlKAAAAABI6OIctho1aiS9evWSK1euiMVikejoaNm6dav06NFDmjVrZkaNAAAAAJDgxHnq9++++046duwoWbJkkaioKClQoIBERUVJkyZNpF+/fmbUCOAZsvdebrd9nR0abLd9AQAA4Ik4hS1VlStXrsjYsWOlf//+cvjwYbl7964ULVpU8uTJY1aNAAAAAJDgxDls5c6dW44ePSp58uSRLFmymFUXAAAAACRocRqz5eLiInny5JGbN2+aVQ8AAAAAvBHiPEHG0KFDpWfPnnLkyBEz6gEAAACAN0KcJ8ho1qyZ3L9/X4oUKSJubm6SJEkSm/WhoaF2Kw4AAAAAEqo4h60ffvjBhDIAAAAA4M0Sp7D16NEj2bhxo3z11VeSI0cOs2oCAAAAgAQvTmO2EidOLPPnzzerFgAAAAB4Y8R5gow6derIokWLTCgFAAAAAN4ccR6zlSdPHhk8eLBs3bpVAgICJFmyZDbrO3fubLfiAAAAACChinPYmjx5sqRMmVL27t0re/futVlnsVgIWwAAAAAgrxG2zpw5Y0YdAAAAAPBGifOYLQAAAADAy8W5ZatVq1YvXP/bb7+9djEAAAAA8KaIc9i6deuWzc+PHj2SI0eOyO3bt6Vy5cp2KwwAAAAAErI4h62FCxfGWhYdHS0dOnSQXLly2aUoAAAAAEjo7DJmy8XFRbp37y6jR4+2x+4AAAAAIMGz2wQZp0+flsePH9trdwAAAACQoMW5G2H37t1tflZVuXz5sixfvlyaN29ut8IAAAAAICGLc9jav3+/zc8uLi6SLl06GTVq1EtnKgQAAACAt0Wcw9aGDRvMqAMAAAAA3ihxHrN15swZOXnyZKzlJ0+elLNnz9qjJgAAAABI8OIctlq0aCHbtm2LtXznzp3SokULe9QEAAAAAAlenMPW/v37pUyZMrGWlypVSg4cOGCPmgAAAAAgwYtz2LJYLHLnzp1Yy8PCwiQqKsouRQEAAABAQhfnsFW+fHkZMmSITbCKioqSIUOGSNmyZe1aHAAAAAAkVHGejXDYsGFSvnx5yZcvn5QrV05ERDZv3izh4eGyfv16uxcIAAAAAAlRnFu2ChQoIIcOHZKGDRvKtWvX5M6dO9KsWTP5+++/xc/Pz4waAQAAACDBiXPLlohIxowZ5bvvvrN3LQAAAADwxohzy9bvv/8uc+fOjbV87ty58scff9ilKAAAAABI6OIctoYMGSJp06aNtdzb25vWLgAAAAD4/+IctkJCQiRHjhyxlmfLlk1CQkLsUhQAAAAAJHRxDlve3t5y6NChWMsPHjwoadKksUtRAAAAAJDQxTlsNW7cWDp37iwbNmyQqKgoiYqKkvXr10uXLl2kUaNGZtQIAAAAAAlOnGcj/Prrr+Xs2bNSpUoVSZToya9HR0dLs2bNGLMFAAAAAP9fnMOWm5ubzJ49W77++ms5ePCgJEmSRAoVKiTZsmUzoz4AAAAASJBe6z5bIiKpU6eWSpUqPXNmQgAAAAB428VpzNbt27elY8eOkjZtWvHx8REfHx9JmzatdOrUSW7fvm1SiQAAAACQ8Lxyy1ZoaKgEBgbKxYsX5aOPPpL8+fOLiMixY8dkypQpsm7dOtm2bZukSpXKtGIBAAAAIKF45bA1ePBgcXNzk9OnT4uPj0+sddWrV5fBgwfL6NGj7V4kAAAAACQ0r9yNcNGiRTJy5MhYQUtEJH369DJ8+HBZuHChXYsDAAAAgITqlcPW5cuXpWDBgs9d7+fnJ1euXLFLUQAAAACQ0L1yN8K0adPK2bNnJXPmzM9cf+bMGUmdOrXdCgOQcGXvvdxu+zo7NNhu+wIAAHCkV27ZqlGjhnz55ZcSGRkZa11ERIR89dVX8u6779q1OAAAAABIqOI0QUbx4sUlT5480rFjR/H19RVVlePHj8uECRMkIiJCpk2bZmatAAAAAJBgvHLYypw5s2zfvl0+/fRT6dOnj6iqiIhYLBapVq2a/Pjjj5IlSxbTCgUAAACAhOSVw5aISI4cOWTlypVy69YtOXnypIiI5M6dm7FaAAAAAPCUOIUtq1SpUkmJEiXsXQsAAAAAvDFeeYIMAAAAAMCrI2wBAAAAgAkIWwAAAABgAsIWAAAAAJjglSbIWLJkySvvsHbt2q9dDAAAAAC8KV4pbNWpU+eVdmaxWCQqKuq/1AMAAAAAb4RXClvR0dFm1wEAAAAAbxTGbAEAAACACV7rpsb37t2TjRs3SkhIiERGRtqs69y5s10KAwAAAICELM5ha//+/VKzZk25f/++3Lt3T1KnTi03btyQpEmTire3N2ELAAAAAOQ1uhF269ZNatWqJbdu3ZIkSZLIjh075Ny5cxIQECAjR440o0YAAAAASHDiHLYOHDggn3/+ubi4uIirq6tERERIlixZZPjw4dK3b18zagQAAACABCfOYStx4sTi4vLk17y9vSUkJERERLy8vOT8+fP2rQ4AAAAAEqg4j9kqWrSo7N69W/LkySMVKlSQ/v37y40bN2TatGni5+dnRo0AYDfZey+3277ODg22274AAMCbJ84tW999951kyJBBRES+/fZbSZUqlXTo0EGuX78uv/zyi90LBAAAAICEKM4tW8WLFzf+7+3tLatWrbJrQQAAAADwJohzy1blypXl9u3bsZaHh4dL5cqV7VETAAAAACR4cQ5bf/31V6wbGYuIPHz4UDZv3myXogAAAAAgoXvlboSHDh0y/n/s2DG5cuWK8XNUVJSsWrVKMmXKZN/qAAAAACCBeuWw5e/vLxaLRSwWyzO7CyZJkkTGjRtn1+IAAAAAIKF65bB15swZUVXJmTOn7Nq1S9KlS2esc3NzE29vb3F1dTWlSAAAAABIaF45bGXLlk1ERKKjo00rBgAAAADeFHGeIENE5PTp0/LZZ59J1apVpWrVqtK5c2c5ffp0nPezadMmqVWrlmTMmFEsFossWrTIZr2qSv/+/SVDhgySJEkSqVq1qpw8edJmm9DQUPnoo4/E09NTUqZMKa1bt5a7d+/abHPo0CEpV66ceHh4SJYsWWT48OFxrhUAAAAA4iLOYWv16tVSoEAB2bVrlxQuXFgKFy4sO3fulIIFC8ratWvjtK979+5JkSJFZPz48c9cP3z4cBk7dqz8/PPPsnPnTkmWLJnUqFFDHj58aGzz0UcfydGjR2Xt2rWybNky2bRpk7Rr185YHx4eLtWrV5ds2bLJ3r17ZcSIETJw4ECZOHFiXJ86AAAAALyyON/UuHfv3tKtWzcZOnRorOW9evWSatWqvfK+goKCJCgo6JnrVFV++OEH6devn7z//vsiIjJ16lTx8fGRRYsWSaNGjeT48eOyatUq2b17t3Gz5XHjxknNmjVl5MiRkjFjRpk+fbpERkbKb7/9Jm5ublKwYEE5cOCAfP/99zahDACcKXvv5Xbd39mhwXbdHwAAiLs4t2wdP35cWrduHWt5q1at5NixY3YpSuTJhBxXrlyRqlWrGsu8vLykZMmSsn37dhER2b59u6RMmdIIWiIiVatWFRcXF9m5c6exTfny5cXNzc3YpkaNGnLixAm5devWMx87IiJCwsPDbf4BAAAAQFzEOWylS5dODhw4EGv5gQMHxNvb2x41iYgY9/Hy8fGxWe7j42Osu3LlSqzHTJQokaROndpmm2ftI+ZjPG3IkCHi5eVl/MuSJct/f0IAAAAA3iqv3I1w8ODB0qNHD2nbtq20a9dO/v33XyldurSIiGzdulWGDRsm3bt3N61QR+rTp4/NcwkPDydwAXhr2bOLI90bAQBvk1cOW4MGDZL27dvLV199JSlSpJBRo0ZJnz59REQkY8aMMnDgQOncubPdCkufPr2IiFy9elUyZMhgLL969ar4+/sb21y7ds3m9x4/fiyhoaHG76dPn16uXr1qs431Z+s2T3N3dxd3d3e7PA8AAAAAb6dX7kaoqiIiYrFYpFu3bnLhwgUJCwuTsLAwuXDhgnTp0kUsFovdCsuRI4ekT59e1q1bZywLDw+XnTt3SmBgoIiIBAYGyu3bt2Xv3r3GNuvXr5fo6GgpWbKksc2mTZvk0aNHxjZr166VfPnySapUqexWLwAAAADEFKcxW0+HqRQpUkiKFCle+8Hv3r0rBw4cMMaAnTlzRg4cOCAhISFisVika9eu8s0338iSJUvk8OHD0qxZM8mYMaPUqVNHRETy588v7777rrRt21Z27dolW7dulU6dOkmjRo0kY8aMIiLSpEkTcXNzk9atW8vRo0dl9uzZMmbMmDemyyMAAACA+ClOU7/nzZv3pa1XoaGhr7y/PXv2SKVKlYyfrQGoefPmMmXKFPniiy/k3r170q5dO7l9+7aULVtWVq1aJR4eHsbvTJ8+XTp16iRVqlQRFxcXqVevnowdO9ZY7+XlJWvWrJGOHTtKQECApE2bVvr378+07wAAAABMFaewNWjQIPHy8rLbg1esWNHonvgsFotFBg8eLIMHD37uNqlTp5YZM2a88HEKFy4smzdvfu06AQAAACCu4hS2GjVqZNfp3QEAAADgTfXKY7bsOfkFAAAAALzp4jwbIQAAAADg5V65G2F0dLSZdQAAAADAGyVOU78DAAAAAF4NYQsAAAAATEDYAgAAAAATELYAAAAAwASELQAAAAAwAWELAAAAAExA2AIAAAAAExC2AAAAAMAEhC0AAAAAMEEiZxcAAMDryt57ud32dXZosN32BQCACC1bAAAAAGAKwhYAAAAAmICwBQAAAAAmYMwWAAAmYDwZAICWLQAAAAAwAWELAAAAAExA2AIAAAAAExC2AAAAAMAEhC0AAAAAMAFhCwAAAABMQNgCAAAAABMQtgAAAADABIQtAAAAADABYQsAAAAATEDYAgAAAAATELYAAAAAwASJnF0AAABwnOy9l9t1f2eHBtt1fwDwJqFlCwAAAABMQNgCAAAAABMQtgAAAADABIQtAAAAADABYQsAAAAATEDYAgAAAAATELYAAAAAwASELQAAAAAwAWELAAAAAExA2AIAAAAAExC2AAAAAMAEiZxdAAAAgIhI9t7L7bavs0OD7bYvAHhdtGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgPtsAQAAvAT3AAPwOmjZAgAAAAATELYAAAAAwAR0IwQAAEjA6OIIxF+0bAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmYIIMAAAA2J09J+4QYfIOJEyELQAAALxVmMERjkI3QgAAAAAwAWELAAAAAExA2AIAAAAAExC2AAAAAMAEhC0AAAAAMAFhCwAAAABMQNgCAAAAABMQtgAAAADABIQtAAAAADBBImcXAAAAAOCJ7L2X221fZ4cG221fIvG7tviKli0AAAAAMAFhCwAAAABMQDdCAAAAAAmWPbs3iti3iyMtWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACaI12Fr4MCBYrFYbP75+voa6x8+fCgdO3aUNGnSSPLkyaVevXpy9epVm32EhIRIcHCwJE2aVLy9vaVnz57y+PFjRz8VAAAAAG+ZRM4u4GUKFiwof/75p/FzokT/V3K3bt1k+fLlMnfuXPHy8pJOnTrJBx98IFu3bhURkaioKAkODpb06dPLtm3b5PLly9KsWTNJnDixfPfddw5/LgAAAADeHvE+bCVKlEjSp08fa3lYWJhMnjxZZsyYIZUrVxYRkd9//13y588vO3bskFKlSsmaNWvk2LFj8ueff4qPj4/4+/vL119/Lb169ZKBAweKm5ubo58OAAAAgLdEvO5GKCJy8uRJyZgxo+TMmVM++ugjCQkJERGRvXv3yqNHj6Rq1arGtr6+vpI1a1bZvn27iIhs375dChUqJD4+PsY2NWrUkPDwcDl69OhzHzMiIkLCw8Nt/gEAAABAXMTrsFWyZEmZMmWKrFq1Sn766Sc5c+aMlCtXTu7cuSNXrlwRNzc3SZkypc3v+Pj4yJUrV0RE5MqVKzZBy7reuu55hgwZIl5eXsa/LFmy2PeJAQAAAHjjxetuhEFBQcb/CxcuLCVLlpRs2bLJnDlzJEmSJKY9bp8+faR79+7Gz+Hh4QQuAAAAAHESr1u2npYyZUrJmzevnDp1StKnTy+RkZFy+/Ztm22uXr1qjPFKnz59rNkJrT8/axyYlbu7u3h6etr8AwAAAIC4SFBh6+7du3L69GnJkCGDBAQESOLEiWXdunXG+hMnTkhISIgEBgaKiEhgYKAcPnxYrl27Zmyzdu1a8fT0lAIFCji8fgAAAABvj3jdjbBHjx5Sq1YtyZYtm1y6dEkGDBggrq6u0rhxY/Hy8pLWrVtL9+7dJXXq1OLp6SmfffaZBAYGSqlSpUREpHr16lKgQAFp2rSpDB8+XK5cuSL9+vWTjh07iru7u5OfHQAAAIA3WbwOWxcuXJDGjRvLzZs3JV26dFK2bFnZsWOHpEuXTkRERo8eLS4uLlKvXj2JiIiQGjVqyIQJE4zfd3V1lWXLlkmHDh0kMDBQkiVLJs2bN5fBgwc76ykBAAAAeEvE67A1a9asF6738PCQ8ePHy/jx45+7TbZs2WTFihX2Lg0AAAAAXihBjdkCAAAAgISCsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAAAAAJiAsAUAAAAAJiBsAQAAAIAJCFsAAAAAYALCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmOCtClvjx4+X7Nmzi4eHh5QsWVJ27drl7JIAAAAAvKHemrA1e/Zs6d69uwwYMED27dsnRYoUkRo1asi1a9ecXRoAAACAN1AiZxfgKN9//720bdtWWrZsKSIiP//8syxfvlx+++036d27t822EREREhERYfwcFhYmIiLh4eEvfZzoiPt2q/lVHi8uqC3u7FmXSPyt7W35e4rE39p4rb0eaos7Xmuvh9rijtfa66G2uHP0a826XlVfui+LvspWCVxkZKQkTZpU5s2bJ3Xq1DGWN2/eXG7fvi2LFy+22X7gwIEyaNAgB1cJAAAAIKE4f/68ZM6c+YXbvBUtWzdu3JCoqCjx8fGxWe7j4yN///13rO379Okj3bt3N36Ojo6W0NBQSZMmjVgslv9cT3h4uGTJkkXOnz8vnp6e/3l/9hRfa4uvdYlQ2+uKr7XF17pEqO11xdfa4mtdItT2uuJrbfG1LhFqe13xtbb4WpeIfWtTVblz545kzJjxpdu+FWErrtzd3cXd3d1mWcqUKe3+OJ6envHuhWgVX2uLr3WJUNvriq+1xde6RKjtdcXX2uJrXSLU9rria23xtS4Rantd8bW2+FqXiP1q8/LyeqXt3ooJMtKmTSuurq5y9epVm+VXr16V9OnTO6kqAAAAAG+ytyJsubm5SUBAgKxbt85YFh0dLevWrZPAwEAnVgYAAADgTfXWdCPs3r27NG/eXIoXLy4lSpSQH374Qe7du2fMTuhI7u7uMmDAgFhdFeOD+FpbfK1LhNpeV3ytLb7WJUJtryu+1hZf6xKhttcVX2uLr3WJUNvriq+1xde6RJxX21sxG6HVjz/+KCNGjJArV66Iv7+/jB07VkqWLOnssgAAAAC8gd6qsAUAAAAAjvJWjNkCAAAAAEcjbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQB4KzE/FIBXcfPmTRHhMwOvh7CFOImKinJ2CQlCdHT0M/8PwPlOnDghIiIWi4WTpziIT8fqWZ+r4eHhTqgEb7rp06fLhx9+KMeOHeMzA6+FsIVX9vXXX8vKlSvl0aNHzi4l3rF+8d+7d0+ioqLExcVFduzYISIiLi68zeKCLzKYaebMmdKsWTOZN2+eiBC44sJisYjIk885Z3NxcZEzZ87IjBkzRERkzpw50rNnT7l9+7ZzC4NTzZo1y/ju/a+snwt3796VyMhIGThwoBw/fpzPjNfwth8vzgKdyPri2717t+zZs0ceP37s5Iqeb/78+fLtt99KhgwZJHHixE6tJTo6Ot69cV1cXOTcuXPSqFEj2bt3r8yePVtKly4tGzdudHZpLxVfjqW1jvDwcHn06JHcuXNHROJHy6C1tvj02osPx+VF4uMxExHx9fWVZMmSyeTJk2XBggUiQuB6mQ0bNsiyZctERKRLly4ybtw4p7/+IiMj5aeffpKePXtK586dpVGjRlK6dGlJmTKlU+t6EWcfs6e9qJ74VuvLqKpcuXJFPvvsM9m1a5ex7L/YuXOniIh88skn0rZtW7lx44Z8+eWX8b6FK2Zd8aU3kvVCzd27d51cia2Yx8rMvyc3NXYSVRWLxSILFy6UTz75RD755BP57LPPxNvb29mlxTJ79my5e/euPHr0SNq3b++0Oi5duiQ+Pj7i6uoqIiLr16+XTZs2ycOHD6VLly7i4+Pj1FakK1euSLVq1cRiscjff/8tEydOlBYtWkh0dHS8ad2yvu7Onj0rDx8+FBcXF8mTJ4/xQejsulasWCFjx46VsLAwsVgs8u2330qlSpXiRW2rVq2SRYsWyd27d+WLL76QQoUKOe24xXxNbd68WW7cuCEFCxaUNGnSSJo0aZxSU0zx8ZjNmjVLKleuLN7e3vL3339L586dRUSkffv28sEHH9jU7UzWGk6dOiURERFy584dKVWqlNPquX79urRo0ULu3bsnadOmleXLl8vOnTulcOHCTqvJ6sKFC9KmTRtZs2aNtG3bVn755RcREad/5lr/hvv375e///5bHj16JOXLl5fs2bM7raanxTxGkyZNkn379klkZKQULVpUOnbs6OTqXt/QoUNl0qRJ8ueff/6n471hwwb58MMPpXv37tK7d28REZk6dapMmTJFUqZMKd98840UKFAgXnxmxGStZ+3atbJkyRI5evSo1KtXT8qWLStFihRxeD0xX2dDhw6VQ4cOyZAhQyRbtmwOryUm63GKiooyzinNfkA4UFRUlPH/1atXa7JkyXTy5Ml6+/ZtJ1b1fBcvXtTUqVOrxWLRAQMGqKpqdHS0w+uYPHmyent767Zt21RVddWqVZooUSJ99913NW3atJojRw5dsmSJPnz40OG1qf7f33XWrFnq6uqq+fLl082bNxvLnXHMnmatYcGCBZo7d24tUqSIpk6dWtu3b69bt251cnWqS5cuVQ8PDx02bJiuXLlSmzRpohaLRQ8fPuzs0nT9+vWaNGlSbdiwoRYvXlyTJ0+uU6ZM0fv37zu1rh49emiqVKk0Q4YM6uPjo3Xq1IkXf0vV+HXMNmzYoFWqVNFz584Zyw4dOqTVqlXTatWq6fz5843lznyvxnyP5sqVS/39/dXT01M//PBDp/xdrZ9fe/fu1Vy5cqmLi4v++OOPsep1lrt372r9+vW1QoUKWqBAAf3tt9+MdY8fP3Z4PVFRUcYxmTt3rqZJk0YLFiyouXLl0iRJkugff/yhDx48cHhdL9KzZ0/18fHRPn36aJcuXdTb21tbtGjh7LLi7NGjR6qqum/fPn3nnXd0zpw5qvr6r4O///5be/TooQULFtRhw4YZy//44w+tVKmS1q1bV48ePaqqzn8fPG3hwoWaIkUK/fTTT/Wbb77RLFmyaPXq1fXUqVMOrSPm+e6hQ4e0V69earFYtEuXLnrhwgWH1hKT9e+1Zs0a/fjjj/W9997Tdu3a6eXLl037WxK2HOT777/XY8eOGT9HRUVphw4dtH379qqqeu/ePT1w4IB2795dR48erTt27HBWqbFs27ZNixYtqgEBAXrnzh1VtX0TOUJ0dLQWKlRICxQooNu3b9d27drppEmTjPXBwcGaK1cuXbhwodMCl6rq8uXL9Y8//tDAwEAtX768rlq1ynjzxnwTO/r4Wf3111+aIkUKnTBhgqqq/vrrr2qxWHTatGlOqcfq4cOH+v777+s333yjqqohISGaM2dObdeunc12zvpS+/XXX3XEiBHGz927d1c3NzedPHmyQ8NDzOf/559/av78+XXjxo0aFhams2bN0jp16miZMmV0165dDqvpeeLLMbO6du2aqj750r9y5Yrx//gWuDZu3Kienp7G59vq1avVYrHo9OnTHVpHzGMwbdo0DQ4O1ooVK2rVqlV1yZIlxjpnfBfE9OjRI/3nn3/0008/1Xz58unkyZNt1lv/7mb64Ycf9OTJk8bPhw4d0rRp0+pvv/2mt2/f1lu3bumXX36pbm5u+r///U9VnfcdENPGjRs1d+7cun37dlVVnTdvniZLlkx//fVXm+3iW5iIafr06bpnzx6bZY0aNdKiRYu+1v5Gjhypd+/eVVXVc+fOaa9evTRfvnwJJnCdP39e/f39je/4qKgo9fT01J49ezqtph49emj27Nn1iy++0Fq1aqmrq6u2atVKL1686LSaFi1apMmTJ9cuXbrolClTNFOmTFqyZEmbC3L2RNhygOPHj+sHH3ygJ06cMJY9fPhQa9asqUFBQXro0CFt2bKlVqlSRQsUKKCFCxfWZs2a6d27d532Bh4yZIiOGzfO+ELYsWOHZsuWTStVqmTU5Kgvi4iICFV98mFWtGhRzZ8/v1asWFG3bNlis917772nOXPm1EWLFjns6uHz/j6XLl3SEiVKaLly5XT16tXGdvPmzXNIXU+zXt3r1auXNmvWTFVVz5w5o7lz57YJNNYwbabvvvtO+/TpY/wcHR2tYWFhmjNnTt22bZuGhoZqpkyZbOr69ddf9fz586bXFrMmVdUjR47oX3/9pV27do0VSK3h4ffff9d79+45rDZV1XHjxmnv3r31s88+s1m+fv16rVy5snbr1k1VHXsCEF+PWczPqTNnzmjJkiW1cePG8TZwffPNN9q0aVNVVf3nn380T5482qZNG2O99Qq+mWIesx49emjKlCn12rVrumfPHq1Tp45WrFjRJnCpqoaFhZlel/VvsmXLFv3pp5/0559/NtYdPXpUO3bsqPnz5zeC6oABA7RDhw6mfh989dVXmjp1av3nn3+MZatWrVI/Pz+9evWqzeuod+/e6unp6dDPsheZMWOGFi9eXFVV58+frylSpDCO6Z07d3TlypXOLO+ljhw5ohUqVFAXFxf97LPP9Pfff1fVJ61SJUuWNILtqzp58qSWK1dOjx8/brPsRYGrQYMGevDgQbs8n9fx9OfUxYsXtVixYhoeHq4nT57UTJkyadu2bY3127dvd2hPqg0bNmjKlCltWuaXLVumiRIl0tatWzvlvXD9+nV95513dOTIkaqqGhoaqlmyZNFPP/3UZjt7nuMSthwkPDxcVZ+0Elm7RW3dulXTpEmjadKk0QYNGujcuXNVVXXs2LFaokQJp3Y36N69u1osFp08ebJN4MqaNatWqVLlma019vSiF3nFihWf2xpTt25dTZkypS5dutSUumKyPvcNGzbooEGDtGnTprpp0ya9fPmyqj4JXCVLltSKFSvq+PHjtV+/fmqxWPTff/81vbana7SeWDZv3lx/+OEHffTokWbMmFE/+eQTY5vZs2fHOoGyt6ioKP3+++/VYrHot99+a7OuWbNm+vnnn2vmzJm1ffv2xknlrVu3tEGDBvrrr7869AR4/vz5mjRpUvX19VWLxaLNmzc3jqPVF1984ZSWwVq1aqnFYtGyZcsaV2GtBg4cqBkyZHBIcH5afD5mVkOGDNHy5ctrq1atjPfq4cOHtVq1ahoUFOTUFqSoqCht0qSJ9u3bV6Ojo42LDtZtfvvtN509e7bDart48aJ27NhRN2zYYCzbsmWL1qlTR6tWraoLFy5UVdWgoCAdM2aMQ2pasGCBJk2aVAsXLqxp06bVQoUKGX/HY8eOadeuXdXLy0tLly6tSZIk0d27d5tWy9WrV7VQoUJGQDl69KjeunVLFy9erIkSJdLr16+r6v9dMDx//rxmzZrV9M/ZZ3nWd+rq1au1fv36On36dE2ePLlNeF2zZo1++umnGhIS4sgyX8u8efO0RYsW6u3trUFBQTpy5EgtW7asfvHFF3Haz+PHj43Pzc2bNxv/f17gmjZtmhYtWlSbNm1q/I0dKTIy0vj/6dOnNTQ0VE+ePKlZsmTR1atXa+7cubVt27bGxdbDhw9rw4YNTX1PPG3NmjWaPXt2vXjxokZHRxu1zJs3T11cXLRr164OD1yXLl1SPz8/DQsL04sXL2rGjBltLu6uWLHC7o9J2DJZzC/S69eva40aNbRgwYJ66NAhVX3y4Wt94Vu3/fzzzzU4ONgpJ0sxDRgwQBMlSqS//vqrTeDKkSOHFi5c2PQT33///dcYHzBnzhytV6+eUUfJkiU1V65cun379lhfIo0bN7bp0mGmBQsWaIoUKbRx48ZatWpVLViwoPbt29cIVJcvX9agoCAtWbKk+vr66r59+xxSV0wzZsxQV1dXvXPnjg4fPlx9fHw0ffr02qVLFyPQREdHa9OmTbVr166mf2lEREToL7/8oq6urvr1118by7/++mtNlSqVVq5c2eZCQ58+fTRv3rx69uxZU+tS/b/34JkzZzQoKEgnTJig586d0969e2uGDBl0xIgRevXqVZvf6devn00XYXvbu3ev8f8xY8YYXQTbtm2rLi4uOn36dJtWomXLlmmhQoX00qVLptUUk/WYnT17Nt4cs5cZOXKkli5d2iZwHTlyREuUKKF169Y1Lo45ytq1a42LcFOnTtVcuXJp6tSptVOnTjafb61atdJPPvnEIV2lp02bpkmTJtVChQrpqVOnbD7vt2zZog0bNtQsWbIYY5JinvjZm/WxHz58qM2aNdM//vhDw8PDjb9Zvnz5jFBw/vx5XbhwoX711Vc2vUnMEBoaqtWqVdNu3brpmDFjNEeOHHr06FENCwvTUqVK6Ycffqg3b940tr969army5dPly9fbmpdT4v5GpoxY4Zu2rRJIyMj9eTJk5omTRq1WCw6btw4Y5sHDx7ou+++q02bNo033eNiWrFihc6YMUN37dplfIeFhYXp2bNn9aOPPtKGDRuqxWJRi8Vic6HgRWI+z0uXLmmlSpU0d+7cxsWs5wWumTNnOuS76WkhISFap04djY6O1iVLlmi2bNmM13vbtm3VYrFovXr1bH6nb9++Wrx4cdO+G571Wtm9e7daLBZds2aNqv5fy/z58+c1U6ZM6uLiop07dzalnue5f/++Fi5cWEePHq05cuTQTz75xPj8OnfunFasWNGo114IWw62ePFirVWrlpYsWTJW0/Pu3buNbgbOaJZ+VotLv379jMBlfZNs2rRJ69ata+oA5Pv37+vAgQM1Y8aM2rJlS7VYLDplyhSbbYoVK6b58uXT7du3O+ULYceOHZolSxZjjMCdO3fU3d1dc+XKpd27dzc+gO/cuaMhISF648YNh9VmPR7Xr1/X1q1b6+jRo1X1yQfc+++/rz4+PnrmzBlVffLF2qdPH82YMaPpJydWERER+tNPP6mrq6sOGjTIWN6sWTPNnz+/fvzxxzpw4ED9+OOPNWXKlLp//36H1KX65H3YsWNHrVu3rt66dctY/uWXX2qWLFl02LBhDhkHovrkSn3u3Ln1888/1+7du2uiRImMMQKqqg0bNlQvLy8dP368/v333xoSEqJVqlTRChUqOPQ9sWvXrnhzzKysz//gwYM6Y8YMXbp0qc2xixm4rK1vx44dM63P/vNERkZqrVq1tHr16vrgwQP9559/9IMPPtCcOXMaXaXDw8O1b9++miFDBv37778dUtf69es1KChIkyVLZjxmzAsxx44d07lz5+rIkSON7wYzuzhu3LhRixUrpu+//74eOXLEWB4SEqIlS5bUvHnzOqVL0uzZszVbtmzq6uqq3333nao+aSH55ZdftHz58lqvXj0NCQnR06dP61dffaWZM2d2WmtRz549NUOGDDpmzBjj+2j9+vWaKFEi/eSTT3TOnDm6YsUKrVq1qhYqVMjmYlx80b17d02fPr2mTZtW/f39tXv37javy0ePHun169d1woQJWrBgQaPL+qt2Cdu3b5+2a9dO586dq6VLl9ZixYrFClwFCxbUgQMH2v/JxcHixYs1MDBQixYtqokTJ9aZM2ca63bt2mUMq1i2bJnOmjVLu3btqilSpNADBw6YUk/M42vtUmx93bRq1Upz585tM/Tjxo0b2q1bN50+fbpaLBZdtGiRKXVZa3j8+LHN/60t4O++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g4O1UqVKOm3aNJv133//vfr4+Dh0+mMr64t9z549mjx5ct21a5fu2LFDU6VKZZxEbdy4UatXr64BAQGmX4mIz4NT42sr5fLly21myluwYIGWKVNG8+TJo/3799d169Zp79691dvb22hxCA0N1b59+6q3t7fDvmBXr16tKVOm1F9++UUjIiJ0xYoVarFY9MMPP9SQkBDj5NNiseiqVatMvUIdn8eCqD65QWdAQIB27dpVu3fvbtPSsXTpUq1QoYLWqlVLz507p4cOHdLPP/9ce/bsaQRHM7r9PH3M9u3bp23atNGyZcvadG1bu3at1qxZU7Nnz66BgYFao0YN9fLyMjU4P2337t3q6emp7du31xYtWmjixIm1S5cuscZMDhkyRFOmTOmwWadiunTpkvbv318vX76sly5d0vz582u7du00NDRUP/zwQ7VYLDpu3DiH1bNhwwZt06aNTZfosLAw/fHHHzV58uS6bNkyPXHihC5evFiXL1/ukC5m9+/f18qVK2ubNm20QIEC2rhxY1V98j5s2rSp0aoRGBioqVOndvjN11WfvNaKFy/+zJM562yhjvZ0+F23bp1mzZpVPTw8dPny5bG2u379utH1LL67du2a3rt3TytUqKDffPONqj55DQYEBGimTJmMyanseSIfGRmp3bp108SJE6u3t3es1n1HmT9/vpYtW1ZLlSql7u7uNr0YVJ/cFsfaAqyq2rdvXw0ODjalRdx6UbBdu3bGTH8PHjzQ3Llz28zwN3v2bK1SpYrWqVPHeH/euXPHeO05OnDdunXL5j0a83vJUTc9fxphy85Onz6twcHBWqVKFZ06daqqPhmE17x5c4ffy+VpYWFh2qBBA+3UqZOqPplEoWbNmpopUyYtVKiQzU3mzA5c8XVwanxspbxy5YrmyJFDW7ZsqadOndLjx49rypQp9euvv9YuXbpoQECAfvjhhzp8+HD99NNPNXHixFqkSBEtWbKkZs2a1WEnJ2FhYdquXTsdNGiQqj75oM6VK5fWr19fvby8tHbt2vrvv//q2bNnNTAwMNZ9mOwtvo4FiWnv3r1avHhxTZUqlY4ePdpm3dKlS7VixYr6/vvvx5pVyqyT35jHbOXKlVqoUCHNly+fenh4xOo2eOzYMV20aJG2bt1av/vuO4d2zzt16pT279/f5kbxEyZM0MyZMz/z/naO6NoYs9X5xo0bxhhTa1e0L7/8UmvWrGl0S+rTp49mzpxZU6dO7ZDvhsuXL2uuXLk0RYoUxgms1c2bN/X99983vhtickQXM+uFtMmTJ2u+fPlsAsHcuXN17Nix+sMPPzj8hsUxPevqec6cObVevXrGiaijxAxaJ0+eNC5anT59WnPmzKnvvfeezXT01u1v374dr7oMWl27di3WSfA///yjGTJk0CVLlqjqk1bhDz/8UOfPn2/3VtaY3wVr1651yiRXMWsYPHiwWiwWLVasmNFSah3DFRoaqm3atFEPDw8tWrSopkiRItYtS+xp3759xm1arK9zX19fo2XLavbs2VqpUiUtV66czcVdR/YoeNF71NrrwVn3jyNsmeDff//VunXrqp+fnxYvXly9vLyMGVsc6fvvv9eRI0fazEozceJETZo0qXGVOiwsTK9evWozUYDZA2Xj++DU+NhKaT0p79Spk3799dc2s2EtWbJEq1Wrpg0bNtTFixfrli1bdMiQITpjxgzTA01MEREROmfOHD116pTevHlTixYtalyBnDFjhlosFg0KCtLz5887ZDB2fB4LEtOhQ4c0Z86cWq1atVjdkpYvX65+fn7au3dvh9RiPWaVKlVSFxcX/fPPP3XlypVasGBBrVWrls0JnLOEhYVp8eLFNW3atMatGax+/PFHzZQpk3755Zc23bnM/IJ9UavzgAEDjK41derUsblHVdeuXfX33393aLfLgwcPaq5cubRYsWKxLsK0bt3amJHQWe7cuaO//fab5suXz2jhik+evnq+YcMG9fPzizVjqJmeN/auXLlyunDhQv333381Z86c2qBBA5vudjF/Lz4Fri+//FL9/PzUy8tL69Spo1OnTtXo6Gi9c+eOli9fXuvUqaMLFy7U6tWra7Vq1YyTdzMDlzNYH3/fvn3ap08f/eabb7R69er6/vvvxwoKZ86c0Xnz5uno0aMdcn60b98+4/t8165dWqtWLaNF1zp7r6rqd999p71793bqrJbx4T36LIQtk1y4cEEnT56sgwYNcsqsg/fv39devXqpl5eXVq5cWVu1aqU3b97UBw8e6EcffaTt27d/5qwsjnyTxNfBqVbxrZXSOhA0W7Zs2qtXL5t1ixcv1kqVKukHH3zg0Ht8Pc06sHfatGkaGBhoBP2ZM2dqxYoVNVu2bA4NgPF5LEhMBw4c0KJFi2rbtm2N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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the top 20 most common words\n", "plt.figure(figsize=(10, 8))\n", "word_totals.head(20).plot(kind=\"bar\")\n", "plt.title(\"Top 20 Most Common Words in Emails\")\n", "plt.xlabel(\"Words\")\n", "plt.ylabel(\"Total Occurrences\")\n", "plt.xticks(rotation=45)\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.4" } }, "nbformat": 4, "nbformat_minor": 5 }