Evaluacion de la cuarta unidad para la materia de Análisis de Datos Sociales impartida por el Lic. Sergio Valdez Rodela.
Este análisis examina las interacciones en Facebook de tres candidatos políticos: Maynez, Claudia y Xochilt. Se procesaron y analizaron datos sobre comentarios, likes y compartidos en sus publicaciones, generando diversas visualizaciones para identificar patrones y tendencias.
Primero, se cargan las librerías necesarias para manejar y visualizar los datos, y se define la ruta del directorio que contiene los archivos CSV con los datos de cada candidato.
library(lubridate)
library(ggplot2)
library(tidyr)
library(patchwork)
directory <- "/Users/vicentcodes/Downloads/analisis/"
Se crearon dos funciones principales: read_data y
process_data.
read_dataEsta función lee un archivo CSV, convierte la columna de tiempo a un formato adecuado y ajusta la hora restando 6 horas (posiblemente para corregir la zona horaria). También convierte las interacciones (comentarios, likes y compartidos) a números.
read_data <- function(filename) {
data <- read.csv(paste0(directory, filename))
data$time <- ymd_hms(data$time)
data$time_adjusted <- data$time - hours(6)
data$hour <- hour(data$time_adjusted)
data$shares <- as.numeric(data$shares)
data$comments <- as.numeric(data$comments)
data$likes <- as.numeric(data$likes)
return(data)
}
process_dataEsta función selecciona las columnas de interés (hora, comentarios, likes y compartidos) del conjunto de datos.
process_data <- function(data) {
selected_data <- data[, c("hour", "comments", "likes", "shares")]
return(selected_data)
}
Se aplican estas funciones para leer y procesar los datos de cada candidato:
data_maynez <- read_data("Maynez.csv")
data_claudia <- read_data("Claudia.csv")
data_xochilt <- read_data("Xochilt.csv")
View(data_claudia)
processed_data_maynez <- process_data(data_maynez)
processed_data_claudia <- process_data(data_claudia)
processed_data_xochilt <- process_data(data_xochilt)
Para analizar las interacciones por hora, se procesan los datos y se generan gráficos de líneas para cada candidato.
Esta función calcula el total de likes, comentarios y compartidos por hora del día.
procesar_datosInteracciones <- function(data) {
data$shares <- as.numeric(data$shares)
data$comments <- as.numeric(data$comments)
data$likes <- as.numeric(data$likes)
data$time <- ymd_hms(data$time)
data$time_adjusted <- data$time - hours(6)
data$hour <- hour(data$time_adjusted)
total_likes <- tapply(data$likes, data$hour, sum, na.rm = TRUE)
total_comments <- tapply(data$comments, data$hour, sum, na.rm = TRUE)
total_shares <- tapply(data$shares, data$hour, sum, na.rm = TRUE)
hourly_data <- data.frame(
hour = as.numeric(names(total_likes)),
total_likes = total_likes,
total_comments = total_comments,
total_shares = total_shares
)
hourly_data_long <- hourly_data %>%
pivot_longer(cols = c(total_likes, total_comments, total_shares),
names_to = "interaction_type", values_to = "count")
return(hourly_data_long)
}
Esta función crea un gráfico de líneas para visualizar las interacciones por hora.
Interaccionesgrafica <- function(data_long, titulo) {
ggplot(data_long, aes(x = hour, y = count, color = interaction_type, group = interaction_type)) +
geom_line() +
geom_point() +
labs(title = titulo,
x = "Hora del Día",
y = "Número de Interacciones",
color = "Tipo de Interacción") +
theme_minimal() +
scale_x_continuous(breaks = 0:23)
}
Se procesan los datos y se generan las gráficas:
hourly_data_maynez <- procesar_datosInteracciones(data_maynez)
hourly_data_claudia <- procesar_datosInteracciones(data_claudia)
hourly_data_xochilt <- procesar_datosInteracciones(data_xochilt)
maynezInteracciones <- Interaccionesgrafica(hourly_data_maynez, "Interacciones por Hora en Facebook de Maynez")
claudiaInteracciones <- Interaccionesgrafica(hourly_data_claudia, "Interacciones por Hora en Facebook de Claudia")
xochiltInteracciones <- Interaccionesgrafica(hourly_data_xochilt, "Interacciones por Hora en Facebook de Xochilt")
Se crean gráficos de dispersión para visualizar la relación entre comentarios, likes y compartidos.
Esta función genera un gráfico de dispersión para ver cómo se relacionan dos variables (por ejemplo, comentarios y likes).
Se creó una función para eliminar valores atípicos (outliers), que pueden distorsionar el análisis. Utiliza el rango intercuartílico (IQR) para identificar y eliminar estos valores.
remove_outliers <- function(data, cols) {
outlier_free <- data
for (col in cols) {
q1 <- quantile(data[[col]], 0.25)
q3 <- quantile(data[[col]], 0.75)
iqr <- q3 - q1
lower <- q1 - 1.5 * iqr
upper <- q3 + 1.5 * iqr
outlier_free <- outlier_free[!(data[[col]] < lower | data[[col]] > upper), ]
}
return(outlier_free)
}
Aplicamos esta función a los datos procesados:
filtered_data_maynez <- remove_outliers(processed_data_maynez, c("comments", "likes", "shares"))
filtered_data_claudia <- remove_outliers(processed_data_claudia, c("comments", "likes", "shares"))
filtered_data_xochilt <- remove_outliers(processed_data_xochilt, c("comments", "likes", "shares"))
plotComent <- function(data, title) {
ggplot(data, aes(x = comments, y = likes)) +
geom_point() +
labs(title = title,
x = "Número de Comentarios",
y = "Número de Likes")
}
plotCompar <- function(data, title) {
ggplot(data, aes(x = shares, y = likes)) +
geom_point() +
labs(title = title,
x = "Número de Compartidos",
y = "Número de Likes")
}
Para visualizar la proporción de interacciones totales por candidato, se crean gráficas de pastel.
Se combinan los datos de todos los candidatos en un solo conjunto de datos.
combined_data <- rbind(
cbind(processed_data_maynez, candidate = "Maynez"),
cbind(processed_data_claudia, candidate = "Claudia"),
cbind(processed_data_xochilt, candidate = "Xochilt")
)
Esta función genera una gráfica de pastel para mostrar la proporción de una interacción específica (likes, comentarios o compartidos) por candidato.
TopInteraccionesGrafica <- function(interaction_data, interaction_type) {
total_interactions <- aggregate(interaction_data ~ candidate, combined_data, sum)
pie_chart <- ggplot(total_interactions, aes(x = "", y = interaction_data, fill = candidate)) +
geom_bar(stat = "identity", width = 1) +
geom_text(aes(label = paste(candidate, "\n", interaction_data), color = candidate),
position = position_stack(vjust = 0.5), size = 4) +
coord_polar("y", start=0) +
labs(title = paste("Total de", interaction_type, "por Candidato"),
fill = "Candidato",
y = paste("Número Total de", interaction_type)) +
theme_void() +
scale_fill_manual(values = c("Maynez"
= "#ee7e1d", "Claudia" = "#753232", "Xochilt" = "#008cce")) +
scale_color_manual(values = c("Maynez" = "white", "Claudia" = "white", "Xochilt" = "white")) +
theme(legend.position = "none")
return(pie_chart)
}
likes_pie <- TopInteraccionesGrafica(combined_data$likes, "Likes")
comments_pie <- TopInteraccionesGrafica(combined_data$comments, "Comentarios")
shares_pie <- TopInteraccionesGrafica(combined_data$shares, "Compartidos")
La presente seccion tiene como objetivo mostrar a que hora del dia los candidatos presidenciales tienen mas interacciones, desglosado en tres tipos de interacción: comentarios, me gusta y comparticiones. El analisis se muestran se forma indivudual para cada candidato. En el eje Y de las graficas se muestran el numero total de interacciones sumado la cantidad de me gustas, comentarios y compartidos.
El pico más notable de interacciones ocurre alrededor de las 6 de la mañana, donde los me gusta alcanzan su máximo con cerca de 80,000 interacciones, mientras que los comentarios y comparticiones se mantienen relativamente bajos en comparación. Otro pico significativo en los me gusta se observa alrededor de las 13 a 16 horas, seguido de otro aumento notable alrededor de las 21 horas.
La explicación plausible para estos patrones puede estar relacionada con los hábitos diarios de los usuarios. El pico temprano en la mañana podría corresponder a personas revisando sus redes sociales al despertar o camino al trabajo. El aumento alrededor del mediodía podría estar asociado con la pausa para el almuerzo, mientras que el pico en la noche podría coincidir con el tiempo libre después del trabajo o la cena.
La mayor cantidad de me gusta en comparación con los comentarios y compartidos podría sugerir que es más fácil y rápido para los usuarios interactuar con un simple me gusta o reaccion en lugar de escribir un comentario o decidir compartir una publicación. Este comportmiento se repite con todos los candidatos.
Los picos de mas interacciones de claudia son demasiado consisntes, al derredor de las 10 AM 17 y 22 horas son donde mas interacciones tiene, pero cabe destacar que en cuanto a los me gusta, a las 10 y 22 horas tiene un numero muy similar de me gustas un poco superior a los 125,000, por lo que se puede deducir que son las horas en las que sus simpatizantes mas consntantes estan mas activos en las redes de claudia. Sin embargo, las hora mas popular y en la que tiene mejores resultados es las 17 horas, donde los me gusta llegan hasta los 250,000.
Los comentarios y compartidos durante todas las horas son practicamente iguales y no hay demasiada variacion en algunos casos llegan a ser iguales. El hecho que los comentarios y compartidos asi como que los me gustas en ciertas horas llegen a ser muy similares sugiere un comportamiento poco organico y dificlmente puede ser atribuido a la interaccion real de personas.
Las horas con mayor numero de interacciones en la pagina de Facebook son principalmente de las 12 a 13 horas con otro pico considerable a las 7 de la tarde. A diferencia de los otros candidatos, los comentarios y compartidos de la pagina de Xochilt no son son similares, de hecho pueden parecer mas organicos y respetar el orden de cuando se presentan los picos de interaccion.
Con base a los datos y a la grafica se puede concluir que el rango en que es preferible realizar las publicaciones en la pagina es desde las 12 a 14 y de 17 a 21 horas ya que seguramente los seguidores de Xochilt apoyan sus publicaciones cuando estan comiendo y al final del dia cuando terminan sus jornadas laborales.
Esta sección se analizara la posible relación entre las el número de likes con los compartidos y el número de compartidos de cada uno de los candidatos de acuerdo con graficas que dispersión que permitan interpretar los datos.
El análisis de las gráficas de dispersión “Comentarios vs Likes” y “Likes vs Compartidas” en las publicaciones de Maynez en Facebook revela patrones interesantes, en ambas gráficas muestran una correlación positiva clara entre el número de comentarios y el número de me gusta hasta aproximadamente 300 comentarios. Esto sugiere que las publicaciones que generan discusiones también tienden a recibir más me gusta, reflejando una apreciación general por parte de los usuarios. Sin embargo, después de este umbral de 300 comentarios, la relación se debilita y se observa una estabilización o incluso una ligera disminución en los me gusta.
Este fenómeno puede indicar que las publicaciones con un gran volumen de comentarios pueden estar polarizando o generando debates intensos, donde los usuarios prefieren interactuar comentando en lugar de dar me gusta.
Existe una relación positiva entre el número de comentarios y la cantidad de likes, donde generalmente, a medida que aumentan los comentarios, también lo hacen los likes. No obstante, hay excepciones en las que un alto número de comentarios no se traduce en muchos likes, lo que sugiere que otros factores, como la calidad o relevancia del contenido, influyen en la interacción.
En cuanto a la relación entre el número de likes y el número de compartidas, también se observa una tendencia positiva: a medida que aumentan las compartidas, tienden a aumentar los likes. Sin embargo, hay variabilidad en esta relación, ya que algunas publicaciones pueden recibir muchas compartidas, pero pocos likes, y otras pueden tener una alta correlación entre ambos.
En ambos casos la mayor relación que existen entre las variables ocurren debajo del rango de los 10,000 likes por lo que se puede deducir que en cuando la publicación se vuelve popular esta deja ser compartida o la gente deja de comentar. Este fenómeno también explicararia la baja cantidad de interacciones en cuanto a comentarios y compartidas que tiene la candidata del oficialismo si los comparamos con sus números de likes.
Los datos de Xochilt muestra un compartimiento muy similar al de los otros candidatos, por debajo de los 500 compartidos y los 600 comentarios existen una clara relación con el número de likes, donde a mayor número de comentarios y compartidos, mayor es el número de likes.
La relación se rompe o es más difusa cuando los comentarios y compartidos superan los 500 y 600 respectivamente ya en las graficas después de estas cifras existen puntos muy separados en lo que no puede establecerse una relación muy clara.
En las siguientes graficas se analizará mediante graficas de pastel que candidato tiene un mayor número de likes, comentarios y compartidas.
De acuerdo con la información de
la grafica podemos ver una clara y holgada ventaja de Claudia con más
del 50% de ventaja y con 1345849 likes como suma en todas sus
publicaciones.
De cuando con la grafica
Claudia vuelve a tener una gran ventaja frente a los otros candidatos
donde ni sumados logran obtener ni el 50% del total.
Esta es la unica grafica en que los candidatos de la opisicion logran obtener mas del 50% de las interacciones de los comentarios destacando Xochilt que tiene cerca de los 100,000 comentarios, aunque claudia aun tiene una clara ventaja frente a los demas.
print(maynezInteracciones)
print(claudiaInteracciones)
print(xochiltInteracciones)
print(plotComent(filtered_data_maynez, "Dispersión de Comentarios vs
Likes (Maynez)"))
print(plotComent(filtered_data_claudia, "Dispersión
de Comentarios vs Likes (Claudia)"))
print(plotComent(filtered_data_xochilt, "Dispersión de Comentarios vs
Likes (Xochilt)"))
print(plotCompar(filtered_data_maynez, "Dispersión de Likes vs
Compartidas (Maynez)"))
print(plotCompar(filtered_data_claudia,
"Dispersión de Likes vs Compartidas (Claudia)"))
print(plotCompar(filtered_data_xochilt, "Dispersión de Likes vs
Compartidas (Xochilt)"))
print(likes_pie)
print(comments_pie)
print(shares_pie)
El análisis de interacciones en Facebook de los candidatos políticos Maynez, Claudia y Xochilt revela distintos patrones de engagement. Maynez alcanza los picos de interacciones más altos en la mañana, al mediodía y por la noche, sugiriendo que sus seguidores están activos al despertar, durante el almuerzo y al finalizar el día. Claudia tiene picos de interacción a las 10 AM, 5 PM y 10 PM, con un comportamiento de interacción que podría no ser completamente orgánico. Xochilt muestra picos de interacción más orgánicos y concentrados entre las 12-1 PM y 7 PM.
En cuanto a la relación entre comentarios, likes y compartidos, Maynez y Xochilt muestran una correlación positiva hasta ciertos umbrales, mientras que Claudia tiene una relación positiva más variable, indicando que otros factores influyen en su engagement.
En términos de interacciones totales, Claudia domina claramente en likes y compartidos, pero Maynez y Xochilt logran captar una mayor proporción de comentarios, sugiriendo un mayor nivel de discusión y participación activa entre sus seguidores. Claudia lidera en cantidad de interacciones totales, mientras que Maynez y Xochilt muestran un engagement más distribuido y posiblemente más genuino. Estos resultados ofrecen una visión útil para entender mejor cómo los candidatos logran interactuar con sus seguidores en las redes sociales.