options(repos = c(CRAN = "https://cloud.r-project.org"))

Integrantes: - Johnn Harris Cirilo Morales - William Alexis Zegarra Montenegro

Introducción

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.

Funciones, Módulos y librerías en R

Librerías en R

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")

Funciones en R

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.

Dataframe, Manipulación e introducción al análisis de datos

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:

  1. Filtrado
datos_filtrados <- datos[datos$Edad > 25, ]
datos_filtrados
##   ID Nombre Edad
## 2  2  María   30
## 3  3  Pedro   28
  1. Columna
columnas_seleccionadas <- datos[, c("ID", "Nombre")]
columnas_seleccionadas
##   ID Nombre
## 1  1   Juan
## 2  2  María
## 3  3  Pedro
## 4  4   Luis
  1. Adición de Columnas:
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

Flujo del proceso de análisis de datos

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:

  1. 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.

  2. 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)
  1. Manipulación y transformación de datos En esta etapa, se realizan operaciones para manipular y transformar los datos según las necesidades del análisis, como filtrado, selección de columnas, agregaciones, etc.

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
  1. Análisis de datos: En esta etapa se realizan análisis estadísticos, modelado predictivo u otras técnicas para extraer información y responder preguntas específicas.

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
  1. Visualización de datos
# 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")

  1. Generación de informes o Presentaciones Finalmente, se pueden generar informes, presentaciones o dashboards para compartir los hallazgos y conclusiones del análisis.

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.

Importación de datos

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

  1. Desde archivos CSV Los archivos CSV (Comma-Separated Values) son comunes y fáciles de trabajar en R.
# 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
  1. Desde archivos Excel El paquete readxl es útil para leer datos de hojas de cálculo de Excel.
# 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
  1. Desde archivos JSON El paquete jsonlite es utilizado para trabajar con datos en formato JSON.
#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"
  1. Desde Base de datos SQL Para importar datos desde bases de datos SQL, se utilizan diferentes paquetes dependiendo del tipo de base de datos. Por ejemplo, RMySQL para MySQL, RODBC para conexiones ODBC, RPostgreSQL para PostgreSQL, etc.
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.

Manejo de datos

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.

a. Identificación y Manejo de Datos Missing:

  1. Carga de conjunto de datos:
#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>
  1. Eliminación de datos faltantes
# 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.

  1. Imputación de valores
# 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.

b. Identificación y Manejo de Datos Outlier e Inconsistentes:

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.

c. Limpieza de Datos y Preparación 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.

Visualización de Datos

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:

a. Visualización de Datos Univariados

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.

  1. Usando ggplot2:
# 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")

b. Visualización de Datos Bivariados

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:

  1. Gráfico de dispersión (Scatter Plot):
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")

  1. Diagrama de caja bivariado:
# 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")

  1. Gráfico de hexágonos (Hexbin plot):
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")

c. Visualización de datos bivariados multivariados

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

  1. Gráfico de pares:
# 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")

d. Visualización de datos avanzados

La visualización de datos avanzados nos permite visualizar técnicas más complejas y avanzadas para representar información de manera efectiva.

  1. Gráficos de Violín:
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.

Manipulación de datos no estructurados

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:

  1. Extracción de información: Identificar y extraer datos relevantes de documentos de texto, imágenes, videos, o cualquier otro formato no estructurado.

  2. 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.

  3. 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.

  4. Reconocimiento de patrones: Identificar patrones en datos no estructurados, como reconocer rostros en imágenes o patrones en datos de series temporales.

  5. Procesamiento de imágenes y videos: Extraer características, reconocer objetos, o realizar análisis avanzados en imágenes y videos.

  6. Procesamiento de voz y audio: Convertir señales de audio en texto, reconocer patrones en grabaciones, entre otras tareas.

Conclusiones

Referencias