text: (window.webpackJsonp=window.webpackJsonp||[]).push([[41],{252:function(a,e,o){"use strict";o.r(e);var r=o(0),s=Object(r.a)({},function(){var a=this,e=a.$createElement,o=a._self._c||e;return o("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[o("h1",{attrs:{id:"criacao-de-um-experimento-preditivo"}},[a._v("Criação de um experimento preditivo")]),a._v(" "),o("p",[a._v("Agora que já finalizamos a apresentação básica da criação de um fluxo de trabalho, podemos aprofundar um pouco mais sobre a manipulação de fluxos, criando o nosso primeiro experimento completo. Neste experimento utilizaremos algoritmos de aprendizado de máquina para avaliar e prever o comportamento dos atributos da base de dados que carregamos anteriormente na Seção 2.")]),a._v(" "),o("p",[a._v("Ao final, construiremos um modelo, baseado em algoritmos capazes de analisar um conjunto de atributos e instâncias selecionados e, com isso, possivelmente encontrar padrões de comportamento nessa base de dados")]),a._v(" "),o("p",[a._v("A base de dados "),o("em",[a._v("Iris")]),a._v(" foi utilizada por R.A. Fisher em 1936 no clássico artigo "),o("em",[a._v("The Use of Multiple Measurements in Taxonomic Problems")]),a._v(". Essa base é modelada como um problema de classificação. Em um problema de classificação, a ideia é predizer a natureza desconhecida de uma observação (instância ou exemplo) baseando-se atributos previsores (características ou variáveis) que a descrevem, ou seja, uma coleção de medidas numéricas e/ou categóricas. A natureza desconhecida de uma observação é chamada de classe (rótulo, "),o("em",[a._v("class")]),a._v(" ou "),o("em",[a._v("label")]),a._v(").")]),a._v(" "),o("p",[a._v("Por exemplo, a base de dados Iris é composta por três espécies de flores do gênero Iris: Iris Setosa, Iris Versicolour ou Iris Virginica. Essas três espécies são a classe dessa base de dados. Além disso, cada espécie de flor Iris é composta por 50 observações, e por quatro atributos, que descrevem cada flor:\nSepal Length: Comprimento da sépala em cm;\nSepal Width: Largura da sépala em cm;\nPetal Length: Comprimento da pétala em cm,\nPetal Width: Largura da pétala em cm.")]),a._v(" "),o("p",[a._v("O que deseja-se para um algoritmo de classificação é predizer uma nova espécie de Iris, dentre as três possíveis (ris Setosa, Iris Versicolour ou Iris Virginica), dado esses quatro atributos.")]),a._v(" "),o("p",[a._v("Todo o processo de criação de um modelo que se baseie em aprendizado de máquina se inicia pelo estudo (estatístico) da base de dados. Precisamos conhecer melhor os dados para conseguir formalizar quais perguntas o nosso modelo será capaz de responder.\nA análise estatística sobre esses dados nos ajuda a compreender o relacionamentos entre os atributos e inferir informações sobre a base de dados. Assim, iremos à plataforma Lemonade para criar um fluxo de trabalho e adicionar algumas operações para gerar um sumário estatístico da base. Vamos criar um fluxo de trabalho com o nome  “Meu primeiro experimento preditivo”."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image38.png",alt:"Adicionar Novo Fluxos de Trabalho - Experimento Preditivo"}})]),a._v(" "),o("p",[a._v("Para sumarizar a base de dados, precisamos inicialmente ler os dados utilizando a operação "),o("strong",[a._v("Ler dados")]),a._v(". Ela está relacionada entre as opções encontradas na categoria de operações "),o("strong",[a._v("Entrada e saída")]),a._v(". Nesta categoria, encontramos todas as operações de entrada e saída das bases de dados e dos modelos. Para utilizarmos a operação de leitura, basta selecioná-la na aba de operações e arrastá-la para o grid. O mesmo deve ser feito com a operação Sumário estatístico, ligando as duas ao arrastar o plug de saída da operação "),o("strong",[a._v("Ler dados")]),a._v(" para o plug de entrada da operação "),o("strong",[a._v("Sumário estatístico")]),a._v(", como indicado na imagem.\n"),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image107.png",alt:"Ler dados - Sumário estatístico"}})]),a._v(" "),o("p",[a._v("Ao clicar na operação "),o("strong",[a._v("Ler dados")]),a._v(", a ferramenta disponibiliza uma aba a direita com todos os parâmetros de configuração. No campo "),o("strong",[a._v("Fonte de dados")]),a._v(", selecione a base “iris.csv”, que foi carregada da mesma forma que na Seção 2."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image46.png",alt:"Ler dados - Fonte de dados"}})]),a._v(" "),o("p",[a._v("A aba "),o("strong",[a._v("Execução")]),a._v(" contém os parâmetros de execução descritos a seguir.")]),a._v(" "),o("ul",[o("li",[o("strong",[a._v("Tratar esse valores como nulos (separe por vírgula)")]),a._v(": Esta funcionalidade é utilizada quando se é necessário corrigir/eliminar atributos do fluxo de dados;")]),a._v(" "),o("li",[o("strong",[a._v("Inferir esquema da fonte de dados")]),a._v(": Determina como os atributos serão inferidos pela operação. É recomendado que os atributos sejam inferidos da base de dados;")]),a._v(" "),o("li",[o("strong",[a._v("O que fazer em caso de dados inválidos")]),a._v(": Convert Invalid data to NULL. Determina como os atributos inválidos devem ser tratados. Neste caso definimos que todos os dados inválidos serão convertidos para "),o("strong",[a._v("NULO")]),a._v(" automaticamente;")])]),a._v(" "),o("p",[a._v("A aba "),o("router-link",{attrs:{to:"/pt-br/spark/documentacao-geral/aba-aparencia.html"}},[a._v("Aparência")]),a._v(" nos permite mudar as cores das caixas das operação e inserir comentários. A aba "),o("router-link",{attrs:{to:"/pt-br/spark/documentacao-geral/aba-resultados.html"}},[a._v("Resultados")]),a._v(" nos permite manipular quais informações serão exibidas após a execução. Para este caso selecionamos as opções:")],1),a._v(" "),o("ul",[o("li",[o("strong",[a._v("Exibir amostras das saídas")]),a._v(": permite visualizar uma prévia dos dados;")]),a._v(" "),o("li",[a._v("Exibir esquema/dicionário das saídas**: exibe o formato dos dado de cada atributo;")]),a._v(" "),o("li",[o("strong",[a._v("Exibir relatórios textuais (se disponíveis)")]),a._v(": exibe relatórios de texto caso disponíveis. Esses relatórios geralmente estão vinculados a resultados de análise de algoritmos;")]),a._v(" "),o("li",[o("strong",[a._v("Exibir relatórios e gráficos (se disponíveis)")]),a._v(": exibe imagens e/ou gráficos quando disponíveis;")])]),a._v(" "),o("p",[a._v("Agora é o instante de definir a operação para o cálculo do "),o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/sumario-estatistico.html"}},[a._v("Sumário Estatístico")]),a._v(" da base. Ela se encontra no conjunto "),o("strong",[a._v("Visualização de Dados")]),a._v("."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image59.png",alt:"Operações - Sumário estatístico"}})],1),a._v(" "),o("p",[a._v("O único parâmetro que vamos definir é o nome da tabela de sumário. Ao executar o fluxo temos o resultado."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image13.png",alt:"Resultado - Leitura do Sumário Estatístico"}}),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image15.png",alt:"Resultado - Fluxo da Leitura do Sumário Estatístico"}}),o("br"),a._v("\nNa aba visualizações, temos o resultado do Sumário estatístico:"),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image6.png",alt:"Tabela - Resultado da Leitura do Sumário Estatístico"}}),o("br"),a._v("\nO principal objetivo dessa etapa é fazer com que o usuário conheça os atributos da sua base e seja capaz fazer perguntas que nosso modelo tenha condições de responder. Ele será capaz de analisar as características e relacionamentos dos diferentes atributos e predizer um resultado. Agora que já definimos um pouco da teoria, vamos direto à análise da base Íris.")]),a._v(" "),o("h3",{attrs:{id:"o-que-nos-podemos-tentar-predizer"}},[a._v("O que nós podemos tentar predizer?")]),a._v(" "),o("p",[a._v("A partir da análise dos "),o("em",[a._v("atributos")]),a._v(" de cada registro (linha) podemos predizer a qual espécie aquele exemplar pertence. Logo, podemos concluir que o comprimento e a largura da pétala e sépala são os atributos, enquanto a classe da espécie é o "),o("em",[a._v("rótulo")]),a._v(".")]),a._v(" "),o("p",[a._v("No "),o("strong",[a._v("Lemonade")]),a._v(", todas as operações relacionadas ao aprendizado de máquinas estão baseadas no "),o("a",{attrs:{href:"https://spark.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[a._v("Apache Spark Framework"),o("OutboundLink")],1),a._v(", logo precisamos formatar as operações do fluxo de forma que os parâmetros se adequem a seguinte estrutura de dados."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image9.png",alt:"Diagrama de funcionamento"}}),o("br"),a._v("\nPortanto a próxima etapa do nosso experimento consiste no treinamento e avaliação de um modelo de classificação. Cada modelo é formado pela estrutura de dados e um algoritmo de aprendizado de máquina. Ao final, o nosso modelo será avaliado utilizando um processo de validação cruzada ou "),o("em",[a._v("Cross-validation ML process")]),a._v(".")]),a._v(" "),o("h3",{attrs:{id:"extracao-de-atributos-extract-features"}},[a._v("Extração de atributos (Extract features)")]),a._v(" "),o("p",[a._v("Para construir um modelo de classificação, primeiramente precisamos extrair todos os atributos que mais contribuem para classificação dos dados. "),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image8.png",alt:"Fluxo - Extrair Atributos"}})]),a._v(" "),o("p",[a._v("Na base de dados Iris, a espécie das flores é rotulada "),o("em",[a._v("(labeled)")]),a._v(" em 3 classes: "),o("strong",[a._v("iris-virginica")]),a._v(", "),o("strong",[a._v("iris-setosa")]),a._v(", "),o("strong",[a._v("iris-versicolor")]),a._v(", enquanto os atributos são definidas pelos tamanho e largura da sépala e da pétala: "),o("strong",[a._v("sepal length")]),a._v(", "),o("strong",[a._v("sepal width")]),a._v(", "),o("strong",[a._v("petal length")]),a._v(", "),o("strong",[a._v("petal width")]),a._v(".\\")]),a._v(" "),o("p",[a._v("Para que a classe ou espécie possa ser utilizada pelos algoritmos de "),o("em",[a._v("machine learning")]),a._v(", precisamos inicialmente converter os valores categóricos das 3 classes em um valor numérico. Os algoritmos sempre recebem como parâmetros vetores numéricos. Utilizaremos a operação de "),o("router-link",{attrs:{to:"/pt-br/spark/pre-processamento-de-dados/representacao-de-atributos-converter-categorico-para-numerico.html"}},[a._v("Converter categórico para numérico")]),a._v(" no grupo de "),o("strong",[a._v("Pré-processamento de dados")]),a._v(", para converter o atributo "),o("strong",[a._v("class")]),a._v(". O atributo resultante terá o nome "),o("strong",[a._v("class_index")]),a._v("."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image98.png",alt:"Tabela - Converter categórico para numérico"}})],1),a._v(" "),o("p",[a._v("Podemos utilizar uma operação de transformação nos dados filtrando os valores de "),o("strong",[a._v("label")]),a._v(" em cada uma das classes presentes na base. Vale observar que é apenas uma operação de manipulação e não caracteriza o modelo de treinamento e avaliação que desejamos criar. Sua finalidade é apenas a visualização dos atributos criados na etapa de "),o("strong",[a._v("extração de atributos")]),a._v(". A classe “Iris-setosa” recebeu o valor 0 como class_index. A classe “Iris-versicolor” recebeu o valor 1 como "),o("strong",[a._v("class_index")]),a._v(". A classe “Iris-virginica” recebeu o valor 2 como "),o("strong",[a._v("class_index")]),a._v("."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image28.png",alt:"Fluxo - Filtrar por função"}}),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image70.png",alt:"Resultado - Tabela Filtrar por função 3"}}),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image94.png",alt:"Resultado - Tabela Filtrar por função 4"}}),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image50.png",alt:"Resultado - Tabela Filtrar por função 5"}})]),a._v(" "),o("h3",{attrs:{id:"treinamento-do-modelo-train-model"}},[a._v("Treinamento do Modelo (Train Model)")]),a._v(" "),o("p",[a._v("Depois da extração dos atributos da base de dados entramos na fase do treinamento do modelo. Para treinar, precisamos inicialmente dividir os dados em duas partes: uma parte vai ser destinada ao treinamento (conjunto de treinamento) e outra a sua avaliação (conjunto de teste).\n"),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image81.png",alt:"Diagrama - Modelo de Treinamento"}})]),a._v(" "),o("h3",{attrs:{id:"fluxo-do-conjunto-de-treinamento"}},[a._v("Fluxo do conjunto de treinamento")]),a._v(" "),o("p",[a._v("Nessa parte do "),o("em",[a._v("workflow")]),a._v(", a operação "),o("strong",[a._v("Dividir")]),a._v(" (na seção de Transformação de Dados), será ligada à saída da operação "),o("strong",[a._v("Converter categórico para numérico")]),a._v(".\n"),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image84.png",alt:"Conjunto de treinamento"}})]),a._v(" "),o("p",[a._v("O treinamento ocorre a partir de um algoritmo de análise. No nosso exemplo utilizaremos o algoritmo de classificação "),o("router-link",{attrs:{to:"/pt-br/spark/aprendizado-de-maquina/classificacao-arvore-de-decisao.html"}},[a._v("Árvore de Decisão")]),a._v(".")],1),a._v(" "),o("p",[a._v("Além do fluxo completo, segue abaixo cada uma das operações com seus parâmetros principais.")]),a._v(" "),o("h3",{attrs:{id:"divisao-percentual"}},[o("router-link",{attrs:{to:"/pt-br/spark/pre-processamento-de-dados/amostragem-divisao-percentual.html"}},[a._v("Divisão Percentual")])],1),a._v(" "),o("p",[o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image89.png",alt:"Divisão Percentual"}}),o("br"),a._v("\nDivide o fluxo de dados em duas partes que podem ser definidas movendo o indicador de peso. No nosso exemplo separamos 50% dos dados para treinamento e 50% para testes.")]),a._v(" "),o("h3",{attrs:{id:"arvore-de-decisao"}},[o("router-link",{attrs:{to:"/pt-br/spark/aprendizado-de-maquina/classificacao-arvore-de-decisao.html"}},[a._v("Árvore de Decisão")])],1),a._v(" "),o("p",[o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image12.png",alt:"Árvore de Decisão"}}),o("br"),a._v("\nSelecionamos todos os atributos mencionados na etapa anterior como parâmetros de entrada. O objetivo da operação é permitir o processo de treinamento, criando o modelo de classificação. A saída do modelo é o resultado de predição do modelo armazenado na variável "),o("strong",[a._v("resultado")]),a._v(". Como este tutorial é destinado a usuários iniciantes não entraremos em detalhes quanto ao significado dos outros parâmetros utilizados neste classificador. Utilizamos sua versão padrão, sem modificar os parâmetros iniciais. Informações mais aprofundadas podem ser encontradas no manual das operações de classificação.")]),a._v(" "),o("h3",{attrs:{id:"aplicar-modelo"}},[o("router-link",{attrs:{to:"/pt-br/spark/modelo-e-avaliacao/aplicar-modelo.html"}},[a._v("Aplicar Modelo")])],1),a._v(" "),o("p",[a._v("Após a criação e o treinamento do modelo é o momento de aplicar o modelo ao restante dos dados da base. Para isso, utilizaremos a operação "),o("strong",[a._v("Aplicar modelo")]),a._v(", pertencente à seção de "),o("strong",[a._v("Modelo e Avaliação")]),a._v(". O nosso objetivo é realizar a predição do resultado para esta parte dos dados e posteriormente avaliar o resultado. Os parâmetros que utilizamos são os atributos "),o("em",[a._v("petal length")]),a._v(", "),o("em",[a._v("petal width")]),a._v(", "),o("em",[a._v("sepal length")]),a._v(" e "),o("em",[a._v("sepal width")]),a._v(", e a variável resultado da predição "),o("em",[a._v("(resultado)")]),a._v("."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image22.png",alt:"Aplicar Modelo"}})]),a._v(" "),o("h3",{attrs:{id:"avaliacao-de-modelo-evaluate-model"}},[a._v("Avaliação de modelo (Evaluate model)")]),a._v(" "),o("p",[a._v("Será que um algoritmo de classificação que use árvore de decisão foi a melhor opção para este volume de dados? É o que analisaremos na próxima etapa. Para finalizar o nosso experimento precisamos avaliar o nosso modelo. Para isso basta adicionar a operação "),o("router-link",{attrs:{to:"/pt-br/spark/modelo-e-avaliacao/avaliar-modelo.html"}},[a._v("Avaliar Modelo")]),a._v(" nas saídas das operações "),o("strong",[a._v("Árvore de decisão")]),a._v(" e "),o("strong",[a._v("Aplicar Modelo")]),a._v(". O papel dessa operação é comparar os resultados do modelo com os valores originais, e apresentar uma nota ("),o("em",[a._v("score")]),a._v(") de aproveitamento. Esta nota varia de acordo com o tipo de métrica usada na avaliação do modelo. Para o exemplo em questão utilizamos "),o("strong",[o("em",[a._v("accuracy")])]),a._v(", aplicada para atributos multiclasse. Não entraremos em detalhes na especificação dos atributos da operação. Maiores informações podem ser encontradas nas documentações das operações.")],1),a._v(" "),o("h3",{attrs:{id:"avaliar-modelo"}},[o("router-link",{attrs:{to:"/pt-br/spark/modelo-e-avaliacao/avaliar-modelo.html"}},[a._v("Avaliar Modelo")])],1),a._v(" "),o("p",[o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image45.png",alt:"Avaliar Modelo"}}),o("br"),a._v("\nApós a execução, podemos acessar os resultados da avaliação do modelo na aba Resultados. Na avaliação da acurácia do algoritmo, encontrando o valor "),o("strong",[a._v("0.96")]),a._v(".  A medida de acurácia geralmente é o ponto de partida para a análise de um modelo. Ela equivale ao número de predições corretas dividida pelo número total de predições realizadas. Se calcularmos a porcentagem da acurácia temos "),o("strong",[a._v("96%")]),a._v("."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image97.png",alt:"Resultado da Avaliação"}}),o("br"),a._v("\nPara completar a avaliação e evitar qualquer ambiguidade, visto que diferentes algoritmos podem apresentar valores bem diversos de acurácia, a análise dos resultados por meio da matriz de confusão é uma alternativa."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image30.png",alt:"Matriz de confusão"}}),o("br"),a._v("\nAvaliando a matriz de confusão, gerada pela ferramenta, podemos verificar que o algoritmo que escolhemos para o modelo consegue um excelente resultado em predizer o comportamento da base teste. A quantidade de verdadeiros positivos foi muito superior em relação à quantidade de falsos negativos na detecção das espécies, comprovando o valor encontrado de acurácia na tabela anterior. Deixo com você a tarefa de realizar este mesmo experimento com outros algoritmos, e avaliando a acurácia dos mesmos em busca de um modelo ainda mais acertado. Há de se considerar a aleatoriedade em execuções de Aprendizado de Máquina, em todas as fases, seja na coleta dos dados, nos algoritmos em si ou nas amostras para o modelo e testes. Isso resulta em números de acurácia diferentes, mesmo com o mesmo conjunto de dados e modelo, em execuções diferentes.")]),a._v(" "),o("h3",{attrs:{id:"criacao-de-um-painel-de-visualizacoes"}},[a._v("Criação de um painel de visualizações")]),a._v(" "),o("p",[a._v("O uso de visualizações dinamiza o processo de análise de uma base de dados. Com gráficos, podemos encontrar padrões, reconhecer comportamentos desconhecidos e principalmente responder nossas dúvidas ou hipóteses. Uma visualização utiliza a comunicação visual para tornar mais perceptível o significado e o valor dos atributos.")]),a._v(" "),o("p",[a._v("O grande desafio do analista de dados é conseguir comunicar todas as informações que conseguiu extrair de uma visualização para seu público alvo. O objetivo do Lemonade é dar a qualquer analista a possibilidade de criar visualizações de forma simples e dinâmica, apresentando suas análises com velocidade, simplicidade e qualidade. Na figura abaixo estão os gráficos disponibilizados pelo Lemonade."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image35.png",alt:"Lista - Tipos de Gráficos"}})]),a._v(" "),o("p",[a._v("O Lemonade apresenta os seguintes tipos de visualização de dados:")]),a._v(" "),o("ul",[o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/grafico-de-area.html"}},[a._v("Gráfico de Área")]),a._v(" "),o("strong",[a._v("(Area chart)")]),a._v(": Este tipo de gráfico é baseado no gráfico de linhas, e a área entre o eixo e a linha é comumente enfatizada com cores, texturas e hachurados. Normalmente é utilizado para representar resultados acumulados ao longo do tempo, utilizando de números e porcentagens."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image64.png",alt:"Gráfico de área"}})],1)]),a._v(" "),o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/grafico-de-barra.html"}},[a._v("Gráfico de Barras")]),a._v(" "),o("strong",[a._v("(Bar chart)")]),a._v(": Este tipo de gráfico é composto por barras retangulares proporcionais aos valores que elas representam, e podem ser plotadas vertical ou horizontalmente. É utilizado para representar dados categóricos, isto é, um agrupamento de dados dividido em grupos discretos, como meses do ano."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image87.png",alt:"Gráfico de barras"}})],1)]),a._v(" "),o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/grafico-de-dispersao.html"}},[a._v("Gráfico de Dispersão")]),a._v(" "),o("strong",[a._v("(Scatter plot chart)")]),a._v(": Este tipo de gráfico utiliza de coordenadas cartesianas para exibir, tipicamente, valores de duas variáveis em um conjunto de dados. Se os pontos forem coloridos, é possível a exibição de mais uma variável."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image100.png",alt:"Gráfico de dispoersão"}})],1)]),a._v(" "),o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/grafico-de-linha.html"}},[a._v("Gráfico de Linha")]),a._v(" "),o("strong",[a._v("(Line chart)")]),a._v(": Este tipo de gráfico consiste em uma série de pontos de dados ligados por linhas retas. É utilizado para visualizar a tendência dos dados ao longo de intervalos de tempo, e é um dos mais comuns tipos de gráficos."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image58.png",alt:"Gráfico de dispersão"}})],1)]),a._v(" "),o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/grafico-de-pizza.html"}},[a._v("Gráfico de Pizza")]),a._v(" "),o("strong",[a._v("(Pie chart)")]),a._v(": É um gráfico estatístico circular, dividido em setores para ilustrar proporção numérica entre diversos valores acerca de um tópico. Não é recomendado quando se trata de um número muito grande de setores, já que a visualização se torna confusa e pouco significativa."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image2.png",alt:"Gráfico de pizza"}})],1)]),a._v(" "),o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/grafico-de-rosca.html"}},[a._v("Gráfico de Rosca")]),a._v(" "),o("strong",[a._v("(Donut chart)")]),a._v(": Este tipo de gráfico é uma variante do gráfico de pizza com uma lacuna em seu centro, o que possibilita a adição de mais informações sobre os dados como um todo."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image43.png",alt:"Gráfico de Rosca"}})],1)]),a._v(" "),o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/publicar-como-dashboard.html"}},[a._v("Publicar como dashboard")]),a._v(": Pública as visualizações ligadas a ela em um quadro, chamado de Dashboard, e acessível no menu principal, à esquerda.")],1)]),a._v(" "),o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/sumario-estatistico.html"}},[a._v("Sumário Estatístico")]),a._v(": É uma tabela que contém análises estatísticas acerca dos dados trabalhados.")],1)]),a._v(" "),o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/mapa.html"}},[a._v("Visualização em mapa")]),a._v(": Retrata os dados em um mapa, quando fornecidos dados de latitude e longitude, além de dados quantitativos.\n"),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image49.png",alt:"Visualizar em um mapa"}})],1)]),a._v(" "),o("li",[o("p",[o("router-link",{attrs:{to:"/pt-br/spark/visualizacao-de-dados/tabela.html"}},[a._v("Visualização em tabela")]),a._v(": Uma tabela que mostra a base de dados, similar à primeira caixa da aba "),o("strong",[a._v("Resultados")]),a._v(" dos parâmetros das operações.")],1)])]),a._v(" "),o("p",[a._v("Utilizaremos alguns deles nos exemplos que seguirão. Mais informações podem ser encontradas nas documentações das operações.")]),a._v(" "),o("p",[a._v("Para tornar essa parte da documentação interessante utilizamos nos nossos exemplos a base Titanic, utilizada em umas das competições do site Kaggle: "),o("a",{attrs:{href:"https://www.kaggle.com/c/titanic",target:"_blank",rel:"noopener noreferrer"}},[a._v("Kaggle Competition - Titanic Machine Learning from Disaster"),o("OutboundLink")],1),a._v(" (o arquivo que utilizaremos será o de treinamento, train.csv).")]),a._v(" "),o("p",[a._v("Diz o site:")]),a._v(" "),o("div",{staticClass:"tip custom-block"},[o("p",[a._v("O naufrágio do RMS Titanic é um dos naufrágios mais famosos da história. Em 15 de abril de 1912, durante sua viagem inaugural, o Titanic afundou depois de colidir com um iceberg, matando 1502 de 2224 passageiros e tripulantes. Essa tragédia sensacional chocou a comunidade internacional e levou a melhores normas de segurança para os navios.")]),a._v(" "),o("p",[a._v("Uma das razões pelas quais o naufrágio levou a uma perda de vidas era que não havia botes salva-vidas suficientes para os passageiros e tripulantes. Embora houvesse algum elemento de sorte envolvido na sobrevivência do naufrágio, alguns grupos de pessoas eram mais propensos a sobreviver do que outros, como mulheres, crianças e a classe alta.\nNeste desafio, pedimos que você complete a análise de que tipos de pessoas provavelmente sobrevivem. Em particular, pedimos que você aplique as ferramentas de aprendizado de máquina para prever quais passageiros sobreviveram à tragédia.")])]),a._v(" "),o("p",[a._v("Não construiremos o modelo de predição da tragédia requerido na competição, porém você pode utilizar o nosso exemplo anterior: "),o("strong",[a._v("Criando meu primeiro experimento predictivo")]),a._v(" para testar seus conhecimentos em "),o("strong",[a._v("aprendizado de máquina")]),a._v(".")]),a._v(" "),o("p",[a._v("Vamos tentar tirar algumas informações interessantes dos dados e formatá-los por meio de visualizações. Para tornar o nosso processo mais dinâmico, vou deduzir que você já sabe carregar a base para o lemonade. Se ainda não sabe, volte duas seções e dê uma lida na seção de "),o("strong",[a._v("Importação de base de dados")]),a._v(". Pode acontecer que os nomes dos atributos utilizados para o nosso exemplo sejam diferentes dos que você escolher, mas o importante é o entendimento do processo. Também vou deduzir que você sabe criar um novo "),o("em",[a._v("workflow")]),a._v(" e já entende seu funcionamento. O formato do "),o("em",[a._v("workflow")]),a._v(" que construiremos será o seguinte:"),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image111.png",alt:"Workflow formado"}})]),a._v(" "),o("h4",{attrs:{id:"carregamento-da-base-e-consistencia-dos-dados"}},[a._v("Carregamento da base e consistência dos dados")]),a._v(" "),o("p",[a._v("Inicialmente precisamos carregar a base que importamos. Para manter o dinamismo do nosso processo, optamos por fazer a consistência dos dados eliminando qualquer linha que apresente qualquer problema. Você pode optar por verificar os casos de erro e fazer as alterações necessárias."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image92.png",alt:"Ler dados - Carregamento da base de dados"}})]),a._v(" "),o("p",[a._v("Vamos dar um "),o("em",[a._v("preview")]),a._v(" dos atributos da base para analisar a formatação dos dados (marcando a primeira caixa na aba "),o("strong",[a._v("Resultados")]),a._v(" nos "),o("strong",[a._v("Parâmetros da Tarefa")]),a._v(")."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image104.png",alt:"Tabela - Carregamento da base de dados"}})]),a._v(" "),o("p",[a._v("Como o objetivo dessa documentação é apenas ensinar ao usuário como criar visualizações, escolhemos por remover todas as linhas as quais os valores são nulos ou ausentes."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image23.png",alt:"Tratar dados ausentes"}})]),a._v(" "),o("p",[a._v("Vamos começar com gráficos mais simples e que exigirão menor esforço na criação do fluxo. Vamos criar um gráfico de pizza e um gráfico de rosca ("),o("em",[a._v("donut")]),a._v(" ) que nos responda o número de sobreviventes e mortos respectivamente, para este fragmento de base."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image36.png",alt:"Fluxo para gráfico de pizza e rosca"}}),o("br"),a._v("\nPara gerar os gráficos, precisamos manipular os dados selecionando os atributos que vão compor os eixos. Para este exemplo, precisaremos do atributos "),o("strong",[a._v("Pclass")]),a._v(" e "),o("strong",[a._v("Survived")]),a._v(". Vamos dar uma olhada na operação de agregação: "),o("strong",[a._v("Agrupar linhas por função")]),a._v(". Precisamos contar os sobreviventes e mortos por cada uma das classes."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image21.png",alt:"Agrupar linhas por função"}}),o("br"),a._v("\nPara contar o número de sobreviventes e mortos por classe precisamos utilizar o atributo "),o("strong",[a._v("Survived")]),a._v(" como pivô, isto é os valores de "),o("strong",[a._v("Survived")]),a._v(" serão sumarizados em uma tabela agregada por classe. Isto explica porque os valores "),o("strong",[a._v("0")]),a._v(" e "),o("strong",[a._v("1")]),a._v(" foram inseridos na caixa "),o("strong",[a._v("Atributo usado como pivô")]),a._v(". O resultado dessa operação pode ser visto em sequência no "),o("em",[a._v("preview")]),a._v("."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image79.png",alt:"Resultado - Agrupar linhas por função"}})]),a._v(" "),o("p",[a._v("Agora basta selecionar os atributos e criar as visualizações. O gráfico de rosca vai representar o número mortos por cada classe."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image16.png",alt:"Seleção do gráfico de rosca"}})]),a._v(" "),o("p",[o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image109.png",alt:"Resultado - Gráfico de rosca"}})]),a._v(" "),o("p",[a._v("Cada cor do gráfico representa o número de mortos por classe. Deixo a você a tarefa de analisar quantos tripulantes embarcaram por classe e quais a percentagem de mortos em relação ao total. Será que os passageiros da terceira classe tiveram um número relativo de mortos maior que os passageiros da segunda e primeira classe?")]),a._v(" "),o("p",[a._v("Agora vamos para o gráfico de pizza, ele apresenta o número de sobreviventes por classe."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image56.png",alt:"Seleção do gráfico de pizza"}})]),a._v(" "),o("p",[o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image75.png",alt:"Resultado - Gráfico de pizza"}})]),a._v(" "),o("p",[a._v("Os nossos dois últimos exemplos vão apresentar gráficos de barras e linhas respectivamente. O Lemonade permite que várias séries de dados sejam representados num mesmo gráfico permitindo que o analista seja capaz de apresentar comparações e comportamentos de mais de um grupo de informação.")]),a._v(" "),o("p",[a._v("Nesse exemplo, vamos construir um gráfico de barras que apresenta o número viajantes por classe organizados por sexo. Será que nesse desastre o número relativo de mulheres e homens foram muito diferentes para cada classe? Vamos tentar achar a resposta na análise do gráfico."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image80.png",alt:"Fluxo para gráfico de barras e linhas"}})]),a._v(" "),o("p",[a._v("Inicialmente, vamos começar por agregar os dados pelos dois atributos que desejamos avaliar: "),o("strong",[a._v("Pclasse")]),a._v(" e "),o("strong",[a._v("Sexo")]),a._v(". A ideia é a mesma dos gráficos anteriores, utilizaremos a operação "),o("strong",[a._v("Agrupar linhas por função")]),a._v(": vamos agregar por classe, usar o gênero como pivot e contar a quantidade de homens e mulheres."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image65.png",alt:"Agrupar linhas por função"}})]),a._v(" "),o("p",[a._v("Vamos ver um "),o("em",[a._v("preview")]),a._v(" do resultado."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image39.png",alt:"Preview do resultado"}}),o("br"),a._v("\nPronto. Agora basta ordenar os resultados por classe e plotar o gráfico de barras. Para ordenar utilizamos a operação "),o("strong",[a._v("Ordenar")]),a._v("."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image77.png",alt:"Ordenar resultado"}})]),a._v(" "),o("p",[a._v("Em seguida, selecione a operação "),o("strong",[a._v("Gráfico de barras")]),a._v(" para plotar as duas séries de dados, uma para "),o("em",[a._v("male")]),a._v(" e outra para "),o("em",[a._v("female")]),a._v(".\n"),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image48.png",alt:"Selecionar gráfico de barras"}}),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image1.png",alt:"Resultado gráfico de barras"}})]),a._v(" "),o("p",[a._v("Vamos completar o nosso gráfico anterior com a seguinte análise: Quantas pessoas morreram por idade? As mortes aumentaram com o aumento da idade? Idosos e crianças foram resgatadas primeiro? É o que vamos tentar responder com nosso gráfico de linhas. Note que, este fluxo vai ser mais complexo que os exemplos anteriores, vamos definir uma idade mínima. Isso é importante para tornar a manipulação dos dados mais dinâmica e diminuir o tempo gasto em operações de tratamento dos dados."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image34.png",alt:"Novos filtros"}}),o("br"),a._v("\nA primeira operação do nosso fluxo vai ser um filtro para idades acima de 1 ano. Para criar um filtro basta utilizar a operação "),o("strong",[a._v("Filtrar")]),a._v("."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image103.png",alt:"Filtrar por função"}}),o("br"),a._v("\nEm seguida, vamos agregar o fluxo de dados por idade e fazer o pivot pelos sobreviventes. Ao final teremos o número de mortos e sobreviventes por idade."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image18.png",alt:"Agrupar linhas por função"}}),o("br"),a._v("\nÉ uma boa prática de desenvolvimento sempre visualizar o resultado de uma operação complexa."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image20.png",alt:"Preview da filtrage"}}),o("br"),a._v("\nPodemos observar dois aspectos interessantes: o primeiro é que as idades não são lineares e o segundo é se o número de sobreviventes para alguma delas foi nulo. Logo precisamos realizar mais algumas transformações nesses dados antes de desenhar o nosso gráfico.")]),a._v(" "),o("p",[a._v("Vamos começar por substituir os valores nulos por zero. E para isso vamos utilizar a operação "),o("strong",[a._v("Tratas dados ausentes")]),a._v("."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image106.png",alt:"Tratar dados ausentes"}})]),a._v(" "),o("p",[a._v("Uma forma de tornar a coluna das idades linear é mudar a escala para desenharmos o eixo das idades no gráfico. No nosso exemplo, vamos escolher que a idade seja formada por múltiplos de 5, isto equivale a diminuir o “zoom” de visualização das linhas. Utilizaremos uma operação nova: "),o("strong",[a._v("Transformar valores por função")]),a._v(". Essa operação nos permite utilizar diretamente as funções da "),o("em",[a._v("api")]),a._v(" do "),o("em",[a._v("spark")]),a._v(". (para ter acesso a lista das operações disponíveis, acesse a documentação completa para cada operação) Neste exemplo, utilizaremos a função "),o("em",[a._v("round")]),a._v(" para arredondar o resultado da operação de divisão do valor absoluto de cada idade por 5 (lembre-se da nova escala), o que resulta na parte inteira do resultado da divisão a ser multiplicado por 5. (múltiplos)"),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image69.png",alt:"Transformar valore por função"}})]),a._v(" "),o("p",[a._v("Essa parte pode ter ficado um pouco confusa. Por isso, lembre-se que podemos ver um preview dos dados e esclarecer qualquer dúvida."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image63.png",alt:"Preview do trasnformamento por função"}})]),a._v(" "),o("p",[a._v("Se alteramos o valor do eixo das idades, precisamos normalizar a contagem do número de sobreviventes para cada idade absoluta. Vamos somar todos os sobreviventes de cada idade absoluta e agregar pela idade relativa na nossa nova escala."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image108.png",alt:"Agrupar linhas por função"}})]),a._v(" "),o("p",[a._v("Agora o preview de tudo o que fizemos até agora."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image108.png",alt:"Tabela de resultados das transformações"}})]),a._v(" "),o("p",[a._v("Vamos agora ordenar a coluna das idades."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image108.png",alt:"Ordenar por idade"}})]),a._v(" "),o("p",[a._v("Agora basta utilizar a operação "),o("strong",[a._v("Gráfico de linha(s)")]),a._v(" para gerar o gráfico de linhas. É importante ressaltar que temos duas séries de dados para o eixo Y que correspondem ao número de mortos e sobreviventes por idade."),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image14.png",alt:"Selecionar gráfico de linhas"}}),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image10.png",alt:"Resultado do gráfico de linhas"}})]),a._v(" "),o("p",[a._v("Para finalizar, vamos criar um painel (dashboard) e inserir nossas visualizações. Este painel vai nos permitir acessar nossas visualizações diretamente, sem a necessidade de re-executar nosso fluxo de trabalho ou acessar diretamente uma execução. Para criarmos um painel de visualizações, basta adicionar todas nossas visualizações como entrada da operação "),o("strong",[a._v("Publicar como dashboard")]),a._v(". Seu único parâmetro é o título do painel"),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image11.png",alt:"Selecionar Dashboard"}}),o("br"),a._v(" "),o("img",{attrs:{src:"/img/spark/documentacao_geral/utilizacao_basica_da_plataforma_lemonade/image26.png",alt:"Resultado Dashboard"}})]),a._v(" "),o("p",[a._v("Com este painel terminamos a nossa documentação de introdução a utilização básica do Lemonade. Esperamos ter auxiliado no entendimento da ferramenta.")]),a._v(" "),o("hr"),a._v(" "),o("p",[a._v("Dúvidas e/ou sugestões envie um e-mail para suporte@lemonade.org.br")])])},[],!1,null,null,null);e.default=s.exports}}]);