Tag

dplyr Archives - Análise Macro

Agregando e Juntando dados no R

By | Hackeando o R

As ferramentas mais poderosas para a Análise de dados com o R estão contidas no pacote {dplyr}, parte da família do {tidyverse}, que proporciona verbs (funções), que ajudam o usuário a resolver problemas de manipulação de dados de forma extremamente simples. Neste post de hoje, mostraremos, através do principais verbs do pacote, como é possível agregar e juntar dados.

Agregação

Agregação de dados é basicamente agregar observações de categorias referenciadas em uma coluna, ou mesmo, agregar diversas colunas, para realizar operações, em geral matemáticas e estatísticas, de forma que possamos resumir informações.

Os dois verbos principais para agregar e realizar operações do {dplyr}, respectivamente, são o group_by() e summarise(). Com group_by(), agrupamos a coluna inserida dentro da função. Em seguida, utilizamos a função summarise(), para escolhermos o nome da nova coluna a ser criada e a referenciamos em conjunto com a função da operação matemática ou estatística que desejamos escolhendo a coluna que queremos  aplicar o calculo.  Abaixo, utilizamos o dataset iris, que contém amostras sobre tamanhos de sépalas e pétalas de três diferentes espécies de flores como exemplos.

Neste primeiro exemplo, agrupamos as observações da coluna Species, ou seja, agrupamos as três espécies diferentes (categorias das observações), em seguida, utilizamos summarise(), escolhendo o nome da nova coluna, que será mean_petal, e calculamos a média da coluna Petal.Length com mean(). O resultado será a média de Petal.Length para cada espécie.

Nem sempre é necessário utilizarmos summarise, como no exemplo abaixo, no qual a função count() permite calcular a contagem do número de observações do data frame, porém, agrupados pelas categorias de Species.

E se quisermos aplicar algum calcular para diversas colunas? Poderíamos nomear e realizar o cálculo dentro de summarise para cada uma, entretanto, não seria viável caso tivéssemos inúmeras colunas para calcular. Para tanto, podemos utilizar a função across(), que permite aplicar a função do cálculo para cada coluna do data frame que escolhermos. Abaixo, escolhemos a coluna Sepal.Length até Petal.Width, utilizando dois pontos (:).

A função across() também permite que sejam aplicadas condições para o cálculo de colunas em conjunto com outros verbs. Vejamos abaixo a utilização de where(), que permite utilizarmos uma condição para a aplicação da função. A condição colocada em where() é de que para toda coluna numérica (is.numeric()), seja aplicado o cálculo da média. O ~ em mean, significa que toda a operação à esquerda do operador seja em função do parte direita, isto é, será aplicado a média para toda a condição satisfeita.

Juntar dados

É quase certeza que ao trabalhar com dados, iremos nos deparar com a missão de juntar data frames. Por sorte, o pacote {dplyr} também nos fornece formas de juntar diferentes data frames. Os verbs utilizados para realizar esse procedimento são conhecidos como _joins(). Cada um com um nome diferente, possuindo um comportamento único.

A ideia principal do _joins é simples: a junção do data frame só pode ocorrer caso eles tenham colunas com observações em comum, de forma que eles sejam relacionais.

Utilizaremos os datasets do pacote {nycflights13}, contendo os datasets flights e airports.

Começaremos selecionando apenas algumas colunas do dataset flights para que possamos diminuir o seu tamanho.

Nosso objetivo aqui será juntar o data frame flights_r com o data frame airports, para que possamos encontrar os voos que se relacionam com os aeroportos através das transportadores aéreas (coluna carrier).

Para juntar as colunas em comum, podemos utilizar o left_join, como o nome diz, juntaremos as observações da coluna do data frame da esquerda, para encaixar na coluna em comum com o data frame da direita. Exemplificando: inner_join(x, y...) Temos que x é o data frame da esquerda, e y é o data frame da direita. Abaixo, juntamos as colunas de flights_r em airlines.

Veja que citamos também o argumento by = "carrier" no segundo exemplo. Esse procedimento é utilizado caso seja necessário especificar o nome da coluna para que a função reconhece qual desejamos juntar.

Caso quisermos realizar o procedimento contrário de left_join(), utilizamos o right_join(). Abaixo o exemplo possui um resultado similar, a diferença é que está sendo juntado as observações da direita na da esquerda.

E caso quisermos juntar os dados em comum de ambos os data frame, sem exceção? Podemos utilizar o verb inner_join(). Abaixo, utilizando os data sets band_members e band_instrument, juntamos a coluna name, para observações em comum de ambos os data frames.

E para juntar todos os dados? Podemos utilizar o verb full_join, abaixo, juntamos todos os dados de band_members e band_instruments2, veja que desta vez especificamos a coluna para ser juntada, devido ao fato de que band_instruments2 possui a coluna de nomes diferentes.

Quer saber mais?

Veja nossos cursos de R e Python aplicados para a Análise de Dados e Economia

_____________________________________________

PROCV no R

By | Hackeando o R

A função PROCV é amplamente conhecida no mundo das planilhas eletrônicas, com o importante papel de facilitar o trabalho na montagem e procura de dados. É definida como uma forma de buscar os valores correspondentes de uma coluna , com base em um ID (um valor comum que esteja procurando), retornando esses valores correspondentes em outra célula. Para realizar essa tarefa no R é extremamente fácil, e para tanto, iremos demonstrar como podemos realizar essa tarefa neste post.

Para realizar o mesmo procedimento do PROCV no R utilizaremos a família de funções 'joins' do pacote {dplyr}, conhecido por ser parte importante do {tidyverse} e peça chave na manipulação de dados no R. Conhecidos como "mutating joins", essas funções são descritas como funções que adicionam colunas de y para x, juntando suas observações baseadas em chaves, isto é,  colunas iguais de ambos os data frame, retornado os valores em comuns (isto é, tal qual um chave definida) em outro data frame. Existem quatro funções dos mutating joins:

      • inner_join() Junta os valores de x e y, isto é, retorna um data frame com observações interseccionados;
      • left_join() Junta todos os valores de x. É a função que mais se assemelha com o PROCV;
      • right_join() Junta todos os valores de y. É igual a função acima, porém especificando y;
      • full_join() Junta todos os valores de x ou y.

Para exemplificar melhor, segue a estrutura dos joins:

Em que é o data frame com os valores, y é o data frame das chaves e by é o argumento que específica qual coluna está inserido os dados da chave que "grudam" x e y. O data frame que é utilizado como chave, por óbvio, muda a depender do join utilizado. Neste caso, o left_join() considera a junção de x em y, ou seja, somente os valores de x serão considerados no resultado em relação a y.

Exemplo

Como exemplo, iremos utilizar dois data frames do pacote {Lahman}, que contém dados sobre estatísticas da MLB. Queremos juntar a coluna 'playerID' de um data frame com outro. Como queremos que sejam todos os valores do data frame x, escolhido aqui como Batting, utilizaremos a função left_join(), para exemplificar o uso do PROCV no R.

Repare no output que automaticamente a função reconheceu que a coluna a ser utilizada como chave foi "playerID", por óbvio, as vezes isso nem sempre ocorre, sendo necessário a utilização do argumento by, principalmente quando por mais que as colunas tenham os mesmo valores, possuam nomes diferentes.  Observe também que somente os valores de x (Batting) em relação a y (Master) foram mantidos, excluindo todos os valores de y,  isto por conta do efeito do uso de left_join().

Quer saber mais?

Veja nossos cursos de Python aplicado: R e Python para Economistas, Econometria usando R e Python e Estatística usando R e Python

Migrando do Excel para R e Python

By | Hackeando o R, Python

Todos sabemos que boa parte do armazenamento e do uso dados viveu (ou ainda vive) dentro de planilhas eletrônicas, principalmente pelo Excel. Não podemos deixar de negar todos os pontos benéficos do uso dessas planilhas, seja pela simplicidade ou pela facilidade de aprender a utilizar uma. Por outro lado, sabemos das dificuldades que o  uso do Excel podem impor, comparado com as linguagens de programação R e Python, principalmente para a área de limpeza de dados, análise exploratória de grandes bases de dados e modelagem. Neste post, iremos mostrar aos usuários do Excel pontos em comuns com R e Python e também o que se pode alcançar a mais com essas linguagens.

Excel e Análise de dados

O Excel, por historicamente estar relacionado com o uso de dados, consequentemente leva aos seus usuários como intuitivamente a utilizar e compreender como trabalhar com dados: é possível ordenar, filtrar, agrupar, juntar dados, calcular suas medidas estatísticas e criar gráficos. Este é um conhecimento útil para análise de dados, porém, haverá momentos em que o usuário ficará preso em pouca variedade de técnicas, além de que se for realizar um passo adiante nessas técnicas irá encontrar dificuldades (no qual será o ponto que R e Python irão preencher).

Para começar nossas comparações e estudos, iremos pegar como exemplo um dataset (um conjunto de dados) com suas colunas (variáveis) e observações (linhas). Cada observação de uma coluna é indexada a outra observação de outra coluna. Importante dizer que uma coluna deve ser homogênea, isto é, possuir o mesmo tipo de dado. A grosso modo, existem dois tipos: categórico e quantitativo (que se dividem em mais tipos).

Veja um exemplo de dataset no Excel:

A partir das variáveis que encontram no dataset, o usuários do Excel poderiam ter uma variedade de recursos e funções para analisá-lo: medidas de tendência central (média, moda, mediana), medidas de dispersão (variância e desvio padrão), ordenamento e agrupamento de categoria, entre outras diversas possibilidades.

R para Análise de dados e Tidyverse

No R, começamos na forma em que podemos manipular os dados, por mais que estejamos lidando aqui com um dataset que está estruturado, é útil para que possamos realizar cálculos e tirar variáveis/observações que não é de nosso interesse. Para isso, iremos apresentar o mundo do Tidyverse, que envolve uma família de pacotes do R, utilizado para manipular dados. As funções mais comuns do Tidyverse são:

  • select() - seleciona as colunas de interesse;
  • mutate() - cria novas colunas baseado nas colunas já existentes;
  • rename() - renomeia as colunas de interesse;
  • arrange() - ordena as colunas de formas crescente ou decrescente;
  • filter() - seleciona as linhas com base em uma condição;
  • group_by() - agrupa as linhas (normalmente dados categóricos) das colunas de interesse;
  • summarize() - agrega os valores de cada grupo (útil para realizar cálculos agrupados);
  • left_join() - junta dois datasets que possuem uma mesma coluna correspondente.

Com o dataset (que no R e Python chamaremos de DataFrame) iris (que vem em conjunto do pacote Tidyverse no R), podemos fazer alguns exemplos, utilizando o Tidyverse para manipulação de dados. O primeiro passo será carregar o pacote (caso não tenha, instale com install.packages('tidyverse')). A função head() permite que possamos dar uma olhada nos dados antes de começar. Entendido os dados, podemos selecionar as colunas de interesse, com a função select(), veja que no primeiro argumento deve ser inserido o DataFrame que queremos utilizar e no segundo argumento a coluna deste DataFrameAlém de selecionar pelo nome, podemos selecionar pelo número da ordem da coluna no DataFrame. No exemplo, selecionamos as colunas de 1 até 3, utilizando 1:3.

Para  realizar o caminho contrário, isto é, retirar colunas de um DataFrame, utilizamos a mesma função, porém, com o símbolo de negação ! do R, que a grosso modo, significa realizar o contrário.

 

 

Para realizar mudanças nas colunas, utilizamos a função mutate(), seguindo o mesmo processo da função anterior, utilizando como primeiro argumento o DataFrame que queremos, por outro lado, como queremos criar uma nova coluna, devemos mudar um pouco a sintaxe, criando um nome para a nova coluna e mudando os valores que queremos com uma função ou cálculo. No exemplo, utilizamos toupper() para que todos as letras da colunas Species sejam maiúsculas.

Para renomear a coluna, utilizamos rename(), orientando o novo nome ao nome atual da coluna. Mudado de Sepal.Length para sepal_length.

A função arrange() irá permitir que a coluna Species fique em ordem crescente. Essa função também reconhece variáveis quantitativas, ordenando números por ordem crescente ou descrecente.

O filter(), como dito, permite filtrar as linhas de acordo com critérios escolhidos. No primeiro uso, colocamos como condição que apenas as observações do DataFrame que possuem Sepal.Width maior que 3.6 apareçam. No segundo uso, colocamos como condição que apenas as Species de nome setosa estivessem no DataFrame. E por último, mostramos como podemos colocar mais de uma condição misturando as duas condições anteriores utilizando o &.

Para agrupar os dados, utilizamos a função group_by, porém, não é tão útil utiliza-la sozinha, visto que precisamos realizar uma chamada de um cálculo ou mudanças nas observações para que tenha efeito. Para isso, o summarize() é uma ótima combinação, permitindo que seja feito operações nas colunas de acordo com o grupo selecionado pelo group_by(). No exemplo, calculamos a média de Sepal.Width para cada Species. Veja também que utilizamos o símbolo %>%, uma função do Tidyverse que nos ajuda a utilizar mais de uma função em sequencia.

Por fim, podemos juntar DataFrames diferentes (ou iguais no caso) para que possamos manipula-los em conjunto. O segredo é que ambos os DataFrames devem possuem pelo menos uma coluna em comum, de forma que elas tenham uma relação entre si. No exemplo, utilizamos a função left_join  para juntar o DataFrame iris da esquerda com o da direito, de acordo com a coluna Species.

Python para Análise de dados e pandas

O Python, assim como o R como Tidyverse, também possui uma biblioteca extremamente importante para facilitar a análise de dados, que é o pandas,  uma biblioteca que oferece um ferramental gigantesco não só para criar e utilizar DataFrames, como também para manipula-los. Nos exemplos, também iremos mostrar os mesmos resultados que obtivemos com o R e o Tidyverse, porém utilizando o pandas do Python.

O primeiro passo será carregar a biblioteca pandas no Python e também o DataFrame iris, que neste caso, utilizamos um arquivo .csv em conjunto com a função do pandas read_csv().

Utilizando a função head(), verificamos o nosso Dataframe para que possamos trabalhar. O primeiro passo será como selecionar colunas no Python, que segue apenas chamando o nosso DataFrame iris e através de dois colchete, selecionarmos os nomes das colunas queremos. Caso utilizarmos apenas um colchete, será retornado um objeto do tipo Series, e não DataFrame, o que não nos é útil no momento.

Para o caminho contrário, usamos drop() para que a coluna de interesse seja excluída do DataFrame. Veja que utilizamos o argumentos axis, isso porque queremos dropar colunas e não linhas.

Para criar novas colunas, seguimos o mesmo raciocínio de colchetes para selecionar colunas, porém utilizamos operadores matemáticos para realizar o procedimento. Veja que no exemplo somamos duas colunas selecionando-as com apenas um colchete (o suficiente para selecionar os valores).

Para ordenar as colunas, utilizamos a função sort_values(), especificando a coluna de interesse com o argumento by. O raciocinio desta função é o mesmo que o do Tidyverse.

Para realizar filtros, o raciocínio segue o mesmo para selecionar colunas, a diferença é que utilizamos o operador lógico para realizar o filtro. O porém aqui é que o que é retornado é na realidade um vetor de True e False dos valores que preencheram a condição exigida. A solução é utilizar o objeto do filtro dentro de um colchete do DataFrame para selecionar as observações do DataFrame.

Em relação ao agrupamento, utilizamos a função groupby() para selecionar a coluna de interesse. Logo em seguinda, utilizamos a função mean() para obter a média de todas as colunas agrupadas por Species.

E por fim, para juntarmos DataFrames, utilizamos a função merge(), que permite juntar DataFrames que possuem colunas em comum. Na função, o argumento on nos permite especificar qual coluna será essa. O argumento how especificar qual coluna será a base.

Vimos neste post as principais funções do R e Python que se assemelham com aquelas utilizadas no Excel para análise de dados. Existe ainda um enorme mundo a ser percorrer em ambas as linguagens, tanto na parte Estatística, de Visualização e também por Modelagem. Aqui na Análise Macro realizamos post diários sobre ambas as linguagens, ensinando desde o básico até o avançado. Para compreender ainda mais ambas as linguagens, nossos Cursos de R e Python aplicados a Ciências de Dados, Economia e Finanças pode lhe ajudar mais ainda.

Quer aprender mais sobre R e Python? 

Abrimos hoje, 22/3, as inscrições com 30% de desconto para as Turmas de Outono dos nossos Cursos Aplicados de R e Python. As vagas com esse desconto são limitadas aos primeiros inscritos. Haverá vagas para 25 Cursos Livres e 3 Formações. As turmas de Outono terão início no dia 04/04 e contarão com Cursos de Introdução à Programação em R ou Python, de modo que não é necessário nenhum conhecimento prévio nas linguagens. Para todos os detalhes sobre as Turmas de Outono, entre neste link e garanta sua vaga!

Nível de Atividade é destaque na Análise Macro

By | NewsLetter

Abaixo, você vê tudo o que foi publicado na AM ao longo da semana:

- [#Indicadores] Inflação esperada para 2020 segue abaixo da meta
- [#PolíticaMonetária] O papel das expectativas na condução da política monetária
- [#ComentáriodeConjuntura] Produção Industrial é o patinho feio da recuperação
- [#NíveldeAtividade] Um novembro decepcionante para o nível de atividade
- [#NíveldeAtividade] IBC-Br avança em novembro

E fique ligado: as inscrições para as Turmas 2020.1 dos nossos Cursos Aplicados de R começam no próximo dia 21/01! Clique aqui e conheça nossos Cursos!

Venha com a gente para o mundo da análise de dados!!! 🙂

1º Semana de 2020 é agitada em indicadores

By | NewsLetter

Abaixo, você vê tudo o que foi publicado na AM ao longo da semana:

- [#Indicadores] Análise do 1º Boletim Focus de 2020
- [#ComentáriodeConjuntura] Estimando um modelo de correção de erros entre a Produção de Veículos e a Produção Industrial
- [#DicasdeR] Começando a programar com o R
- [#Python] Começando a programar com Python
- [#PIB] Indústria decepciona em novembro
- [#Inflação] Núcleos de Inflação seguem bem comportados

E fique ligado: as inscrições para as Turmas 2020.1 dos nossos Cursos Aplicados de R começam no próximo dia 21/01! Clique aqui e conheça nossos Cursos!

Venha com a gente para o mundo da análise de dados!!! 🙂

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais
e conteúdos exclusivos sobre Análise de Dados!

Assinar Gratuitamente