1
Linguagens de Programação
UMG
22
Linguagens de Programação
UMG
4
Linguagens de Programação
UMG
6
Linguagens de Programação
UMG
5
Linguagens de Programação
UMG
1
Linguagens de Programação
UMG
1
Linguagens de Programação
UMG
1
Linguagens de Programação
UMG
4
Linguagens de Programação
UMG
11
Linguagens de Programação
UMG
Texto de pré-visualização
Visualizando dados Uma abordagem baseada no ggplot2 Prof Dr Wagner Hugo Bonat 1 Estrutura e objetivos do módulo Estrutura do módulo Tour sobre recursos gráficos do R O pacote ggplot2 A gramática dos gráficos Dados Variáveis visuais Geometrias Facetas Estatísticas Coordenadas Tema Recursos adicionais e visualização interativa Introdução ao RMarkdown Projeto prático relatório httpswwwpexelscomphototopviewofpeopleatthemeeting3184287 Objetivos do módulo Conhecer os principais recursos para visualização de dados em R Compreender os princípios da gramática dos gráficos Dominar a sintaxe do ggplot2 para construção de gráficos Discussão sobre alguns recursos adicionais Gráficos interativos com o plotly Mapas com o pacote sf Projeto prático construção de relatório Tour pelos recursos gráficos do R Visão geral O landscape de recursos para visualização de dados no R pode ser representado por uma divisão em 4 territórios 1 O pacote graphics e derivados 2 O pacote lattice e derivados 3 O pacote ggplot2 e derivados 4 Pacotes para gráficos interativos O pacote graphics Contém os recursos mais primitivos com funções de alto e baixo nível Pouco suporte para mapeamento em variáveis visuais retinais Vários pacotes que complementam suas funcionalidades plotrix e gplots Usado em métodos gráficos de saídas de análises dendrogramas biplots etc O pacote lattice Plotagem multipainel e mapeamento em variáveis visuais retinais Já vem com a instalação básica do R Também é utilizado na implementação de métodos gráficos O pacote ggplot2 Baseado na Grammar of Graphics Plotagem multipainel e mapeamento em variáveis visuais retinais A importância da ggplot2 está no modelo mental mais claro The R Graph Gallery Gráficos da galeria de gráficos do R Fonte httpspbstwimgcommediaDeUD4fKW0AAcyqOjpg O pacote ggplot2 A implementação da gramática dos gráficos Gramática dos gráficos Tema Coordenadas Estatísticas Facetas Geometrias Variáveis visuais Dados Cores fonte demarcações formatação legendas Sistema de coordenadas Elementos de estatística Variáveis calculadas Divisão para exibição Representação geométrica Mapeamento em variáveis visuais Controle das escala Tipo de valor Dimensões de escala As camadas na gramática dos gráficos Gramática dos gráficos Leland Wilkinson A capa do livro As camadas da gramática de gráficos que são nos gráficos Camada 1 Dados Deve se estar atento ao tipo de valorobjeto Quantitativa variável numérica discreta ou contínua Qualitativa variável nominal ou ordinal Cronológica variável de data ou datatempo Geográfica objetos como polígonos ou pontos no espaço A camada dos dados Camada 2 Mapeamento em variáveis visuais A camada de mapeamento dos valores em variáveis visuais 12 Camada 2 Mapeamento em variáveis visuais Variáveis visuais disponíveis no ggplot2 13 Camada 2 Mapeamento em variáveis visuais Funções para controle de escala scalealpha binned continuous date datetime discrete identity manual ordinal scalecolour binned brewer continuous date datetime discrete distiller fermenter gradient gradient2 gradientn grey hue identity manual ordinal steps steps2 stepsn scalecontinuous identity scalediscrete identity manual scalefill binned brewer continuous date datetime discrete distiller fermenter gradient gradient2 gradientn grey hue identity manual ordinal steps steps2 stepsn scalelinetype binned continuous discrete identity manual scaleshape binned continuous discrete identity manual ordinal scalesize area binned continuous date datetime discrete identity manual ordinal scalex binned continuous date datetime discrete log10 reverse sqrt time scaley binned continuous date datetime discrete log10 reverse sqrt time 14 Camada 3 Geometrias A camada de elementos geométricos 15 Camada 3 Geometrias Funções disponíveis para a camada de geometria geomabline geomdotplot geomqqline geomarea geomerrorbar geomquantile geombar geomerrorbarh geomraster geombin2d geomfreqpoly geomrect geombin2d geomfunction geomribbon geomblank geomhex geomrug geomboxplot geomhistogram geomsegment geomcol geomhline geomsf geomcontour geomjitter geomsflabel geomcontourfilled geomlabel geomsftext geomcount geomline geomsmooth geomcrossbar geomlinerange geomspoke geomcurve geommap geomstep geomdensity geompath geomtext geomdensity2d geompoint geomtile geomdensity2dfilled geompointrange geomviolin geomdensity2d geompolygon geomvline geomdensity2dfilled geomqq 16 Camada 4 Divisão em facetas A camada da divisão em facetas 17 Camada 4 Divisão em facetas Funções disponíveis para divisão em facetas facetgrid facetnull facetwrap 18 Camada 5 Estatística A camada de elementos de estatística 19 Camada 5 Estatística Funções disponíveis para a camada estatística statbin statdensity2dfilled statsfcoordinates statbin2d statdensity2d statsmooth statbinhex statdensity2dfilled statspoke statbin2d statecdf statsum statbinhex statellipse statsummary statboxplot statfunction statsummary2d statcontour statidentity statsummarybin statcontourfilled statqq statsummaryhex statcount statqqline statsummary2d statdensity statquantile statunique statdensity2d statsf statydensity 20 Camada 6 Coordenadas A camada do sistema de coordenadas 21 Camada 6 Coordenadas Funções disponíveis para a camada de coordenadas coordcartesian coordequal coordfixed coordflip coordmap coordmunch coordpolar coordquickmap coordsf coordtrans 22 Camada 7 Tema A camada de tema Camada 7 Tema Funções disponíveis para a camada de tema elementblank elementgrob elementline elementrect elementrender elementtext themebw themeclassic themedark themeget themegray themegrey themelight themelinedraw thememinimal themereplace themeset themetest themeupdate themevoid 24 Cartão de referência de visualização de dados com o ggplot2 Clique no texto para abrir o arquivo 25 Recursos adicionais Galerias Gráficos httpswwwrgraphgallerycomportfolioggplot2package httprstatisticscoTop50Ggplot2VisualizationsMasterListRCodehtml httpsr4statscomexamplesgraphicsggplot2 httpgirkebioinformaticsucreduGEN242pagesmydocRgraphicshtml Mapas httpsrstudiopubsstatics3amazonawscom176768ec7fb4801e3a4772886d61e65885fbddhtml httpgirkebioinformaticsucreduGEN242pagesmydocRgraphicshtml httpscranrprojectorgwebpackagesgeobrvignettesintrotogeobrhtml Alguns tutoriais em português httpsrpubscommnunesggplot2 httpsanaliserealcom20150919introducaoaoggplot2 httpstimogrossenbacherch201612beautifulthematicmapswithggplot2only httprecologiacombrtaggraficos httprstudiopubsstatics3amazonawscom245633b7b0a6414824e3b91769a95309380f1html httpeduardogutierrescominteligenciageograficagerandomapasemr httpsptstackoverflowcomquestions332053rmapadecidadesbrasileiras Pacotes para recursos interativos A visualização interativa é voltada para exibição na WEB Alguns dos pacotes para isso são estes plotly highcharter googleVis echarts4r leaflet iplots rgl animation Para mais detalhes sobre os recursos gráficos siga esse link httpswwwstatubccajennySTAT545Ablock90baseLatticeGgplot2html Para uma descrição completa da comparação entre lattice e ggplot2 siga esse link httpslearnrwordpresscom20090826ggplot2versionoffiguresinlatticemultivariatedatavisualizationwithrfinalpart Confira no R Graph Gallery a variedade de gráficos confeccionados com o R Conderações finais A análise exploratória de dados está presente em todos os projetos de ciência de dados Ela serve para tirar impressões iniciais dos dados como a distribuição das variáveis a relação entre elas problemas com valores atípicos etc Uma boa análise exploratória subsidia o levantamento de hipóteses as decisões de negócio a engenharia de características e a construção e validação de modelos Dominar ferramentas para uma análise exploratória ágil é importante para celeridade dos projetos e ganho de conhecimento O R é extraordinário em termos de visualização com vários pacotes e frameworks para visualização de dados Dispõe ainda de inúmeros recursos para a visualização interativa INTRODUÇÃO AO RMARKDOWN Prof Wagner Hugo Bonat Componentes de relatórios dinâmicos Markdown Linguagem de marcação Leve Legível Portável Literate programming Prosa e código juntos R LaTeX Sweave R ODF OdfWeave R Markdown RMarkdown RMarkdown Prosa portável com código R Documentos em vários formatos Código R para reprodutibilidade 2 Markdown Linguagem de marcação HTML DOCTYPE html html head titleHello Worldtitle link relstylesheet hrefstylescss meta charsetutf8 head body h1 classtitleOlá Mundo h1 pEsse é um exemplo de código HTMLp ul liÉ cheio de tags então pouco legívelli liÉ um formato para navegadoresli ul body html Olá Mundo Esse é um exemplo de código HTML É cheio de tags então pouco legível É um formato para navegadores begincenter extbfLargeAnálise do Deslocamento de Pacientes Submetidos à Hemodiálise na Cidade de Curitiba em 2016 1em endcenter beginflushright bf Walmes Marques Zeviani footnote1DEST UFPR bf Wagner Hugo Bonat footnotemark1 bf Guilherme Fernando Hathy footnote2Estudantes Bacharelado em Estatística UFPR bf Maria Helena Santos de Oliveirafootnotemark2 endflushright vspace05cm oindent A pesquisa investiga o deslocamento envolvido em tratamentos que necessitam de hemodiálise Foram utilizados dados de atendimentos realizados em 2016 pelo Sistema Único de Saúde em Curitiba para estudar as distribuições espaciais da população nefropata dos hospitais que realizam hemodiálise e como ambas se relacionam Dillinger The Last Markdown Editor Ever Dillinger is a cloudenabled mobileready offlinestorage compatible AngularJSpowered HTML5 Markdown editor Type some Markdown on the left See HTML in the right Magic Features Import a HTML file and watch it magically convert to Markdown Drag and drop images requires your Dropbox account be linked Import and save files from GitHub Dropbox Google Drive and One Drive Drag and drop markdown and HTML files into Dillinger Export documents as Markdown HTML and PDF Markdown is a lightweight markup language based on the formatting conventions that people naturally use in email As John Gruber writes on the Markdown sitedf1 Markdown é Leve Não tem tags ou indicadores de marcação grandes As marcas são simples e bem visuais Legível Marcação leve facilita a leitura Fácil de examinar o código fonte Arquivo ocupa menos espaço em disco Portável Markdown para HTML Markdown para LaTeX Markdown para 7 Foi criado por John Gruber e Aaron Swartz em 2004 Recursos do RMarkdown Elementos textuais Seções parágrafos listas Ênfase e links Linhas e tabelas Citações bibliográficas Bloco de códigos Elementos analíticos Indicadores Tabelas Imagens Gráficos Execução e exibição Esconder código fonte Formatar saída Usar cache Parâmetros 8 Personalização Temas Definições de ambientes Elementos textuais Seções parágrafos listas etc 9 Seções e parágrafos 10 Seção Subseção Subsubseção Aqui é um parágrafo É só sair escrevendo texto Listas 11 Lista não ordenada Precisamos ir ao mercado comprar Arroz Feijão Leite Carne Lista ordenada Precisamos fazer 1 Aquisição dos dados 2 Limpeza e preparo 3 Análise exploratória 4 Criação de características 5 Modelagem Enfatizando texto 12 Negrito itálico e código Enfatizando texto texto em negrito texto em itálico código genérico Incluindo um link nome que apareceendereço web Googlewwwgooglecom Links Referências e citações 13 bookxie2018r titleR Markdown The Definitive Guide authorXie Y and Allaire JJ and Grolemund G isbn9780429782961 lccn2020692565 seriesChapman HallCRC The R Series urlhttpsbooksgooglecombrbooksidoctmDwAAQBAJ year2018 publisherCRC Press refsbib title Meu documento author Walmes Zeviani bibliography refsbib cls ABNTcsl RMarkdown oferece inúmeros recursos para editoração de documentos xie2018r Segundo xie2018r o RMarkdown blá blá blá httpswwwgooglecombrbookseditionRMarkdownoctmDwAAQBAJ Citação direta Without data youre just another person with an opinion William Edwards Deming Tabelas 14 Tabela título título título col 1 éconteúdo1 col 2 éconteúdo2 col 3 éconteúdo3 Uma linha Linhas r x rnorm10 x python import numpy as np x nprandomnormalsize 10 x Elementos analíticos Indicadores tabelas figuras etc 16 Valores em linha r x 10 Tabelas r include FALSE tabela headiris n 10 r echo FALSE knitrkabletabela caption Minha tabela Tabelas HTML formattable DT reactable etc LaTeX xtable tables etc 19 Gráficos r echo FALSE figcap Meu gráfico plotdist speed data cars r echo FALSE figwidth 7 figheight 6 plotdist speed data cars r echo FALSE figdim c7 6 outwidth 70 plotdist speed data cars Gráficos HTML plotly leaflet googleVis rbokeh visNetwork animation etc LaTeX graphics ggplot2 lattice etc 21 r echo FALSE figcap Figura outwidth 300px knitrincludegraphicscaminhoparaimagempng Diagramas 23 DiagrammeR httpsbookdownorgyihuirmarkdownco okbookdiagramshtml Tikz httpsgithubcomyihuiknitrexamplesbl obmaster058enginetikzRmd Execução e exibição O que mostrar ou não quando rodar o código 24 r eval TRUE r eval FALSE r include FALSE r include TRUE r message FALSE error FALSE warning FALSE r results markup r results hide r results asis r results hold Controles Salvar artefatos r cache TRUE Hooks httpsyihuiorgknitrhooks Definições globais r setup include FALSE libraryknitr optschunksettidy FALSE warning FALSE cache FALSE figwidth 9 figheight 9 21 sqrt5 outwidth 100 figalign center Equações matemáticas R Markdown Latex 28 Equações 29 Equação em linha Os parâmetros da distribuição normal são mu e sigma2 que representam a média e a variância Equação ao centro Estimamos a média pela expressão barY fracsumi 1n Xin Para fazer equações em LaTeX httpswwwcodecogscomlatexeqneditorphp novo httpslatexcodecogscomlegacyeqneditoreditorphp antigo httpslatexeditorlagridacom Recursos para programação eficiente em R e C Prof Wagner Hugo Bonat 1 A média harmônica é dada pela seguinte equação Mh n 1 x1 1 xn Implemente uma função R para o seu cálculo usando a estrutura de repetição for Não use nenhum recurso do R que use vetorização Gere uma amostra de tamanho 100 com o seguinte código setseed123 y rpois100 lambda 10 Baseado nesta amostra calcule a média harmonica usando a sua função 2 Reimplemente a função do exercício 1 porém agora usando tudo que conseguir de recursos de vetorização já disponíveis no R Faça uma comparação do tempo computacional necessário por cada uma das abordagens Use o package bench 3 Reimplemente a função do exercício 1 porém agora usando C e o pacote Rcpp Novamente compare o tempo computacional entre as três abordagens usando o pacote bench 4 Em estatística testes quiquadrado são muito populares O R tem uma função para realizar tal teste para diversas situações Uma situação comum é para verificar a associação em tabelas de contingência O exemplo abaixo retirado da documentação tem o objetivo de avaliar a associação entre genero e perfil político M astablerbindc762 327 468 c484 239 477 dimnamesM listgender cF M party cDemocratIndependent Republican M party gender Democrat Independent Republican F 762 327 468 M 484 239 477 O código abaixo executa o teste chisqtestM Pearsons Chisquared test data M Xsquared 3007 df 2 pvalue 2954e07 Use uma ferramenta de debug para investigar como a estatística de teste é calculada Reimplemente apenas a estatística de teste em uma função própria Compare a sua função com a do R em termos de tempo computacional Suponha que o interesse é apenas obter a estatística de teste 5 Comparar dois grupos é uma atividade popular em estatística Considere o conjunto de dados iris disponível no R Suponha que desejamos testar se a variável SepalLength é em média diferente entre as espécies setosa e versicolor Para isso vamos usar um teste de aleatorização Sob a hipótese nula o tamanho médio das sepalas é igual Isso significa que tanto faz o grupo ao qual a flor pertence Para 1 simular desta situação é suficiente juntarmos os dados das duas espécies e sortear aleatóriamente a qual espécie a flor pertence Para medir a diferença calculamos a média de cada espécie e fazemos a diferença Vamos repetir esse processo um grande número de vezes e ver como é a distribuição da estatística diferença Após isso basta calcular a diferença observada na amostra e identificar qual o percentual de vezes que ocorreu ela ou uma estatística mais extrema para obter o chamado pvalor Implemente esse procedimento de forma sequencial e em paralelo Compare o tempo computacional 2 Recursos para programação eficiente em R Prof Dr Wagner Hugo Bonat Estrutura e objetivos do módulo Estratégias para encontrar erros bugs Estratégias para medir a performance Estratégias para melhorar a performance Boas práticas para organização de código Integrando o R com o C Paralelização Exemplos práticos httpswwwpexelscomphototopviewofpeopleat themeeting3184287 Estrutura do módulo 3 Objetivos do módulo Visitar algumas técnicas de debug em R Visitar algumas ferramentas de profiling em R e RStudio Estratégias para medir a performance computacional do R Pacotes profvis e bench Estratégias para melhorar a perfomance computacional do R Integrando o R e o C Ferramentas para paralelização Prática com scripts Motivação Motivação R não é uma linguagem rápida em termos de tempo computacional R foi explicitamente desenhado para análise iterativa de dados Fácil para humanos não para o computador Para a maioria das tarefas do diaadia o R é rápido o suficiente Comunidade ampla em geral programadores não profissionais Diversidade de pacotes extras Tem de tudo em todos os sentidos C não é uma linguagem rápida em termos de tempo para programação e curva de aprendizado C foi desenhada para ser rápida computacionalmente C comunidade ampla e ativa Fácil de obter suporte Linguagem de propósito geral Linguagem copilada maior tempo de programação Mais difícil de fazer pequenos protótipos de códigos Motivação Computação científica Estamos interessados em desenvolver algoritmos computacionais com algum tipo de aplicação científica Métodos numéricos Sistemas lineares e nãolineares Derivação e integração numérica Otimização linear quadrática e nãolinear Equações diferenciais Performance computacional pode se tornar crítica Métodos estatísticos Manipulação de bases de dados Visualização de dados Distribuições de probabilidade Modelagem estatística de forma geral Objetivos Na programação de métodos científicos temos que lidar com duas técnicas de programação 1 Encontrar e arrumar erros de codificação bugs 2 Encontrar e arrumar gargalos da performance computacional Ferramentas para encontrar erros e medir a performance computacional são essenciais Objetivos 1 Visitar algumas técnicas de debug em R 2 Visitar algumas ferramentas de profiling em R e RStudio 3 Discutir algumas estratégias para melhorar a performance computacional do R Encontrando erros O que fazer quando o R retorna uma mensagem de erro inesperada Quais são as ferramentas para encontrar e arrumar o erro Principal documentação RStudio debugging documentation traceback função que ajuda a encontrar onde um erro ocorreu debug e browser Breakpoints Shift F9 optionserror recover Código R Modulo4Script1R Ferramentas para debug 10 Estratégia geral Finding your bug is a process of confirming the many things that you believe are true until you find one which is not true Norm Matloff 1 Google Dê uma olhada nos pacotes errorist e searcher 2 Faça o erro reproduzível Faça o exemplo ser o menor possível Desenvolva testes automatizados 3 Descubra onde o erro está Adote o método científico Crie hipóteses desenhe experimentos e teste 4 Arrume e teste Cuidado para não incluir novos erros Importância de automatizar os testes httpspixabaycomptusersgraphicmamateam2641041 Medindo a performance Medindo a performance Programmers waste enormous amounts of time thinking about or worrying about the speed of noncritical parts of their programs and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered Donald Knuth Para ter um código rápido primeiro precisamos saber onde ele é lento Identificar os chamados bottlenecks Profilling Medir o tempo computacional de cada linha de código Encontrado o ponto crítico testamos diferentes estratégias Dois pacotes são populares profvis e bench Código R Modulo4Script1R Estratégias para melhorar a performance 14 Estratégias para melhorar a performance We should forget about small efficiencies say about 97 of the time premature optimization is the root of all evil Yet we should not pass up our opportunities in that critical 3 A good programmer will not be lulled into complacency by such reasoning he will be wise to look carefully at the critical code but only after that code has been identified Donald Knuth Be pragmatic dont spend hours of your time to save seconds of computer time Hadley Wickham Organize o código para otimizar a performance e evitar bugs Estratégia do preguiçoso A função mais rápida é aquela que trabalha menos Vetorize e evite cópias Troque a linguagem Organização do código Armadilha da tentativa de melhorar o código Código rápido porém incorreto Código que você acha que é rápido mas na verdade tem a mesma performance Como evitar essas armadilhas Identifique o ponto crítico bottleneck Esboce um conjunto de possibilidades para melhorar a performance Escreva cada uma em uma função separada Gere um exemplo representativo da situação Use benchmark para comparar as estratégias Como buscar estratégias de melhorias Verifique opções existentes Consulte o CRAN task view Consulte as dependencias reversas do pacote Rcpp Procure na literatura termos para descrever o bottleneck Pergunte para colegas Use os termos encontrados para procurar no Google e StackOverflow Restringja sua busca a página relacionandas com o R httpsrseekorg Selecione as opções que parecem promissoras Benchmark cada uma e tente combinálas para criar uma melhor Pare assim que o código for rápido o suficiente ChatGPT Vetorização Vetorizar não é apenas evitar loops Pensar no código como um todo Vetores ao invés de escalares Em R vetorizar é simplesmente encontrar uma função em C que faz o que você quer Alguns exemplos rowSums colSums rowMeans e colMeans Funções para tarefas específicas tendem a ser mais rápidas do que funções genéricas Álgebra matricial é uma forma de vetorização Bibliotecas de álgebra linear como a BLAS são altamente eficientes VECTORIZE ALL THE THINGS Regra número 1 Nunca cresça um objeto Uso de funções como c append cbind rbind ou paste deve ser feito com cuidado Estudo de caso Testet Objetivo Executar 1000 experimentos cada um coletando amostras de 50 individuos Os primeiros 25 individuos são designados ao grupo 1 e o resto ao grupo 2 Efetuar um teste t para comparar as médias dos grupos 1 e 2 Código RModulo4Script1R Evite cópias 19 Read R blogs to see what performance problems other people have struggled with and how they have made their code faster Read other R programming books like The Art of R Programming or Patrick Burns R Inferno to learn about common traps Take an algorithms and data structure course to learn some well known ways of tackling certain classes of problems I have heard good things about Princetons Algorithms course offered on Coursera Learn how to parallelise your code Two places to start are Parallel R and Parallel Computing for Data Science Read general books about optimisation like Mature optimisation or the Pragmatic Programmer Reescreva suas funções em C Hadley Wickham Dicas do Hadley para melhorar a sua programação 20 Melhorando a performance usando C 21 Típica situação Código está funcionando perfeitamente Já fez o profiling e melhorou os principais bottleneck Mas seu código ainda não está rápido o suficiente Reescrever partes importantes do seu código em C pode ajudar Típicos bottlenecks que valem a pena escrever código em C Loops que não podem ser vetorizados porque são usados em sequência Funções recursivas ou problemas que envolvem chamar funções milhões de vezes Problemas avançados que requerem estruturas ou algoritmos que o R não tem Página do Rcpp Tutorial de Rcpp Modulo4Script2R Logo C gibbsr functionN thin mat matrixnrow N ncol 2 x y 0 for i in 1N for j in 1thin x rgamma1 3 y y 4 y rnorm1 1 x 1 1 sqrt2 x 1 mati cx y mat include Rcpph using namespace Rcpp Rcppexport NumericMatrix gibbscppint N int thin NumericMatrix matN 2 double x 0 y 0 forint i 0 i N i forint j 0 j thin j x rgamma1 3 1 y y 40 y rnorm1 1 x 1 1 sqrt2 x 10 mati 0 x mati 1 y returnmat Estudo de caso Amostrador de Gibbs Gibbs sampler extraído do blog do Dirk Tutorial iniciando com o Rcpp 23 O tutorial apresentou apenas os aspectos básicos do Rcpp vignetteRcppquickref é uma excelente referência Página do Rcpp Effective C e Effective STL C Annotations Algorithm Libraries Pacotes adicionais do ecosistema Rcpp RcppArmadillo RcppEigen e RcppGSL Página do Rcpp Mais recursos 24 Paralelização Existem diversos esquemas de paralelização Não vamos entrar em detalhes em nenhum Loops em R tendem a ser lentos alternativas Escreva código em C através do Rcpp Paralelize o seu for se ele não for sequencial Pacotes úteis foreach parallel e doParallel Exemplos Código R Modulo4Script3R Estrutura de processamento Paralelização em R 26 Visualização de dados Uma abordagem baseada no ggplot2 Conhecendo o mercado aéreo brasileiro Prof Wagner Hugo Bonat Projeto pŕatico Conhecendo o mercado aéreo brasileiro Considere o conjunto de dados sobre voos e operações aéreas disponibilizado pela ANAC Agência Nacional de Aviação Comercial no seguinte endereço clique aqui O arquivo chamado de DadosEstatisticoscsv apresenta uma série de informações sobre as operadoras aéreas que atuam no Brasil Forneça o código R usando o framework tidyverse para responder cada uma das seguintes questões práticas Para a entrega da lista crie um arquivo Rmd com as perguntas o código R e os gráficos associados Envie o arquivo html gerado para correção 1 Considere que é de interesse visualizar a série temporal anual do número de decolagens para as 10 empresas nacionais que mais decolaram no período disponível de dados Faça duas visualizações uma para enfatizar a comparação entre as empresas e outra para enfatizar a visualização da série de cada empresa Considere apenas os registros que tenham o número de decolagens 2 Faça uma visualização de dados comparar o número de passageiros pagantes entre empresas nacionais e estrangeiras ao longo dos anos 3 Faça uma visualização de dados comparar o número de passageiros pagantes entre empresas nacionais e estrangeiras de acordo com o grupo de voo 4 Faça uma visualização para enfatizar a distribuição da variável número de passageiros pagantes de acordo com a região de origem e natureza do voo Enfatize a comparação entre DOMÉSTICA e INTERNACIONAL para cada região de origem Para criar o gráfico use o log10 da variável PASSAGEIROSPAGOS 5 Crie uma variável que indique a eficiencia no uso do combustível como sendo a razão entre o DISTAN CIAVOADAKM e COMBUSTIVELLITROS Compare as empresas de acordo com a região de origem e destino Use a escala y em log10 para facilitar a comparação das regiões 6 Faça uma visualização para mostrar a relação entre o consumo de combustível e a distância voada Con sidere empresas nacionais e internacionais e os diferentes anos para enriquecer a visualização Considere transformar as variáveis e use alguma forma estatística para enfatizar a forma do relacionamento 7 Baseado na visualização em 6 você diria que tem alguma incosistencia com esses dados Justique 8 Considerando apenas as empresas nacionais Faça uma visualização para investigar se a região do aeroporto de origem influencia na relação entre combustível e distancia voada 9 O indicador RTK Revenue tonne kilometer referese ao volume de toneladas quilômetros transportada Faça uma visualização da relação deste indicador com o consumo de combustível Filtre apenas observações com ambas variáveis maiores que zero Considere também que é de interesse comparar essa relação entre os diferentes anos Considere incluir alguma camada estatística para enfatizar o formato do relacionamento entre as variáveis 10 O indicador ATK Available tonne kilometer referese ao volume de tonelada quilômetro oferecida pela companhia Crie uma visualização para explorar a relação entre estes indicadores Considere aspectos como GRUPODEVOO e NATUREZA além do anos 1
1
Linguagens de Programação
UMG
22
Linguagens de Programação
UMG
4
Linguagens de Programação
UMG
6
Linguagens de Programação
UMG
5
Linguagens de Programação
UMG
1
Linguagens de Programação
UMG
1
Linguagens de Programação
UMG
1
Linguagens de Programação
UMG
4
Linguagens de Programação
UMG
11
Linguagens de Programação
UMG
Texto de pré-visualização
Visualizando dados Uma abordagem baseada no ggplot2 Prof Dr Wagner Hugo Bonat 1 Estrutura e objetivos do módulo Estrutura do módulo Tour sobre recursos gráficos do R O pacote ggplot2 A gramática dos gráficos Dados Variáveis visuais Geometrias Facetas Estatísticas Coordenadas Tema Recursos adicionais e visualização interativa Introdução ao RMarkdown Projeto prático relatório httpswwwpexelscomphototopviewofpeopleatthemeeting3184287 Objetivos do módulo Conhecer os principais recursos para visualização de dados em R Compreender os princípios da gramática dos gráficos Dominar a sintaxe do ggplot2 para construção de gráficos Discussão sobre alguns recursos adicionais Gráficos interativos com o plotly Mapas com o pacote sf Projeto prático construção de relatório Tour pelos recursos gráficos do R Visão geral O landscape de recursos para visualização de dados no R pode ser representado por uma divisão em 4 territórios 1 O pacote graphics e derivados 2 O pacote lattice e derivados 3 O pacote ggplot2 e derivados 4 Pacotes para gráficos interativos O pacote graphics Contém os recursos mais primitivos com funções de alto e baixo nível Pouco suporte para mapeamento em variáveis visuais retinais Vários pacotes que complementam suas funcionalidades plotrix e gplots Usado em métodos gráficos de saídas de análises dendrogramas biplots etc O pacote lattice Plotagem multipainel e mapeamento em variáveis visuais retinais Já vem com a instalação básica do R Também é utilizado na implementação de métodos gráficos O pacote ggplot2 Baseado na Grammar of Graphics Plotagem multipainel e mapeamento em variáveis visuais retinais A importância da ggplot2 está no modelo mental mais claro The R Graph Gallery Gráficos da galeria de gráficos do R Fonte httpspbstwimgcommediaDeUD4fKW0AAcyqOjpg O pacote ggplot2 A implementação da gramática dos gráficos Gramática dos gráficos Tema Coordenadas Estatísticas Facetas Geometrias Variáveis visuais Dados Cores fonte demarcações formatação legendas Sistema de coordenadas Elementos de estatística Variáveis calculadas Divisão para exibição Representação geométrica Mapeamento em variáveis visuais Controle das escala Tipo de valor Dimensões de escala As camadas na gramática dos gráficos Gramática dos gráficos Leland Wilkinson A capa do livro As camadas da gramática de gráficos que são nos gráficos Camada 1 Dados Deve se estar atento ao tipo de valorobjeto Quantitativa variável numérica discreta ou contínua Qualitativa variável nominal ou ordinal Cronológica variável de data ou datatempo Geográfica objetos como polígonos ou pontos no espaço A camada dos dados Camada 2 Mapeamento em variáveis visuais A camada de mapeamento dos valores em variáveis visuais 12 Camada 2 Mapeamento em variáveis visuais Variáveis visuais disponíveis no ggplot2 13 Camada 2 Mapeamento em variáveis visuais Funções para controle de escala scalealpha binned continuous date datetime discrete identity manual ordinal scalecolour binned brewer continuous date datetime discrete distiller fermenter gradient gradient2 gradientn grey hue identity manual ordinal steps steps2 stepsn scalecontinuous identity scalediscrete identity manual scalefill binned brewer continuous date datetime discrete distiller fermenter gradient gradient2 gradientn grey hue identity manual ordinal steps steps2 stepsn scalelinetype binned continuous discrete identity manual scaleshape binned continuous discrete identity manual ordinal scalesize area binned continuous date datetime discrete identity manual ordinal scalex binned continuous date datetime discrete log10 reverse sqrt time scaley binned continuous date datetime discrete log10 reverse sqrt time 14 Camada 3 Geometrias A camada de elementos geométricos 15 Camada 3 Geometrias Funções disponíveis para a camada de geometria geomabline geomdotplot geomqqline geomarea geomerrorbar geomquantile geombar geomerrorbarh geomraster geombin2d geomfreqpoly geomrect geombin2d geomfunction geomribbon geomblank geomhex geomrug geomboxplot geomhistogram geomsegment geomcol geomhline geomsf geomcontour geomjitter geomsflabel geomcontourfilled geomlabel geomsftext geomcount geomline geomsmooth geomcrossbar geomlinerange geomspoke geomcurve geommap geomstep geomdensity geompath geomtext geomdensity2d geompoint geomtile geomdensity2dfilled geompointrange geomviolin geomdensity2d geompolygon geomvline geomdensity2dfilled geomqq 16 Camada 4 Divisão em facetas A camada da divisão em facetas 17 Camada 4 Divisão em facetas Funções disponíveis para divisão em facetas facetgrid facetnull facetwrap 18 Camada 5 Estatística A camada de elementos de estatística 19 Camada 5 Estatística Funções disponíveis para a camada estatística statbin statdensity2dfilled statsfcoordinates statbin2d statdensity2d statsmooth statbinhex statdensity2dfilled statspoke statbin2d statecdf statsum statbinhex statellipse statsummary statboxplot statfunction statsummary2d statcontour statidentity statsummarybin statcontourfilled statqq statsummaryhex statcount statqqline statsummary2d statdensity statquantile statunique statdensity2d statsf statydensity 20 Camada 6 Coordenadas A camada do sistema de coordenadas 21 Camada 6 Coordenadas Funções disponíveis para a camada de coordenadas coordcartesian coordequal coordfixed coordflip coordmap coordmunch coordpolar coordquickmap coordsf coordtrans 22 Camada 7 Tema A camada de tema Camada 7 Tema Funções disponíveis para a camada de tema elementblank elementgrob elementline elementrect elementrender elementtext themebw themeclassic themedark themeget themegray themegrey themelight themelinedraw thememinimal themereplace themeset themetest themeupdate themevoid 24 Cartão de referência de visualização de dados com o ggplot2 Clique no texto para abrir o arquivo 25 Recursos adicionais Galerias Gráficos httpswwwrgraphgallerycomportfolioggplot2package httprstatisticscoTop50Ggplot2VisualizationsMasterListRCodehtml httpsr4statscomexamplesgraphicsggplot2 httpgirkebioinformaticsucreduGEN242pagesmydocRgraphicshtml Mapas httpsrstudiopubsstatics3amazonawscom176768ec7fb4801e3a4772886d61e65885fbddhtml httpgirkebioinformaticsucreduGEN242pagesmydocRgraphicshtml httpscranrprojectorgwebpackagesgeobrvignettesintrotogeobrhtml Alguns tutoriais em português httpsrpubscommnunesggplot2 httpsanaliserealcom20150919introducaoaoggplot2 httpstimogrossenbacherch201612beautifulthematicmapswithggplot2only httprecologiacombrtaggraficos httprstudiopubsstatics3amazonawscom245633b7b0a6414824e3b91769a95309380f1html httpeduardogutierrescominteligenciageograficagerandomapasemr httpsptstackoverflowcomquestions332053rmapadecidadesbrasileiras Pacotes para recursos interativos A visualização interativa é voltada para exibição na WEB Alguns dos pacotes para isso são estes plotly highcharter googleVis echarts4r leaflet iplots rgl animation Para mais detalhes sobre os recursos gráficos siga esse link httpswwwstatubccajennySTAT545Ablock90baseLatticeGgplot2html Para uma descrição completa da comparação entre lattice e ggplot2 siga esse link httpslearnrwordpresscom20090826ggplot2versionoffiguresinlatticemultivariatedatavisualizationwithrfinalpart Confira no R Graph Gallery a variedade de gráficos confeccionados com o R Conderações finais A análise exploratória de dados está presente em todos os projetos de ciência de dados Ela serve para tirar impressões iniciais dos dados como a distribuição das variáveis a relação entre elas problemas com valores atípicos etc Uma boa análise exploratória subsidia o levantamento de hipóteses as decisões de negócio a engenharia de características e a construção e validação de modelos Dominar ferramentas para uma análise exploratória ágil é importante para celeridade dos projetos e ganho de conhecimento O R é extraordinário em termos de visualização com vários pacotes e frameworks para visualização de dados Dispõe ainda de inúmeros recursos para a visualização interativa INTRODUÇÃO AO RMARKDOWN Prof Wagner Hugo Bonat Componentes de relatórios dinâmicos Markdown Linguagem de marcação Leve Legível Portável Literate programming Prosa e código juntos R LaTeX Sweave R ODF OdfWeave R Markdown RMarkdown RMarkdown Prosa portável com código R Documentos em vários formatos Código R para reprodutibilidade 2 Markdown Linguagem de marcação HTML DOCTYPE html html head titleHello Worldtitle link relstylesheet hrefstylescss meta charsetutf8 head body h1 classtitleOlá Mundo h1 pEsse é um exemplo de código HTMLp ul liÉ cheio de tags então pouco legívelli liÉ um formato para navegadoresli ul body html Olá Mundo Esse é um exemplo de código HTML É cheio de tags então pouco legível É um formato para navegadores begincenter extbfLargeAnálise do Deslocamento de Pacientes Submetidos à Hemodiálise na Cidade de Curitiba em 2016 1em endcenter beginflushright bf Walmes Marques Zeviani footnote1DEST UFPR bf Wagner Hugo Bonat footnotemark1 bf Guilherme Fernando Hathy footnote2Estudantes Bacharelado em Estatística UFPR bf Maria Helena Santos de Oliveirafootnotemark2 endflushright vspace05cm oindent A pesquisa investiga o deslocamento envolvido em tratamentos que necessitam de hemodiálise Foram utilizados dados de atendimentos realizados em 2016 pelo Sistema Único de Saúde em Curitiba para estudar as distribuições espaciais da população nefropata dos hospitais que realizam hemodiálise e como ambas se relacionam Dillinger The Last Markdown Editor Ever Dillinger is a cloudenabled mobileready offlinestorage compatible AngularJSpowered HTML5 Markdown editor Type some Markdown on the left See HTML in the right Magic Features Import a HTML file and watch it magically convert to Markdown Drag and drop images requires your Dropbox account be linked Import and save files from GitHub Dropbox Google Drive and One Drive Drag and drop markdown and HTML files into Dillinger Export documents as Markdown HTML and PDF Markdown is a lightweight markup language based on the formatting conventions that people naturally use in email As John Gruber writes on the Markdown sitedf1 Markdown é Leve Não tem tags ou indicadores de marcação grandes As marcas são simples e bem visuais Legível Marcação leve facilita a leitura Fácil de examinar o código fonte Arquivo ocupa menos espaço em disco Portável Markdown para HTML Markdown para LaTeX Markdown para 7 Foi criado por John Gruber e Aaron Swartz em 2004 Recursos do RMarkdown Elementos textuais Seções parágrafos listas Ênfase e links Linhas e tabelas Citações bibliográficas Bloco de códigos Elementos analíticos Indicadores Tabelas Imagens Gráficos Execução e exibição Esconder código fonte Formatar saída Usar cache Parâmetros 8 Personalização Temas Definições de ambientes Elementos textuais Seções parágrafos listas etc 9 Seções e parágrafos 10 Seção Subseção Subsubseção Aqui é um parágrafo É só sair escrevendo texto Listas 11 Lista não ordenada Precisamos ir ao mercado comprar Arroz Feijão Leite Carne Lista ordenada Precisamos fazer 1 Aquisição dos dados 2 Limpeza e preparo 3 Análise exploratória 4 Criação de características 5 Modelagem Enfatizando texto 12 Negrito itálico e código Enfatizando texto texto em negrito texto em itálico código genérico Incluindo um link nome que apareceendereço web Googlewwwgooglecom Links Referências e citações 13 bookxie2018r titleR Markdown The Definitive Guide authorXie Y and Allaire JJ and Grolemund G isbn9780429782961 lccn2020692565 seriesChapman HallCRC The R Series urlhttpsbooksgooglecombrbooksidoctmDwAAQBAJ year2018 publisherCRC Press refsbib title Meu documento author Walmes Zeviani bibliography refsbib cls ABNTcsl RMarkdown oferece inúmeros recursos para editoração de documentos xie2018r Segundo xie2018r o RMarkdown blá blá blá httpswwwgooglecombrbookseditionRMarkdownoctmDwAAQBAJ Citação direta Without data youre just another person with an opinion William Edwards Deming Tabelas 14 Tabela título título título col 1 éconteúdo1 col 2 éconteúdo2 col 3 éconteúdo3 Uma linha Linhas r x rnorm10 x python import numpy as np x nprandomnormalsize 10 x Elementos analíticos Indicadores tabelas figuras etc 16 Valores em linha r x 10 Tabelas r include FALSE tabela headiris n 10 r echo FALSE knitrkabletabela caption Minha tabela Tabelas HTML formattable DT reactable etc LaTeX xtable tables etc 19 Gráficos r echo FALSE figcap Meu gráfico plotdist speed data cars r echo FALSE figwidth 7 figheight 6 plotdist speed data cars r echo FALSE figdim c7 6 outwidth 70 plotdist speed data cars Gráficos HTML plotly leaflet googleVis rbokeh visNetwork animation etc LaTeX graphics ggplot2 lattice etc 21 r echo FALSE figcap Figura outwidth 300px knitrincludegraphicscaminhoparaimagempng Diagramas 23 DiagrammeR httpsbookdownorgyihuirmarkdownco okbookdiagramshtml Tikz httpsgithubcomyihuiknitrexamplesbl obmaster058enginetikzRmd Execução e exibição O que mostrar ou não quando rodar o código 24 r eval TRUE r eval FALSE r include FALSE r include TRUE r message FALSE error FALSE warning FALSE r results markup r results hide r results asis r results hold Controles Salvar artefatos r cache TRUE Hooks httpsyihuiorgknitrhooks Definições globais r setup include FALSE libraryknitr optschunksettidy FALSE warning FALSE cache FALSE figwidth 9 figheight 9 21 sqrt5 outwidth 100 figalign center Equações matemáticas R Markdown Latex 28 Equações 29 Equação em linha Os parâmetros da distribuição normal são mu e sigma2 que representam a média e a variância Equação ao centro Estimamos a média pela expressão barY fracsumi 1n Xin Para fazer equações em LaTeX httpswwwcodecogscomlatexeqneditorphp novo httpslatexcodecogscomlegacyeqneditoreditorphp antigo httpslatexeditorlagridacom Recursos para programação eficiente em R e C Prof Wagner Hugo Bonat 1 A média harmônica é dada pela seguinte equação Mh n 1 x1 1 xn Implemente uma função R para o seu cálculo usando a estrutura de repetição for Não use nenhum recurso do R que use vetorização Gere uma amostra de tamanho 100 com o seguinte código setseed123 y rpois100 lambda 10 Baseado nesta amostra calcule a média harmonica usando a sua função 2 Reimplemente a função do exercício 1 porém agora usando tudo que conseguir de recursos de vetorização já disponíveis no R Faça uma comparação do tempo computacional necessário por cada uma das abordagens Use o package bench 3 Reimplemente a função do exercício 1 porém agora usando C e o pacote Rcpp Novamente compare o tempo computacional entre as três abordagens usando o pacote bench 4 Em estatística testes quiquadrado são muito populares O R tem uma função para realizar tal teste para diversas situações Uma situação comum é para verificar a associação em tabelas de contingência O exemplo abaixo retirado da documentação tem o objetivo de avaliar a associação entre genero e perfil político M astablerbindc762 327 468 c484 239 477 dimnamesM listgender cF M party cDemocratIndependent Republican M party gender Democrat Independent Republican F 762 327 468 M 484 239 477 O código abaixo executa o teste chisqtestM Pearsons Chisquared test data M Xsquared 3007 df 2 pvalue 2954e07 Use uma ferramenta de debug para investigar como a estatística de teste é calculada Reimplemente apenas a estatística de teste em uma função própria Compare a sua função com a do R em termos de tempo computacional Suponha que o interesse é apenas obter a estatística de teste 5 Comparar dois grupos é uma atividade popular em estatística Considere o conjunto de dados iris disponível no R Suponha que desejamos testar se a variável SepalLength é em média diferente entre as espécies setosa e versicolor Para isso vamos usar um teste de aleatorização Sob a hipótese nula o tamanho médio das sepalas é igual Isso significa que tanto faz o grupo ao qual a flor pertence Para 1 simular desta situação é suficiente juntarmos os dados das duas espécies e sortear aleatóriamente a qual espécie a flor pertence Para medir a diferença calculamos a média de cada espécie e fazemos a diferença Vamos repetir esse processo um grande número de vezes e ver como é a distribuição da estatística diferença Após isso basta calcular a diferença observada na amostra e identificar qual o percentual de vezes que ocorreu ela ou uma estatística mais extrema para obter o chamado pvalor Implemente esse procedimento de forma sequencial e em paralelo Compare o tempo computacional 2 Recursos para programação eficiente em R Prof Dr Wagner Hugo Bonat Estrutura e objetivos do módulo Estratégias para encontrar erros bugs Estratégias para medir a performance Estratégias para melhorar a performance Boas práticas para organização de código Integrando o R com o C Paralelização Exemplos práticos httpswwwpexelscomphototopviewofpeopleat themeeting3184287 Estrutura do módulo 3 Objetivos do módulo Visitar algumas técnicas de debug em R Visitar algumas ferramentas de profiling em R e RStudio Estratégias para medir a performance computacional do R Pacotes profvis e bench Estratégias para melhorar a perfomance computacional do R Integrando o R e o C Ferramentas para paralelização Prática com scripts Motivação Motivação R não é uma linguagem rápida em termos de tempo computacional R foi explicitamente desenhado para análise iterativa de dados Fácil para humanos não para o computador Para a maioria das tarefas do diaadia o R é rápido o suficiente Comunidade ampla em geral programadores não profissionais Diversidade de pacotes extras Tem de tudo em todos os sentidos C não é uma linguagem rápida em termos de tempo para programação e curva de aprendizado C foi desenhada para ser rápida computacionalmente C comunidade ampla e ativa Fácil de obter suporte Linguagem de propósito geral Linguagem copilada maior tempo de programação Mais difícil de fazer pequenos protótipos de códigos Motivação Computação científica Estamos interessados em desenvolver algoritmos computacionais com algum tipo de aplicação científica Métodos numéricos Sistemas lineares e nãolineares Derivação e integração numérica Otimização linear quadrática e nãolinear Equações diferenciais Performance computacional pode se tornar crítica Métodos estatísticos Manipulação de bases de dados Visualização de dados Distribuições de probabilidade Modelagem estatística de forma geral Objetivos Na programação de métodos científicos temos que lidar com duas técnicas de programação 1 Encontrar e arrumar erros de codificação bugs 2 Encontrar e arrumar gargalos da performance computacional Ferramentas para encontrar erros e medir a performance computacional são essenciais Objetivos 1 Visitar algumas técnicas de debug em R 2 Visitar algumas ferramentas de profiling em R e RStudio 3 Discutir algumas estratégias para melhorar a performance computacional do R Encontrando erros O que fazer quando o R retorna uma mensagem de erro inesperada Quais são as ferramentas para encontrar e arrumar o erro Principal documentação RStudio debugging documentation traceback função que ajuda a encontrar onde um erro ocorreu debug e browser Breakpoints Shift F9 optionserror recover Código R Modulo4Script1R Ferramentas para debug 10 Estratégia geral Finding your bug is a process of confirming the many things that you believe are true until you find one which is not true Norm Matloff 1 Google Dê uma olhada nos pacotes errorist e searcher 2 Faça o erro reproduzível Faça o exemplo ser o menor possível Desenvolva testes automatizados 3 Descubra onde o erro está Adote o método científico Crie hipóteses desenhe experimentos e teste 4 Arrume e teste Cuidado para não incluir novos erros Importância de automatizar os testes httpspixabaycomptusersgraphicmamateam2641041 Medindo a performance Medindo a performance Programmers waste enormous amounts of time thinking about or worrying about the speed of noncritical parts of their programs and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered Donald Knuth Para ter um código rápido primeiro precisamos saber onde ele é lento Identificar os chamados bottlenecks Profilling Medir o tempo computacional de cada linha de código Encontrado o ponto crítico testamos diferentes estratégias Dois pacotes são populares profvis e bench Código R Modulo4Script1R Estratégias para melhorar a performance 14 Estratégias para melhorar a performance We should forget about small efficiencies say about 97 of the time premature optimization is the root of all evil Yet we should not pass up our opportunities in that critical 3 A good programmer will not be lulled into complacency by such reasoning he will be wise to look carefully at the critical code but only after that code has been identified Donald Knuth Be pragmatic dont spend hours of your time to save seconds of computer time Hadley Wickham Organize o código para otimizar a performance e evitar bugs Estratégia do preguiçoso A função mais rápida é aquela que trabalha menos Vetorize e evite cópias Troque a linguagem Organização do código Armadilha da tentativa de melhorar o código Código rápido porém incorreto Código que você acha que é rápido mas na verdade tem a mesma performance Como evitar essas armadilhas Identifique o ponto crítico bottleneck Esboce um conjunto de possibilidades para melhorar a performance Escreva cada uma em uma função separada Gere um exemplo representativo da situação Use benchmark para comparar as estratégias Como buscar estratégias de melhorias Verifique opções existentes Consulte o CRAN task view Consulte as dependencias reversas do pacote Rcpp Procure na literatura termos para descrever o bottleneck Pergunte para colegas Use os termos encontrados para procurar no Google e StackOverflow Restringja sua busca a página relacionandas com o R httpsrseekorg Selecione as opções que parecem promissoras Benchmark cada uma e tente combinálas para criar uma melhor Pare assim que o código for rápido o suficiente ChatGPT Vetorização Vetorizar não é apenas evitar loops Pensar no código como um todo Vetores ao invés de escalares Em R vetorizar é simplesmente encontrar uma função em C que faz o que você quer Alguns exemplos rowSums colSums rowMeans e colMeans Funções para tarefas específicas tendem a ser mais rápidas do que funções genéricas Álgebra matricial é uma forma de vetorização Bibliotecas de álgebra linear como a BLAS são altamente eficientes VECTORIZE ALL THE THINGS Regra número 1 Nunca cresça um objeto Uso de funções como c append cbind rbind ou paste deve ser feito com cuidado Estudo de caso Testet Objetivo Executar 1000 experimentos cada um coletando amostras de 50 individuos Os primeiros 25 individuos são designados ao grupo 1 e o resto ao grupo 2 Efetuar um teste t para comparar as médias dos grupos 1 e 2 Código RModulo4Script1R Evite cópias 19 Read R blogs to see what performance problems other people have struggled with and how they have made their code faster Read other R programming books like The Art of R Programming or Patrick Burns R Inferno to learn about common traps Take an algorithms and data structure course to learn some well known ways of tackling certain classes of problems I have heard good things about Princetons Algorithms course offered on Coursera Learn how to parallelise your code Two places to start are Parallel R and Parallel Computing for Data Science Read general books about optimisation like Mature optimisation or the Pragmatic Programmer Reescreva suas funções em C Hadley Wickham Dicas do Hadley para melhorar a sua programação 20 Melhorando a performance usando C 21 Típica situação Código está funcionando perfeitamente Já fez o profiling e melhorou os principais bottleneck Mas seu código ainda não está rápido o suficiente Reescrever partes importantes do seu código em C pode ajudar Típicos bottlenecks que valem a pena escrever código em C Loops que não podem ser vetorizados porque são usados em sequência Funções recursivas ou problemas que envolvem chamar funções milhões de vezes Problemas avançados que requerem estruturas ou algoritmos que o R não tem Página do Rcpp Tutorial de Rcpp Modulo4Script2R Logo C gibbsr functionN thin mat matrixnrow N ncol 2 x y 0 for i in 1N for j in 1thin x rgamma1 3 y y 4 y rnorm1 1 x 1 1 sqrt2 x 1 mati cx y mat include Rcpph using namespace Rcpp Rcppexport NumericMatrix gibbscppint N int thin NumericMatrix matN 2 double x 0 y 0 forint i 0 i N i forint j 0 j thin j x rgamma1 3 1 y y 40 y rnorm1 1 x 1 1 sqrt2 x 10 mati 0 x mati 1 y returnmat Estudo de caso Amostrador de Gibbs Gibbs sampler extraído do blog do Dirk Tutorial iniciando com o Rcpp 23 O tutorial apresentou apenas os aspectos básicos do Rcpp vignetteRcppquickref é uma excelente referência Página do Rcpp Effective C e Effective STL C Annotations Algorithm Libraries Pacotes adicionais do ecosistema Rcpp RcppArmadillo RcppEigen e RcppGSL Página do Rcpp Mais recursos 24 Paralelização Existem diversos esquemas de paralelização Não vamos entrar em detalhes em nenhum Loops em R tendem a ser lentos alternativas Escreva código em C através do Rcpp Paralelize o seu for se ele não for sequencial Pacotes úteis foreach parallel e doParallel Exemplos Código R Modulo4Script3R Estrutura de processamento Paralelização em R 26 Visualização de dados Uma abordagem baseada no ggplot2 Conhecendo o mercado aéreo brasileiro Prof Wagner Hugo Bonat Projeto pŕatico Conhecendo o mercado aéreo brasileiro Considere o conjunto de dados sobre voos e operações aéreas disponibilizado pela ANAC Agência Nacional de Aviação Comercial no seguinte endereço clique aqui O arquivo chamado de DadosEstatisticoscsv apresenta uma série de informações sobre as operadoras aéreas que atuam no Brasil Forneça o código R usando o framework tidyverse para responder cada uma das seguintes questões práticas Para a entrega da lista crie um arquivo Rmd com as perguntas o código R e os gráficos associados Envie o arquivo html gerado para correção 1 Considere que é de interesse visualizar a série temporal anual do número de decolagens para as 10 empresas nacionais que mais decolaram no período disponível de dados Faça duas visualizações uma para enfatizar a comparação entre as empresas e outra para enfatizar a visualização da série de cada empresa Considere apenas os registros que tenham o número de decolagens 2 Faça uma visualização de dados comparar o número de passageiros pagantes entre empresas nacionais e estrangeiras ao longo dos anos 3 Faça uma visualização de dados comparar o número de passageiros pagantes entre empresas nacionais e estrangeiras de acordo com o grupo de voo 4 Faça uma visualização para enfatizar a distribuição da variável número de passageiros pagantes de acordo com a região de origem e natureza do voo Enfatize a comparação entre DOMÉSTICA e INTERNACIONAL para cada região de origem Para criar o gráfico use o log10 da variável PASSAGEIROSPAGOS 5 Crie uma variável que indique a eficiencia no uso do combustível como sendo a razão entre o DISTAN CIAVOADAKM e COMBUSTIVELLITROS Compare as empresas de acordo com a região de origem e destino Use a escala y em log10 para facilitar a comparação das regiões 6 Faça uma visualização para mostrar a relação entre o consumo de combustível e a distância voada Con sidere empresas nacionais e internacionais e os diferentes anos para enriquecer a visualização Considere transformar as variáveis e use alguma forma estatística para enfatizar a forma do relacionamento 7 Baseado na visualização em 6 você diria que tem alguma incosistencia com esses dados Justique 8 Considerando apenas as empresas nacionais Faça uma visualização para investigar se a região do aeroporto de origem influencia na relação entre combustível e distancia voada 9 O indicador RTK Revenue tonne kilometer referese ao volume de toneladas quilômetros transportada Faça uma visualização da relação deste indicador com o consumo de combustível Filtre apenas observações com ambas variáveis maiores que zero Considere também que é de interesse comparar essa relação entre os diferentes anos Considere incluir alguma camada estatística para enfatizar o formato do relacionamento entre as variáveis 10 O indicador ATK Available tonne kilometer referese ao volume de tonelada quilômetro oferecida pela companhia Crie uma visualização para explorar a relação entre estes indicadores Considere aspectos como GRUPODEVOO e NATUREZA além do anos 1