<jupyter_start><jupyter_text>> Aluno: <NAME> - Matrícula 1935310001  Redes Neurais Artificiais 2020.1**Disciplina**: Redes Neurais Artificiais 2020.1  **Professora**: <NAME> (<EMAIL>)  **Github**: http://github.com/elloa   Explorando uma base de dadosNesta projeto iremos explorar a seguinte base de dados **_Forest Cover Type_**1. Obter esta base de dados no seguinte link: https://www.kaggle.com/uciml/forest-cover-type-dataset/download2. Consultar a documentação oficial da base de dados: https://archive.ics.uci.edu/ml/datasets/covertype3. **Responda**:    3.1 O que é cada exemplo na base de dados?    3.2 Em que ano ela foi obtida?    3.3 Quem foram os responsáveis pela criação desta base de dados?    3.1 O que é cada exemplo na base de dados?      Cada exemplo corresponde a uma área (30x30 metros), onde o tipo de cobertura vegetal já era determinado a partir dos dados do Sistema de Informação de Recursos da Região 2 (Region 2 Resource Information System - RIS) do Serviço Florestal dos Estados Unidos (United States Forest Service - USFS). Os exemplos também possuem dados derivados a partir de dados originais do Serviço Geológico dos Estados Unidos (United States Geological Survey - USGS) e também do Serviço Florestal dos Estados Unidos. Há, também, atributos binários qualitativos relativos à área florestal a qual o exemplo pertence e aos tipos de solo presentes em cada exemplo.  3.2 Em que ano ela foi obtida?      De acordo com a descrição do dataset presente em https://archive.ics.uci.edu/ml/datasets/covertype, a base de dados foi obtida em agosto de 1998.   3.3 Quem foram os responsáveis pela criação desta base de dados?  Ainda de acordo com as informações apresentadas em https://archive.ics.uci.edu/ml/datasets/covertype, os donos originais da base de dados são: * Programa de Sensoriamento Remoto e GIS (Remote Sensing and GIS Program)* Departamennto de Ciências Florestais (Department of Forest Sciences)* Faculdade de Recursos Naturais (College of Natural Resources)* Universidade do Estado do Colorado (Colorado State University)Sendo os doadores da base de dados:1. <NAME> (<EMAIL>)2. Dr. <NAME> (<EMAIL>)3. Dr. <NAME> (<EMAIL>)<jupyter_code>## Reservado para a importação de bibliotecas
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import os<jupyter_output><empty_output><jupyter_text>Manipulando a base de dados1. Abra a base de dados com o pandas2. Imprima os 10 primeiros exemplos pertencentes à esta base3. Imprima os 10 últimos exemplos pertencentes à esta base4. Quantos exemplos esta base de dados possui?5. Quais são os atributos que a base de dados possui e quais seus tipos?6. Há algum dado faltante na base?7. De acordo com a documentação da base de dados, qual o significado dos atributos do tipo "Soil Type"?    7.1 Este atributo é quantitativo ou qualitativo?    7.2 Qual o tipo de codificação utilizada para denotar este atributo? Consulte a seguinte referência:    * https://pbpython.com/categorical-encoding.html  1. Abra a base de dados com o pandas<jupyter_code>data = pd.read_csv('../database/covtype.csv')
data<jupyter_output><empty_output><jupyter_text>2. Imprima os 10 primeiros exemplos pertencentes à esta base<jupyter_code>data.head(10)<jupyter_output><empty_output><jupyter_text>3. Imprima os 10 últimos exemplos pertencentes à esta base<jupyter_code>data.tail(10)<jupyter_output><empty_output><jupyter_text>4. Quantos exemplos esta base de dados possui?<jupyter_code>print(len(data))<jupyter_output>581012<jupyter_text>5. Quais são os atributos que a base de dados possui e quais seus tipos?<jupyter_code>data.dtypes<jupyter_output><empty_output><jupyter_text>6. Há algum dado faltante na base?<jupyter_code>data.isna().any().any()<jupyter_output><empty_output><jupyter_text>7. De acordo com a documentação da base de dados, qual o significado dos atributos do tipo "Soil Type"?   * 7.1 Este atributo é quantitativo ou qualitativo?   * 7.2 Qual o tipo de codificação utilizada para denotar este atributo?Consulte a seguinte referência: https://pbpython.com/categorical-encondig.html     Há 40 atributos binários do tipo Soil Type, representando 40 tipos de solos, onde, para cada exemplo, o valor 0 representa a ausência e o valor 1 representa a presença do respectivo tipo de solo no exemplo. Esses atributos, são, portanto, qualitativos e de acordo com a referência indicada, foi utilizada uma aproximação do tipo one hot enconding, onde a estratégia consiste em converter cada valor categórico de uma coluna específica, em um nova coluna e atribuir 0 ou 1 (falso/verdadeiro) como valores possíveis a essas colunas.  Visualizando a base de dados1. Baseando-se nos fundamentos de visualização de dados abordados na disciplina, plote cada um dos atributos preditores de maneira a enfatizar a sua distribuição, tendência central e dispersão  1.1 Considere que o número de columas no dataset é diferente do número de atributos, conforme discussão promovida a respeito do dataset  1.2 Se preferir, opte por complementar as informações visuais com medidas estatísticas  2. A partir da visualização elaborada, o que pode-se dizer a respeito do balanceamento do atributo-alvo?3. Que tipo de tarefa de Aprendizado de Máquina é sugestiva para este problema?  3.1 Apresente métricas de desempenho compatíveis para a avaliação do problema (liste-as)  3.2 Escolha uma das métricas apresentadas para ser utilizada como referência pela equipe  1. Baseando-se nos fundamentos de visualização de dados abordados na disciplina, plote cada um dos atributos preditores de maneira a enfatizar a sua distribuição, tendência central e dispersão     * 1.1 Considere que o número de columas no dataset é diferente do número de atributos, conforme discussão promovida a respeito do dataset     * 1.2 Se preferir, opte por complementar as informações visuais com medidas estatísticas<jupyter_code>#Função que retorna informações estatísticas
def estatistical(atr_desc, measure_type):
    print("Algumas informações estatísticas")

    print("Média: " + 
          str(np.round(atr_desc[1], 4)) + measure_type)

    print("Desvio padrão: " + 
          str(np.round(atr_desc[2], 4)) + measure_type)

    print("Menor valor: " + 
          str(np.round(atr_desc[3], 4)) + measure_type)

    print("Valor do primeiro quartil: " + 
          str(np.round(atr_desc[4], 4)) + measure_type)

    print("Mediana: " + 
          str(np.round(atr_desc[5], 4)) + measure_type)

    print("Valor do terceiro quartil: " + 
          str(np.round(atr_desc[6], 4)) + measure_type)

    print("Intervalo interquartil: " +
          str(np.round((atr_desc[6] - atr_desc[4]), 4)) + measure_type)

    print("Maior valor: " + 
          str(np.round(atr_desc[7], 4)) + measure_type)
#Função para mostrar histograma e boxplot alinhados
def hist_box(nparr, bins, hist_title, hist_x_label, box_title, box_xlabel):
    
    fig, axs = plt.subplots(2)
    fig.set_size_inches(9, 10)

    axs[0].hist(nparr, bins)
    axs[0].set_title(hist_title)
    axs[0].set_xlabel(hist_x_label, fontsize=14)
    axs[0].set_ylabel('Quantidade de exemplos', fontsize=14)

    flierprops = dict(marker='o', markerfacecolor='r', markersize=8, linestyle='none', markeredgecolor='g')
    axs[1].boxplot([nparr],vert=False, labels=[''], flierprops=flierprops)
    axs[1].set_title(box_title)
    axs[1].set_xlabel(box_xlabel, fontsize=14)

    fig.tight_layout(pad=3.0)

    plt.show()<jupyter_output><empty_output><jupyter_text>**Atributo Elevação (Elevation)**<jupyter_code>hist_box(data['Elevation'].to_numpy(), 500, 'Histograma do atributo Elevação',
         'Elevação(m)', 'Boxplot do atributo Elevação', 'Elevação(m)')
    
estatistical(data.Elevation.describe(), "m")<jupyter_output><empty_output><jupyter_text>**Atributo Aspecto (Aspect)**<jupyter_code>aspect_arr = data['Aspect'].to_numpy()

fig = plt.figure()
ax1 = fig.add_subplot(111)
fig.set_size_inches(9, 5)

#Histograma para o atributo aspecto
ax1.hist(aspect_arr, bins=180)
ax1.set_title('Histograma do atributo Aspecto')
ax1.set_xlabel('Aspecto (sentido e seu respectivo azimute(°)) ', fontsize=14)
ax1.set_ylabel('Quantidade de exemplos', fontsize=14)

ticks = [0, 45, 90, 135, 180, 225, 270, 315, 360]

plt.xticks(ticks, ['N(0°)', 'NE(45°)', 'L(90°)', 'SE(135°)', 'S(180°)', 
                   'SO(225°)','O(270°)', 'NO(315°)', 'N(360°)'])
plt.show()<jupyter_output><empty_output><jupyter_text>**Atributo Declive (Slope)**<jupyter_code>hist_box(data['Slope'].to_numpy(), 66, 'Histograma do atributo Declive',
         'Declive(°)', 'Boxplot do atributo Declive', 'Declive(°)')
    
estatistical(data.Slope.describe(), "°")<jupyter_output><empty_output><jupyter_text>**Atributo Distância Horizontal para o Recurso de Água Superficial mais Próximo (Horizontal_Distance_To_Hydrology)**<jupyter_code>hist_box(data['Horizontal_Distance_To_Hydrology'].to_numpy(), 50, 
         'Histograma da menor distância horizontal para um recurso de água na superfície',
         'Distância(m)', 'Boxplot da menor distância horizontal para um recurso de água na superfície', 
         'Distância(m)')
    
estatistical(data.Horizontal_Distance_To_Hydrology.describe(), "m")<jupyter_output><empty_output><jupyter_text>**Atributo Distância Vertical para o Recurso de Água Superficial mais Próximo (Vertical_Distance_To_Hydrology)**<jupyter_code>hist_box(data['Vertical_Distance_To_Hydrology'].to_numpy(), 50, 
         'Histograma da menor distância vertical para um recurso de água na superfície',
         'Distância(m)', 'Boxplot da menor distância vertical para um recurso de água na superfície', 
         'Distância(m)')
    
estatistical(data.Vertical_Distance_To_Hydrology.describe(), "m")<jupyter_output><empty_output><jupyter_text>**Atributo Distância Horizontal para a Estrada mais Próxima (Horizontal_Distance_To_Roadways)**<jupyter_code>hist_box(data['Horizontal_Distance_To_Roadways'].to_numpy(), 500, 
         'Histograma da menor distância horizontal para a estrada mais próxima',
         'Distância(m)', 'Boxplot da menor distância horizontal para a estrada mais próxima', 
         'Distância(m)')
    
estatistical(data.Horizontal_Distance_To_Roadways.describe(), "m")<jupyter_output><empty_output><jupyter_text>**Atributo Medida Relativa à Incidência de Luz Solar às 09:00h no Solstício de Verão (Hillshade_9am)**<jupyter_code>hist_box(data['Hillshade_9am'].to_numpy(), 50, 
         'Histograma incidênica relativa de luz solar às 09:00h no solstício de verão',
         'Valor(indicador)', 'Boxplot incidênica relativa de luz solar às 09:00h no solstício de verão', 
         'Valor(indicador)')
    
estatistical(data.Hillshade_9am.describe(), "")<jupyter_output><empty_output><jupyter_text>**Atributo Medida Relativa à Incidência de Luz Solar ao meio-dia no Solstício de Verão (Hillshade_Noon)**<jupyter_code>hist_box(data['Hillshade_Noon'].to_numpy(), 50, 
         'Histograma incidênica relativa de luz solar ao meio-dia no solstício de verão',
         'Valor(indicador)', 'Boxplot incidênica relativa de luz solar ao meio-dia no solstício de verão', 
         'Valor(indicador)')
    
estatistical(data.Hillshade_Noon.describe(), "")<jupyter_output><empty_output><jupyter_text>**Atributo Medida Relativa à Incidência de Luz Solar às 15:00h no Solstício de Verão (Hillshade_3pm)**<jupyter_code>hist_box(data['Hillshade_3pm'].to_numpy(), 50, 
         'Histograma incidênica relativa de luz solar às 15:00h no solstício de verão',
         'Valor(indicador)', 'Boxplot incidênica relativa de luz solar às 15:00h no solstício de verão', 
         'Valor(indicador)')
    
estatistical(data.Hillshade_3pm.describe(), "")<jupyter_output><empty_output><jupyter_text>**Atributo Menor Distância Horizontal a um Ponto de Início de um Incêndio Ocorrido (Horizontal_Distance_To_Fire_Points)**<jupyter_code>hist_box(data['Horizontal_Distance_To_Fire_Points'].to_numpy(), 250, 
         'Histograma da menor distância horizontal a um ponto de início de um incêndio ocorrido',
         'Distância(m)', 'Boxplot da menor distância horizontal a um ponto de início de um incêndio ocorrido', 
         'Distância(m)')
    
estatistical(data.Horizontal_Distance_To_Fire_Points.describe(), "m")<jupyter_output><empty_output><jupyter_text>**Atributo Área Selvagem (colunas com o prefixo Wilderness_Area)**<jupyter_code>#Gráfico de pizza pois são 4 categorias
w_a_arr = np.array([])
for i in range(4):
    w_a_arr = np.append(w_a_arr, data['Wilderness_Area' + str(i + 1)].sum())
    
fig, ax = plt.subplots(figsize=(9, 5), subplot_kw=dict(aspect="equal"))

labels = ['Rawah ' + str(int(w_a_arr[0])), 
          'Neota ' + str(int(w_a_arr[1])), 
          'Comanche Peak ' + str(int(w_a_arr[2])), 
          'Cache la Poudre ' + str(int(w_a_arr[3]))]
data = w_a_arr

def func(pct, allvals):
    absolute = int(pct/100.*np.sum(allvals))
    return "{:.1f}%\n({:d} g)".format(pct, absolute)

wedges, texts, autotexts = ax.pie(data, autopct='%1.1f%%', textprops=dict(color="w"))

ax.legend(wedges, labels,
          title="Quantidade de exemplos por área selvagem",
          loc="center left",
          bbox_to_anchor=(1, 0, 0.5, 1))

plt.setp(autotexts, size=8, weight="bold")

ax.set_title("Origem dos exemplos", fontsize = 14)

plt.show()<jupyter_output><empty_output><jupyter_text>**Atributo Tipo de Solo (colunas com o prefixo Soil_Type)**<jupyter_code>#Geração dos arrays necessários para o histograma dos tipos de solo
soil_type_arr_y = np.array([])
for i in range(40):
    soil_type_arr_y = np.append(soil_type_arr_y, data['Soil_Type' + str(i + 1)].sum())
    
soil_type_arr_x = np.array([])
for i in range(1, 41):
    for j in range(int(soil_type_arr_y[i - 1])):
        soil_type_arr_x = np.append(soil_type_arr_x, i)
        
fig = plt.figure()
ax1 = fig.add_subplot(111)
fig.set_size_inches(11, 5)

#Histograma representando a quantidade de exemplos para cada tipo de solo
plt.hist(soil_type_arr_x, bins=np.arange(42)-0.5, edgecolor='white')
plt.xticks(range(42))
ax1.set_title('Histograma do tipo de solo')
ax1.set_xlabel('Tipo de solo', fontsize=14)
ax1.set_ylabel('Quantidade de exemplos', fontsize=14)
plt.show()<jupyter_output><empty_output><jupyter_text>2. A partir da visualização elaborada, o que pode-se dizer a respeito do balanceamento do atributo-alvo? **Atributo alvo: Tipo de Cobertura Florestal (Cover_Type)**<jupyter_code>c_t_arr = data.groupby('Cover_Type').Cover_Type.count().to_numpy()

x = np.arange(1, 8, 1)

fig = plt.figure()

#Gráfico de barras representando a quantidade de exemplos para cada categoria de cobertura florestal
ax = fig.add_axes([0,0,1,1])
ax.bar(x, c_t_arr)
ax.set_title('Quantidade de exemplos por tipo de cobertura florestal')
ax.set_xlabel('Tipo de cobertura florestal', fontsize=14)
ax.set_ylabel('Quantidade de exemplos', fontsize=14)
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10550830295666262, 'fraction_numerical': 0.021938706628864588, 'mean_word_length': 5.076702214930271, 'pattern_counts': {'":': 0, '<': 93, '<?xml version=': 0, '>': 94, 'https://': 6, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '21', 'dir': 'jupyter-structured-clean-dedup', 'id': '40257', 'license': 'MIT', 'n_tokens_mistral': 5618, 'n_tokens_neox': 5330, 'n_words': 1467, 'path': 'notebooks/PP3.2 - Conhecendo o Conjunto de Dados.ipynb', 'repo_name': 'elloa-uea/projeto-pratico-3-rna-pp3-team-equilibrium', 'size': '14937'}