Visualizando a frequência de palavras na obra de Shakespeare

By | Dicas de R

No Dicas de R dessa semana, iremos visualizar o vocabulário de Shakespeare através das palavras mais frequentes entre todas as suas obras. A base de dados utilizada é a bardr, pacote que contém um dataframe com todas as obras, separadas por versos. Inicialmente, vamos limpar os dados e transformá-los em um dataframe que contém cada palavra como uma linha. Esse processo faz repetidas cópias de um dataframe, e, para agilizar o código, utilizaremos a função rbindlist, do pacote data.table, que é consideravelmente mais rápida do que a rbind() do R base ou a bind_rows() do dplyr. Após gerar o dataframe, basta agrupar por palavras, eliminar alguns dados desnecessários, e realizar a contagem.

library(bardr)
library(tidyverse)
library(data.table)
dados <- all_works_df

dados_limpos <- dados %>%
mutate(content = gsub("\032", "'", content))

df_final <- tibble(name = character(), word = character(), genre = character())
teste <- tibble(name = character(), word = character(), genre = character())

substringDF <- function(df){
words <- strsplit(df$content, " ")

aux <- tibble(name = rep(df$name, length(strsplit(df$content, " ")[[1]])),
word = strsplit(df$content, " ")[[1]],
genre = rep(df$genre, length(strsplit(df$content, " ")[[1]])))


df_final <<- rbindlist(list(df_final, aux))
}

for (i in 1:nrow(dados_limpos)) {
substringDF(dados_limpos[i,])
}

palavras <- df_final %>% filter(word!="" & (!str_detect(word, "^[[:upper:][:space:]]+$") |
word=="I")) %>%
mutate(word = tolower(gsub("[[:punct:]]", "", word)))

contagem <- palavras %>% group_by(word) %>% count() %>%
filter(!str_detect(word, "^(0|[1-9][0-9]*)$")) %>% arrange(desc(n))

Temos agora todas as palavras e seu número de aparições. Apesar disso, muitas delas não são relevantes, como "the" e "and", logo precisamos filtrar conectivos e afins. Para isso, iremos utilizar um categorizador de machine learning, treinado para a língua inglesa, com o objetivo de separar as palavras pela sua classe gramatical. O modelo utilizado é fornecido pelo pacote udpipe, e, após baixá-lo e carregá-lo, basta aplicar a função sobre os dados e realizar algumas formatações.


library(udpipe)
udmodel <- udpipe_download_model(language = "english")
udmodel_eng <- udpipe_load_model(
file = "english-ewt-ud-2.5-191206.udpipe")

classificador <- as.data.frame(udpipe_annotate(udmodel_eng, contagem$word)) %>% select(token, upos) %>%
data.table()

contagem <- contagem %>% data.table()

setkey(contagem, word)
setkey(classificador, token)

contagem_classificada <- contagem[classificador] %>% as_tibble() %>%
arrange(desc(n))

Feito isso, resta pegar os dados de interesse - aqui sendo definidos como adjetivos e substantivos - e visualizá-los com o gráfico gerado pelo pacote wordcloud2. Um gráfico desse tipo apresenta as palavras mais usadas, com tamanho proporcional à frequência delas.


library(wordcloud2)</pre>
adjetivos <- contagem_classificada %>% filter(upos == "ADJ")
substantivos <- contagem_classificada %>% filter(upos == "NOUN") %>%
slice(1:1000)

wordcloud2(adjetivos)

wordcloud2(substantivos)

A melhor política econômica no momento é a vacina

By | Comentário de Conjuntura

Em menos de um ano do início da pandemia, de forma inédita, em uma corrida biomédica que poucas vezes se viu na História da Humanidade, veio a vacina contra a Covid-19. Desenvolvidas de forma isolada por laboratórios privados ou em parceria com governos soberanos, não importa, o fato é que a era da inteligência artificial não deixou a Humanidade na mão, entregando em tempo recorde um antídoto para a peste que nos assola.

A despeito dessa excelente notícia para a Humanidade, o cenário para o Brasil não é dos mais animadores. Dada a descoordenação sem precedentes vinda do Palácio do Planalto, a vacinação no país caminha a passos de cágado. Nesse Comentário de Conjuntura, trazemos um retrato da vacinação no país.

Membros do Clube AM, por suposto, têm acesso a todos os códigos desse exercício.

Os dados utilizados estão disponíveis no repositório do Wesley Cota, e são importados abaixo.


## Carregar pacotes
library(tidyverse)
library(lubridate)
library(zoo)
library(tsibble)
library(fable)
library(feasts)
library(tsibbledata)

## Coletar dados
covid_df = readr::read_csv("https://raw.githubusercontent.com/wcota/covid19br/master/cases-brazil-states.csv",
guess_max = 10000) %>%
group_by(state) %>%
mutate(d_vaccinated = vaccinated - lag(vaccinated,1)) %>%
mutate(MM_dose1 = rollmean(d_vaccinated, 7, NA, align='right'))

Observe que na função read_csv nós setamos o argumento guess_max igual a 10.000, dado que as primeiras mil linhas da coluna vaccinated estão com NA. Caso isso não seja feito, a função irá ler todas as linhas da coluna como NA.

Uma vez que os dados estejam disponíveis, podemos construir o gráfico abaixo.

A despeito da vacinação diária ainda está aquém do ritmo necessário para vacinar toda a população em um prazo adequado, uma boa notícia advinda dos dados é que a média móvel de 7 dias tem avançado. Ela estava em torno de 200 mil doses no início de fevereiro e tem avançado para acima das 500 mil doses na margem.

Esperamos que o programa de vacinação avance de forma inequívoca a partir de agora, dado o agravamento da pandemia que estamos assistindo - e que foi detalhado no Comentário de Conjuntura anterior.

Membros do Clube AM, por suposto, têm acesso a todos os códigos desse exercício.

____________________________

Indicadores do FOCUS em estabilidade

By | Indicadores

As expectativas divulgadas pelo boletim FOCUS de hoje se diferenciam das reportadas na semana passada pela quebra na sequência de revisões para cima da previsão do IPCA. A mediana do IPCA se manteve em 4.81%, enquanto que a mediana de atualizações nos últimos 5 dias úteis apresentou queda de 4.90% para 4.86%. Esse movimento de queda, acompanhado da manutenção das expectativas do PIB, SELIC e câmbio, aponta para um consenso a curto prazo do mercado sobre os valores das variáveis.

Por outro lado, as expectativas do IGP-M não parecem estar desacelerando, com aumento de 12.20% para 12.63%. A combinação desses dois efeitos parece indicar para uma volta do descolamento entre o IPCA e o IGP, sugerindo maior pressão sobre os preços de insumos industriais do que sobre preços para o consumidor final.

O código de R desse artigo está disponível para os membros do novo Clube AM. Para saber mais, clique aqui.

____________________

Março vermelho no país do negacionismo

By | Clube AM

É difícil encontrar adjetivo para caracterizar o momento atual que passa o país. A pandemia do Covid-19 atingiu o seu pior momento até aqui: março registrou quase 67 mil mortes pelo novo coronavírus. Nesse post, registramos a soma mensal de mortes provocada pela irresponsabilidade e pelo descaso, no Brasil e nos estados.

Membros do Clube AM, por suposto, têm acesso a todos os códigos desse exercício.

Os dados são coletados como abaixo.


## Carregar pacotes
library(tidyverse)
library(lubridate)

## Coletar dados
covid_df = readr::read_csv("https://raw.githubusercontent.com/wcota/covid19br/master/cases-brazil-states.csv")

A seguir, podemos construir o gráfico abaixo, destacando o mês de março.

Como se vê, o novo coronavírus foi responsável por quase 67 mil mortes somente em março, atingindo o pior momento até aqui. A situação nos estados, por suposto, pode ser vista a seguir.

Um março triste e desolador para todos nós, infelizmente.

Membros do Clube AM, por suposto, têm acesso a todos os códigos desse exercício.

____________________________

Gerando aplicativos interativos com Shiny

By | Dicas de R

No Dicas de R dessa semana, vamos mostrar as funcionalidades básicas da ferramenta Shiny, que permite gerar aplicativos interativos em R. Nosso exemplo será um mapa da localização de jogadores famosos da Champions League ao receberem passes, utilizando os dados da plataforma StatsBomb - acessados através do pacote StatsBombR - e também a formatação em ggplot do pacote ggsoccer. Primeiramente, vamos carregar os pacotes utilizados:


library(shiny)
library(ggplot2)
library(ggsoccer)
library(tidyverse)

Um aplicativo em Shiny possui dois componentes principais: a interface do usuário, e um servidor. O primeiro indica todos os elementos que serão visíveis no programa final, e as interações que podem ocorrer entre eles. A interface apresentada abaixo contém um elemento de título, e um elemento de layout com barra lateral, que é subdivido entre o gráfico principal e a barra que faz a escolha - input do usuário - do jogador a ser apresentado.

ui <- fluidPage(

titlePanel("Posicionamento de jogadores ao receberem passes"),

sidebarLayout(

sidebarPanel(

selectInput(inputId = "players",
label = "Escolha um jogador:",
choices = c("Messi",
"Toni Kroos",
"Cristiano Ronaldo",
"Iniesta",
"Robben",
"Pirlo"))
),

mainPanel(plotOutput("fieldPlot"))

)
)

As escolhas que podem ser feitas foram definidas acima, porém o elemento fieldPlot referenciado na última linha não existe ainda. Ele é gerado internamente e apenas seu resultado é apresentado, logo seu código faz parte do servidor do programa:

server <- function(input, output){

output$fieldPlot <- renderPlot({

passes_de_jogo %>% filter(grepl(input$players, pass.recipient.name)) %>%
ggplot(aes(x=pass.end_location.x, y = pass.end_location.y))+
annotate_pitch(dimensions = pitch_statsbomb) +
geom_bin2d(binwidth = c(5, 5))+
theme_pitch()

})

}

Com os dois componentes em mãos, basta rodar o aplicativo:


shinyApp(ui = ui, server = server)

O resultado pode ser disponibilizado online, através do shinyapps.io. O aplicativo feito aqui está disponível aqui.
Abaixo, um exemplo do resultado:

É interessante notar que os dados aparentam estar invertidos - Robben está recebendo passes do lado esquerdo enquanto
que Cristiano Ronaldo do lado direito, contrariando suas posições originais.

Cadastre-se em nossa Lista VIP para receber conteúdos exclusivos!

Fazer Inscrição
{"cart_token":"","hash":"","cart_data":""}