Análise Financeira Comparativa: CEMIG x CTEEP

Avaliação de Indicadores Financeiros e Desempenho (2022-2024)

Author

Jonathan de sena e Rayanne Ferreira

Published

2025-04-29



1 Introdução

Esta análise compara o desempenho financeiro da CEMIG (Companhia Energética de Minas Gerais) e da CTEEP (Companhia de Transmissão de Energia Elétrica Paulista) entre 2022 e 2024.

Foram avaliados indicadores financeiros fundamentais, incluindo liquidez, rentabilidade, endividamento e eficiência operacional.

A análise apresenta médias ponderadas, notas finais para cada empresa, e visualizações comparativas geradas com ggplot2.

Note

Os dados foram extraídos dos arquivos dados_cemig.csv e dados_cteep.csv, com cálculos realizados em R.

2 Metodologia

2.1 Dados

  • Fonte: Balanços patrimoniais, demonstrações de resultados e fluxos de caixa de CEMIG e CTEEP disponibilizados no site da B3.
  • Período: 2022 a 2024.
  • Arquivos: dados_cemig.csv e dados_cteep.csv.

2.2 Indicadores Calculados

  • Liquidez Corrente: Ativo Circulante / Passivo Circulante : Saúde financeira de curto prazo.
  • ROE: Lucro Líquido / Patrimônio Líquido : Retorno sobre o patrimônio;
  • Dívida Líquida/EBITDA: (Dívida Bruta - Caixa) / EBITDA : Capacidade de pagamento;
  • em EBITDA: EBITDA / Receita de Vendas : Eficiência operacional;
  • Grau de Endividamento: Dívida Bruta / Patrimônio Líquido : Estrutura de capital;
  • Composição do Endividamento: Passivo Circulante / Passivo Total : Perfil das dívidas.

2.3 Critérios

  • Média Ponderada: Pesos por ano (2024: 40%, 2023: 35%, 2022: 25%).

  • Nota Final: Ponderação dos indicadores com normalização:

    • maior é melhor para Liquidez, ROE, Margem EBITDA;
    • menor é melhor para Dívida Líquida/EBITDA, Grau e Composição de Endividamento.
  • Visualizações: Gráficos comparativos por indicador e médias ponderadas.

3 Cálculo dos índices contábeis

3.1 CEMIG

Code
# Carregar pacotes 

library(tidyverse)
Warning: pacote 'tidyverse' foi compilado no R versão 4.4.3
Warning: pacote 'readr' foi compilado no R versão 4.4.2
Warning: pacote 'dplyr' foi compilado no R versão 4.4.3
Warning: pacote 'lubridate' foi compilado no R versão 4.4.3
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Code
library(dplyr)
library(ggplot2)


# 1. Análise da empresa CEMIG - Companhia Energética de Minas Gerais -------
cemig <- read.csv("dados_cemig.csv")

# 1.1 Criando as variáveis para o cálculo dos índices da CEMIG 2022 a 2024 -----

## Dados do Balanço Patrimonial Ativo
ativo_circulante_cemig <- cemig |>
  filter(Descrição == "Ativo Circulante") |>
  select(3:5) |> 
  as.numeric()

caixa_equivalentes_cemig <- cemig |> 
  filter(Descrição == "Caixa e Equivalentes de Caixa") |>
  select(3:5) |>
  as.numeric()

ativo_total_cemig <- cemig |>
  filter(Descrição == "Ativo Total") |> 
  select(3:5) |> 
  as.numeric()

## Dados do Balanço Patrimonial Passivo
passivo_circulante_cemig <- cemig |> 
  filter(Descrição == "Passivo Circulante") |>
  select(3:5) |> 
  as.numeric()

passivo_nao_circulante_cemig <- cemig |> 
  filter(Descrição == "Passivo Não Circulante") |> 
  select(3:5) |> 
  as.numeric()

passivo_total_cemig <- cemig |> 
  filter(Descrição == "Passivo Total") |> 
  select(3:5) |> 
  as.numeric()

patrimonio_liquido_cemig <- cemig |> 
  filter(Descrição == "Patrimônio Líquido Consolidado") |> 
  select(3:5) |>
  as.numeric()

divida_bruta_cemig <- cemig |> 
  filter(Conta %in% c(
    # Passivo Circulante
    "02.01.04",       # Empréstimos e Financiamentos (total circulante)
    "2.01.04.01",     # Empréstimos e Financiamentos 
    "2.01.04.02",     # Debêntures (circulante)
    "2.01.04.03",     # Financiamento por Arrendamento (circulante)
    
    # Passivo Não Circulante
    "02.02.01",       # Empréstimos e Financiamentos (total não circulante)
    "2.02.01.01",     # Empréstimos e Financiamentos
    "2.02.01.02",     # Debêntures (não circulante)
    "2.02.01.03"      # Financiamento por Arrendamento (não circulante)
  )) |> 
  summarise(across(3:5, sum, na.rm = TRUE)) |> 
  as.numeric()
Warning: There was 1 warning in `summarise()`.
ℹ In argument: `across(3:5, sum, na.rm = TRUE)`.
Caused by warning:
! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
Supply arguments directly to `.fns` through an anonymous function instead.

  # Previously
  across(a:b, mean, na.rm = TRUE)

  # Now
  across(a:b, \(x) mean(x, na.rm = TRUE))
Code
## Dados da Demonstração de Resultados (DRE)

receita_venda_cemig <- cemig |> 
  filter(Descrição == "Receita de Venda de Bens e/ou Serviços") |>
  select(3:5)|> 
  as.numeric()

lucro_liquido_cemig <- cemig |> 
  filter(Descrição == "Lucro/Prejuízo Consolidado do Período") |>
  slice(1) |> 
  select(3:5) |> 
  as.numeric()

resultado_bruto_cemig <- cemig |>
  filter(Descrição == "Resultado Bruto") |>
  select(3:5) |> 
  as.numeric()

resultado_financeiro_cemig <- cemig |> 
  filter(Descrição == "Resultado Financeiro") |>
  select(3:5) |> 
  as.numeric()

## Dados da Demonstração do Fluxo de Caixa
depreciacao_amortizacao_cemig <- cemig |> 
  filter(Descrição == "Depreciação e Amortização") |>
  select(3:5) |> 
  as.numeric()

Variáveis intermediárias

Code
# 1.2 Cálculo das variáveis intermediárias --------------------------------------

divida_liquida_cemig <- divida_bruta_cemig - caixa_equivalentes_cemig
ebitda_cemig <- resultado_bruto_cemig + depreciacao_amortizacao_cemig - resultado_financeiro_cemig

Indicadores finais

Code
# 1.3 Cálculo dos indicadores finais -------------------------------------------
indicadores_cemig <- data.frame(
  Ano = c(2024, 2023, 2022),
  
  # Indicadores
  liquidez_corrente_cemig = ativo_circulante_cemig / passivo_circulante_cemig,
  roe_cemig = lucro_liquido_cemig / patrimonio_liquido_cemig,
  divida_liquida_ebitda_cemig = divida_liquida_cemig / ebitda_cemig,
  margem_ebitda_cemig = ebitda_cemig / receita_venda_cemig,
  grau_endividamento_cemig = divida_bruta_cemig / patrimonio_liquido_cemig,
  composicao_endividamento_cemig = passivo_circulante_cemig / passivo_total_cemig
)

3.2 CTEEP

Code
# 2. Análise da empresa CTEEP - Companhia de Transmissão de Energia Elétrica Paulista----
cteep <- read.csv("dados_cteep.csv")

# 2.1 Criando as variáveis para o cálculo dos índices da CTEEP 2022 a 2024 -----

## Dados do Balanço Patrimonial Ativo
ativo_circulante_cteep <- cteep |>
  filter(Descrição == "Ativo Circulante") |>
  select(3:5) |> 
  as.numeric()

caixa_equivalentes_cteep <- cteep |> 
  filter(Descrição == "Caixa e Equivalentes de Caixa") |>
  select(3:5) |>
  as.numeric()

ativo_total_cteep <- cteep |>
  filter(Descrição == "Ativo Total") |> 
  select(3:5) |> 
  as.numeric()

## Dados do Balanço Patrimonial Passivo
passivo_circulante_cteep <- cteep |> 
  filter(Descrição == "Passivo Circulante") |>
  select(3:5) |> 
  as.numeric()

passivo_nao_circulante_cteep <- cteep |> 
  filter(Descrição == "Passivo Não Circulante") |> 
  select(3:5) |> 
  as.numeric()

passivo_total_cteep <- cteep |> 
  filter(Descrição == "Passivo Total") |> 
  select(3:5) |> 
  as.numeric()

patrimonio_liquido_cteep <- cteep |> 
  filter(Descrição == "Patrimônio Líquido Consolidado") |> 
  select(3:5) |>
  as.numeric()

## Cálculo robusto da Dívida Bruta incluindo TODOS os componentes relevantes
divida_bruta_cteep <- cteep |> 
  filter(Conta %in% c(
    # Passivo Circulante
    "02.01.04",       # Empréstimos e Financiamentos (total circulante)
    "2.01.04.01",     # Empréstimos e Financiamentos 
    "2.01.04.02",     # Debêntures (circulante)
    "2.01.04.03",     # Financiamento por Arrendamento (circulante)
    
    # Passivo Não Circulante
    "02.02.01",       # Empréstimos e Financiamentos (total não circulante)
    "2.02.01.01",     # Empréstimos e Financiamentos 
    "2.02.01.02",     # Debêntures (não circulante)
    "2.02.01.03"      # Financiamento por Arrendamento (não circulante)
  )) |> 
  summarise(across(3:5, sum, na.rm = TRUE)) |> 
  as.numeric()

## Dados da Demonstração de Resultados (DRE)
receita_venda_cteep <- cteep |> 
  filter(Descrição == "Receita de Venda de Bens e/ou Serviços") |>
  select(3:5)|> 
  as.numeric()

lucro_liquido_cteep <- cteep |> 
  filter(Descrição == "Lucro/Prejuízo Consolidado do Período") |>
  slice(1) |> 
  select(3:5) |> 
  as.numeric()

resultado_bruto_cteep <- cteep |>
  filter(Descrição == "Resultado Bruto") |>
  select(3:5) |> 
  as.numeric()

resultado_financeiro_cteep <- cteep |> 
  filter(Descrição == "Resultado Financeiro") |>
  select(3:5) |> 
  as.numeric()

## Dados da Demonstração do Fluxo de Caixa
depreciacao_amortizacao_cteep <- cteep |> 
  filter(Descrição == "Depreciação e Amortização") |>
  select(3:5) |> 
  as.numeric()

# 2.2 Cálculo das variáveis intermediárias --------------------------------------
divida_liquida_cteep <- divida_bruta_cteep - caixa_equivalentes_cteep
ebitda_cteep <- resultado_bruto_cteep + depreciacao_amortizacao_cteep - resultado_financeiro_cteep

# 2.3 Cálculo dos indicadores finais -------------------------------------------
indicadores_cteep <- data.frame(
  Ano = c(2024, 2023, 2022),
  
  # Indicadores
  liquidez_corrente_cteep = ativo_circulante_cteep / passivo_circulante_cteep,
  roe_cteep = lucro_liquido_cteep / patrimonio_liquido_cteep,
  divida_liquida_ebitda_cteep = divida_liquida_cteep / ebitda_cteep,
  margem_ebitda_cteep = ebitda_cteep / receita_venda_cteep,
  grau_endividamento_cteep = divida_bruta_cteep / patrimonio_liquido_cteep,
  composicao_endividamento_cteep = passivo_circulante_cteep / passivo_total_cteep
)

4 Análise comparativa dos indicadores

Code
#| fig-width: 8   # Largura em polegadas
#| fig-height: 5  # Altura em polegadas
#| out-width: 50% # Redimensiona a saída (relativo ao slide)


# 3. Gráficos - Análise comparativa dos indicadores CEMIG x CTEEP --------

# 3.1 Configuração de cores -----
cores_cemig <- c("#1f77b4", "#4292c6", "#6baed6")  # Tons de azul (2024, 2023, 2022)
cores_cteep <- c("#238b45", "#41ab5d", "#74c476")   # Tons de verde (2024, 2023, 2022)

# 3.2 Função para criar os valores dos gráficos comparativos ----- 
plot_comparativo <- function(indicador_cemig, indicador_cteep, titulo, eixo_y) {

  # Criar dataframe para CEMIG
  df_cemig <- data.frame(
    Ano = factor(c(2024, 2023, 2022), levels = c(2024, 2023, 2022)),
    Valor = indicador_cemig,
    Empresa = "CEMIG"
  )
  
  # Criar dataframe para CTEEP
  df_cteep <- data.frame(
    Ano = factor(c(2024, 2023, 2022), levels = c(2024, 2023, 2022)),
    Valor = indicador_cteep,
    Empresa = "CTEEP"
  )
  
  # Combinar os dados
  df_plot <- rbind(df_cemig, df_cteep)
  
  # Garantir ordem correta das empresas
  df_plot$Empresa <- factor(df_plot$Empresa, levels = c("CEMIG", "CTEEP"))
  
  ggplot(df_plot, aes(x = Ano, y = Valor, fill = interaction(Empresa, Ano))) +
    geom_bar(stat = "identity", position = position_dodge(width = 0.8), width = 0.7) +
    scale_fill_manual(values = c(
      # Cores CEMIG (2024, 2023, 2022)
      "CEMIG.2024" = cores_cemig[1],
      "CEMIG.2023" = cores_cemig[2],
      "CEMIG.2022" = cores_cemig[3],
      # Cores CTEEP (2024, 2023, 2022)
      "CTEEP.2024" = cores_cteep[1],
      "CTEEP.2023" = cores_cteep[2],
      "CTEEP.2022" = cores_cteep[3]
    )) +
    facet_wrap(~Empresa, ncol = 2) +
    labs(title = titulo, x = "Ano", y = eixo_y) +
    theme_minimal() +
    theme(
      plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
      axis.title = element_text(size = 12),
      axis.text = element_text(size = 10),
      strip.text = element_text(face = "bold", size = 12),
      legend.position = "none"
    ) +
    scale_y_continuous(expand = expansion(mult = c(0, 0.1))) # Ajuste do eixo Y
}



# 3.3 Criar os gráficos para cada indicador ------

# Liquidez Corrente
plot_comparativo(indicadores_cemig$liquidez_corrente_cemig,
                         indicadores_cteep$liquidez_corrente_cteep,
                         "Comparativo de Liquidez Corrente (2022-2024)",
                         "Índice")

Code
# ROE
plot_comparativo(indicadores_cemig$roe_cemig,
                         indicadores_cteep$roe_cteep,
                         "Comparativo de Return on Equity - ROE (2022-2024)",
                         "Índice")

Code
# Dívida Líquida/EBITDA
plot_comparativo(indicadores_cemig$divida_liquida_ebitda_cemig,
                         indicadores_cteep$divida_liquida_ebitda_cteep,
                         "Comparativo de Dívida Líquida/EBITDA (2022-2024)",
                         "Razão")

Code
# Margem EBITDA
plot_comparativo(indicadores_cemig$margem_ebitda_cemig,
                         indicadores_cteep$margem_ebitda_cteep,
                         "Comparativo de Margem EBITDA (2022-2024)",
                         "Percentual")

Code
# Grau de Endividamento
plot_comparativo(indicadores_cemig$grau_endividamento_cemig,
                         indicadores_cteep$grau_endividamento_cteep,
                         "Comparativo de Grau de Endividamento (2022-2024)",
                         "Razão")

Code
# Composição do Endividamento
plot_comparativo(indicadores_cemig$composicao_endividamento_cemig,
                         indicadores_cteep$composicao_endividamento_cteep,
                         "Comparativo de Composição do Endividamento (2022-2024)",
                         "Percentual")

5 Cálculo da nota final

Nesta etapa, calculamos uma média que atribui maior importância aos anos mais recentes, refletindo a premissa de que dados recentes são mais relevantes para análise:

Metodologia:

Pesos temporais:

- 2024: 40% (ano mais recente)

- 2023: 35%

- 2022: 25% (ano mais antigo)

Fórmula:
Média Ponderada = Σ(valor_ano * peso_ano)

Implementação no Código:

  1. Define-se um vetor de pesos (pesos) na ordem cronológica inversa

  2. A função calcular_media_ponderada() multiplica cada valor pelo seu peso correspondente e soma os resultados

  3. across(where(is.numeric)) aplica o cálculo a todas as colunas numéricas do dataframe

5.1 Critérios para ranquear os índices

A pontuação final combina múltiplos indicadores financeiros com pesos pré-definidos, seguindo práticas de análise fundamentalista:

Critérios e Pesos:

Indicador Peso Interpretação
Dívida líquida/EBITDA 25%
Saúde financeira (menor = melhor)
Margem EBITDA
20%
Eficiência operacional
Roe 20%
Retorno sobre patrimônio
Liquidez Corrente
15%
Capacidade de pagamento
Grau de Endividamento
10%
Risco financeiro
Composição do Endividamento

10%

Perfil de dívidas
  • Processo em 3 Etapas:
    1. Normalização:

      • Padroniza os valores entre 0 e 1 usando normalizar()

      • Indicadores onde menor é melhor (como endividamento) são invertidos (inverter = TRUE)

    2. Aplicação de Pesos:
      Cada indicador normalizado é multiplicado por seu peso correspondente

    3. Somatório:
      A nota final é a soma ponderada de todos os indicadores

CEMIG:

Code
# 1.4 Calculando a média ponderada por ANO --------------------------------------

# Definir os pesos para cada ano na ordem correspondente (2024, 2023, 2022)
pesos <- c(0.40, 0.35, 0.25)

# Função para calcular média ponderada
calcular_media_ponderada <- function(valores) {
  sum(valores * pesos)  
}

# Calcular a média ponderada apenas nas colunas numéricas

medias_ponderadas_ano_cemig <- indicadores_cemig |>
  summarise(across(where(is.numeric), calcular_media_ponderada)) 



# 1.5 Calculando a nota final ponderando os indicadores (seguindo a análise fundamentalista) ----------------

# Definir pesos para cada indicador
pesos_indicadores <- c(
  divida_liquida_ebitda_cemig = 0.25,
  margem_ebitda_cemig = 0.20,
  roe_cemig = 0.20,
  liquidez_corrente_cemig = 0.15,
  grau_endividamento_cemig = 0.10,
  composicao_endividamento_cemig = 0.10
)

# Função de normalização com inversão para indicadores onde menor é melhor

normalizar <- function(x, inverter = FALSE) {
  if (inverter) {
    1 - ((x - min(x)) / (max(x) - min(x)))  # Inverte a escala para que menor = melhor
  } else {
    (x - min(x)) / (max(x) - min(x))        # Normal padrão para maior = melhor
  }
}

# Calcular nota final com normalização correta
nota_final_cemig <- indicadores_cemig |>
  mutate(
    # Indicadores onde MAIOR é melhor
    liquidez_corrente_cemig = normalizar(liquidez_corrente_cemig),
    roe_cemig = normalizar(roe_cemig),
    margem_ebitda_cemig = normalizar(margem_ebitda_cemig),
    
    # Indicadores onde MENOR é melhor (inverter = TRUE)
    divida_liquida_ebitda_cemig = normalizar(divida_liquida_ebitda_cemig, inverter = TRUE),
    grau_endividamento_cemig = normalizar(grau_endividamento_cemig, inverter = TRUE),
    composicao_endividamento_cemig = normalizar(composicao_endividamento_cemig, inverter = TRUE)
  ) |>
  summarise(
    Ano = "Nota Final",
    Nota = sum(
      divida_liquida_ebitda_cemig * pesos_indicadores["divida_liquida_ebitda_cemig"],
      margem_ebitda_cemig * pesos_indicadores["margem_ebitda_cemig"],
      roe_cemig * pesos_indicadores["roe_cemig"],
      liquidez_corrente_cemig * pesos_indicadores["liquidez_corrente_cemig"],
      grau_endividamento_cemig * pesos_indicadores["grau_endividamento_cemig"],
      composicao_endividamento_cemig * pesos_indicadores["composicao_endividamento_cemig"]
    ),
    .groups = 'drop'
  )

# Visualizar resultado

print("Nota final CEMIG")
[1] "Nota final CEMIG"
Code
print(nota_final_cemig)
         Ano     Nota
1 Nota Final 1.459683

CTEEP:

Code
# 2.4 Calculando a média ponderada por ANO --------------------------------------

# Definir os pesos para cada ano na ordem correspondente (2024, 2023, 2022)
pesos <- c(0.40, 0.35, 0.25)

# Função para calcular média ponderada
calcular_media_ponderada <- function(valores) {
  sum(valores * pesos)  
}

# Calcular a média ponderada apenas nas colunas numéricas
medias_ponderadas_ano_cteep <- indicadores_cteep |>
  summarise(across(where(is.numeric), calcular_media_ponderada)) 


# 2.5 Calculando a nota final ponderando os indicadores (seguindo a análise fundamentalista) ----------------

# Definir pesos para cada indicador
pesos_indicadores <- c(
  divida_liquida_ebitda_cteep = 0.25,
  margem_ebitda_cteep = 0.20,
  roe_cteep = 0.20,
  liquidez_corrente_cteep = 0.15,
  grau_endividamento_cteep = 0.10,
  composicao_endividamento_cteep = 0.10
)

# Função de normalização com inversão para indicadores onde menor é melhor
normalizar <- function(x, inverter = FALSE) {
  if (inverter) {
    1 - ((x - min(x)) / (max(x) - min(x)))  # Inverte a escala para que menor = melhor
  } else {
    (x - min(x)) / (max(x) - min(x))        # Normal padrão para maior = melhor
  }
}

# Calcular nota final com normalização correta
nota_final_cteep <- indicadores_cteep |>
  mutate(
    # Indicadores onde MAIOR é melhor
    liquidez_corrente_cteep = normalizar(liquidez_corrente_cteep),
    roe_cteep = normalizar(roe_cteep),
    margem_ebitda_cteep = normalizar(margem_ebitda_cteep),
    
    # Indicadores onde MENOR é melhor (inverter = TRUE)
    divida_liquida_ebitda_cteep = normalizar(divida_liquida_ebitda_cteep, inverter = TRUE),
    grau_endividamento_cteep = normalizar(grau_endividamento_cteep, inverter = TRUE),
    composicao_endividamento_cteep = normalizar(composicao_endividamento_cteep, inverter = TRUE)
  ) |>
  summarise(
    Ano = "Nota Final",
    Nota = sum(
      divida_liquida_ebitda_cteep * pesos_indicadores["divida_liquida_ebitda_cteep"],
      margem_ebitda_cteep * pesos_indicadores["margem_ebitda_cteep"],
      roe_cteep * pesos_indicadores["roe_cteep"],
      liquidez_corrente_cteep * pesos_indicadores["liquidez_corrente_cteep"],
      grau_endividamento_cteep * pesos_indicadores["grau_endividamento_cteep"],
      composicao_endividamento_cteep * pesos_indicadores["composicao_endividamento_cteep"]
    ),
    .groups = 'drop'
  )

print("Nota final CTEEP")
[1] "Nota final CTEEP"
Code
print(nota_final_cteep)
         Ano     Nota
1 Nota Final 1.604329

6 Análise comparativa nota final ponderada

Code
# 4. Gráfico comparativo média ponderada dos indicadores CEMIG x CTEEP ----

# Transformando as médias ponderadas em data frames com uma coluna de empresa

cemig_df <- medias_ponderadas_ano_cemig |> 
  select(-Ano) |>  # Remove a coluna Ano
  as.data.frame() |> 
  mutate(Empresa = "CEMIG") |> 
  rename_with(~str_remove(., "_cemig"))

cteep_df <- medias_ponderadas_ano_cteep |> 
  select(-Ano) |>  # Remove a coluna Ano
  as.data.frame() |> 
  mutate(Empresa = "CTEEP") |> 
  rename_with(~str_remove(., "_cteep"))

# Combinar os dados
dados_comparativos <- bind_rows(cemig_df, cteep_df) |> 
  pivot_longer(
    cols = -Empresa,
    names_to = "Indicador",
    values_to = "Valor"
  ) |> 
  mutate(Indicador = case_when(
    Indicador == "liquidez_corrente" ~ "Liquidez Corrente",
    Indicador == "roe" ~ "ROE",
    Indicador == "divida_liquida_ebitda" ~ "Dívida Líquida/EBITDA",
    Indicador == "margem_ebitda" ~ "Margem EBITDA",
    Indicador == "grau_endividamento" ~ "Grau de Endividamento",
    Indicador == "composicao_endividamento" ~ "Composição Endividamento",
    TRUE ~ Indicador
  ))


# Criar o gráfico comparativo
ggplot(dados_comparativos, aes(x = Indicador, y = Valor, fill = Empresa)) +
  geom_bar(stat = "identity", position = position_dodge(), width = 0.7) +
  scale_fill_manual(values = c("CEMIG" = "#1f77b4", "CTEEP" = "#238b45")) +
  labs(
    title = "Comparação de Indicadores Financeiros - Médias Ponderadas",
    subtitle = "CEMIG x CTEEP",
    x = "Indicadores",
    y = "Valor",
    fill = "Empresa"
  ) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(hjust = 0.5, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5),
    legend.position = "top"
  ) +
  scale_y_continuous(labels = scales::comma) +
  geom_text(
    aes(label = round(Valor, 2)),
    position = position_dodge(width = 0.7),
    vjust = -0.5,
    size = 3
  )

7 Resultados

Os resultados demonstram que o programa desenvolvido automatiza  a avaliação fundamentalista de empresas, transformando dados contábeis brutos em pontuações comparáveis. No exemplo analisado, a CTEEP obteve nota final de 1.6, enquanto a CEMIG alcançou 1.46.

Esta abordagem possibilita:

  1. Padronizar critérios: Elimina subjetividade ao aplicar pesos e normalizações matemáticas;

  2. Agilizar decisões: Compara empresas em segundos, mesmo com dados multi-anuais;

  3. Identificar trade-offs: Gráficos side-by-side revelam pontos fortes e fracos relativos (ex: CTEEP tem melhor rentabilidade, mas CEMIG mostra menor risco financeiro);

  4. Adaptar-se a diferentes contextos: Os pesos dos indicadores podem ser ajustados para setores específicos (ex: utilities vs. varejo).