ROBÓTICA COMO RECURSO PARA O ENSINO: UM PERFIL DAS TESES E DISSERTAÇÕES PUBLICADAS ENTRE 2013 E 2022

1 Informações iniciais

1.1 Quantidade de Teses e Dissertações

#verificando por tipo de produção
resumo_producoes <- dados_filtrados %>%
  filter(ID_SUBTIPO_PRODUCAO %in% c(1, 2)) %>%
  group_by(ID_SUBTIPO_PRODUCAO) %>%
  summarise(quantidade = n()) %>%
  mutate(tipo_producao = case_when(
    ID_SUBTIPO_PRODUCAO == 1 ~ "Tese",
    ID_SUBTIPO_PRODUCAO == 2 ~ "Dissertação"
  )) %>%
  select(tipo_producao, quantidade) %>%  # Selecionando apenas as colunas desejadas
  arrange(desc(quantidade))
# Visualize o resumo
kable(resumo_producoes, 
      caption = "Resumo de Produções por Tipo", 
      label = "resumo_producoes",
      col.names = c("Tipo de Produção", "Quantidade")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Resumo de Produções por Tipo
Tipo de Produção Quantidade
Dissertação 315
Tese 47

1.2 Publicações por ano (2013-2022)

Geral

# Definir a sequência completa de anos, assumindo que AN_BASE vai de 2000 a 2024 (ajuste conforme necessário)
# Sequência de anos completos
anos_completos <- seq(min(dados_filtrados$AN_BASE, na.rm = TRUE), max(dados_filtrados$AN_BASE, na.rm = TRUE))

# Resumo por ano (contando o total de registros por ano)
resumo_anos <- dados_filtrados %>%
  group_by(AN_BASE) %>%
  summarise(total = n(), .groups = "drop")

# Completar os anos ausentes com zero
resumo_anos_completos <- data.frame(AN_BASE = anos_completos) %>%
  left_join(resumo_anos, by = "AN_BASE") %>%
  replace_na(list(total = 0))  # Substitui os NA por 0, caso algum ano não tenha registros

# Criar o gráfico de linha com frequências
ggplot(resumo_anos_completos, aes(x = AN_BASE, y = total)) +
  geom_line(color = "blue", size = 0.5) +  # Linha azul
  geom_text(aes(label = total), vjust = -0.5, color = "blue", size = 2.5) +  # Frequências como rótulos
  labs(
    title = "Teses e Dissertações por Ano", 
    x = "Ano Base", 
    y = "Número de Produções"
  ) +
  scale_x_continuous(
    breaks = anos_completos,  # Garante que todos os anos apareçam no eixo X
    expand = c(0, 0)  # Remove espaços extras no eixo X
  ) +
  theme_minimal() +  # Usando um tema minimalista
  theme(
    legend.position = "bottom",  # Coloca a legenda na parte inferior
    panel.grid = element_blank(),  # Remove o fundo quadriculado
    axis.text = element_text(size = 8)  # Diminuir o tamanho das fontes dos eixos
  )

Seguimentado por área

# Criando o gráfico com uma linha para cada classificação da área de conhecimento
ggplot(dados_resumo, aes(x = AN_BASE, y = total, color = NM_AREA_CONHECIMENTO)) +
  geom_line(size = 0.5) +  # Linha para cada classificação
  geom_text(aes(label = total), vjust = -0.5, size = 2.5) +  # Rótulos para o total geral
  scale_x_continuous(breaks = seq(min(dados_resumo$AN_BASE), max(dados_resumo$AN_BASE), by = 1)) +
  labs(
    title = "Evolução de Produções por Ano e Área de Conhecimento",
    x = "Ano Base",
    y = "Número de Produções"
  ) +
  theme_minimal() +  # Usando um tema minimalista
  theme(
    legend.position = "bottom",  # Coloca a legenda na parte inferior
    panel.grid = element_blank(),  # Remove o fundo quadriculado
    axis.text = element_text(size = 8)  # Diminuir o tamanho das fontes dos eixos (se necessário)
  )

1.3 Instituições de Ensino e Programas mais frequentes

# Criando a coluna PROGRAMA_INSTITUICAO
dados_filtrados <- dados_filtrados %>%
  mutate(PROGRAMA_INSTITUICAO = paste0(NM_PROGRAMA, " - ", NM_ENTIDADE_ENSINO))

# Agrupando variações de "ENSINO DE FÍSICA" e "PROFIS" no programa e na instituição
dados_filtrados <- dados_filtrados %>%
  mutate(
    PROGRAMA_UNIFICADO = ifelse(grepl("ENSINO DE FÍSICA", NM_PROGRAMA, ignore.case = TRUE), "ENSINO DE FÍSICA", NM_PROGRAMA),
    INSTITUICAO_UNIFICADA = ifelse(grepl("PROFIS", NM_ENTIDADE_ENSINO, ignore.case = TRUE), "PROFIS", NM_ENTIDADE_ENSINO)
  )

# Resumo por Programa e Instituição unificados (10 primeiros)
resumo_programa_instituicao <- dados_filtrados %>%
  group_by(PROGRAMA_UNIFICADO, INSTITUICAO_UNIFICADA) %>%
  summarise(quantidade = n(), .groups = "drop") %>%
  arrange(desc(quantidade))%>%
  slice_head(n = 10)  # Seleciona apenas os 10 primeiros

# Tabela formatada
kable(resumo_programa_instituicao, caption = "Resumo de Produções por Tipo", 
      label = "resumo_producoes",
      col.names = c("Programa de Pós-Graduação", "Instituição", "Quantidade")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Resumo de Produções por Tipo
Programa de Pós-Graduação Instituição Quantidade
EDUCAÇÃO E NOVAS TECNOLOGIAS CENTRO UNIVERSITÁRIO INTERNACIONAL 9
INFORMÁTICA UNIVERSIDADE FEDERAL DO RIO DE JANEIRO 6
EDUCAÇÃO MATEMÁTICA E TECNOLÓGICA UNIVERSIDADE FEDERAL DE PERNAMBUCO 5
ENGENHARIA ELÉTRICA UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE 5
ENSINO DAS CIÊNCIAS UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO 5
FORMAÇÃO CIENTÍFICA, EDUCACIONAL E TECNOLÓGICA UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ 5
CIÊNCIAS DA COMPUTAÇÃO UNIVERSIDADE FEDERAL DE PERNAMBUCO 4
EDUCAÇÃO FUNDAÇÃO UNIVERSIDADE DE PASSO FUNDO 4
EDUCAÇÃO UNIVERSIDADE FEDERAL DE SÃO CARLOS 4
EDUCAÇÃO UNIVERSIDADE FEDERAL DO OESTE DO PARÁ 4

2 Palavras-chave mais frequentes nas produções

Geral

# Processamento das palavras-chave
palavras_frequentes <- dados_filtrados %>%
  separate_rows(DS_PALAVRA_CHAVE, sep = ";") %>%  # Divide a coluna em várias linhas por ";"
  mutate(DS_PALAVRA_CHAVE = str_trim(DS_PALAVRA_CHAVE)) %>%  # Remove espaços extras
  mutate(DS_PALAVRA_CHAVE = case_when(
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("aprendizagem matemática","matemática","matemática.","educação matemática", "ensino de matemática") ~ "EDUCAÇÃO MATEMÁTICA",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("arduíno","arduino","arduino.", "arduíno.") ~ "ARDUÍNO",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias da informação e comunicação", "tecnologia", "tecnologias digitais") ~ "TECNOLOGIAS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias educacionais", "tecnologia educacional") ~ "TECNOLOGIAS EDUCACIONAIS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("robótica educacional.", "robótica móvel", "robótica industrial","robótica educacional", "robótica", "robótica pedagógica", "robótica educativa","robótica.") ~ "ROBÓTICA EDUCACIONAL",
    TRUE ~ DS_PALAVRA_CHAVE  # Mantém o termo original se não for um dos substituídos
  )) %>%
  count(DS_PALAVRA_CHAVE, sort = TRUE) %>%  # Conta a frequência de cada termo
  filter(str_detect(DS_PALAVRA_CHAVE, "[a-zA-Z]")) %>%  # Filtra para manter apenas palavras alfabéticas
  rename(palavra = DS_PALAVRA_CHAVE)  # Renomeia a coluna para 'palavra'

# Remover linhas com frequências inválidas ou NA
palavras_frequentes <- palavras_frequentes %>%
  filter(!is.na(n) & n > 0)

# Selecionar os 10 termos mais recorrentes
palavras_frequentes <- palavras_frequentes %>%
  slice_max(n, n = 20)

# Removendo a palavra "robótica educacional"
palavras_frequentes <- palavras_frequentes %>%
  filter(palavra != "ROBÓTICA EDUCACIONAL")

# Geração do gráfico de barras horizontal
grafico_palavras_chave <- ggplot(palavras_frequentes, aes(x = reorder(palavra, n), y = n)) +
  geom_bar(stat = "identity", fill = "blue") +  # Adicionando a cor azul às barras
  geom_text(aes(label = n), hjust = -0.2, size = 3.5) +  # Ajustando a posição do texto
  coord_flip() +  # Invertendo os eixos para barras horizontais
  ggtitle("GRÁFICO DE BARRAS COM AS 20 PALAVRAS-CHAVE MAIS FREQUENTES") +
  labs(y = "Frequência", x = "Palavras-chave") +
  theme(axis.text.y = element_text(hjust = 1))  # Ajustando texto do eixo Y

# Exibindo o gráfico
print(grafico_palavras_chave)

Área “Ensino”

# Processamento das palavras-chave considerando apenas registros de "ENSINO"
palavras_frequentes <- dados_filtrados %>%
  filter(str_detect(NM_AREA_CONHECIMENTO, "ENSINO")) %>%  # Filtra apenas os registros com "ENSINO" em NM_AREA_CONHECIMENTO
  separate_rows(DS_PALAVRA_CHAVE, sep = ";") %>%  # Divide a coluna em várias linhas por ";"
  mutate(DS_PALAVRA_CHAVE = str_trim(DS_PALAVRA_CHAVE)) %>%  # Remove espaços extras
  mutate(DS_PALAVRA_CHAVE = case_when(
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("aprendizagem matemática","matemática","matemática.","educação matemática", "ensino de matemática") ~ "EDUCAÇÃO MATEMÁTICA",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("arduíno","arduino","arduino.", "arduíno.") ~ "ARDUÍNO",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias da informação e comunicação", "tecnologia", "tecnologias digitais") ~ "TECNOLOGIAS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias educacionais", "tecnologia educacional") ~ "TECNOLOGIAS EDUCACIONAIS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("robótica educacional.", "robótica móvel", "robótica industrial","robótica educacional", "robótica", "robótica pedagógica", "robótica educativa","robótica.") ~ "ROBÓTICA EDUCACIONAL",
    TRUE ~ DS_PALAVRA_CHAVE  # Mantém o termo original se não for um dos substituídos
  )) %>%
  count(DS_PALAVRA_CHAVE, sort = TRUE) %>%  # Conta a frequência de cada termo
  filter(str_detect(DS_PALAVRA_CHAVE, "[a-zA-Z]")) %>%  # Filtra para manter apenas palavras alfabéticas
  rename(palavra = DS_PALAVRA_CHAVE)  # Renomeia a coluna para 'palavra'

# Remover linhas com frequências inválidas ou NA
palavras_frequentes <- palavras_frequentes %>%
  filter(!is.na(n) & n > 0)

# Selecionar os 10 termos mais recorrentes
palavras_frequentes <- palavras_frequentes %>%
  slice_max(n, n = 10)

# Removendo a palavra "robótica educacional"
palavras_frequentes <- palavras_frequentes %>%
  filter(palavra != "ROBÓTICA EDUCACIONAL")

# Geração do gráfico de barras horizontal
grafico_palavras_chave <- ggplot(palavras_frequentes, aes(x = reorder(palavra, n), y = n)) +
  geom_bar(stat = "identity", fill = "blue") +  # Adicionando a cor azul às barras
  geom_text(aes(label = n), hjust = -0.2, size = 3.5) +  # Ajustando a posição do texto
  coord_flip() +  # Invertendo os eixos para barras horizontais
  ggtitle("GRÁFICO DE BARRAS COM AS 10 PALAVRAS-CHAVE MAIS FREQUENTES") +
  labs(y = "Frequência", x = "Palavras-chave") +
  theme(axis.text.y = element_text(hjust = 1))  # Ajustando texto do eixo Y

# Exibindo o gráfico
print(grafico_palavras_chave)

Área “Educação”

# Processamento das palavras-chave considerando apenas registros de "ENSINO"
palavras_frequentes <- dados_filtrados %>%
  filter(str_detect(NM_AREA_CONHECIMENTO, "EDUCAÇÃO")) %>%  # Filtra apenas os registros com "ENSINO" em NM_AREA_CONHECIMENTO
  separate_rows(DS_PALAVRA_CHAVE, sep = ";") %>%  # Divide a coluna em várias linhas por ";"
  mutate(DS_PALAVRA_CHAVE = str_trim(DS_PALAVRA_CHAVE)) %>%  # Remove espaços extras
  mutate(DS_PALAVRA_CHAVE = case_when(
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("aprendizagem matemática","matemática","matemática.","educação matemática", "ensino de matemática") ~ "EDUCAÇÃO MATEMÁTICA",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("arduíno","arduino","arduino.", "arduíno.") ~ "ARDUÍNO",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias da informação e comunicação", "tecnologia", "tecnologias digitais") ~ "TECNOLOGIAS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias educacionais", "tecnologia educacional") ~ "TECNOLOGIAS EDUCACIONAIS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("robótica educacional.", "robótica móvel", "robótica industrial","robótica educacional", "robótica", "robótica pedagógica", "robótica educativa","robótica.") ~ "ROBÓTICA EDUCACIONAL",
    TRUE ~ DS_PALAVRA_CHAVE  # Mantém o termo original se não for um dos substituídos
  )) %>%
  count(DS_PALAVRA_CHAVE, sort = TRUE) %>%  # Conta a frequência de cada termo
  filter(str_detect(DS_PALAVRA_CHAVE, "[a-zA-Z]")) %>%  # Filtra para manter apenas palavras alfabéticas
  rename(palavra = DS_PALAVRA_CHAVE)  # Renomeia a coluna para 'palavra'

# Remover linhas com frequências inválidas ou NA
palavras_frequentes <- palavras_frequentes %>%
  filter(!is.na(n) & n > 0)

# Selecionar os 10 termos mais recorrentes
palavras_frequentes <- palavras_frequentes %>%
  slice_max(n, n = 10)

# Removendo a palavra "robótica educacional"
palavras_frequentes <- palavras_frequentes %>%
  filter(palavra != "ROBÓTICA EDUCACIONAL")

# Geração do gráfico de barras horizontal
grafico_palavras_chave <- ggplot(palavras_frequentes, aes(x = reorder(palavra, n), y = n)) +
  geom_bar(stat = "identity", fill = "blue") +  # Adicionando a cor azul às barras
  geom_text(aes(label = n), hjust = -0.2, size = 3.5) +  # Ajustando a posição do texto
  coord_flip() +  # Invertendo os eixos para barras horizontais
  ggtitle("GRÁFICO DE BARRAS COM AS 10 PALAVRAS-CHAVE MAIS FREQUENTES") +
  labs(y = "Frequência", x = "Palavras-chave") +
  theme(axis.text.y = element_text(hjust = 1))  # Ajustando texto do eixo Y

# Exibindo o gráfico
print(grafico_palavras_chave)

Área “Ciência da Computação”

# Processamento das palavras-chave considerando apenas registros de "ENSINO"
palavras_frequentes <- dados_filtrados %>%
  filter(str_detect(NM_AREA_CONHECIMENTO, "CIÊNCIA DA COMPUTAÇÃO")) %>%  # Filtra apenas os registros com "ENSINO" em NM_AREA_CONHECIMENTO
  separate_rows(DS_PALAVRA_CHAVE, sep = ";|,") %>%  # Divide a coluna em várias linhas por ";"
  mutate(DS_PALAVRA_CHAVE = str_trim(DS_PALAVRA_CHAVE)) %>%  # Remove espaços extras
  mutate(DS_PALAVRA_CHAVE = case_when(
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("aprendizagem matemática","matemática","matemática.","educação matemática", "ensino de matemática") ~ "EDUCAÇÃO MATEMÁTICA",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("arduíno","arduino","arduino.", "arduíno.") ~ "ARDUÍNO",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias da informação e comunicação", "tecnologia", "tecnologias digitais") ~ "TECNOLOGIAS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias educacionais", "tecnologia educacional") ~ "TECNOLOGIAS EDUCACIONAIS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("robótica educacional.", "robótica móvel", "robótica industrial","robótica educacional", "robótica", "robótica pedagógica", "robótica educativa","robótica.") ~ "ROBÓTICA EDUCACIONAL",
    TRUE ~ DS_PALAVRA_CHAVE  # Mantém o termo original se não for um dos substituídos
  )) %>%
  count(DS_PALAVRA_CHAVE, sort = TRUE) %>%  # Conta a frequência de cada termo
  filter(str_detect(DS_PALAVRA_CHAVE, "[a-zA-Z]")) %>%  # Filtra para manter apenas palavras alfabéticas
  rename(palavra = DS_PALAVRA_CHAVE)  # Renomeia a coluna para 'palavra'

# Remover linhas com frequências inválidas ou NA
palavras_frequentes <- palavras_frequentes %>%
  filter(!is.na(n) & n > 0)

# Selecionar os 10 termos mais recorrentes
palavras_frequentes <- palavras_frequentes %>%
  slice_max(n, n = 10)

# Removendo a palavra "robótica educacional"
palavras_frequentes <- palavras_frequentes %>%
  filter(palavra != "ROBÓTICA EDUCACIONAL")

# Geração do gráfico de barras horizontal
grafico_palavras_chave <- ggplot(palavras_frequentes, aes(x = reorder(palavra, n), y = n)) +
  geom_bar(stat = "identity", fill = "blue") +  # Adicionando a cor azul às barras
  geom_text(aes(label = n), hjust = -0.2, size = 3.5) +  # Ajustando a posição do texto
  coord_flip() +  # Invertendo os eixos para barras horizontais
  ggtitle("GRÁFICO DE BARRAS COM AS 10 PALAVRAS-CHAVE MAIS FREQUENTES") +
  labs(y = "Frequência", x = "Palavras-chave") +
  theme(axis.text.y = element_text(hjust = 1))  # Ajustando texto do eixo Y

# Exibindo o gráfico
print(grafico_palavras_chave)

Área “Física”

# Processamento das palavras-chave considerando apenas registros de "ENSINO"
palavras_frequentes <- dados_filtrados %>%
  filter(str_detect(NM_AREA_CONHECIMENTO, "FÍSICA")) %>%  # Filtra apenas os registros com "ENSINO" em NM_AREA_CONHECIMENTO
  separate_rows(DS_PALAVRA_CHAVE, sep = ";|,") %>%  # Divide a coluna em várias linhas por ";"
  mutate(DS_PALAVRA_CHAVE = str_trim(DS_PALAVRA_CHAVE)) %>%  # Remove espaços extras
  mutate(DS_PALAVRA_CHAVE = case_when(
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("aprendizagem matemática","matemática","matemática.","educação matemática", "ensino de matemática") ~ "EDUCAÇÃO MATEMÁTICA",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("arduíno","arduino","arduino.", "arduíno.") ~ "ARDUÍNO",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias da informação e comunicação", "tecnologia", "tecnologias digitais") ~ "TECNOLOGIAS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias educacionais", "tecnologia educacional") ~ "TECNOLOGIAS EDUCACIONAIS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("robótica educacional.", "robótica móvel", "robótica industrial","robótica educacional", "robótica", "robótica pedagógica", "robótica educativa","robótica.") ~ "ROBÓTICA EDUCACIONAL",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("ENSINO DE FÍSICA", "ENSINO DE FISICA") ~ "ENSINO DE FÍSICA",
    TRUE ~ DS_PALAVRA_CHAVE  # Mantém o termo original se não for um dos substituídos
  )) %>%
  count(DS_PALAVRA_CHAVE, sort = TRUE) %>%  # Conta a frequência de cada termo
  filter(str_detect(DS_PALAVRA_CHAVE, "[a-zA-Z]")) %>%  # Filtra para manter apenas palavras alfabéticas
  rename(palavra = DS_PALAVRA_CHAVE)  # Renomeia a coluna para 'palavra'

# Remover linhas com frequências inválidas ou NA
palavras_frequentes <- palavras_frequentes %>%
  filter(!is.na(n) & n > 0)

# Selecionar os 10 termos mais recorrentes
palavras_frequentes <- palavras_frequentes %>%
  slice_max(n, n = 10)

# Removendo a palavra "robótica educacional"
palavras_frequentes <- palavras_frequentes %>%
  filter(palavra != "ROBÓTICA EDUCACIONAL")

# Geração do gráfico de barras horizontal
grafico_palavras_chave <- ggplot(palavras_frequentes, aes(x = reorder(palavra, n), y = n)) +
  geom_bar(stat = "identity", fill = "blue") +  # Adicionando a cor azul às barras
  geom_text(aes(label = n), hjust = -0.2, size = 3.5) +  # Ajustando a posição do texto
  coord_flip() +  # Invertendo os eixos para barras horizontais
  ggtitle("GRÁFICO DE BARRAS COM AS 10 PALAVRAS-CHAVE MAIS FREQUENTES") +
  labs(y = "Frequência", x = "Palavras-chave") +
  theme(axis.text.y = element_text(hjust = 1))  # Ajustando texto do eixo Y

# Exibindo o gráfico
print(grafico_palavras_chave)

Área “Interdisciplinar”

# Processamento das palavras-chave considerando apenas registros de "ENSINO"
palavras_frequentes <- dados_filtrados %>%
  filter(str_detect(NM_AREA_CONHECIMENTO, "INTERDISCIPLINAR")) %>%  # Filtra apenas os registros com "ENSINO" em NM_AREA_CONHECIMENTO
  mutate(DS_PALAVRA_CHAVE = str_replace_all(DS_PALAVRA_CHAVE, "\\.", ";")) %>%
  separate_rows(DS_PALAVRA_CHAVE, sep = ";|,") %>%  # Divide a coluna em várias linhas por ";"
  mutate(DS_PALAVRA_CHAVE = str_trim(DS_PALAVRA_CHAVE)) %>%  # Remove espaços extras
  mutate(DS_PALAVRA_CHAVE = case_when(
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("aprendizagem matemática","matemática","matemática.","educação matemática", "ensino de matemática") ~ "EDUCAÇÃO MATEMÁTICA",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("arduíno","arduino","arduino.", "arduíno.") ~ "ARDUÍNO",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias da informação e comunicação", "tecnologia", "tecnologias digitais") ~ "TECNOLOGIAS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias educacionais", "tecnologia educacional") ~ "TECNOLOGIAS EDUCACIONAIS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("robótica educacional.", "robótica móvel", "robótica industrial","robótica educacional", "robótica", "robótica pedagógica", "robótica educativa","robótica.") ~ "ROBÓTICA EDUCACIONAL",
    TRUE ~ DS_PALAVRA_CHAVE  # Mantém o termo original se não for um dos substituídos
  )) %>%
  count(DS_PALAVRA_CHAVE, sort = TRUE) %>%  # Conta a frequência de cada termo
  filter(str_detect(DS_PALAVRA_CHAVE, "[a-zA-Z]")) %>%  # Filtra para manter apenas palavras alfabéticas
  rename(palavra = DS_PALAVRA_CHAVE)  # Renomeia a coluna para 'palavra'

# Remover linhas com frequências inválidas ou NA
palavras_frequentes <- palavras_frequentes %>%
  filter(!is.na(n) & n > 0)

# Selecionar os 10 termos mais recorrentes
palavras_frequentes <- palavras_frequentes %>%
  slice_max(n, n = 8)

# Removendo a palavra "robótica educacional"
palavras_frequentes <- palavras_frequentes %>%
  filter(palavra != "ROBÓTICA EDUCACIONAL")

# Geração do gráfico de barras horizontal
grafico_palavras_chave <- ggplot(palavras_frequentes, aes(x = reorder(palavra, n), y = n)) +
  geom_bar(stat = "identity", fill = "blue") +  # Adicionando a cor azul às barras
  geom_text(aes(label = n), hjust = -0.2, size = 3.5) +  # Ajustando a posição do texto
  coord_flip() +  # Invertendo os eixos para barras horizontais
  ggtitle("GRÁFICO DE BARRAS COM AS 10 PALAVRAS-CHAVE MAIS FREQUENTES") +
  labs(y = "Frequência", x = "Palavras-chave") +
  theme(axis.text.y = element_text(hjust = 1))  # Ajustando texto do eixo Y

# Exibindo o gráfico
print(grafico_palavras_chave)

Área “Matemática”

# Processamento das palavras-chave considerando apenas registros de "ENSINO"
palavras_frequentes <- dados_filtrados %>%
  filter(str_detect(NM_AREA_CONHECIMENTO, "MATEMÁTICA")) %>%  # Filtra apenas os registros com "ENSINO" em NM_AREA_CONHECIMENTO
  mutate(DS_PALAVRA_CHAVE = str_replace_all(DS_PALAVRA_CHAVE, "\\.", ";")) %>%
  separate_rows(DS_PALAVRA_CHAVE, sep = ";|,") %>%  # Divide a coluna em várias linhas por ";"
  mutate(DS_PALAVRA_CHAVE = str_trim(DS_PALAVRA_CHAVE)) %>%  # Remove espaços extras
  mutate(DS_PALAVRA_CHAVE = case_when(
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("aprendizagem matemática","matemática","matemática.","educação matemática", "ensino de matemática") ~ "EDUCAÇÃO MATEMÁTICA",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("arduíno","arduino","arduino.", "arduíno.") ~ "ARDUÍNO",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias da informação e comunicação", "tecnologia", "tecnologias digitais") ~ "TECNOLOGIAS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("tecnologias educacionais", "tecnologia educacional") ~ "TECNOLOGIAS EDUCACIONAIS",
    str_to_lower(DS_PALAVRA_CHAVE) %in% c("robótica educacional.", "robótica móvel", "robótica industrial","robótica educacional", "robótica", "robótica pedagógica", "robótica educativa","robótica.") ~ "ROBÓTICA EDUCACIONAL",
    TRUE ~ DS_PALAVRA_CHAVE  # Mantém o termo original se não for um dos substituídos
  )) %>%
  count(DS_PALAVRA_CHAVE, sort = TRUE) %>%  # Conta a frequência de cada termo
  filter(str_detect(DS_PALAVRA_CHAVE, "[a-zA-Z]")) %>%  # Filtra para manter apenas palavras alfabéticas
  rename(palavra = DS_PALAVRA_CHAVE)  # Renomeia a coluna para 'palavra'

# Remover linhas com frequências inválidas ou NA
palavras_frequentes <- palavras_frequentes %>%
  filter(!is.na(n) & n > 0)

# Selecionar os 10 termos mais recorrentes
palavras_frequentes <- palavras_frequentes %>%
  slice_max(n, n = 10)

# Removendo a palavra "robótica educacional"
palavras_frequentes <- palavras_frequentes %>%
  filter(palavra != "ROBÓTICA EDUCACIONAL")

# Geração do gráfico de barras horizontal
grafico_palavras_chave <- ggplot(palavras_frequentes, aes(x = reorder(palavra, n), y = n)) +
  geom_bar(stat = "identity", fill = "blue") +  # Adicionando a cor azul às barras
  geom_text(aes(label = n), hjust = -0.2, size = 3.5) +  # Ajustando a posição do texto
  coord_flip() +  # Invertendo os eixos para barras horizontais
  ggtitle("GRÁFICO DE BARRAS COM AS 10 PALAVRAS-CHAVE MAIS FREQUENTES") +
  labs(y = "Frequência", x = "Palavras-chave") +
  theme(axis.text.y = element_text(hjust = 1))  # Ajustando texto do eixo Y

# Exibindo o gráfico
print(grafico_palavras_chave)

3 Tokenização por n-gram

Geral

# Convertendo a coluna DS_RESUMO para texto, se necessário
dados_filtrados_n_gram <- dados_filtrados %>%
  mutate(DS_RESUMO = as.character(DS_RESUMO))  # Convertendo para texto, se necessário

# Tokenização por n-grams (n = 5)
n_grams_frequentes <- dados_filtrados_n_gram %>%
  unnest_tokens(ngrams, DS_RESUMO, token = "ngrams", n = 5) %>%
  filter(str_detect(ngrams, "^[a-zA-Z\\s]+$")) %>%  # Filtra números e pontuação, mantendo apenas palavras
  count(ngrams, sort = TRUE) %>%  # Conta a frequência dos n-grams
  head(50)  # Extrai os 10 n-grams mais frequentes

# Salvando os n-grams em um arquivo CSV com ";" como separador
write.csv2(n_grams_frequentes, "n_grams_frequentes.csv", row.names = FALSE)

# Carregando o CSV gerado anteriormente
n_grams_frequentes <- read.csv2("n_grams_frequentes.csv")

# Agrupando os sinônimos de "processo de ensino-aprendizagem"
n_grams_agrupados <- n_grams_frequentes %>%
  mutate(
ngrams = case_when(
      # Agrupando sinônimos de "processo de ensino-aprendizagem"
      str_detect(ngrams, "nos processos de ensino e|o processo de ensino e|de ensino e aprendizagem de|processo de ensino e aprendizagem|o processo de ensino aprendizagem|no processo de ensino aprendizagem|processos de ensino e aprendizagem|no processo de ensino e|de ensino e de aprendizagem") ~ "Processo de ensino-aprendizagem",
      # Agrupando sinônimos da BNCC
      str_detect(ngrams, "base nacional comum curricular bncc|da base nacional comum curricular|a base nacional comum curricular") ~ "BNCC",
      # Agrupando sinônimos de Aprendizagem significativa
      str_detect(ngrams, "da aprendizagem significativa de david|teoria da aprendizagem significativa de|aprendizagem significativa de david ausubel|a teoria da aprendizagem significativa") ~ "Aprendizagem Significativa",
      # Agrupando sinônimos de Ensino Fundamental
      str_detect(ngrams, "do ensino fundamental em uma|do ensino fundamental da rede|com estudantes do ensino fundamental|anos finais do ensino fundamental|nos anos iniciais do ensino|ano do ensino fundamental com|anos iniciais do ensino fundamental|ano do ensino fundamental de|do ensino fundamental de uma|nono ano do ensino fundamental") ~ "Ensino Fundamental",
      # Agrupando sinônimos de Estudo de Caso
      str_detect(ngrams, "de um estudo de caso|em um estudo de caso") ~ "Estudo de Caso",
       # Agrupando sinônimos de Pensamento Computacional
      str_detect(ngrams, "o desenvolvimento do pensamento computacional|desenvolvimento das habilidades do pc|as habilidades do pensamento computacional|das habilidades do pc o|do pc e no aprendizado|do pensamento computacional pc por") ~ "Pensamento Computacional",
                       TRUE ~ ngrams)) %>%
  group_by(ngrams) %>%
  summarise(Frequência = sum(n), .groups = "drop") %>%  # Substituir 'freq' pelo nome correto da coluna
  arrange(desc(Frequência))

# Salvando a tabela consolidada em um novo arquivo CSV
write.csv2(n_grams_agrupados, "n_grams_agrupados.csv", row.names = FALSE)

# Exibindo apenas os 10 n-grams mais frequentes
kable(
  head(n_grams_agrupados, 10),  # Seleciona os 10 primeiros pela frequência
  format = "html",  # Alternativamente, use "markdown" ou "latex" conforme necessário
  col.names = c("N-gram", "Frequência"),
  caption = "Top 10 N-grams mais frequentes"
) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Top 10 N-grams mais frequentes
N-gram Frequência
Processo de ensino-aprendizagem 136
Ensino Fundamental 59
Aprendizagem Significativa 24
BNCC 24
Estudo de Caso 14
do primeiro ano do ensino 11
Pensamento Computacional 10
em sala de aula e 9
alunos do primeiro ano do 8
da rede municipal de ensino 7

Área “Ensino”

# Convertendo a coluna DS_RESUMO para texto, se necessário
dados_ENSINO <- dados_filtrados %>% filter(NM_AREA_CONHECIMENTO == "ENSINO")
dados_ENSINO_n_gram <- dados_ENSINO %>%
  mutate(DS_RESUMO = as.character(DS_RESUMO))  # Convertendo para texto, se necessário

# Tokenização por n-grams (n = 5)
n_grams_frequentes <- dados_ENSINO_n_gram %>%
  unnest_tokens(ngrams, DS_RESUMO, token = "ngrams", n = 5) %>%
  filter(str_detect(ngrams, "^[a-zA-Z\\s]+$")) %>%  # Filtra números e pontuação, mantendo apenas palavras
  count(ngrams, sort = TRUE) %>%  # Conta a frequência dos n-grams
  head(50)  # Extrai os 50 n-grams mais frequentes

# Salvando os n-grams em um arquivo CSV com ";" como separador
write.csv2(n_grams_frequentes, "n_grams_frequentes_ensino.csv", row.names = FALSE)

# Carregando o CSV gerado anteriormente
n_grams_frequentes <- read.csv2("n_grams_frequentes_ensino.csv")

# Agrupando os sinônimos de "processo de ensino-aprendizagem"
n_grams_agrupados <- n_grams_frequentes %>%
  mutate(
ngrams = case_when(
      # Agrupando sinônimos de "processo de ensino-aprendizagem"
      str_detect(ngrams, "nos processos de ensino e|o processo de ensino e|de ensino e aprendizagem de|processo de ensino e aprendizagem|o processo de ensino aprendizagem|no processo de ensino aprendizagem|processos de ensino e aprendizagem|no processo de ensino e|de ensino e de aprendizagem") ~ "Processo de ensino-aprendizagem",
      # Agrupando sinônimos da BNCC
      str_detect(ngrams, "base nacional comum curricular bncc|da base nacional comum curricular|a base nacional comum curricular") ~ "BNCC",
      # Agrupando sinônimos de Aprendizagem significativa
      str_detect(ngrams, "da aprendizagem significativa de david|teoria da aprendizagem significativa de|aprendizagem significativa de david ausubel|a teoria da aprendizagem significativa") ~ "Aprendizagem Significativa",
      # Agrupando sinônimos de Ensino Fundamental
      str_detect(ngrams, "do ensino fundamental em uma|do ensino fundamental da rede|com estudantes do ensino fundamental|anos finais do ensino fundamental|nos anos iniciais do ensino|ano do ensino fundamental com|anos iniciais do ensino fundamental|ano do ensino fundamental de|do ensino fundamental de uma|nono ano do ensino fundamental") ~ "Ensino Fundamental",
      # Agrupando sinônimos de Estudo de Caso
      str_detect(ngrams, "de um estudo de caso|em um estudo de caso") ~ "Estudo de Caso",
                       TRUE ~ ngrams)) %>%
  group_by(ngrams) %>%
  summarise(Frequência = sum(n), .groups = "drop") %>%
  arrange(desc(Frequência))

# Salvando a tabela consolidada em um novo arquivo CSV
write.csv2(n_grams_agrupados, "n_grams_agrupados_ensino.csv", row.names = FALSE)

# Exibindo apenas os 10 n-grams mais frequentes
kable(
  head(n_grams_agrupados, 10),  # Seleciona os 10 primeiros pela frequência
  format = "html",  # Alternativamente, use "markdown" ou "latex" conforme necessário
  col.names = c("N-gram", "Frequência"),
  caption = "Top 10 N-grams mais frequentes"
) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Top 10 N-grams mais frequentes
N-gram Frequência
Processo de ensino-aprendizagem 43
Ensino Fundamental 18
Aprendizagem Significativa 7
o desenvolvimento do pensamento computacional 7
Estudo de Caso 6
em sala de aula e 6
coleta de dados foi realizada 4
como recurso para o ensino 4
de ensino potencialmente significativa ueps 4
educacional como recurso para o 4

Área “Educação”

# Filtrando para a área de conhecimento "EDUCAÇÃO"
dados_EDUCACAO <- dados_filtrados %>% filter(NM_AREA_CONHECIMENTO == "EDUCAÇÃO")
dados_EDUCACAO_n_gram <- dados_EDUCACAO %>%
  mutate(DS_RESUMO = as.character(DS_RESUMO))  # Convertendo para texto, se necessário

# Tokenização por n-grams (n = 5)
n_grams_frequentes <- dados_EDUCACAO_n_gram %>%
  unnest_tokens(ngrams, DS_RESUMO, token = "ngrams", n = 5) %>%
  filter(str_detect(ngrams, "^[a-zA-Z\\s]+$")) %>%  # Filtra números e pontuação, mantendo apenas palavras
  count(ngrams, sort = TRUE) %>%  # Conta a frequência dos n-grams
  head(50)  # Extrai os 50 n-grams mais frequentes

# Salvando os n-grams em um arquivo CSV com ";" como separador
write.csv2(n_grams_frequentes, "n_grams_frequentes_educacao.csv", row.names = FALSE)

# Carregando o CSV gerado anteriormente
n_grams_frequentes <- read.csv2("n_grams_frequentes_educacao.csv")

# Agrupando os sinônimos de "processo de ensino-aprendizagem"
n_grams_agrupados <- n_grams_frequentes %>%
  mutate(
ngrams = case_when(
      # Agrupando sinônimos de "processo de ensino-aprendizagem"
      str_detect(ngrams, "nos processos de ensino e|o processo de ensino e|de ensino e aprendizagem de|processo de ensino e aprendizagem|o processo de ensino aprendizagem|no processo de ensino aprendizagem|processos de ensino e aprendizagem|no processo de ensino e|de ensino e de aprendizagem") ~ "Processo de ensino-aprendizagem",
      # Agrupando sinônimos da BNCC
      str_detect(ngrams, "base nacional comum curricular bncc|da base nacional comum curricular|a base nacional comum curricular") ~ "BNCC",
      # Agrupando sinônimos de Aprendizagem significativa
      str_detect(ngrams, "da aprendizagem significativa de david|teoria da aprendizagem significativa de|aprendizagem significativa de david ausubel|a teoria da aprendizagem significativa") ~ "Aprendizagem Significativa",
      # Agrupando sinônimos de Ensino Fundamental
      str_detect(ngrams, "do ensino fundamental em uma|do ensino fundamental da rede|com estudantes do ensino fundamental|anos finais do ensino fundamental|nos anos iniciais do ensino|ano do ensino fundamental com|anos iniciais do ensino fundamental|ano do ensino fundamental de|do ensino fundamental de uma|nono ano do ensino fundamental|ensino fundamental de uma escola") ~ "Ensino Fundamental",
      # Agrupando sinônimos de Estudo de Caso
      str_detect(ngrams, "de um estudo de caso|em um estudo de caso") ~ "Estudo de Caso",
      # Agrupando sinônimos de Estudo de Caso
      str_detect(ngrams, "da rede municipal de ensino|municipal de ensino de natal|rede municipal de ensino de|escolas da rede municipal de") ~ "Rede Municipal de ensino",
                       TRUE ~ ngrams)) %>%
  group_by(ngrams) %>%
  summarise(Frequência = sum(n), .groups = "drop") %>%
  arrange(desc(Frequência))

# Salvando a tabela consolidada em um novo arquivo CSV
write.csv2(n_grams_agrupados, "n_grams_agrupados_educacao.csv", row.names = FALSE)

# Exibindo apenas os 10 n-grams mais frequentes
kable(
  head(n_grams_agrupados, 10),  # Seleciona os 10 primeiros pela frequência
  format = "html",  # Alternativamente, use "markdown" ou "latex" conforme necessário
  col.names = c("N-gram", "Frequência"),
  caption = "Top 10 N-grams mais frequentes"
) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Top 10 N-grams mais frequentes
N-gram Frequência
Processo de ensino-aprendizagem 26
Ensino Fundamental 17
Rede Municipal de ensino 16
instrumentos de coleta de dados 4
do primeiro ano do ensino 3
ensino e aprendizagem de conceitos 3
nas cinco escolas de portugal 3
o uso de tecnologias na 3
um ambiente de aprendizagem com 3
BNCC 2

Área “Ciência da Computação”

# Filtrando os dados para "CIÊNCIA DA COMPUTAÇÃO"
dados_COMPUTACAO <- dados_filtrados %>% filter(NM_AREA_CONHECIMENTO == "CIÊNCIA DA COMPUTAÇÃO")
dados_COMPUTACAO_n_gram <- dados_COMPUTACAO %>%
  mutate(DS_RESUMO = as.character(DS_RESUMO))  # Convertendo para texto, se necessário

# Tokenização por n-grams (n = 5)
n_grams_frequentes <- dados_COMPUTACAO_n_gram %>%
  unnest_tokens(ngrams, DS_RESUMO, token = "ngrams", n = 5) %>%
  filter(str_detect(ngrams, "^[a-zA-Z\\s]+$")) %>%  # Filtra números e pontuação, mantendo apenas palavras
  count(ngrams, sort = TRUE) %>%  # Conta a frequência dos n-grams
  head(50)  # Extrai os 50 n-grams mais frequentes

# Salvando os n-grams em um arquivo CSV com ";" como separador
write.csv2(n_grams_frequentes, "n_grams_frequentes_computacao.csv", row.names = FALSE)

# Carregando o CSV gerado anteriormente
n_grams_frequentes <- read.csv2("n_grams_frequentes_computacao.csv")

# Agrupando os sinônimos de termos frequentes
n_grams_agrupados <- n_grams_frequentes %>%
  mutate(
ngrams = case_when(
      # Agrupando sinônimos de "processo de ensino-aprendizagem"
      str_detect(ngrams, "nos processos de ensino e|o processo de ensino e|de ensino e aprendizagem de|processo de ensino e aprendizagem|o processo de ensino aprendizagem|no processo de ensino aprendizagem|processos de ensino e aprendizagem|no processo de ensino e|de ensino e de aprendizagem") ~ "Processo de ensino-aprendizagem",
      # Agrupando sinônimos da BNCC
      str_detect(ngrams, "base nacional comum curricular bncc|da base nacional comum curricular|a base nacional comum curricular") ~ "BNCC",
      # Agrupando sinônimos de Aprendizagem significativa
      str_detect(ngrams, "da aprendizagem significativa de david|teoria da aprendizagem significativa de|aprendizagem significativa de david ausubel|a teoria da aprendizagem significativa") ~ "Aprendizagem Significativa",
      # Agrupando sinônimos de Ensino Fundamental
      str_detect(ngrams, "do ensino fundamental em uma|do ensino fundamental da rede|com estudantes do ensino fundamental|anos finais do ensino fundamental|nos anos iniciais do ensino|ano do ensino fundamental com|anos iniciais do ensino fundamental|ano do ensino fundamental de|do ensino fundamental de uma|nono ano do ensino fundamental") ~ "Ensino Fundamental",
      # Agrupando sinônimos de Estudo de Caso
      str_detect(ngrams, "de um estudo de caso|em um estudo de caso") ~ "Estudo de Caso",
      # Agrupando sinônimos de Pensamento Computacional
      str_detect(ngrams, "desenvolvimento das habilidades do pc|as habilidades do pensamento computacional|das habilidades do pc o|do pc e no aprendizado|do pensamento computacional pc por") ~ "Pensamento Computacional",
                       TRUE ~ ngrams)) %>%
  group_by(ngrams) %>%
  summarise(Frequência = sum(n), .groups = "drop") %>%
  arrange(desc(Frequência))

# Salvando a tabela consolidada em um novo arquivo CSV
write.csv2(n_grams_agrupados, "n_grams_agrupados_computacao.csv", row.names = FALSE)

# Exibindo apenas os 10 n-grams mais frequentes
kable(
  head(n_grams_agrupados, 10),  # Seleciona os 10 primeiros pela frequência
  format = "html",  # Alternativamente, use "markdown" ou "latex" conforme necessário
  col.names = c("N-gram", "Frequência"),
  caption = "Top 10 N-grams mais frequentes em Ciência da Computação"
) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Top 10 N-grams mais frequentes em Ciência da Computação
N-gram Frequência
Pensamento Computacional 11
BNCC 6
como uma ferramenta de ensino 3
o desenvolvimento orientado a modelos 3
a universidade federal do rio 2
alunos do primeiro ano do 2
do primeiro ano do ensino 2
dos estudantes em sala de 2
e no aprendizado dos componentes 2
em sala de aula de 2

Área “Física”

# Filtrando para FÍSICA
dados_FISICA <- dados_filtrados %>% filter(NM_AREA_CONHECIMENTO == "FÍSICA")
dados_FISICA_n_gram <- dados_FISICA %>%
  mutate(DS_RESUMO = as.character(DS_RESUMO))  # Convertendo para texto, se necessário

# Tokenização por n-grams (n = 5)
n_grams_frequentes <- dados_FISICA_n_gram %>%
  unnest_tokens(ngrams, DS_RESUMO, token = "ngrams", n = 5) %>%
  filter(str_detect(ngrams, "^[a-zA-Z\\s]+$")) %>%  # Filtra números e pontuação, mantendo apenas palavras
  count(ngrams, sort = TRUE) %>%  # Conta a frequência dos n-grams
  head(50)  # Extrai os 50 n-grams mais frequentes

# Salvando os n-grams em um arquivo CSV com ";" como separador
write.csv2(n_grams_frequentes, "n_grams_frequentes_fisica.csv", row.names = FALSE)

# Carregando o CSV gerado anteriormente
n_grams_frequentes <- read.csv2("n_grams_frequentes_fisica.csv")

# Agrupando os sinônimos de "processo de ensino-aprendizagem"
n_grams_agrupados <- n_grams_frequentes %>%
  mutate(
ngrams = case_when(
      # Agrupando sinônimos de "processo de ensino-aprendizagem"
      str_detect(ngrams, "nos processos de ensino e|o processo de ensino e|de ensino e aprendizagem de|processo de ensino e aprendizagem|o processo de ensino aprendizagem|no processo de ensino aprendizagem|processos de ensino e aprendizagem|no processo de ensino e|de ensino e de aprendizagem") ~ "Processo de ensino-aprendizagem",
      # Agrupando sinônimos da BNCC
      str_detect(ngrams, "base nacional comum curricular bncc|da base nacional comum curricular|a base nacional comum curricular") ~ "BNCC",
      # Agrupando sinônimos de Aprendizagem significativa
      str_detect(ngrams, "da aprendizagem significativa de david|teoria da aprendizagem significativa de|aprendizagem significativa de david ausubel|a teoria da aprendizagem significativa") ~ "Aprendizagem Significativa",
      # Agrupando sinônimos de Ensino Fundamental
      str_detect(ngrams, "do ensino fundamental em uma|do ensino fundamental da rede|com estudantes do ensino fundamental|anos finais do ensino fundamental|nos anos iniciais do ensino|ano do ensino fundamental com|anos iniciais do ensino fundamental|ano do ensino fundamental de|do ensino fundamental de uma|nono ano do ensino fundamental") ~ "Ensino Fundamental",
      # Agrupando sinônimos de Estudo de Caso
      str_detect(ngrams, "de um estudo de caso|em um estudo de caso") ~ "Estudo de Caso",
                       TRUE ~ ngrams)) %>%
  group_by(ngrams) %>%
  summarise(Frequência = sum(n), .groups = "drop") %>%
  arrange(desc(Frequência))

# Salvando a tabela consolidada em um novo arquivo CSV
write.csv2(n_grams_agrupados, "n_grams_agrupados_fisica.csv", row.names = FALSE)

# Exibindo apenas os 10 n-grams mais frequentes
kable(
  head(n_grams_agrupados, 10),  # Seleciona os 10 primeiros pela frequência
  format = "html",  # Alternativamente, use "markdown" ou "latex" conforme necessário
  col.names = c("N-gram", "Frequência"),
  caption = "Top 10 N-grams mais frequentes"
) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Top 10 N-grams mais frequentes
N-gram Frequência
Aprendizagem Significativa 13
Processo de ensino-aprendizagem 7
do primeiro ano do ensino 4
alunos do primeiro ano do 3
aprendizagem significativa das leis de 2
aumentar o interesse do aluno 2
como ferramenta motivadora auxiliar no 2
das leis de newton na 2
de terceiro ano do ensino 2
dificuldades entre elas a falta 2

Área “Interdisciplinar”

# Filtrando para a área INTERDISCIPLINAR
dados_INTERDISCIPLINAR <- dados_filtrados %>% filter(NM_AREA_CONHECIMENTO == "INTERDISCIPLINAR")

# Convertendo a coluna DS_RESUMO para texto, se necessário
dados_INTERDISCIPLINAR_n_gram <- dados_INTERDISCIPLINAR %>%
  mutate(DS_RESUMO = as.character(DS_RESUMO))  # Convertendo para texto, se necessário

# Tokenização por n-grams (n = 5)
n_grams_frequentes <- dados_INTERDISCIPLINAR_n_gram %>%
  unnest_tokens(ngrams, DS_RESUMO, token = "ngrams", n = 5) %>%
  filter(str_detect(ngrams, "^[a-zA-Z\\s]+$")) %>%  # Filtra números e pontuação, mantendo apenas palavras
  count(ngrams, sort = TRUE) %>%  # Conta a frequência dos n-grams
  head(50)  # Extrai os 50 n-grams mais frequentes

# Salvando os n-grams em um arquivo CSV com ";" como separador
write.csv2(n_grams_frequentes, "n_grams_frequentes_interdisciplinar.csv", row.names = FALSE)

# Carregando o CSV gerado anteriormente
n_grams_frequentes <- read.csv2("n_grams_frequentes_interdisciplinar.csv")

# Agrupando os sinônimos de "processo de ensino-aprendizagem"
n_grams_agrupados <- n_grams_frequentes %>%
  mutate(
ngrams = case_when(
      # Agrupando sinônimos de "processo de ensino-aprendizagem"
      str_detect(ngrams, "nos processos de ensino e|o processo de ensino e|de ensino e aprendizagem de|processo de ensino e aprendizagem|o processo de ensino aprendizagem|no processo de ensino aprendizagem|processos de ensino e aprendizagem|no processo de ensino e|de ensino e de aprendizagem") ~ "Processo de ensino-aprendizagem",
      # Agrupando sinônimos da BNCC
      str_detect(ngrams, "base nacional comum curricular bncc|da base nacional comum curricular|a base nacional comum curricular|ao que apresenta a bncc|aos moldes da bncc auxiliando") ~ "BNCC",
      # Agrupando sinônimos de Aprendizagem significativa
      str_detect(ngrams, "da aprendizagem significativa de david|teoria da aprendizagem significativa de|aprendizagem significativa de david ausubel|a teoria da aprendizagem significativa") ~ "Aprendizagem Significativa",
      # Agrupando sinônimos de Ensino Fundamental
      str_detect(ngrams, "do ensino fundamental em uma|do ensino fundamental da rede|com estudantes do ensino fundamental|anos finais do ensino fundamental|nos anos iniciais do ensino|ano do ensino fundamental com|anos iniciais do ensino fundamental|ano do ensino fundamental de|do ensino fundamental de uma|nono ano do ensino fundamental") ~ "Ensino Fundamental",
      # Agrupando sinônimos de Estudo de Caso
      str_detect(ngrams, "de um estudo de caso|em um estudo de caso") ~ "Estudo de Caso",
      # Agrupando sinônimos de Metodologias Ativas
      str_detect(ngrams, "por meio de metodologias ativas|educacional por meio de metodologias|meio de metodologias ativas na") ~ "Metodologias Ativas",
                       TRUE ~ ngrams)) %>%
  group_by(ngrams) %>%
  summarise(Frequência = sum(n), .groups = "drop") %>%
  arrange(desc(Frequência))

# Salvando a tabela consolidada em um novo arquivo CSV
write.csv2(n_grams_agrupados, "n_grams_agrupados_interdisciplinar.csv", row.names = FALSE)

# Exibindo apenas os 10 n-grams mais frequentes
kable(
  head(n_grams_agrupados, 10),  # Seleciona os 10 primeiros pela frequência
  format = "html",  # Alternativamente, use "markdown" ou "latex" conforme necessário
  col.names = c("N-gram", "Frequência"),
  caption = "Top 10 N-grams mais frequentes (Área: INTERDISCIPLINAR)"
) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Top 10 N-grams mais frequentes (Área: INTERDISCIPLINAR)
N-gram Frequência
Processo de ensino-aprendizagem 17
Metodologias Ativas 12
BNCC 5
alunos da turma que usou 2
ano do ensino fundamental anos 2
as habilidades do pensamento computacional 2
atividades baseadas em creative learning 2
da turma que usou lego 2
de atividades baseadas em creative 2
de fazer a leitura do 2

Área “Matemática”

# Filtrando para a área de conhecimento MATEMÁTICA
dados_MATEMATICA <- dados_filtrados %>% filter(NM_AREA_CONHECIMENTO == "MATEMÁTICA")
dados_MATEMATICA_n_gram <- dados_MATEMATICA %>%
  mutate(DS_RESUMO = as.character(DS_RESUMO))  # Convertendo para texto, se necessário

# Tokenização por n-grams (n = 5)
n_grams_frequentes <- dados_MATEMATICA_n_gram %>%
  unnest_tokens(ngrams, DS_RESUMO, token = "ngrams", n = 5) %>%
  filter(str_detect(ngrams, "^[a-zA-Z\\s]+$")) %>%  # Filtra números e pontuação, mantendo apenas palavras
  count(ngrams, sort = TRUE) %>%  # Conta a frequência dos n-grams
  head(50)  # Extrai os 50 n-grams mais frequentes

# Salvando os n-grams em um arquivo CSV com ";" como separador
write.csv2(n_grams_frequentes, "n_grams_frequentes_matematica.csv", row.names = FALSE)

# Carregando o CSV gerado anteriormente
n_grams_frequentes <- read.csv2("n_grams_frequentes_matematica.csv")

# Agrupando os sinônimos de "processo de ensino-aprendizagem"
n_grams_agrupados <- n_grams_frequentes %>%
  mutate(
ngrams = case_when(
      # Agrupando sinônimos de "processo de ensino-aprendizagem"
      str_detect(ngrams, "nos processos de ensino e|o processo de ensino e|de ensino e aprendizagem de|processo de ensino e aprendizagem|o processo de ensino aprendizagem|no processo de ensino aprendizagem|processos de ensino e aprendizagem|no processo de ensino e|de ensino e de aprendizagem") ~ "Processo de ensino-aprendizagem",
      # Agrupando sinônimos da BNCC
      str_detect(ngrams, "base nacional comum curricular bncc|da base nacional comum curricular|a base nacional comum curricular") ~ "BNCC",
      # Agrupando sinônimos de Aprendizagem significativa
      str_detect(ngrams, "da aprendizagem significativa de david|teoria da aprendizagem significativa de|aprendizagem significativa de david ausubel|a teoria da aprendizagem significativa") ~ "Aprendizagem Significativa",
      # Agrupando sinônimos de Ensino Fundamental
      str_detect(ngrams, "do ensino fundamental em uma|do ensino fundamental da rede|com estudantes do ensino fundamental|anos finais do ensino fundamental|nos anos iniciais do ensino|ano do ensino fundamental com|anos iniciais do ensino fundamental|ano do ensino fundamental de|do ensino fundamental de uma|nono ano do ensino fundamental") ~ "Ensino Fundamental",
      # Agrupando sinônimos de Estudo de Caso
      str_detect(ngrams, "de um estudo de caso|em um estudo de caso") ~ "Estudo de Caso",
      # Agrupando sinônimos de Objetivo de pesquisa
      str_detect(ngrams, "este trabalho tem como objetivo|o presente trabalho tem como|presente trabalho tem como objetivo|como objetivo principal utilizar a") ~ "Objetivo de pesquisa",
                       TRUE ~ ngrams)) %>%
  group_by(ngrams) %>%
  summarise(Frequência = sum(n), .groups = "drop") %>%
  arrange(desc(Frequência))

# Salvando a tabela consolidada em um novo arquivo CSV
write.csv2(n_grams_agrupados, "n_grams_agrupados_matematica.csv", row.names = FALSE)

# Exibindo apenas os 10 n-grams mais frequentes
kable(
  head(n_grams_agrupados, 10),  # Seleciona os 10 primeiros pela frequência
  format = "html",  # Alternativamente, use "markdown" ou "latex" conforme necessário
  col.names = c("N-gram", "Frequência"),
  caption = "Top 10 N-grams mais frequentes"
) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Top 10 N-grams mais frequentes
N-gram Frequência
Objetivo de pesquisa 12
Processo de ensino-aprendizagem 9
BNCC 4
a teoria de matrizes de 2
ano do ensino fundamental e 2
com o cubo de rubik 2
dessa forma o presente trabalho 2
este trabalho tem o objetivo 2
o cubo de rubik e 2
resolver o cubo de rubik 2

4 Clusterização

# Pré-processamento dos textos
corpus <- Corpus(VectorSource(dados_filtrados$DS_RESUMO))  # Usando a coluna DS_RESUMO da base dados_filtrados
corpus <- tm_map(corpus, content_transformer(tolower))  # Converter para minúsculas
corpus <- tm_map(corpus, removePunctuation)  # Remover pontuação
corpus <- tm_map(corpus, removeNumbers)  # Remover números
corpus <- tm_map(corpus, removeWords, stopwords("pt"))  # Remover stopwords em português
corpus <- tm_map(corpus, stripWhitespace)  # Remover espaços extras

# Transformação TF-IDF
tdm <- DocumentTermMatrix(corpus, control = list(weighting = weightTfIdf))
matriz_tfidf <- as.matrix(tdm)

# Converter para formato esparso para economizar memória
matriz_tfidf <- as(matriz_tfidf, "sparseMatrix")

# Reduzir dimensionalidade com SVD para simplificar os cálculos
set.seed(123)
svd_result <- irlba(matriz_tfidf, nv = 50)  # Reduzindo para 50 dimensões
matriz_reduzida <- svd_result$u %*% diag(svd_result$d)

# Calcular matriz de similaridade com a matriz reduzida
dist_matrix <- proxy::dist(matriz_reduzida, method = "cosine")

# Realizar o agrupamento hierárquico
cluster <- hclust(dist_matrix, method = "ward.D2")

# Definir o número desejado de clusters
num_clusters <- 3

# Cortar o dendrograma para obter o número desejado de clusters
clusters <- cutree(cluster, k = num_clusters)

# Associe as palavras ao agrupamento
palavras <- colnames(matriz_tfidf)  # Extraímos as palavras da matriz TF-IDF
palavras_clusters <- lapply(1:num_clusters, function(i) {
  palavras[clusters == i]  # Palavras associadas ao cluster i
})

Tabela interativa: Palavras mais frequentes por cluster

# Definir o número desejado de clusters
num_clusters <- 3

# Identificar palavras mais frequentes por cluster
summary_by_cluster <- list()
for (i in 1:num_clusters) {
  # Selecionar documentos do cluster atual
  cluster_docs <- matriz_tfidf[clusters == i, , drop = FALSE]

  # Somar as frequências de cada palavra no cluster
  word_freq <- colSums(cluster_docs)

  # Selecionar as 10 palavras mais frequentes
  top_words <- sort(word_freq, decreasing = TRUE)[1:100]

  # Armazenar o resumo do cluster
  summary_by_cluster[[i]] <- names(top_words)
}

# Criar um data frame com clusters e palavras mais frequentes
clusters_df <- data.frame(
  Cluster = rep(1:num_clusters, each = 50),  # Repete o número do cluster
  Palavra = unlist(summary_by_cluster)      # Converte as palavras em uma única coluna
)

# Calcular a frequência de todas as palavras
word_frequencies <- apply(matriz_tfidf, 2, sum)

# Mapear frequências para o data frame
clusters_df$Frequencia <- word_frequencies[clusters_df$Palavra]

# Ordenar clusters por frequência
clusters_df <- clusters_df %>%
  arrange(Cluster, desc(Frequencia))

# Exibir a tabela interativa
datatable(clusters_df,
          options = list(pageLength = 10, autoWidth = TRUE,
                         order = list(list(0, 'asc'))),  # Ordena pela coluna 'Cluster'
          rownames = FALSE,  # Remove índices da tabela
          caption = 'Tabela: Palavras mais frequentes por cluster.')

5 Núvens de Palavras por Cluster

Cluster 1

# Selecionar palavras e frequências do cluster 1
cluster_palavras <- clusters_df[clusters_df$Cluster == 1, ]

# Criar a nuvem de palavras para o cluster 1
wordcloud(
  words = cluster_palavras$Palavra,
  freq = cluster_palavras$Frequencia,
  min.freq = 0.5,                  # Exibe palavras com frequência mínima de 1
  max.words = Inf,               # Exibe todas as palavras
  random.order = FALSE,          # Palavras mais frequentes no centro
  scale = c(2, 0.1),             # Tamanho das palavras
  colors = brewer.pal(15, "Dark2") # Paleta de cores vibrante
)

Cluster 2

# Selecionar palavras e frequências do cluster 2
cluster_palavras <- clusters_df[clusters_df$Cluster == 2, ]

# Criar a nuvem de palavras para o cluster 2
wordcloud(
  words = cluster_palavras$Palavra,
  freq = cluster_palavras$Frequencia,
  min.freq = 0.5,                 # Exibe palavras com frequência mínima de 0.5
  max.words = Inf,                # Exibe todas as palavras
  random.order = FALSE,           # Palavras mais frequentes no centro
  scale = c(2, 0.1),              # Tamanho das palavras
  colors = brewer.pal(8, "Dark2") # Paleta de cores vibrante
)

Cluster 3

# Selecionar palavras e frequências do cluster 2
cluster_palavras <- clusters_df[clusters_df$Cluster == 3, ]

# Criar a nuvem de palavras para o cluster 2
wordcloud(
  words = cluster_palavras$Palavra,
  freq = cluster_palavras$Frequencia,
  min.freq = 0.5,                 # Exibe palavras com frequência mínima de 0.5
  max.words = Inf,                # Exibe todas as palavras
  random.order = FALSE,           # Palavras mais frequentes no centro
  scale = c(2, 0.1),              # Tamanho das palavras
  colors = brewer.pal(8, "Dark2") # Paleta de cores vibrante
)