setwd(“SABER 11/Saber_11__2019-2_20240824.csv”)
install.packages("tidyverse")
## Warning: package 'tidyverse' is in use and will not be installed
library(tidyverse)
datos <- read_csv("SABER 11/Saber_11__2019-2_20240824.csv")
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 546212 Columns: 82
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (61): ESTU_TIPODOCUMENTO, ESTU_NACIONALIDAD, ESTU_GENERO, ESTU_FECHANACI...
## dbl (21): PERIODO, COLE_COD_DANE_ESTABLECIMIENTO, COLE_COD_DANE_SEDE, PUNT_L...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
spec(datos)
## cols(
## ESTU_TIPODOCUMENTO = col_character(),
## ESTU_NACIONALIDAD = col_character(),
## ESTU_GENERO = col_character(),
## ESTU_FECHANACIMIENTO = col_character(),
## PERIODO = col_double(),
## ESTU_CONSECUTIVO = col_character(),
## ESTU_ESTUDIANTE = col_character(),
## ESTU_TIENEETNIA = col_character(),
## ESTU_PAIS_RESIDE = col_character(),
## ESTU_ETNIA = col_character(),
## ESTU_DEPTO_RESIDE = col_character(),
## ESTU_COD_RESIDE_DEPTO = col_character(),
## ESTU_MCPIO_RESIDE = col_character(),
## ESTU_COD_RESIDE_MCPIO = col_character(),
## FAMI_ESTRATOVIVIENDA = col_character(),
## FAMI_PERSONASHOGAR = col_character(),
## FAMI_CUARTOSHOGAR = col_character(),
## FAMI_EDUCACIONPADRE = col_character(),
## FAMI_EDUCACIONMADRE = col_character(),
## FAMI_TRABAJOLABORPADRE = col_character(),
## FAMI_TRABAJOLABORMADRE = col_character(),
## FAMI_TIENEINTERNET = col_character(),
## FAMI_TIENESERVICIOTV = col_character(),
## FAMI_TIENECOMPUTADOR = col_character(),
## FAMI_TIENELAVADORA = col_character(),
## FAMI_TIENEHORNOMICROOGAS = col_character(),
## FAMI_TIENEAUTOMOVIL = col_character(),
## FAMI_TIENEMOTOCICLETA = col_character(),
## FAMI_TIENECONSOLAVIDEOJUEGOS = col_character(),
## FAMI_NUMLIBROS = col_character(),
## FAMI_COMELECHEDERIVADOS = col_character(),
## FAMI_COMECARNEPESCADOHUEVO = col_character(),
## FAMI_COMECEREALFRUTOSLEGUMBRE = col_character(),
## FAMI_SITUACIONECONOMICA = col_character(),
## ESTU_DEDICACIONLECTURADIARIA = col_character(),
## ESTU_DEDICACIONINTERNET = col_character(),
## ESTU_HORASSEMANATRABAJA = col_character(),
## ESTU_TIPOREMUNERACION = col_character(),
## COLE_CODIGO_ICFES = col_character(),
## COLE_COD_DANE_ESTABLECIMIENTO = col_double(),
## COLE_NOMBRE_ESTABLECIMIENTO = col_character(),
## COLE_GENERO = col_character(),
## COLE_NATURALEZA = col_character(),
## COLE_CALENDARIO = col_character(),
## COLE_BILINGUE = col_character(),
## COLE_CARACTER = col_character(),
## COLE_COD_DANE_SEDE = col_double(),
## COLE_NOMBRE_SEDE = col_character(),
## COLE_SEDE_PRINCIPAL = col_character(),
## COLE_AREA_UBICACION = col_character(),
## COLE_JORNADA = col_character(),
## COLE_COD_MCPIO_UBICACION = col_character(),
## COLE_MCPIO_UBICACION = col_character(),
## COLE_COD_DEPTO_UBICACION = col_character(),
## COLE_DEPTO_UBICACION = col_character(),
## ESTU_PRIVADO_LIBERTAD = col_character(),
## ESTU_COD_MCPIO_PRESENTACION = col_character(),
## ESTU_MCPIO_PRESENTACION = col_character(),
## ESTU_DEPTO_PRESENTACION = col_character(),
## ESTU_COD_DEPTO_PRESENTACION = col_character(),
## PUNT_LECTURA_CRITICA = col_double(),
## PERCENTIL_LECTURA_CRITICA = col_double(),
## DESEMP_LECTURA_CRITICA = col_double(),
## PUNT_MATEMATICAS = col_double(),
## PERCENTIL_MATEMATICAS = col_double(),
## DESEMP_MATEMATICAS = col_double(),
## PUNT_C_NATURALES = col_double(),
## PERCENTIL_C_NATURALES = col_double(),
## DESEMP_C_NATURALES = col_double(),
## PUNT_SOCIALES_CIUDADANAS = col_double(),
## PERCENTIL_SOCIALES_CIUDADANAS = col_double(),
## DESEMP_SOCIALES_CIUDADANAS = col_double(),
## PUNT_INGLES = col_double(),
## PERCENTIL_INGLES = col_double(),
## DESEMP_INGLES = col_character(),
## PUNT_GLOBAL = col_double(),
## PERCENTIL_GLOBAL = col_double(),
## ESTU_INSE_INDIVIDUAL = col_character(),
## ESTU_NSE_INDIVIDUAL = col_double(),
## ESTU_NSE_ESTABLECIMIENTO = col_double(),
## ESTU_ESTADOINVESTIGACION = col_character(),
## `ESTU_GENERACION-E` = col_character()
## )
dim(datos)
## [1] 546212 82
datos[] <- lapply(datos, function(x) {if (is.character(x)) {x[x == "-"] <- NA}
return(x)})
#Filtramos por las 2 ciudades en las cuales nos enfocaremos
barranquilla_datos <- filter(datos, ESTU_MCPIO_RESIDE == "BARRANQUILLA")
cartagena_datos <- filter(datos, ESTU_MCPIO_RESIDE == "CARTAGENA DE INDIAS")
#FUNCION PARA VARIABLES NUMERICAS : ESTADISTICAS CAJA BIGOTES
estadistica_numerica_boxplot <- function(data, variable) {
# Verificar que la base de datos y la variable existan
if (is.null(data) || !variable %in% names(data)) {
stop("La base de datos es NULL o la variable no existe en la base de datos.")
}
# Extraer la variable
var_data <- data[[variable]]
# Eliminar NA para evitar problemas en cálculos
var_data <- na.omit(var_data)
# Calcular estadísticas básicas
stats <- list(
Media = mean(var_data),
Mediana = median(var_data),
Varianza = var(var_data),
Desviacion = sd(var_data),
Minimo = min(var_data),
Maximo = max(var_data),
Cuartiles = quantile(var_data, probs = c(0.25, 0.5, 0.75)),
Percentiles = quantile(var_data, probs = c(0.01, 0.99))
)
# Mostrar estadísticas
print(stats)
# Crear el boxplot
plot <- ggplot(data, aes(x = factor(1), y = var_data)) +
geom_boxplot() +
labs(title = paste("Boxplot de", variable),
x = "Variable",
y = variable) +
theme_minimal()
# Mostrar el gráfico
print(plot)
}
#FUNCION PARA VARIABLES CATEG0RICAS : ESTADISTICAS BARRAS
estadistica_categorica_barr <- function(data, variable) {
# Calcular frecuencia de cada categoría
freq_table <- table(data[[variable]])
# Convertir a dataframe para ggplot
df_freq <- as.data.frame(freq_table)
colnames(df_freq) <- c("Category", "Frequency")
# Calcular moda
moda <- names(freq_table)[which.max(freq_table)]
# Calcular estadísticas básicas
stats <- list(
Total = sum(freq_table),
Moda = moda,
Frequencies = freq_table
)
# Mostrar estadísticas
print(stats)
# Crear el gráfico de barras
plot <- ggplot(df_freq, aes(x = Category, y = Frequency, fill = Category)) +
geom_bar(stat = "identity") +
labs(title = paste("Distribución de", variable),
x = "Categoría",
y = "Frecuencia") +
theme_minimal()
# Mostrar el gráfico
print(plot)
}
#GRAFICA VARIABLE CATEGORICA COMPARADA CON EL PUNTAJE GLOBAL
variablecategorica_vs_ptglobal <- function(data, categorical_var) {
# Verificar que la variable categórica existe en el dataset
if (!(categorical_var %in% names(data))) {
stop("La variable categórica no se encuentra en el dataset.")
}
# Filtrar los datos para excluir NA en la variable categórica y el puntaje global
filtered_data <- data %>%
filter(!is.na(.data[[categorical_var]]), !is.na(PUNT_GLOBAL))
# Agrupar por la variable categórica y calcular la media del puntaje global
summary_data <- filtered_data %>%
group_by_at(categorical_var) %>%
summarise(mean_punt_global = mean(PUNT_GLOBAL, na.rm = TRUE))
# Crear el gráfico de barras
plot <- ggplot(summary_data, aes(x = reorder(!!sym(categorical_var), mean_punt_global), y = mean_punt_global)) +
geom_bar(stat = "identity", fill = "skyblue") +
labs(title = paste("Puntaje Global por", categorical_var),
x = categorical_var,
y = "Media del Puntaje Global") +
theme_minimal() +
coord_flip() # Opcional: para mejor visualización si hay muchas categorías
# Mostrar el gráfico
print(plot)
}
#COMPARACION DE VARIABLES CATEGORICAS POR CIUDAD
compare_two_cities_categorical <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2", position = "stack") {
# Crear un dataframe combinado con las 2 ciudades
combined_data <- rbind(
data.frame(Ciudad = city1_name, Categoria = city1_data[[variable]]),
data.frame(Ciudad = city2_name, Categoria = city2_data[[variable]])
)
# Eliminar NA
combined_data <- na.omit(combined_data)
# Convertir la variable categórica en un factor
combined_data$Categoria <- as.factor(combined_data$Categoria)
# Crear el gráfico de barras
plot <- ggplot(combined_data, aes(x = Ciudad, fill = Categoria)) +
geom_bar(position = position) +
labs(title = paste("Distribución de", variable, "entre", city1_name, "y", city2_name),
y = "Frecuencia",
x = "Ciudad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Mostrar el gráfico
print(plot)
}
#Comparacion entre ciudades variable categorica PROPORCIONAL
compare_two_cities_categorical_proportions <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2", position = "stack") {
# Crear un dataframe combinado con las 2 ciudades
combined_data <- rbind(
data.frame(Ciudad = city1_name, Categoria = city1_data[[variable]]),
data.frame(Ciudad = city2_name, Categoria = city2_data[[variable]])
)
# Eliminar NA
combined_data <- na.omit(combined_data)
# Convertir la variable categórica en un factor
combined_data$Categoria <- as.factor(combined_data$Categoria)
# Calcular proporciones
proportion_data <- combined_data %>%
group_by(Ciudad, Categoria) %>%
summarise(Count = n(), .groups = 'drop') %>%
group_by(Ciudad) %>%
mutate(Proporcion = Count / sum(Count)) %>%
ungroup()
# Crear el gráfico de barras
plot <- ggplot(proportion_data, aes(x = Ciudad, y = Proporcion, fill = Categoria)) +
geom_bar(stat = "identity", position = position) +
labs(title = paste("Distribución Proporcional de", variable, "entre", city1_name, "y", city2_name),
y = "Proporción",
x = "Ciudad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Mostrar el gráfico
print(plot)
}
#Grafico comparando 2 ciudades variable numerica
compare_two_cities_violin <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2") {
# Crear un dataframe combinado con las 2 ciudades
combined_data <- rbind(
data.frame(Ciudad = city1_name, Valor = city1_data[[variable]]),
data.frame(Ciudad = city2_name, Valor = city2_data[[variable]])
)
# Eliminar NA
combined_data <- na.omit(combined_data)
# Crear el gráfico de violín
plot <- ggplot(combined_data, aes(x = Ciudad, y = Valor, fill = Ciudad)) +
geom_violin(trim = FALSE, alpha = 0.5) + # Gráfico de violín para mostrar la distribución
geom_jitter(width = 0.2, alpha = 0.3) + # Agrega puntos dispersos para ver datos individuales
labs(title = paste("Distribución de", variable, "entre", city1_name, "y", city2_name),
y = variable,
x = "Ciudad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Mostrar el gráfico
print(plot)
}
#Grafico de pastel por porcentaje
plot_pie_chart <- function(data, variable) {
# Verificar que la base de datos no sea NULL y contenga la variable
if (is.null(data) || !variable %in% names(data)) {
stop("La base de datos es NULL o la variable no existe en la base de datos.")
}
# Asegurarse de que la variable categórica esté en formato factor y eliminar NA
data <- data %>%
filter(!is.na(.[[variable]]))
data[[variable]] <- as.factor(data[[variable]])
# Calcular la frecuencia de cada categoría
category_counts <- data %>%
group_by(Categoria = .[[variable]]) %>%
summarise(Count = n(), .groups = 'drop') %>%
mutate(Proporcion = Count / sum(Count),
Porcentaje = Proporcion * 100)
# Crear el gráfico de pastel
plot <- ggplot(category_counts, aes(x = "", y = Proporcion, fill = Categoria)) +
geom_bar(width = 1, stat = "identity") +
coord_polar(theta = "y") +
labs(title = paste("Distribución de", variable, "en la Ciudad"),
y = "Proporción") +
theme_void() +
theme(legend.title = element_blank()) +
geom_text(aes(label = paste0(round(Porcentaje, 1), "%")),
position = position_stack(vjust = 0.5))
# Mostrar el gráfico
print(plot)
}
grafica_distribucion <- function(data, variable) {
# Asegurarse de que la variable existe en el dataframe
if (!(variable %in% names(data))) {
stop("La variable especificada no se encuentra en el dataframe.")
}
# Crear el gráfico
plot <- ggplot(data, aes(x = !!sym(variable))) +
geom_histogram(aes(y = ..density..), bins = 30, fill = "blue", color = "black", alpha = 0.7) +
geom_density(color = "red", size = 1) +
labs(title = paste("Distribución de", variable),
x = variable,
y = "Densidad") +
theme_minimal()
# Mostrar el gráfico
print(plot)
}
grafica_distribucion(ciudades_datos, “PUNT_GLOBAL”)
#APLICACION FUNCIONES
#PUNTAJE GLOBAL
``` r
estadistica_numerica_boxplot(barranquilla_datos, "PUNT_GLOBAL")
## $Media
## [1] 248.7109
##
## $Mediana
## [1] 245
##
## $Varianza
## [1] 2927.063
##
## $Desviacion
## [1] 54.10234
##
## $Minimo
## [1] 80
##
## $Maximo
## [1] 437
##
## $Cuartiles
## 25% 50% 75%
## 207 245 288
##
## $Percentiles
## 1% 99%
## 148.00 371.24
grafica_distribucion(barranquilla_datos, "PUNT_GLOBAL")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
estadistica_numerica_boxplot(cartagena_datos, "PUNT_GLOBAL")
## $Media
## [1] 236.1468
##
## $Mediana
## [1] 230
##
## $Varianza
## [1] 2856.757
##
## $Desviacion
## [1] 53.44863
##
## $Minimo
## [1] 88
##
## $Maximo
## [1] 475
##
## $Cuartiles
## 25% 50% 75%
## 195 230 273
##
## $Percentiles
## 1% 99%
## 145 367
grafica_distribucion(cartagena_datos, "PUNT_GLOBAL")
compare_two_cities_violin(barranquilla_datos, cartagena_datos, "PUNT_GLOBAL", city1_name = "Barranquilla", city2_name = "Cartagena")
#INFORMACION VARIABLE CATEGORICA POR CIUDAD
estadistica_categorica_barr(barranquilla_datos, "FAMI_NUMLIBROS")
## $Total
## [1] 15721
##
## $Moda
## [1] "0 A 10 LIBROS"
##
## $Frequencies
##
## 0 A 10 LIBROS 11 A 25 LIBROS 26 A 100 LIBROS MÁS DE 100 LIBROS
## 6389 5135 3231 966
estadistica_categorica_barr(cartagena_datos, "FAMI_NUMLIBROS")
## $Total
## [1] 12136
##
## $Moda
## [1] "0 A 10 LIBROS"
##
## $Frequencies
##
## 0 A 10 LIBROS 11 A 25 LIBROS 26 A 100 LIBROS MÁS DE 100 LIBROS
## 5325 3864 2205 742
estadistica_categorica_barr(barranquilla_datos, "ESTU_DEDICACIONINTERNET")
## $Total
## [1] 16061
##
## $Moda
## [1] "Entre 1 y 3 horas"
##
## $Frequencies
##
## 30 minutos o menos Entre 1 y 3 horas Entre 30 y 60 minutos
## 2175 5204 4068
## Más de 3 horas No Navega Internet
## 4105 509
estadistica_categorica_barr(cartagena_datos, "ESTU_DEDICACIONINTERNET")
## $Total
## [1] 12353
##
## $Moda
## [1] "Entre 1 y 3 horas"
##
## $Frequencies
##
## 30 minutos o menos Entre 1 y 3 horas Entre 30 y 60 minutos
## 2014 3903 3175
## Más de 3 horas No Navega Internet
## 2738 523
estadistica_categorica_barr(barranquilla_datos, "ESTU_DEDICACIONLECTURADIARIA")
## $Total
## [1] 16093
##
## $Moda
## [1] "30 minutos o menos"
##
## $Frequencies
##
## 30 minutos o menos Entre 1 y 2 horas
## 5657 1978
## Entre 30 y 60 minutos Más de 2 horas
## 4482 1058
## No leo por entretenimiento
## 2918
estadistica_categorica_barr(cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA")
## $Total
## [1] 12377
##
## $Moda
## [1] "30 minutos o menos"
##
## $Frequencies
##
## 30 minutos o menos Entre 1 y 2 horas
## 4531 1529
## Entre 30 y 60 minutos Más de 2 horas
## 3446 714
## No leo por entretenimiento
## 2157
plot_pie_chart(barranquilla_datos, "FAMI_TIENEINTERNET" )
plot_pie_chart(cartagena_datos, "FAMI_TIENEINTERNET" )
plot_pie_chart(barranquilla_datos, "FAMI_SITUACIONECONOMICA")
plot_pie_chart(cartagena_datos, "FAMI_SITUACIONECONOMICA")
#COMPARACIONES POR CIUDAD CON EL PUNTAJE GLOBAL
variablecategorica_vs_ptglobal(barranquilla_datos, "ESTU_DEDICACIONINTERNET")
variablecategorica_vs_ptglobal(cartagena_datos, "ESTU_DEDICACIONINTERNET")
variablecategorica_vs_ptglobal(barranquilla_datos, "ESTU_DEDICACIONLECTURADIARIA")
variablecategorica_vs_ptglobal(cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA")
variablecategorica_vs_ptglobal(barranquilla_datos, "FAMI_ESTRATOVIVIENDA")
variablecategorica_vs_ptglobal(cartagena_datos, "FAMI_ESTRATOVIVIENDA")
#COMPARACIONES CATEGORICAS ENTRE CIUDADES
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "FAMI_ESTRATOVIVIENDA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "FAMI_TIENEINTERNET", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "FAMI_SITUACIONECONOMICA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONINTERNET", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")
## R Markdown
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
``` r
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00