TAREA 4: DESCUBRIENDO PATRONES TEMPORALES Y ESPACIALES EN LOS DATOS

En primer lugar cargamos las librerias con las que trabajamos habitualmente, asimismo incorporamos lubridate, ya que la utilizaremos para la presente tarea.

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.0     ✓ purrr   0.3.3
## ✓ tibble  2.1.3     ✓ dplyr   0.8.5
## ✓ tidyr   1.0.2     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(sf)
## Linking to GEOS 3.7.2, GDAL 2.4.2, PROJ 5.2.0
library(osmdata)
## Data (c) OpenStreetMap contributors, ODbL 1.0. https://www.openstreetmap.org/copyright
library(leaflet)
library(rtweet)
## 
## Attaching package: 'rtweet'
## The following object is masked from 'package:purrr':
## 
##     flatten
library(ggmap)
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
library(data.table)
## 
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last
## The following object is masked from 'package:purrr':
## 
##     transpose
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:data.table':
## 
##     hour, isoweek, mday, minute, month, quarter, second, wday, week,
##     yday, year
## The following objects are masked from 'package:dplyr':
## 
##     intersect, setdiff, union
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

Continuamos cargando los datos del Area Metropolitana de Buenos Aires y seleccionamos una muestra del dataset, ya que el mismo contiene una gran cantidad de datos y será muy complejo trabajar con todos ellos.

tweets_rmba <- fread("tweets_rmba.csv",
encoding = "UTF-8",
header=TRUE,
sep=",",
showProgress=TRUE,
data.table=FALSE)

Seleccionamos una muestra del 5%:

tweets_rmba <- sample_frac(tweets_rmba, 0.05)

Observamos los datos georeferenciados:

nrow(tweets_rmba)
## [1] 43187

Graficamos como soliciataba la TAREA 3

MAPAS ESTÁTICOS:

Primero delimitamos el área con el que vamos a trabajar, utilizando el comando make_bbox():

bbox_Twiter <- make_bbox(lon = tweets_rmba$X, lat = tweets_rmba$Y)

bbox_Twiter
##      left    bottom     right       top 
## -59.37511 -35.33271 -57.72259 -33.90165

Con estas coordenadas descargaremos nuestro mapa de Stamen Design:

mapa_base <- get_stamenmap(bbox_Twiter, zoom = 9)
## Source : http://tile.stamen.com/terrain/9/171/307.png
## Source : http://tile.stamen.com/terrain/9/172/307.png
## Source : http://tile.stamen.com/terrain/9/173/307.png
## Source : http://tile.stamen.com/terrain/9/171/308.png
## Source : http://tile.stamen.com/terrain/9/172/308.png
## Source : http://tile.stamen.com/terrain/9/173/308.png
## Source : http://tile.stamen.com/terrain/9/171/309.png
## Source : http://tile.stamen.com/terrain/9/172/309.png
## Source : http://tile.stamen.com/terrain/9/173/309.png
ggmap(mapa_base)

Graficamos incorporando capas de datos que muestren la posición de los tweets y su cantidad de seguidores:

mapa_final_tweets<-get_stamenmap(bbox_Twiter,maptype="toner-lite",zoom = 9)
## Source : http://tile.stamen.com/toner-lite/9/171/307.png
## Source : http://tile.stamen.com/toner-lite/9/172/307.png
## Source : http://tile.stamen.com/toner-lite/9/173/307.png
## Source : http://tile.stamen.com/toner-lite/9/171/308.png
## Source : http://tile.stamen.com/toner-lite/9/172/308.png
## Source : http://tile.stamen.com/toner-lite/9/173/308.png
## Source : http://tile.stamen.com/toner-lite/9/171/309.png
## Source : http://tile.stamen.com/toner-lite/9/172/309.png
## Source : http://tile.stamen.com/toner-lite/9/173/309.png
options(scipen=20)

ggmap(mapa_final_tweets)+
  geom_jitter(data=tweets_rmba,aes(x=X,y=Y,color=user_followers),size=0.2, alpha=.2)+
  scale_color_distiller(palette="Spectral")+
  labs(title="Tweets en la Region Metropolitana de Bs As",
       subtitle="Tweets segun cantidad de seguidores",
       caption="Fuente: Información de Twitter",
       color="Seguidores",
       x = "longitud",
       y = "latitud")

MAPAS INTERACTIVOS:

Trabajaremos con leaflet(), incorporando capas de datos que muestren la posición de los tweets, con su texto y la canidad de seguidores de cada usurario lo lograremos selecionado una paleta de color. Lo lograremos selecionado una paleta de color.

En primer lugar transformamos el mapa en proyeccion mercator:

paleta <- colorNumeric(palette = "plasma", domain = tweets_rmba$user_followers)
mapa_final_tweets_interactivo <- tweets_rmba %>% 
    filter(!is.na(Y), !is.na(X)) %>% 
    st_as_sf(coords = c("X", "Y"), crs = 4326)
paleta<-colorNumeric(palette="plasma",domain=mapa_final_tweets_interactivo$user_followers)
leaflet(mapa_final_tweets_interactivo) %>% 
    addTiles() %>% 
    addCircleMarkers(popup = ~text,
                     color = ~paleta(user_followers)) %>% 
    addLegend(title = "Followers", pal = paleta, values = ~user_followers)

En el mapa se observa la posición de cada usuario de twitter y al hacer click en cada uno de ellos se puede ver en el pop-up, la leyenda con su texto. La cantidad de seguidores la distinguimos por la escala de colores. Se distingue sobre todo el mismo color violeta/azulado, pero más concentrado donde hay una mayor cantidad de usuarios y más translúcido donde hay menos usuarios.

Paso I: analizamos con summary() y head() el contenido del dataset de los Tweets Área Metropolitana de Buenos Aires:

summary(tweets_rmba)
##        X                Y                id                     
##  Min.   :-59.30   Min.   :-35.27   Min.   : 918249704504000000  
##  1st Qu.:-58.52   1st Qu.:-34.65   1st Qu.: 933756065952000000  
##  Median :-58.41   Median :-34.61   Median : 952914715416000000  
##  Mean   :-58.45   Mean   :-34.62   Mean   : 954811265468000000  
##  3rd Qu.:-58.37   3rd Qu.:-34.58   3rd Qu.: 975191205599000064  
##  Max.   :-57.80   Max.   :-33.97   Max.   :1002599460850000000  
##                                                                 
##  in_reply_to_status_id         in_reply_to_user_id              text          
##  Min.   : 892538601548000000   Min.   :             33423   Length:43187      
##  1st Qu.: 927624353382000000   1st Qu.:         424770778   Class :character  
##  Median : 944060691124000000   Median :        1180083066   Mode  :character  
##  Mean   : 949643011696000000   Mean   : 72338096751400000                     
##  3rd Qu.: 969043613126000000   3rd Qu.:        1180083066                     
##  Max.   :1002382263550000000   Max.   :980763090340999936                     
##  NA's   :41564                 NA's   :41179                                  
##    created              lang              source           user_name        
##  Length:43187       Length:43187       Length:43187       Length:43187      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##     user_id                    user_created       user_description  
##  Min.   :               1059   Length:43187       Length:43187      
##  1st Qu.:          176122101   Class :character   Class :character  
##  Median :          489016475   Mode  :character   Mode  :character  
##  Mean   :  52556510044400000                                        
##  3rd Qu.:         1385132350                                        
##  Max.   :1001282035250000000                                        
##                                                                     
##  user_location      user_followers    user_followed   
##  Length:43187       Min.   :      0   Min.   :     0  
##  Class :character   1st Qu.:    197   1st Qu.:    85  
##  Mode  :character   Median :    496   Median :  1219  
##                     Mean   :   8448   Mean   :  5600  
##                     3rd Qu.:   1400   3rd Qu.:  6018  
##                     Max.   :2437140   Max.   :541611  
## 
head(tweets_rmba)
##           X         Y                 id in_reply_to_status_id
## 1 -58.37350 -34.60850 928577980846169984                    NA
## 2 -58.54917 -34.53528 983849672317047040                    NA
## 3 -58.38170 -34.60330 933295606692332032                    NA
## 4 -58.45000 -34.55000 927220234523741952                    NA
## 5 -58.37992 -34.59693 992792253612674944                    NA
## 6 -58.38251 -34.59043 985664431932748032                    NA
##   in_reply_to_user_id
## 1                  NA
## 2                  NA
## 3                  NA
## 4                  NA
## 5                  NA
## 6                  NA
##                                                                                                                                       text
## 1 #MeSobra acaba de convertirse en TT ocupando la 3ª posición en Argentina. Más en https://t.co/Zdrt4tAWye #trndnl https://t.co/QynP2XpBMO
## 2      Temperatura: 27,8°C S.Térmica 27,8°C PR 14,1°C-Viento: 5,0 km/h NNE Ráfagas 13,3 km/h-Presion: 1008,5 hPa-Lluvia:0,0 mm-Humedad:43%
## 3                                                                           #GucciGang \U0001f3a9 en Villa Urquiza https://t.co/Q2i6SluXYp
## 4                                          #QuienNoMeConoceDiríaQueFueDestetadaAntesDeTiempo \U0001f605 en Núñez,… https://t.co/JAL8fPHkuv
## 5                                     9° Edicion de ""Expo Bridal &amp; My Sweet 15"" \nPasada de isabelquiintana… https://t.co/V0mrf2gXlp
## 6                                                              Este estava bom. em Four Seasons Hotel Buenos Aires https://t.co/mH4kAtdMtA
##                  created lang                    source      user_name
## 1 2017/11/09 11:00:17+00   es Es Tendencia en Argentina  trendinaliaAR
## 2 2018/04/10 23:30:15+00   es        Sandaysoft Cumulus climaballester
## 3 2017/11/22 11:26:27+00   es                 Instagram      mativerge
## 4 2017/11/05 17:05:05+00  und                 Instagram aracelycasella
## 5 2018/05/05 15:44:53+00   es                 Instagram   RAULMARTOREL
## 6 2018/04/15 23:41:27+00   pt                 Instagram   antonioredes
##      user_id           user_created
## 1 1180083066 2013/02/14 19:23:34+00
## 2  479175319 2012/01/31 02:59:24+00
## 3  415753646 2011/11/18 19:26:50+00
## 4 2869677967 2014/10/21 22:50:15+00
## 5   88510673 2009/11/08 21:12:10+00
## 6 1626841080 2013/07/28 02:52:03+00
##                                                                                                                                                                                   user_description
## 1                                                                                                      Información sobre los Temas del Momento de la geografía argentina #TrendingTopics — #trndnl
## 2                                 Soy observador meteorológico. E.M.A de V. Ballester. Zona Norte GBA reportes automáticos cada 30min. Visiten mi blog de fotos y aviación https://t.co/YyHWLAzWha
## 3                                                                                                                                       Productor Integral de Televisión. CARP. Bonheur et Succès.
## 4                                                                                                                                                                                                 
## 5 RAULMARTOREL@GMAIL.COM  \U0001f454\U0001f320\U0001f3b6 \U0001f3a9 ITALO-ARGENTINO \nACTOR MODELO AUTOR DIRECTOR COREOGRAFO  CREADOR 1°ER BALLET INFANTIL TV.  COMPARSA SAMBALEGUAY @raulmartorel
## 6                                Trabalho com redes de proteção para janelas , sacadas, varandas, gatos, idosos,estruturas ,          \nFone: (11)  98391.0505 tim / 5524.7412  / 99318.2400 claro
##                    user_location user_followers user_followed
## 1                      Argentina          60938            11
## 2  Ciudad del Libertador General           4305         23543
## 3       Buenos Aires, Argentina.            128           327
## 4                                            16             8
## 5 C.A.B.A. BS.AS. RCA. ARGENTINA           4560          5156
## 6           São Paulo - Zona Sul            173           312

Verificamos que contiene coordenadas “x” e “y”, asi como fecha y hora de los tweets cargados. Las fechas van desde enero de 2007 hasta mayo 2018. Tambien observamos que la clase de dato de columna de la fecha, llamada created es un character.

Convertimos el campo fecha del dataset de tweets_rmba, nombrado como “created”, con el comando ymd_hms():

tweets_rmba <- tweets_rmba %>% 
  mutate(created = ymd_hms(created))
head(tweets_rmba)
##           X         Y                 id in_reply_to_status_id
## 1 -58.37350 -34.60850 928577980846169984                    NA
## 2 -58.54917 -34.53528 983849672317047040                    NA
## 3 -58.38170 -34.60330 933295606692332032                    NA
## 4 -58.45000 -34.55000 927220234523741952                    NA
## 5 -58.37992 -34.59693 992792253612674944                    NA
## 6 -58.38251 -34.59043 985664431932748032                    NA
##   in_reply_to_user_id
## 1                  NA
## 2                  NA
## 3                  NA
## 4                  NA
## 5                  NA
## 6                  NA
##                                                                                                                                       text
## 1 #MeSobra acaba de convertirse en TT ocupando la 3ª posición en Argentina. Más en https://t.co/Zdrt4tAWye #trndnl https://t.co/QynP2XpBMO
## 2      Temperatura: 27,8°C S.Térmica 27,8°C PR 14,1°C-Viento: 5,0 km/h NNE Ráfagas 13,3 km/h-Presion: 1008,5 hPa-Lluvia:0,0 mm-Humedad:43%
## 3                                                                           #GucciGang \U0001f3a9 en Villa Urquiza https://t.co/Q2i6SluXYp
## 4                                          #QuienNoMeConoceDiríaQueFueDestetadaAntesDeTiempo \U0001f605 en Núñez,… https://t.co/JAL8fPHkuv
## 5                                     9° Edicion de ""Expo Bridal &amp; My Sweet 15"" \nPasada de isabelquiintana… https://t.co/V0mrf2gXlp
## 6                                                              Este estava bom. em Four Seasons Hotel Buenos Aires https://t.co/mH4kAtdMtA
##               created lang                    source      user_name    user_id
## 1 2017-11-09 11:00:17   es Es Tendencia en Argentina  trendinaliaAR 1180083066
## 2 2018-04-10 23:30:15   es        Sandaysoft Cumulus climaballester  479175319
## 3 2017-11-22 11:26:27   es                 Instagram      mativerge  415753646
## 4 2017-11-05 17:05:05  und                 Instagram aracelycasella 2869677967
## 5 2018-05-05 15:44:53   es                 Instagram   RAULMARTOREL   88510673
## 6 2018-04-15 23:41:27   pt                 Instagram   antonioredes 1626841080
##             user_created
## 1 2013/02/14 19:23:34+00
## 2 2012/01/31 02:59:24+00
## 3 2011/11/18 19:26:50+00
## 4 2014/10/21 22:50:15+00
## 5 2009/11/08 21:12:10+00
## 6 2013/07/28 02:52:03+00
##                                                                                                                                                                                   user_description
## 1                                                                                                      Información sobre los Temas del Momento de la geografía argentina #TrendingTopics — #trndnl
## 2                                 Soy observador meteorológico. E.M.A de V. Ballester. Zona Norte GBA reportes automáticos cada 30min. Visiten mi blog de fotos y aviación https://t.co/YyHWLAzWha
## 3                                                                                                                                       Productor Integral de Televisión. CARP. Bonheur et Succès.
## 4                                                                                                                                                                                                 
## 5 RAULMARTOREL@GMAIL.COM  \U0001f454\U0001f320\U0001f3b6 \U0001f3a9 ITALO-ARGENTINO \nACTOR MODELO AUTOR DIRECTOR COREOGRAFO  CREADOR 1°ER BALLET INFANTIL TV.  COMPARSA SAMBALEGUAY @raulmartorel
## 6                                Trabalho com redes de proteção para janelas , sacadas, varandas, gatos, idosos,estruturas ,          \nFone: (11)  98391.0505 tim / 5524.7412  / 99318.2400 claro
##                    user_location user_followers user_followed
## 1                      Argentina          60938            11
## 2  Ciudad del Libertador General           4305         23543
## 3       Buenos Aires, Argentina.            128           327
## 4                                            16             8
## 5 C.A.B.A. BS.AS. RCA. ARGENTINA           4560          5156
## 6           São Paulo - Zona Sul            173           312

Paso II: Analizamos la temporalidad de los tweets. Primero comparamos el uso de twitter en la RMBA entre Octubre de 2017 y Mayo 2018:

options(scipen = 20) 

ggplot(tweets_rmba) + 
  geom_bar(aes(x = year(created))) + 
  labs(title = "Cantidad de tweets anualmente", 
       subtitle = "Region Metropolitana de Buenos Aires ", 
       caption="Fuente: Información de Twitter")

Como el dataset solo incluye datos de algunos meses de 2017 y algunos meses de 2018 los analizamos independientemente:

2017:

tweets_rmba %>% 
  filter(year(created) == 2017) %>% 
  ggplot() + 
  geom_bar(aes(x = month(created, label = TRUE ))) + 
  labs(title = "Cantidad de tweets por mes", 
       subtitle = "Region Metropolitana de Buenos Aires, Octubre a Diciembre 2017", 
       caption="Fuente: Información de Twitter")

2018:

tweets_rmba %>% 
  filter(year(created) == 2018) %>% 
  ggplot() + 
  geom_bar(aes(x = month(created, label = TRUE))) + 
  labs(title = "Cantidad de tweets por mes", 
       subtitle = "Region Metropolitana de Buenos Aires, enero a mayo 2018", 
       caption="Fuente: Información de Twitter")

Seleccionamos el año 2017 que en promedio tiene mayor cantidad de tweets, aunque tenga solo datos de 3 meses, y analizamos que días de la semana hay mayor cantidad de tweets.

tweets_rmba %>% 
  filter(year(created) == 2017) %>% ggplot() + 
  geom_bar(aes(x = wday(created, label = TRUE))) + 
  labs(title = "Distribucion de tweets semanalmente", 
       subtitle = "Region Metropolitana de Buenos Aires, Octubre a Diciembre 2017", 
       caption="Fuente: Información de Twitter")

Observamos que la cantidad de tweets tiene un claro aumento el fin de semana, sobre todo el domingo, luego comienza una curva descendente hasta mediados de la semana que comienza a incrementarse nuevamente.

Analizamos la distribución espacial de los datos, de que lugares provienen la mayor cantidad de tweets, en el año 2017:

tweets_rmba %>% 
  filter(year(created) == 2017) %>% 
  count(user_location) %>% top_n(5) %>% 
  arrange(desc(n))
## Selecting by n
## # A tibble: 5 x 2
##   user_location                        n
##   <chr>                            <int>
## 1 ""                                3143
## 2 "Argentina"                       2751
## 3 "Buenos Aires, Argentina"         2164
## 4 "Ciudad Autónoma de Buenos Aire"   761
## 5 "Buenos Aires"                     694

Observamos que es complejo de analizar, ya que probablemente existan datos que surjan de los mismos lugares, aunque parecieran que se manifestaran de lugares distintos, como por ejemlpo: Buenos Aires, Argentina y Buenos Aires.

De todos modos guardamos la seleccion de datos, utilizando el comando pull():

ubicacion_frecuente <- tweets_rmba %>% 
  filter(year(created) == 2017) %>% 
  count(user_location) %>% top_n(5) %>% 
  pull(user_location)
## Selecting by n

Realizamos la misma operación con el origen de los tweet, no la localizacion sino el source:

tweets_rmba %>% 
  filter(year(created) == 2017) %>% 
  count(source) %>% 
  top_n(5) %>% 
  arrange(desc(n))
## Selecting by n
## # A tibble: 5 x 2
##   source                        n
##   <chr>                     <int>
## 1 Instagram                 14396
## 2 Es Tendencia en Argentina  1492
## 3 Twitter for Android         878
## 4 Foursquare                  647
## 5 Sandaysoft Cumulus          535

Podemos observar que la mayoría de los tweets tienen su origen en Instagram.

head(tweets_rmba)
##           X         Y                 id in_reply_to_status_id
## 1 -58.37350 -34.60850 928577980846169984                    NA
## 2 -58.54917 -34.53528 983849672317047040                    NA
## 3 -58.38170 -34.60330 933295606692332032                    NA
## 4 -58.45000 -34.55000 927220234523741952                    NA
## 5 -58.37992 -34.59693 992792253612674944                    NA
## 6 -58.38251 -34.59043 985664431932748032                    NA
##   in_reply_to_user_id
## 1                  NA
## 2                  NA
## 3                  NA
## 4                  NA
## 5                  NA
## 6                  NA
##                                                                                                                                       text
## 1 #MeSobra acaba de convertirse en TT ocupando la 3ª posición en Argentina. Más en https://t.co/Zdrt4tAWye #trndnl https://t.co/QynP2XpBMO
## 2      Temperatura: 27,8°C S.Térmica 27,8°C PR 14,1°C-Viento: 5,0 km/h NNE Ráfagas 13,3 km/h-Presion: 1008,5 hPa-Lluvia:0,0 mm-Humedad:43%
## 3                                                                           #GucciGang \U0001f3a9 en Villa Urquiza https://t.co/Q2i6SluXYp
## 4                                          #QuienNoMeConoceDiríaQueFueDestetadaAntesDeTiempo \U0001f605 en Núñez,… https://t.co/JAL8fPHkuv
## 5                                     9° Edicion de ""Expo Bridal &amp; My Sweet 15"" \nPasada de isabelquiintana… https://t.co/V0mrf2gXlp
## 6                                                              Este estava bom. em Four Seasons Hotel Buenos Aires https://t.co/mH4kAtdMtA
##               created lang                    source      user_name    user_id
## 1 2017-11-09 11:00:17   es Es Tendencia en Argentina  trendinaliaAR 1180083066
## 2 2018-04-10 23:30:15   es        Sandaysoft Cumulus climaballester  479175319
## 3 2017-11-22 11:26:27   es                 Instagram      mativerge  415753646
## 4 2017-11-05 17:05:05  und                 Instagram aracelycasella 2869677967
## 5 2018-05-05 15:44:53   es                 Instagram   RAULMARTOREL   88510673
## 6 2018-04-15 23:41:27   pt                 Instagram   antonioredes 1626841080
##             user_created
## 1 2013/02/14 19:23:34+00
## 2 2012/01/31 02:59:24+00
## 3 2011/11/18 19:26:50+00
## 4 2014/10/21 22:50:15+00
## 5 2009/11/08 21:12:10+00
## 6 2013/07/28 02:52:03+00
##                                                                                                                                                                                   user_description
## 1                                                                                                      Información sobre los Temas del Momento de la geografía argentina #TrendingTopics — #trndnl
## 2                                 Soy observador meteorológico. E.M.A de V. Ballester. Zona Norte GBA reportes automáticos cada 30min. Visiten mi blog de fotos y aviación https://t.co/YyHWLAzWha
## 3                                                                                                                                       Productor Integral de Televisión. CARP. Bonheur et Succès.
## 4                                                                                                                                                                                                 
## 5 RAULMARTOREL@GMAIL.COM  \U0001f454\U0001f320\U0001f3b6 \U0001f3a9 ITALO-ARGENTINO \nACTOR MODELO AUTOR DIRECTOR COREOGRAFO  CREADOR 1°ER BALLET INFANTIL TV.  COMPARSA SAMBALEGUAY @raulmartorel
## 6                                Trabalho com redes de proteção para janelas , sacadas, varandas, gatos, idosos,estruturas ,          \nFone: (11)  98391.0505 tim / 5524.7412  / 99318.2400 claro
##                    user_location user_followers user_followed
## 1                      Argentina          60938            11
## 2  Ciudad del Libertador General           4305         23543
## 3       Buenos Aires, Argentina.            128           327
## 4                                            16             8
## 5 C.A.B.A. BS.AS. RCA. ARGENTINA           4560          5156
## 6           São Paulo - Zona Sul            173           312

Guardamos esta nueva seleccion para luego graficarla mediante un grafico de barras apilado, utilizando el coomando pull():

Origen_frecuente <- tweets_rmba %>% 
  filter(year(created) == 2017) %>% 
  count(source) %>% 
  top_n(5) %>% 
  pull(source)
## Selecting by n
tweets_rmba %>% 
  filter(year(created) == 2017 , source %in% Origen_frecuente ) %>% 
  ggplot() + geom_bar(aes(x = month(created, label = TRUE), fill = source)) + 
  labs(title = "Distribucion de tweets de acuerdo a su origen", 
       subtitle = "Region Metropolitana de Buenos Aires, 2017", 
       caption = "Fuente: Información de Twitter")

Ahora graficamos mediante un grafico de lineas, haciendo el conteo por su origen y por dias de la semana

conteo <- tweets_rmba %>% 
  filter(year(created) == 2017, source %in% Origen_frecuente) %>% 
  count(source, diasemana = wday(created, label = TRUE))
ggplot(conteo) + 
  geom_line(aes(x = diasemana, y = n, group = source, color = source)) + 
  labs(title = "Distribucion de tweets a lo largo de la semana, de acuerdo a su origen", 
       subtitle = "Region Metropolitana de Buenos Aires, octubre a diciembre 2017", 
       caption = "Fuente: Información de Twitter",
       x = "días semana",
       y = "cantindad tweets")

Claramente el fin de semana se genera el mayor porcentaje de tweets de la semana, siendo su origen principal Instagram.

Paso III: Distribución espacial de los tweets

Paso III-A: En primer lugar debemos visualizar nuestro mapa base:

tweets_rmba <- tweets_rmba %>% 
  filter(Y <0, X <0) 

bbox <- c(min(tweets_rmba$X, na.rm = TRUE), min(tweets_rmba$Y, na.rm = TRUE), max(tweets_rmba$X, na.rm = TRUE), max(tweets_rmba$Y, na.rm = TRUE)) 

RMBA <- get_stamenmap(bbox = bbox, maptype = "toner-lite")
## Source : http://tile.stamen.com/toner-lite/10/343/614.png
## Source : http://tile.stamen.com/toner-lite/10/344/614.png
## Source : http://tile.stamen.com/toner-lite/10/345/614.png
## Source : http://tile.stamen.com/toner-lite/10/346/614.png
## Source : http://tile.stamen.com/toner-lite/10/347/614.png
## Source : http://tile.stamen.com/toner-lite/10/343/615.png
## Source : http://tile.stamen.com/toner-lite/10/344/615.png
## Source : http://tile.stamen.com/toner-lite/10/345/615.png
## Source : http://tile.stamen.com/toner-lite/10/346/615.png
## Source : http://tile.stamen.com/toner-lite/10/347/615.png
## Source : http://tile.stamen.com/toner-lite/10/343/616.png
## Source : http://tile.stamen.com/toner-lite/10/344/616.png
## Source : http://tile.stamen.com/toner-lite/10/345/616.png
## Source : http://tile.stamen.com/toner-lite/10/346/616.png
## Source : http://tile.stamen.com/toner-lite/10/347/616.png
## Source : http://tile.stamen.com/toner-lite/10/343/617.png
## Source : http://tile.stamen.com/toner-lite/10/344/617.png
## Source : http://tile.stamen.com/toner-lite/10/345/617.png
## Source : http://tile.stamen.com/toner-lite/10/346/617.png
## Source : http://tile.stamen.com/toner-lite/10/347/617.png
## Source : http://tile.stamen.com/toner-lite/10/343/618.png
## Source : http://tile.stamen.com/toner-lite/10/344/618.png
## Source : http://tile.stamen.com/toner-lite/10/345/618.png
## Source : http://tile.stamen.com/toner-lite/10/346/618.png
## Source : http://tile.stamen.com/toner-lite/10/347/618.png
## Source : http://tile.stamen.com/toner-lite/10/343/619.png
## Source : http://tile.stamen.com/toner-lite/10/344/619.png
## Source : http://tile.stamen.com/toner-lite/10/345/619.png
## Source : http://tile.stamen.com/toner-lite/10/346/619.png
## Source : http://tile.stamen.com/toner-lite/10/347/619.png
ggmap(RMBA)

Ahora graficamos sobre este un mapa de densidad que muestra donde estan concentradas, dentro de la RMBA, la mayor cantidad de observaciones, tweets:

ggmap(RMBA) + 
  geom_bin2d(data = tweets_rmba, aes(x = X, y = Y), bins = 100) + scale_fill_viridis_c() + 
  labs(title = "Concentracion de tweets", 
       subtitle = "Region Metropolitana de Buenos Aires", 
       caption = "Fuente: Información de Twitter",
       x = "longitud",
       y = "latitud")
## Warning: Removed 1 rows containing missing values (geom_tile).

Se observa a en la mayor cantidad de superficie de toda la Región del Área Metropolitana de Buenos Aires una densidad uniforme de tweets, siendo más dispersa su concentración a medida que nos alejamos de la Ciudad de Buenos Aires o de la Ciudad de La Plata. Asimismo, si se observa con más detenimiento se puede ver que en en Área Central de la Ciudad de Buenos Aires, aumenta la densidad de los tweets, esto se puede deducir por la mayor concentración de actividades y servicios brindados.

Paso III-B: Ahora realizamos un gráfico facetado, que mostrará la concentracion de las observaciones de acuerdo a su origen:

ggmap(RMBA) +
  geom_density2d(data = filter(tweets_rmba, source %in% Origen_frecuente), aes(x = X, y = Y, color = stat(level))) +
  scale_color_viridis_c() +
  facet_wrap(~source, nrow = 1) + 
  labs (title = "Concentracion de tweets en relacion a su origen",
        subtitle = "Region Metropolitana de Buenos Aires",
        caption = "Fuente: Información de Twitter",
        x = "longitud",
        y = "latitud")
## Warning: Computation failed in `stat_density2d()`:
## bandwidths must be strictly positive

Analizamos la densidad de tweets como se distribuyen según su origen y observamos que Instagram tiene una mayor concentración manifestada por las líneas topográficas más juntas y con colores que se alejan del violeta. Foursquare y Sandaysoft Cumulus poseen una concentración de líneas topográficas pero poca cantidad en la superficie del mapa, su aparición es puntual. Por otra parte Android toma una gran cantidad del mapa a través de sus líneas topográficas, pero con poca cantidad de densidad.

Paso IV: Realizamos un facetado por día, comprando dos de los origenes de los diferentes de tweets Instagram, que contiene mayor porcentaje de orígenes de Tweets y Android, en representación de los restantes orígenes de Tweets:

tweets_rmba <- tweets_rmba %>%
  mutate(dia_semana = wday(created, label = TRUE))

ggmap(RMBA) +
  geom_point(data = filter(tweets_rmba, source %in% c("Instagram", "Twitter for Android")), aes(x = X, y = Y, color = source), alpha = .1, size = .2) +
  facet_wrap(~dia_semana, nrow = 2) +
  labs(title = "Comparacion de tweets segun su origen",
       subtitle = "Por día, en RMBA",
       caption = "Fuente: Información de Twitter",
       x = "longitud",
       y = "latitud")

Utilizamos alpha .1 para poder observar el contraste entre los tweets con orígen de Instagram y Android, es nostable como se destacan los tweets de la primera fuente y la segunda fuente queda practicamente imperceptible. Asimismo, al emplear alpha .1 nos permite identificar la concentración de tweets e intentar disntinguir la distribución de los mismos, aunque no sea tan claro como en el gráfico de líneas, del Paso II. Con esfuerzo distinguimos, una mayor mancha, mayor concentración de tweets los días domingo, sábdado y lunes y una menor concentración de tweets los días martes, miércoles, jueves y viernes.

Ahora intentamos hacer un facetado por hora, los dias dias del fin de semana para ver en que momentos se generan la mayor cantidad de tweets o si es indistinto. Comenzamos utilizando el comando mutate(), para separar la columna de la hora de la de la fecha, generando solo la hora base, sin minutos ni segundos:

tweets_rmba <- tweets_rmba %>%
mutate(hora_base = hour(ymd_hms(created)))

Realizamos un head() para verificar que se haya generado la columna de la hora correctamente:

head(tweets_rmba)
##           X         Y                 id in_reply_to_status_id
## 1 -58.37350 -34.60850 928577980846169984                    NA
## 2 -58.54917 -34.53528 983849672317047040                    NA
## 3 -58.38170 -34.60330 933295606692332032                    NA
## 4 -58.45000 -34.55000 927220234523741952                    NA
## 5 -58.37992 -34.59693 992792253612674944                    NA
## 6 -58.38251 -34.59043 985664431932748032                    NA
##   in_reply_to_user_id
## 1                  NA
## 2                  NA
## 3                  NA
## 4                  NA
## 5                  NA
## 6                  NA
##                                                                                                                                       text
## 1 #MeSobra acaba de convertirse en TT ocupando la 3ª posición en Argentina. Más en https://t.co/Zdrt4tAWye #trndnl https://t.co/QynP2XpBMO
## 2      Temperatura: 27,8°C S.Térmica 27,8°C PR 14,1°C-Viento: 5,0 km/h NNE Ráfagas 13,3 km/h-Presion: 1008,5 hPa-Lluvia:0,0 mm-Humedad:43%
## 3                                                                           #GucciGang \U0001f3a9 en Villa Urquiza https://t.co/Q2i6SluXYp
## 4                                          #QuienNoMeConoceDiríaQueFueDestetadaAntesDeTiempo \U0001f605 en Núñez,… https://t.co/JAL8fPHkuv
## 5                                     9° Edicion de ""Expo Bridal &amp; My Sweet 15"" \nPasada de isabelquiintana… https://t.co/V0mrf2gXlp
## 6                                                              Este estava bom. em Four Seasons Hotel Buenos Aires https://t.co/mH4kAtdMtA
##               created lang                    source      user_name    user_id
## 1 2017-11-09 11:00:17   es Es Tendencia en Argentina  trendinaliaAR 1180083066
## 2 2018-04-10 23:30:15   es        Sandaysoft Cumulus climaballester  479175319
## 3 2017-11-22 11:26:27   es                 Instagram      mativerge  415753646
## 4 2017-11-05 17:05:05  und                 Instagram aracelycasella 2869677967
## 5 2018-05-05 15:44:53   es                 Instagram   RAULMARTOREL   88510673
## 6 2018-04-15 23:41:27   pt                 Instagram   antonioredes 1626841080
##             user_created
## 1 2013/02/14 19:23:34+00
## 2 2012/01/31 02:59:24+00
## 3 2011/11/18 19:26:50+00
## 4 2014/10/21 22:50:15+00
## 5 2009/11/08 21:12:10+00
## 6 2013/07/28 02:52:03+00
##                                                                                                                                                                                   user_description
## 1                                                                                                      Información sobre los Temas del Momento de la geografía argentina #TrendingTopics — #trndnl
## 2                                 Soy observador meteorológico. E.M.A de V. Ballester. Zona Norte GBA reportes automáticos cada 30min. Visiten mi blog de fotos y aviación https://t.co/YyHWLAzWha
## 3                                                                                                                                       Productor Integral de Televisión. CARP. Bonheur et Succès.
## 4                                                                                                                                                                                                 
## 5 RAULMARTOREL@GMAIL.COM  \U0001f454\U0001f320\U0001f3b6 \U0001f3a9 ITALO-ARGENTINO \nACTOR MODELO AUTOR DIRECTOR COREOGRAFO  CREADOR 1°ER BALLET INFANTIL TV.  COMPARSA SAMBALEGUAY @raulmartorel
## 6                                Trabalho com redes de proteção para janelas , sacadas, varandas, gatos, idosos,estruturas ,          \nFone: (11)  98391.0505 tim / 5524.7412  / 99318.2400 claro
##                    user_location user_followers user_followed dia_semana
## 1                      Argentina          60938            11        Thu
## 2  Ciudad del Libertador General           4305         23543        Tue
## 3       Buenos Aires, Argentina.            128           327        Wed
## 4                                            16             8        Sun
## 5 C.A.B.A. BS.AS. RCA. ARGENTINA           4560          5156        Sat
## 6           São Paulo - Zona Sul            173           312        Sun
##   hora_base
## 1        11
## 2        23
## 3        11
## 4        17
## 5        15
## 6        23

Podemos graficar:

ggmap(RMBA) +
  geom_density2d(data = filter(tweets_rmba, source == "Instagram", !(wday(created) %in% 6:1) ), aes(x = X, y = Y, color = stat(level))) +
  scale_color_viridis_c() +
  facet_wrap(~hora_base, nrow = 3) +
  labs(title = "Generacion de tweets desde Instagram",
       subtitle = "Según hora del día, durante el fin de semana en RMBA",
       caption = "Fuente: Información de Twitter",
        x = "longitud",
        y = "latitud")

Se observa como a la largo del día varía la concentración de tweets, existiendo un máximo de concentracion de los mismos a las 6:00, 10:00, 12:00 y 13:00 horas pero con poca dispersión, mientras que a las 8:00 y 9:00 horas éstos alcanzan su máxima dispersión. Luego a lo largo del resto del día se observa una distribución relativamente estándar.