Bem-vindo(a)!

Cada aba será uma etapa do projeto.

1. INTRODUÇÃO

O projeto trata-se de uma análise da formação de uma Revisão Sistemática da Literatura (RSL) do tema de modelagens de sistemas de detecção de falhas em motores de indução. O período selecionado foi de 2019 à 2024 e a base de dados foi o Google Scholar. Para a busca, foi utilizado a concatenação “AND” das palavras-chaves com ajuda do programa Publish or Perish, e em seguida, unificado em R para uma única base de formato .csv, conforme nas imagens abaixo.

A pesquisa resultou no seguinte quantitativo de artigos, separados em 30 bases .csv:

Eixos e palavras-chaves da pesquisa Eixos e palavras-chaves da pesquisa

Abaixo, será apresentado a construção do nosso DataFrame, que é a união dessas 30 bases .csv da pesquisa, feito em R:

# BIBLIOTECAS
library(dplyr)
library(readr)
library(ggplot2)
if (!require(stringi)) install.packages("stringi", dependencies = TRUE)
library(stringi)

# DIRETÓRIO DOS ARQUIVOS
path <- "C:\\Users\\ediso\\OneDrive\\Documentos\\Revisao bibliografica\\31052024\\"
all_files <- list.files(path, pattern = "\\.csv$", full.names = TRUE)

# LOOP PARA LISTA DE TODOS OS ARQUIVOS
li <- lapply(all_files, read_csv)

# CONCATENANDO TODOS EM UMA MESMA BASE DE DADOS
df <- bind_rows(li)

E seus resultados:

# NÚMERO DE LINHAS (SEU TOTAL DE ARTIGOS)
total_artigos <- nrow(df)
print(total_artigos)
## [1] 15467

Assim, temos o total de artigos selecionados para nossa base de dados.

A base também será salva em um arquivo .csv para seu registro:

# SALVANDO A BASE EM UM ARQUIVO .CSV
write_csv(df, "C:\\Users\\ediso\\OneDrive\\Documentos\\Revisao bibliografica\\base_projeto.csv")

2. PACOTES

Os pacotes, como já mencionados no código da introdução são:

# BIBLIOTECAS
library(dplyr)
library(readr)
library(ggplot2)
if (!require(stringi)) install.packages("stringi", dependencies = TRUE)
library(stringi)

3. PREPARAÇÃO DOS DADOS

A partir de agora, iremos iniciar a limpeza desses dados, retirando colunas NA e artigos duplicados:

# EXCLUINDO DUPLICATAS
df <- df %>% distinct(Title, .keep_all = TRUE)

# NÚMERO DE LINHAS (SEU TOTAL DE ARTIGOS SEM DUPLICATAS)
sem_duplicatas_artigos <- nrow(df)
print(sem_duplicatas_artigos)
## [1] 4993
# EXCLUINDO COLUNAS COMPLETAMENTE NA
df <- df[, colSums(is.na(df)) < nrow(df)]
head(df)
## # A tibble: 6 × 20
##   Cites Authors          Title  Year Source Publisher ArticleURL CitesURL GSRank
##   <dbl> <chr>            <chr> <dbl> <chr>  <chr>     <chr>      <chr>     <dbl>
## 1     0 Y Li, Z Men, X … A be…  2024 Struc… journals… https://j… <NA>         99
## 2     0 M Ferrenti       A da…  2023 <NA>   webthesi… https://w… <NA>          8
## 3     0 N Koteleva, N K… A Di…  2024 Energ… mdpi.com  https://w… <NA>         50
## 4     0 K Pierre         A Mo…  2022 <NA>   search.p… https://s… <NA>         49
## 5     6 P Lyu, P Zheng,… A no…  2022 IEEE … ieeexplo… https://i… https:/…     90
## 6    46 P Lyu, K Zhang,… A no…  2022 Advan… Elsevier  https://w… https:/…     31
## # ℹ 11 more variables: QueryDate <dttm>, Type <chr>, DOI <chr>, ECC <dbl>,
## #   CitesPerYear <dbl>, CitesPerAuthor <dbl>, AuthorCount <dbl>, Age <dbl>,
## #   Abstract <chr>, FullTextURL <chr>, RelatedURL <chr>

Resultando no novo número de artigos para a pesquisa, sem duplicadas.

Também é necessário excluir aqueles artigos que são de línguas que não podem ser entendidas sem um conhecimento prévio. Foi então feito uma função a fim de retirar caractéres não ASCII, com exceção do hífen (muito comumente utilizado em títulos de artigos), para fazer a remoção de artigos que não poderão ser lidos e avaliados.

# FUNCAO PARA DETECTAR CARACTERE NAO ASCII, RETIRANDO HIFEN
has_non_ascii <- function(x) {
  x <- gsub("-", "", x) # Remove hyphens before checking
  any(stri_enc_isascii(x) == FALSE)
}

# APLICANDO A FUNCAO NA COLUNA 'Title' PARA REMOVER LINHAS COM CARACTERES NAO ASCII
df <- df[!sapply(df$Title, has_non_ascii), ]

# NÚMERO DE LINHAS (SEU TOTAL DE ARTIGOS DE ARTIGOS LEGIVEIS)
somente_ascii <- nrow(df)
print(somente_ascii)
## [1] 4595

Assim, temos uma redução no número de artigos que serão avaliados.

4. ANÁLISE EXPLORATÓRIA

Uma das análises costumareiamente feita em uma RSL é a quantidade de artigos ao longo dos anos, o que contribue a ressaltar a relevância da amostra de artigos selecionada, em relação ao tema.

# CONTAGEM DA FREQUÊNCIA DE CADA ANO
year_count <- as.data.frame(table(df$Year))
colnames(year_count) <- c("Year", "Count")

# CRIACAO DO GRAFICO DE BARRAS
ggplot(year_count, aes(x = Year, y = Count)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Count), vjust = -0.5) +
  xlab("Anos") +
  ylab("Contagem") +
  ggtitle("Artigos por ano") +
  theme_minimal()

Também é analisado as principais revistas que publicam no tema, trazendo somente as 10 que mais publicam:

# CONTAGEM DA FREQUÊNCIA ARTIGOS POR REVISTA
publisher_count <- as.data.frame(table(df$Publisher))
colnames(publisher_count) <- c("Publisher", "Count2")

# SELECIONANDO 10 REVISTAS QUE MAIS PUBLICARAM NO TEMA
top_10_publishers <- publisher_count %>%
  arrange(desc(Count2)) %>%
  head(10)

# CRIACAO DO GRAFICO DE BARRAS
ggplot(top_10_publishers, aes(x = Publisher, y = Count2)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Count2), vjust = -0.001) +
  xlab("Revistas") +
  ylab("Contagem") +
  ggtitle("Qtd de artigos por Revista") +
  coord_flip() +
  theme_minimal()

É possível fazer a análise de tendência dos locais das falhas nos motores, abaixo, será apresentado em gráfico, os principais locais de falhas encontrados nos títulos dos artigos. Vale ressaltar que foram retirados da contagem somente aqui aqueles que não especificam locais de falhas, pois para esse gráfico não são importantes, mas para outras análises serão.

# LISTA DE LOCAIS TIPICOS DE FALHA NO MOTOR
faultplaces <- c("Bearing", "Winding", "Rotor", "Stator", "Electrical Connections", "Cooling System", "Shafts")

# FUNCAO QUE PROCURA AS PALAVRAS
check_keywords <- function(title, faultplaces) {
  matches <- faultplaces[sapply(faultplaces, function(kw) grepl(kw, title, ignore.case = TRUE))]
  if (length(matches) == 0) {
    return(NA)
  } else {
    return(paste(matches, collapse = ", "))
  }
}

# ADICIONA A NOVA COLUNA QUE CONTEM AS PALAVRAS DE LOCAIS DE FALHAS
df$faultplaces <- sapply(df$Title, check_keywords, faultplaces)

# SUBSTITUI NA COMO 'None'
df$faultplaces <- ifelse(is.na(df$faultplaces), "None", df$faultplaces)

# CONTAGEM DA FREQUÊNCIA DE CADA TIPO DE FALHA
fault_count <- as.data.frame(table(df$faultplaces))
colnames(fault_count) <- c("Fault_Place", "Count3")

# EXCLUINDO ARTIGOS SEM LOCAL DE FALHA PARA O GRAFICO DE PIZZA
fault_count <- fault_count %>% filter(Fault_Place != "None")

# CALCULO DE PORCENTAGENS DOS LOCAIS DE FALHA
fault_count$percentage <- fault_count$Count3 / sum(fault_count$Count3) * 100
fault_count$label <- paste0(round(fault_count$percentage, 1), "%")

#CRIACAO DO GRAFICO DE PIZZA
pizza_plot <- ggplot(fault_count, aes(x = "", y = Count3, fill = Fault_Place)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  theme_void() +
  theme(legend.title = element_blank()) +
  ggtitle("Locais típicos das falhas") +
  geom_text(aes(label = label), position = position_stack(vjust = 0.5))

print(pizza_plot)

Assim, nota-se uma tendência dos artigos ao focarem em Bearing (Rolamento), Rotor, e Estator. Vamos colocar em lista os resultados:

print(fault_count)
##                Fault_Place Count3 percentage label
## 1                  Bearing    277 41.0370370   41%
## 2           Bearing, Rotor     10  1.4814815  1.5%
## 3          Bearing, Stator      6  0.8888889  0.9%
## 4         Bearing, Winding      4  0.5925926  0.6%
## 5  Bearing, Winding, Rotor      1  0.1481481  0.1%
## 6           Cooling System      7  1.0370370    1%
## 7                    Rotor    178 26.3703704 26.4%
## 8            Rotor, Stator     18  2.6666667  2.7%
## 9                   Shafts      2  0.2962963  0.3%
## 10                  Stator     99 14.6666667 14.7%
## 11                 Winding     44  6.5185185  6.5%
## 12          Winding, Rotor      3  0.4444444  0.4%
## 13  Winding, Rotor, Stator      3  0.4444444  0.4%
## 14         Winding, Stator     23  3.4074074  3.4%