library(tidyverse) # para manipular os dados
library(lubridate) # para lidar com as datas
library(janitor) # para padronizar as colunas
library(wordcloud2) # criar a nuvem de palavras
library(DT) # criar tabela
library(ggraph) # criar grafo
library(igraph) # criar grafo
library(tm) # remove words
library(stopwords) #stopwords
library(kableExtra) #stopwords
Análise geral
Esse código em R está relacionado à análise de notícias ou texto com foco em termos raciais, removendo palavras irrelevantes (stopwords) e usando um dicionário específico de termos raciais.
Carregamento de Bibliotecas
Aqui, são carregadas várias bibliotecas necessárias para a análise de dados, como o tidyverse
para manipulação de dados, lubridate
para lidar com datas, janitor
para padronização de colunas, wordcloud2
para criar nuvens de palavras, DT
para criar tabelas interativas, ggraph
e igraph
para criar gráficos de rede, tm
para processamento de texto, stopwords
para identificar palavras irrelevantes e kableExtra
para melhorar a formatação de tabelas.
Notícias Coletadas
Este trecho lê um arquivo RDS chamado “04_titulos_palavras.rds” que contém dados de títulos de notícias. Esses títulos foram previamente processados para separar as palavras e remover as stopwords.
<- read_rds("dados/04_titulos_palavras.rds") titulos_palavras
Criação de uma Lista de Stopwords
Aqui, é criada uma lista de stopwords em português. Stopwords são palavras comuns que geralmente são removidas durante a análise de texto, pois não contribuem significativamente para o significado do texto. Além das stopwords padrão para o idioma português, algumas palavras específicas relacionadas a raça e cor foram adicionadas à lista.
<- c(stopwords("pt"),"negro","negra","preto","preta","parda","pardo","negros","negras","pretos","pretas","pardas","pardos","afrodescendente","afrodescendentes","raciais","de","a", "o", "que", "e", "do","da","em", "um", "para", "é", "com", "não", "uma", "os", "no", "se", "na","por", "mais", "as", "dos", "como", "mas", "foi", "ao", "ele", "das", "tem", "à", "seu", "sua", "ou", "ser", "quando", "muito", "há", "nos", "já", "está", "eu", "também", "só", "pelo", "pela", "até", "isso", "ela", "entre", "era", "depois", "sem", "mesmo", "aos", "ter", "seus", "quem", "nas", "me", "esse", "eles", "estão", "você", "tinha", "foram", "essa", "num", "nem", "suas", "meu", "às", "minha", "têm", "numa", "pelos", "elas", "havia", "seja", "qual", "será", "nós", "tenho", "lhe", "deles", "essas", "esses", "pelas", "este", "fosse", "dele", "tu", "te", "vocês", "vos", "lhes", "meus", "minhas","teu", "tua","teus","tuas","nosso", "nossa","nossos","nossas","dela", "delas", "esta", "estes", "estas", "aquele", "aquela", "aqueles", "aquelas", "isto","aquilo","estou","está","estamos","estão","estive","esteve","estivemos","estiveram","estava","estávamos","estavam","estivera","estivéramos","esteja","estejamos","estejam","estivesse","estivéssemos","estivessem","estiver","estivermos","estiverem","hei","há","havemos","hão","houve","houvemos","houveram","houvera","houvéramos","haja","hajamos","hajam","houvesse","houvéssemos","houvessem","houver","houvermos","houverem","houverei","houverá","houveremos","houverão","houveria","houveríamos","houveriam","sou","somos","são","era","éramos","eram","fui","foi","fomos","foram","fora","fôramos","seja","sejamos","sejam","fosse","fôssemos","fossem","for","formos","forem","serei","será","seremos","serão","seria","seríamos","seriam","tenho","tem","temos","tém","tinha","tínhamos","tinham","tive","teve","tivemos","tiveram","tivera","tivéramos","tenha","tenhamos","tenham","tivesse","tivéssemos","tivessem","tiver","tivermos","tiverem","terei","terá", "teremos","terão", "teria","teríamos","teriam", "diz", "leia", "confira", "após", "ainda", "apesar", "sobre")
stopwords_pt
<- unique(stopwords_pt)
stopwords_final rm(stopwords_pt)
Criando uma nuvem de palavras
Nuvem de palavras, também conhecida como nuvem de tags, é uma representação visual das palavras mais frequentes em um determinado texto ou conjunto de textos. Essa técnica é usada para destacar as palavras mais importantes ou comuns em um texto, geralmente por meio da manipulação do tamanho e da cor da fonte.
As palavras mais frequentes em um texto são exibidas em um tamanho de fonte maior, enquanto as menos frequentes são exibidas em um tamanho menor. O objetivo da nuvem de palavras é dar uma ideia geral do conteúdo de um texto, identificando os temas ou tópicos principais que aparecem com mais frequência. A nuvem de palavras pode ser usada em uma variedade de contextos, como análise de dados, marketing, publicidade e criação de arte visual.
A nuvem de palavras abaixo mostra as palavras mais frequentes:
%>%
titulos_palavras group_by(ano, palavra) %>%
summarise(ocorrencias = n()) %>%
pivot_wider(names_from = ano, values_from = ocorrencias) %>%
filter(rowSums(select(., -palavra), na.rm = TRUE) > 40) %>%
mutate(total_decada = rowSums(select(., -palavra), na.rm = TRUE)) %>%
datatable(caption = "Tabela: Ocorrências de palavras em títulos da Folha de São Paulo, por ano, entre 2013 e 2022")
<- titulos_palavras |>
viz_palavras2 group_by(editoria_limpo, palavra) |>
summarise(ocorrencias=n()) #|>
#arrange(desc(ocorrencias)) |>
#pivot_wider(names_from = editoria_limpo, values_from = ocorrencias)
write_csv(viz_palavras2, "viz_palavras2.csv")
<- titulos_palavras |>
nuvem group_by(palavra) |>
summarise(ocorrencias=n()) |>
arrange(desc(ocorrencias))
|> datatable(caption = "Tabela 2 - Palavras mais frequentes") nuvem
## Criando a nuvem
|>
nuvem filter(ocorrencias > 50) |>
wordcloud2(size = 0.5, minSize = 0.3, gridSize = 1,
fontFamily = 'Raleway', fontWeight = 'bold',
color = "#B75454",
backgroundColor = "white",
minRotation = -pi/4, maxRotation = pi/4, shuffle = FALSE,
rotateRatio = 0, shape = 'circle', ellipticity = 1,
widgetsize = NULL, figPath = NULL, hoverFunction = NULL)
Mundo
%>%
titulos_palavras filter(editoria_limpo== "folha de spaulo mundo") |>
group_by(ano, palavra) %>%
summarise(ocorrencias = n()) %>%
pivot_wider(names_from = ano, values_from = ocorrencias) %>%
filter(rowSums(select(., -palavra), na.rm = TRUE) > 40) %>%
mutate(total_decada = rowSums(select(., -palavra), na.rm = TRUE)) %>%
datatable(caption = "Tabela: Ocorrências de palavras em títulos da editoria 'Mundo' da Folha de São Paulo, por ano, entre 2013 e 2022")
Cotiano
%>%
titulos_palavras filter(editoria_limpo== "folha de spaulo cotidiano") |>
group_by(ano, palavra) %>%
summarise(ocorrencias = n()) %>%
pivot_wider(names_from = ano, values_from = ocorrencias) %>%
filter(rowSums(select(., -palavra), na.rm = TRUE) > 10) %>%
mutate(total_decada = rowSums(select(., -palavra), na.rm = TRUE)) %>%
datatable(caption = "Tabela: Ocorrências de palavras em títulos da editoria 'Cotidiano' da Folha de São Paulo, por ano, entre 2013 e 2022")
Ilustrada
%>%
titulos_palavras filter(editoria_limpo== "folha de spaulo ilustrada") |>
group_by(ano, palavra) %>%
summarise(ocorrencias = n()) %>%
pivot_wider(names_from = ano, values_from = ocorrencias) %>%
filter(rowSums(select(., -palavra), na.rm = TRUE) > 10) %>%
mutate(total_decada = rowSums(select(., -palavra), na.rm = TRUE)) %>%
datatable(caption = "Tabela: Ocorrências de palavras em títulos da editoria 'Ilustrada' da Folha de São Paulo, por ano, entre 2013 e 2022")
%>%
titulos_palavras filter(editoria_limpo == "folha de spaulo mercado") %>%
group_by(ano, palavra) %>%
summarise(ocorrencias = n()) %>%
pivot_wider(names_from = ano, values_from = ocorrencias) %>%
filter(rowSums(select(., -palavra), na.rm = TRUE) > 10) %>%
mutate(total_decada = rowSums(select(., -palavra), na.rm = TRUE)) %>%
datatable(caption = "Tabela: Ocorrências de palavras em títulos da editoria 'Mercado' da Folha de São Paulo, por ano, entre 2013 e 2022")
Poder
%>%
titulos_palavras filter(editoria_limpo== "folha de spaulo poder") |>
group_by(ano, palavra) %>%
summarise(ocorrencias = n()) %>%
pivot_wider(names_from = ano, values_from = ocorrencias) %>%
filter(rowSums(select(., -palavra), na.rm = TRUE) > 10) %>%
mutate(total_decada = rowSums(select(., -palavra), na.rm = TRUE)) %>%
datatable(caption = "Tabela: Ocorrências de palavras em títulos da editoria 'Poder' da Folha de São Paulo, por ano, entre 2013 e 2022")
Mercado
%>%
titulos_palavras filter(editoria_limpo== "folha de spaulo mercado") |>
group_by(ano, palavra) %>%
summarise(ocorrencias = n()) %>%
pivot_wider(names_from = ano, values_from = ocorrencias) %>%
filter(rowSums(select(., -palavra), na.rm = TRUE) > 10) %>%
mutate(total_decada = rowSums(select(., -palavra), na.rm = TRUE)) %>%
datatable(caption = "Tabela: Ocorrências de palavras em títulos da editoria 'Mercado' da Folha de São Paulo, por ano, entre 2013 e 2022")
Gerando gráficos com ocorrências de palavras ao longo dos anos
Racismo
<- titulos_palavras |>
racismo_ano filter(palavra == "racismo") |>
group_by(ano) |>
summarise(ocorrencias = n()) |>
arrange(ano)
# Transforme a variável ano em um fator com a ordem desejada
$ano <- factor(racismo_ano$ano, levels = unique(racismo_ano$ano))
racismo_ano
ggplot(racismo_ano, aes(ano, ocorrencias)) +
geom_bar(stat = "identity", fill = "#B75454") +
labs(
x = "Ano",
title = "Palavra 'racismo' em títulos da Folha de São Paulo",
subtitle = "Ocorrências por ano",
caption = "Fonte: Levantamento próprio a partir da busca da Folha de S. Paulo"
+
) theme_minimal() +
theme(
plot.background = element_rect(fill = "#ffffff", colour = "#ffffff"),
panel.background = element_rect(fill = "#ffffff", colour = "#ffffff"),
plot.title = element_text(hjust = 0.5, size = 12, color = "#B75454", face = "bold"),
plot.title.position = "plot",
plot.caption = element_text(size = 10),
plot.subtitle = element_text(face = "italic", hjust = 0.5, size = 11),
axis.text.x = element_text(size = 10, face = "bold"),
axis.text.y = element_blank(),
axis.ticks.x = element_blank(),
axis.title.x = element_text(size = 12), # Inclui o título do eixo x
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
axis.line = element_blank()
+
) geom_text(aes(label = ocorrencias), vjust = -0.5, size = 4)
Cotas
<- titulos_palavras |>
cotas_ano filter(palavra == "cotas") |>
group_by(ano) |>
summarise(ocorrencias = n()) |>
arrange(ano)
# Transforme a variável ano em um fator com a ordem desejada
$ano <- factor(cotas_ano$ano, levels = unique(cotas_ano$ano))
cotas_ano
ggplot(cotas_ano, aes(ano, ocorrencias)) +
geom_bar(stat = "identity", fill = "#B75454") +
labs(
x = "Ano",
title = "Palavra 'cotas' em títulos da Folha de São Paulo",
subtitle = "Ocorrências por ano",
caption = "Fonte: Levantamento próprio a partir da busca da Folha de S. Paulo"
+
) theme_minimal() +
theme(
plot.background = element_rect(fill = "#ffffff", colour = "#ffffff"),
panel.background = element_rect(fill = "#ffffff", colour = "#ffffff"),
plot.title = element_text(hjust = 0.5, size = 12, color = "#B75454", face = "bold"),
plot.title.position = "plot",
plot.caption = element_text(size = 10),
plot.subtitle = element_text(face = "italic", hjust = 0.5, size = 11),
axis.text.x = element_text(size = 10, face = "bold"),
axis.text.y = element_blank(),
axis.ticks.x = element_blank(),
axis.title.x = element_text(size = 12), # Inclui o título do eixo x
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
axis.line = element_blank()
+
) geom_text(aes(label = ocorrencias), vjust = -0.5, size = 4)