{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# **PARTE 3: Projeto 2 (Censo Americano)**" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "# importa as bibliotecas\n", "import pandas as pd\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Primeiro, é necessário carregar o dataset. Para baixar o dataset e mais informações, acesse: http://archive.ics.uci.edu/ml/datasets/Adult\n", "\n", "Este dataset contém informações do Censo Americano e o objetivo dele é predizer se uma determinada pessoa tem ganho maior que 50K em um ano. Essa predição é baseada nas informações sociais coletadas no Censo. Essa situação poderia ser utilizada para obter um empréstimo ou não (se ganha mais de 50K libera o empréstimo). " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "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", "
ageworkclassfnlwgteducationeducation-nummarital-statusoccupationrelationshipracesexcapital-gaincapital-losshours-per-weeknative-countrytarget
039State-gov77516Bachelors13Never-marriedAdm-clericalNot-in-familyWhiteMale2174040United-States<=50K
150Self-emp-not-inc83311Bachelors13Married-civ-spouseExec-managerialHusbandWhiteMale0013United-States<=50K
238Private215646HS-grad9DivorcedHandlers-cleanersNot-in-familyWhiteMale0040United-States<=50K
353Private23472111th7Married-civ-spouseHandlers-cleanersHusbandBlackMale0040United-States<=50K
428Private338409Bachelors13Married-civ-spouseProf-specialtyWifeBlackFemale0040Cuba<=50K
\n", "
" ], "text/plain": [ " age workclass fnlwgt education education-num \\\n", "0 39 State-gov 77516 Bachelors 13 \n", "1 50 Self-emp-not-inc 83311 Bachelors 13 \n", "2 38 Private 215646 HS-grad 9 \n", "3 53 Private 234721 11th 7 \n", "4 28 Private 338409 Bachelors 13 \n", "\n", " marital-status occupation relationship race sex \\\n", "0 Never-married Adm-clerical Not-in-family White Male \n", "1 Married-civ-spouse Exec-managerial Husband White Male \n", "2 Divorced Handlers-cleaners Not-in-family White Male \n", "3 Married-civ-spouse Handlers-cleaners Husband Black Male \n", "4 Married-civ-spouse Prof-specialty Wife Black Female \n", "\n", " capital-gain capital-loss hours-per-week native-country target \n", "0 2174 0 40 United-States <=50K \n", "1 0 0 13 United-States <=50K \n", "2 0 0 40 United-States <=50K \n", "3 0 0 40 United-States <=50K \n", "4 0 0 40 Cuba <=50K " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# importa o data set\n", "\n", "# para baixar o dataset, acesse: \n", "# Observação 1: Este dataset já é dividido em treino e teste previamente. Porém, vou usar somente o conjunto de \n", "# teste como sendo o dataset original, pois a maioria dos datasets não são previamentes divididos em conjuntos\n", "# de teste e conjunto de treino (isso é feito no processo de Aprendizado de Máquina)\n", "\n", "# do site eu recuperei o nome de cada coluna do data set\n", "columns = ['age', 'workclass', 'fnlwgt', 'education', 'education-num', 'marital-status', 'occupation', \n", " 'relationship', 'race', 'sex', 'capital-gain', 'capital-loss', 'hours-per-week', 'native-country', \n", " 'target']\n", "\n", "# abro o dataset e nomeio cada coluna com meu vetor columns\n", "data = pd.read_csv('C:/Users/Mariana/Dropbox (Pessoal)/2º sem 2020/SME0123/Codigos/adult.data', names=columns)\n", "\n", "# Fazendo a mesma coisa do Google Colab\n", "# from google.colab import drive\n", "# drive.mount('/content/drive')\n", "# data = pd.read_csv('/content/drive/My Drive/EABDA 2020/adult.data', names=columns)\n", "\n", "# elimina os espaços no começo e no fim das strings\n", "data = data.applymap(lambda x: x.strip() if isinstance(x, str) else x)\n", "\n", "# visualiza a tabela, o método head() mostra as 5 primeiras linhas da tabela\n", "# note que a coluna 'target' é a variável dependente ou resposta (classe).\n", "# o restante das colunas são as variáveis explicativas ou independentes ou preditoras (features, atributos), e cada linha é um indivíduo (instância ou exemplo).\n", "data.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(32561, 15)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# mostra o número de linhas (unidades amostrais) e colunas (variáveis)\n", "data.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Geralmente, os datasets vem com dados faltantes, no caso deste dataset os dados faltantes é simbolizado pelo caractere '?'. Existem diversas estratégias para trabalhar com dados faltantes. Algumas metodologias podem lidar com \"missings\" sem nenhum problema, mas outras necessitam de dados completos. Nesses casos, pode-se imputar dados. Há formas sofisticadas e simples de imputação, sendo uma delas a substituição pelo valor médio. Porém, no nosso caso, por questões didáticas e de simplificação, vou excluir todos os dados faltantes da nossa base de dados. " ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Execute: preprocessing_remove_rows\n", "---Removed 0 rows in the table\n" ] } ], "source": [ "# elimina as linhas com dados faltantes\n", "# data = pd.DataFrame\n", "# null_symbol = caractere que simboliza que há dados faltantes\n", "def remove_rows(data, null_symbol=np.nan):\n", " # salva o total de exemplos\n", " total = len(data)\n", " # substitui o null_symbol por nulo\n", " data = data.replace(null_symbol, np.nan)\n", " # elimina as linhas que contém algum valor nulo\n", " data.dropna(inplace=True)\n", " print('Execute: preprocessing_remove_rows\\n---Removed %d rows in the table' % (total - len(data)))\n", " return data\n", "\n", "data = remove_rows(data, '?')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(30162, 15)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# o tamanho atualizado do conjunto de dados\n", "data.shape" ] }, { "cell_type": "code", "execution_count": 35, "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", "
age
countminmaxmedianmeanstd
sex
Female978217903536.88345913.532427
Male2038017903839.18400412.873243
\n", "
" ], "text/plain": [ " age \n", " count min max median mean std\n", "sex \n", "Female 9782 17 90 35 36.883459 13.532427\n", "Male 20380 17 90 38 39.184004 12.873243" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataF = data.loc[data.sex=='Female', \"age\"]\n", "dataM = data.loc[data.sex=='Male', \"age\"]\n", "\n", "data.groupby('sex').agg({'age': ['count',min, max, 'median','mean', 'std']})" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Ttest_indResult(statistic=-14.039122252627893, pvalue=1.5227465818368628e-44)" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy import stats\n", "\n", "# Teste t de Student (bicaudal) para média de duas populações Normais com variâncias iguais\n", "stats.ttest_ind(dataF,dataM, equal_var = False)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LeveneResult(statistic=43.976656455846715, pvalue=3.3792425846568063e-11)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Teste de Levene para igualdade de variâncias\n", "stats.levene(dataF,dataM)\n", "\n", "#stats.bartlett(dataF,dataM)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Ttest_indResult(statistic=-2.8989252152629614, pvalue=0.0037942674534447514)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Selecione uma amostra de 95% e outra de 0,5% e repare como o resultado do teste muda\n", "sampleF=dataF.sample(frac=0.09)\n", "sampleM=dataM.sample(frac=0.09)\n", "\n", "# Teste t de Student (bicaudal) para média de duas populações Normais com variâncias iguais\n", "stats.ttest_ind(sampleF,sampleM, equal_var = False)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEWCAYAAABhffzLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3hUZfbA8e9JCCWiAgERVBIpiqwKSuwVy0pZwI4YEQuGRUFcV4pGURFU1HVXRWUjFpQIlp8KKtgF7BqKokiTJsLSUakhyfn98d6BSTKTTJKZzCRzPs8zz8y9d+bec6OceeetoqoYY4yJHwnRDsAYY0zVssRvjDFxxhK/McbEGUv8xhgTZyzxG2NMnLHEb4wxccYSv6mxROQeEZlYwc9eIyKfl3J8uoj0DfReEdkmIi0rct1yxjhDRPpF+jqm5rHEb2KKiKwQkZ1e8lwnIs+LSP1ox1WcqnZR1QlBjtVX1WUAIvKCiIyq6HXC8fcQkTQRURGpVdE4TM1iid/Eou6qWh84HjgBuLP4G8SJl/9/y/x7GFMe8fIPx1RDqvobMB04GvZWbYwWkS+AHUBLEWkuIlNFZLOILBWRG4qdpq6IvCIif4rIHBFp7zsgIsNF5Bfv2AIRuajYZ0VEnhCR30VkoYic63cgaDWLV7puLSKZQAYw1Cuxvy0iQ0Tk/4q9/wkR+U95/x7FzpEgIneKyEoRWS8iL4rIgd7hWd7zVi+OU8q6lqnZLPGbmCUihwFdgbl+u/sAmcD+wEpgErAaaA5cCtzvn6CBnsBrQCPgZeAtEUnyjv0CnAEcCNwLTBSRZn6fPQlYBjQG7gbeEJFGocavqtlADvCQV/3THZgIdBaRBt491gJ6AS+Vdb4gfw+fa7xHJ6AlUB8Y6x0703tu4MXxVaj3YGomS/wmFr0lIluBz4GZwP1+x15Q1Z9UNR84GDgdGKaqu1R1HjAe9+XgM1tVX1fVPcCjQF3gZABVfU1V16hqoaq+AiwBTvT77HrgP6q6xzu+COhWmRtT1bW4Evhl3q7OwEZVnV3Kx0r7e/hkAI+q6jJV3QbcDlxh9fomEPufwsSiC1X1oyDHfvV73RzYrKp/+u1bCaQHer+qFoqI79cBInI1cCuQ5r2lPq507/ObFp3FcKXvs5U0ARgAPANcRdml/dL+Hj7NcfH5rMT9+25a0SBNzWUlflPd+CfiNUAjEdnfb18L4De/7cN8L7zG4EOBNSKSiku8A4EUVW0A/AiI32cPERH/7RbeNSsar89bwLEicjTwN1x1UGWtAVL9tlsA+cC6IDGYOGaJ31Rbqvor8CXwgIjUFZFjgespmkg7isjFXpXHLcBu4GtgP1xC3AAgItdSstH0IOBmEUkSkcuAo4Bp5QxzHa7O3T/uXcDruDaHb1V1VTnPGcgk4B8icrjX3fN+4BWvSmwDUFg8DhO/LPGb6q43rqpmDfAmcLeqfuh3fAqu8XQLru7/Yq/OfgHwL+ArXHI+Bvii2Lm/AdoAG4HRwKWquqmc8T0LtBORrSLylt/+Cd41y2zUDdFz3rlmAcuBXcAgAFXdgYv/Cy+Ok8N0TVNNiS3EYkzVE5EWwELgYFX9I9rxmPhiJX5jqpjX1nArMNmSvokG69VjTBUSkf1wVUsrcV05jalyVtVjjDFxxqp6jDEmzlSLqp7GjRtrWlpatMMwxphqZfbs2RtVtUnx/dUi8aelpZGbmxvtMIwxploRkZWB9ltVjzHGxBlL/MYYE2cs8RtjTJyxxG+MMXHGEr8xxsSZiCZ+EfmHiPwkIj+KyCRvBsXDReQbEVniLYlXO5IxGGNMdZOTA2lpkJDgnnPCMXG3n4glfhE5BLgZSFfVo4FE4ApgDPBvVW2DmzHx+kjFYIwx1U1ODmRmwsqVoOqeMzPDm/wjXdVTC6jnzYWeDKwFzsHNRQ5uatoLIxyDMcZUG1lZsGNH0X07drj94RKxxK+qvwGPAKtwCf93YDaw1VscAtwi2YcE+ryIZIpIrojkbtiwIVJhGmNMTFkVZFmeYPsrIpJVPQ2BnsDhuPVA9wO6BHhrwFniVDVbVdNVNb1JkxIjjo0xpkZq0aJ8+ysiklU95wHLVXWDqu4B3gBOBRp4VT/grX8awRiMMaZaGT0akpOL7ktOdvvDJZKJfxVwsogkewtWnwssAD4FLvXe0xe3NJ4xxhggIwOysyE1FUTcc3a22x8uEZ2PX0Tuxa13mg/MBfrh6vQnA428fVep6u7SzpOenq42SZsxxpSPiMxW1fTi+yM6O6eq3g3cXWz3MuDESF7XGGNMcDZy1xhj4owlfmOMiTOW+I0xJs5Y4jfGmDhjid8YY+KMJX5jjIkzlviNMSbOWOI3xpg4Y4nfGGPijCV+Y4yJM5b4jTEmzljiN8aYOGOJ3xhj4owlfmOMiTOW+I0xJs5Y4jfGmDhjid8YY+KMJX5jjIkzEUv8InKkiMzze/whIreISCMR+VBElnjPDSMVgzHGmJIilvhVdZGqdlDVDkBHYAfwJjAc+FhV2wAfe9vGGGOqSFVV9ZwL/KKqK4GewARv/wTgwiqKwRhjDFWX+K8AJnmvm6rqWgDv+aBAHxCRTBHJFZHcDRs2VFGYxhhT80U88YtIbaAH8Fp5Pqeq2aqarqrpTZo0iUxwxhgTh6qixN8FmKOq67ztdSLSDMB7Xl8FMRhjjPFUReLvzb5qHoCpQF/vdV9gShXEYIwx1c/ixRE5bUQTv4gkA+cDb/jtfhA4X0SWeMcejGQMxhhT7Xz/PXTrBm3bwg8/hP30tcJ+Rj+qugNIKbZvE66XjzHGGH9Ll8KIETBpEjRoAA8+CK1bh/0yEU38xhhjQrBmDdx3H4wfD7Vrw+23w5Ah0DAy41st8RtjTLRs2QJjxsDjj8OePdC/P9x5Jxx8cEQva3P1GGNMmOXkQLsW20hIgLQ0t13E9u3wwAPQsiU89BBccgksWgRjx0Y86YMlfmOMCauXXyrgm2vH8dmvqZypM1i5EjIzveSflwdPPeXq7e+4A04/HebNg5decl8CVcQSvzHGhMtXX3FMvxN5fM8A5nMM672JCXbuKOTbwTlw1FFw003Qpg18/jm8/TYce2yVh2mJ3xhjKmv9erjuOjj1VBrmraMXk+nEp/zMUXTlXeZyHI9tugr23x+mTYOZM+G006IWriV+Y4ypqPx81zB7xBEwcSIMG8ZfD1vIq/TidD7nM87gXf7GfmxnUONJMGcOdOkCIlEN2xK/McZUxKxZcPzxMHgwnHQSzJ8PDz7Iw3//hekJ3fiMM2nJMvozjo71fubk/1wBCbGRcmMjCmOMqS7WrIGMDDjrLPjjD3jjDXjvPUhMhCuvpFtWBzrV+4oHGoyhDUt5P7U/Tz2TREZGtAPfx/rxG2NMKPLyXLXOvfe6PvcjRsCwYbB1K9x4477BV3fcQZ0hQ7i9QQNuj3bMQViJ3xhjyvLRR9C+vRtN26kT/PQT3HILjBwJrVtT+Mx4XqybSfMdS0nLGU3Ouw2iHXGpLPEbY0wwq1bBpZfC+ee7Uv4777h5dF59de/gq+XHX8IxSYvou+1J1tKsaL/9GGWJ3xhjitu1C0aPdrNjTpsGo0a5HjkrV5YYfNVp9Uss2FV08NWOHZCVFaXYQ2CJ3xgTl3Jy3HQKJaZVePddclJvJ+3ODBJ2buPwhlv54rc0OO64gIOvVq0KfP5g+2OBNe4aY+JOTo6rjtmxw22vXAn391vGWf+6hZlz65Mpz7KDunTjXe5fcwfHPj2fzS3a02jaNOjcuUg//BYt3OeLa9Giim6mAqzEb4yJO1lZ+5J+PXZwD3cze1c7Gsz7lKwGT3O85vIZZ/AO3UlmB715mY4EHnw1ejQkJxc9f3Ky2x+rrMRvjIk7rhpGuZC3+Df/II2V5HAlE7QvT269km5MYw3N+DtP8yzXk08S8mvgc/n652dlufO2aOGSfiz12y/OSvzGmLhzdrNFvEdn3uRi/mR/rmQigvIBF3B6wpcM40Fas5T/8nfySQJKr7rJyIAVK6Cw0D3HctKHyK+520BEXheRhSLys4icIiKNRORDEVniPUdmiRljTFwI1EgbtOF22zZyuk/mlzV16cJ0jmAhX3IqE7iGC3mLH7vfzgdPL2Ns8jB2sq/+JtarbspNVSP2ACYA/bzXtYEGwEPAcG/fcGBMWefp2LGjGmNMcRMnqiYnq8K+R1KSau3aRfclJxfqxIFf6sQGN2ky27QBm/UBhul26mketXR8nRv19SfWFDlvaqqqiHueODFqt1gpQK4GyKnijoWfiBwAfA+0VL+LiMgi4GxVXSsizYAZqnpkaedKT0/X3NzciMRpjKm+0tIC96gJJJUV1KuVz4X5rzGMMRzAH7zMldzNvRSktmLFikhGGh0iMltV04vvj2RVT0tgA/C8iMwVkfEish/QVFXXAnjPBwUJOFNEckUkd8OGDREM0xgTDUGrY4Icv/HGku8PNeknkUc33uXT/NN5gDv4jDPowDz6MJFltIrpPvcREehnQDgeQDqQD5zkbT8G3AdsLfa+LWWdy6p6jKlZAlXRJCfvq1IJdLz4Iykp2LHCva+FAr2SibqUlqqgX9c5Q0/l8xKfSU2N6p8jYghS1RPJEv9qYLWqfuNtvw4cD6zzqnjwntdHMAZjTAzy70fvs2MH9O3rSvR9+5Y8XtyePYH3H8DvJLONbrzDXI4jh6vYLvvz6ZBpLB0/k3nJRVe+qnENtyGIWOJX1f8Bv4qIr/7+XGABMBXo6+3rC0yJVAzGmNgUrGqloMCVwQsKKn7u9nzP8qan8A7d9658NX/CHDo91IWMq4TsbEhNdeOwUlMhOzv2u1+GW8QadwFEpAMwHtejZxlwLe7L5lWgBbAKuExVN5d2HmvcNaZmKU+jbKjaM4/RZNGNadCsGdx9t1sHNykpvBeqRoI17kZ05K6qzsPV9Rd3biSva4yJbaNHF50rpyKSahUiBfkcpqsYyQiuZBKbacjcK8Zw3LMDS86jYPayKRuMMVWu+DQHCQmhVe8kJkJhodJiv808uq0fRyct5vA9i8mjNmMPuIODHh7C5ZmxvQhKLLApG4wxUeE/zcGECWUX0JOTlQl9PqTwgIas2N6Ei2u9wxG6mKQbM9lvzVIG/j7akn6IypX4RaShiBwbqWCMMTWbf9/8xo3dIyHBlfz79i3a6DpggN9201082+g2Ml74K2zf7k52xRWwaBE8+aSr0zchK7OqR0RmAD28984DNojITFW9NcKxGWNqkOJz4G/atO/YypWu1F+ih826dXDbbTBxovuGADc18ujRcMwxVRZ7TRNKif9AVf0DuBh4XlU7AudFNixjTE3gX8Ivq29+keUK9+yBRx+Fww93SR/g5JPdyldTp1rSr6RQGndreQOtLgdieBVJY0wsKV7CD6XxdtUq4NNP4Zpr9nX2P+oo+Ne/Sqx8ZSoulMQ/Engf+EJVvxORlsCSyIZljKnuAo3OLcsltd+Gc3q4jWbNXMLv1WtfNY8JizITv6q+Brzmt70MuCSSQRljqr/yTHzWnnmMYRgX7P4A9t8f7r8f+veP68FXkVTm16iIHCEiH4vIj972sSJyZ+RDM8ZUZ8FWrEpMdDU2KSmQXn8BL3MF8ziOsxM/g6FD4X//g4EDLelHUCi/n54Bbgf2AKjqD8AVkQzKGFP9BVuEfMIEKPz6WzYe0JLvtv2F3vIqXH45dTaugTFjbMRtFQgl8Ser6rfF9uVHIhhjTPXn68nTpw/Uq+dK9r6++S+M+R8Z486Ak06C5cvd87Jl8Mor0MAGX1WVUBp3N4pIK0ABRORSYG1EozLGVEuB+uonJ8PLz2znipkDYHCOG6rbooXrpnnGGdENOE6FkvhvArKBtiLyG7AcuCqiURljqqXiPXmSyOOaHc9wbr97gQ1Qv77rn3/DDVGL0YRQ1aOqy1T1PKAJ0FZVT1fVFRGPzBgTkwJNuyDitn1TLSdQQAYTWUhbnmQgP9OWF/a/iUljN1nSjwGhTNkwotg2AKo6MkIxGWNiVGnTLrilPZS/8Q6jyeJY5jOXDnRmOh9yLoV/JpF8IxTWir+FT2JNKI272/0eBUAXIC2CMRljYkTxBc8HDw4+KOt0PuNzTudtelCPnVzBJDoym/fpTCGua2aRaRlM1IQygOtf/tsi8ghu+URjTA1WvHQfbMWsY/me+7mDbkzjN5qTyX95nmvJJ3A//PIM7DKRUZFx0MlAy3AHYoyJLWVNudCKpbxMb76nA6fwFUN4iNYs5RkygyZ9CD6wy1SdUOr45+N15QQScY28IdXvi8gK4E9cFVG+qqaLSCPgFVx10QrgclXdUt7AjTGRk5MTvITfjDWMYCTX8yx51GY0d/AwQ/idov3wa9Vyjb579uzbl5zsBnaZ6AqlO+ff/F7nA+tUtTwDuDqp6ka/7eHAx6r6oIgM97aHleN8xpgI8lXxFNeQzQxjDIN4giT2kE0m93EX6zgYUER8Dbxu0NZjj7nXvuUVW7RwSd8adqMvaOL3SubgSuz+DhARVHVzBa/ZEzjbez0BmIElfmNiRvEqnmS2M5jHGMpDHMAf5JDB3dzLcq/GNzkZsrMlaEK3RB97Sivxz8ZV8QSaAFsJrZ5fgQ9ERIH/qmo20FRV1wKo6loROSjQB0UkE8gEaGGVgsZERE6OS/QrV7qeO4WF+44lkccNPMNd3MfBrGMq3bmTUcyn6OqrJVbNMjEvaOJX1cPDcP7TVHWNl9w/FJGFoX7Q+5LIBkhPT9cy3m6MKafivXZ8ST+BAnoziXu5m1YsYyZncjFv8BWnljhHaqol/eoolDp+RKQh0Aao69unqrPK+pyqrvGe14vIm8CJwDoRaeaV9psB6ysUuTGmXPxL94mJgVbEKjn4qgvTeI/OBPrhbw211Vco8/H3A2bhVuG613u+J4TP7Sci+/teA38FfsSNAejrva0vMKUigRtjQucr3ft66hRP+mcwK+Dgq/fosvc9KSlFZ9q0Kp7qK5QS/2DgBOBrVe0kIm1xXwBlaQq86U3xUAt4WVXfE5HvgFdF5HpgFXBZxUI3xoQqWJ/89szjfu6gK9NZQzP6M47nuK5IP/zUVGHFiqqL1UReKIl/l6ruEhFEpI6qLhSRI8v6kLdEY/sA+zcB51YgVmNMBRXvk9+aJYxkBL2ZzGYaMoSHGMtAdlGvyPtq17bqnJoolMS/WkQaAG/hGmi3AGsiG5YxJlxuvHHfa9/gq36MZzd1GEUWj3Abv3MgCRTi35HP1xffqnNqnlDm6rnIe3mPiHwKHAi8F9GojDFhk529b/DVzTxOLfIZx98ZxZ2s42DqsYMT+Jaf6p1I9jPB++ObmiNo466IvCsiGV7DLACqOlNVp6pqXtWEZ4wJpvjMmTfeWHKe/P1kO0MKHmAZLRnCw7zOpRzJIgYxlnU0paFsoYAE1qeeZEk/jpRW4s/GLar+HxH5BJgETLOkb0z0BZo58+mn9x3/Y1Me/RjPCEbuHXyVxWh+5Ji976mTmM/m/IZVHLmJBUFL/Ko6RVV7Ay2AN3BdL1eJyHMicn5VBWiMcfxL+H37Bu6l47/y1VPcxCKO5FS+oCdTiyR9UK7LDD6DpqnZQll6caeqvuLV9f8VOA6r4zemSvn3w1cNPPiqG+8wl+OYSB9+50A6M52zmRFwxO2AAcJTT1VJ6CYGhTKAq6mIDBKRL3A9ez4AOkY8MmPMXqXNje8bfPUO3anHTnoxee/KV4FG3KamYkk/zpU2O+cNQG/gSFxVz1BV/aKqAjPG7BNo1Sr/wVf7Vr66xht8FWhuRZtmwTilNe6eCjwIfKSqhaW8zxgTYY0a7VvYvBVLuY+7yhx8VVxiok2zYJzSZue8tioDMcaULtSVrwJxc+Zb0jdORdbcNcZUkZwcaH/YZoZsGsZSWnMdz/Ff+tOKX7iT0SElfbCkb4oKaVpmY0zVm/zsdhYPeIyZe/atfDWCkaygfEtl2Jz5prhQll4MqBJLLxpjSjFpQh5zb3qGW7ffxxWsYwo9uJNRxfrhh8Yac00goS692ALY4r1ugJtOORwrdBljfAoK+GLgJE4aN4LeLC915Ssf/wXOfUsn+hZZSU21xc1NYGUuvSgi44CpqjrN2+4CnFc14RkTB1ThnXcgK4vT5pe98pVPaio2T76pkFAad0/wJX0AVZ0OnBW5kIyJI7NmseHI06FHD5bM3zf4yq18FTzpWxWOqYxQEv9GEblTRNJEJFVEsoBNkQ7MmBpt3jzo2hXOOos9S1fQn3G0YwGv0gst459lSor10jGVE0ri7w00Ad70Hk28fcaY8lq6FHr3huOOg6+/5oEGY2itS8imf5HlDktTv74lfVM5oSzEshkYLCL1VXVbeS8gIolALvCbqv5NRA4HJgONgDlAH5vq2dRUOTlunp28lUUHX/2bLB7ZclvI/fD9BZq+wZjyCGWStlNFZAGwwNtuLyLlmeJpMPCz3/YY4N+q2gbXU+j6cpzLmGojJweG3bCZASuH8Qutigy+uotRFUr6AC1ahDlQE3dCqer5N3ABXr2+qn4PnBnKyUXkUKAbMN7bFuAc4HXvLROAC8sXsjHVwPbt/Dbwfn7cGWjlq4MrfFpr1DXhENKUDar6a7FdJWYDD+I/wFDAN8lbCrBVVfO97dXAIYE+KCKZIpIrIrkbNmwI8XLGRNekCXkMqf8U/6vfiqFbs5jJWbTne67mpXKPuAXXkJuS4vrrp6Zao64Jj1CmbPhVRE4FVERqAzdTtOomIBH5G7BeVWeLyNm+3QHeqoE+r6rZuOUfSU9PD/geY2JGBQZflcb66JtICqXE/3fgJlzJfDXQwdsuy2lADxFZgWvMPQf3C6CBiPi+cA4F1pQzZmOiyrcEoggkiNJd3mZ+rQ6cNs6tfNWFaUFXvgpFUpJV55jIKjXxez1y+qhqhqo2VdWDVPUqVS2zH7+q3q6qh6pqGm7R9k9UNQP4FLjUe1tfYErlbsGYquO/BOIZzOIzTudtelCXXSEOvir9x2tKCjz/vFXnmMgqNfGragHQM8zXHAbcKiJLcXX+z4b5/MZETFYWtNkxj3fpyizOIo3yDb4CITXVzdIQ6LFxoyV9E3mh1PF/ISJjgVeA7b6dqjon1Iuo6gxghvd6GXBiuaI0JspycuCZoUt4YM2IvStfDWUMTzCozJWv/Fk1jokFoSR+X0XlSL99iquzN6bGe2PsGnb+YyQf5Y9nN3UYRRaPEMrgK9/ktk5KCjz2mJXoTfSFMnK3U1UEYkzM2bwZxoyhy8NPkKj5PM0ARpNVjn74LulbDx0Ta0IZudtURJ4VkenedjsRsdG2pubavh3uv5+8w1pS+NDDvK6XcCSLuJkngiR99XuUZFMsmFgTSnfOF4D3gebe9mLglkgFZEzU5OXBk09Cq1aQlcUHu0MbfJV64O/ozt2kpgbuyWNTLJhYE0rib6yqr+KNvvVG3YY6cteY2FdQABMn8uehbWHgQGauO5JT+YLuBVPKXO4wuV4hXa9sQFrbuqxc6fr2FzluUyyYGBRK4+52EUnB+x0rIicDv0c0KmOqgt/KV8yfzy90YDjTeZ8LKG0RFO/DpKYKXbsmMGEC7Nix75S+5RBt6UMTq0JJ/LcCU4FWIvIFbj7+S0v/iDExbtYsuP12+PJLaN2aQY0n8eTGy0Poh++kpgorVrgRvL6k7+NL+taga2JVmf+Xe/31z8J16+wP/EVVf4h0YMaEQ04ONG7sSuEi0DFhLtOlC5x1Fr99uYJM/kvS0gWM3XhFyEkf3ECrxo3dCN5ArEHXxLKgJX4RuTjIoSNEBFV9I0IxGRMWOTlw7bWwZw+0ZgkjGUFvdYOvhvAQYxlYrsFX/rZvd49grEHXxLLSqnq6e88H4Ur7n3jbnXCjcC3xm5iWlQVN9vy2d+Wr8g2+qjhr0DWxLuhvW1W9VlWvxTXqtlPVS1T1EuAvVRadMRWQkwOtG7mVr5bSmmt5nnH8vZwrX1VsJnCbM99UB6E07qap6lq/7XXAERGKx5hKmfzsdhZmPkZu4UMcwB/kkMHd3MtyWpbzTGX16inJGnRNdRFK4p8hIu8Dk3DFoCtwUysbEzvy8vgu8xnOnnAfV7COqXQni9Fl9sMPF6veMdVJKHP1DBSRi9i3zm62qr4Z2bCMCVFBAUyaxJ+3juCEDaGsfOWqcITCYr14yi7hp6S4582boVGjfa9btLD++qZ6KTXxewuxvK+q5wGW7E3sKDb4alVSB/5ZxuCrJPL4mHM5g8/5lhO4iSfJ5YSQLmfVOKYmCWUhlh0icmAVxWNM2WbNgtNPhx49+GPDLvrVn8wxe2bzPp0JlvQTyedZrqUtC7me8ZzM1yEnfavGMTVNKHX8u4D5IvIhRRdiuTliURkTyNy5roQ/fTo0b8431/2XTi9ey878pFI+pKTIZv6tN/M7DTmSRWyhUZF3pKZC164wbZobeGXVOKamCyXxv+s9jImOJUvgrrvglVegYUMYMwYGDaLXUfXYmR/8Y8kJO8kuvJ6MU1YyretY/n7/cUWmV0hOtq6XJj6FkvhfAVrjWsV+UdVdoZxYROoCs4A63nVeV9W7ReRwYDLQCJiDW8w9ryLBmxrut9/gvvtg/HioUwfuuAOGDIEGDcjJCT5dgqNk17+Vw6/sQtq0q1h1l9CoEdSrZyV5Y0qbsqEWcD9wHbAS1x5wqIg8D2Sp6p4yzr0bOEdVt4lIEvC5t5jLrcC/VXWyiIwDrgeeDsO9mJrCW/mKxx93vXYGDHBVPAe7RVByciAzs/RTpO6/hVqPjOH8Ww7YW8rftMmV8l96yRK+iW+lNe4+jCuVH66qHVX1OKAV0AB4pKwTq7PN20zyHr61el/39k8ALqxg7KaGmfzsdh5qeD9bU9zKVy/uuozWBYuQsU+Q0PzgvROtXXVVyRkx/dVOKmT0040YNvqAEu/bscN9hxgTz0pL/H8DblDVP307VPUPYADQNZSTi0iiiMwD1gMfAr8AW73FXABWA4cE+WymiOSKSO6GDRtCuZyprvLy+O6aJ+nUrxVDt2Yxk7M4lh/oy4v8UuhWvtKQZlBQUlKU555PICMj+AyZNnOmiXel1fGrasl/bqpaICKh/TN03UE7iEgD3DiAowK9Lchns4FsgGrBJ7YAABY3SURBVPT09IpNnGJimzf4ihEjOGG5G3x1IW/yNadU6HS+OfJ9WrQI3A5gM2eaeFdaiX+BiFxdfKeIXAUsLM9FVHUrbkbPk4EGXvsBwKHAmvKcy1R/OROV6w96m/m1OkCfPsxZ3oDOTOdsZlQ46Qfqaz96tNtf1vuMiTellfhvAt4QkeuA2biS+QlAPeCisk4sIk2APaq6VUTqAecBY3Dz/FyK69nTF5hSqTsw1cqHd86k1QO3k1H4FYtpQy8m8xqXlWsRlOISEwN3y/RtZ2W56h3ryWOMIwFqc4q+QeQc3FTMAvykqh+HdGKRY3GNt4m4XxavqupIEWnJvu6cc4GrVHV3aedKT0/X3NzcUC5rYtW8ea475vTp/EZz7uVunuda8ilt8FXZrC++McGJyGxVTS9xQFVj/tGxY0c11cPEiaqpqaqgmpio2prF+n+1r1AF3URDvY2HtC471DXXlvUo1ET2KBSoUKBQqKCakOCOp6a66wW6vkjg48bEEyBXA+TUUAZwGRMSX//6HTugOb9xV8F99GM8u/PKv/JVar31rNjZFFq1gsceg27dynV9cA27vv7+9ovAmH0qXrFq4l5ODqSlQUKCW3j86quhzo7NjGEoS2nNdTzH0wwo58pXkMx2RucPdRXyP/4I3bqVuFbjxu51WhrceKN7DtS/3/rtG1NSmXX8scDq+GNP8dL1fmxjMI8xhIf3rnw1gpGs4PCQzpeYUEhBoZDKSkafOIWM1y7a2++y+LXKSwQKCyv2WWOqs2B1/FbiNxWSleUScRJ53MRYltKa0dzJLM6kPd9zNS+FlPRTm+9Bu/cgvzARbduOFR8uJeObwUU62/uuVVHWb9+Yoizxm5AUr2r5dWUBV/ESiziSsQxiIW05hS/pydSQlztMTspj9Lp+8Omn8PDD8P33cN55Jd5XmZG21m/fmJIs8Zsy+apaVq50vcBO3TSVeXTgJa5mCw3pzHQ68WnQwVcpKfuWLUxMVEBJTVxN9p5ryOiVD4sWwW23Qe3aAT9f0RJ7aqp19TQmEEv8pky+qpYzmckXnMZUelKXXfRiMunkBlz5KjkZJk50nTI3bnQPXbiI/HM7oySwol1XMmb+3X2rNG9e6vUDjcAtje/aK1ZY0jcmEEv8pohAvWcarZzDdDozk7NJZSU3kE07FvAqvYqMuE1JcQ2pJUra27bB8OFwzDHw9deue+acOXDmmSHFkZUFffu684rs+wXhu9aAAfuOWSnfmBAE6twfaw8bwFU1Jk5UTU7eN4CqNYt1Er1CGnyVmhrghIWFqpMmqR5yiHtT376q//tfueMAt22DsYwpH4IM4LISv9nLV6XTnN8YR39+5ii68zajyKIly3iEIeyiXonPBWxA/eknOOcc6N0bmjaFL7+EF15wr0OMw5/1xzcmfCzxm73VKn+s3Df46lqe52kG0JJlJQZfFa9qKVK18vvvcOut0L49/PADjBsH334Lp5wS8JrFB2ElJARfUtHm0TcmTAL9DIi1h1X1RM7EiaqN623TOxilWzhQCxCdQB9NY1noVTqqqgUFqhMmqDZt6ibK6d9fdcOGoNcsXpUTyiPotY0xAWFVPTVX8dJzTk7pJWpfo20dyeObPmOZv7MVo7mzyMpXgQZfBarSycmBbs3n8kXiGdC3LxvrpzH93m9Je28cCQc1LnHttDQYPLj8A7KsP74xYRTo2yDWHlbiDy5Q6TkpSbV27eAl5wTy9Spe1F84XBX0U87Sk/myxPtSUtwj2EyXr47bpONq3aj5JOg6mug1PKe1axWUeu3yPmyWTWMqDpuds2YK1BC6Z0+wdyvdeZvRZHEMPzKH47iA9/iAv1K8H35qKkWWMSyisBCee45zbrydBoWbeZKbuJt72UpDyA/ymQooNQZjTIVZVU81U7wKJ1hDaHFnMpPPOZ2p9KQOu7mcV0gnlw+4gECDr4JWq3z3HZx8MtxwAwsK23I8cxjM4y7ph5FV7RgTOZb4q5GiUye4Z5HSP9OBuUyjCzM5mzRWcAPZ/IWfeI3Liwy+SkwsYwDUxo3u4iedBL/+ChMn0qfFLH6gfYXuJSWl6KArG4RlTBUKVP8TjgdwGG593Z+Bn4DB3v5GwIfAEu+5YVnnsjp+x7eyVaB68OJ1/O2Sig6++icPBx18VergqPx81SefVG3YULVWLdVbb1X9/XdVrVj7gg3GMqbqEKSOP5KJvxlwvPd6f2Ax0A54CBju7R8OjCnrXNU18Ze1DGBpxwMdK57gi3d1FFE98ZDVurhTphYkJOp2SdZRZOkxh23RAQP2vaesRtu9Pv9ctUMHVdC17c7Rc5v9VOIzgeIsvs//2tZQa0zVqfLEX+JCMAU4H1gENNN9Xw6LyvpsdUz8ZU07UNrxYMdSUoInfd20SXXoUNW6dV2xe+BA1bVrKxb82rWqV1/tTn7ooTpr0KuaXK/QSu3GVDNRTfxAGrAKOADYWuzYlrI+HyuJvzwLeQerlvENQirteLBjKSklvxCa1PtT5142SvXAA11gV1+tumxZxW4wL09zMx7VP2R/3U2Sjj3gdp00fluZ92KMiU1RS/xAfWA2cLG3HVLiBzKBXCC3RYsWkfzbhKS8E4cFq5YRKft4acd8Xz612a13NXxCdxxwkDvYs6fq/PkVv8FPPtEth/5FFXQanbUNi/beY2l97I0xsSsqiR9IAt4HbvXbVy2respb6o1EiT81VV1j64svqqaluZ1nnaX65ZcVv7Fff1Xt5RqBVyWmaXemKBSt1klMLN+9G2NiQ7DEH7HunCIiwLPAz6r6qN+hqUBf73VfXN1/TPLvM1/eicMCLR7i3ze9a9eSXTF9xwN+tp4y/KgpLKrXHq6+mh/XNOSToe+5ZQvLmAAtJ6fkfbVJzWO4jGF7i7bkvzEF7rmHIwsW8DY9KN6vv6Cg9HsxxlQzgb4NwvEATgcU+AGY5z26AinAx7junB8Djco6VzRK/KFOJFZaqTdYm0Cgc4u43i+BPnt50xn6S9OTVUEX0UYvZ7IKBQGrmkJpVO5e531dyBGqoG9woR5Vd9ne6wW7x/K0bxhjYgPR7tVTmUc0En+wJBiOni0hVxvNnq16wQWqoGsTm2s/srUWeaV+ptRzL1+u0+tdtPcLpDPTSiR3WwDFmJoj7hJ/ZUuopfWZr2ypt6yGX120SPXyy93Ohg1VH35Y6wUZfFW8gTXQueuwU+9ipGrdurqNZB3O/VqbXQHPYyV7Y2qOuEr84Si5RrILY7Bzn3jIatXMTNeampysmpWlumVLueIp/r5uvK1Laek2Lr9cTz5klTXUGhMn4irxhyNpR7Lao/i5G7JJH601RPckeYOvBg0qsTZtqPH43teSpfo23VRBF8hR+uHwjyJ+X8aY2BJXib/MqpQQRbLaY+JE1aMO+1OzGKW/y4FaGMLgq5Di2b5df+h5p+6itv5Bfb2v4SOa80Jeld2XMSZ2BEv84o7FtvT0dM3NzQ35/cGmK46Z+d3z8tz0k/fdB+vXQ48erm/k0UdX/Jyq8MYbbr3bVavgqqvgoYegWbPwxW2MqVZEZLaqphffXyOnZS6rD33UFBTASy/BkUfCoEFw1FHw5ZcwZUrlkv7ChXDBBXDppdCgAcya5a5jSd8YE0CNTPwZGa5AHTPzu6u65N7eDb6iYUN4L/Dgq3L5808YOhSOOQa+/RYefxxmz4Yzzghf7MaYGqfGLr2YkREjC3nMnAnDh8PXX0ObNvDKK65knlCJ71xVmDwZbrsN1qyB666DBx6Agw4KX9zGmBqrRpb4Y8KcOdC5M5x9tluxKjsbfvoJLr+8ckl//nzo1AmuvNJV5Xz1FTz7rCV9Y0zILPGH2+LF0KsXdOzo1qd9+GFYsgRuuAGSkip+3q1b4ZZb4LjjXPIfNw6++catf2uMMeVQY6t6qtzq1TByJDz3HNStC3fe6apiDjywcuctLHQNtUOHwoYN0L8/jBrlFq01xpgKsMRfWZs2wZgx8MQTrtfOjTdCVhY0bVr5c8+ZAwMHuuqck0+G6dPh+OMrf15jTFyzqp6K2rbNlbxbtoRHHnF194sXu541lU36mzfDgAGQng6//ALPPw9ffGFJ3xgTFlbiL6/du11D7ahRbvBVz57udWX64fsUFLiG2jvucHX6N98M99zj+uYbY0yYWOIPVUEBvPwyjBjhhv+efbbrmx+uxtVvvnHVOrm5cOaZruro2GPDc25jjPFjVT1lKT74qlEjN/jqk0/Ck/TXr4frr3fnWrPGfbnMmGFJ3xgTMZb4SzNzJpx6Klx4IezZA6++6rpoXnBByXUTyys/H8aOddM3vPgiDBnipl7o3bvy5zbGmFJY4g+k+OCrZ55xg68uu6xyg698PvvM9fMfNMg14M6f7yZU23//yp/bGGPKEMnF1p8TkfUi8qPfvkYi8qGILPGeG0bq+hVSfPDVI4+4wVf9+kGtMDSHrF0Lffq4OvwtW+D11+GDD6Bt28qf2xhjQhTJEv8LQOdi+4YDH6tqG9xC68MjeP3QrV4NmZnQrh28+y7cdRcsWwb//CfUq1f58+/ZA48+6qp1Xn3VDe5auBAuucSqdYwxVS5ivXpUdZaIpBXb3RM423s9AZgBDItUDGUqPvjqpptcV8pwDL7y+fhjV6Xz88/QtSs89hi0bh2+8xtjTDlVdR1/U1VdC+A9R2dmsWCDrx57LHxJ/9df3XnPOw927YKpU92vCUv6xpgoi9nGXRHJFJFcEcndsGFDeE6al+d60rRq5apzOnWCH36ACRPcsl3hsHu3myK5bVt4+203f8+CBdC9e3jOb4wxlVTViX+diDQD8J7XB3ujqmararqqpjdp0qRyVy2+8lW7dm7+m7feCs+IW5/33nOLotxxh+vy+fPP7gumbt3wXcMYYyqpqhP/VKCv97ovMCWiV1N1VSz+g6/efz98g698li93ff27dHHb773n1r8N168IY4wJo0h255wEfAUcKSKrReR64EHgfBFZApzvbUfOxRe7uXT8B1/99a/h60mzcyfce6/7BfHRR/Dgg65P/gUXhOf8xhgTAZHs1dM7yKFzI3XNEi66CLp1g2uuCU8/fB9VV39/yy2utN+rl2skPvTQ8F3DGGMipGZP0nb11eE/55IlMHiwmxu/XTtXbdSpU/ivY4wxERKzvXpizvbtboGVo4+Gzz93A7LmzbOkb4ypdmp2iT8cVN3UCrfe6kb49unj5tU5+OBoR2aMMRViib80u3e7NoKPP3Y9gyZNgtNPj3ZUxhhTKZb4S1OnDhxxhGsk7t8/vA3ExhgTJZbJyvLUU9GOwBhjwsoad40xJs5Y4jfGmDhjid8YY+KMJX5jjIkzlviNMSbOWOI3xpg4Y4nfGGPijCV+Y4yJM6Kq0Y6hTCKyAVgZ7TjKoTGwMdpBREE83nc83jPE531Xx3tOVdUSSxhWi8Rf3YhIrqqmRzuOqhaP9x2P9wzxed816Z6tqscYY+KMJX5jjIkzlvgjIzvaAURJPN53PN4zxOd915h7tjp+Y4yJM1biN8aYOGOJ3xhj4owl/ggRkYdFZKGI/CAib4pIg2jHFGkicpmI/CQihSJSI7q9lUZEOovIIhFZKiLDox1PVRCR50RkvYj8GO1YqoqIHCYin4rIz97/34OjHVNlWeKPnA+Bo1X1WGAxcHuU46kKPwIXA7OiHUikiUgi8CTQBWgH9BaRdtGNqkq8AHSOdhBVLB/4p6oeBZwM3FTd/1tb4o8QVf1AVfO9za+BQ6MZT1VQ1Z9VdVG046giJwJLVXWZquYBk4GeUY4p4lR1FrA52nFUJVVdq6pzvNd/Aj8Dh0Q3qsqxxF81rgOmRzsIE1aHAL/6ba+mmicDUzYRSQOOA76JbiSVY4utV4KIfAQcHOBQlqpO8d6ThfupmFOVsUVKKPccJyTAPusbXYOJSH3g/4BbVPWPaMdTGZb4K0FVzyvtuIj0Bf4GnKs1ZMBEWfccR1YDh/ltHwqsiVIsJsJEJAmX9HNU9Y1ox1NZVtUTISLSGRgG9FDVHdGOx4Tdd0AbETlcRGoDVwBToxyTiQAREeBZ4GdVfTTa8YSDJf7IGQvsD3woIvNEZFy0A4o0EblIRFYDpwDvisj70Y4pUryG+4HA+7jGvldV9afoRhV5IjIJ+Ao4UkRWi8j10Y6pCpwG9AHO8f4tzxORrtEOqjJsygZjjIkzVuI3xpg4Y4nfGGPijCV+Y4yJM5b4jTEmzljiN8aYOGOJ31QZEUnx6w73PxH5zXu9VUQWVHEsHfy75IlIj4rOsCkiK0SkcfiiK9e1rxGR5n7b430TiEUzLhPbLPGbKqOqm1S1g6p2AMYB//ZedwAKw309ESltZHoHYG/iV9WpqvpguGOoAtcAexO/qvZT1Sr9EjXVjyV+EysSReQZb77zD0SkHoCItBKR90Rktoh8JiJtvf2pIvKxt97BxyLSwtv/gog8KiKfAmNEZD9vDvnvRGSuiPT0RtqOBHp5vzh6eSXnsd45mnprKHzvPU719r/lxfGTiGSWdUMicq2ILBaRmd69+c7/gohc6ve+bd5zfe9e5ojIfBHp6e1P8+aCL/L38c6RDuR491FPRGYEWgtBRK4SkW+99/1XRBK9xwsi8qN3vX9U4r+fqUYs8ZtY0QZ4UlX/AmwFLvH2ZwODVLUjcBvwlLd/LPCit95BDvC437mOAM5T1X8CWcAnqnoC0Al4GEgCRgCveL9AXikWy+PATFVtDxwP+EbkXufFkQ7cLCIpwW5GRJoB9+JGfZ6Pm7O/LLuAi1T1eC/Wf3nTBQT8+6jq60AukOHdx84gsRwF9AJO835hFQAZuF89h6jq0ap6DPB8CDGaGsAmaTOxYrmqzvNezwbSvNkQTwVe25f/qOM9n4Jb9AXgJeAhv3O9pqoF3uu/Aj1E5DZvuy7QooxYzgGuBvDO87u3/2YRuch7fRguGW8Kco6TgBmqugFARF7BfSGVRoD7ReRMXNXXIUBT71iJv08Z5/J3LtAR+M77O9YD1gNvAy1F5AngXeCDcpzTVGOW+E2s2O33ugCXnBKArV4ptSz+c49s93stuNJxkQViROSk8gQnImcD5wGnqOoOEZmB+xIJNSZ/+Xi/tr0SfW1vfwbQBOioqntEZIXfNQL9fUIOH5igqiVWgROR9sAFwE3A5bi1I0wNZ1U9JmZ5c54vF5HLwCVJL1EBfImbERNcwvw8yGneBwb5qkxE5Dhv/5+4SfQC+RgY4L0/UUQOAA4EtnhJvy1uCb7SfAOc7fVkSgIu8zu2AlcCB7dqV5L3+kBgvZf0OwGpZVyjrPvwv59LReQg754aeW0kjYEEVf0/4C5ctZaJA5b4TazLAK4Xke9xde2+5Q1vBq4VkR9wMycGWwD7Plxi/UHcAuH3efs/Bdr5GneLfWYw0ElE5uOqVf4CvAfU8q53H245zaBUdS1wD24my4+AOX6HnwHOEpFvcVVCvl8oOUC6iOR6972wtGt4XgDG+Rp3g8SyALgT+MCL/0OgGa4qaYaIzPPOEw/rQhtsdk5jqoSIXAOkq+rAaMdijJX4jTEmzliJ3xhj4oyV+I0xJs5Y4jfGmDhjid8YY+KMJX5jjIkzlviNMSbO/D9mFfD1lm0a7QAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from scipy import stats\n", "\n", "# Gráfico de probabilidade da Normal, para checar suposição de tal distribuição dos dados\n", "# para o teste t de Student\n", "stats.probplot(sampleF, plot=plt)\n", "stats.probplot(sampleM, plot=plt)\n", "fig = plt.figure()" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\Mariana\\Anaconda3\\lib\\site-packages\\scipy\\stats\\morestats.py:1653: UserWarning: p-value may not be accurate for N > 5000.\n", " warnings.warn(\"p-value may not be accurate for N > 5000.\")\n" ] }, { "data": { "text/plain": [ "(0.975343644618988, 0.0)" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Teste de Shapiro-Wilks para normalidade\n", "stats.shapiro(dataM)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "KstestResult(statistic=0.08001335891281569, pvalue=8.035805158495415e-55)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Teste de Kolmogorov-Smirnov para normalidade\n", "mu = dataF.mean()\n", "sigma = dataF.std()\n", "stats.kstest(dataF,'norm',args=(mu,sigma))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LeveneResult(statistic=1.5414156796712146, pvalue=0.21635809587326393)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Teste de Levene para igualdade de variâncias\n", "stats.levene(sampleF,sampleM)\n" ] }, { "cell_type": "code", "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", "
counts%
<=50K2265475.1
>50K750824.9
\n", "
" ], "text/plain": [ " counts %\n", "<=50K 22654 75.1\n", ">50K 7508 24.9" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Há injustiça no valor salarial?\n", "c = data[\"target\"].value_counts(sort=False)\n", "p = data[\"target\"].value_counts(normalize=True,sort=False).round(3) * 100\n", "pd.concat([c,p], axis=1, keys=['counts', '%'])\n" ] }, { "cell_type": "code", "execution_count": 20, "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", "
target<=50K>50KAll
sex
Female867011129782
Male13984639620380
All22654750830162
\n", "
" ], "text/plain": [ "target <=50K >50K All\n", "sex \n", "Female 8670 1112 9782\n", "Male 13984 6396 20380\n", "All 22654 7508 30162" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Tabela de frequências cruzadas ou tabela de contingência\n", "pd.crosstab(data.sex, data.target,margins=True)" ] }, { "cell_type": "code", "execution_count": 21, "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", "
target<=50K>50K
sex
Female0.8863220.113678
Male0.6861630.313837
\n", "
" ], "text/plain": [ "target <=50K >50K\n", "sex \n", "Female 0.886322 0.113678\n", "Male 0.686163 0.313837" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Percentual de linhas\n", "pd.crosstab(data.sex, data.target,normalize='index')" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1415.2864042410245,\n", " 1.00155254124934e-309,\n", " 1,\n", " array([[ 7347.04024932, 2434.95975068],\n", " [15306.95975068, 5073.04024932]]))" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy.stats import chi2_contingency\n", "\n", "# teste quiquadrado para independência/hamogeneidade de distribuição\n", "obs = pd.crosstab(data.sex, data.target)\n", "chi2_contingency(obs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }