Skip to content

Instantly share code, notes, and snippets.

@ClebsonDantasUchoa
Last active August 22, 2018 03:37
Show Gist options
  • Select an option

  • Save ClebsonDantasUchoa/42a8331103a6d4cc113d29c9cf598506 to your computer and use it in GitHub Desktop.

Select an option

Save ClebsonDantasUchoa/42a8331103a6d4cc113d29c9cf598506 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Classificar se um indivíduo é ou não portador da diabetes\n",
"## Definição do problema:\n",
"### O conjunto de dados contém várias informações sobre pessoas indianas:\n",
"1. Número de vezes grávida\n",
"2. Concentração de glicose plasmática a 2 horas em um teste oral de tolerância à glicose\n",
"3. Pressão arterial diastólica (mm Hg)\n",
"4. espessura de dobra de pele de tríceps (mm)\n",
"5. Insulina sérica de 2 horas (mu U / ml)\n",
"6. Índice de massa corporal (peso em kg / (altura em m) ^ 2)\n",
"7. Função de pedigree de diabetes\n",
"8. Idade (anos)\n",
"9. Variável de classe (0 ou 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Importação das bibliotecas"
]
},
{
"cell_type": "code",
"execution_count": 207,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn import tree\n",
"from sklearn import metrics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Carregando e definindo as colunas do dataset"
]
},
{
"cell_type": "code",
"execution_count": 208,
"metadata": {},
"outputs": [],
"source": [
"cols = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']\n",
"df = pd.read_csv('diabetes.data', header=None, names=cols)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visualização e descrição dos dados"
]
},
{
"cell_type": "code",
"execution_count": 209,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>preg</th>\n",
" <th>plas</th>\n",
" <th>pres</th>\n",
" <th>skin</th>\n",
" <th>test</th>\n",
" <th>mass</th>\n",
" <th>pedi</th>\n",
" <th>age</th>\n",
" <th>class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>6</td>\n",
" <td>148</td>\n",
" <td>72</td>\n",
" <td>35</td>\n",
" <td>0</td>\n",
" <td>33.6</td>\n",
" <td>0.627</td>\n",
" <td>50</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>85</td>\n",
" <td>66</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>26.6</td>\n",
" <td>0.351</td>\n",
" <td>31</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>8</td>\n",
" <td>183</td>\n",
" <td>64</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>23.3</td>\n",
" <td>0.672</td>\n",
" <td>32</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>89</td>\n",
" <td>66</td>\n",
" <td>23</td>\n",
" <td>94</td>\n",
" <td>28.1</td>\n",
" <td>0.167</td>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>137</td>\n",
" <td>40</td>\n",
" <td>35</td>\n",
" <td>168</td>\n",
" <td>43.1</td>\n",
" <td>2.288</td>\n",
" <td>33</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5</td>\n",
" <td>116</td>\n",
" <td>74</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>25.6</td>\n",
" <td>0.201</td>\n",
" <td>30</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>3</td>\n",
" <td>78</td>\n",
" <td>50</td>\n",
" <td>32</td>\n",
" <td>88</td>\n",
" <td>31.0</td>\n",
" <td>0.248</td>\n",
" <td>26</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>10</td>\n",
" <td>115</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>35.3</td>\n",
" <td>0.134</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2</td>\n",
" <td>197</td>\n",
" <td>70</td>\n",
" <td>45</td>\n",
" <td>543</td>\n",
" <td>30.5</td>\n",
" <td>0.158</td>\n",
" <td>53</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>8</td>\n",
" <td>125</td>\n",
" <td>96</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0.232</td>\n",
" <td>54</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" preg plas pres skin test mass pedi age class\n",
"0 6 148 72 35 0 33.6 0.627 50 1\n",
"1 1 85 66 29 0 26.6 0.351 31 0\n",
"2 8 183 64 0 0 23.3 0.672 32 1\n",
"3 1 89 66 23 94 28.1 0.167 21 0\n",
"4 0 137 40 35 168 43.1 2.288 33 1\n",
"5 5 116 74 0 0 25.6 0.201 30 0\n",
"6 3 78 50 32 88 31.0 0.248 26 1\n",
"7 10 115 0 0 0 35.3 0.134 29 0\n",
"8 2 197 70 45 543 30.5 0.158 53 1\n",
"9 8 125 96 0 0 0.0 0.232 54 1"
]
},
"execution_count": 209,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 210,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>preg</th>\n",
" <th>plas</th>\n",
" <th>pres</th>\n",
" <th>skin</th>\n",
" <th>test</th>\n",
" <th>mass</th>\n",
" <th>pedi</th>\n",
" <th>age</th>\n",
" <th>class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>768.000000</td>\n",
" <td>768.000000</td>\n",
" <td>768.000000</td>\n",
" <td>768.000000</td>\n",
" <td>768.000000</td>\n",
" <td>768.000000</td>\n",
" <td>768.000000</td>\n",
" <td>768.000000</td>\n",
" <td>768.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>3.845052</td>\n",
" <td>120.894531</td>\n",
" <td>69.105469</td>\n",
" <td>20.536458</td>\n",
" <td>79.799479</td>\n",
" <td>31.992578</td>\n",
" <td>0.471876</td>\n",
" <td>33.240885</td>\n",
" <td>0.348958</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>3.369578</td>\n",
" <td>31.972618</td>\n",
" <td>19.355807</td>\n",
" <td>15.952218</td>\n",
" <td>115.244002</td>\n",
" <td>7.884160</td>\n",
" <td>0.331329</td>\n",
" <td>11.760232</td>\n",
" <td>0.476951</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.078000</td>\n",
" <td>21.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>1.000000</td>\n",
" <td>99.000000</td>\n",
" <td>62.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>27.300000</td>\n",
" <td>0.243750</td>\n",
" <td>24.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>3.000000</td>\n",
" <td>117.000000</td>\n",
" <td>72.000000</td>\n",
" <td>23.000000</td>\n",
" <td>30.500000</td>\n",
" <td>32.000000</td>\n",
" <td>0.372500</td>\n",
" <td>29.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>6.000000</td>\n",
" <td>140.250000</td>\n",
" <td>80.000000</td>\n",
" <td>32.000000</td>\n",
" <td>127.250000</td>\n",
" <td>36.600000</td>\n",
" <td>0.626250</td>\n",
" <td>41.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>17.000000</td>\n",
" <td>199.000000</td>\n",
" <td>122.000000</td>\n",
" <td>99.000000</td>\n",
" <td>846.000000</td>\n",
" <td>67.100000</td>\n",
" <td>2.420000</td>\n",
" <td>81.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" preg plas pres skin test mass \\\n",
"count 768.000000 768.000000 768.000000 768.000000 768.000000 768.000000 \n",
"mean 3.845052 120.894531 69.105469 20.536458 79.799479 31.992578 \n",
"std 3.369578 31.972618 19.355807 15.952218 115.244002 7.884160 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 1.000000 99.000000 62.000000 0.000000 0.000000 27.300000 \n",
"50% 3.000000 117.000000 72.000000 23.000000 30.500000 32.000000 \n",
"75% 6.000000 140.250000 80.000000 32.000000 127.250000 36.600000 \n",
"max 17.000000 199.000000 122.000000 99.000000 846.000000 67.100000 \n",
"\n",
" pedi age class \n",
"count 768.000000 768.000000 768.000000 \n",
"mean 0.471876 33.240885 0.348958 \n",
"std 0.331329 11.760232 0.476951 \n",
"min 0.078000 21.000000 0.000000 \n",
"25% 0.243750 24.000000 0.000000 \n",
"50% 0.372500 29.000000 0.000000 \n",
"75% 0.626250 41.000000 1.000000 \n",
"max 2.420000 81.000000 1.000000 "
]
},
"execution_count": 210,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 211,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"class\n",
"0 500\n",
"1 268\n",
"dtype: int64\n"
]
}
],
"source": [
"print(df.groupby('class').size())"
]
},
{
"cell_type": "code",
"execution_count": 212,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 9 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.hist(figsize=(10,10));"
]
},
{
"cell_type": "code",
"execution_count": 213,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>preg</th>\n",
" <th>plas</th>\n",
" <th>pres</th>\n",
" <th>skin</th>\n",
" <th>test</th>\n",
" <th>mass</th>\n",
" <th>pedi</th>\n",
" <th>age</th>\n",
" <th>class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>preg</th>\n",
" <td>1.000000</td>\n",
" <td>0.129459</td>\n",
" <td>0.141282</td>\n",
" <td>-0.081672</td>\n",
" <td>-0.073535</td>\n",
" <td>0.017683</td>\n",
" <td>-0.033523</td>\n",
" <td>0.544341</td>\n",
" <td>0.221898</td>\n",
" </tr>\n",
" <tr>\n",
" <th>plas</th>\n",
" <td>0.129459</td>\n",
" <td>1.000000</td>\n",
" <td>0.152590</td>\n",
" <td>0.057328</td>\n",
" <td>0.331357</td>\n",
" <td>0.221071</td>\n",
" <td>0.137337</td>\n",
" <td>0.263514</td>\n",
" <td>0.466581</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pres</th>\n",
" <td>0.141282</td>\n",
" <td>0.152590</td>\n",
" <td>1.000000</td>\n",
" <td>0.207371</td>\n",
" <td>0.088933</td>\n",
" <td>0.281805</td>\n",
" <td>0.041265</td>\n",
" <td>0.239528</td>\n",
" <td>0.065068</td>\n",
" </tr>\n",
" <tr>\n",
" <th>skin</th>\n",
" <td>-0.081672</td>\n",
" <td>0.057328</td>\n",
" <td>0.207371</td>\n",
" <td>1.000000</td>\n",
" <td>0.436783</td>\n",
" <td>0.392573</td>\n",
" <td>0.183928</td>\n",
" <td>-0.113970</td>\n",
" <td>0.074752</td>\n",
" </tr>\n",
" <tr>\n",
" <th>test</th>\n",
" <td>-0.073535</td>\n",
" <td>0.331357</td>\n",
" <td>0.088933</td>\n",
" <td>0.436783</td>\n",
" <td>1.000000</td>\n",
" <td>0.197859</td>\n",
" <td>0.185071</td>\n",
" <td>-0.042163</td>\n",
" <td>0.130548</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mass</th>\n",
" <td>0.017683</td>\n",
" <td>0.221071</td>\n",
" <td>0.281805</td>\n",
" <td>0.392573</td>\n",
" <td>0.197859</td>\n",
" <td>1.000000</td>\n",
" <td>0.140647</td>\n",
" <td>0.036242</td>\n",
" <td>0.292695</td>\n",
" </tr>\n",
" <tr>\n",
" <th>pedi</th>\n",
" <td>-0.033523</td>\n",
" <td>0.137337</td>\n",
" <td>0.041265</td>\n",
" <td>0.183928</td>\n",
" <td>0.185071</td>\n",
" <td>0.140647</td>\n",
" <td>1.000000</td>\n",
" <td>0.033561</td>\n",
" <td>0.173844</td>\n",
" </tr>\n",
" <tr>\n",
" <th>age</th>\n",
" <td>0.544341</td>\n",
" <td>0.263514</td>\n",
" <td>0.239528</td>\n",
" <td>-0.113970</td>\n",
" <td>-0.042163</td>\n",
" <td>0.036242</td>\n",
" <td>0.033561</td>\n",
" <td>1.000000</td>\n",
" <td>0.238356</td>\n",
" </tr>\n",
" <tr>\n",
" <th>class</th>\n",
" <td>0.221898</td>\n",
" <td>0.466581</td>\n",
" <td>0.065068</td>\n",
" <td>0.074752</td>\n",
" <td>0.130548</td>\n",
" <td>0.292695</td>\n",
" <td>0.173844</td>\n",
" <td>0.238356</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" preg plas pres skin test mass pedi \\\n",
"preg 1.000000 0.129459 0.141282 -0.081672 -0.073535 0.017683 -0.033523 \n",
"plas 0.129459 1.000000 0.152590 0.057328 0.331357 0.221071 0.137337 \n",
"pres 0.141282 0.152590 1.000000 0.207371 0.088933 0.281805 0.041265 \n",
"skin -0.081672 0.057328 0.207371 1.000000 0.436783 0.392573 0.183928 \n",
"test -0.073535 0.331357 0.088933 0.436783 1.000000 0.197859 0.185071 \n",
"mass 0.017683 0.221071 0.281805 0.392573 0.197859 1.000000 0.140647 \n",
"pedi -0.033523 0.137337 0.041265 0.183928 0.185071 0.140647 1.000000 \n",
"age 0.544341 0.263514 0.239528 -0.113970 -0.042163 0.036242 0.033561 \n",
"class 0.221898 0.466581 0.065068 0.074752 0.130548 0.292695 0.173844 \n",
"\n",
" age class \n",
"preg 0.544341 0.221898 \n",
"plas 0.263514 0.466581 \n",
"pres 0.239528 0.065068 \n",
"skin -0.113970 0.074752 \n",
"test -0.042163 0.130548 \n",
"mass 0.036242 0.292695 \n",
"pedi 0.033561 0.173844 \n",
"age 1.000000 0.238356 \n",
"class 0.238356 1.000000 "
]
},
"execution_count": 213,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.corr()"
]
},
{
"cell_type": "code",
"execution_count": 214,
"metadata": {},
"outputs": [],
"source": [
"df = df.values\n",
"#np.random.seed(1)\n",
"#np.random.shuffle(df)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Criação do dataset"
]
},
{
"cell_type": "code",
"execution_count": 215,
"metadata": {},
"outputs": [],
"source": [
"dados = df[:, 0:8]\n",
"diabetes = df[:, 8]"
]
},
{
"cell_type": "code",
"execution_count": 216,
"metadata": {},
"outputs": [],
"source": [
"n_train = int(round(len(diabetes) * 0.75))\n",
"dados_treino = dados[:n_train,:]\n",
"diabetes_treino = diabetes[:n_train]\n",
"dados_teste = dados[n_train:,:]\n",
"diabetes_teste = diabetes[n_train:]"
]
},
{
"cell_type": "code",
"execution_count": 217,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((768, 8), (768,), (576, 8), (576,), (192, 8), (192,))"
]
},
"execution_count": 217,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dados.shape, diabetes.shape, dados_treino.shape, diabetes_treino.shape, dados_teste.shape, diabetes_teste.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Criando uma árvore de decisão e fazendo a ligação entre os dados"
]
},
{
"cell_type": "code",
"execution_count": 218,
"metadata": {},
"outputs": [],
"source": [
"clf = tree.DecisionTreeClassifier()\n",
"clf.fit(dados_treino, diabetes_treino)\n",
"resposta = clf.predict(dados_teste)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Resultados"
]
},
{
"cell_type": "code",
"execution_count": 219,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" 0.0 0.76 0.80 0.78 122\n",
" 1.0 0.61 0.56 0.58 70\n",
"\n",
"avg / total 0.70 0.71 0.71 192\n",
"\n"
]
}
],
"source": [
"print(metrics.classification_report(diabetes_teste, resposta))"
]
},
{
"cell_type": "code",
"execution_count": 220,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7083333333333334\n"
]
}
],
"source": [
"accuracy = metrics.accuracy_score(diabetes_teste, resposta)\n",
"print(accuracy)"
]
},
{
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@regispires
Copy link

oi, clebson. gostei!
no entanto, você tem uma hora e isso dá tempo de detalhar mais.

Assim aqui vão algumas observações...

  • não é justo predizer a primeira linha, pois o modelo já a conhece, pois ela entrou no conjunto de treino. Nesse, caso seu exemplo estaria OK se essa primeira linha não tivesse sido usada durante o fit.
  • sugiro dividir os dados entre conjunto de treino (70%) e conjunto de teste (30%) -> exemplo dessa divisão em https://github.com/ciencia-de-dados-pratica/GEAM/blob/master/001/iris-notebook.ipynb
  • treinar (fit) o modelo com os dados de treino.
  • predizer a classe para cada linha dos dados de teste.
  • apresentar quantas linhas foram classificadas corretamente em relação ao total, ou seja, calcular a acurácia do modelo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment