diff --git a/your-code/main.ipynb b/your-code/main.ipynb index 406e6ba..1b07b6e 100755 --- a/your-code/main.ipynb +++ b/your-code/main.ipynb @@ -206,8 +206,18 @@ "execution_count": null, "metadata": {}, "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], "source": [ - "# your code here" + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "data = pd.read_csv(r\"C:\\Users\\nunoc\\Ambiente de Trabalho\\Iron Hack\\Week 4\\lab-subsetting-and-descriptive-stats\\your-code\\Employee.csv\")" ] }, { @@ -219,11 +229,43 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Name Department Education Gender Title Years Salary\n", + "0 Jose IT Bachelor M analyst 1 35\n", + "1 Maria IT Master F analyst 2 30\n", + "2 David HR Master M analyst 2 30\n", + " Years Salary\n", + "count 9.000000 9.000000\n", + "mean 4.111111 48.888889\n", + "std 2.803767 16.541194\n", + "min 1.000000 30.000000\n", + "25% 2.000000 35.000000\n", + "50% 3.000000 55.000000\n", + "75% 7.000000 60.000000\n", + "max 8.000000 70.000000\n", + "Gender\n", + "M 5\n", + "F 4\n", + "dtype: int64\n", + "Title\n", + "analyst 4\n", + "associate 3\n", + "VP 2\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "print(data.head(3))\n", + "print(data.describe())\n", + "print(data.value_counts(data['Gender']))\n", + "print(data.value_counts(data['Title']))" ] }, { @@ -233,7 +275,9 @@ "outputs": [], "source": [ "\"\"\"\n", - "your comments here\n", + "We can observe the numerical columns basic descriptive stats. \n", + "The company is 55% male.\n", + "It has 9 employees 4 analyst, 3 associate and 2 VP\n", "\"\"\"" ] }, @@ -246,11 +290,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "48.888888888888886" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# your code here" + "data['Salary'].mean()" ] }, { @@ -262,11 +317,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "70" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# your code here" + "data['Salary'].max()" ] }, { @@ -278,11 +344,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "30" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# your code here" + "data['Salary'].min()" ] }, { @@ -294,11 +371,155 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 19, + "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", + "
NameDepartmentEducationGenderTitleYearsSalary
1MariaITMasterFanalyst230
2DavidHRMasterManalyst230
0JoseITBachelorManalyst135
3SoniaHRBachelorFanalyst435
4SamuelSalesMasterMassociate355
5EvaSalesBachelorFassociate255
7PedroITPhdMassociate760
6CarlosITMasterMVP870
8AnaHRMasterFVP870
\n", + "
" + ], + "text/plain": [ + " Name Department Education Gender Title Years Salary\n", + "1 Maria IT Master F analyst 2 30\n", + "2 David HR Master M analyst 2 30\n", + "0 Jose IT Bachelor M analyst 1 35\n", + "3 Sonia HR Bachelor F analyst 4 35\n", + "4 Samuel Sales Master M associate 3 55\n", + "5 Eva Sales Bachelor F associate 2 55\n", + "7 Pedro IT Phd M associate 7 60\n", + "6 Carlos IT Master M VP 8 70\n", + "8 Ana HR Master F VP 8 70" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "low = data.sort_values(by='Salary', ascending=True)\n", + "low" ] }, { @@ -310,11 +531,67 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 22, + "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", + "
NameDepartmentEducationGenderTitleYearsSalary
2DavidHRMasterManalyst230
\n", + "
" + ], + "text/plain": [ + " Name Department Education Gender Title Years Salary\n", + "2 David HR Master M analyst 2 30" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "David = data[data['Name']=='David']\n", + "David" ] }, { @@ -326,11 +603,131 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "2 30\n", + "Name: Salary, dtype: int64" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# your code here" + "David['Salary']" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameSalary
2David30
\n", + "
" + ], + "text/plain": [ + " Name Salary\n", + "2 David 30" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.loc[data['Name'] == 'David', ['Name', 'Salary']]" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameSalary
2David30
\n", + "
" + ], + "text/plain": [ + " Name Salary\n", + "2 David 30" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[data['Name']=='David'][['Name','Salary']]" ] }, { @@ -342,11 +739,88 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameDepartmentEducationGenderTitleYearsSalary
4SamuelSalesMasterMassociate355
5EvaSalesBachelorFassociate255
7PedroITPhdMassociate760
\n", + "
" + ], + "text/plain": [ + " Name Department Education Gender Title Years Salary\n", + "4 Samuel Sales Master M associate 3 55\n", + "5 Eva Sales Bachelor F associate 2 55\n", + "7 Pedro IT Phd M associate 7 60" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.loc[data['Title']=='associate']" ] }, { @@ -359,22 +833,237 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Method 1\n", - "# your code here" + "execution_count": 32, + "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", + "
NameDepartmentEducationGenderTitleYearsSalary
0JoseITBachelorManalyst135
1MariaITMasterFanalyst230
2DavidHRMasterManalyst230
\n", + "
" + ], + "text/plain": [ + " Name Department Education Gender Title Years Salary\n", + "0 Jose IT Bachelor M analyst 1 35\n", + "1 Maria IT Master F analyst 2 30\n", + "2 David HR Master M analyst 2 30" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(3)" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Method 2\n", - "# your code here" + "execution_count": 41, + "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", + "
NameDepartmentEducationGenderTitleYearsSalary
0JoseITBachelorManalyst135
1MariaITMasterFanalyst230
2DavidHRMasterManalyst230
\n", + "
" + ], + "text/plain": [ + " Name Department Education Gender Title Years Salary\n", + "0 Jose IT Bachelor M analyst 1 35\n", + "1 Maria IT Master F analyst 2 30\n", + "2 David HR Master M analyst 2 30" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "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", + "
NameDepartmentEducation
0JoseITBachelor
1MariaITMaster
\n", + "
" + ], + "text/plain": [ + " Name Department Education\n", + "0 Jose IT Bachelor\n", + "1 Maria IT Master" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.iloc[:2, :3]" ] }, { @@ -386,11 +1075,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Name Department Education Gender Title Years Salary\n", + "7 Pedro IT Phd M associate 7 60\n" + ] + } + ], "source": [ - "# your code here" + "associate_55 = data.loc[(data['Title'] == 'associate') & (data['Salary']>55)]\n", + "print(associate_55)" ] }, { @@ -402,11 +1101,162 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\nunoc\\AppData\\Local\\Temp\\ipykernel_10176\\364925444.py:8: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n", + " Years = data.groupby('Grouped Years').mean()\n" + ] + }, + { + "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", + "
Salary
Grouped Years
0-237.500000
2-445.000000
4-6NaN
6-866.666667
8-10NaN
\n", + "
" + ], + "text/plain": [ + " Salary\n", + "Grouped Years \n", + "0-2 37.500000\n", + "2-4 45.000000\n", + "4-6 NaN\n", + "6-8 66.666667\n", + "8-10 NaN" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#define years for grouping\n", + "\n", + "bins = [0,2,4,6,8,10]\n", + "bin_labels = ['0-2','2-4','4-6','6-8','8-10']\n", + "\n", + "data['Grouped Years'] = pd.cut(data['Years'], bins=bins, labels=bin_labels)\n", + "\n", + "Years = data.groupby('Grouped Years').mean()\n", + "Years.iloc[:, 1:2]" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "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", + "
Grouped YearsSalary
00-237.500000
12-445.000000
26-866.666667
\n", + "
" + ], + "text/plain": [ + " Grouped Years Salary\n", + "0 0-2 37.500000\n", + "1 2-4 45.000000\n", + "2 6-8 66.666667" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pivot_years = data.pivot_table(index='Grouped Years', values='Salary', aggfunc='mean').reset_index()\n", + "pivot_years" ] }, { @@ -418,11 +1268,35 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\nunoc\\AppData\\Local\\Temp\\ipykernel_10176\\4179048783.py:1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n", + " Title = data.groupby('Title').mean()\n" + ] + }, + { + "data": { + "text/plain": [ + "Title\n", + "VP 70.000000\n", + "analyst 32.500000\n", + "associate 56.666667\n", + "Name: Salary, dtype: float64" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Title = data.groupby('Title').mean()\n", + "Title['Salary']" ] }, { @@ -434,11 +1308,25 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " The q25 is: 35.0\n", + " The q50 is: 55.0\n", + " The q75 is: 60.0\n" + ] + } + ], + "source": [ + "q_25 = data['Salary'].quantile(0.25)\n", + "q_50 = data['Salary'].quantile(0.50)\n", + "q_75 = data['Salary'].quantile(0.75)\n", + "\n", + "print(f' The q25 is: {q_25}\\n The q50 is: {q_50}\\n The q75 is: {q_75}')" ] }, { @@ -450,11 +1338,63 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 88, + "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", + "
GenderSalary
0F47.5
1M50.0
\n", + "
" + ], + "text/plain": [ + " Gender Salary\n", + "0 F 47.5\n", + "1 M 50.0" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "salary_gender = data.pivot_table(index='Gender', values='Salary', aggfunc='mean').reset_index()\n", + "salary_gender" ] }, { @@ -467,11 +1407,131 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzYAAAJGCAYAAACJGhA0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAtgUlEQVR4nO3dfXScdZ3//1dqw9D0DkRJGoxQsdwGFgGpVLT1JumiclT86q5VhFVZtHhTq1utPbsGD6Zav9S6dmXFo9Bd7WFVlOXsTzFx0Sp20VJFa1dQoVYUYhcspjQ1Tcv8/mCbL7XcdNK06Yc8HufklLnmuuZ6zzkzXPPMNTOpq1ar1QAAABRszEgPAAAAsK+EDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUb+xID/DnHnroodxzzz2ZOHFi6urqRnocAABghFSr1WzZsiXNzc0ZM+bxz8kcdGFzzz33pKWlZaTHAAAADhJ33313nvGMZzzuOgdd2EycODHJw8NPmjRphKeBkTEwMJCurq60t7envr5+pMcBYIQ4HjDa9fb2pqWlZbARHs9BFza73n42adIkYcOoNTAwkIaGhkyaNMmBDGAUczyAh+3NR1R8eQAAAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFK+msDnmmGNSV1e3x8+ll16aJKlWq+no6Ehzc3PGjRuXWbNmZf369ftlcAAAgF1qCps1a9bk3nvvHfzp7u5Okrz2ta9NkixZsiRLly7N8uXLs2bNmjQ1NaWtrS1btmwZ/skBAAD+V01h8/SnPz1NTU2DP//xH/+RY489NjNnzky1Ws2yZcuyaNGinH/++Wltbc2KFSvS19eXlStX7q/5AQAAMnaoG27fvj1f+MIXMn/+/NTV1eWuu+5KT09P2tvbB9epVCqZOXNmVq9enUsuueRRb6e/vz/9/f2Dl3t7e5MkAwMDGRgYGOp4ULRdj33PAYDy9fX15Y477hjStg9u68/qdXdm4mG3ZMK4Ss3bH3/88WloaBjSvuFgUMtroSGHzfXXX58HHnggF110UZKkp6cnSdLY2Ljbeo2Njdm4ceNj3s7ixYtz2WWX7bG8q6vLE5FRb9fbPQEo15133pn3vve9+3QbS4a43RVXXJFjjz12n/YNI6mvr2+v1x1y2Hzuc5/Lueeem+bm5t2W19XV7Xa5Wq3useyRFi5cmPnz5w9e7u3tTUtLS9rb2zNp0qShjgdFGxgYSHd3d9ra2lJfXz/S4wCwD/r6+nLOOecMadtf3PvH/N3X/jsff/VJOW7K5Jq3d8aG0u16N9feGFLYbNy4Md/61rfy1a9+dXBZU1NTkofP3EyZMmVw+aZNm/Y4i/NIlUollcqep1br6+u9oGPU8zwAKN/kyZNz1llnDWnbQzben8p/bU/raafntKOPGObJ4OBXy+ugIf0dm6uvvjpHHnlkXv7ylw8umzp1apqamnZ768z27duzatWqzJgxYyi7AQAA2Cs1n7F56KGHcvXVV+fCCy/M2LH/b/O6urrMmzcvnZ2dmTZtWqZNm5bOzs40NDRkzpw5wzo0AADAI9UcNt/61rfym9/8Jm9+85v3uG7BggXZtm1b5s6dm82bN2f69Onp6urKxIkTh2VYAACAR1Nz2LS3t6darT7qdXV1deno6EhHR8e+zgUAALDXhvQZGwAAgIOJsAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4NYfN7373u7zxjW/MEUcckYaGhpx22mlZu3bt4PXVajUdHR1pbm7OuHHjMmvWrKxfv35YhwYAAHikmsJm8+bNef7zn5/6+vp84xvfyH//93/niiuuyGGHHTa4zpIlS7J06dIsX748a9asSVNTU9ra2rJly5bhnh0AACBJMraWlT/2sY+lpaUlV1999eCyY445ZvC/q9Vqli1blkWLFuX8889PkqxYsSKNjY1ZuXJlLrnkkuGZGgAA4BFqCpsbbrghs2fPzmtf+9qsWrUqRx11VObOnZuLL744SbJhw4b09PSkvb19cJtKpZKZM2dm9erVjxo2/f396e/vH7zc29ubJBkYGMjAwMCQ7hSUbtdj33MA4OByzwPbsrnvwP2/+Rc9f9zt3wPl8Ib6NB827oDuEx5NLa+Fagqbu+66K1deeWXmz5+fD37wg/nhD3+Yd73rXalUKnnTm96Unp6eJEljY+Nu2zU2Nmbjxo2PepuLFy/OZZddtsfyrq6uNDQ01DIePOl0d3eP9AgA/K8/9Ccf+fFTsqNad8D3veBrPz+g+xtbV82i5+zMUysHdLewh76+vr1et6aweeihh3LmmWems7MzSfKc5zwn69evz5VXXpk3velNg+vV1e3+hK9Wq3ss22XhwoWZP3/+4OXe3t60tLSkvb09kyZNqmU8eNIYGBhId3d32traUl9fP9LjAJBk/T292fGjW0Z6jANiR7Uuz5l+Tk5u9lqMkbXr3Vx7o6awmTJlSk466aTdlp144om57rrrkiRNTU1Jkp6enkyZMmVwnU2bNu1xFmeXSqWSSmXPXwfU19d7Qceo53kAcPAYO7aml03FGzt2rGMQI66Wx2BN34r2/Oc/P3fcccduy37xi1/k6KOPTpJMnTo1TU1Nu719Zvv27Vm1alVmzJhRy64AAAD2Wk2/enjPe96TGTNmpLOzM6973evywx/+MFdddVWuuuqqJA+/BW3evHnp7OzMtGnTMm3atHR2dqahoSFz5szZL3cAAACgprB57nOfm6997WtZuHBhPvzhD2fq1KlZtmxZ3vCGNwyus2DBgmzbti1z587N5s2bM3369HR1dWXixInDPjwAAEBSY9gkySte8Yq84hWveMzr6+rq0tHRkY6Ojn2ZCwAAYK/V9BkbAACAg5GwAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4o0d6QEAAErQv/NPGXPo70Z6jAOmf+efkkwe6TFgrwkbAIC9cM/WjRk/9VMjPcYBc8/W03JGGkd6DNhrwgYAYC80jz86Wze8c6THOGCaX3T0SI8ANRE2AAB7ofKUQ/PQn44a6TEOmMpTDh3pEaAmvjwAAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACheTWHT0dGRurq63X6ampoGr69Wq+no6Ehzc3PGjRuXWbNmZf369cM+NAAAwCPVfMbm5JNPzr333jv4s27dusHrlixZkqVLl2b58uVZs2ZNmpqa0tbWli1btgzr0AAAAI9Uc9iMHTs2TU1Ngz9Pf/rTkzx8tmbZsmVZtGhRzj///LS2tmbFihXp6+vLypUrh31wAACAXcbWusEvf/nLNDc3p1KpZPr06ens7MyznvWsbNiwIT09PWlvbx9ct1KpZObMmVm9enUuueSSR729/v7+9Pf3D17u7e1NkgwMDGRgYKDW8eBJYddj33MA4OCxY8eOkR7hgNqxY4fjECOulsdgTWEzffr0/Mu//EuOO+64/P73v8/ll1+eGTNmZP369enp6UmSNDY27rZNY2NjNm7c+Ji3uXjx4lx22WV7LO/q6kpDQ0Mt48GTTnd390iPAMD/uvvBZAi/Ey7WzTffnI0TRnoKRru+vr69XreuWq1Wh7qjrVu35thjj82CBQvyvOc9L89//vNzzz33ZMqUKYPrXHzxxbn77rtz4403PuptPNoZm5aWltx3332ZNGnSUEeDog0MDKS7uzttbW2pr68f6XEASLL+nt686spbRnqMA+b6tz8vJzd7LcbI6u3tzdOe9rT88Y9/fMI22KdfO4wfPz6nnHJKfvnLX+ZVr3pVkqSnp2e3sNm0adMeZ3EeqVKppFKp7LG8vr7eCzpGPc8DgIPH2LGj52xN8vD9dQxipNXyGNynv2PT39+fn//855kyZUqmTp2apqam3d46s3379qxatSozZszYl90AAAA8rpp+9fC+970v5513Xp75zGdm06ZNufzyy9Pb25sLL7wwdXV1mTdvXjo7OzNt2rRMmzYtnZ2daWhoyJw5c/bX/AAAALWFzW9/+9u8/vWvz3333ZenP/3ped7znpdbbrklRx99dJJkwYIF2bZtW+bOnZvNmzdn+vTp6erqysSJE/fL8AAAAEmNYXPttdc+7vV1dXXp6OhIR0fHvswEAABQk336jA0AAMDBQNgAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQvH0Km8WLF6euri7z5s0bXFatVtPR0ZHm5uaMGzcus2bNyvr16/d1TgAAgMc05LBZs2ZNrrrqqpx66qm7LV+yZEmWLl2a5cuXZ82aNWlqakpbW1u2bNmyz8MCAAA8miGFzYMPPpg3vOEN+exnP5vDDz98cHm1Ws2yZcuyaNGinH/++Wltbc2KFSvS19eXlStXDtvQAAAAjzR2KBtdeumlefnLX56XvvSlufzyyweXb9iwIT09PWlvbx9cVqlUMnPmzKxevTqXXHLJHrfV39+f/v7+wcu9vb1JkoGBgQwMDAxlPCjerse+5wDAwWPHjh0jPcIBtWPHDschRlwtj8Gaw+baa6/Nj370o6xZs2aP63p6epIkjY2Nuy1vbGzMxo0bH/X2Fi9enMsuu2yP5V1dXWloaKh1PHhS6e7uHukRAPhfdz+YDPF3wkW6+eabs3HCSE/BaNfX17fX69b07Lz77rvz7ne/O11dXTn00EMfc726urrdLler1T2W7bJw4cLMnz9/8HJvb29aWlrS3t6eSZMm1TIePGkMDAyku7s7bW1tqa+vH+lxAEiy/p7e/N91t4z0GAfMOeeck5ObvRZjZO16N9feqCls1q5dm02bNuWMM84YXLZz585897vfzfLly3PHHXckefjMzZQpUwbX2bRp0x5ncXapVCqpVCp7LK+vr/eCjlHP8wDg4DF27Og5W5M8fH8dgxhptTwGa/rygJe85CVZt25dbrvttsGfM888M294wxty22235VnPelaampp2e/vM9u3bs2rVqsyYMaOWXQEAAOy1mn71MHHixLS2tu62bPz48TniiCMGl8+bNy+dnZ2ZNm1apk2bls7OzjQ0NGTOnDnDNzUAAMAjDPs51QULFmTbtm2ZO3duNm/enOnTp6erqysTJ04c7l0BAAAkGYaw+c53vrPb5bq6unR0dKSjo2NfbxoAAGCvDOkPdAIAABxMhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAe+Hw8YekMnZ0vHSqjB2Tw8cfMtJjQE3GjvQAAAAlOOqwcbnpfbOyeev2A7bPO+79Y977lXW54v+ckuOnTD5g+z18/CE56rBxB2x/MByEDQDAXjrqsHEH9AX/jh07kiTHPn18Wo86cGEDJRod51MBAIAnNWEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFC8msLmyiuvzKmnnppJkyZl0qRJOfvss/ONb3xj8PpqtZqOjo40Nzdn3LhxmTVrVtavXz/sQwMAADxSTWHzjGc8Ix/96Edz66235tZbb82LX/zivPKVrxyMlyVLlmTp0qVZvnx51qxZk6amprS1tWXLli37ZXgAAICkxrA577zz8rKXvSzHHXdcjjvuuHzkIx/JhAkTcsstt6RarWbZsmVZtGhRzj///LS2tmbFihXp6+vLypUr99f8AAAAGTvUDXfu3Jkvf/nL2bp1a84+++xs2LAhPT09aW9vH1ynUqlk5syZWb16dS655JJHvZ3+/v709/cPXu7t7U2SDAwMZGBgYKjjQdF2PfY9BwDK19fXlzvuuGNI2/7i3j+mv+dX+dlth2T77yfXvP3xxx+fhoaGIe0bDga1vBaqOWzWrVuXs88+O3/6058yYcKEfO1rX8tJJ52U1atXJ0kaGxt3W7+xsTEbN258zNtbvHhxLrvssj2Wd3V1eSIy6nV3d4/0CADsozvvvDPvfe979+k2LlgxtO2uuOKKHHvssfu0bxhJfX19e71uzWFz/PHH57bbbssDDzyQ6667LhdeeGFWrVo1eH1dXd1u61er1T2WPdLChQszf/78wcu9vb1paWlJe3t7Jk2aVOt48KQwMDCQ7u7utLW1pb6+fqTHAWAf9PX15ZxzzhnStg9u6883v7cms1/w3EwYV6l5e2dsKN2ud3PtjZrD5pBDDsmzn/3sJMmZZ56ZNWvW5JOf/GTe//73J0l6enoyZcqUwfU3bdq0x1mcR6pUKqlU9nyi1tfXe0HHqOd5AFC+yZMn56yzzhrStgMDA9nywB/yghnPczxgVKrlcb/Pf8emWq2mv78/U6dOTVNT025vndm+fXtWrVqVGTNm7OtuAAAAHlNNZ2w++MEP5txzz01LS0u2bNmSa6+9Nt/5zndy4403pq6uLvPmzUtnZ2emTZuWadOmpbOzMw0NDZkzZ87+mh8AAKC2sPn973+fCy64IPfee28mT56cU089NTfeeGPa2tqSJAsWLMi2bdsyd+7cbN68OdOnT09XV1cmTpy4X4YHAABIagybz33uc497fV1dXTo6OtLR0bEvMwEAANRknz9jAwAAMNKEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMWrKWwWL16c5z73uZk4cWKOPPLIvOpVr8odd9yx2zrVajUdHR1pbm7OuHHjMmvWrKxfv35YhwYAAHikmsJm1apVufTSS3PLLbeku7s7O3bsSHt7e7Zu3Tq4zpIlS7J06dIsX748a9asSVNTU9ra2rJly5ZhHx4AACBJxtay8o033rjb5auvvjpHHnlk1q5dmxe+8IWpVqtZtmxZFi1alPPPPz9JsmLFijQ2NmblypW55JJLhm9yAACA/1VT2Py5P/7xj0mSpz71qUmSDRs2pKenJ+3t7YPrVCqVzJw5M6tXr37UsOnv709/f//g5d7e3iTJwMBABgYG9mU8KNaux77nAMDo5njAaFfLY3/IYVOtVjN//vycc845aW1tTZL09PQkSRobG3dbt7GxMRs3bnzU21m8eHEuu+yyPZZ3dXWloaFhqOPBk0J3d/dIjwDAQcDxgNGqr69vr9cdcti84x3vyE9/+tPcfPPNe1xXV1e32+VqtbrHsl0WLlyY+fPnD17u7e1NS0tL2tvbM2nSpKGOB0UbGBhId3d32traUl9fP9LjADBCHA8Y7Xa9m2tvDCls3vnOd+aGG27Id7/73TzjGc8YXN7U1JTk4TM3U6ZMGVy+adOmPc7i7FKpVFKpVPZYXl9f7wnMqOd5AEDieMDoVcvjvqZvRatWq3nHO96Rr371q7npppsyderU3a6fOnVqmpqadjtdun379qxatSozZsyoZVcAAAB7raYzNpdeemlWrlyZf//3f8/EiRMHP1MzefLkjBs3LnV1dZk3b146Ozszbdq0TJs2LZ2dnWloaMicOXP2yx0AAACoKWyuvPLKJMmsWbN2W3711VfnoosuSpIsWLAg27Zty9y5c7N58+ZMnz49XV1dmThx4rAMDAAA8OdqCptqtfqE69TV1aWjoyMdHR1DnQkAAKAmNX3GBgAA4GAkbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDiCRsAAKB4wgYAAChezWHz3e9+N+edd16am5tTV1eX66+/frfrq9VqOjo60tzcnHHjxmXWrFlZv379cM0LAACwh5rDZuvWrfmLv/iLLF++/FGvX7JkSZYuXZrly5dnzZo1aWpqSltbW7Zs2bLPwwIAADyasbVucO655+bcc8991Ouq1WqWLVuWRYsW5fzzz0+SrFixIo2NjVm5cmUuueSSfZsWAADgUdQcNo9nw4YN6enpSXt7++CySqWSmTNnZvXq1Y8aNv39/env7x+83NvbmyQZGBjIwMDAcI4Hxdj12PccABjdHA8Y7Wp57A9r2PT09CRJGhsbd1ve2NiYjRs3Puo2ixcvzmWXXbbH8q6urjQ0NAzneFCc7u7ukR4BgIOA4wGjVV9f316vO6xhs0tdXd1ul6vV6h7Ldlm4cGHmz58/eLm3tzctLS1pb2/PpEmT9sd4cNAbGBhId3d32traUl9fP9LjADBCHA8Y7Xa9m2tvDGvYNDU1JXn4zM2UKVMGl2/atGmPszi7VCqVVCqVPZbX19d7AjPqeR4AkDgeMHrV8rgf1r9jM3Xq1DQ1Ne12unT79u1ZtWpVZsyYMZy7AgAAGFTzGZsHH3wwv/rVrwYvb9iwIbfddlue+tSn5pnPfGbmzZuXzs7OTJs2LdOmTUtnZ2caGhoyZ86cYR0cAABgl5rD5tZbb82LXvSiwcu7Ph9z4YUX5pprrsmCBQuybdu2zJ07N5s3b8706dPT1dWViRMnDt/UAAAAj1Bz2MyaNSvVavUxr6+rq0tHR0c6Ojr2ZS4AAIC9NqyfsQEAABgJwgYAACiesAEAAIonbAAAgOIJGwAAoHjCBgAAKF7NX/cM7L2+vr7cfvvtNW/34Lb+rF53Zw5/2q2ZMK4ypH2fcMIJaWhoGNK2AAClETawH91+++0544wzhrz9kn3Y99q1a3P66afvwy0AAJRD2MB+dMIJJ2Tt2rU1b3fHvQ9k/pfXZelrT8nxUw4b8r4BAEYLYQP7UUNDw5DOmozZeH8q39uWE1v/IqcdfcR+mAwA4MnFlwcAAADFEzYAAEDxhA0AAFA8n7GBvfC7B7Zl89btB2x/d/7P1sF/x449cE/Tw8cfkqMOG3fA9gcAMFyEDTyB3z2wLS/+v99J/46HDvi+3/uVdQd0f5WxY3LT+2aJGwCgON6KBk9g89btIxI1I6F/x0MH9MwUAMBwETYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAABQPGEDAAAUT9gAAADFEzYAAEDxhA0AAFC8sSM9ABzs+nf+KWMO/d1Ij3HA9O/8U5LJIz0GAEBNhA08gXu2bsz4qZ8a6TEOmHu2npYz0jjSYwAA1ETYwBNoHn90tm5450iPccA0v+jokR4BAKBmwgaeQOUph+ahPx010mMcMJWnHDrSIwAA1MyXBwAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YwBM4fPwhqYwdHU+VytgxOXz8ISM9BgBAzXwrGjyBow4bl5veNyubt24/YPu8494/5r1fWZcr/s8pOX7KgftjmYePPyRHHTbugO0PAGC4CBvYC0cdNu6AvuDfsWNHkuTYp49P61EHLmwAAEo1Ot5fAwAAPKkJGwAAoHjCBgAAKJ7P2MB+1NfXl9tvv73m7e6494H09/wqP//ZuDx0/2FD2vcJJ5yQhoaGIW0LAFAaYQP70e23354zzjhjyNvPWTH0fa9duzann3760G8AAKAgwgb2oxNOOCFr166tebsHt/Xn//v2f+XlLzo7E8ZVhrxvAIDRQtjAftTQ0DCksyYDAwPZfN+mnH3Wmamvr98PkwEAPLnsty8P+PSnP52pU6fm0EMPzRlnnJHvfe97+2tXAADAKLdfwubf/u3fMm/evCxatCg//vGP84IXvCDnnntufvOb3+yP3QEAAKPcfgmbpUuX5i1veUve+ta35sQTT8yyZcvS0tKSK6+8cn/sDgAAGOWG/TM227dvz9q1a/OBD3xgt+Xt7e1ZvXr1Huv39/env79/8HJvb2+Shz9jMDAwMNzjQRF2PfY9BwBGN8cDRrtaHvvDHjb33Xdfdu7cmcbGxt2WNzY2pqenZ4/1Fy9enMsuu2yP5V1dXf4GB6Ned3f3SI8AwEHA8YDRqq+vb6/X3W/filZXV7fb5Wq1useyJFm4cGHmz58/eLm3tzctLS1pb2/PpEmT9td4cFAbGBhId3d32trafCsawCjmeMBot+vdXHtj2MPmaU97Wp7ylKfscXZm06ZNe5zFSZJKpZJKZc+/01FfX+8JzKjneQBA4njA6FXL437YvzzgkEMOyRlnnLHHKdPu7u7MmDFjuHcHAACwf96KNn/+/FxwwQU588wzc/bZZ+eqq67Kb37zm7ztbW/bH7sDAABGuf0SNn/1V3+V+++/Px/+8Idz7733prW1NV//+tdz9NFH74/dAQAAo9x++/KAuXPnZu7cufvr5gEAAAbtlz/QCQAAcCAJGwAAoHjCBgAAKJ6wAQAAiidsAACA4gkbAACgeMIGAAAonrABAACKJ2wAAIDijR3pAf5ctVpNkvT29o7wJDByBgYG0tfXl97e3tTX14/0OACMEMcDRrtdTbCrER7PQRc2W7ZsSZK0tLSM8CQAAMDBYMuWLZk8efLjrlNX3Zv8OYAeeuih3HPPPZk4cWLq6upGehwYEb29vWlpacndd9+dSZMmjfQ4AIwQxwNGu2q1mi1btqS5uTljxjz+p2gOujM2Y8aMyTOe8YyRHgMOCpMmTXIgA8DxgFHtic7U7OLLAwAAgOIJGwAAoHjCBg5ClUolH/rQh1KpVEZ6FABGkOMB7L2D7ssDAAAAauWMDQAAUDxhAwAAFE/YAAAAxRM2AABA8YQNAMBB5Jprrslhhx020mNAcYQNDLNqtZqXvvSlmT179h7XffrTn87kyZPzm9/8ZgQmA+BA2LRpUy655JI885nPTKVSSVNTU2bPnp3/+q//GunR4ElN2MAwq6ury9VXX50f/OAH+cxnPjO4fMOGDXn/+9+fT37yk3nmM585rPscGBgY1tsDYOhe85rX5Cc/+UlWrFiRX/ziF7nhhhsya9as/OEPfzhgM2zfvv2A7QsOFsIG9oOWlpZ88pOfzPve975s2LAh1Wo1b3nLW/KSl7wkZ511Vl72spdlwoQJaWxszAUXXJD77rtvcNsbb7wx55xzTg477LAcccQRecUrXpE777xz8Ppf//rXqaury5e+9KXMmjUrhx56aL7whS9k48aNOe+883L44Ydn/PjxOfnkk/P1r399JO4+wKj1wAMP5Oabb87HPvaxvOhFL8rRRx+ds846KwsXLszLX/7yJMnSpUtzyimnZPz48WlpacncuXPz4IMPPuZt3nnnnXnlK1+ZxsbGTJgwIc997nPzrW99a7d1jjnmmFx++eW56KKLMnny5Fx88cV58YtfnHe84x27rXf//fenUqnkpptuGv47DyNM2MB+cuGFF+YlL3lJ/uZv/ibLly/Pz372s3zyk5/MzJkzc9ppp+XWW2/NjTfemN///vd53eteN7jd1q1bM3/+/KxZsyb/+Z//mTFjxuTVr351Hnrood1u//3vf3/e9a535ec//3lmz56dSy+9NP39/fnud7+bdevW5WMf+1gmTJhwoO82wKg2YcKETJgwIddff336+/sfdZ0xY8bkH//xH/Ozn/0sK1asyE033ZQFCxY85m0++OCDednLXpZvfetb+fGPf5zZs2fnvPPO2+NtzR//+MfT2tqatWvX5u///u/z1re+NStXrtxtji9+8Ytpbm7Oi170ouG5w3AQqatWq9WRHgKerDZt2pTW1tbcf//9+cpXvpIf//jH+cEPfpBvfvObg+v89re/TUtLS+64444cd9xxe9zG//zP/+TII4/MunXr0traml//+teZOnVqli1blne/+92D65166ql5zWtekw996EMH5L4B8Oiuu+66XHzxxdm2bVtOP/30zJw5M3/913+dU0899VHX//KXv5y3v/3tg2fvr7nmmsybNy8PPPDAY+7j5JNPztvf/vbBMzLHHHNMnvOc5+RrX/va4Dr9/f1pbm7OlVdeOfgLtOc85zl51ate5VjBk5IzNrAfHXnkkfnbv/3bnHjiiXn1q1+dtWvX5tvf/vbgb/QmTJiQE044IUkG32525513Zs6cOXnWs56VSZMmZerUqUmyx2/mzjzzzN0uv+td78rll1+e5z//+fnQhz6Un/70pwfgHgLw517zmtfknnvuyQ033JDZs2fnO9/5Tk4//fRcc801SZJvf/vbaWtry1FHHZWJEyfmTW96U+6///5s3br1UW9v69atWbBgQU466aQcdthhmTBhQm6//fYnPC5UKpW88Y1vzOc///kkyW233Zaf/OQnueiii4b9PsPBQNjAfjZ27NiMHTs2SfLQQw/lvPPOy2233bbbzy9/+cu88IUvTJKcd955uf/++/PZz342P/jBD/KDH/wgyZ4fBB0/fvxul9/61rfmrrvuygUXXJB169blzDPPzKc+9akDcA8B+HOHHnpo2tra8g//8A9ZvXp1LrroonzoQx/Kxo0b87KXvSytra257rrrsnbt2vzTP/1Tksf+Ipi/+7u/y3XXXZePfOQj+d73vpfbbrstp5xyyhMeF5KHjw3d3d357W9/m89//vN5yUtekqOPPnr47zAcBMaO9AAwmpx++um57rrrcswxxwzGziPdf//9+fnPf57PfOYzecELXpAkufnmm/f69ltaWvK2t70tb3vb27Jw4cJ89rOfzTvf+c5hmx+AoTnppJNy/fXX59Zbb82OHTtyxRVXZMyYh3+//KUvfelxt/3e976Xiy66KK9+9auTPPyZm1//+td7td9TTjklZ555Zj772c9m5cqVfuHFk5ozNnAAXXrppfnDH/6Q17/+9fnhD3+Yu+66K11dXXnzm9+cnTt35vDDD88RRxyRq666Kr/61a9y0003Zf78+Xt12/Pmzcs3v/nNbNiwIT/60Y9y00035cQTT9zP9wiAR7r//vvz4he/OF/4whfy05/+NBs2bMiXv/zlLFmyJK985Stz7LHHZseOHfnUpz6Vu+66K//6r/+af/7nf37c23z2s5+dr371q4NvJZszZ84eXyjzeN761rfmox/9aHbu3DkYR/BkJGzgAGpubs73v//97Ny5M7Nnz05ra2ve/e53Z/LkyRkzZkzGjBmTa6+9NmvXrk1ra2ve85735OMf//he3fbOnTtz6aWX5sQTT8xf/uVf5vjjj8+nP/3p/XyPAHikCRMmZPr06fnEJz6RF77whWltbc3f//3f5+KLL87y5ctz2mmnZenSpfnYxz6W1tbWfPGLX8zixYsf9zY/8YlP5PDDD8+MGTNy3nnnZfbs2Tn99NP3eqbXv/71GTt2bObMmZNDDz10X+8iHLR8KxoAwJPY3XffnWOOOSZr1qypKYigNMIGAOBJaGBgIPfee28+8IEPZOPGjfn+978/0iPBfuWtaAAAT0Lf//73c/TRR2ft2rVP+DkeeDJwxgYAACieMzYAAEDxhA0AAFA8YQMAABRP2AAAAMUTNgAAQPGEDQAAUDxhAwAAFE/YAAAAxfv/AatIqHLkZcOsAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt #Not the correct answer \n", + "\n", + "plt.figure(figsize =(10, 7))\n", + "data.boxplot(patch_artist=bool)" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "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", + "
YearsSalary
count9.0000009.000000
mean4.11111148.888889
std2.80376716.541194
min1.00000030.000000
25%2.00000035.000000
50%3.00000055.000000
75%7.00000060.000000
max8.00000070.000000
\n", + "
" + ], + "text/plain": [ + " Years Salary\n", + "count 9.000000 9.000000\n", + "mean 4.111111 48.888889\n", + "std 2.803767 16.541194\n", + "min 1.000000 30.000000\n", + "25% 2.000000 35.000000\n", + "50% 3.000000 55.000000\n", + "75% 7.000000 60.000000\n", + "max 8.000000 70.000000" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.describe()" ] }, { @@ -484,11 +1544,95 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# your code here" + "execution_count": 99, + "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", + "
Salary
Department
HR40
IT40
Sales0
\n", + "
" + ], + "text/plain": [ + " Salary\n", + "Department \n", + "HR 40\n", + "IT 40\n", + "Sales 0" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = data.groupby('Department').agg({'Salary': lambda x: x.max() - x.min()})\n", + "result " + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Department\n", + "HR 40\n", + "IT 40\n", + "Sales 0\n", + "Name: Salary, dtype: int64" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = data.groupby('Department')['Salary'].apply(lambda x: x.max()- x.min())\n", + "result" ] }, { @@ -799,7 +1943,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.2" + "version": "3.10.11" } }, "nbformat": 4,