Manipulación de datos con R
Análisis de encuesta
Bibliotecas R
Encuesta
Code
mis_nombres <- c(
"promedio_academico",
"tiempo_casa_u",
"distancia_casa_u",
"abandonar_universidad",
"medio_transporte",
"electivas",
"numero_azar",
"trabajo",
"matematicas",
"pregunta_tiempo",
"sistema_educativo"
)
encuesta <- read_excel("Encuesta-Respuestas.xlsx") %>%
set_names(mis_nombres)
encuesta
Manipulación de datos
Procesos frecuentes
Estructura general
Rows: 29
Columns: 11
$ promedio_academico <chr> "4.44", "4.3", "4.0", "4.1", "3.7", "4", "4.0", ~
$ tiempo_casa_u <chr> "45", "25", "40", "40 minutos", "30min", "40", "~
$ distancia_casa_u <chr> "13.7", "13.1", "13.4", "12 km", "2.7km", "2.92"~
$ abandonar_universidad <chr> "No", "No", "Sí", "Sí", "Sí", "No", "Sí", "No", ~
$ medio_transporte <chr> "Transporte público", "Transporte público", "Tra~
$ electivas <chr> "Sí", "Sí", "No", "No", "Sí", "Sí", "Sí", "Sí", ~
$ numero_azar <dbl> 5, 2, 3, 5, 7, 5, 7, 2, 6, 5, 3, 0, 3, 4, 8, 1, ~
$ trabajo <chr> "No", "No", "Sí", "No", "No", "No", "No", "No", ~
$ matematicas <chr> "5", "4.05", "4", "3.8", "3.5", "4.56", "4.08", ~
$ pregunta_tiempo <chr> "El tiempo, es algo que se medie y con el cual a~
$ sistema_educativo <chr> "Me gusta que hoy en dia una gran parte de joven~
Conteo de registros
- Podemos usar la función
count()
para contar registros:
- También podemos contar registros para una variable específica:
- Es posible obtener el conteo para más de una variable categórica:
- ¿Cuál fue el número elegido al azar con mayor frecuencia?
Reordenar filas
- Podemos dar orden ascendente a las filas con la función
arrange()
:
- También es posible dar orden descendente a las filas con la función
desc()
:
Seleccionar columnas
- Podemos usar la función
select()
para seleccionar columnas:
Filtrar filas
- Podemos filtrar filas a través de la posición con la función
slice()
- Podemos filtar filas con base en una o más condiciones a través de la función
filter()
:
- Podemos aplicar más de un filtro:
Mutar columnas
- Con la función
mutate()
podemos editar las variables existentes y crear nuevas variables.
Code
encuesta_final <-
encuesta %>%
mutate(
promedio_academico = as.numeric(promedio_academico),
tiempo_casa_u = str_extract_all(
string = tiempo_casa_u,
pattern = "[0-9]+",
simplify = TRUE
),
tiempo_casa_u = as.numeric(tiempo_casa_u),
distancia_casa_u = str_replace_all(distancia_casa_u,
pattern = "km",
replacement = ""),
distancia_casa_u = str_replace_all(distancia_casa_u,
pattern = ",",
replacement = "."),
distancia_casa_u = as.numeric(distancia_casa_u),
matematicas = as.numeric(matematicas),
velocidad = distancia_casa_u / tiempo_casa_u
)
encuesta_final
- Podemos exportar la base de datos depurada:
Code
write_csv(x = encuesta_final, file = "EncuestaDepurada.csv")
summarise()
- ¿Cuál es el promedio y la mediana del promedio académico?
Code
- ¿Qué implica que sean similares la media y la mediana? ¿Simetría?
Code
encuesta_final %>%
ggplot(aes(x = promedio_academico)) +
geom_density() +
geom_vline(xintercept = 3.906207, color = "blue") +
geom_rug()
Resumir datos
-
group_by()
%>%
summarise()
%>%
ungroup()
- ¿Tienen mayor o menor promedio las personas que tienen trabajo?
Code
- ¿Cuál es la velocidad promedio para cada medio de transporte?
Code
- ¿Podemos representar el resultado anterior a través de un gráfico?
Code
- También podemos comparar la distribución de las velocidades para cada medio de transporte:
Code
encuesta_final %>%
ggplot(aes(x = medio_transporte, y = velocidad)) +
geom_boxplot() +
labs(x = "Medio de transporte",
y = "Velocidad (km/minuto)") +
coord_flip()
- Podemos agregar un gráfico de violín al boxplot anterior: en este caso no es muy diciente por el número de datos, sin embargo, cuando el volumen de información aumenta es recomendado considerar graficar boxplot y violín juntos.
Code
encuesta_final %>%
ggplot(aes(x = medio_transporte, y = velocidad)) +
geom_violin() +
geom_boxplot() +
labs(x = "Medio de transporte",
y = "Velocidad (km/minuto)")
Pregunta 11
Nube de palabras
Code
library(wordcloud) # Nube de palabras
library(tidytext) # Tokens
library(tm) # Manipulación de texto - StopWordss
library(jcolors) # Colores
stop_words_spanish <- data.frame(word = stopwords("spanish"))
conteo_p11 <-
encuesta_final %>%
select(sistema_educativo) %>%
unnest_tokens(word, sistema_educativo) %>%
anti_join(stop_words_spanish) %>%
count(word, sort = TRUE)
wordcloud(
words = conteo_p11$word,
freq = conteo_p11$n,
max.words = 100,
random.order = FALSE,
colors = jcolors("pal3")
)
n-gramas (n = 2)
n-gramas (n = 3)
Modelo matemático
- Problema 1: si una persona está interesada en estimar (o predecir) el tiempo que le tomaría llegar a la universidad desde un lugar ubicado a una distancia de 7.83 km, ¿Qué modelo le recomendaría a esta persona?
- Problema 2: la misma persona del problema 1 ahora nos menciona que se movilizará hasta la universidad en motocicleta, ¿cambia en algo su modelo? ¿Cuántos modelos son posibles?