Modernizando a análise de receitas: análise do ICMS com R e ChatGPT





O R é uma linguagem de programação gratuita projetada especificamente para computação estatística e gráficos. É amplamente utilizada por estatísticos, cientistas de dados, pesquisadores e estudiosos para análise de informações estatísticas,  para visualização e para modelagens de séries temporais, análise preditiva, machine learning e redes neurais.

Além disso, existe uma estrutura, chamada de RMarkdown, que permite combinar o poder do R com a simplicidade da formatação de texto e gráficos. Isso possibilita a execução de uma sequência de comandos R diretamente em documentos de texto para criar relatórios dinâmicos, trabalhos acadêmicos e mesmo páginas em HTML.

O ChatGPT também desempenha um papel valioso no aprimoramento de códigos em R, possibilitando a identificação e correção de erros, bem como a elevação do nível e a sofisticação de scripts. Contudo, é importante ressaltar que o conhecimento prévio da linguagem é fundamental, uma vez que o ChatGPT, ocasionalmente, oferece soluções que podem ser inconsistentes com um problema proposto. Nesse sentido, a crítica proveniente do analista de dados mantém sua relevância. Vale destacar que o presente script não foi gerado diretamente por meio da linguagem da OpenAI, sendo apenas utilizado para melhor expressar a lógica de organização do código.

Essas ferramentas conferem ao trabalho do analista uma nova dimensão e eficiência, reduzindo consideravelmente a necessidade dos pacotes do Microsoft Office. A coleta de informações agora ocorre diretamente em fontes primárias através de rotinas pré-estabelecidas. Os dados são consolidados em um ambiente integrado, facilitando a análise econômica, a modelagem e a visualização gráfica. Essa abordagem não apenas moderniza o processo, mas também otimiza a produtividade do trabalho.

Para dar um exemplo disso, demonstro abaixo um código para o acompanhamento da arrecadação de ICMS nominal (ICMS_N) e a valores constantes (ICMS_R), ou qualquer outra fonte de receita, destacando as variações de seu crescimento no período: mês anterior, mesmo mês no ano anterior e 12 meses.

Para começar, é necessário obter uma tabela com três colunas essenciais: MESES, IPCA (ou CONVERSOR) e ICMS-N. Os dados históricos de arrecadação nominal do Imposto sobre Circulação de Mercadorias e Serviços (ICMS) no Rio Grande do Sul podem ser extraídos em https://receita.dados.gov.br. A série temporal proposta inicia em “2000-01-01” e se utiliza um comando filter do pacote dplyr para selecionar a saída da tabela final (kable extra).

Ao se analisar as instruções abaixo, observe que utilizei um conversor para ajustar os valores nominais ao Índice Nacional de Preços ao Consumidor Amplo (IPCA) do Instituto Brasileiro de Geografia e Estatística (IBGE). Recomendo realizar correção direta no código, caso o leitor escolha a utilização do índice oficial do IPCA. Essa correção fica a cargo do usuário interessado. Certifique-se de selecionar a área correta para leitura no seu computador. Isso garantirá que os dados sejam importados de forma precisa.

Os dados são lidos no computador por meio do pacote “readxl::read_excel”, como exemplificado abaixo:

#dados_icmsn <- readxl::read_excel("/Users/escolha_área_dados/icmsn.xlsx")

Veja toda a estrutura do código abaixo.

library(tidyverse)
library(kableExtra)
library(RcppRoll)
library(readxl)
library(writexl)

# Função para calcular valores acumulados
acum_valor <- function(Valor, n) {
  data_n <- roll_sum(Valor, n, na.rm = FALSE)
  data_lag_n <- lag(data_n, n)
  data_acum_n <- (((data_n / data_lag_n) - 1) * 100)
  return(data_acum_n)
}

# Ler dados do Excel
dados <- read_excel("/Users/robertocalazans/icmsn_ipca.xlsx")
dados$MESES <- as.Date(dados$MESES)

# Converter IPCA e ICMS para numérico e calcular ICMSR e variações
tbl1 <- dados %>%
  mutate(across(c(IPCA, ICMS), as.numeric)) %>%
  mutate(ICMSR = ICMS / IPCA * last(IPCA),
         Mês_anterior = (ICMSR / lag(ICMSR, 1) - 1) * 100,
         Mesmo_mês_ano_anterior = (ICMSR / lag(ICMSR, 12) - 1) * 100) %>%
  group_by(year = year(MESES), month = month(MESES)) %>%
  rename(
    `ICMS Nominal` = ICMS,
    `ICMS Real` = ICMSR,
    `Var. mensal (%)` = Mês_anterior,
    `Var. mesmo mês ano ant. (%)` = Mesmo_mês_ano_anterior,
    `Ano` = year,
    `Mês do ano` = month
  )

# Calcular a variação acumulada de 12 meses e criar sequência de datas
tbl2_df <- acum_valor(tbl1$`ICMS Real`, 12) %>%
  na.omit() %>%
  data.frame(MESES = seq(min(tbl1$MESES) + months(23), max(tbl1$MESES), by = "month"),
             `Em 12 Meses (%)` = .)

# Juntar as tabelas
Tab_ICMS <- inner_join(tbl1, tbl2_df, by = "MESES") %>%
  mutate(
    `ICMS Nominal` = round(`ICMS Nominal`, 1),
    `ICMS Real` = round(`ICMS Real`, 1),
    across(c(`ICMS Nominal`, `ICMS Real`), ~format(., big.mark = ".", decimal.mark = ","))
  )

# Filtrar e renderizar a tabela kable
Tab_kable <- Tab_ICMS[, -c(2, 7, 8)] %>%
  filter(MESES > as.Date("2022-12-01")) 

kable(Tab_kable,
      caption = "<center><font color='black'>ICMS do RS, nominal e constante total, em (R$ milhões)</font>",
      format = "html",
      digits = 1,
      align = "c",
      escape = FALSE) %>%
  kable_classic_2(html_font = "arial", font_size = 12) %>%
  kable_styling(bootstrap_options = c("striped", "bordered", "condensed"), full_width = FALSE) %>%
  column_spec(1, bold = FALSE, color = "black") %>%
  column_spec(2:5, color = "black")

ICMS do RS, nominal e constante total, em (R$
milhões)
MESESICMS NominalICMS RealVar. mensal (%)Var. mesmo mês ano ant. (%)Em.12.Meses….
2023-01-013.604,53.818,7-2.1-16.3-14.8
2023-02-012.958,83.108,5-18.6-16.1-15.6
2023-03-013.185,23.322,86.9-20.3-17.0
2023-04-014.026,94.175,425.7-3.1-16.7
2023-05-013.738,83.867,8-7.4-2.3-16.4
2023-06-013.681,63.811,7-1.5-2.8-16.4
2023-07-013.720,73.847,50.9-0.6-14.1
2023-08-013.734,93.853,40.26.1-12.2
2023-09-014.128,14.24810.28.2-10.3
2023-10-013.8143.915,3-7.88.1-8.1
2023-11-014.060,74.1576.226.6-3.5
2023-12-014.085,84.159,30.16.7-1.2
2024-01-014.418,94.479,77.717.31.8
2024-02-013.745,63.765,9-15.921.14.6
2024-03-013.910,43.925,34.218.17.9
2024-04-014.300,74.300,79.63.08.5
#Direcione sua atenção para a saída de dados exibida acima.


 

Autor

Facebook
LinkedIn
Telegram
WhatsApp
Email
plugins premium WordPress