Modernizando a análise de receitas: acompanhamento 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(tseries)
library(kableExtra)

# Function to calculate cumulative values
acum_valor <- function(Valor, n){
  data_n <- RcppRoll::roll_sum(Valor, n, na.rm = FALSE)
  data_lag_n <- dplyr::lag(data_n, n)
  data_acum_n = (((data_n/data_lag_n)-1)*100)
  return(data_acum_n)
}

# Read data from Excel
icmsn2<- readxl::read_excel("/Users/robertocalazans/icmsn2.xlsx")
icmsn2 <- icmsn2 %>%
  mutate(IPCA = as.numeric(IPCA),
         ICMS_N = as.numeric(ICMS_N))

# Data processing
tab1<- icmsn2 %>%  
  mutate(ICMSR = ICMS_N/IPCA) %>% 
  mutate(Mês_anterior = (ICMSR/lag(ICMSR, 1)-1)*100,
         Mesmo_mês_ano_anterior = (ICMSR/lag(ICMSR, 12)-1)*100) %>% 
  group_by(year = year(date), month = month(date)) 

# Rename columns
colnames(tab1) <- c("MESES", "IPCA", "ICMS_N", "ICMS_R", "MÊS ANTERIOR(%)", 
                    "MESMO MÊS DO ANO ANTERIOR(%)", "ANO", "MÊS")

# Calculate ICMSR_12m using the calculate_cumulative function
icmsr_12m <- apply(tab1[, 4], 2, function(x) acum_valor(x, 12)) %>% na.omit()

# Create a dataframe for the ICMSR_12m values
meses <- seq(as.Date("2001-12-01"), as.Date("2023-10-01"), by="month")
tab2<-data.frame(MESES=meses,icmsr_12m)

# Rename columns
colnames(tab2)<-c("MESES", "EM 12 MESES(%)")

# Merge the two dataframes
Tabela_ICMS <- inner_join(tab1, tab2, by = "MESES")

# Round the ICMS_N and ICMS_R columns to 2 decimal places
Tabela_ICMS$ICMS_N <- round(Tabela_ICMS$ICMS_N, 2)
Tabela_ICMS$ICMS_R <- round(Tabela_ICMS$ICMS_R, 2)

# Format ICMS_N and ICMS_R columns with thousands separator as "." and decimal separator as ","
Tabela_ICMS$ICMS_N <- format(Tabela_ICMS$ICMS_N, big.mark = ".", decimal.mark = ",")
Tabela_ICMS$ICMS_R <- format(Tabela_ICMS$ICMS_R, big.mark = ".", decimal.mark = ",")

# Use filter
Tabela_ICMS<- Tabela_ICMS %>%
  filter(MESES > "2021-12-01") 

# Rendering the kable table
kable(Tabela_ICMS[, -c(2)],
      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_styling(bootstrap_options = c("striped","bordered","condensed"), full_width = FALSE) %>%
  column_spec(1, bold = TRUE, color = "black") %>% 
  column_spec(2:8, color = "black")    

ICMS do RS, nominal e constante total, em (R$
milhões)
MESESICMS_NICMS_RMÊS ANTERIOR(%)MESMO MÊS DO ANO ANTERIOR(%)ANOMÊSEM 12 MESES(%)
2022-01-014.071,094.444,02-3.81.92022116.5
2022-02-013.340,243.609,76-18.8-5.32022216.3
2022-03-013.818,294.060,6012.5-2.72022314.7
2022-04-013.989,984.198,683.4-7.72022410.8
2022-05-013.683,713.858,25-8.1-6.7202256.8
2022-06-013.670,963.819,30-1.0-4.3202264.5
2022-07-013.598,413.769,46-1.3-27.020227-1.8
2022-08-013.364,613.537,28-6.2-18.420228-4.4
2022-09-013.626,093.823,278.1-16.220229-6.6
2022-10-013.364,913.527,07-7.7-19.2202210-8.6
2022-11-013.063,423.197,94-9.3-30.3202211-11.4
2022-12-013.660,943.798,1518.8-17.8202212-13.3
2023-01-013.604,483.719,86-2.1-16.320231-14.8
2023-02-012.958,763.028,04-18.6-16.120232-15.6
2023-03-013.185,173.236,776.9-20.320233-17.0
2023-04-014.026,914.067,3325.7-3.120234-16.7
2023-05-013.738,843.767,71-7.4-2.320235-16.4
2023-06-013.681,603.712,99-1.5-2.820236-16.4
2023-07-013.720,713.747,940.9-0.620237-14.1
2023-08-013.734,903.753,600.26.120238-12.2
2023-09-014.128,104.138,0010.28.220239-10.3
2023-10-013.813,983.813,98-7.88.1202310-8.1
#Direcione sua atenção para a saída de dados exibida acima.

 

Autor

Facebook
LinkedIn
Telegram
WhatsApp
Email
plugins premium WordPress