- 
              Aula 06 - Laboratório II2015-01-30
 SourceQuestões iniciaisSobre dplyr e tidyrPara estas questões usaremos a base de dados flights, ela está inserida no pacote nycflights13por isso é necessário utilizar o comando:library(nycflights13)Se você não tiver o pacote instalado use o comando: install.packages("nycflighs13")E em seguida use o library(nycflights13).library(dplyr) flights %>% tbl_df## Source: local data frame [336,776 x 16] ## ## year month day dep_time dep_delay arr_time arr_delay carrier tailnum ## 1 2013 1 1 517 2 830 11 UA N14228 ## 2 2013 1 1 533 4 850 20 UA N24211 ## 3 2013 1 1 542 2 923 33 AA N619AA ## 4 2013 1 1 544 -1 1004 -18 B6 N804JB ## 5 2013 1 1 554 -6 812 -25 DL N668DN ## 6 2013 1 1 554 -4 740 12 UA N39463 ## 7 2013 1 1 555 -5 913 19 B6 N516JB ## 8 2013 1 1 557 -3 709 -14 EV N829AS ## 9 2013 1 1 557 -3 838 -8 B6 N593JB ## 10 2013 1 1 558 -2 753 8 AA N3ALAA ## .. ... ... ... ... ... ... ... ... ... ## Variables not shown: flight (int), origin (chr), dest (chr), air_time ## (dbl), distance (dbl), hour (dbl), minute (dbl)Com o comando ?flightsvocê pode ver o que significa cada uma das variáveis do banco de dados.filter- Atribua a uma tabela apenas os voos de janeiro de 2013.
- Atribua a uma tabela apenas os voos de janeiro ou fevereiro de 2013.
- Atribua a uma tabela apenas os vôos com distância maior do que 1000 milhas.
 select- Atribua a uma tabela apenas as colunas monthedep_delay.
- Atribua a uma tabela apenas as colunas monthedep_delay, os nomes dessas colunas devem sermeseatraso.
- Retire da tabela as colunas tailnum,originedest
 mutate- Calcule as colunas ganho_de_tempoque é dado pordep_delay - arr_delayevelocidadedada pordistance / air_time * 60.
- Calcule o horário de chegada considerando as colunas hour,minuteeair_time. A tabela deve conter duas colunas novas:hour2com a hora de chegada eminute2com o minuto de chegada.
 summarise- Calcule a média da distância de todos os vôos.
- Calcule a média da distância dos vôos por mês
- Calcule a média, mediana, primeiro quartil e terceiro quartil do tempo de viagem por mês.
 arrange- Ordene a base de dados pelo atraso na partida em ordem crescente.
- Repita a questão anterior, porém na ordem decrescente.
 spread- Crie uma tabela em que cada linha é um dia e cada coluna é o atraso médio de partida por mês.
 Resultado esperado: ## Source: local data frame [6 x 13] ## ## day 1 2 3 4 5 6 ## 1 1 11.548926 10.852909 11.015890 12.421436 2.903427 2.778220 ## 2 2 13.858824 5.422059 8.026525 8.260204 6.388548 34.013366 ## 3 3 10.987832 7.018868 6.065934 3.452525 14.181535 25.309698 ## 4 4 8.951595 10.924078 4.753910 6.963265 8.820270 4.111925 ## 5 5 5.732218 5.322727 5.018162 5.905102 4.577387 4.878756 ## 6 6 7.148014 5.621501 21.012626 4.950521 7.595701 5.056760 ## Variables not shown: 7 (dbl), 8 (dbl), 9 (dbl), 10 (dbl), 11 (dbl), 12 ## (dbl)Dica: você precisará usar group_by,summariseespread. Lembre-se também do argumentona.rm.- Repita a mesma operação, mas dessa vez cada coluna será uma hora do dia.
 Resultado esperado: ## Source: local data frame [6 x 32] ## ## hour 1 2 3 4 5 6 ## 1 0 120.142857 127.387097 91.600000 34.50 102.882353 39.555556 ## 2 1 150.875000 185.714286 202.000000 218.50 159.333333 257.000000 ## 3 2 NA 324.000000 156.000000 NA NA NA ## 4 3 NA 348.000000 NA NA NA NA ## 5 4 -6.100000 -6.500000 -4.571429 -6.00 -7.300000 -6.181818 ## 6 5 -4.564854 -4.620553 -4.427273 -4.68 -4.734375 -4.592885 ## Variables not shown: 7 (dbl), 8 (dbl), 9 (dbl), 10 (dbl), 11 (dbl), 12 ## (dbl), 13 (dbl), 14 (dbl), 15 (dbl), 16 (dbl), 17 (dbl), 18 (dbl), 19 ## (dbl), 20 (dbl), 21 (dbl), 22 (dbl), 23 (dbl), 24 (dbl), 25 (dbl), 26 ## (dbl), 27 (dbl), 28 (dbl), 29 (dbl), 30 (dbl), 31 (dbl)gatherConsiderando as tabelas criadas nas perguntas sobre o spread:- Transforme-as em um formato tidy.
 Resultado esperado: ## Source: local data frame [6 x 3] ## ## day mes delay ## 1 1 1 11.548926 ## 2 2 1 13.858824 ## 3 3 1 10.987832 ## 4 4 1 8.951595 ## 5 5 1 5.732218 ## 6 6 1 7.148014desafios (opcional)- Sumarise em uma tabela qual foi a média de atraso total ( - dep_delay + arr_delay) e seu intervalo de confiança por mês, apenas considerando os vôos que atrasaram (tempos negativos não são atrasos). Dica: o intervalo de confiança pode ser calculado por \(média \pm 1,96*\sqrt{\frac{var(x)}{n}}\)
- Summarise em uma tabela quais foram os 10 destinos com mais viagens com atraso superior a 60 minutos. Considere o atraso total definido na pergunta anterior. 
 Sobre ggplot2Nestes exercícios você utilizará a base de dados diamonds, do pacoteggplot2.Instalação do pacote ggplot2:install.packages("ggplot2")Para carregar o pacote ggplot2:library(ggplot2)Enfim, os dados: head(diamonds, 10)## carat cut color clarity depth table price x y z ## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 ## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 ## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 ## 4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63 ## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 ## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 ## 7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47 ## 8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53 ## 9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49 ## 10 0.23 Very Good H VS1 59.4 61 338 4.00 4.05 2.39Para ver uma descrição das variáveis deste banco de dados, utilize a função help():help(diamonds)Geral1. Segundo a Grammar of Graphics, o que é um gráfico estatístico? Responda de forma sucinta. 2. Qual operador é usado para acrescentar camadas em um gráfico no ggplot? geom_point3. Quais são os aspectos estéticos (aesthetics) exigidos (obrigatórios) da função geom_point()?Dica: utilizar a função help().4. Faça um gráfico de dispersão do preço (price) pela variável quilates (carat). Utilize as funções xlab()eylab()para trocar os labels dos eixos x e y, respectivamente.5. Utilize a função facet_grid()oufacet_wrap()para fazer gráficos de dispersão do preço pela variável quilate (o mesmo gráfico do exercício 1) para cada nível da variável claridade (clarity).geom_line6. Quais são os aspectos estéticos (aesthetics) exigidos (obrigatórios) da função geom_line()?Dica: visitar a seguinte página e consultar o tópico geom_line.7. Utilizando o argumento stat = summaryefun.y = mean, calcule a média do preço para cada corte, faça um gráfico desses pontos utilizando a funçãogeom_point()e trace uma reta sobre esses pontos utilizando a funçãogeom_line().Dicas: não se esqueça de especificar o aesthetic group =dentro dogeom_line(). Veja mais exemplos de como usar ostat = summaryaqui.geom_histogram8. Quais são os aspectos estéticos (aesthetics) exigidos (obrigatórios) da função geom_histogram()?9. Faça um histograma da variável preço. 10. Utilize a função geom_density()para adicionar ao gráfico anterior uma estimativa suavizada da densidade. Por que, neste caso, é preciso especificar o argumentoy =como..density..?geom_boxplot11. Quais são os aspectos estéticos (aesthetics) exigidos (obrigatórios) da função geom_boxplot()?12. Faça boxplots da variável preço pela variável corte (cut). geom_bar13. Quais são os aspectos estéticos (aesthetics) exigidos (obrigatórios) da função geom_bar()?14. Faça um gráfico de barras do número de diamantes em cada categoria da variável cor (color). Desafio (opcional)Supondo que esses diamantes são vendidos nos EUA, siga os seguintes passos: - Considerando que, para obter o seu lucro, um vendedor brasileiro venda um diamante (em reais) por - 2.61*price*2.2, acrescente uma coluna ao banco de dados representando o preço de venda no Brasil.
- Considere agora que, para importar um diamante diretamente dos EUA, uma transportadora cobre (em reais) - (carat*price*0.70)*2.61 + price*2.68, já considerando o preço de compra do diamante. Adicione ao banco de dados uma coluna referente ao preço de cada diamante se importado diretamente.
- Faça um gráfico de dispersão do preço de venda no Brasil pelo preço de importação. Adicione a esse gráfico uma reta x=y para avaliar quais diamantes compensam ser importados diretamente. 
- Mapeie a variável clarity ao gráfico acima. Quais são os tipos de claridades que, em geral, não compensam ser importadas diretamente? Faça o mesmo para a variável color. 
 Dica: para fazer a reta x=y, utilize a função geom_abline().Desafios com bases de dados reaisPrimeiro, instale o pacote abjutils. Para isso, instale primeiro o pacotedevtools.# verifica se o pacote devtools já está instalado e instala se não estiver if(!require(devtools)) install.packages('devtools') # verifica se o pacote abjutils já está instalado e instala se não estiver # Como o pacote não está no CRAN, instalamos via github usando o comando do pacote devtools if(!require(abjutils)) devtools::install_github('abjur/abjutils') # OBS: O pacote abjutils já vai carregar as bibliotecas dplyr, stringr e lubridatePNUDVamos começar com a base de dados do PNUD do lab 1, para aquecer :) Você pode carregar o banco de dados do PNUD rodando data(pnud_muni , package='abjutils')1 Refaça todas as análises do laboratório 1 usando dplyreggplot2.CoalitionsEssa base de dados contém informações de países que fazem parte da Organização Mundial do Comércio (OMC, em inglês World Trade Organization - WTO). Para melhorar e facilitar o comércio internacional, muitas vezes os países que fazem parte da OMC realizam acordos, que chamamos de coalizões. Geralmente uma coalizão envolve muitos países ao mesmo tempo. data(wto_data , package='abjutils') data(wto_dyad_sample, package='abjutils')A base de dados wto_datacontém informações básicas de cada país, como PIB, PIB per capita, latitude, longitude, hemisfério, identificador de regime político, etc. O código do país é dado na variávelccodeA base de dados wto_dyad_samplecontém, em cada linha, uma coalizão ocorrida ou não na Organização Mundial do Comércio, entre dois países (uma "díade" ou, em inglês, dyad).Os países estão identificados pelas colunas ccode1eccode2(analogamente à basewto_data). A coalizão é identificadacoalition, que vale1se houve coalizão e0caso contrário. A colunaccoalitioné um identificador de qual foi a coalizão que aconteceu (Mercosul, acordos da Europa, etc).1 Faça um mapa com as posições geográficas dos países, com um mapa múndi no fundo. Dica: Leia o script da aula 05. 2. Qual é a unidade observacional (o que identifica uma observação) na base wto_data?3. Quantas coalizões tivemos em cada ano? 4. Qual é o código do país que entrou mais vezes em alguma coalizão? 5. Construa uma matriz de adjacências usando dplyretidyr. Queremos umdata.framewto_adjcom número de linhas igual ao número de colunas, e o conteúdo da célulawto_adj[i, j]é1se o país da linha entra em coalizão com o país da coluna em dado ano e dada coalizão, e0caso contrário. Utilize a funçãorow.names()para atribuir os nomes às linhas.CARFA base de dados do Conselho Administrativo de Recursos Fiscais (CARF) é uma das muitas bases que geralmente temos de lidar na área de jurimetria (estatística aplicada ao direito). Trata-se de uma base de dados sobre processos tributários. Montamos uma base de dados com todas as decisões encontradas no conselho. Nosso banco de dados tem, inicialmente, 264594 linhas e somente 9 colunas. As variáveis estão descritas abaixo: - id: número sequencial único para identificar cada acórdão.
- n_processo: número do processo.
- n_decisao: número da decisão.
- ano: ano em que o acórdão foi proferido (de acordo com o site do CARF).
- tipo_recurso: identifica se a decisão é sobre um recurso voluntário, recurso de ofício, recurso especial, etc.
- contribuinte: identifica o nome do contribuinte, em texto livre.
- relator: identifica o nome do relator, em texto livre.
- txt_ementa: texto completo da ementa, em texto livre. Geralmente esse texto contém informações do tributo discutido, fundamentação da decisão e decisão.
- txt_decisao: texto completo da decisão, em texto livre. Geralmente é uma parte da ementa, contendo apenas a parte relacionada à decisão, mas não é uma regra.
 1 Quantos processos temos na base de dados? 2 Construa um gráfico contendo o volume de acórdãos em cada ano. Você nota algum ano com comportamento estranho? 3 Agora retire da base os acórdãos que contêm texto da decisão e texto da ementa vazios. Refaça o gráfico e interprete. 4 Utilizando a função str_detect(), crie colunas (que valemTRUEouFALSE) na base de dados de acordo com as expressões regulares abaixo.negar_provimento <- 'negar?(do)? (o )?provimento|negou se (o )?provimento|recurso nao provido' dar_provimento <- 'dar?(do)? (o )?provimento|deu se (o )?provimento|recurso provido' em_parte <- 'em parte|parcial' diligencia <- 'diligencia' nao_conhecer <- 'conhec' anular <- 'nul(a|o|i)'5 Faça um gráfico de barras mostrando a quantidade de acórdãos em que foi dado provimento, negado provimento, etc. Considere somente os casos em que tipo_recursoé recurso voluntário.SABESPUsando um web crawler desenvolvido em R, fizemos o download da base de dados da SABESP. Quem tiver interesse nesses dados, acesse aqui. data(sabesp, package='abjutils')1 Descreva a base de dados. 2 Crie um boxplot por mês, mostrando os lugares separadamente. 3 Tente montar um gráfico parecido com esse (inclusive as cores e as labels inclinadas do eixo x). Não vale olhar o código do repositório no github!  4 Construa uma tabela descritiva contendo a média, mediana, desvio padrão, primeiro e terceiro quartis em relação à pluviometria, agrupando por ano e por lugar. 5 Comente sobre a crise hídrica em São Paulo com base em conhecimentos próprios e usando os dados da sabesp. 

