# Librerias
library(tidyverse)
library(rebus)
library(htmltools)

#Ejercicio 01

Ejemplo 1

#Se está creando un tibble que contiene una variable de tipo caracter llamada "Diputados," la cual tiene 5 observaciones, y se está guardando en un objeto llamado "nombres"
nombres <- tribble(~Diputados, 
                   "Diputado Juan López",
                   "Diputado Pancho López",
                   "Diputada Liliana Juárez",
                   "Diputada Aracely Segura", 
                   "Diputade Ío Salvatore")

pat <- "Diputad" %R% WRD
#El patrón se guarda en un objeto llamado "patrón" y la indicación es: selecciona las palabras que inician con "Diputad" y después toma una letra. Cabe señalar que la pipa rebus "%R% funciona como un "y después"

str_view(nombres$Diputados, pattern = pat)
#Como la indicación fue seleccionar "Diputad" + una letra, podemos elegir tanto a los diputados, diputadas y diputades. Lo que facilita la selección dentro de una cadena de texto con varias observaciones

Ejemplo 2

edos <- c("Mexico", 
          "Ciudad de Mexico", 
          "Coahuila De Zaragoza", 
          "Veracruz De Ignacio De La Llave")
#Crea un vector que contenga 4 observaciones y guardalo en un objeto llamado "edos"

# Genere una regex en rebus que capture la primera palabra
pat <- START %R% one_or_more(WRD)
#El patrón selecciona la primera palabra
str_view(edos, pattern = pat)

Ejemplo 3

pat_2 <- exactly("Mexico")
#El patrón especifica que sólo debe ser "Mexico"
str_view(edos, pattern = pat_2)
#La instrucción es: del objeto "edos" captura sólo la palabra "Mexico." Como se está usando str_view sólo va a capturar una palabra, por ello no selecciona "Ciudad de Mexico"

#Ejercicio 02 - Repaso teórico

1. ¿Para que sirve la libreria stringr? Para manipular fácilmente cadenas de caracteres

2. ¿Qué son y para qué sirven las expresiones regulares? Son patrones de caracteres que permiten seleccionar datos dentro de una cadena de texto.

3. ¿Para qué sirve la librería rebus? Para construir expresiones regulares

4. ¿Para que sirve la función str_view() y str_view_all()? ¿Cuál es la diferencia entre ambas? str_view() - muestra el primer match en una cadena de texto con base en un patrón establecido

str_view_all()-muestra todos los matches en una cadena de texto

5. ¿Para que sirve la función str_detect() y str_detect_all()? ¿Cuál es la diferencia entre ambas? str_detect() detecta un patrón en un string, str_detect_all selecciona todos los matches dentro de una cadena de texto con base en un patrón

6. ¿Para que sirve la función str_replace() y str_replace_all()? ¿Cuál es la diferencia entre ambas? str_replace() reemplaza un patrón de caracteres por otro en una cadena de texto. Str_replace_all reemplaza todos los caracteres en una cadena de texto con base en un patrón

7. ¿Para que sirve la función str_remove() y str_remove_all()? ¿Cuál es la diferencia entre ambas? str_remove() elimina caracteres en una cadena de texto. Str_remove_all elimina todos los caracteres con base en un patrón

8. ¿Para que sirve la función str_extract() y str_extract_all()? ¿Cuál es la diferencia entre ambas? str_extract() - selecciona e imprime el primer patrón que encuentra en una cadena de texto. Str_extract_all imprime todos los patrones que encuentre

#Ejercicio 03

numeros <- c("(595)107-3344",
"(890)-123-4465",
"999 107 5243",
"999_989-0756")

#Para que fuera más sencillo limpiar el vector guardado en el objeto "numeros", decidí cambiarlo a tribble
numeros <- tribble(~num,
                   "(595)107-3344",
                   "(890)-123-4465",
                   "999 107 5243",
                   "999_989-0756") %>% 
  mutate(num = str_replace(num, "_", " "), #Como sólo un número tiene "_", entonces en esta instrucción se pide que reemplace "_" por un espacio.
         num = str_replace_all(num, "-", " "),  #Reemplaza todos los números donde haya "-" por un espacio
         num = str_replace_all(num, "\\(", ""), #Reemplaza todos los paréntesis, pero no pongas espacio
         num = str_replace(num, "\\)", " "), #Reemplaza el paréntesis y coloca un espacio
         num = str_replace(num, "  ", " ")) #Reemplaza los números que contengan doble espacio por uno solo

#Ejercicio 04

library(tidyverse)
library(rebus)
bd <- read_csv("https://raw.githubusercontent.com/JuveCampos/miniProyectos/master/elJokerWordCloud/db.csv")

2) Explique que contiene cada una de las columnas de la tabla 1.- La primera colunma - value - contiene el nombre, usuario, tuit y la hora de publicación 2.- La segund columna - nombre - es el nombre de la cuenta 3.- La tercera corresponde al nombre del usuario 4.- La cuarta contiene la fecha de publicación 5.- La quinta es cuántos retweets tuvo el tweet 6.- La séptima muestra el número de likes 7.- La octava es el texto del tweet 8.- La novena contiene los hashtags que el tuit utilizó 9.- La décima muestra las menciones que se realizaron en el tuit 10.- Muestra los nombres propios que aparecen en el tuit

3) Filtre todos los tweets que contiene la frase el bromas. Guardelos en un objeto llamado bromas e imprima en su documento solamente los primeros 15 renglones (Pista: use la función head()).

bromas <- bd %>% 
  mutate(bromas =
    str_detect(texto, pattern = "el bromas")) %>% 
filter(bromas == "TRUE")

4) Genere un objeto llamado bd_censurada en el cual elimine todos los tweets que tienen groserías. Usted defina qué palabras entiende por groserías.^

pat <- "puto"

bd_censurado <- bd  %>% 
  mutate(bd_censurado = str_detect(texto, pattern = pat)) %>% 
  filter(bd_censurado == FALSE)

5) En el mismo objeto, bd_censurada, elimine también todos los tweets que hablan de Guaidó.

pat <- "puto"
bd_censurado <- bd  %>% 
  mutate(bd_censurado = str_detect(texto, pattern = pat)) %>% 
  filter(bd_censurado == FALSE, 
         bd_censurado != "Guaidó")

6) Reemplace la palabra “Guasón” por la palabra “Joker” en todos los tweets.

bd %>% 
  mutate(texto = str_replace_all(texto, "Guasón", "Joker"))
## # A tibble: 1,028 x 12
##    value nombre usuario fecha retweets  like replies texto hashtags
##    <chr> <chr>  <chr>   <chr>    <dbl> <dbl>   <dbl> <chr> <chr>   
##  1 "The… The T… @thetr… 2019…        3     6      NA "\"S… #Joker,…
##  2 "Ami… Amir … @amira… 2019…       NA     1       1 "Aca… #Joker  
##  3 "Jai… Jaime  @black… 2019…       NA     2      NA "Est… #JokerM…
##  4 "Ame… Ameri… @AHS_M… 2019…        1    NA      NA "La … #AHS    
##  5 "Car… Carlo… @carlo… 2019…       NA    NA      NA "“Th… #JokerM…
##  6 "Red… RedLa… @RedLa… 2019…       NA     1      NA "#Jo… #Joker,…
##  7 "Við… Viðar… @Vitha… 2019…        1     1       1 "\uf… #Joker,…
##  8 "Mad… Madri… @madri… 2019…       NA    NA      NA "REP… <NA>    
##  9 "Los… Los m… @mexic… 2019…       NA     1       1 "Cua… #ElBrom…
## 10 "Mar… Marco… @Acapu… 2019…       NA    NA      NA "REP… <NA>    
## # … with 1,018 more rows, and 3 more variables: ctasMencionadas <chr>,
## #   nombres_propios <chr>, fecha2 <date>

7) ¿Cual fué el Tweet más retuiteado? ¿Cual el que tuvo más likes?

bd %>% 
  select(retweets,texto) %>% 
  na.omit() %>% 
  arrange(-retweets)
## # A tibble: 310 x 2
##    retweets texto                                                               
##       <dbl> <chr>                                                               
##  1      148 El Verdadero Origen del #Joker   ¿Conoces The Man Who Laughs? Él fu…
##  2      148 El Verdadero Origen del #Joker   ¿Conoces The Man Who Laughs? Él fu…
##  3      147 El Verdadero Origen del #Joker   ¿Conoces The Man Who Laughs? Él fu…
##  4       74 💎#Guason #JokerMovie imposible no pensar en heath ledger durante es…
##  5       65 EEUU  Joker  Italia  Burlone   México  Guasón  España El Bromas  Ci…
##  6       46 Ya sea en cómic, animación o Live Action, todas las encarnaciones d…
##  7       45 Ya sea en cómic, animación o Live Action, todas las encarnaciones d…
##  8       45 Ya sea en cómic, animación o Live Action, todas las encarnaciones d…
##  9       44 Ya fui a ver El Guasón y parece una película de héroes, pero al fin…
## 10       40 🐼  ⚖¿Qué obtienes cuándo mezclas a un enfermo mental y a una socied…
## # … with 300 more rows

El más retuiteado fue “El Verdadero Origen del #Joker ¿Conoces The Man Who Laughs? Él fue la inspiración…”

bd %>% 
  select(like,texto) %>% 
  na.omit() %>% 
  arrange(-like)
## # A tibble: 688 x 2
##     like texto                                                                  
##    <dbl> <chr>                                                                  
##  1   517 EEUU  Joker  Italia  Burlone   México  Guasón  España El Bromas  Ciuda…
##  2   499 A mi me gustó @jokermovie.  Mucho.  Mucho mucho.                       
##  3   455 El Verdadero Origen del #Joker   ¿Conoces The Man Who Laughs? Él fue l…
##  4   453 El Verdadero Origen del #Joker   ¿Conoces The Man Who Laughs? Él fue l…
##  5   453 El Verdadero Origen del #Joker   ¿Conoces The Man Who Laughs? Él fue l…
##  6   408 💎#Guason #JokerMovie imposible no pensar en heath ledger durante esta …
##  7   304 Ya fui a ver El Guasón y parece una película de héroes, pero al final …
##  8   275 Totalmente en Shock con el Guason. Imposible no querer abrazarlo... Jo…
##  9   243 SIN SPOILERS ¡YA VIMOS #JOKER Y QUEDAMOS IMPACTADOS!  No te pierdas nu…
## 10   176 Ya sea en cómic, animación o Live Action, todas las encarnaciones del …
## # … with 678 more rows

El que tuvo más likes fue “EEUU Joker Italia Burlone México Guasón España El Broma…”

8) ¿Quienes fueron los usuarios que tuitearon más veces durante el periodo de obtención de la información? Genere una gráfica de barras donde el eje “y” sea el nombre de usuario y la altura de las barras sea el número de tweets escritos.

bd %>% 
  select(usuario) %>% 
  count(usuario) %>% 
  arrange(-n)
## # A tibble: 855 x 2
##    usuario              n
##    <chr>            <int>
##  1 @DCcomicsMX         14
##  2 @FormerlyKnow       10
##  3 @guillemancandy      8
##  4 @elespectador        6
##  5 @VerGuason_2019      6
##  6 @altapeli            5
##  7 @JMRivaPalacio       5
##  8 @danitafashion       4
##  9 @edwin_digital       4
## 10 @InconformeSiem1     4
## # … with 845 more rows

Los 3 usuarios que tuitearon más veces fueron @DCcomicsMX, @FormerlyKnow, @guillemancandy

bd %>% 
  select(usuario) %>% 
  count(usuario) %>% 
  arrange(-n) %>% 
  head(8) %>% 
  ggplot(aes(usuario, 
             n,
             fill = usuario)) +
  geom_col() +
  coord_flip() +
  labs(title = "Usuarios que más tuitearon", 
       y = "Número de tuits") +
  theme(legend.position = "",
        plot.title = element_text(hjust = .5))