Category

Python

Fazendo limpeza de dados Macroeconômicos com R e o Python

By | Hackeando o R, Python

O processo de limpeza de dados é extremamente importante para a análise de dados. Sem esta etapa, seria impossível lidar com dados "sujos", dos quais possuem formatos, classes e estruturas não compatíveis com o R e o Python, principalmente para o modo de lidar com dados Macroeconômicos. O objetivo do post de hoje será mostrar os pontos principais que devem ser levados em consideração ao realizar o processo de limpeza de dados.

Ao realizar a importação de dados Macroeconômicos, é comum enfrentar alguns desafios para efetivamente lidar com o dataset, sendo eles:

  • Nomes de colunas indesejadas;
  • Colunas (variáveis) não necessárias;
  • Filtragem;
  • Formatos/tipos dos dados de variáveis não corretos;
  • Problemas com o formato de data

Cada problema listado acima pode ser resolvido facilmente utilizando o R e o Python. Elencaremos cada problema em ambas as linguagens

Limpeza de dados Macroeconômicos no R

Tomaremos como exemplo a série do PIB a preços de mercado em milhões retirado do Ipeadata utilizando o pacote {ipeadatar}. O primeiro passo será investigar o data frame e sua estrutura

Vemos que o data frame já é importado em classe tibble com cinco colunas, representando o código, a data, o valor da série, o nome do território e o código territorial, respectivamente. Não há motivos para manter as colunas que não sejam a de data e do valor da série, portanto, iremos remover estas colunas utilizando a função select().

O próximo passo, este mais a gosto do usuário, será renomear as colunas do objeto. Como queremos que sejam facilmente reconhecidos as variáveis, utilizaremos nomes que sugerem o seu significado.

Um ponto interessante do R é a facilidade de manipulação com séries temporais. Ao inspecionar o tibble, vemos que há um intervalo trimestral para as observações, seria interessante, portanto, utilizar um formato de data mais conveniente para o caso. Podemos realizar a mudança utilizando a função yearquarter() do pacote {tsibble}.

Fácil até então, certo? Porém, nem sempre pode ser tão facilitado assim. Um caso em que as variáveis não são importadas com seus devidos formatos ocorre ao utilizar o pacote {sidrar} para obter dados do Sidra - IBGE.

Como exemplo podemos utilizar a Pesquisa Mensal de Serviços da Tabela 6442. Obtemos sua API através do site do Sidra.

Ao analisar o data frame importado, não parece tão simples, certo? O primeiro passo para a limpeza, será definir quais variáveis necessitamos e destas, quais devem ser realizadas as manipulações. Para o momento, queremos o valor da variável, a coluna que define a categoria que o valor se encaixa, uma representado se o valor possui ou não ajuste sazonal, uma coluna definindo qual medida se refere a variável, sendo os valores a receita nominal ou o volume, e não menos importante, a data das observações.

O processo será selecionar estas colunas citadas, mudar seus nomes, filtrar a categoria de interesse da medida, mudar de long para wide e por fim, realizar as mudanças necessárias para a data.

Limpeza de dados Macroeconômicos no Python

Todos os procedimentos acima podem ser feitos também utilizando o Python. Seremos mais diretos desta vez, importando a tabela 1442 do Sidra com a biblioteca {sidrapy} que se refere aos dados do IPCA.

O primeiro procedimento será avaliar  o data frame importado e realizar os ajustes necessários.

Veja que os dados importados possuem colunas com nomes diferentes daqueles importados pelo R, a diferença estão que as colunas com os verdadeiros nomes estão localizados na primeiro observação do data frame, ou seja, precisamos substituir as colunas pela primeira observação.

O segundo passo será selecionar apenas as variáveis de interesse, bem como alterar os seus nomes para algo mais útil.

Por fim, devemos realizar o filtro para a variação do IPCA mensal, de acordo com a categoria inserida na coluna 'variable' e em seguida, alterar a coluna de data para o tipo datetime e a realocar para o índice do data frame.

Quer saber mais sobre R e Python?

Veja nossos cursos de:

Saindo do Excel para o R e Python

By | Hackeando o R, Python

Para aqueles que desejam realizar o processo de análise de dados, o Excel pode ser útil, porém, é possível melhorar ainda mais esse processo utilizando o R e Python. Neste post de hoje, mostraremos para os usuários do Excel como é fácil realizar uma análise exploratória de dados, seguindo o procedimento de avaliar as estatísticas descritivas e a visualização de dados, obtendo resultados que podem ser adquiridos dentro do Excel, porém, de forma simplificada e rápida utilizando as linguagens R e Python.

R e Python são linguagens que se tornaram famosas pelo seu uso no processo de Análise de Dados, simplificando todo o processo de coleta, limpeza, visualização, modelagem e comunicação. De fato, as duas linguagens são diferentes, principalmente em seus propósitos, porém, se encaixaram muito bem na área. O interessante do R e do Python é que ambos são open source, ou seja, qualquer usuário pode criar pacotes e realizar sua divulgação, o que permite as soluções de diversos problemas possam ser compartilhados mundo afora.

Através deste mecanismo de criação de pacotes, tanto R e Python tiveram aqueles que mais se destacaram e que auxiliam no processo de análise exploratória de dados. Enquanto o R possui o Tidyverse (que na realidade é uma junção de diversos pacotes). O Python possui o numpy, o pandas e o matplotlib/seaborn para realizar o processo.

Nos exemplos abaixo, utilizaremos os pacotes citados, além de outros, para mostrar aos usuários do Excel como é fácil utilizar o R e o Python. O dataset utilizado como exemplo será o mpg, que traz informações sobre carros produzido no EUA, Asia e Europa na década de 70 e 80 e suas respectivas características. Você pode baixar o arquivo em .xlsx do mpg por aqui para poder reproduzir o código abaixo.

Análise Exploratória no R

Para realizar a análise exploratória no R utilizaremos três pacotes importante para realizar a manipulação, obter as estatísticas descritivas e auxiliar no processo de visualização de dados.

O primeiro passo para realizar a análise é importar a planilha do dataset no R utilizando a função read_excel(). Em seguida, devemos investigar a estrutura dos dados e suas variáveis, vasculhando as colunas e as observações do mesmo. Ao termos uma ideia de como é o Data Frame, selecionamos as colunas de interesse que iremos utilizar.

O resto do processo é analisar através das estatísticas descritivas e sumarização a configuração dos dados. Esse processo deve ser necessário para tirar insights e responder dúvidas: Em média, qual o peso dos carros? Os pesos dos carros variam muito? Há valores discrepantes nesta variável? Se separarmos por origem dos carros, o padrão de cada variável mudará? Esse formato de perguntas são necessários em qualquer análise exploratória, e auxilia também no processo de modelagem.

Nos códigos acima calculamos valores preciosos sobre as estatísticas descritivas do dataset. Primeiro realizando este cálculo para todas as variáveis como um todo, e depois, separando-as por categorias da origem dos carros. Veja que no processo utilizamos tanto o {dplyr} e o {skimr} (e os dois juntos) para obter os resultados.

Abaixo, o processo de análise também seguirá com as mesmas perguntas, porém, utilizaremos de métodos gráficos para obter a distribuição e o relacionamento das variáveis com o pacote {ggplot2}.

Análise Exploratória no Python

No Python, o processo seguirá o mesmo, com as mesmas perguntas, porém, obviamente, utilizaremos formas diferentes para calcular as estatísticas descritivas e a visualização. A intuição é a mesma, o que muda aqui é somente a sintaxe.

Importaremos os dataset com a função read_excel do pandas e inspecionaremos os dados para em seguida selecionar as variáveis de interersse.



Realizamos o processo de análise de dados sumarizando as estatísticas descritivas e separando os valores por categorias de origem do carros.

Por fim, visualizamos a distribuição e o relacionamento entre as variáveis do dataset.

Quer saber mais?

Veja nossos cursos de R e Python para Análise de dados. Também veja nossa trilha de Ciência de dados.

Estatísticas Descritivas em R e Python

By | Hackeando o R, Python

Estatísticas descritivas são números que sumarizam as características de um conjunto de dados. É útil para prover informações valiosas de forma a responder questões, sendo importantíssimas para o processo da analise exploratória de dados. No post de hoje, ensinaremos o básico sobre as estatísticas descritivas, bem como mostraremos como realizar a aplicação no R e Python.

As estatísticas descritivas possuem algumas características e pontos importantes que devemos elencar antes de fato demonstrar com o R e Python. Em primeiro lugar, devemos separar os tipos de dados que estamos lidando, os dois mais importantes são:

  • categóricos (ou qualitativo): registra quantis ou as características sobre as observações, tais como gênero, partido politico e etc.
  • numérico (quantitativo): registra os números ou a contagem de uma observação, tais como peso, idade, número de filhos e etc.

A aplicação para as variáveis do mundo real pode ser estabelecida pela quantidade de variáveis que se está descrevendo ou sumarizando.

  • univariadas: quando se descreve e sumariza apenas uma variável
  • bivariada/multivariadas: quando se descreve duas ou mais variáveis.

Os cálculo realizados para sumarizar os dados também possuem classificações, separando-os em tipos de medidas.

  • Medidas de tendencia central: responde sobre o que está no centro do dados, medidas importantes incluem a média, mediana e a moda
  • Medidas de variabilidade: responde sobre o quanto os dados estão dispersos, medidas importantes incluem a variância e o desvio padrão
  • Medidas de relacionamento: responde sobre a relação entre duas variáveis em um dataset, medidas importantes incluem a covariância e a correlação.

Pontos importante:

Percentis: os percentis são os números relativos que representam a localização dos dados de uma variável que são divididos em 100. Fazem parte do que é conhecido como Quantis. Por exemplo, imagine que o individuo que corresponda a uma observação da variável que mede a renda de todos os brasileiros tenha uma renda que esteja acima do 90° percentil, isso significa que esse individuo possui uma renda maior que 90% dos brasileiros.  Uma regra interessante: a mediana sempre representa o 50° percentil.

outliers: É um ponto que difere significativamente da maioria dos dados de um dataset. Entre os motivos para esse acontecimento é: variação natural do dados, mudança estrututral do sistema observado, bem como mudança na forma de mensurar os dados, erros na coleta dos dados.

Agora que realizamos uma breve introdução, podemos partir para prática e entender como podemos aplicar com o R e o Python

Estatísticas Descritivas no R

Como exemplo, utilizaremos os dados do dataset iris, e o primeiro passo para começarmos a analisar as estatísticas descritivas do dataset é dar uma olhada no seus aspectos, visualizando o data frame e a sua estrutura.

Transformamos o data frame em tibble para que seja melhor trabalhado o conjunto de dados. Ao olhar o data frame e a sua estrutura com a função str(),vemos que há informações valiosas: possui 5 colunas com 150 observações, sendo quatro dessas colunas numéricas e uma do tipo factor (dados categóricos). Já cumprimos o primeiro passo de identificar os tipos de dados que temos em mãos. O próximo passo será calcular os tipos de medidas.

Tipos de dados

Tipos de medidas

Medidas de tendência central

Para calcular as medidas de tendência central, como a média, mediana e moda no R, selecionamos as colunas (variáveis) que queremos analisar e utilizamos as seguintes funções:

Para a moda, veja que realizamos uma combinação de table() com sort(), onde a primeira função permite calcular a frequência de ocorrência de um valor e a segunda que o número dessa frequência seja ordenado do maior para o menor.

Medidas de variabilidade

Para calcular a variância e o desvio padrão, utilizamos de duas funções no R, selecionando as variáveis que queremos.

Medidas de relacionamento

Para calcular o relacionamento de duas variáveis no R, é possível utilizar a funções cov() e cor() para calcular a covariância e correlação, respectivamente. Veja que selecionamos duas variáveis para realizar o cálculo. É possível criar também uma matriz de covariância e correlação com as mesmas funções, porém, é necessário especificar as colunas do tipo numérico para o R.

Percentis

Para encontrar um percentil específico, utiliza-se a função quantile, com a posição que queremos encontrar os dados.

Sumarização

Para facilitar o trabalho da análise sobre estatísticas descritivas, a função summary() retorna os indicadores mais importantes para análise de todas as colunas.

O pacote skimr torna poderoso a sumarização no R, retornando informações mais bem trabalhadas.


Estatísticas descritivas no Python

Utilizar o Python para calcular as estatísticas descritivas é tão fácil quanto o R, precisaremos apenas das bibliotecas numpy e pandas para realizar esta tarefa. No Python, primeiro, devemos carregar os dados de exemplo que utilizamos acima para então seguir para o processo de análise.


Tipos de medidas

Medidas de tendência central

No Python, a lógica é a mesma, pegamos uma coluna representando uma variável e calculamos as respectivas medidas.

Medidas de variabilidade

Para a variabilidade, veja que o método segue o mesmo, retirando a coluna de interesse e aplicando as funções var() e std()

Medidas de relacionamento

No Python, construímos uma matriz de covariância e correlação (também sendo possível calcular somente de duas variáveis).

 

Sumarização

O processo de sumarização no Python pode ser alcançado através do método descibre(), que retorna medidas preciosas de todas as colunas.

Para tornar mais poderoso a sumarização, a biblioteca skimpy nos ajuda a melhorar a análise.

 

Quer saber mais?

Veja nosso curso de Estatística usando R e Python, onde ensinamos a como utilizar o R e Python para realizar análises estatísticas com exemplos reais.

Regressões com variáveis qualitativas

By | Hackeando o R, Python

Ao construir relações de diversas variáveis por meio dos dados, o mais comum é pensar em realizar esta tarefa com variáveis quantitativas, isto é, de forma totalmente numérica. Mas, e se tivermos apenas variáveis nominais, isto é, categóricas, como podemos incorporá-las em um modelo? Para tanto, é possível construir uma Regressão com variáveis qualitativas. No post de hoje, abordaremos duas formas de se utilizar variáveis qualitativas em regressões: o modelo que utiliza variáveis binárias (dummies) nos preditores e o modelo que utiliza variáveis de respostas qualitativas, conhecido como Regressão Logística.

Regressão com Variáveis Binárias (dummies)

Na investigação de uma variável dependente em relação as suas variáveis independente, isto é, as formas da qual as duas se relacionam, sempre pensamos que elas sejam valores numéricos, conhecidos como variáveis proporcionais ou contínuas. Porém, não é a única forma associação entre variáveis, é comum que o regressando seja influenciado não só por essas variáveis proporcionais (como preços, renda, idade, etc), mas também por variáveis especialmente qualitativa, conhecidos com variáveis nominais, tais como gênero, raça, cor, nacionalidade, etc.

Em geral, quando indicamos que as variáveis independentes são nominais, dizemos que há a presença ou "ausência" de uma "qualidade" ou atributo. É possível "quantificar" essa lógica criando variáveis binárias que assumem valores de 1 ou 0.

Variável Binária

Portanto, uma variável binária (dummy) pode representar dois estados:

  1. 0, ausência da característica de interesse
  2. 1, presença da característica de interesse

Podemos então estimar uma Regressão com variáveis independente nominais e ordinais, da mesma forma que estimamos uma Regressão Linear. Nesse caso, utilizamos uma variável categórica com dois estados, 0 e 1.  Podemos definir a equação com variáveis independentes com duas categorias como:

     $$Y_i = \alpha + \beta_1 X_i +\beta_2 D_i  + e_i$$

Em que X representa a variável independente proporcional ou numérica, e D representa a variável qualitativas ou nominal. O  $\beta_2$ indica o quanto Y seria, em média,  maior (menor) para a categoria D = 1 que a categoria D = 0, independente do valor de X, sendo a categoria de referência da análise D = 0 (podendo ser escolhido ao contrário também).

Regressão com variável binária (dummy) no R

No R, é possível criar facilmente uma Regressão com variáveis binárias, tudo o que necessitamos é ter mãos as variáveis qualitativas bem definidas e utilizar a função lm() para realizar os cálculos. Utilizaremos como exemplo o dataset wage1 contido no pacote do {wooldridge}, que traz características de diversas pessoas, sejam qualitativas ou quantitativas.

Como objetivo, iremos desvendar o que afeta o salário hora, para isso, utilizaremos as variáveis female (1 se é mulher), educ (anos de educação), exper (anos de experiência) e ternure (anos com o atual emprego).

Com efeito, vimos que a variável qualitativa escolhida realmente afeta o salário hora, no caso, como temos como referência 1 como sendo mulher, o efeito da variável female diz há uma relação negativa com o salário hora.

Regressão com variável binária (dummy) no Python

No Python, seguimos a mesma lógica que fizemos no R, porém, utilizando a função ols() da biblioteca statsmodels. Para exemplificar, utilizamos também o dataset do wooldridge, wage1, obtendo os mesmo resultado que anteriormente.

Regressões Logísticas

Diferente das regressões com variáveis binárias, que utilizam dois valores para os preditores como forma de explicar o relacionamento de duas variáveis, e se quisermos ao invés de utilizar uma variável proporcional (quantitativa) como dependente, utilizar uma variável binária como resposta? Isto é, uma forma de probabilidade de algo acontecer ou não? Nesse caso, é possível utilizar a Regressão Logística.

O recurso que temos em mãos é poder estimar a probabilidade associada a ocorrência de determinado evento, sendo útil em diversos estudos. Como a ideia é estimar uma probabilidade, os resultados estarão contidos entre 0 e 1.  Se utiliza do estimador de máxima verossimilhança, como forma de maximizar a probabilidade de ocorrência da amostra, dado os coeficientes das variáveis independentes.

Regressão Logística no R

Para implementar a regressão logística no R, utilizaremos a função glm(), com o dataset affairs  do wooldridge, que traz os dados de uma pesquisa sobre relações extraconjugais. A coluna "affair' é uma variável binária, que retorna 1, em caso de relações extraconjugal, e 0, caso contrário. Desta forma, utilizaremos a variáveis independentes de algumas colunas para estimar a variável dependente.

As coluna que iremos utilizar são: male (em que 1 é homem), age (idade) e ysrmarr (anos de casado). Vemos nos resultados que há grande significância na variável anos de casado, com um coeficiente positivo.

Regressão Logística no Python

Utilizar a Regressão logística no Python segue os mesmo princípios que no R, no código iremos apenas adicionar a api do statsmodels que permitira escolhe a família de distribuição que iremos utilizar na função glm(), que será a binomial (conhecida como logit), igual realizamos no R.

Quer saber mais sobre R e Python?

Veja nossos cursos de aplicados de R e Python para Economistas, Estatística usando R e Python, Econometria usando R e Python.

Lidando com datas no Python: as bibliotecas time e datetime

By | Python

Trabalhar com datas em uma computador pode ser algumas vezes complicado, visto a vasta quantidade detalhes que essa área oferece. Apesar disso, é possível descomplicar totalmente essa questão através de duas bibliotecas do Python: time e datetime. No post de hoje, iremos ensinar alguns pontos importantes sobre tempo e data no Python, bem como realizaremos exemplo com as duas bibliotecas.

Tipos de datas

No Python, podemos definir os tipos de dados para datas para os seguintes:

  • data: armazena uma data de calendário
  • time: armazena a hora do dia na forma de horas, minutos, segundos e microssegundos
  • datetime: armazena data e hora
  • timedelta: diferença entre dois valores de datas
  • tzinfo: fuso horário (time zone)

Para especificação de formatos de datas, é comum usar o padrão %Y para ano com quatro dígitos, %m para mês com dois dígitos e %d para dia com dois dígitos, formando o padrão %Y-%m-%d, comum para a importação de diversos dados em séries temporais ao redor do mundo. Ainda é possível que seja adicionado %H, que representa as horas em formato de 24h.

Existem diversos outros formatos para anos, meses, dias e horas, seguindo a lista abaixo:

ano

  • %y: ano de dois dígitos (22)
  • %Y: ano de quatro dígitos (2022)

mês

  • %b: Mês abreviado (Mar)
  • %B: Nomes completos de meses (March)
  • %m: Mês como número (03 ou 3)

dia

  • %d: Dia do mês (30)

dia da semana

  • %a: Nome abreviado (Wed)
  • %A: Nome completo
  • %w: número (3 - Sunday sempre como 0 até Saturday como 6)

horas

  • %H: 24 horas (00 até 23)
  • %I: 12 horas (01 até 12)
  • %M: minutos (01 até 59)

segundos

  • %S: segundos de 00 até 59

AM/PM

  • %p: utilizado junto com horas em formatos de 12 horas

Feito a introdução, podemos prosseguir com as bibliotecas e suas respectivas funções.

Time

A biblioteca time oferece ao usuário mecanismos de obter os valores do tempo no Python. O chamado tipo de dado timestamp, que são instantes específicos no tempo. Além também de calcular o tempo de processamento de um iteração ou função, útil para que aqueles que necessitam comparar tempos de resposta de modelos, de forma que se possa otimizar o trabalho e reduzir custos.

Construímos um vetor de tempo através do módulo locatime(), com o formato de struct_time, contendo todas as informações do momentos atual em formato de horas, dias, semanas, mês, anos, etc. É possível transformar esse tipo de dado com o módulo asctime, tornando-o mais interessante.

Através do código abaixo, podemos calcular o tempo de processamento do for construído. Vejam que realizamos através da diferença de contagem de dois objetos de data, resultando em um dado do tipo timedelta.

Datetime

A biblioteca datetime oferece uma gama de ferramentas para a criação e manipulação de séries no tempo para data frame. O seu uso em conjunto com o pandas os torna poderosos, de forma que aqueles que lidam com séries temporais podem se beneficiar.

Construímos um objeto do tipo datetime com a data de interesse através de datetime(). Veja que criamos um objeto com o dia atual, mas também podemos realizar com outras datas.

Para construir um objeto do tipo datetime com o momento atual, utilizamos os módulo now(), que retorna esse dado.

Se quisermos realizar transformações de datas, utilizamos strptime que passando o objeto de strings, e o formato que queremos, geramos um objeto datetime.

Também é possível construir essa transformação com objeto date time de formato numérico, utilizando strftime, porém com outro formato.

Por fim, podemos realizar comparações lógicas com as datas, além também de realizar operações númericas, sendo o mais comum o timedelta, que nos retorna a diferença entre duas datas.

Apesar de simples o contexto do datetime, a biblioteca é extremamente útil com o pandas, oferecendo um grande ferramental para manipulação de séries no tempo, como mudanças do índice, frequências e intervalos de datas, operações, entre outros.

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

Assinar Gratuitamente