options(repos = c(CRAN = "https://cloud.r-project.org"))
Integrantes: - Johnn Harris Cirilo Morales - William Alexis Zegarra Montenegro
La manipulación efectiva de los dataframes es fundamental en el análisis de datos con R, ya que permite la organización, limpieza, transformación y extracción de información significativa de conjuntos de datos complejos. En este trabajo, exploraremos las diversas funciones, módulos y librerías disponibles en R para llevar a cabo estas tareas de manera eficiente y efectiva.
Las librerías en R son conjuntos de funciones y herramientas predefinidas que amplían las capacidades del lenguaje base. Entre las más destacadas para la manipulación de dataframes se encuentran dplyr, tidyr, readr y ggplot2, cada una diseñada para realizar tareas específicas dentro del análisis de datos. Estas librerías proporcionan funciones optimizadas y fáciles de usar que simplifican el proceso de manipulación y transformación de datos.
En este contexto, las funciones y módulos son elementos fundamentales. Las funciones son bloques de código reutilizable que pueden realizar una tarea específica, mientras que los módulos son conjuntos de funciones y variables que pueden ser utilizados como componentes independientes para llevar a cabo una tarea más compleja.
A lo largo de este trabajo, exploraremos ejemplos prácticos que utilizan estas librerías, funciones y módulos en R, destacando su importancia en la manipulación de dataframes y su papel en el análisis efectivo de datos.
Las librerías en R son colecciones de funciones y conjuntos de herramientas que amplían las capacidades del lenguaje base. Para la manipulación de dataframes, varias librerías son fundamentales:
dplyr: Proporciona un conjunto coherente de funciones para manipulación de datos, incluyendo operaciones como filtrado, selección, mutación, agrupación y resumen de datos.
Ejemplo:
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data <- iris
filtered_data <- data %>% filter(Sepal.Length > 5.0)
filtered_data
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 5.4 3.9 1.7 0.4 setosa
## 3 5.4 3.7 1.5 0.2 setosa
## 4 5.8 4.0 1.2 0.2 setosa
## 5 5.7 4.4 1.5 0.4 setosa
## 6 5.4 3.9 1.3 0.4 setosa
## 7 5.1 3.5 1.4 0.3 setosa
## 8 5.7 3.8 1.7 0.3 setosa
## 9 5.1 3.8 1.5 0.3 setosa
## 10 5.4 3.4 1.7 0.2 setosa
## 11 5.1 3.7 1.5 0.4 setosa
## 12 5.1 3.3 1.7 0.5 setosa
## 13 5.2 3.5 1.5 0.2 setosa
## 14 5.2 3.4 1.4 0.2 setosa
## 15 5.4 3.4 1.5 0.4 setosa
## 16 5.2 4.1 1.5 0.1 setosa
## 17 5.5 4.2 1.4 0.2 setosa
## 18 5.5 3.5 1.3 0.2 setosa
## 19 5.1 3.4 1.5 0.2 setosa
## 20 5.1 3.8 1.9 0.4 setosa
## 21 5.1 3.8 1.6 0.2 setosa
## 22 5.3 3.7 1.5 0.2 setosa
## 23 7.0 3.2 4.7 1.4 versicolor
## 24 6.4 3.2 4.5 1.5 versicolor
## 25 6.9 3.1 4.9 1.5 versicolor
## 26 5.5 2.3 4.0 1.3 versicolor
## 27 6.5 2.8 4.6 1.5 versicolor
## 28 5.7 2.8 4.5 1.3 versicolor
## 29 6.3 3.3 4.7 1.6 versicolor
## 30 6.6 2.9 4.6 1.3 versicolor
## 31 5.2 2.7 3.9 1.4 versicolor
## 32 5.9 3.0 4.2 1.5 versicolor
## 33 6.0 2.2 4.0 1.0 versicolor
## 34 6.1 2.9 4.7 1.4 versicolor
## 35 5.6 2.9 3.6 1.3 versicolor
## 36 6.7 3.1 4.4 1.4 versicolor
## 37 5.6 3.0 4.5 1.5 versicolor
## 38 5.8 2.7 4.1 1.0 versicolor
## 39 6.2 2.2 4.5 1.5 versicolor
## 40 5.6 2.5 3.9 1.1 versicolor
## 41 5.9 3.2 4.8 1.8 versicolor
## 42 6.1 2.8 4.0 1.3 versicolor
## 43 6.3 2.5 4.9 1.5 versicolor
## 44 6.1 2.8 4.7 1.2 versicolor
## 45 6.4 2.9 4.3 1.3 versicolor
## 46 6.6 3.0 4.4 1.4 versicolor
## 47 6.8 2.8 4.8 1.4 versicolor
## 48 6.7 3.0 5.0 1.7 versicolor
## 49 6.0 2.9 4.5 1.5 versicolor
## 50 5.7 2.6 3.5 1.0 versicolor
## 51 5.5 2.4 3.8 1.1 versicolor
## 52 5.5 2.4 3.7 1.0 versicolor
## 53 5.8 2.7 3.9 1.2 versicolor
## 54 6.0 2.7 5.1 1.6 versicolor
## 55 5.4 3.0 4.5 1.5 versicolor
## 56 6.0 3.4 4.5 1.6 versicolor
## 57 6.7 3.1 4.7 1.5 versicolor
## 58 6.3 2.3 4.4 1.3 versicolor
## 59 5.6 3.0 4.1 1.3 versicolor
## 60 5.5 2.5 4.0 1.3 versicolor
## 61 5.5 2.6 4.4 1.2 versicolor
## 62 6.1 3.0 4.6 1.4 versicolor
## 63 5.8 2.6 4.0 1.2 versicolor
## 64 5.6 2.7 4.2 1.3 versicolor
## 65 5.7 3.0 4.2 1.2 versicolor
## 66 5.7 2.9 4.2 1.3 versicolor
## 67 6.2 2.9 4.3 1.3 versicolor
## 68 5.1 2.5 3.0 1.1 versicolor
## 69 5.7 2.8 4.1 1.3 versicolor
## 70 6.3 3.3 6.0 2.5 virginica
## 71 5.8 2.7 5.1 1.9 virginica
## 72 7.1 3.0 5.9 2.1 virginica
## 73 6.3 2.9 5.6 1.8 virginica
## 74 6.5 3.0 5.8 2.2 virginica
## 75 7.6 3.0 6.6 2.1 virginica
## 76 7.3 2.9 6.3 1.8 virginica
## 77 6.7 2.5 5.8 1.8 virginica
## 78 7.2 3.6 6.1 2.5 virginica
## 79 6.5 3.2 5.1 2.0 virginica
## 80 6.4 2.7 5.3 1.9 virginica
## 81 6.8 3.0 5.5 2.1 virginica
## 82 5.7 2.5 5.0 2.0 virginica
## 83 5.8 2.8 5.1 2.4 virginica
## 84 6.4 3.2 5.3 2.3 virginica
## 85 6.5 3.0 5.5 1.8 virginica
## 86 7.7 3.8 6.7 2.2 virginica
## 87 7.7 2.6 6.9 2.3 virginica
## 88 6.0 2.2 5.0 1.5 virginica
## 89 6.9 3.2 5.7 2.3 virginica
## 90 5.6 2.8 4.9 2.0 virginica
## 91 7.7 2.8 6.7 2.0 virginica
## 92 6.3 2.7 4.9 1.8 virginica
## 93 6.7 3.3 5.7 2.1 virginica
## 94 7.2 3.2 6.0 1.8 virginica
## 95 6.2 2.8 4.8 1.8 virginica
## 96 6.1 3.0 4.9 1.8 virginica
## 97 6.4 2.8 5.6 2.1 virginica
## 98 7.2 3.0 5.8 1.6 virginica
## 99 7.4 2.8 6.1 1.9 virginica
## 100 7.9 3.8 6.4 2.0 virginica
## 101 6.4 2.8 5.6 2.2 virginica
## 102 6.3 2.8 5.1 1.5 virginica
## 103 6.1 2.6 5.6 1.4 virginica
## 104 7.7 3.0 6.1 2.3 virginica
## 105 6.3 3.4 5.6 2.4 virginica
## 106 6.4 3.1 5.5 1.8 virginica
## 107 6.0 3.0 4.8 1.8 virginica
## 108 6.9 3.1 5.4 2.1 virginica
## 109 6.7 3.1 5.6 2.4 virginica
## 110 6.9 3.1 5.1 2.3 virginica
## 111 5.8 2.7 5.1 1.9 virginica
## 112 6.8 3.2 5.9 2.3 virginica
## 113 6.7 3.3 5.7 2.5 virginica
## 114 6.7 3.0 5.2 2.3 virginica
## 115 6.3 2.5 5.0 1.9 virginica
## 116 6.5 3.0 5.2 2.0 virginica
## 117 6.2 3.4 5.4 2.3 virginica
## 118 5.9 3.0 5.1 1.8 virginica
tidyr: Orientada a la limpieza y reestructuración de datos. Facilita la transformación de datos de formato ancho a largo y viceversa.
Ejemplo:
library(tidyr)
data_wide <- data.frame(id = 1:3, A = c(5, NA, 10), B = c(NA, 8, 11))
data_long <- data_wide %>% gather(key = "variable", value = "value", -id, na.rm = TRUE)
data_long
## id variable value
## 1 1 A 5
## 3 3 A 10
## 5 2 B 8
## 6 3 B 11
data_wide
## id A B
## 1 1 5 NA
## 2 2 NA 8
## 3 3 10 11
ggplot2: Ideal para visualización de datos, permite crear gráficos de alta calidad de forma sencilla y flexible.
library(ggplot2)
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
geom_point() +
labs(title = "Relación entre Longitud y Ancho de Sépalos por Especie")
En R, las funciones son bloques de código reutilizables que realizan tareas específicas. Algunas funciones importantes dentro de las librerías mencionadas son:
dplyr: select(), filter(), mutate(), group_by(), summarize(). tidyr: gather(), spread(), separate(), unite(). readr: read_csv(), read_tsv(), read_delim(), read_excel(). ggplot2: ggplot(), geom_point(), geom_bar(), geom_line(), labs(). Estas funciones, entre otras, son esenciales para la manipulación, limpieza, análisis y visualización de datos en R. Su dominio y comprensión permiten trabajar de manera efectiva con dataframes y realizar análisis complejos de manera eficiente.
Definición de Dataframe y su Importancia en R Un dataframe es una estructura de datos tabular en R que organiza los datos en filas y columnas, similar a una tabla de una base de datos o una hoja de cálculo. Cada columna puede contener diferentes tipos de datos (numéricos, caracteres, factores, etc.) y se pueden realizar operaciones sobre estos datos de manera eficiente. Los dataframes son fundamentales en R ya que proporcionan una forma flexible y poderosa de manejar y analizar datos.
Ejemplos prácticos de creación de dataframes en R:
# Creamos un dataframe manualmente
datos <- data.frame(
ID = c(1, 2, 3, 4),
Nombre = c("Juan", "María", "Pedro", "Luis"),
Edad = c(25, 30, 28, 22)
)
datos
## ID Nombre Edad
## 1 1 Juan 25
## 2 2 María 30
## 3 3 Pedro 28
## 4 4 Luis 22
Operaciones Básicas de Manipulación de Dataframes:
datos_filtrados <- datos[datos$Edad > 25, ]
datos_filtrados
## ID Nombre Edad
## 2 2 María 30
## 3 3 Pedro 28
columnas_seleccionadas <- datos[, c("ID", "Nombre")]
columnas_seleccionadas
## ID Nombre
## 1 1 Juan
## 2 2 María
## 3 3 Pedro
## 4 4 Luis
datos$Nueva_Columna <- c("Valor1", "Valor2", "Valor3", "Valor4")
datos
## ID Nombre Edad Nueva_Columna
## 1 1 Juan 25 Valor1
## 2 2 María 30 Valor2
## 3 3 Pedro 28 Valor3
## 4 4 Luis 22 Valor4
El flujo general del proceso de análisis de datos implica varias etapas, desde la importación de datos hasta la visualización y la generación de informes. Veamos una explicación de estas etapas junto con ejemplos concretos utilizando dataframes en R:
Importación de datos En esta etapa, se importan los datos desde diversas fuentes (archivos CSV, Excel, bases de datos, etc.) hacia R para su posterior análisis.
Exploración y limpieza de datos
Después de la importación, se exploran los datos para comprender su estructura y calidad. Se realizan tareas de limpieza para tratar valores faltantes, eliminar duplicados y asegurar la coherencia de los datos.
Ejemplo de exploración y limpieza básica:
# Vemos las primeras filas de los datos
head(datos)
## ID Nombre Edad Nueva_Columna
## 1 1 Juan 25 Valor1
## 2 2 María 30 Valor2
## 3 3 Pedro 28 Valor3
## 4 4 Luis 22 Valor4
# Verificamos valores faltantes
summary(datos)
## ID Nombre Edad Nueva_Columna
## Min. :1.00 Length:4 Min. :22.00 Length:4
## 1st Qu.:1.75 Class :character 1st Qu.:24.25 Class :character
## Median :2.50 Mode :character Median :26.50 Mode :character
## Mean :2.50 Mean :26.25
## 3rd Qu.:3.25 3rd Qu.:28.50
## Max. :4.00 Max. :30.00
# Eliminamos filas con valores NA
datos_sin_na <- na.omit(datos)
# Eliminamos duplicados
datos_sin_duplicados <- unique(datos)
Ejemplo de manipulación y transformación de datos:
# Filtramos datos basados en una condición
datos_filtrados <- datos[datos$Edad > 25, c("Nombre", "Edad")]
datos_filtrados
## Nombre Edad
## 2 María 30
## 3 Pedro 28
# Calculamos el promedio de edad de todo el conjunto de datos
promedio_edad <- mean(datos$Edad, na.rm = TRUE)
promedio_edad
## [1] 26.25
Ejemplo de análisis básico:
# Calculamos estadísticas descriptivas
summary(datos$Edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 22.00 24.25 26.50 26.25 28.50 30.00
# Crear un gráfico de dispersión entre edad y salario
plot(datos$Edad, datos$Salario, xlab = "Edad", ylab = "Salario", main = "Relación entre Edad y Salario")
Ejemplo de generación de un informe con RMarkdown:
Crear un archivo .Rmd (R Markdown) donde se incluyen los códigos anteriores junto con explicaciones y resultados. Luego, renderizar el documento para obtener un informe en diferentes formatos (PDF, HTML, Word, etc.).
Este flujo representa una secuencia básica de pasos en el proceso de análisis de datos utilizando dataframes en R.
La importación de datos desde diversas fuentes es crucial en el análisis de datos. En R, existen múltiples funciones y paquetes específicos para importar datos desde diferentes tipos de archivos y fuentes. Veamos cómo podemos importar datos desde varios formatos utilizando algunas funciones comunes
# Importamos datos desde un archivo CSV
# Creamos un dataframe de ejemplo
datos_ejemplo <- data.frame(
ID = 1:5,
Nombre = c("Juan", "María", "Pedro", "Luis", "Ana"),
Edad = c(25, 30, 28, 22, 27)
)
# Escribimos el dataframe en un archivo CSV
write.csv(datos_ejemplo, "datos_ejemplo.csv", row.names = FALSE)
datos_csv <- read.csv("datos_ejemplo.csv")
datos_csv
## ID Nombre Edad
## 1 1 Juan 25
## 2 2 María 30
## 3 3 Pedro 28
## 4 4 Luis 22
## 5 5 Ana 27
# Creammos un archivo xlsx
library(writexl)
# Creamos un dataframe de ejemplo
datos_ejemplo_excel <- data.frame(
ID = 1:5,
Nombre = c("Juan", "María", "Pedro", "Luis", "Ana"),
Edad = c(25, 30, 28, 22, 27)
)
write_xlsx(datos_ejemplo_excel, path = "datos_ejemplo.xlsx")
library(readxl)
# Importamos datos desde un archivo de Excel
datos_excel <- read_excel("datos_ejemplo.xlsx", sheet = 1)
head(datos_excel)
## # A tibble: 5 × 3
## ID Nombre Edad
## <dbl> <chr> <dbl>
## 1 1 Juan 25
## 2 2 María 30
## 3 3 Pedro 28
## 4 4 Luis 22
## 5 5 Ana 27
#Nuevamente creemos un archivo JSON para uarlo como ejemplo
# Datos de ejemplo
datos_ejemplo <- list(
nombre = c("Juan", "María", "Pedro"),
edad = c(25, 30, 28),
ciudad = c("Ciudad A", "Ciudad B", "Ciudad C")
)
jsonlite::write_json(datos_ejemplo, "datos_ejemplo.json")
library(jsonlite)
# Importar datos desde un archivo JSON
datos_json <- fromJSON("datos_ejemplo.json")
head(datos_json)
## $nombre
## [1] "Juan" "María" "Pedro"
##
## $edad
## [1] 25 30 28
##
## $ciudad
## [1] "Ciudad A" "Ciudad B" "Ciudad C"
library(RMySQL)
# Definir los detalles de la conexión
con <- dbConnect(MySQL(),
user = "tu_usuario",
password = "tu_contraseña",
dbname = "tu_basededatos",
host = "localhost")
# Realizar consultas u operaciones en la base de datos
resultado <- dbGetQuery(con, "SELECT * FROM tu_tabla")
# Cerrar la conexión cuando hayas terminado
dbDisconnect(con)
Estos son solo algunos ejemplos básicos de cómo importar datos desde diferentes fuentes utilizando funciones y paquetes comunes en R.
El manejo de datos en R se refiere al conjunto de acciones y técnicas que se utilizan para preparar, limpiar y manipular los datos con el objetivo de hacerlos adecuados para el análisis y modelado estadístico.
Este proceso es fundamental para garantizar la calidad de los datos y obtener resultados confiables en cualquier análisis posterior.
Ofrece una amplia variedad de herramientas y técnicas que permiten a los analistas de datos realizar tareas específicas para preparar los datos de manera efectiva.
#install.packages("readr")
#library(readr)
install.packages("readr")
## Installing package into 'C:/Users/adhem/AppData/Local/R/win-library/4.2'
## (as 'lib' is unspecified)
## package 'readr' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'readr'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\adhem\AppData\Local\R\win-library\4.2\00LOCK\readr\libs\x64\readr.dll
## a C:\Users\adhem\AppData\Local\R\win-library\4.2\readr\libs\x64\readr.dll:
## Permission denied
## Warning: restored 'readr'
##
## The downloaded binary packages are in
## C:\Users\adhem\AppData\Local\Temp\RtmpotR2pD\downloaded_packages
library(readr)
url <- "https://raw.githubusercontent.com/jmcastagnetto/covid-19-peru-vacunas/main/datos/vacunas_covid_rangoedad_deciles.csv"
dataGithub_csv <- read_csv(url)
## Rows: 4637 Columns: 11
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): rango_edad
## dbl (8): epi_year, epi_week, complete_epi_week, dosis, n, n_acum, pob2023, ...
## date (2): fecha_corte, last_day_of_epi_week
##
## ℹ 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.
# Muestra las primeras filas del data frame
head(dataGithub_csv)
## # A tibble: 6 × 11
## fecha_corte epi_year epi_week last_day_of_epi_week complete_epi_week
## <date> <dbl> <dbl> <date> <dbl>
## 1 2023-11-14 2021 6 2021-02-13 1
## 2 2023-11-14 2021 6 2021-02-13 1
## 3 2023-11-14 2021 6 2021-02-13 1
## 4 2023-11-14 2021 6 2021-02-13 1
## 5 2023-11-14 2021 6 2021-02-13 1
## 6 2023-11-14 2021 6 2021-02-13 1
## # ℹ 6 more variables: rango_edad <chr>, dosis <dbl>, n <dbl>, n_acum <dbl>,
## # pob2023 <dbl>, pct_acum <dbl>
# Identificación de datos faltantes
any_missing <- any(is.na(dataGithub_csv))
print(paste("¿Hay datos faltantes en el dataframe? ", any_missing))
## [1] "¿Hay datos faltantes en el dataframe? TRUE"
# Cantidad de datos faltantes por columna
missing_count <- sapply(dataGithub_csv, function(x) sum(is.na(x)))
print("Cantidad de datos faltantes por columna:")
## [1] "Cantidad de datos faltantes por columna:"
print(missing_count)
## fecha_corte epi_year epi_week
## 0 0 0
## last_day_of_epi_week complete_epi_week rango_edad
## 0 0 0
## dosis n n_acum
## 0 0 0
## pob2023 pct_acum
## 21 21
# Eliminar filas con datos faltantes
datos_no_missing <- na.omit(dataGithub_csv)
print("Dataframe sin datos faltantes:")
## [1] "Dataframe sin datos faltantes:"
print(datos_no_missing)
## # A tibble: 4,616 × 11
## fecha_corte epi_year epi_week last_day_of_epi_week complete_epi_week
## <date> <dbl> <dbl> <date> <dbl>
## 1 2023-11-14 2021 6 2021-02-13 1
## 2 2023-11-14 2021 6 2021-02-13 1
## 3 2023-11-14 2021 6 2021-02-13 1
## 4 2023-11-14 2021 6 2021-02-13 1
## 5 2023-11-14 2021 6 2021-02-13 1
## 6 2023-11-14 2021 6 2021-02-13 1
## 7 2023-11-14 2021 6 2021-02-13 1
## 8 2023-11-14 2021 6 2021-02-13 1
## 9 2023-11-14 2021 6 2021-02-13 1
## 10 2023-11-14 2021 7 2021-02-20 1
## # ℹ 4,606 more rows
## # ℹ 6 more variables: rango_edad <chr>, dosis <dbl>, n <dbl>, n_acum <dbl>,
## # pob2023 <dbl>, pct_acum <dbl>
Este método solo se usa dependiendo del análisis que estés realizando y la cantidad de datos faltantes en tu conjunto de datos.
# Crear una copia del dataframe para no modificar el original
df_imputado <- dataGithub_csv
# Verificar si hay valores faltantes antes de la imputación
if (any(is.na(df_imputado$weight))) {
# Imputar valores faltantes en la columna 'weight' usando la media
media_peso <- mean(df_imputado$weight, na.rm = TRUE)
# Imputar valores solo si hay valores faltantes
df_imputado$weight[is.na(df_imputado$weight)] <- media_peso
print("Valores faltantes imputados en la columna 'weight'.")
} else {
print("No hay valores faltantes en la columna 'weight'.")
}
## Warning: Unknown or uninitialised column: `weight`.
## [1] "No hay valores faltantes en la columna 'weight'."
# Imprimir el dataframe con valores imputados
cat("Dataframe con valores imputados:\n")
## Dataframe con valores imputados:
print(df_imputado)
## # A tibble: 4,637 × 11
## fecha_corte epi_year epi_week last_day_of_epi_week complete_epi_week
## <date> <dbl> <dbl> <date> <dbl>
## 1 2023-11-14 2021 6 2021-02-13 1
## 2 2023-11-14 2021 6 2021-02-13 1
## 3 2023-11-14 2021 6 2021-02-13 1
## 4 2023-11-14 2021 6 2021-02-13 1
## 5 2023-11-14 2021 6 2021-02-13 1
## 6 2023-11-14 2021 6 2021-02-13 1
## 7 2023-11-14 2021 6 2021-02-13 1
## 8 2023-11-14 2021 6 2021-02-13 1
## 9 2023-11-14 2021 6 2021-02-13 1
## 10 2023-11-14 2021 7 2021-02-20 1
## # ℹ 4,627 more rows
## # ℹ 6 more variables: rango_edad <chr>, dosis <dbl>, n <dbl>, n_acum <dbl>,
## # pob2023 <dbl>, pct_acum <dbl>
Al momento de encontrar datos faltantes, tratamos de imputar con la media de la respectiva columna de la base de datos.
Los outliers son observaciones que se desvían significativamente de la tendencia general de los datos. Pueden indicar errores en la recolección de datos o patrones interesantes en los datos. Inconsistencias se refieren a datos que no cumplen con las expectativas o reglas definidas para el conjunto de datos.
Este proceso acondiciona el conjunto de datos para su análisis e Involucra la identificación y la transformación de errores en los datos mediante el formato que se vea conveniente el cual permitan trabajarlos de manera efectiva.
La visualización de datos es la representación gráfica de información y datos.
Al utilizar elementos visuales como cuadros, gráficos y mapas, las herramientas de visualización de datos brindan una manera fácil de usar de ver y comprender tendencias, desviaciones y patrones en los datos.
Las herramientas y técnicas de visualización de datos son fundamentales para analizar grandes volúmenes de datos y tomar decisiones.
Para estos casos presentaremos lo siguientes casos:
Este punto implica explorar y representar gráficamente una sola variable a la vez.
R proporciona varias herramientas y paquetes para realizar estas visualizaciones de manera efectiva.
# install.packages("ggplot2")
library(ggplot2)
# Genera datos de ejemplo
set.seed(123)
datos <- data.frame(variable = rnorm(100))
# Histograma
ggplot(datos, aes(x = variable)) +
geom_histogram(binwidth = 0.5, fill = "blue", color = "black", alpha = 0.7) +
labs(title = "Histograma de datos univariados", x = "Variable")
# Diagrama de caja (boxplot)
ggplot(datos, aes(y = variable)) +
geom_boxplot(fill = "green", color = "black") +
labs(title = "Diagrama de caja de datos univariados", y = "Variable")
# Gráfico de densidad
ggplot(datos, aes(x = variable)) +
geom_density(fill = "orange", color = "black") +
labs(title = "Gráfico de densidad de datos univariados", x = "Variable")
La visualización de datos bivariados implica explorar y representar gráficamente la relación entre dos variables.
De la misma manera hacemos uso de ggplot2:
library(ggplot2)
# Genera datos de ejemplo
set.seed(123)
datos <- data.frame(x = rnorm(100), y = rnorm(100))
# Gráfico de dispersión
ggplot(datos, aes(x = x, y = y)) +
geom_point(color = "red") +
labs(title = "Gráfico de dispersión de datos bivariados", x = "Variable X", y = "Variable Y")
# Genera datos de ejemplo con dos grupos
datos <- data.frame(grupo = rep(c("A", "B"), each = 50), valor = rnorm(100))
# Diagrama de caja bivariado
ggplot(datos, aes(x = grupo, y = valor, fill = grupo)) +
geom_boxplot() +
labs(title = "Diagrama de caja bivariado", x = "Grupo", y = "Valor")
library(hexbin)
# Crear datos de ejemplo
set.seed(123)
datos <- data.frame(
x = rnorm(50),
y = rnorm(50)
)
# Crear el gráfico de hexágonos
h <- hexbin(datos$x, datos$y, xbins = 20)
# Configurar el diseño del gráfico
par(mar = c(5, 4, 4, 2) + 0.1)
plot(h, main = "Gráfico de hexágonos de datos bivariados", xlab = "Variable X", ylab = "Variable Y")
Este caso nos conlleva a explorar y representar gráficamente las relaciones entre tres o más variables.
Una herramienta útil para visualizar datos multivariados en R es el paquete scatterplot3d
# Genera datos de ejemplo con cuatro variables
set.seed(123)
datos_multivariados <- data.frame(x = rnorm(100), y = rnorm(100), z = rnorm(100), w = rnorm(100))
# Gráfico de pares
pairs(datos_multivariados, pch = 16, col = "pink")
La visualización de datos avanzados nos permite visualizar técnicas más complejas y avanzadas para representar información de manera efectiva.
library(ggplot2)
# Genera datos de ejemplo con dos grupos
set.seed(123)
datos <- data.frame(grupo = rep(c("D", "c"), each = 100), valor = rnorm(200))
# Gráfico de violín
ggplot(datos, aes(x = grupo, y = valor, fill = grupo)) +
geom_violin(trim = FALSE) +
labs(title = "Gráfico de Violín", x = "Grupo", y = "Valor")
Damos tambien un ejemplo adicional a la sintaxis que corrobore el uso de varias imagenes creando primero un dataframe:
library(ggplot2)
set.seed(1234)
df <- data.frame(
sex=factor(rep(c("Femenino", "Masculino"), each=200)),
weight=round(c(rnorm(200, mean=55, sd=5), rnorm(200, mean=65, sd=5)))
)
head(df)
## sex weight
## 1 Femenino 49
## 2 Femenino 56
## 3 Femenino 60
## 4 Femenino 43
## 5 Femenino 57
## 6 Femenino 58
#histograma normal
p<-ggplot(df, aes(x=weight)) +
geom_histogram(aes(y=..density..), colour="black", fill="white")+
geom_density(alpha=.2, fill="orange")
p7<-p+ geom_vline(aes(xintercept=mean(weight)),
color="green", linetype="dashed", size=1)
## 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.
p7
## 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.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p1<-ggplot(df, aes(x=weight,fill=sex, color=sex)) +
geom_histogram(alpha=0.6, position="identity")+
geom_density(alpha=.2)
p1
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p2<-ggplot(df, aes(x=weight,fill=sex, color=sex)) +
geom_histogram(aes(y=..density..), position="identity", alpha=0.5)+
geom_density(alpha=.2)
p2
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
##
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
mu <- ddply(df, "sex", summarise, grp.mean=mean(weight))
head(mu)
## sex grp.mean
## 1 Femenino 54.70
## 2 Masculino 65.36
p3<-p2+geom_vline(data=mu, aes(xintercept=grp.mean, color=sex),
linetype="dashed")+
theme_minimal()
p3
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p4<-p<-ggplot(df, aes(x=weight,fill=sex, color=sex)) +
geom_histogram(position="dodge",binwidth = 1)+
geom_vline(data=mu, aes(xintercept=grp.mean, color=sex),
linetype="dashed")
p4
p5<-p4+ scale_color_manual(values=c("yellow", "red", "blue"))+
scale_fill_manual(values=c("yellow", "red", "blue"))
p5
p6<-p4+scale_color_brewer(palette="Dark2")+
scale_fill_brewer(palette="Dark2")
p6
p
p1
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p2
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p3
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p4
p5
p6
p7
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
En este caso el uso de las librerias “ggplot2” y “plyr” fueron esenciales para la creación de los graficos y la manipulación de los datos impuestos por el dataframe del ejemplo, especificamente en el orden sucitado.
De manera general, según IBM, es una tendencia en el avance de la tecnología hacia un nuevo enfoque de entendimiento y toma de decisiones, utilizada para describir enormes cantidades de datos que tomaría demasiado tiempo, cargarlos en una base de datos relacional para su análisis.
Por lo tanto, este concepto aplica para todos aquellos datos que no puede ser procesados o analizados utilizando procesos o herramientas tradicionales.
En el mundo moderno de Big Data, estos generan una saturación o abundancia en el mercado ya quer son tan prolíficos porque los datos no estructurados pueden ser de cualquier índole:
Multimedia, imágenes, audio, datos de sensor, datos de texto y mucho más.
Estos poseen una estructura interna, pero no están predefinidos por modelos de datos. Pueden generarlos los seres humanos o una máquina, en formato textual o no textual.
Algunas tareas comunes en la manipulación de datos no estructurados incluyen:
Extracción de información: Identificar y extraer datos relevantes de documentos de texto, imágenes, videos, o cualquier otro formato no estructurado.
Transformación de formatos: Convertir datos no estructurados en formatos estructurados para facilitar su análisis. Por ejemplo, convertir texto no estructurado en datos tabulares.
Análisis de sentimientos: Evaluar la actitud, opinión o emoción expresada en texto no estructurado, como reseñas de productos o comentarios en redes sociales.
Reconocimiento de patrones: Identificar patrones en datos no estructurados, como reconocer rostros en imágenes o patrones en datos de series temporales.
Procesamiento de imágenes y videos: Extraer características, reconocer objetos, o realizar análisis avanzados en imágenes y videos.
Procesamiento de voz y audio: Convertir señales de audio en texto, reconocer patrones en grabaciones, entre otras tareas.
R ofrece una amplia variedad de funciones y librerías para manipular datos, lo que proporciona flexibilidad y versatilidad en el análisis; sin embargo, la cantidad de librerias y paquetes que se lleguen a ver son confusos y a su vez sirven como subconjunto de otros paquetes para su ejecución.
Los DataFrames en R son potentes para organizar y analizar datos tabulares pero cabe resaltar que al usar una base de datos extremadamente grande, el mismo programa presente errores al ejecutarlo o simplemente no requiere de toda la data para pesentar el proyecto
Tener un flujo bien definido facilita el análisis ya que puede incluir pasos como carga de datos, exploración, manipulación y visualización, esto colleva a que el mismo programa sea riguroso con lo solicitado y a su vez cueste adaptarse a las situaciones del problema.
Candela, G., Sáez, M. D., Escobar, M. P., & Such, M. M. (2021). Reutilizar colecciones digitales: GLAM Labs. The Programming Historian en Español.
Serra Gil, J. (2023). Investigación de sistemas de almacenamiento big data como apoyo a la generación de analíticas y modelos de aprendizaje automático en imagen médica (Doctoral dissertation, Universitat Politècnica de València).
Sarkar, D. (2008). Lattice: Multivariate Data Visualization with R. Springer. Friendly, M., & Kwan, E. (2018). Data Visualization with R: 100 Examples. CRC Press.
Wickham, H. y Grolemund, G. (2016). R para ciencia de datos: importar, ordenar, transformar, visualizar y modelar datos. Medios O’Reilly.
Maurandi López, A., & González Vidal, A. (2022). Análisis de datos y métodos estadísticos con R.
Charte, D., & Charte, F. (2015). mldr: Paquete R para Exploración de Datos Multietiqueta. In Proc. 16th Conferencia de la Asociación Española Para la Inteligencia Artificial (CAEPIA) (pp. 695-704).