library(tidyverse) # para manipular os dados
library(lubridate) # para lidar com as datas
library(janitor) # para padronizar as colunas
library(DT) # criar tabela
library(tm) # remove words
library(igraph)
library(ggraph)
library(kableExtra)
# leitura bigramas}
<- read_rds("dados/04_titulos_bigramas_com_materias.rds")
bigramas_com_materias1
<- read_rds("dados/05_titulos_bigramas.rds") titulos_bigramas
Trabalhando com bigramas
Bigrama é um termo usado em linguística e processamento de linguagem natural para se referir a uma sequência de dois itens, geralmente palavras. Em outras palavras, um bigrama é um par ordenado de palavras consecutivas em um texto.
Por exemplo, em uma frase como “O gato preto saltou sobre o muro”, os bigramas seriam: “O gato”, “gato preto”, “preto saltou”, “saltou sobre”, “sobre o”, “o muro”.
Os bigramas são úteis em várias aplicações de processamento de linguagem natural, incluindo modelagem de linguagem, análise de sentimentos e recuperação de informações. A contagem de bigramas pode ajudar a entender a estrutura do texto e a identificar padrões na forma como as palavras são usadas.
Abaixo, os bigramas mais frequentes nos títulos da editoria, deconsiderando as stopwords:
<- bigramas_com_materias1 %>%
bigramas ::count(word1, word2, sort = TRUE)
dplyr
write_rds(bigramas, "dados/05_titulos_bigramas.rds")
# Adiciona uma coluna 'ano' ao conjunto de dados bigramas_com_materias1
<- bigramas_com_materias1 %>%
df mutate(ano = lubridate::year(as.Date(datas)))
# Seleciona apenas as colunas 'ano', 'bigrama', 'editoria_limpo' e 'datas' do conjunto de dados df
<- df |>
df select(ano, bigrama, editoria_limpo, datas)
# Agrupa o conjunto de dados df pelas colunas 'bigrama', 'editoria_limpo' e 'ano' e cria uma nova coluna 'ocor' contando o número de ocorrências
<- df |>
df_group group_by(bigrama, editoria_limpo, ano) |>
summarise(ocor = n()) |>
arrange(desc(ocor))
# Escreve o conjunto de dados df_group em um arquivo CSV chamado "viz_bigramas_totais.csv"
write.csv2(df_group, "viz_bigramas_totais.csv")
glimpse(df)
Rows: 17,558
Columns: 4
$ ano <dbl> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2…
$ bigrama <chr> "mandela progride", "progride bem", "coleção homenageia…
$ editoria_limpo <chr> "folha de spaulo mundo", "folha de spaulo mundo", "fo…
$ datas <date> 2013-01-02, 2013-01-02, 2013-01-04, 2013-01-04, 2013-0…
Criando uma representação visual para os bigramas
O código abaixo mostra uma relação de “fonte” e “alvo” de cada bigrama. Filtrei aqueles que aparecem mais de 10 vezes no conjunto de títulos.
# Filtra os bigramas que aparecem mais de 10 vezes nos títulos
<- titulos_bigramas %>%
bigramas_grafo filter(n > 10) %>% # Remove bigramas que aparecem menos de 10 vezes
# Cria um grafo a partir do conjunto de dados filtrado
graph_from_data_frame()
# Define uma semente para a geração de números aleatórios
set.seed(1234)
# Define uma seta fechada para ser usada nos links do grafo
<- grid::arrow(type = "closed", length = unit(.10, "inches"))
a
# Cria um gráfico com o layout 'fr' (Fruchterman-Reingold) usando o grafo de bigramas
ggraph(bigramas_grafo, layout = "fr") +
# Adiciona arestas ao gráfico, configurando a transparência com base na contagem 'n'
geom_edge_link(aes(edge_alpha = n),
show.legend = FALSE,
arrow = a,
end_cap = circle(0.03,"inches")) + # Adiciona setas nas extremidades das arestas
# Adiciona pontos representando os nós (bigramas) ao gráfico
geom_node_point(color = "red",
size = 2,
alpha = 0.5) + # Configura cor, tamanho e transparência dos pontos
# Adiciona rótulos aos nós com base no nome do bigrama
geom_node_text(aes(label = name),
col = "darkgreen",
size = 4,
repel = TRUE,
max.overlaps = 1000) + # Usa repel para evitar sobreposição de rótulos
# Adiciona títulos ao gráfico
labs(title = "Bigramas", subtitle = "Bigrama é um par ordenado de palavras consecutivas") +
# Configura o tema do gráfico como vazio (sem grade)
theme_void()
Bigramas mais frequentes por editoria
O código a seguir define uma função chamada gerar_e_exibir_grafico em R, que aceita três parâmetros: DADOS (um conjunto de dados), NOME (uma string representando a editoria) e QTD (um número inteiro representando a quantidade mínima de ocorrências para incluir um bigrama no gráfico). A função cria e exibe um gráfico de barras horizontais usando o pacote ggplot2 para visualizar bigramas em títulos de reportagens da editoria especificada.
# Define a função
<- function(DADOS, NOME, QTD) {
gerar_e_exibir_grafico
# Cria um objeto ggplot com os dados fornecidos
<- ggplot(DADOS, aes(reorder(bigrama, n), n)) +
grafico
# Adiciona barras ao gráfico, usando o bigrama no eixo y e sua contagem no eixo x
geom_bar(stat = "identity", fill = "#B75454") + coord_flip() +
# Configuração de rótulos e títulos
labs(
x = "",
title = paste("Bigramas na editoria", NOME, "da Folha de São Paulo"),
subtitle = paste("Bigramas que aparecem", QTD, " ou mais nos títulos das reportagens"),
caption = "Fonte: Levantamento próprio a partir da página de busca da Folha de S. Paulo"
+
)
# Configurações de tema para personalizar a aparência do gráfico
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.y = element_text(size = 10, face = "bold"),
axis.text.x = element_blank(), # Remove os valores do eixo x
axis.ticks.x = element_blank(), # Remove as marcações do eixo x
axis.title.x = element_blank(), # Remove o título do eixo x
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
axis.line = element_blank()
+
)
# Adiciona rótulos de texto às barras, exibindo a contagem de cada bigrama
geom_text(aes(label = n), hjust = -0.5, size = 4)
# Exibe o gráfico
print(grafico)
}
Abaixo, o trecho de código que gera os gráficos por editoria:
#### Cotidiano
<- read_rds("dados/04_titulos_bigramas_com_materias.rds")
bigramas_com_materias1 <- bigramas_com_materias1 |>
bigramas_cotidiano filter(editoria_limpo == "folha de spaulo cotidiano") |>
::count(bigrama, sort = TRUE) |>
dplyrfilter(n > 4) # Filtro para selecionar bigramas com contagem maior que 4
#### Esporte
<- bigramas_com_materias1 |>
bigramas_esporte filter(editoria_limpo == "folha de spaulo esporte") |>
::count(bigrama, sort = TRUE) |>
dplyrfilter(n > 4) # Filtro para selecionar bigramas com contagem maior que 4
#### Poder
<- bigramas_com_materias1 |>
bigramas_poder filter(editoria_limpo == "folha de spaulo poder") |>
::count(bigrama, sort = TRUE) |>
dplyrfilter(n > 4) # Filtro para selecionar bigramas com contagem maior que 4
#### Mundo
<- bigramas_com_materias1 |>
bigramas_mundo filter(editoria_limpo == "folha de spaulo mundo") |>
::count(bigrama, sort = TRUE) |>
dplyrfilter(n > 6) # Filtro para selecionar bigramas com contagem maior que 6
#### Mercado
<- bigramas_com_materias1 |>
bigramas_mercado filter(editoria_limpo == "folha de spaulo mercado") |>
::count(bigrama, sort = TRUE) |>
dplyrfilter(n > 2) # Filtro para selecionar bigramas com contagem maior que 2
#ilustrissima
<- bigramas_com_materias1 |>
bigramas_ilustrissima filter(editoria_limpo == "folha de spaulo ilustríssima") |>
::count(bigrama, sort = TRUE) |>
dplyrfilter(n > 1) # Filtro para selecionar bigramas com contagem maior que 1
#### Ilustrada
<- bigramas_com_materias1 |>
bigramas_ilustrada filter(editoria_limpo == "folha de spaulo ilustrada") |>
::count(bigrama, sort = TRUE) |>
dplyrfilter(n > 5) # Filtro para selecionar bigramas com contagem maior que 5
gerar_e_exibir_grafico(bigramas_ilustrada, "Ilustrada", "cinco vezes")
gerar_e_exibir_grafico(bigramas_ilustrissima, "Ilustríssima", "uma vez")
gerar_e_exibir_grafico(bigramas_cotidiano, "Cotidiano", "quatro vezes")
gerar_e_exibir_grafico(bigramas_poder, "Poder", "quatro vezes")
gerar_e_exibir_grafico(bigramas_mundo, "Mundo", "seis vezes")
gerar_e_exibir_grafico(bigramas_mercado, "Mercado", "duas vezes")
gerar_e_exibir_grafico(bigramas_esporte, "Esporte", "quatro vezes")
Criei um arquivo CSV para gerar uma visualização posteriormente
```{r}
# Adicione uma coluna 'origem' em cada dataframe
$origem <- "cotidiano"
bigramas_cotidiano$origem <- "mercado"
bigramas_mercado$origem <- "esporte"
bigramas_esporte$origem <- "mundo"
bigramas_mundo$origem <- "ilustrada"
bigramas_ilustrada$origem <- "ilustrissima"
bigramas_ilustrissima
# Una todos os dataframes em um único dataframe
<- bind_rows(
bigramas_totais
bigramas_cotidiano,
bigramas_mercado,
bigramas_esporte,
bigramas_mundo,
bigramas_ilustrada,
bigramas_ilustrissima
)
# Salve o dataframe unificado em um arquivo CSV
write.csv2(df, "viz_bigramas_totais.csv")
```
Análise
Filtrar títulos que contêm determinados termos
Aqui, o código está filtrando novamente o dataframe bigramas_com_materias1
, mas desta vez está selecionando apenas os títulos que contêm o bigrama indicado (case-insensitive) na coluna “titulo_limpo”.
<- function(YYYY) {
gerar_tabela $titulo_limpo <- tolower(bigramas_com_materias1$titulos)
bigramas_com_materias1
<- bigramas_com_materias1 %>%
tabela # filter(editoria_limpo == paste0("folha de spaulo ", AAAA)) %>%
filter(str_detect(titulo_limpo, YYYY)) %>%
select(datas, titulos) %>%
distinct() %>%
kable()
tabela
}
# Exemplo de uso da função
gerar_tabela("injúria racial")
datas | titulos |
---|---|
2014-03-13 | Racismo x Injúria racial |
2014-10-01 | Polícia indicia 4 gremistas por injúria racial a Aranha |
2015-01-28 | Vítima de injúria racial, capitã da seleção de vôlei pede fim do ódio |
2015-01-29 | Sem menção em súmula, injúria racial a Fabiana não irá ao TJD, diz CBV |
2015-01-29 | Capitã da seleção diz ter sido alvo de injúria racial em MG |
2015-02-10 | Vítima de injúria racial, capitã da seleção desiste de fazer protesto |
2015-02-22 | Detido por injúria racial, torcedor é solto por falta de testemunhas |
2015-02-23 | Detido por injúria racial, torcedor é liberado por falta de testemunhas |
2015-04-02 | Árbitro ignora injúria racial a Elias na súmula do jogo do Corinthians |
2015-04-02 | Elias pede para Corinthians não fazer denúncia, após suposta injúria racial |
2015-05-18 | Clube diz que vai advertir ginasta envolvido em caso de injúria racial |
2015-05-19 | Clube dá advertência a ginasta por injúria racial |
2015-05-21 | Em decisão inédita, confederação afasta 3 ginastas por injúria racial |
2015-06-27 | Ginástica artística convoca atleta envolvido em caso de injúria racial |
2015-07-22 | Torcedores do Chelsea são banidos do futebol por injúria racial em metrô |
2015-11-04 | Taís Araújo presta depoimento após ser vítima de injúria racial |
2016-03-31 | Justiça condena mulher por injúria racial contra madrinha de casamento |
2016-05-20 | Herói de rival do São Paulo diz que foi alvo de injúria racial na Libertadores |
2017-05-12 | Vítima de injúria racial, Muntari diz que apoia boicote de negros no futebol |
2018-10-23 | Professora é autuada sob suspeita de injúria racial após discutir com eleitores de Bolsonaro no CE |
2019-03-19 | Participante do MasterChef Júnior acusa professora de injúria racial em escola de SP |
2019-05-07 | Grêmio diz apurar suposto caso de injúria racial em jogo do time |
2019-05-17 | Grêmio é multado em R$ 30 mil por caso de injúria racial a atleta do Flu |
2019-06-06 | Patroa branca registra queixa de injúria racial contra doméstica em SP |
2019-06-07 | 'Me senti ofendida, agredida, aviltada', diz autora de queixa de injúria racial |
2019-11-11 | Fifa diz que ucranianos devem investigar caso de injúria racial |
2019-11-21 | Taison é punido por reação que teve após sofrer injúria racial |
2019-12-06 | Mulher diz não andar com negro a taxista e é presa por injúria racial |
2020-11-12 | Advogado ligado aos Bolsonaros é acusado de injúria racial por garçonete; Wassef nega e se diz vítima |
2020-12-22 | Flamengo diz que laudo aponta injúria racial de Ramírez contra Bruno Henrique |
2021-02-04 | Polícia indicia Ramírez, do Bahia, por injúria racial contra Gerson, do Flamengo |
2021-10-28 | Injúria racial é crime imprescritível e equiparado ao racismo, decide STF |
2021-11-18 | Senado aprova projeto que aumenta pena para crime de injúria racial |
2021-11-30 | Câmara inclui na Lei do Racismo crime de injúria racial em locais públicos ou de uso coletivo |
2022-01-24 | Vereador de SP é detido em piscina no Rio e indiciado sob acusação de injúria racial |
2022-02-08 | Vizinho é condenado por injúria racial após briga por vaga em condomínio |
2022-04-03 | Cozinheira negra denuncia agressão e injúria racial em prédio em São Paulo |
2022-05-14 | Rafael Ramos é preso em flagrante por injúria racial; Corinthians paga fiança |
2022-05-15 | Polícia pedirá perícia de leitura labial de Rafael Ramos para avaliar acusação de injúria racial |
2022-05-18 | Senado equipara injúria racial a racismo e aumenta a pena para dois a cinco anos de prisão |
2022-05-18 | Denunciado na Câmara, vereador é investigado por outro ato de injúria racial |
2022-05-23 | Futebol mostra que decisão do STF sobre injúria racial ainda 'não pegou' |
2022-06-08 | Laudo de perícia do RS é inconclusivo sobre suposta injúria racial em Inter x Corinthians |
2022-06-10 | Ministério Público denuncia Cristófaro por injúria racial e pede cassação |
2022-06-13 | Polícia indicia Rafael Ramos por suposta injúria racial contra Edenilson |
2022-06-29 | Preso por injúria racial em jogo do Corinthians diz a promotor ter ligação com o Boca |
2022-07-01 | Tesla é alvo de novo processo de injúria racial contra trabalhadores negros |
2022-07-09 | Francês suspeito de injúria racial tem passaporte apreendido no Rio |
2022-09-21 | Candidato a deputado é vítima de injúria racial na Bahia: 'Fique na senzala' |
2022-12-08 | Garçom negro é vítima de injúria racial no interior do Rio Grande do Sul |
2022-12-12 | Denúncias de racismo e de injúria racial se arrastam na Câmara e na Assembleia de SP |
2022-12-14 | Mulher é agredida por vizinhas no elevador e as acusa de injúria racial no RN |
2022-12-14 | Promotoria apura suposta omissão de diretor de escola em SP em caso de injúria racial |
gerar_tabela("pede desculpas")
datas | titulos |
---|---|
2013-02-14 | Gravadora pede desculpas por letra ofensiva do rapper Lil Wayne |
2014-01-18 | Madonna pede desculpas por usar termo racista ao falar do filho em rede social |
2014-09-05 | Gremista acusada de racismo pede desculpas e quer encontro com Aranha |
2014-11-07 | Professor do ES pede desculpas por declaração considerada racista |
2015-06-26 | Após se comparar a afrodescendentes, Dunga pede desculpas |
2016-05-29 | Fabricante chinês de sabão pede desculpas por comercial racista |
2017-06-08 | Barroso pede desculpas por chamar Joaquim Barbosa de 'negro de primeira linha' |
2017-10-09 | Dove pede desculpas por propaganda acusada de racismo nas redes |
2020-05-20 | Volkswagen pede desculpas por propaganda de carro considerada racista |
2020-06-03 | Estilista da Louis Vuitton pede desculpas por criticar protestos nos EUA |
2020-10-21 | Fundadora do Nubank pede desculpas por dizer ser difícil contratar negros |
2022-12-06 | Luciano Huck pede desculpas por pergunta com George Floyd no 'Domingão' |
2022-12-17 | Madrinha do príncipe William pede desculpas a ativista negra após fala racista |
gerar_tabela("elza soares")
datas | titulos |
---|---|
2015-06-07 | Elza Soares prepara seu primeiro disco só de inéditas e diz viver o agora |
2016-11-16 | Programação do Dia da Consciência Negra tem homenagem a Elza Soares |
2017-08-07 | Elza Soares empolga plateia no Central Park, em Nova York |
2017-09-16 | Escalados de última hora, Rael e Elza Soares se consagram no improviso |
2017-12-24 | 'Elza Soares é o norte da bússola do enegrecimento', escreve Celso Sim |
2018-05-18 | Elza Soares, 87, lança 'Deus É Mulher', em que amplia participações femininas |
2018-07-20 | Sete atrizes interpretam Elza Soares polifônica em musical dedicado a ela |
2018-10-21 | Em musical, Elza Soares vê sua história refletida em sete atrizes |
2018-11-10 | 'Elza Soares tinha tudo para dar errado', diz Zeca Camargo, que a biografou |
2018-11-20 | Estilista negro Isaac Silva conquista o gosto de divas como Elza Soares |
2019-09-04 | Elza Soares e Martinho da Vila divertem público da Bienal do Livro, no Rio |
2019-09-12 | 'O Brasil está doente, mas eu estou avançando', diz Elza Soares, que lança disco |
2019-09-23 | Elza Soares perde nuances em disco pensado para servir a personagem |
2020-06-23 | Morte de George Floyd dói muito, mas só posso sentir e sofrer, diz Elza Soares |
2020-12-12 | Elza Soares e Renegado cantam na Virada que 'carne negra não está de graça' |
2021-03-07 | A gente está vendo exemplos do próprio negro sendo racista, diz Elza Soares |
2022-01-20 | Morre Elza Soares, considerada a cantora do milênio, aos 91 anos |
2022-01-20 | Elza Soares foi uma mãe para as mulheres negras, cantou seus amores e dores |
2022-01-20 | Elza Soares teve vida surreal e da qual não pensou em desistir |
2022-01-20 | Elza Soares disse que Brasil estava doente, mas que não se reconhecia fora daqui |
2022-01-21 | Velório de Elza Soares se encerra no Rio ao som de 'A Mulher do Fim do Mundo' |
2022-03-03 | Elza Soares e Garrincha viveram o melhor e o pior do Brasil, mostra nova série |
2022-03-03 | De Elza Soares a Alcione, 'Canto de Rainhas' faz bons perfis de sambistas |
2022-03-19 | Elza Soares lutou até o fim contra padrões de aparência que ainda oprimem as mulheres |
2022-05-12 | Entenda como Elza Soares preparou sua despedida com show no Theatro Municipal |
2022-09-11 | Rock in Rio festeja Elza Soares em clima de polarização das eleições |
gerar_tabela("veja vídeo")
datas | titulos |
---|---|
2015-04-28 | Mãe tira à força filho de protesto em Baltimore, nos EUA; veja vídeo |
2020-11-21 | Beto Freitas foi asfixiado por 4 minutos diante de 15 testemunhas em Carrefour do RS; veja vídeo |
2020-12-29 | Seguranças arrastam e retiram jovens negros de shopping na Bahia; veja vídeo |
2021-05-31 | Policial xinga e agride homem negro com soco na boca; veja vídeo |
2021-09-17 | PM diz odiar negros, admite ser racista, chama mulher de macaca e ameaça bater nela; veja vídeo |
2021-09-20 | Polícia apura prática de racismo contra delegada em loja no Ceará; veja vídeo |
2021-11-16 | Onça-parda é flagrada em parque de Presidente Prudente; veja vídeo |