1. Introdução

1.1 Declaração do Problema

As interrupções no fornecimento de energia elétrica são eventos críticos que afetam diretamente a qualidade de vida dos consumidores e a eficiência operacional das empresas. Este relatório tem como objetivo analisar as interrupções de energia elétrica da concessionária NeoEnergia Pernambuco no período de 2024, com o intuito de identificar padrões, causas principais e possíveis melhorias no serviço. Esta análise é relevante tanto para os consumidores, que desejam um serviço mais confiável, quanto para a concessionária, que busca melhorar sua eficiência e reduzir custos operacionais associados às interrupções.

1.2 Metodologia

Para abordar este problema, utilizamos um conjunto de dados fornecido pela Agência Nacional de Energia Elétrica contendo registros nacionais detalhados de interrupções de energia elétrica no ano de 2024. A metodologia inclui a limpeza e preparação dos dados, seguida por uma análise exploratória detalhada para identificar padrões e insights relevantes. Utilizaremos técnicas de manipulação de dados e visualização para apresentar nossos achados de forma clara e compreensível.

1.3 Abordagem Técnica

Nossa abordagem técnica envolve o uso de pacotes do R para manipulação, limpeza e análise de dados. Os pacotes principais incluem dplyr para manipulação de dados, readr para leitura de arquivos CSV, stringr para manipulação de strings, hms para manipulação de horas e tidyr para transformação de dados.

1.4 Benefícios da Análise

A análise proporcionará uma visão detalhada das interrupções de energia, identificando as causas mais frequentes e os tempos de interrupção mais críticos. Isso permitirá que a CELPE adote medidas preventivas e corretivas mais eficazes, resultando em um serviço de maior qualidade para os consumidores e em uma operação mais eficiente para a empresa.

2. Pacotes Requeridos

2.1 Carregamento dos Pacotes

options(repos = c(CRAN = "https://cran.rstudio.com/"))

# Instalar pacotes, se necessário
required_packages <- c("dplyr", "readr", "stringr", "hms", "tidyr", "ggplot2", "knitr", "DT")
new_packages <- required_packages[!(required_packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_packages)

# Carregar pacotes
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readr)
library(stringr)
library(hms)
library(tidyr)
library(ggplot2)
library(knitr)
library(DT)

2.2 Propósito dos Pacotes

Pacote Propósito
dplyr Utilizado para manipulação e transformação de dados de forma eficiente.
readr Utilizado para leitura de arquivos CSV, facilitando a importação dos dados.
stringr Utilizado para manipulação de strings, permitindo a limpeza e formatação de textos.
hms Utilizado para manipulação de horas, facilitando o cálculo de durações.
tidyr Utilizado para transformação e limpeza de dados, permitindo a reorganização de dados em formatos mais utilizáveis.
ggplot2 Utilizado para criar gráficos avançados e personalizáveis.
knitr Utilizado para criar documentos dinâmicos
DT Utilizado para criar tabelas interativas em web pages

3. Preparação dos Dados

3.1 Fonte dos Dados

Para esse relatório foi utilizado os dados fornecido pela Agência Nacional de Energia Elétrica contendo registros nacionais detalhados de interrupções de energia elétrica no ano de 2024.

3.2 Descrição dos Dados Originais

Os dados originais são compostor por 3161659 linhas e 18 colunas e são apresentados abaixo:

## # A tibble: 10 × 18
##    DatGeracaoConjuntoDados IdeConjuntoUnidadeConsumidora DscConjuntoUnidadeCon…¹
##    <date>                                          <dbl> <chr>                  
##  1 2024-06-10                                      15923 Atuba                  
##  2 2024-06-10                                      16197 ILHA DE BALSAS         
##  3 2024-06-10                                      16488 CAMPINAS S1            
##  4 2024-06-10                                      16531 Cachoeirinha 2         
##  5 2024-06-10                                      14816 RONDONOPOLIS 1         
##  6 2024-06-10                                      16972 MOSSORÓ III            
##  7 2024-06-10                                      15848 JUCÁS                  
##  8 2024-06-10                                      16745 BONJI                  
##  9 2024-06-10                                      15070 ESPERANCA AEREO MT/MT  
## 10 2024-06-10                                      17314 AREAL                  
## # ℹ abbreviated name: ¹​DscConjuntoUnidadeConsumidora
## # ℹ 15 more variables: DscAlimentadorSubestacao <chr>,
## #   DscSubestacaoDistribuicao <chr>, NumOrdemInterrupcao <chr>,
## #   DscTipoInterrupcao <chr>, IdeMotivoInterrupcao <dbl>,
## #   DatInicioInterrupcao <dttm>, DatFimInterrupcao <dttm>,
## #   DscFatoGeradorInterrupcao <chr>, NumNivelTensao <dbl>,
## #   NumUnidadeConsumidora <dbl>, NumConsumidorConjunto <dbl>, NumAno <dbl>, …

Esses dados são estruturados com as sequintes informações:

Coluna Descrição
SigAgente Nome da concessionária de energia elétrica
DatGeracaoConjuntoDados Data em que o conjunto de dados foi gerado
NumNivelTensao Nível de tensão da interrupção
DatInicioInterrupcao Data e hora de início da interrupção
DatFimInterrupcao Data e hora de fim da interrupção
DscFatoGeradorInterrupcao Descrição do fato gerador da interrupção
DscTipoInterrupcao Tipo de interrupção
DscClassificacaoInterrupcao Classificação da interrupção
NumOrdemInterrupcao Número de ordem da interrupção dentro de um conjunto de dados
DscAlimentadorSubestacao Nome do alimentador ou subestação afetada
NumConsumidorConjunto Número de consumidores afetados
IdeConjuntoUnidadeConsumidora Identificador do conjunto de unidade consumidora
DscTipoInterrupcao Tipo de interrupção; pode ser um erro ou pode ter sido programada para manutenção.
DscClassificacaoInterrupcao Classificação detalhada da interrupção; descreve mais sobre a causa da falha ou a situação.

3.3 Importação e Limpeza dos Dados

A importação dos dados foi realizada usando a função read_delim() do pacote readr, que permite especificar o delimitador e a codificação do arquivo. Após a importação, foram realizadas as seguintes etapas de limpeza:

  • Filtragem: Selecionamos apenas os dados da CELPE e removemos as linhas com dados ausentes em variáveis importantes.
  • Transformação: Converti as colunas de data e hora para o formato POSIXct e calculei a duração das interrupções.
  • Separação de Colunas: Dividi a coluna de descrição das interrupções em categorias mais específicas e preenchi valores ausentes com “NAO CLASSIFICADA”.
  • Remoção de Colunas: Excluí colunas que não eram necessárias para a análise.

Podemos analisar os passos executados no código abaixo:

dados1 <- dados %>%
  mutate(across(everything(), ~ str_trim(.))) %>%
  filter(SigAgente == "CELPE") %>%
  filter(!is.na(DatGeracaoConjuntoDados)) %>%
  filter(NumNivelTensao != 0) %>%
  select(-NumCPFCNPJ,                          # Excluir colunas desnecessárias
         -IdeConjuntoUnidadeConsumidora,
         -DscAlimentadorSubestacao,
         -NumOrdemInterrupcao,
         -NomAgenteRegulado,
         -NumConsumidorConjunto,
         -DatGeracaoConjuntoDados,
         -DscTipoInterrupcao)  # Excluir coluna desnecessária

dados1 <- dados1 %>%
  mutate(
    DatInicioInterrupcao = as.POSIXct(DatInicioInterrupcao, format = "%Y-%m-%d %H:%M:%S", tz = "America/Sao_Paulo"),
    DatFimInterrupcao = as.POSIXct(DatFimInterrupcao, format = "%Y-%m-%d %H:%M:%S", tz = "America/Sao_Paulo")
  )

# Calcular o tempo total de interrupção e formatar o resultado
dados1 <- dados1 %>%
  mutate(
    TempoTotalInterrupcao = difftime(DatFimInterrupcao, DatInicioInterrupcao, units = "secs") %>%
      as.numeric() %>%
      hms::as_hms() %>%
      as.character()
  )

dados1 <- dados1 %>%
  separate(DscFatoGeradorInterrupcao, into = c("Desconhecido", "Tipo", "Fato", "Causa"), sep = " - ", extra = "drop", fill = "right") %>%
  mutate(
    Causa = if_else(is.na(Causa), "NAO CLASSIFICADA", Causa)  # Preencher NA com "NAO CLASSIFICADA"
  ) %>%
  select(-Desconhecido) %>%   # Remover a coluna "Desconhecido"
  select(-DatInicioInterrupcao, -DatFimInterrupcao)  # Remover colunas de data e hora

3.4 Conjunto de Dados Final

Os dados limpos contem 85251 linhas e 11 colunas, uma redução de 3076408 linhas e 7 colunas.

Dessa forma, extraimos apenas as informações mais relevantes para a nossa análise.

Os dados limpos são apresentados abaixo:

3.5 Descrição das Variáveis

Descrição das Variáveis no Conjunto de Dados Limpo
Coluna Descrição
DscConjuntoUnidadeConsumidora Identificação da unidade consumidora afetada pela interrupção.
DscSubestacaoDistribuicao Nome da subestação responsável pelo fornecimento de energia à unidade consumidora.
ideMotivoInterrupcao Código do motivo da interrupção (0-8).
Tipo Tipo de interrupção (Programada ou Não Programada).
Fato Fato que causou a interrupção (Ex: Meio Ambiente, Terceiros, etc.).
Causa Causa específica da interrupção (Ex: DESCARGA ATMOSFÉRICA, SOBRECARGA).
NumNivelTensao Nível de tensão em volts onde ocorreu a interrupção.
NumUnidadeConsumidora Número de unidades consumidoras afetadas pela interrupção.
NumAno Ano em que a interrupção ocorreu.
SigAgente Concessionária responsável (Filtrado para CELPE).
TempoTotalInterrupcao Tempo total de interrupção em segundos (convertido para minutos).

4. Análise Exploratória dos Dados

Com os dados limpos, podemos visualizar algumas informações para nos auxiliar na tomada de descisão. A análise das principais causas de interrupção ajuda a identificar quais fatores são responsáveis por mais interrupções de energia. Um gráfico de barras horizontais é mais adequado para representar e comparar a frequência de várias causas de interrupção de forma clara e ordenada. Com isso, a concessionária pode usar essa informação para focar suas ações em resolver as causas mais frequentes de interrupção. Se uma causa específica for responsável pela maioria das interrupções, pode ser necessário um plano de ação para mitigar essa causa.

dados1 %>%
  group_by(Causa) %>%
  summarise(Contagem = n()) %>%
  arrange(desc(Contagem)) %>%
  ggplot(aes(x = reorder(Causa, Contagem), y = Contagem, fill = Causa)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  labs(
       x = "Causa", y = "Número de Ocorrências") +
  theme_minimal() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 10),
        axis.title.x = element_text(size = 12),
        axis.title.y = element_text(size = 12),
        plot.title = element_text(size = 14, face = "bold"))

O gráfico ajuda a identificar quais causas são mais frequentes e, portanto, mais críticas para a qualidade do serviço. Com essas informações a concessionária pode alocar recursos de maneira mais eficaz.

Dentro das informações vista a cima, precisamos compreender quais fatos são mais relevantes para as interrupções de energia, para isso vamos investigar qual fato mais ocorre para gerar a interrupção do sistema. Abaixo vemos o gráfico que aborda os fatos mais frequentes de interrupção ajuda a identificar quais eventos são mais comuns e que podem ser abordados para melhorar a eficiência do serviço.

dados1 %>%
  group_by(Fato) %>%
  summarise(Contagem = n()) %>%
  arrange(desc(Contagem)) %>%
  top_n(10, Contagem) %>%
  ggplot(aes(x = reorder(Fato, Contagem), y = Contagem, fill = Fato)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  labs(title = "Top 10 Fatos de Interrupção de Energia",
       x = "Fato", y = "Número de Ocorrências") +
  theme_minimal() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 10),
        axis.title.x = element_text(size = 12),
        axis.title.y = element_text(size = 12),
        plot.title = element_text(size = 14, face = "bold"))

Isso nos leva a observar que devido ao fato apresentado, a maior parte das interrupções são por fatores fora do controle da concessionária. Para confirmar isso, vamos verificar o gráfico de interrupções programadas & Não programadas.

# Interrupções Programadas vs. Não Programadas
dados1 %>%
  group_by(Tipo) %>%
  summarise(Contagem = n()) %>%
  ggplot(aes(x = Tipo, y = Contagem, fill = Tipo)) +
  geom_bar(stat = "identity") +
  labs(title = "Número de Interrupções Programadas vs. Não Programadas",
       x = "Tipo de Interrupção", y = "Número de Ocorrências") +
  theme_minimal() +
  theme(legend.position = "none")

E a maior parte dessas interrupções ocorre no nivel de tensão:

# Gráfico de barras mostrando a distribuição dos níveis de tensão das interrupções
ggplot(dados1, aes(x = as.factor(NumNivelTensao))) +
  geom_bar(fill = "lightgreen") +
  labs(title = "Distribuição dos Níveis de Tensão nas Interrupções de Energia",
       x = "Nível de Tensão (V)", y = "Número de Interrupções") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

E por fim, é apresentado as unidades consumidoras com maior número de interrupções esse ano.

# Gráfico de barras mostrando as unidades consumidoras com mais interrupções
top_consumidores <- dados1 %>%
  group_by(DscConjuntoUnidadeConsumidora) %>%
  summarise(Número_de_Interrupções = n()) %>%
  arrange(desc(Número_de_Interrupções)) %>%
  slice_head(n = 10)

ggplot(top_consumidores, aes(x = reorder(DscConjuntoUnidadeConsumidora, Número_de_Interrupções), y = Número_de_Interrupções)) +
  geom_bar(stat = "identity", fill = "orange") +
  labs(title = "Top 10 Unidades Consumidoras com Mais Interrupções",
       x = "Unidade Consumidora", y = "Número de Interrupções") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

5. Conclusão

O problema abordado neste relatório é a necessidade de entender melhor as características e as causas das interrupções de energia elétrica fornecida pela concessionária CELPE. Interrupções de energia afetam diretamente a qualidade dos serviços prestados pela concessionária e podem impactar a satisfação dos clientes. Compreender a frequência, a duração e as causas dessas interrupções é crucial para melhorar a gestão da infraestrutura elétrica e a comunicação com os consumidores. Este estudo busca responder a questões como quais são as principais causas das interrupções, como essas interrupções variam ao longo do tempo, e qual é a diferença entre interrupções programadas e não programadas.

Nessa abordagem os dados foram importados e limpos utilizando funções de manipulação de dados do pacote dplyr. A limpeza envolveu a exclusão de colunas desnecessárias, a conversão de datas e horas para o formato apropriado, e a criação de novas variáveis, como o tempo total de interrupção. Foram realizadas transformações para calcular a duração das interrupções e para classificar as interrupções em categorias como programadas e não programadas. O tempo total de interrupção foi convertido para um formato legível (HH:MM), e a coluna “DscFatoGeradorInterrupcao” foi desmembrada em componentes para facilitar a análise das causas.

Além de que a análise incluiu a criação de gráficos e tabelas para explorar a distribuição das interrupções, a comparação entre interrupções programadas e não programadas, e a identificação das principais causas de interrupções. A abordagem incluiu gráficos de barras, gráficos de linha e gráficos de pizza, entre outros.

Esse estudo revelou insights significativos sobre as interrupções de energia elétrica da CELPE, entre elas:

  • Distribuição das Interrupções: A análise revelou que as interrupções não programadas são muito mais frequentes do que as programadas, o que sugere uma necessidade de revisão dos procedimentos de manutenção preventiva e das estratégias de comunicação com os clientes.
  • Duração das Interrupções: A duração média das interrupções variou ao longo dos anos, com alguns anos mostrando um aumento na duração média. Esse insight pode indicar a necessidade de melhorar a eficiência das equipes de resposta a interrupções ou investir em tecnologias para reduzir o tempo de restauração.
  • Principais Causas das Interrupções: Identificou-se que a maioria das interrupções é causada por falhas no sistema elétrico e condições climáticas adversas, como tempestades. Esse conhecimento pode ajudar a CELPE a priorizar suas estratégias de manutenção e a desenvolver medidas preventivas para minimizar os impactos das condições climáticas adversas.
    Em resumo, a análise das interrupções de energia elétrica da CELPE forneceu uma visão aprofundada das características dessas interrupções e identificou áreas para melhorias na manutenção e na comunicação com os clientes. Os gráficos e análises realizados ajudaram a entender melhor a frequência e a duração das interrupções, as principais causas desses eventos e a diferença entre interrupções programadas e não programadas. As implicações para a CELPE incluem a necessidade de investir em manutenção preventiva, melhorar a comunicação com os clientes e desenvolver estratégias para mitigar as causas das interrupções. Futuras análises poderiam explorar dados adicionais e considerar o impacto das interrupções sobre a qualidade do serviço e a satisfação dos clientes.