library(ggmap)
library(rtweet)
library(tidyverse)
library(lubridate)
library(leaflet)
library(osmdata)
library(sf)
options(scipen=999)
Comienzo utilizando un dataset con 503.968 tweets.
tweets_cordoba_20200515<-read_twitter_csv("tweets_cordoba.csv",unflatten = TRUE)
tweets_cordoba_20200515$created_at<-ymd_hms(tweets_cordoba_20200515$created_at)
summary(tweets_cordoba_20200515$created_at)
## Min. 1st Qu. Median
## "2020-05-10 05:17:09" "2020-05-11 16:16:45" "2020-05-12 22:37:14"
## Mean 3rd Qu. Max.
## "2020-05-12 21:43:12" "2020-05-14 03:11:10" "2020-05-15 12:35:55"
dim(tweets_cordoba_20200515)
## [1] 503968 90
Analizo la distribucion de los datos en los dias de la semana:
ggplot(tweets_cordoba_20200515)+
geom_bar(aes(x=as.factor(wday(created_at,label=TRUE,abbr = FALSE))))+
labs(title="Uso de Twitter en Ciudad de Cordoba",
subtitle="Cantidad de tweets por dia de la semana",
x="Dia",
y="Cantidad de Tweets",
caption="Fuente: API Twitter")
La muestra no llega a ser uniforme para un analisis sobre los dias de la semana, ya que no se alcanza a abarcarla completamente.
Obtengo palabras claves para analizar su uso segun el horario del dia:
tweets_cuarentena<-tweets_cordoba_20200515 %>%
filter(grepl("cuarentena",text))
tweets_coronavirus<-tweets_cordoba_20200515 %>%
filter(grepl("coronavirus",text))
tweets_gobierno<-tweets_cordoba_20200515 %>%
filter(grepl("gobierno",text))
tweets_combinados<-mutate(tweets_cuarentena,palabra="cuarentena") %>%
bind_rows(mutate(tweets_coronavirus,palabra="coronavirus")) %>%
bind_rows(mutate(tweets_gobierno,palabra="gobierno"))
ggplot()+
geom_bar(data=tweets_combinados,aes(x=as.factor(hour(created_at)),fill=palabra))+
labs(title="Uso de Twitter en Ciudad de Cordoba",
subtitle="Analisis de palabras clave segun horario",
x="Hora del dia",
y="Cantidad de Tweets",
fill="Palabra Clave",
caption="Fuente: API Twitter")
MAPA DE DENSIDAD
tweets_cordoba_geo<-lat_lng(tweets_cordoba_20200515) %>%
select(-geo_coords, -coords_coords, -bbox_coords) %>%
filter(!is.na(lat)|!is.na(lng)) %>%
filter(lat<=0,lng<=0)
bbox<-make_bbox(tweets_cordoba_geo$lng,tweets_cordoba_geo$lat)
cordoba<-get_stamenmap(bbox=bbox,maptype = "toner-lite",zoom=11)
ggmap(cordoba)+
geom_bin2d(data=tweets_cordoba_geo,
aes(x=lng,y=lat),
bins=100)+
scale_fill_viridis_c(trans="log")+
labs(title="Uso de Twitter en Ciudad de Cordoba",
subtitle="Densidad de tweets",
x="longitud",
y="latitud",
fill="Conteo",
caption="Fuentes: Datos de API Twitter.
Mapa: D. Kahle and H. Wickham. ggmap: Spatial Visualization with ggplot2.
The R Journal, 5(1), 144-161. URL
http://journal.r-project.org/archive/2013-1/kahle-wickham.pdf")
Los resultados no son buenos por la existencia de fuertes outliers (excesiva concentracion en pocos puntos). Al intentar efectuar mapa de densidad por curvas de nivel confirmo el problema:
ggmap(cordoba)+
geom_density2d(data=tweets_cordoba_geo,aes(x=lng,y=lat,color=stat(level)))+
scale_colour_viridis_c()+
labs(caption="Fuentes: Datos de API Twitter.
Mapa: D. Kahle and H. Wickham. ggmap: Spatial Visualization with ggplot2.
The R Journal, 5(1), 144-161. URL
http://journal.r-project.org/archive/2013-1/kahle-wickham.pdf")
## Warning: Computation failed in `stat_density2d()`:
## bandwidths must be strictly positive
Los mapas de densidad funcionan correctamente con datos mas uniformes geograficamente, como el dataset de establecimientos edcucativos:
# Obtengo datos de establecimientos educativos:
bbox_poly<-getbb("Córdoba, Municipio de Córdoba, PedanÃa Capital, Departamento Capital, Córdoba, X5000, Argentina", format_out = "sf_polygon")
cordoba_esteduc<-st_read("ign_establecimientoseduc.geojson") %>%
st_transform(crs=4326) %>%
st_intersection(bbox_poly)
## Reading layer `ign_establecimientoseduc' from data source `/Users/santiago/Google Drive/DRIVE MEU/- CIENCIA DE DATOS 2/ign_establecimientoseduc.geojson' using driver `GeoJSON'
## Simple feature collection with 47369 features and 8 fields
## geometry type: POINT
## dimension: XY
## bbox: xmin: -72.8872 ymin: -63.3977 xmax: -53.6384 ymax: -21.8764
## CRS: 4326
#Utilizo la primer palabra del nombre para clasificar por tipo de establecimiento:
cordoba_esteduc$tipo<-as.factor(word(cordoba_esteduc$gna,1))
levels(cordoba_esteduc$tipo)
## [1] "Centro" "Colegio" "Conservatorio" "Escuela"
## [5] "Instituto" "JardÃn"
#Creo columnas lng y lat en base a geometry:
cordoba_esteduc_coord<-cordoba_esteduc %>%
mutate(lng=unlist(map(cordoba_esteduc$geometry,1)),
lat=unlist(map(cordoba_esteduc$geometry,2)))
#Genero mapa de densidad bin2d:
ggmap(cordoba)+
geom_bin2d(data=cordoba_esteduc_coord,
aes(x=lng,y=lat),
bins=40)+
scale_fill_viridis_c(trans="log")+
labs(title="Establecimientos educativos en Ciudad de Cordoba",
subtitle="Densidad de establecimientos",
x="longitud",
y="latitud",
fill="Establecimientos",
caption="Fuente: Instituto Geografico Nacional
Mapa: D. Kahle and H. Wickham. ggmap: Spatial Visualization with ggplot2.
The R Journal, 5(1), 144-161. URL
http://journal.r-project.org/archive/2013-1/kahle-wickham.pdf")
Si bien el resultado no es el mejor, permite observar un patron.
#Mapa de densidad density2d:
ggmap(cordoba)+
geom_density2d(data=cordoba_esteduc_coord,aes(x=lng,y=lat,color=stat(level)))+
scale_colour_viridis_c()+
facet_wrap(~tipo)+
labs(title="Establecimientos educativos en Ciudad de Cordoba",
subtitle="Densidad de establecimientos",
x="longitud",
y="latitud",
fill="Establecimientos",
caption="Fuente: Instituto Geografico Nacional
Mapa: D. Kahle and H. Wickham. ggmap: Spatial Visualization with ggplot2.
The R Journal, 5(1), 144-161. URL
http://journal.r-project.org/archive/2013-1/kahle-wickham.pdf")
El restulado falla al tener poca densidad de datos en colegios y convservatorio.