<jupyter_start><jupyter_text>Redes Neurais Artificiais 2020.1**Disciplina**: Redes Neurais Artificiais 2020.1  **Professora**: <NAME> **Email**: <EMAIL>**Github**: http://github.com/elloa **Dupla**:  - <NAME>    **Email**: <EMAIL>    **GitHub**: https://github.com/userddssilva  - <NAME>    **Email**: <EMAIL>    **GitHub**: https://github.com/HiagoOliver 1. Explorando uma base de dadosNesta atividade prática iremos explorar a seguinte base de dados **_Forest Cover Type_**1. Obtenha esta base de dados no seguinte link: https://www.kaggle.com/uciml/forest-cover-type-dataset/download2. Consulte 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?<jupyter_code>## Reservado para a importação de bibliotecas
import pandas as pd
import numpy as np
import seaborn as sns
import warnings
import matplotlib.pyplot as plt
plt.style.use('ggplot')
warnings.filterwarnings("ignore")<jupyter_output><empty_output><jupyter_text>2. Respondendo as perguntas sobre os dados  2.1. O que é cada exemplo na base de dados?  - Nesta base de dados cada exemplo é composto por 54 atributos preditores e 1 atributo alvo, onde os atributos preditores são: Elevação em metros, Aspecto em graus azimute, Inclinação em graus, Distância horizontal para recursos hídricos superficiais mais próximos, Distância vertical para recursos de água de superfície mais próximos (m), Distância horizontal para a estrada mais próxima (m), Distância horizontal para a estrada mais próxima (m), Uma medida relativa da luz solar incidente às 09:00 h no solstício de verão (índice), Uma medida relativa da luz solar incidente ao meio-dia no solstício de verão (índice), Uma medida relativa da luz solar incidente às 15:00 h no solstício de verão (índice), Distância horizontal para o ponto de ignição do incêndio florestal histórico mais próximo (m), Designação de área selvagem (quatro valores binários, um para cada área selvagem) e Designação do tipo de solo (40 valores binários, um para cada tipo de solo). **Tais exemplos são dados referentes a observações reais de células de 30 x 30 metros**, o tipo de cobertura florestal real foi determinado a partir dos dados do Sistema de Informação de Recursos da Região 2 (RIS) do Serviço Florestal dos EUA (USFS). E as variáveis independentes foram derivadas de dados originalmente obtidos do US Geological Survey (USGS) e de dados do USFS.   2.2. Em que ano ela foi obtida?- Obteve-se a base de dados no ano de 1998.  2.3. Quem foram os responsáveis pela criação desta base de dados?- **<NAME> (<EMAIL>)**GIS CoordinatorUSFS - Forest Inventory & AnalysisRocky Mountain Research Station507 25th StreetOgden, UT 84401- **Dr. <NAME> (<EMAIL>)**ProfessorProgram in Geography and Geospatial SciencesSchool of Economic, Political and Policy Sciences800 West Campbell RdRichardson, TX 75080-3021- **Dr. <NAME> (<EMAIL>)**Associate ProfessorDepartment of Computer ScienceColorado State UniversityFort Collins, CO 80523 USA  3. 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  3.1. Abra a base de dados com o pandas<jupyter_code>base = pd.read_csv('../base de dados/covtype.csv')<jupyter_output><empty_output><jupyter_text>3.2. Imprima os 10 primeiros exemplos pertencentes à esta base<jupyter_code>base.head(10)<jupyter_output><empty_output><jupyter_text>3.3. Imprima os 10 últimos exemplos pertencentes à esta base<jupyter_code>base.tail(10)<jupyter_output><empty_output><jupyter_text>3.4 Quantos exemplos esta base de dados possui?- Essa base de dados é composta por 581012 exemplos como é possível visualizar com o método \_\_len\_\_(), que retorna o a quantidade de linhas do dataset, isto é, a auantidade de exemplos.<jupyter_code>base.__len__()<jupyter_output><empty_output><jupyter_text>3.5 Quais são os atributos que a base de dados possui e quais seus tipos? - De acordo com a documentação (https://archive.ics.uci.edu/ml/datasets/covertype) os atribuitos podem ser descritos conforme tabela abaixo.|Nome | Tipo de dados | Medição | Inscrição||--------------|--------------|--------------|--------------||Elevação | quantitativos | metros | Elevação em metros||Aspecto | quantitativa | azimute | Aspect em graus azimute||Slope | quantitativa | graus | Slope em graus||Horizontal_Distance_To_Hydrology | quantitativos | metros | Horz Dist a água de superfície mais próxima apresenta||Vertical_Distance_To_Hydrology | quantitativo | metros | Dist. Vert para características de água de superfície mais próximas||Horizontal_Distance_To_Roadways | quantitativo | metros | Dist. Horz para rodovia mais próxima||Hillshade_9am | quantitativo | índice de 0 a 255 | índice de Hillshade às 9h, solstício de verão||Hillshade_Noon | quantitativo | índice de 0 a 255 | Índice de Hillshade ao meio-dia, soltice de verão||Hillshade_3pm | quantitativo | índice de 0 a 255 | Índice de Hillshade às 3pm, solstício de verão||Horizontal_Distance_To_Fire_Points | quantitativo | metros | Horz Dist para os pontos de ignição do incêndio florestal mais próximos||Wilderness_Area (4 colunas binárias) | qualitativa | 0 (ausência) ou 1 (presença) | Designação da área selvagem||Soil_Type (40 colunas binárias) | qualitativa | 0 (ausência) ou 1 (presença ) | Designação do tipo de solo||Cover_Type (7 tipos) | inteiro | 1 a 7 | Designação do tipo de cobertura florestal| - A quantidade de atribuitos são: 54 atributos preditores e 1 atributo alvo.- Ao efetuar a leitura do arquivo que contém a base de dados a lib pandas atribuiu automaticamente um tipo a cada coluna da base de dados, neste caso o tipo foi um inteiro (int64), visto a seguir.<jupyter_code>base.dtypes<jupyter_output><empty_output><jupyter_text>6. Há algum dado faltante na base?- Não há dado faltante na base de dados, para confirmar a esta afirmação primeiro se faz uso do método isnull() que detecta os valores faltantes no dataframe seguido do método sum() que soma os valores positivos retornados do primeiro método. Como se verifica a soma dos dados faltantes é 0, idicando assim que não há dados nulos nas colunas.<jupyter_code>base.isnull().sum()<jupyter_output><empty_output><jupyter_text>3.7. De acordo com a documentação da base de dados, qual o significado dos atributos "Soil Type"?- Na documentação se identifica que as váriaveis com prefixo **Soil Type** são variáveis qualiativas com valores binários (0 ou 1) que indicam a presença (1) ou ausência (0) de um dos 40 tipos de solos presentes no dataset. 3.7.1. Este atributo é quantitativo ou qualitativo?- O atributo é divido em 40, e indicam se a célula possui ou não um dos tipos de solos da base de dados. O que revela a natureza **qualitativa** dos atributos. 3.7.2. Qual o tipo de codificação utilizada para denotar este atributo?-  Este atributo assim como o atributo Wilderness Area usam o tipo de codificação "one hot encoding", que consiste em converter cada valor de categoria em uma nova coluna e atribuir um valor 1 ou 0 (Verdadeiro / Falso) à coluna. Isso tem a vantagem de não ponderar um valor indevidamente, mas tem a desvantagem de adicionar mais colunas ao conjunto de dados.  4. 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 colunas 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  4.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 - A seguir tem-se a plotagem de três gráficos (Histograma, Scatter e Boxplot) para cada atributo quantitativo da base de dados.<jupyter_code>for col_name in base.columns:
    if 'Soil' not in col_name \
        and 'Wildern' not in col_name \
            and 'Cover_' not in col_name:
        #col_name = 'Elevation'
        fig, (ax1, ax2, ax3) = plt.subplots(1,3, figsize=(20,5))
        fig.suptitle('Atributo: ' + col_name)

        # graph 1
        ax1.title.set_text('Histograma: ' + col_name)
        ax1.hist(base[col_name], bins=1000)
        ax1.set_xlabel('Valores de ' + col_name)
        ax1.set_ylabel('Quantidade de ocorrências')

        # graph 2
        keys = base[col_name].value_counts().keys()
        values = base[col_name].value_counts().values
        ax2.title.set_text('Scatter: ' + col_name)
        ax2.scatter(keys, values)
        ax2.set_xlabel('Valores de ' + col_name)
        ax2.set_ylabel('Quantidade de ocorrências')

        # graph 3
        ax3.title.set_text('Boxplot: ' + col_name)
        ax3.boxplot(base[col_name], meanline=False)

        # statistical text
        s = ''
        for i, j in zip(keys, values):
            s = s + str(i)+': '+str(round(j,2))+'\n'
        props = dict(boxstyle='Sawtooth', facecolor='white', alpha=0.3, pad=.5)
        ax3.text(1.1, 1, s, transform=ax3.transAxes, fontsize=12, verticalalignment='top', bbox=props)
        ax3.set_xlabel('Valores de ' + col_name)
        plt.show()<jupyter_output><empty_output><jupyter_text>- Ao plotar os atributos qualitativos da mesma maneira que os quantitavos verficou-se que não fez muito sentido plotar de tal modo, por isso usou-se outras formas de plotar os dados qualitativos como os gráficos de barras.- A seguir temos a distribuição dos valores ausentes e presentes de cada atributo Wilderness Area plotado em um gráfico de barras.<jupyter_code>a1_values = base['Wilderness_Area1'].value_counts()
a2_values = base['Wilderness_Area2'].value_counts()
a3_values = base['Wilderness_Area3'].value_counts()
a4_values = base['Wilderness_Area4'].value_counts()

amount_zeros = [a1_values[0], a2_values[0], a3_values[0], a4_values[0]] 
amount_ones = [a1_values[1], a2_values[1], a3_values[1], a4_values[1]] 

# create plot
fig, ax = plt.subplots()
fig.set_figheight(6)
fig.set_figwidth(8)
index = np.arange(4)
bar_width = 0.35
opacity = 0.8

rects1 = plt.bar(index, amount_zeros, bar_width,
alpha=opacity,
#color='b',
label='Ausentes (0)')

rects2 = plt.bar(index + bar_width, amount_ones, bar_width,
alpha=opacity,
#color='g',
label='Presentes (1)')

plt.xlabel('Wilderness_Areas')
plt.ylabel('Quantidades')
plt.title('Atributos Wildeness_Area')
plt.xticks(index + (bar_width/2), ('Wilderness_Area1', 
                               'Wilderness_Area2',
                               'Wilderness_Area3',
                               'Wilderness_Area4'))
plt.legend()

plt.show()<jupyter_output><empty_output><jupyter_text>- Com a intensão de compreender melhor o atributo Wilderness Area, ou suas relações, plotou-se os valores desse atributo em conjunto com outros atributos como a elevação, segue o resuldado das visualizações.<jupyter_code>fig, ax = plt.subplots(1,4)
fig.set_figheight(6)
fig.set_figwidth(30)
sns.violinplot(x="Wilderness_Area1", y="Elevation", data=base,palette='rainbow', ax=ax[0])
sns.violinplot(x="Wilderness_Area2", y="Elevation", data=base,palette='rainbow', ax=ax[1])
sns.violinplot(x="Wilderness_Area3", y="Elevation", data=base,palette='rainbow', ax=ax[2])
sns.violinplot(x="Wilderness_Area4", y="Elevation", data=base,palette='rainbow', ax=ax[3])
fig.show()<jupyter_output><empty_output><jupyter_text>- Plotando um gráfico de barras para visualizar a distribuição dos dados em relação aos tipos de solos<jupyter_code>amount_zeros = []
amount_ones = []
soil_type = []
for col in base.columns:
    if 'Soil' in col:
        soil = base[col].value_counts()
        amount_zeros.append(soil[0])
        amount_ones.append(soil[1])
        soil_type.append(col)
# create plot
fig, ax = plt.subplots()
fig.set_figheight(5)
fig.set_figwidth(20)
index = np.arange(40)
bar_width = 0.45
opacity = 0.8

rects1 = plt.bar(index, amount_zeros, bar_width,
alpha=opacity,
#color='b',
label='Ausentes (0)')

rects2 = plt.bar(index + bar_width, amount_ones, bar_width,
alpha=opacity,
#color='g',
label='Presentes (1)')

plt.xlabel('Tipos de solos')
plt.ylabel('Quantidades de exemplos')
plt.title('Atributos de tipos de solo')
plt.xticks(index + (bar_width/2), soil_type, rotation=45)
plt.legend()
plt.show()<jupyter_output><empty_output><jupyter_text>- Visualizando a distribuição do atributo alvo- Como é possível identificar no gráfico há um grande número de ocorrências da classe 2 (Lodgepole Pine) seguido da classe 1 (Spruce/Fir) enquanto que as outras tem um número menor de exemplos indicando que a base de dados é desbalanceada. É possível ainda visualizar que a classe 4 (Cottonwood/Willow) é que menos possui exemplos na base de dados.<jupyter_code>plt.hist(base.Cover_Type, )
plt.xlabel("Cover Type")
plt.ylabel("Números de exemplos")
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09088981553466675, 'fraction_numerical': 0.02084953000212029, 'mean_word_length': 4.608402695204122, 'pattern_counts': {'":': 0, '<': 61, '<?xml version=': 0, '>': 61, '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': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '586646', 'license': 'MIT', 'n_tokens_mistral': 5053, 'n_tokens_neox': 4859, 'n_words': 1644, 'path': 'notebooks/PP3.2  - Conhecendo o Conjunto de Dados.ipynb', 'repo_name': 'elloa-uea/projeto-pratico-3-rna-pp3-team-hard', 'size': '14307'}