CE4_EstadÃstica
library(pacman)## Warning: package 'pacman' was built under R version 4.1.2
p_load("tidyr", "ggfortify", "tseries", "DT", "base64enc", "htmltools", "mime", "xfun", "prettydoc","readr", "knitr","DT","dplyr", "ggplot2","plotly", "gganimate","gifski","scales","datasets","fdth", "GGally", "gridExtra","corrplot")Animo de los twitteros de México antes y después del COVID
Introducción
Uno de los principales factores de cambio que se vieron afectados con la llegada de la pandemia y la nueva normalidad es el estado de animo de las personas, el confinamiento social fue algo que impacto en la salud mental de toda la población mundial.
Nuestro paÃs no fue la excepción en este patrón, el estado de ánimo de los mexicanos también fue fluctuante antes de pandemia, durante pandemia e incluso ahora que recientemente se está empezando a regresar a la normalidad, la cual no creo que vaya a ser igual que antes, por lo menos no en un largo tiempo, por eso le llamamos nueva normalidad.
Esta variable resulta curiosa de analizar al momento de tratar de entender el comportamiento de las masas en el ámbito emocional o de estado de ánimo, percatarse de los puntos de inflexión que dieron pie a cambios de estados de ánimo en la población, tratar identificar eventos que fueron parteaguas en este tipo de factores, evento como lo es la pandemia.
La información proveniente de sistemas en Internet y de dispositivos electrónicos conectados a esta red, puede contribuir en la producción de información estadÃstica y geográfica, razón por la cual Organismos Internacionales y Oficinas Nacionales de EstadÃstica de varios paÃses, entre ellas el Instituto Nacional de EstadÃstica y GeografÃa (INEGI), están incursionando en aplicaciones prácticas de Ciencia de Datos destinadas a resolver problemas de Big Data, en particular usando información proveniente de dispositivos móviles explorando la factibilidad de generar estadÃsticas de movilidad y turismo; de búsquedas web relacionándolas con estadÃsticas laborales, de sitios de comercio electrónico para estadÃsticas de precios, y de redes sociales para confianza del consumidor, entre otras aplicaciones.
Análisis de series de tiempo
Para este análisis de serie de tiempo utilizaremos los datos de tweets en México, Twitter es una red social en la que los usuarios escriben textos cortos de hasta 140 caracteres que quedan visibles públicamente, es decir cualquier persona puede leer lo que se escribe en Twitter, no solamente aquellos que están vinculados al usuario que escribió el tuit. Adicionalmente el tuitero tiene la alternativa de georreferenciar sus tuits, etiquetando cada tuit con las coordenadas geográficas de su ubicación en el momento de publicarlo. El análisis del ánimo de los tuiteros se centró en estos tuits georreferenciados, debido a que es posible descargarlos mediante filtros geográficos sin importar el tema del que hable el tuitero, la desventaja de esto es que no todos los tuits se emiten con el atributo geográfico.
- ¿Que es una serie de tiempo?
Una serie de tiempo es un conjunto de observaciones sobre los valores que toma una variable (cuantitativa) a través del tiempo. Por tanto, una serie de tiempo es una forma estructurada de representar datos. Los datos se pueden comportar de diferentes maneras a través del tiempo: puede que se presente una tendencia, estacionalidad o simplemente no presenten una forma definida.
- ¿Que es una ciclo?
Son largas desviaciones de la tendencia debido a factores diferentes de la estacionalidad. Los ciclos por lo general se producen durante un intervalo de tiempo extenso, y los tiempos que transcurren entre los picos o valles sucesivos de un ciclo no necesariamente son iguales.
- Datos de estado de ánimo de los tuiteros en México: https://www.inegi.org.mx/app/animotuitero/#/app/multiline
Mediante el uso de mecanismos que Twitter pone a disposición de cualquier usuario, el INEGI ha recolectado tuits públicos y georreferenciados dentro del territorio nacional, la parte sur de los Estados Unidos de América y norte de Centroamérica. Las siguientes dos gráficas muestran visualmente, gracias a su atributo de georreferenciación, todos los tuits recolectados por INEGI entre febrero de 2014 y mayo de 2015. Cada punto azul es un tuit público y georreferenciado, publicado entre febrero de 2014 hasta el 15 de mayo de 2015 (125 millones de tuits) que, en conjunto delinean la República Mexicana y sus principales vÃas de comunicación.
Importamos datos
library(readr)
animoMX <- read_csv("data.csv") # Importamos datos## Rows: 2255 Columns: 7
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (2): tipo_usuario, lugar
## dbl (4): tuits_negativos, indice, recoleccion_promedio, tuits_positivos
## date (1): fecha
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
datatable(animoMX)Para tratar este vector numérico como una serie de tiempo, se utilizará el comando ts (time-series objects).
animoMX.ts <- ts(animoMX, start = c(2019,1), end = c(2022,1), frequency = 12 )frequency = 12 meses es un año (un ciclo)
start = inicio enero de 2019
print(animoMX.ts)## fecha tuits_negativos indice recoleccion_promedio tipo_usuario lugar
## Jan 2019 16801 34401 2.976687 136802 1 1
## Feb 2019 16802 34689 2.520453 122121 1 1
## Mar 2019 16803 39431 2.409196 134428 1 1
## Apr 2019 16804 46229 2.374527 156001 1 1
## May 2019 16805 44575 2.247358 144751 1 1
## Jun 2019 16806 43144 2.305257 142602 1 1
## Jul 2019 16807 42547 2.258209 138627 1 1
## Aug 2019 16808 46027 2.206640 147592 1 1
## Sep 2019 16809 38919 2.571109 138984 1 1
## Oct 2019 16810 40552 2.384321 137241 1 1
## Nov 2019 16811 48545 1.998228 145549 1 1
## Dec 2019 16812 43537 2.104486 135160 1 1
## Jan 2020 16813 47347 2.029907 143457 1 1
## Feb 2020 16814 47837 2.105797 148572 1 1
## Mar 2020 16815 39033 2.461994 135132 1 1
## Apr 2020 16816 38003 2.505486 133219 1 1
## May 2020 16817 40682 2.453075 140478 1 1
## Jun 2020 16818 43126 2.152878 135971 1 1
## Jul 2020 16819 41019 2.224238 132255 1 1
## Aug 2020 16820 41634 2.210909 133683 1 1
## Sep 2020 16821 39618 2.298173 130667 1 1
## Oct 2020 16822 38079 2.416240 130087 1 1
## Nov 2020 16823 34354 2.553735 122085 1 1
## Dec 2020 16824 40478 2.376871 136689 1 1
## Jan 2021 16825 42117 2.197782 134681 1 1
## Feb 2021 16826 41156 2.230367 132949 1 1
## Mar 2021 16827 41919 2.263031 136783 1 1
## Apr 2021 16828 40741 2.334847 135865 1 1
## May 2021 16829 37697 2.577791 134872 1 1
## Jun 2021 16830 35741 2.623430 129505 1 1
## Jul 2021 16831 36328 2.636671 132113 1 1
## Aug 2021 16832 41179 2.385682 139419 1 1
## Sep 2021 16833 39212 2.355070 131559 1 1
## Oct 2021 16834 40859 2.341320 136523 1 1
## Nov 2021 16835 34781 2.408873 118564 1 1
## Dec 2021 16836 27802 2.724013 103535 1 1
## Jan 2022 16837 35124 2.628687 127454 1 1
## tuits_positivos
## Jan 2019 102401
## Feb 2019 87432
## Mar 2019 94997
## Apr 2019 109772
## May 2019 100176
## Jun 2019 99458
## Jul 2019 96080
## Aug 2019 101565
## Sep 2019 100065
## Oct 2019 96689
## Nov 2019 97004
## Dec 2019 91623
## Jan 2020 96110
## Feb 2020 100735
## Mar 2020 96099
## Apr 2020 95216
## May 2020 99796
## Jun 2020 92845
## Jul 2020 91236
## Aug 2020 92049
## Sep 2020 91049
## Oct 2020 92008
## Nov 2020 87731
## Dec 2020 96211
## Jan 2021 92564
## Feb 2021 91793
## Mar 2021 94864
## Apr 2021 95124
## May 2021 97175
## Jun 2021 93764
## Jul 2021 95785
## Aug 2021 98240
## Sep 2021 92347
## Oct 2021 95664
## Nov 2021 83783
## Dec 2021 75733
## Jan 2022 92330
animoMX2.ts<-ts(animoMX[,"tuits_negativos"], start=c(2019,1), end = c(2022,1), frequency= 12) # Grafica de tweets negativos.
animoMX3.ts<-ts(animoMX[,c(2,7)], start=c(2018), end = c(2022), frequency= 12) # Serie de tiempo de cada una de las variables.Ahora que la variable es un objeto orientado a tiempo, se puede hacer una gráfica en la cual se entienda la periodicidad de los tweets negativos.
plot(animoMX.ts)plot(animoMX3.ts)En este conjunto de graficas muestra la evolución de las variables desde finales de 2019, esto con la finalidad de que se relacionar los picos de crecimiento de cada una de las variables con respecto a la negatividad y positividad de los tweets y forjar una idea de los factores que influyen más o influyen menos en los tweets, según que picos de cada variable coincide con eventos que sucedieron en esas fechas en la que se registra el incremento dentro de la serie de tiempo.
plot(animoMX2.ts)En esta grafica se recalca más los picos de tweets negativos, haciendo énfasis en esa grafica en especÃfico para alcanzar a apreciar los lapsos en los que se generan los picos de manera detallada.
Antes y Después del confinamiento
Para hacer una comparación de la brecha entre la naturaleza de los tweets antes y después, haremos una comparación de los tweets negativos antes y después de la pandemia, asà mismo será con los tweets positivos.
pos_PreCovid= ts(animoMX[7], start = c(2018), end = c(2020), frequency = 12) # Tweets positivos antes de la llegada del COVID.
pos_PostCovid= ts(animoMX[7], start = c(2020), end = c(2022), frequency = 12) # Tweets positivos despues de la llegada del COVID.neg_PreCovid= ts(animoMX[2], start = c(2016), end = c(2020), frequency = 12)
autoplot(neg_PreCovid, ts.colour = "red")Tweets negativos antes del confinamiento.
neg_PostCovid= ts(animoMX[2], start = c(2020), end = c(2022), frequency = 12)
autoplot(neg_PostCovid, ts.colour = "red")Tweets negativos después del confinamiento.
pos_PreCovid= ts(animoMX[7], start = c(2016), end = c(2020), frequency = 12)
autoplot(pos_PreCovid, ts.colour = "green")Tweets positivos antes del confinamiento.
pos_PostCovid= ts(animoMX[7], start = c(2020), end = c(2022), frequency = 12)
autoplot(pos_PostCovid, ts.colour = "green")Tweets positivos después del confinamiento.
decesos <- read_csv("time_series_covid19_deaths_global.csv")## Rows: 284 Columns: 788
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (2): Province/State, CountryRegion
## dbl (786): Lat, Long, 1/22/20, 1/23/20, 1/24/20, 1/25/20, 1/26/20, 1/27/20, ...
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
decesosMX <- t(decesos[decesos$CountryRegion=="Mexico" ,])
Fecha <- seq(from = as.Date("2020-02-15"), to = as.Date("2020-12-31"), by = "day" )
vec1 <- as.vector(decesosMX)
vec2 <- vec1[29:349]
num1 <- as.numeric(vec2)
Decesos <- as.vector(num1)
datosdedecesos <- data.frame(Fecha, Decesos)
datatable(datosdedecesos)Decesos en México en 2020 a causa de Covid19
movilidadMX <- read_csv("2020_MX_Region_Mobility_Report.csv")## Rows: 10593 Columns: 15
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (6): country_region_code, country_region, sub_region_1, iso_3166_2_code,...
## dbl (6): retail_and_recreation_percent_change_from_baseline, grocery_and_pha...
## lgl (3): sub_region_2, metro_area, census_fips_code
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
vec1 <- as.vector(movilidadMX$residential_percent_change_from_baseline)
vec2 <- vec1[1:321]
num1 <- as.numeric(vec2)
Movilidad <- as.vector(num1)
datosdemovilidad <- data.frame(Fecha, Movilidad)
datatable(datosdemovilidad)Datos de movilidad en México en 2020
vec1 <- as.vector(animoMX$tuits_negativos)
vec2 <- vec1[1505:1825]
num1 <- as.numeric(vec2)
Tuits <- as.vector(num1)
datos1 <- data.frame(Fecha, Decesos, Movilidad, Tuits)
gcov <- ggplot(data = datos1) +
geom_line(aes(Fecha, Decesos, colour="Decesos")) +
geom_line(aes(Fecha, Movilidad, colour="Movilidad")) +
geom_line(aes(Fecha, Tuits, colour="Tuits")) +
xlab("Fecha") +
ylab("Cantidad") +
labs(colour="casos")+
ggtitle("Gráfica con los 3 datos a la vez")
ggplotly(gcov)Graficación de los datos, grafica interactiva
datos_rel <- data.frame(Decesos, Movilidad, Tuits)
round(cor(x = datos_rel, method = "pearson"), 3)## Decesos Movilidad Tuits
## Decesos 1.000 -0.160 -0.805
## Movilidad -0.160 1.000 0.134
## Tuits -0.805 0.134 1.000
ggpairs(datos_rel, lower = list(continuous ="smooth"),
diag = list (continuos = "barDiag"), axisLabels = "none")Análisis de correlación entre los 3 aspectos
corrplot(cor(dplyr::select(datos_rel, Decesos, Movilidad, Tuits)),
method = "number", tl.col = "black")Matriz de correlación
Descargar código
- Código de este archivo.
xfun::embed_file("CE4.Rmd")- Datos usados en este caso de estudio.
xfun::embed_file("data.csv")xfun::embed_file("2020_MX_Region_Mobility_Report.csv")Download 2020_MX_Region_Mobility_Report.csv
xfun::embed_file("time_series_covid19_deaths_global.csv")