# Basic knitr options
library(knitr)
opts_chunk$set(comment = NA, 
               echo = FALSE, 
               warning = FALSE, 
               message = FALSE, 
               error = TRUE, 
               cache = FALSE,
               fig.path = 'figures/')
# Libraries
library(vilaweb)
library(rtweet)
library(tidyverse)
library(databrew)
library(translateR)
library(sentimentr) # https://github.com/trinker/sentimentr
require(RPostgreSQL)
require(readr)  
require(DBI)
# # Get most recent tweets from our people of interest
people <- 
  tolower(c('Santi_ABASCAL',
    'Albert_Rivera',
    'InesArrimadas',
    'sanchezcastejon',
    'pablocasado_',
    'KRLS',
    'QuimTorraiPla',
    'perearagones',
    'ALevySoler',
    'elsa_artadi',
    'miqueliceta',
    'Pablo_Iglesias_'))

if(file.exists('tl.RData')){
  load('tl.RData')
} else {
  # Connect to the db
  pg = DBI::dbDriver("PostgreSQL")
  con = DBI::dbConnect(pg, dbname="twitter")
  tl <- RPostgreSQL::dbGetQuery(
    con,
    paste0("SELECT * FROM twitter")
  )
  save(tl, file = 'tl.RData')  
  dbDisconnect(con)
  }


# Search for the words wordiation
find_word <- function(x){
  grepl('separatis|independència|independentis|independencia|procés|república|repùblica|republica', tolower(x))
  # grepl('paz|pau|pacífico|pacíficamente|pacíficament|pacífica', tolower(x))
  # grepl('golp', tolower(x))
}
tl <- tl %>%
  mutate(word = find_word(tweet))
pd <- tl %>%
  # filter(tolower(username) %in% tolower(people)) %>%
  # filter(word) %>%
  filter(date >= '2018-01-01',
         date <= '2018-12-31') %>%
  # mutate(date = as.Date(cut(date, 'month'))) %>%
  group_by(word,
           person = username) %>%
  tally %>%
  ungroup %>%
  group_by(person) %>%
  mutate(all = sum(n)) %>%
  ungroup %>%
  filter(word) %>%
  mutate(p = n / all * 100)
left <- expand.grid(# word = sort(unique(tl$word)),
                    # date = seq(min(pd$date),
                    #            max(pd$date),
                    #            by = 'month'),
                    person = sort(unique(tl$username)))
pd <- left_join(left, pd)

pd$n[is.na(pd$n)] <- 0
pd$p[is.na(pd$p)] <- 0

make_simple_plot <- function(pz = sort(unique(pd$person))){
  ppd <- pd %>% dplyr::filter(person %in% pz) %>%
    mutate(person = paste0('@', person))
  ppd <- ppd %>% arrange(n) %>%
    filter(!is.na(n),
           n > 1,
           !person %in% congress$user_name)
  ppd <- ppd %>% 
    arrange(desc(p))

  ppd <- ppd %>%
    dplyr::filter(person %in%
             paste0('@',
                    c('junqueras',
               'krls',
               'quimtorraipla',
               'perearagones',
               'sanchezcastejon',
               'rogertorrent',
               'carmencalvo_',
               'inesarrimadas',
               'albert_rivera',
               'pablo_iglesias_',
               'alevysoler',
               'j_zaragoza_',
               'carrizosacarlos',
               'eva_granados',
               # 'ppcatalunya',
               'alejandrotgn',
               'albiol_xg',
               'societatcc',
               # 'joantarda',
               'santi_abascal',
               # 'pdemocratacat',
               'pablo_casado_',
               # 'ciudadanoscs',
               # 'socialistes_cat',
               # 'espciudadana',
               'pablocasado',#'esquerra_erc', 
               'miqueliceta', #'pdemocratacat', 'perearagones',#'albanodante76',
               'quimtorraipla',
               # 'cupnacional',
               'krls',
               # 'gabrielrufian',
               'junqueras','rogertorrent',
               # 'carlescampuzano',
               'pablo_iglesias_','adacolau')))
  # ppd <- ppd %>%
  #   filter(!person %in% 
  #            paste0('@',
  #                   c('pnique',
  #                     'isabelbonig',
  #                     'enricmorera',
  #                     'compromis')))
  # ppd <- ppd[c(1:16),]
  ppd$person <- factor(ppd$person, levels = rev(ppd$person))
  ggplot(data = ppd,
       aes(x = person,
           y = p,
           # group = person,
           fill = person)) +
  geom_bar(stat = 'identity', width = 0.8) +
  theme_databrew() +
  labs(x = '',
       y = '%',
       title = '% de tweets con las palabras "independencia",\n"separatismo", "república", etc.*',
       caption = '*Incluye variaciones: independència, independencia, independentisme, independentismo, independentista, independentistas,\nindependentistes, separatistes, separatistas, separatisme, separatismo, república, republicana, etc.',
       # subtitle = '*Incluye también "golpista", "golpistas", etc.',
       subtitle = 'Año 2018') +
  theme(legend.position = 'none') +
  theme(#axis.text.x = element_text(angle = 90,
         #                          size = 7),
        plot.title = element_text(size = 20),
        plot.subtitle = element_text(size = 17),
        # plot.subtitle =  element_text(size = 35),
        strip.text = element_text(size = 25)) +
    scale_fill_manual(name = '',
                       values = rev(databrew::make_colors(n = length(unique(ppd$person)), categorical = FALSE, r2g = TRUE))) +
    geom_text(aes(label = round(p, digits = 1)),
              alpha = 0.6,
              size = 3.5,
              nudge_y = 1) +
    coord_flip() +
    theme(axis.text.y = element_text(size = 12))

}
make_simple_plot()

ggsave('~/Desktop/golpe.png')


joebrew/vilaweb documentation built on Sept. 11, 2020, 3:42 a.m.