Analisando os grupos do IPCA com o Python

Atualizado em:

autor: Luiz Henrique

A inflação é conhecida como o termo que representa a taxa de crescimento do nível geral de preços entre dois períodos distintos. No Brasil, o indicador que consolidou-se como o principal índice de preços é o Índice de Preços ao Consumidor Amplo (IPCA), divulgado pelo IBGE e amplamente utilizado pela autoridade monetária como referência para realizar o controle da inflação. Neste artigo mostramos como obter a contribuição de cada grupo do IPCA usando o Python.

O IPCA é divulgado mensalmente pelo IBGE, e podemos importar os dados diretamente do SIDRA, através de sua API. Para auxiliar no processo de extração de dados usamos a biblioteca sidrapy, que permite obtermos os dados inserindo os parâmetros sobre a API da tabela de interesse.

Nosso objetivo aqui será o de buscar a série de peso e variação de cada grupo do IPCA, e de posse dos dados, calculamos a contribuição de cada grupo sobre o IPCA. Ao fim, criamos um gráfico de barras que permite avaliarmos o IPCA por grupos.

# Importa as bibliotecas necessárias
!pip install sidrapy
import sidrapy

import numpy as np
import pandas as pd

import datetime as dt

import seaborn as sns
from matplotlib import pyplot as plt
from plotnine import *

IPCA Contribuição por grupo

O primeiro passo será buscar a série na plataforma do sidra de forma que possamos resgatar os códigos do parâmetros.

Uma vez obtida a API da tabela 1737, e seus respectivos códigos, utilizamos a função get_table para obter a série. A API que gerou os dados foi a seguinte: /t/7060/n1/all/v/63,66/p/all/c315/7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202,v66%204.

# Importa as variações e os pesos dos grupos do IPCA
ipca_gp_raw = sidrapy.get_table(table_code = '7060',
                             territorial_level = '1',
                             ibge_territorial_code = 'all',
                             variable = '63,66',
                             period = 'all',
                             classification = '315/7170,7445,7486,7558,7625,7660,7712,7766,7786'
                             )
# Realiza a limpeza e manipulação da tabela
ipca_gp =  (
    ipca_gp_raw
    .loc[1:,['V', 'D2C', 'D3N', 'D4N']]
    .rename(columns = {'V': 'value',
                       'D2C': 'date',
                       'D3N': 'variable',
                       'D4N': 'groups'})
    .assign(variable = lambda x: x['variable'].replace({'IPCA - Variação mensal' : 'variacao',
                                                        'IPCA - Peso mensal': 'peso'}),
            date  = lambda x: pd.to_datetime(x['date'],
                                              format = "%Y%m"),
            value = lambda x: x['value'].astype(float),
            groups = lambda x: x['groups'].astype(str)
           )
    .pipe(lambda x: x.loc[x.date > '2007-01-01'])
        )
# Torna em formato wide e calcula a contribuição de cada grupo pro IPCA
ipca_gp_wider = (
    ipca_gp
    .pivot_table(index = ['date', 'groups'],
                 columns = 'variable',
                 values = 'value')
    .reset_index()
    .assign(contribuicao = lambda x: (x.peso * x.variacao) / 100)
                )
ipca_gp_wider[['date', 'groups', 'contribuicao']].tail(n = 9)
variabledategroupscontribuicao
4232023-12-011.Alimentação e bebidas0.233151
4242023-12-012.Habitação0.052217
4252023-12-013.Artigos de residência0.028743
4262023-12-014.Vestuário0.033312
4272023-12-015.Transportes0.100522
4282023-12-016.Saúde e cuidados pessoais0.046640
4292023-12-017.Despesas pessoais0.048705
4302023-12-018.Educação0.014062
4312023-12-019.Comunicação0.001929
# Cores para gráficos
colors = {'blue': '#282f6b',
          'yellow': '#eace3f',
          'red'   : "#b22200",
          'green': '#224f20',
          'purple' : "#5f487c",
          'gray': '#666666',
          'orange' : '#b35c1e',
          'turquoise' : "#419391",
          'green_two' : "#839c56"
          }
# Cria o gráfico
(ggplot(ipca_gp_wider) +
        aes(x='date') +
        geom_col(aes(y='contribuicao', fill='groups', colour='groups')) +
        geom_hline(yintercept=0, colour='black', linetype='dashed') +
        scale_x_date(date_breaks = "3 month", date_labels = "%b/%Y") +
        scale_colour_manual(values=list(colors.values())) +
        scale_fill_manual(values=list(colors.values())) +
        labs(x='', y='', title='Contribuição dos Grupos do IPCA para a Inflação Mensal', caption = 'Elaborado por: analisemacro.com.br | Fonte: IBGE/SIDRA')+
        theme(figure_size = (14, 6),
              legend_position = "bottom")
        )

png

<Figure Size: (1400 x 600)>