TRABAJO FINAL DE LENGUAJE DE PROGRAMACIÓN ESTADÍSTICA

Integrantes:

Manipulación de dataframe

Funciones de R

Una función proporciona la capacidad de escribir un fragmento de código que puede ser parametrizado, lo que permite ejecutar el mismo bloque de código para diferentes conjuntos de datos. Conceptualmente, una función puede considerarse como un subprograma dedicado a resolver una tarea específica. La utilización de funciones se justifica por su capacidad para estructurar y organizar el código de un programa.

Cuando se enfrenta a la resolución de un problema complejo, en lugar de abordarlo con un programa extenso, es más efectivo descomponerlo en subproblemas más manejables. Estos subproblemas deben tener una complejidad moderada, permitiendo que sean resueltos por subprogramas, como las funciones, que son más simples. Por lo tanto, en lugar de depender de un programa extenso para resolver un problema complicado, se utilizan diversos subprogramas para abordar tareas más simples, combinándolos para lograr una solución final más simple y comprensible.

La creación de funciones sigue una estructura general que se expresa de la siguiente manera:

nombrefuncion = function(argumento1, argumento2, ...) {
  # Cuerpo de la función
  # return(expresión) # Opcional
}

nombrefuncion: es el nombre que se elige para la función. function es una palabra reservada que indica la creación de la función. Los argumentos, como argumento1, argumento2, y otros que pueden seguir, no son obligatorios. El … indica la posibilidad de incluir argumentos adicionales que no se esperan pero que el usuario puede proporcionar si es necesario. Los argumentos pueden ser inicializados con valores predeterminados para facilitar su uso frecuente. El cuerpo de la función contiene las instrucciones que la función llevará a cabo. La especificación de un valor para devolver se realiza con return(expresión), siendo la expresión el nombre de una variable dentro del cuerpo de la función. Esto es opcional, ya que una función puede no devolver nada. Operaciones aritméticas entre dos vectores, tales como +, -, *, /, ^, etc., actúan de manera componente a componente, generando un vector numérico con la longitud del más extenso de los argumentos. En casos de longitudes diferentes, el vector más corto se replica para permitir la continuidad de las operaciones.

Funciones matemáticas aplicadas a un vector, como sqrt(), log(), exp(), sin(), abs(), entre otras, también operan de forma componente a componente, devolviendo un vector de igual longitud que el argumento.

Los operadores de comparación, como <, ==, >, <=, >=, !=, actúan componente a componente y generan un vector de valores lógicos. En situaciones de longitud desigual, el vector más corto se replica para facilitar la comparación.

Operadores lógicos entre dos vectores, como &, |, xor(), ! (and, or, or exclusivo, not), actúan componente a componente, generando un vector numérico con la longitud del más largo de los argumentos. Cuando los vectores tienen longitudes distintas, el más corto se replica para mantener la coherencia en las operaciones.

Además, hay otras funciones útiles para manipular vectores:

  • ls() sin argumentos devuelve el vector de nombres de las variables definidas.
  • a:b crea un vector de enteros consecutivos, desde a hasta b.
  • c(...) concatena los argumentos (constantes y/o vectores) en un solo vector.
  • length(x) devuelve la longitud del vector x.
  • sum(...) suma las componentes de los vectores argumentos.
  • prod(...) calcula el producto de las componentes de los vectores argumentos.
  • sort(x, decreasing=FALSE) devuelve un vector reordenado de manera creciente (o decreciente si se cambia el argumento decreasing a TRUE).
  • order(x, decreasing=TRUE) devuelve el vector de posiciones que representan la ordenación creciente o decreciente del vector x.
  • min(...) devuelve el valor mínimo de los argumentos.
  • max(...) devuelve el valor máximo de los argumentos.
  • which(x) devuelve el vector de posiciones donde el vector de lógicos x es TRUE, indicando qué componentes cumplen la comparación.
  • diff(x) devuelve un vector con las diferencias (incrementos) de cada componente respecto al anterior.

Ejemplo:

# Suma
suma <- 2 + 3

# Resta
resta <- 5 - 2

# Multiplicación
multiplicacion <- 4 * 6

# División
division <- 8 / 2

R es un lenguaje de programación estadística ampliamente utilizado, y ofrece una variedad de funciones estadísticas para realizar análisis de datos. Aquí te proporcionaré algunos ejemplos de funciones estadísticas comunes en R:

  1. Media:
#mean(datos)

2.Mediana:

#median(datos)
  1. Varianza:
#var(datos)
  1. Desviación estándar:
#sd(datos)
  1. Cuantiles:
# Cuantil 25%
#quantile(datos, 0.25)

# Cuantil 75%
#quantile(datos, 0.75)
  1. Histograma:
# hist(datos)
  1. Boxplot (gráfico de caja):
# boxplot(datos)
  1. Correlación:
# cor(datos1, datos2)

Módulos

Los módulos principales de RStudio incluyen:

El Editor de Script es la interfaz principal donde puedes escribir y editar tu código en R. Proporciona funciones como resaltado de sintaxis, autocompletado y numeración de líneas para facilitar la escritura de código.

La Consola de R permite la ejecución de comandos de R de forma interactiva. Puedes escribir comandos directamente en la consola y ver los resultados de inmediato.

RStudio proporciona pestañas para ver el historial de comandos que has ejecutado, así como el espacio de trabajo actual que muestra los objetos (como variables) que están cargados en la memoria.

El Explorador de Archivos y Directorios permite navegar a través de los archivos y directorios de tu sistema. También puedes importar, exportar y gestionar archivos directamente desde el IDE.

RStudio tiene una ventana de Gráficos que muestra los resultados de las visualizaciones generadas por R. Puedes exportar estos gráficos en varios formatos.

La pestaña “Paquetes” facilita la instalación, carga y gestión de paquetes de R. También proporciona información sobre los paquetes instalados.

La pestaña “Ayuda y Plots” ofrece acceso rápido a la documentación de R y a la visualización de gráficos. Puedes ver la ayuda para funciones específicas y explorar gráficos generados durante la sesión.

El panel de Entorno Global y Ambiente muestra información sobre las variables y objetos en el entorno global. También te permite gestionar y explorar los entornos de trabajo.

El Historial de Sesiones muestra un historial de las sesiones de R anteriores, lo que puede ser útil para revisar comandos y resultados de sesiones anteriores.

La Terminal permite interactuar con el sistema operativo desde el IDE mediante una interfaz de terminal.

Librerías principales en R

ggplot2:

Es un paquete de visualización de datos de código abierto para el lenguaje de programación estadística R. Se basa en la “Gramática de la visualización de datos”, una teoría que describe cómo se pueden construir gráficos a partir de datos.Además, proporciona una forma flexible y potente de crear gráficos, con una amplia gama de opciones de personalización.

Para instalar ggplot2, abra la ventana de consola R y escriba el siguiente comando:

#install.packages("ggplot2")

Una vez que ggplot2 esté instalado, puede cargarlo en su entorno de R con el siguiente comando:

#library(ggplot2)

Tidyverse:

Es una colección de paquetes para R diseñados para la ciencia de datos. Todos los paquetes comparten una filosofía de diseño, una gramática y estructuras de datos subyacentes. Digite el código:

# install.packages("tidyverse")

tidyr:

Permite realizar transformaciones en un data frame con el fin de poder transformarlo a la estructura que deseemos y usarlo. Digite el código:

# install.packages("tidyr")

Una vez instalada la librería, la primera vez digite:

#library(tidyr)

dplyr:

Conjunto de funciones diseñadas para permitir la manipulación de marcos de datos de una manera intuitiva y fácil de usar.

Las funciones de dplyr se pueden agrupar en cuatro categorías principales:

  • Selección: Estas funciones permiten seleccionar variables o filas de un marco de datos.

  • Manipulación: Estas funciones permiten modificar la estructura de un marco de datos.

  • Agrupación: Estas funciones permiten agrupar datos por una o más variables.

  • Agregación: Estas funciones permiten calcular estadísticas sobre grupos de datos.

Digite el código:

# install.packages("dplyr")

Una vez instalada la librería, la primera vez digite:

# library(dplyr)

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

Un DataFrame es una estructura de datos tabular bidimensional en R que puede contener datos de diferentes tipos. Es similar a una hoja de cálculo o a una tabla en una base de datos relacional. Cada columna en un DataFrame puede contener datos de un tipo específico (por ejemplo, numérico, de caracteres, lógico, etc.). Los DataFrames son parte del paquete base de R y son ampliamente utilizados en el análisis de datos.

Manipulación de Datos: La manipulación de datos en R implica realizar operaciones para modificar, transformar y trabajar con conjuntos de datos.

Introducción al Análisis de Datos en RStudio: RStudio es un entorno de desarrollo integrado (IDE) diseñado para trabajar con el lenguaje de programación R. Se utiliza comúnmente para análisis de datos, visualización y desarrollo de código en R. Algunas tareas clave en la introducción al análisis de datos en RStudio incluyen:

-Importación de Datos: Cargar conjuntos de datos desde diferentes fuentes, como archivos CSV, Excel, bases de datos, etc.

-Exploración de Datos: Revisar las primeras filas del conjunto de datos, entender las columnas, tipos de datos y estadísticas descriptivas.

-Manipulación de Datos: Utilizar funciones como dplyr y tidyr para filtrar, seleccionar, transformar y limpiar datos según sea necesario.

-Visualización de Datos: Utilizar bibliotecas como ggplot2 para crear gráficos informativos que ayuden a comprender la distribución de los datos, relaciones entre variables, etc.

-Análisis Descriptivo: Calcular estadísticas descriptivas, como medias, medianas, desviaciones estándar, y explorar relaciones entre variables.

Creación de un DataFrame: En R, puedes crear un dataframe utilizando la función data.frame().

head(muertes)
## # A tibble: 6 × 17
##   country  region region_code start_date end_date    days  year  week population
##   <chr>    <chr>        <dbl> <date>     <date>     <dbl> <dbl> <dbl>      <dbl>
## 1 Austral… Austr…           0 2019-12-30 2020-01-05     7  2020     1   25921089
## 2 Austral… Austr…           0 2020-01-06 2020-01-12     7  2020     2   25921089
## 3 Austral… Austr…           0 2020-01-13 2020-01-19     7  2020     3   25921089
## 4 Austral… Austr…           0 2020-01-20 2020-01-26     7  2020     4   25921089
## 5 Austral… Austr…           0 2020-01-27 2020-02-02     7  2020     5   25921089
## 6 Austral… Austr…           0 2020-02-03 2020-02-09     7  2020     6   25921089
## # ℹ 8 more variables: total_deaths <dbl>, covid_deaths <dbl>,
## #   expected_deaths <dbl>, excess_deaths <dbl>, non_covid_deaths <dbl>,
## #   covid_deaths_per_100k <dbl>, excess_deaths_per_100k <dbl>,
## #   excess_deaths_pct_change <dbl>

Los nombres de las columnas de un dataframe:

colnames(muertes)
##  [1] "country"                  "region"                  
##  [3] "region_code"              "start_date"              
##  [5] "end_date"                 "days"                    
##  [7] "year"                     "week"                    
##  [9] "population"               "total_deaths"            
## [11] "covid_deaths"             "expected_deaths"         
## [13] "excess_deaths"            "non_covid_deaths"        
## [15] "covid_deaths_per_100k"    "excess_deaths_per_100k"  
## [17] "excess_deaths_pct_change"

Manipulación de Datos:

media_population <- mean(muertes$population)
print(paste("Media de muertes de la población:",media_population))
## [1] "Media de muertes de la población: 31201015.6795494"
media_population <- mean(muertes$total_deaths)
print(paste("Media de total de muertes:",media_population))
## [1] "Media de total de muertes: 5697.6743847487"
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

Accerder a las filas del dataframe

muertes[1,]
## # A tibble: 1 × 17
##   country  region region_code start_date end_date    days  year  week population
##   <chr>    <chr>        <dbl> <date>     <date>     <dbl> <dbl> <dbl>      <dbl>
## 1 Austral… Austr…           0 2019-12-30 2020-01-05     7  2020     1   25921089
## # ℹ 8 more variables: total_deaths <dbl>, covid_deaths <dbl>,
## #   expected_deaths <dbl>, excess_deaths <dbl>, non_covid_deaths <dbl>,
## #   covid_deaths_per_100k <dbl>, excess_deaths_per_100k <dbl>,
## #   excess_deaths_pct_change <dbl>
muertes[15:30,]
## # A tibble: 16 × 17
##    country region region_code start_date end_date    days  year  week population
##    <chr>   <chr>        <dbl> <date>     <date>     <dbl> <dbl> <dbl>      <dbl>
##  1 Austra… Austr…           0 2020-04-06 2020-04-12     7  2020    15   25921089
##  2 Austra… Austr…           0 2020-04-13 2020-04-19     7  2020    16   25921089
##  3 Austra… Austr…           0 2020-04-20 2020-04-26     7  2020    17   25921089
##  4 Austra… Austr…           0 2020-04-27 2020-05-03     7  2020    18   25921089
##  5 Austra… Austr…           0 2020-05-04 2020-05-10     7  2020    19   25921089
##  6 Austra… Austr…           0 2020-05-11 2020-05-17     7  2020    20   25921089
##  7 Austra… Austr…           0 2020-05-18 2020-05-24     7  2020    21   25921089
##  8 Austra… Austr…           0 2020-05-25 2020-05-31     7  2020    22   25921089
##  9 Austra… Austr…           0 2020-06-01 2020-06-07     7  2020    23   25921089
## 10 Austra… Austr…           0 2020-06-08 2020-06-14     7  2020    24   25921089
## 11 Austra… Austr…           0 2020-06-15 2020-06-21     7  2020    25   25921089
## 12 Austra… Austr…           0 2020-06-22 2020-06-28     7  2020    26   25921089
## 13 Austra… Austr…           0 2020-06-29 2020-07-05     7  2020    27   25921089
## 14 Austra… Austr…           0 2020-07-06 2020-07-12     7  2020    28   25921089
## 15 Austra… Austr…           0 2020-07-13 2020-07-19     7  2020    29   25921089
## 16 Austra… Austr…           0 2020-07-20 2020-07-26     7  2020    30   25921089
## # ℹ 8 more variables: total_deaths <dbl>, covid_deaths <dbl>,
## #   expected_deaths <dbl>, excess_deaths <dbl>, non_covid_deaths <dbl>,
## #   covid_deaths_per_100k <dbl>, excess_deaths_per_100k <dbl>,
## #   excess_deaths_pct_change <dbl>

La estructura de un dataframe:

str(muertes) 
## spc_tbl_ [5,770 × 17] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ country                 : chr [1:5770] "Australia" "Australia" "Australia" "Australia" ...
##  $ region                  : chr [1:5770] "Australia" "Australia" "Australia" "Australia" ...
##  $ region_code             : num [1:5770] 0 0 0 0 0 0 0 0 0 0 ...
##  $ start_date              : Date[1:5770], format: "2019-12-30" "2020-01-06" ...
##  $ end_date                : Date[1:5770], format: "2020-01-05" "2020-01-12" ...
##  $ days                    : num [1:5770] 7 7 7 7 7 7 7 7 7 7 ...
##  $ year                    : num [1:5770] 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
##  $ week                    : num [1:5770] 1 2 3 4 5 6 7 8 9 10 ...
##  $ population              : num [1:5770] 25921089 25921089 25921089 25921089 25921089 ...
##  $ total_deaths            : num [1:5770] 2926 2902 2914 3007 2910 ...
##  $ covid_deaths            : num [1:5770] 0 0 0 0 0 0 0 0 1 2 ...
##  $ expected_deaths         : num [1:5770] 2965 2957 2932 2940 2900 ...
##  $ excess_deaths           : num [1:5770] -39.37 -54.54 -18.04 66.63 9.96 ...
##  $ non_covid_deaths        : num [1:5770] 2926 2902 2914 3007 2910 ...
##  $ covid_deaths_per_100k   : num [1:5770] 0 0 0 0 0 ...
##  $ excess_deaths_per_100k  : num [1:5770] -0.1519 -0.2104 -0.0696 0.257 0.0384 ...
##  $ excess_deaths_pct_change: num [1:5770] -0.01328 -0.01845 -0.00615 0.02266 0.00343 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   country = col_character(),
##   ..   region = col_character(),
##   ..   region_code = col_double(),
##   ..   start_date = col_date(format = ""),
##   ..   end_date = col_date(format = ""),
##   ..   days = col_double(),
##   ..   year = col_double(),
##   ..   week = col_double(),
##   ..   population = col_double(),
##   ..   total_deaths = col_double(),
##   ..   covid_deaths = col_double(),
##   ..   expected_deaths = col_double(),
##   ..   excess_deaths = col_double(),
##   ..   non_covid_deaths = col_double(),
##   ..   covid_deaths_per_100k = col_double(),
##   ..   excess_deaths_per_100k = col_double(),
##   ..   excess_deaths_pct_change = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>

Acceder a las columnas del dataframe

subset(muertes, select = week)
## # A tibble: 5,770 × 1
##     week
##    <dbl>
##  1     1
##  2     2
##  3     3
##  4     4
##  5     5
##  6     6
##  7     7
##  8     8
##  9     9
## 10    10
## # ℹ 5,760 more rows
subset(muertes, select = expected_deaths)
## # A tibble: 5,770 × 1
##    expected_deaths
##              <dbl>
##  1           2965.
##  2           2957.
##  3           2932.
##  4           2940.
##  5           2900.
##  6           2932.
##  7           2936.
##  8           2989.
##  9           2953.
## 10           2992.
## # ℹ 5,760 more rows

Acceder a elementos por nombres de fila y columna:

muertes[15, "population"]
## # A tibble: 1 × 1
##   population
##        <dbl>
## 1   25921089
# También puedes utilizar el operador "$" para acceder a un elemento específico
muertes$region[206]
## [1] "Austria"

Eliminar una columna del dataframe:

subset(muertes, select = -3)
## # A tibble: 5,770 × 16
##    country   region    start_date end_date    days  year  week population
##    <chr>     <chr>     <date>     <date>     <dbl> <dbl> <dbl>      <dbl>
##  1 Australia Australia 2019-12-30 2020-01-05     7  2020     1   25921089
##  2 Australia Australia 2020-01-06 2020-01-12     7  2020     2   25921089
##  3 Australia Australia 2020-01-13 2020-01-19     7  2020     3   25921089
##  4 Australia Australia 2020-01-20 2020-01-26     7  2020     4   25921089
##  5 Australia Australia 2020-01-27 2020-02-02     7  2020     5   25921089
##  6 Australia Australia 2020-02-03 2020-02-09     7  2020     6   25921089
##  7 Australia Australia 2020-02-10 2020-02-16     7  2020     7   25921089
##  8 Australia Australia 2020-02-17 2020-02-23     7  2020     8   25921089
##  9 Australia Australia 2020-02-24 2020-03-01     7  2020     9   25921089
## 10 Australia Australia 2020-03-02 2020-03-08     7  2020    10   25921089
## # ℹ 5,760 more rows
## # ℹ 8 more variables: total_deaths <dbl>, covid_deaths <dbl>,
## #   expected_deaths <dbl>, excess_deaths <dbl>, non_covid_deaths <dbl>,
## #   covid_deaths_per_100k <dbl>, excess_deaths_per_100k <dbl>,
## #   excess_deaths_pct_change <dbl>

Flujo del proceso de análisis de datos.

El flujo de trabajo típico para el análisis de datos en RStudio puede dividirse en varias etapas. Aquí te proporcionaré un resumen general del proceso. Ten en cuenta que los detalles pueden variar según el proyecto y los requisitos específicos, pero estos pasos son comunes en muchos análisis de datos con RStudio:

  1. Importar Datos:

Utiliza funciones como read.csv(), read_excel(), o read.table() para importar datos desde archivos. Almacena los datos en un objeto, como un dataframe en R.

Exploración de Datos (Exploratory Data Analysis - EDA):

  1. Utiliza funciones como summary(), str(), y head() para obtener una vista previa de los datos. Realiza visualizaciones exploratorias utilizando bibliotecas como ggplot2 o plotly.
# Ejemplo
## summary(datos)
## ggplot(datos, aes(x = variable1, y = variable2)) + geom_point()
  1. Limpieza de Datos:

Trata los valores faltantes, duplicados y atípicos. Convierte los tipos de datos según sea necesario. Asegúrate de que los datos estén en el formato adecuado para el análisis.

# Ejemplo
## datos <- na.omit(datos)
  1. Transformación de Datos:

Crea nuevas variables o transforma las existentes según las necesidades del análisis. Puede incluir la creación de variables dummy, escalado de variables, etc.

# Ejemplo
## datos$NuevaVariable <- datos$Variable1 + datos$Variable2
  1. Análisis Estadístico:

Realiza análisis descriptivos y estadísticos utilizando funciones como mean(), sd(), y cor(). Realiza pruebas de hipótesis o modelado estadístico según sea necesario.

# Ejemplo
## media_variable1 <- mean(datos$Variable1)
  1. Visualización Avanzada:

Crea gráficos más complejos para comunicar tus hallazgos. Utiliza bibliotecas especializadas como ggplot2, plotly o ggvis.

# Ejemplo
## ggplot(datos, aes(x = variable1, y = variable2, color = factor(grupo))) + geom_point()
  1. Comunicación de Resultados:

Utiliza R Markdown para crear informes reproducibles que combinen código, resultados y visualizaciones. Exporta gráficos y tablas en formatos como PDF o imágenes.

Importación de datos

La importación de datos es una de las primeras tareas que generalmente se realizan al iniciar un análisis de datos en RStudio. RStudio proporciona varias funciones y paquetes para importar datos desde diferentes tipos de archivos. Aquí hay algunos ejemplos comunes:

Importación de Datos desde un Archivo CSV:

Un archivo .csv comparte similitudes con un archivo .xlsx de Excel, pero carece de formato. Puede ser generado desde la mayoría de los programas de software y se utiliza comúnmente como un paso previo antes de trabajar con Excel. Su popularidad se debe en gran parte a que pesa menos en comparación con un archivo .xlsx.

Cuando se trata de cargar estos archivos, utilizamos el comando read.csv(), el cual comparte argumentos similares con read.table. Esto facilita su comprensión y manejo, ya que se sigue un proceso sencillo para importar y trabajar con datos en formato tabular desde archivos .csv.

library(readr)
pobreza22 <- read_csv("C:/Users/JOSELUIS/Downloads/pobreza22.csv")
## Rows: 309534 Columns: 79
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): folioviv
## dbl (78): foliohog, numren, est_dis, upm, factor, tam_loc, rururb, ent, ubic...
## 
## ℹ 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.
head(pobreza22)
## # A tibble: 6 × 79
##   folioviv   foliohog numren est_dis   upm factor tam_loc rururb   ent ubica_geo
##   <chr>         <dbl>  <dbl>   <dbl> <dbl>  <dbl>   <dbl>  <dbl> <dbl>     <dbl>
## 1 0100005002        1      1       3     1    206       1      0     1      1001
## 2 0100005002        1      2       3     1    206       1      0     1      1001
## 3 0100005002        1      3       3     1    206       1      0     1      1001
## 4 0100005003        1      1       3     1    206       1      0     1      1001
## 5 0100005003        1      2       3     1    206       1      0     1      1001
## 6 0100005004        1      1       3     1    206       1      0     1      1001
## # ℹ 69 more variables: edad <dbl>, sexo <dbl>, parentesco <dbl>,
## #   ic_rezedu <dbl>, anac_e <dbl>, inas_esc <dbl>, niv_ed <dbl>,
## #   ic_asalud <dbl>, ic_segsoc <dbl>, sa_dir <dbl>, ss_dir <dbl>,
## #   s_salud <dbl>, par <dbl>, jef_ss <dbl>, cony_ss <dbl>, hijo_ss <dbl>,
## #   pea <dbl>, jub <dbl>, pam <dbl>, ing_pam <dbl>, ic_cv <dbl>,
## #   icv_pisos <dbl>, icv_muros <dbl>, icv_techos <dbl>, icv_hac <dbl>,
## #   ic_sbv <dbl>, isb_agua <dbl>, isb_dren <dbl>, isb_luz <dbl>, …

Importación de Datos desde un Archivo Excel: Para leer datos desde un archivo de Excel, puedes usar el paquete readxl o openxlsx. Asegúrate de instalar el paquete antes de usarlo.

library(readxl)
Datos<- read_excel("C:/Users/JOSELUIS/Downloads/Formato_DiccionarioDatos_MDSCF_v1.xlsx")
## New names:
## • `` -> `...1`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
head(Datos)
## # A tibble: 6 × 6
##   ...1                DICCIONARIO DE DATOS: LICENCIAS …¹ ...3  ...4  ...5  ...6 
##   <chr>               <chr>                              <chr> <chr> <chr> <chr>
## 1 <NA>                <NA>                               <NA>  <NA>  <NA>  <NA> 
## 2 Nombre del Dataset: LICENCIAS DE FUNCIONAMIENTO DE LA… <NA>  <NA>  <NA>  <NA> 
## 3 <NA>                <NA>                               <NA>  <NA>  <NA>  <NA> 
## 4 Variable            Descripción                        Tipo… Tama… Recu… Info…
## 5 FECHA_CORTE         Día en que se genero el Dataset    Numé… 8     <NA>  Form…
## 6 DEPARTAMENTO        Departamento donde se encuentra u… Texto 4     Catá… <NA> 
## # ℹ abbreviated name:
## #   ¹​`DICCIONARIO DE DATOS: LICENCIAS DE FUNCIONAMIENTO DE LA MUNICIPALIDAD DISTRITAL DE SANTA CRUZ DE FLORES`

Importar desde SPSS:

Cuando necesitamos cargar un archivo en formato .sav, proveniente de SPSS, empleamos el comando read.spss().

Este comando cuenta con diversos argumentos, por lo que se sugiere consultar la documentación ingresando ?read.spss en la consola.

Importar desde STATA:

Cuando queremos cargar un archivo en formato .dta proveniente de STATA, utilizamos el comando read.dta(). Al igual que en casos anteriores, se aconseja consultar la documentación ?read.dta para obtener información más detallada.

II MANEJO DE DATOS

a) Identificacion y manejos de datos missing

Definicion: La “identificación y manejo de datos faltantes” se refiere a la tarea de reconocer y gestionar la presencia de valores perdidos o ausentes en conjuntos de datos. Los datos faltantes pueden surgir por diversas razones, como errores en la recopilación de datos, respuestas omitidas por los encuestados, fallos técnicos o cualquier otro motivo que cause la falta de información en ciertos registros.

Ejemplo

cargamos una dataframe

library(readr)
all_weekly_excess_deaths <- read_csv("C:/Users/JOSELUIS/Downloads/all_weekly_excess_deaths.csv")
## Rows: 5770 Columns: 17
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr   (2): country, region
## dbl  (13): region_code, days, year, week, population, total_deaths, covid_de...
## date  (2): start_date, end_date
## 
## ℹ 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.
head(all_weekly_excess_deaths)
## # A tibble: 6 × 17
##   country  region region_code start_date end_date    days  year  week population
##   <chr>    <chr>        <dbl> <date>     <date>     <dbl> <dbl> <dbl>      <dbl>
## 1 Austral… Austr…           0 2019-12-30 2020-01-05     7  2020     1   25921089
## 2 Austral… Austr…           0 2020-01-06 2020-01-12     7  2020     2   25921089
## 3 Austral… Austr…           0 2020-01-13 2020-01-19     7  2020     3   25921089
## 4 Austral… Austr…           0 2020-01-20 2020-01-26     7  2020     4   25921089
## 5 Austral… Austr…           0 2020-01-27 2020-02-02     7  2020     5   25921089
## 6 Austral… Austr…           0 2020-02-03 2020-02-09     7  2020     6   25921089
## # ℹ 8 more variables: total_deaths <dbl>, covid_deaths <dbl>,
## #   expected_deaths <dbl>, excess_deaths <dbl>, non_covid_deaths <dbl>,
## #   covid_deaths_per_100k <dbl>, excess_deaths_per_100k <dbl>,
## #   excess_deaths_pct_change <dbl>
hay_faltantes <- any(is.na(all_weekly_excess_deaths))
if (hay_faltantes) {
  cat("Hay datos faltantes en el dataframe.\n")
} else {
  cat("No hay datos faltantes en el dataframe.\n")
}
## No hay datos faltantes en el dataframe.
print(all_weekly_excess_deaths)
## # A tibble: 5,770 × 17
##    country region region_code start_date end_date    days  year  week population
##    <chr>   <chr>        <dbl> <date>     <date>     <dbl> <dbl> <dbl>      <dbl>
##  1 Austra… Austr…           0 2019-12-30 2020-01-05     7  2020     1   25921089
##  2 Austra… Austr…           0 2020-01-06 2020-01-12     7  2020     2   25921089
##  3 Austra… Austr…           0 2020-01-13 2020-01-19     7  2020     3   25921089
##  4 Austra… Austr…           0 2020-01-20 2020-01-26     7  2020     4   25921089
##  5 Austra… Austr…           0 2020-01-27 2020-02-02     7  2020     5   25921089
##  6 Austra… Austr…           0 2020-02-03 2020-02-09     7  2020     6   25921089
##  7 Austra… Austr…           0 2020-02-10 2020-02-16     7  2020     7   25921089
##  8 Austra… Austr…           0 2020-02-17 2020-02-23     7  2020     8   25921089
##  9 Austra… Austr…           0 2020-02-24 2020-03-01     7  2020     9   25921089
## 10 Austra… Austr…           0 2020-03-02 2020-03-08     7  2020    10   25921089
## # ℹ 5,760 more rows
## # ℹ 8 more variables: total_deaths <dbl>, covid_deaths <dbl>,
## #   expected_deaths <dbl>, excess_deaths <dbl>, non_covid_deaths <dbl>,
## #   covid_deaths_per_100k <dbl>, excess_deaths_per_100k <dbl>,
## #   excess_deaths_pct_change <dbl>
# Eliminar filas con datos faltantes
read_csv_sin_missing <- na.omit(all_weekly_excess_deaths)
print("Dataframe sin datos faltantes:")
## [1] "Dataframe sin datos faltantes:"

Ejemplo 2

library(readr)
diabetes <- read_csv("C:/Users/JOSELUIS/Downloads/diabetes.csv")
## Rows: 768 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (9): Pregnancies, Glucose, BloodPressure, SkinThickness, Insulin, BMI, D...
## 
## ℹ 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.
head(diabetes)
## # A tibble: 6 × 9
##   Pregnancies Glucose BloodPressure SkinThickness Insulin   BMI
##         <dbl>   <dbl>         <dbl>         <dbl>   <dbl> <dbl>
## 1           6     148            72            35       0  33.6
## 2           1      85            66            29       0  26.6
## 3           8     183            64             0       0  23.3
## 4           1      89            66            23      94  28.1
## 5           0     137            40            35     168  43.1
## 6           5     116            74             0       0  25.6
## # ℹ 3 more variables: DiabetesPedigreeFunction <dbl>, Age <dbl>, Outcome <dbl>
# Imputar valores faltantes usando la media
diabetes_imputado <- diabetes
diabetes_imputado$Insulin[is.na(diabetes_imputado$Insulin)] <- mean(diabetes_imputado$Insulin, na.rm = TRUE)
print("Dataframe con valores imputados:")
## [1] "Dataframe con valores imputados:"
print(diabetes_imputado)
## # A tibble: 768 × 9
##    Pregnancies Glucose BloodPressure SkinThickness Insulin   BMI
##          <dbl>   <dbl>         <dbl>         <dbl>   <dbl> <dbl>
##  1           6     148            72            35       0  33.6
##  2           1      85            66            29       0  26.6
##  3           8     183            64             0       0  23.3
##  4           1      89            66            23      94  28.1
##  5           0     137            40            35     168  43.1
##  6           5     116            74             0       0  25.6
##  7           3      78            50            32      88  31  
##  8          10     115             0             0       0  35.3
##  9           2     197            70            45     543  30.5
## 10           8     125            96             0       0   0  
## # ℹ 758 more rows
## # ℹ 3 more variables: DiabetesPedigreeFunction <dbl>, Age <dbl>, Outcome <dbl>
# Eliminar filas con datos faltantes
diabetes_sin_missing <- na.omit(diabetes)
print("Dataframe sin datos faltantes:")
## [1] "Dataframe sin datos faltantes:"
print(diabetes_sin_missing)
## # A tibble: 768 × 9
##    Pregnancies Glucose BloodPressure SkinThickness Insulin   BMI
##          <dbl>   <dbl>         <dbl>         <dbl>   <dbl> <dbl>
##  1           6     148            72            35       0  33.6
##  2           1      85            66            29       0  26.6
##  3           8     183            64             0       0  23.3
##  4           1      89            66            23      94  28.1
##  5           0     137            40            35     168  43.1
##  6           5     116            74             0       0  25.6
##  7           3      78            50            32      88  31  
##  8          10     115             0             0       0  35.3
##  9           2     197            70            45     543  30.5
## 10           8     125            96             0       0   0  
## # ℹ 758 more rows
## # ℹ 3 more variables: DiabetesPedigreeFunction <dbl>, Age <dbl>, Outcome <dbl>

b) Identificación y manejo de datos outlier e inconsistentes.

definicion: La identificación y manejo de outliers e inconsistentes son prácticas esenciales para garantizar la integridad y la calidad de los datos, así como para obtener resultados de análisis más precisos y confiables.

Ejemplo

# Identificar outliers en la columna "Glucose" con método de IQR
Glucose_iqr <- diabetes$Glucose
q1 <- quantile(Glucose_iqr, 0.7)
q3 <- quantile(Glucose_iqr, 0.7)
iqr <- q3 - q1
lower_bound <- q1 - 12 * iqr
upper_bound <- q3 + 12 * iqr
outliers <- Glucose_iqr[Glucose_iqr < lower_bound | Glucose_iqr > upper_bound]
print("Valores considerados como outliers:")
## [1] "Valores considerados como outliers:"
print(outliers)
##   [1] 148  85 183  89 137 116  78 115 197 125 110 168 139 189 166 100 118 107
##  [19] 103 115 126  99 196 119 143 125 147  97 145 117 109 158  88  92 122 103
##  [37] 138 102  90 111 180 133 106 171 159 180 146  71 103 105 103 101  88 176
##  [55] 150  73 187 100 146 105  84 133  44 141 114  99 109 109  95 146 100 139
##  [73] 126 129  79   0  62  95 131 112 113  74  83 101 137 110 106 100 136 107
##  [91]  80 123  81 142 144  92  71  93 122 163 151 125  81  85 126  96 144  83
## [109]  95 171 155  89  76 160 146 124  78  97  99 162 111 107 132 113  88 120
## [127] 118 117 105 173 122 170  84  96 125 100  93 129 105 128 106 108 108 154
## [145] 102  57 106 147  90 136 114 156 153 188 152  99 109  88 163 151 102 114
## [163] 100 131 104 148 120 110 111 102  87  79  75 179  85 129 143 130  87 119
## [181]   0  73 141 194 181 128 109 139 111 123 159 135  85 158 105 107 109 148
## [199] 113 138 108  99 103 111 196 162  96 184  81 147 179 140 112 151 109 125
## [217]  85 112 177 158 119 142 100  87 101 162 197 117 142  79 122  74 171 181
## [235] 179 164 104  91  91 139 119 146 184 122 165 124 111 106 129  90  86  92
## [253] 113 111 114 193 155 191 141  95 142 123  96 138 128 102 146 101 108 122
## [271]  71 106 100 106 104 114 108 146 129 133 161 108 136 155 119  96 108  78
## [289] 107 128 128 161 151 146 126 100 112 167 144  77 115 150 120 161 137 128
## [307] 124  80 106 155 113 109 112  99 182 115 194 129 112 124 152 112 157 122
## [325] 179 102 105 118  87 180 106  95 165 117 115 152 178 130  95   0 122  95
## [343] 126 139 116  99   0  92 137  61  90  90 165 125 129  88 196 189 158 103
## [361] 146 147  99 124 101  81 133 173 118  84 105 122 140  98  87 156  93 107
## [379] 105 109  90 125 119 116 105 144 100 100 166 131 116 158 127  96 131  82
## [397] 193  95 137 136  72 168 123 115 101 197 172 102 112 143 143 138 173  97
## [415] 144  83 129 119  94 102 115 151 184  94 181 135  95  99  89  80 139  90
## [433] 141 140 147  97 107 189  83 117 108 117 180 100  95 104 120  82  91 119
## [451] 100 175 135  86 148 120  71  74  88 115 124  74  97 120 154 144 137 119
## [469] 136 114 137 105 114 126 132 158 123  85  84 145 135 139 173  99 194  83
## [487]  89  99 125  80 166 110  81 195 154 117  84   0  94  96  75 180 130  84
## [505] 120  84 139  91  91  99 163 145 125  76 129  68 124 114 130 125  87  97
## [523] 116 117 111 122 107  86  91  77 132 105  57 127 129 100 128  90  84  88
## [541] 186 187 131 164 189 116  84 114  88  84 124  97 110 103  85 125 198  87
## [559]  99  91  95  99  92 154 121  78 130 111  98 143 119 108 118 133 197 151
## [577] 109 121 100 124  93 143 103 176  73 111 112 132  82 123 188  67  89 173
## [595] 109 108  96 124 150 183 124 181  92 152 111 106 174 168 105 138 106 117
## [613]  68 112 119 112  92 183  94 108  90 125 132 128  94 114 102 111 128  92
## [631] 104 104  94  97 100 102 128 147  90 103 157 167 179 136 107  91 117 123
## [649] 120 106 155 101 120 127  80 162 199 167 145 115 112 145 111  98 154 165
## [667]  99  68 123  91 195 156  93 121 101  56 162  95 125 136 129 130 107 140
## [685] 144 107 158 121 129  90 142 169  99 127 118 122 125 168 129 110  80 115
## [703] 127 164  93 158 126 129 102 187 173  94 108  97  83 114 149 117 111 112
## [721] 116 141 175  92 130 120 174 106 105  95 126  65  99 102 120 102 109 140
## [739] 153 100 147  81 187 162 136 121 108 181 154 128 137 123 106 190  88 170
## [757]  89 101 122 121 126  93
# Eliminar outliers en la columna "Glucose"
diabetes_sin_outliers <- diabetes[!(diabetes$Glucose %in% outliers), ]
print("Data sin outliers:")
## [1] "Data sin outliers:"
print(diabetes_sin_outliers)
## # A tibble: 6 × 9
##   Pregnancies Glucose BloodPressure SkinThickness Insulin   BMI
##         <dbl>   <dbl>         <dbl>         <dbl>   <dbl> <dbl>
## 1           4     134            72             0       0  23.8
## 2           6     134            70            23     130  35.4
## 3           6     134            80            37     370  46.2
## 4           2     134            70             0       0  28.9
## 5           9     134            74            33      60  25.9
## 6           0     134            58            20     291  26.4
## # ℹ 3 more variables: DiabetesPedigreeFunction <dbl>, Age <dbl>, Outcome <dbl>

Similarmente se puede hacer para las filas

c) Limpieza y preparqacion de datos

definicion: La limpieza y preparación de datos son pasos críticos que anteceden a cualquier análisis significativo. Estos procesos aseguran que los datos sean confiables, consistentes y adecuados para su uso en la toma de decisiones y la generación de conocimiento a partir de los datos.

Ejemplo

# Convertir la columna "Glucose" a factor
diabetes$Glucose <- as.factor(diabetes$Glucose)
diabetes$Glucose
##   [1] 148 85  183 89  137 116 78  115 197 125 110 168 139 189 166 100 118 107
##  [19] 103 115 126 99  196 119 143 125 147 97  145 117 109 158 88  92  122 103
##  [37] 138 102 90  111 180 133 106 171 159 180 146 71  103 105 103 101 88  176
##  [55] 150 73  187 100 146 105 84  133 44  141 114 99  109 109 95  146 100 139
##  [73] 126 129 79  0   62  95  131 112 113 74  83  101 137 110 106 100 136 107
##  [91] 80  123 81  134 142 144 92  71  93  122 163 151 125 81  85  126 96  144
## [109] 83  95  171 155 89  76  160 146 124 78  97  99  162 111 107 132 113 88 
## [127] 120 118 117 105 173 122 170 84  96  125 100 93  129 105 128 106 108 108
## [145] 154 102 57  106 147 90  136 114 156 153 188 152 99  109 88  163 151 102
## [163] 114 100 131 104 148 120 110 111 102 134 87  79  75  179 85  129 143 130
## [181] 87  119 0   73  141 194 181 128 109 139 111 123 159 135 85  158 105 107
## [199] 109 148 113 138 108 99  103 111 196 162 96  184 81  147 179 140 112 151
## [217] 109 125 85  112 177 158 119 142 100 87  101 162 197 117 142 134 79  122
## [235] 74  171 181 179 164 104 91  91  139 119 146 184 122 165 124 111 106 129
## [253] 90  86  92  113 111 114 193 155 191 141 95  142 123 96  138 128 102 146
## [271] 101 108 122 71  106 100 106 104 114 108 146 129 133 161 108 136 155 119
## [289] 96  108 78  107 128 128 161 151 146 126 100 112 167 144 77  115 150 120
## [307] 161 137 128 124 80  106 155 113 109 112 99  182 115 194 129 112 124 152
## [325] 112 157 122 179 102 105 118 87  180 106 95  165 117 115 152 178 130 95 
## [343] 0   122 95  126 139 116 99  0   92  137 61  90  90  165 125 129 88  196
## [361] 189 158 103 146 147 99  124 101 81  133 173 118 84  105 122 140 98  87 
## [379] 156 93  107 105 109 90  125 119 116 105 144 100 100 166 131 116 158 127
## [397] 96  131 82  193 95  137 136 72  168 123 115 101 197 172 102 112 143 143
## [415] 138 173 97  144 83  129 119 94  102 115 151 184 94  181 135 95  99  89 
## [433] 80  139 90  141 140 147 97  107 189 83  117 108 117 180 100 95  104 120
## [451] 82  134 91  119 100 175 135 86  148 134 120 71  74  88  115 124 74  97 
## [469] 120 154 144 137 119 136 114 137 105 114 126 132 158 123 85  84  145 135
## [487] 139 173 99  194 83  89  99  125 80  166 110 81  195 154 117 84  0   94 
## [505] 96  75  180 130 84  120 84  139 91  91  99  163 145 125 76  129 68  124
## [523] 114 130 125 87  97  116 117 111 122 107 86  91  77  132 105 57  127 129
## [541] 100 128 90  84  88  186 187 131 164 189 116 84  114 88  84  124 97  110
## [559] 103 85  125 198 87  99  91  95  99  92  154 121 78  130 111 98  143 119
## [577] 108 118 133 197 151 109 121 100 124 93  143 103 176 73  111 112 132 82 
## [595] 123 188 67  89  173 109 108 96  124 150 183 124 181 92  152 111 106 174
## [613] 168 105 138 106 117 68  112 119 112 92  183 94  108 90  125 132 128 94 
## [631] 114 102 111 128 92  104 104 94  97  100 102 128 147 90  103 157 167 179
## [649] 136 107 91  117 123 120 106 155 101 120 127 80  162 199 167 145 115 112
## [667] 145 111 98  154 165 99  68  123 91  195 156 93  121 101 56  162 95  125
## [685] 136 129 130 107 140 144 107 158 121 129 90  142 169 99  127 118 122 125
## [703] 168 129 110 80  115 127 164 93  158 126 129 134 102 187 173 94  108 97 
## [721] 83  114 149 117 111 112 116 141 175 92  130 120 174 106 105 95  126 65 
## [739] 99  102 120 102 109 140 153 100 147 81  187 162 136 121 108 181 154 128
## [757] 137 123 106 190 88  170 89  101 122 121 126 93 
## 136 Levels: 0 44 56 57 61 62 65 67 68 71 72 73 74 75 76 77 78 79 80 81 82 ... 199
# Podemos renombrar columnas
colnames(diabetes) <- c("Pregnancies", "Glucose", "BloodPressure")
colnames(diabetes)
## [1] "Pregnancies"   "Glucose"       "BloodPressure" NA             
## [5] NA              NA              NA              NA             
## [9] NA
# Identificación de errores y problemas en la data diabetes
summary(diabetes)
##   Pregnancies        Glucose    BloodPressure          NA       
##  Min.   : 0.000   99     : 17   Min.   :  0.00   Min.   : 0.00  
##  1st Qu.: 1.000   100    : 17   1st Qu.: 62.00   1st Qu.: 0.00  
##  Median : 3.000   106    : 14   Median : 72.00   Median :23.00  
##  Mean   : 3.845   111    : 14   Mean   : 69.11   Mean   :20.54  
##  3rd Qu.: 6.000   125    : 14   3rd Qu.: 80.00   3rd Qu.:32.00  
##  Max.   :17.000   129    : 14   Max.   :122.00   Max.   :99.00  
##                   (Other):678                                   
##        NA              NA              NA               NA       
##  Min.   :  0.0   Min.   : 0.00   Min.   :0.0780   Min.   :21.00  
##  1st Qu.:  0.0   1st Qu.:27.30   1st Qu.:0.2437   1st Qu.:24.00  
##  Median : 30.5   Median :32.00   Median :0.3725   Median :29.00  
##  Mean   : 79.8   Mean   :31.99   Mean   :0.4719   Mean   :33.24  
##  3rd Qu.:127.2   3rd Qu.:36.60   3rd Qu.:0.6262   3rd Qu.:41.00  
##  Max.   :846.0   Max.   :67.10   Max.   :2.4200   Max.   :81.00  
##                                                                  
##        NA       
##  Min.   :0.000  
##  1st Qu.:0.000  
##  Median :0.000  
##  Mean   :0.349  
##  3rd Qu.:1.000  
##  Max.   :1.000  
## 
# Creación de nuevas variables o características
diabetes$peso <- diabetes$Glucose / diabetes$Pregnancies
## Warning in Ops.factor(diabetes$Glucose, diabetes$Pregnancies): '/' not
## meaningful for factors
# dataframe después de los cambios
print("Dataframe después de la limpieza y preparación:")
## [1] "Dataframe después de la limpieza y preparación:"
print(diabetes)
## # A tibble: 768 × 10
##    Pregnancies Glucose BloodPressure    ``    ``    ``    ``    ``    `` peso 
##          <dbl> <fct>           <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <lgl>
##  1           6 148                72    35     0  33.6 0.627    50     1 NA   
##  2           1 85                 66    29     0  26.6 0.351    31     0 NA   
##  3           8 183                64     0     0  23.3 0.672    32     1 NA   
##  4           1 89                 66    23    94  28.1 0.167    21     0 NA   
##  5           0 137                40    35   168  43.1 2.29     33     1 NA   
##  6           5 116                74     0     0  25.6 0.201    30     0 NA   
##  7           3 78                 50    32    88  31   0.248    26     1 NA   
##  8          10 115                 0     0     0  35.3 0.134    29     0 NA   
##  9           2 197                70    45   543  30.5 0.158    53     1 NA   
## 10           8 125                96     0     0   0   0.232    54     1 NA   
## # ℹ 758 more rows

Visualización de datos

a) Visualización de datos univariados.

La representación gráfica de datos univariados es esencial para comprender cómo se distribuyen y cuáles son las características de una variable específica dentro de un conjunto de datos. En RStudio, existen varias bibliotecas y funciones que puedes emplear para generar gráficos que faciliten la exploración de tus datos. A continuación, se presentan algunos ejemplos utilizando ggplot2, una biblioteca ampliamente utilizada para visualización en R.

Gráfica de barras para variable caulitativa:

table(diabetes$Glucose)
## 
##   0  44  56  57  61  62  65  67  68  71  72  73  74  75  76  77  78  79  80  81 
##   5   1   1   2   1   1   1   1   3   4   1   3   4   2   2   2   4   3   6   6 
##  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 
##   3   6  10   7   3   7   9   6  11   9   9   7   7  13   8   9   3  17  17   9 
## 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 
##  13   9   6  13  14  11  13  12   6  14  13   5  11  10   7  11   6  11  11   6 
## 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 
##  12   9  11  14   9   5  11  14   7   5   5   5   6   4   8   8   5   8   5   5 
## 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 
##   5   6   7   5   9   7   4   1   3   6   4   2   6   5   3   2   8   2   1   3 
## 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 
##   6   3   3   4   3   3   4   1   2   3   1   6   2   2   2   1   1   5   5   5 
## 182 183 184 186 187 188 189 190 191 193 194 195 196 197 198 199 
##   1   3   3   1   4   2   4   1   1   2   3   2   3   4   1   1
barplot(table(diabetes$Glucose)
)

library(ggplot2)
ggplot(diabetes, aes(x = Glucose_iqr)) +
  geom_histogram(binwidth = 1, fill = "blue", color = "black") +
  labs(title = "Glucosa", x = "Medidas de glucosa", y = "Frecuencia")

Gráfica de circular:

pie(table(diabetes$BloodPressure))

Gráfica para variable cuantitativa

hist(muertes$total_deaths)

hist(muertes$non_covid_deaths)

boxplot(muertes$total_deaths)

ggplot(diabetes, aes(x = 1, y = Glucose)) +
  geom_boxplot(fill = "green", color = "black") +
  labs(title = "Diagrama de Cajas de variable", x = "", y = "Glucosa")

b) Visualización de datos bivariados

La visualización de datos bivariados implica explorar la relación entre dos variables. En RStudio, puedes utilizar diversas bibliotecas y funciones para crear gráficos que te ayuden a visualizar estas relaciones. Aquí hay algunos ejemplos utilizando la biblioteca ggplot2:

Gráfico de dispersión:

Un gráfico de dispersión es útil para visualizar la relación entre dos variables continuas.

ggplot(muertes, aes(x = population, y = covid_deaths)) +
  geom_point(color = "blue") +
  labs(title = "Gráfico de Dispersión", x = "Población", y = "muertes por COVID 19")

Gráfico de líneas:

Puedes usar un gráfico de líneas para visualizar cómo una variable cambia en relación con la otra, especialmente si una de las variables es categórica

ggplot(diabetes, aes(x = Pregnancies, y = Glucose, group = BloodPressure, color = BloodPressure)) +
  geom_line() +
  labs(title = "Gráfico de Líneas", x = "embarazos", y = "Glucosa", color = "Presión arterial")

Diagrama de dispersión con regresión:

Si estás interesado en visualizar una posible relación lineal entre dos variables, puedes agregar una línea de regresión.

ggplot(diabetes, aes(x = Pregnancies, y = BloodPressure)) +
  geom_point(color = "red") +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +
  labs(title = "Gráfico de Dispersión con Regresión Lineal", x = "embarazos", y = "presión arterial")
## `geom_smooth()` using formula = 'y ~ x'

c) Visualización de datos bivariados multivariados.

La visualización de datos multivariados implica el análisis de la relación entre tres o más variables simultáneamente. El objetivo es comprender las complejas interacciones entre múltiples variables.

Gráficos típicos:

Algunas técnicas comunes para la visualización multivariada incluyen gráficos de dispersión tridimensionales, mapas de calor (heatmaps) para matrices de correlación, gráficos de burbujas (bubble charts) y diagramas de contorno.

Ejemplo

head(diabetes)
## # A tibble: 6 × 10
##   Pregnancies Glucose BloodPressure    ``    ``    ``    ``    ``    `` peso 
##         <dbl> <fct>           <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <lgl>
## 1           6 148                72    35     0  33.6 0.627    50     1 NA   
## 2           1 85                 66    29     0  26.6 0.351    31     0 NA   
## 3           8 183                64     0     0  23.3 0.672    32     1 NA   
## 4           1 89                 66    23    94  28.1 0.167    21     0 NA   
## 5           0 137                40    35   168  43.1 2.29     33     1 NA   
## 6           5 116                74     0     0  25.6 0.201    30     0 NA
# Tabla usando 2 columnas y la media 
resultados <- aggregate(BMI ~ Insulin, data = diabetes_imputado, FUN = mean)
print(resultados)
##     Insulin      BMI
## 1         0 30.94332
## 2        14 59.40000
## 3        15 20.10000
## 4        16 28.40000
## 5        18 36.45000
## 6        22 29.60000
## 7        23 26.05000
## 8        25 27.80000
## 9        29 26.80000
## 10       32 34.60000
## 11       36 29.80000
## 12       37 28.30000
## 13       38 19.60000
## 14       40 31.75000
## 15       41 19.50000
## 16       42 35.80000
## 17       43 27.20000
## 18       44 26.60000
## 19       45 29.03333
## 20       46 19.50000
## 21       48 37.70000
## 22       49 28.10000
## 23       50 28.43333
## 24       51 23.20000
## 25       52 32.70000
## 26       53 37.10000
## 27       54 31.17500
## 28       55 27.05000
## 29       56 28.48000
## 30       57 43.40000
## 31       58 27.95000
## 32       59 25.10000
## 33       60 27.95000
## 34       61 26.20000
## 35       63 32.83333
## 36       64 26.57500
## 37       65 41.30000
## 38       66 31.34000
## 39       67 33.20000
## 40       68 30.80000
## 41       70 31.16667
## 42       71 30.80000
## 43       72 43.40000
## 44       73 25.90000
## 45       74 32.46667
## 46       75 33.06667
## 47       76 27.78000
## 48       77 35.85000
## 49       78 34.50000
## 50       79 30.85000
## 51       81 31.60000
## 52       82 22.80000
## 53       83 35.33333
## 54       84 25.20000
## 55       85 29.95000
## 56       86 25.60000
## 57       87 27.65000
## 58       88 31.30000
## 59       89  0.00000
## 60       90 31.42500
## 61       91 40.90000
## 62       92 33.36667
## 63       94 31.27143
## 64       95 30.15000
## 65       96 30.60000
## 66       99 44.90000
## 67      100 33.85714
## 68      105 33.02727
## 69      106 31.83333
## 70      108 38.50000
## 71      110 31.78333
## 72      112 26.20000
## 73      114 34.40000
## 74      115 31.85000
## 75      116 28.15000
## 76      119 30.50000
## 77      120 34.23750
## 78      122 32.40000
## 79      125 34.75000
## 80      126 32.83333
## 81      127 29.30000
## 82      128 25.40000
## 83      129 35.80000
## 84      130 36.90000
## 85      132 30.15000
## 86      135 32.20000
## 87      140 34.67778
## 88      142 41.50000
## 89      144 29.75000
## 90      145 33.40000
## 91      146 36.60000
## 92      148 32.10000
## 93      150 37.80000
## 94      152 28.15000
## 95      155 34.40000
## 96      156 32.76667
## 97      158 33.55000
## 98      159 37.80000
## 99      160 36.15000
## 100     165 33.92500
## 101     166 33.10000
## 102     167 33.95000
## 103     168 33.00000
## 104     170 36.95000
## 105     171 34.20000
## 106     175 30.16667
## 107     176 31.16667
## 108     178 35.50000
## 109     180 34.11429
## 110     182 30.90000
## 111     183 27.50000
## 112     184 36.60000
## 113     185 32.90000
## 114     188 30.80000
## 115     190 33.22500
## 116     191 33.70000
## 117     192 29.95000
## 118     193 29.30000
## 119     194 37.20000
## 120     196 32.00000
## 121     200 37.32500
## 122     204 37.40000
## 123     205 33.05000
## 124     207 40.35000
## 125     210 36.12000
## 126     215 31.86667
## 127     220 47.65000
## 128     225 34.50000
## 129     228 33.90000
## 130     230 39.70000
## 131     231 32.55000
## 132     235 39.30000
## 133     237 37.60000
## 134     240 51.35000
## 135     245 31.60000
## 136     249 36.50000
## 137     250 42.30000
## 138     255 47.90000
## 139     258 27.60000
## 140     265 35.35000
## 141     270 35.10000
## 142     271 41.80000
## 143     272 41.50000
## 144     274 41.30000
## 145     275 27.70000
## 146     277 37.00000
## 147     278 25.30000
## 148     280 37.50000
## 149     284 32.80000
## 150     285 38.10000
## 151     291 26.40000
## 152     293 37.45000
## 153     300 33.70000
## 154     304 37.70000
## 155     310 42.40000
## 156     318 30.90000
## 157     321 38.20000
## 158     325 35.76667
## 159     326 19.60000
## 160     328 35.50000
## 161     330 30.10000
## 162     335 34.40000
## 163     342 34.70000
## 164     360 28.00000
## 165     370 46.20000
## 166     375 25.90000
## 167     387 31.20000
## 168     392 33.90000
## 169     402 35.40000
## 170     415 23.70000
## 171     440 39.40000
## 172     465 38.40000
## 173     474 35.70000
## 174     478 34.60000
## 175     480 35.55000
## 176     485 40.60000
## 177     495 32.05000
## 178     510 43.30000
## 179     540 38.70000
## 180     543 30.50000
## 181     545 38.70000
## 182     579 42.40000
## 183     600 28.70000
## 184     680 52.30000
## 185     744 36.70000
## 186     846 30.10000
ggplot(diabetes_imputado, aes(x = diabetes_imputado$Glucose, y = diabetes_imputado$Insulin)) +
  geom_bar(stat = "summary", fun = "mean", fill = "skyblue") +
  labs(title = "Gráfico de Barras Glucose vs Insulin", x = "Glucose", y = "Insulin")

# Gráfico de caja y bigotes 
grafico_caja_bigotes <- ggplot(diabetes_imputado, aes(x =diabetes_imputado$SkinThickness, y = diabetes_imputado$BloodPressure, fill = diabetes_imputado$SkinThickness)) +
  geom_boxplot() +
  labs(title = "Gráfico de Caja y Bigotes Bivariado", x = "SkinThickness", y = "Glucose") +
  theme_minimal()

# Mostrar el gráfico
print(grafico_caja_bigotes)
## Warning: Continuous x aesthetic
## ℹ did you forget `aes(group = ...)`?
## Warning: The following aesthetics were dropped during statistical transformation: fill
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

d) Visualización de datos avanzados

Mapas de calor (Heatmaps):

Los mapas de calor son útiles para visualizar la relación entre dos variables en forma de una matriz coloreada.

ggplot(diabetes, aes(x = Pregnancies, y = BloodPressure, fill = diabetes$Pregnancies)) +
  geom_tile() +
  labs(title = "Mapa de Calor", x = "Embarazos", y = "Presión arterial", fill = "Valor")

Gráficos de dispersión tridimensionales:

Si trabajas con datos tridimensionales, puedes utilizar gráficos de dispersión tridimensionales para visualizar relaciones más complejas.

library(scatterplot3d)
install.packages("scatterplot3d")
## Warning: package 'scatterplot3d' is in use and will not be installed
scatterplot3d(diabetes$Pregnancies, diabetes$Glucose, diabetes$BloodPressure, color = "blue", main = "Glucosa")

Gráficos de violín:

Los gráficos de violín combinan elementos de boxplot y kernel density plot para mostrar la distribución de los datos.

ggplot(diabetes, aes(x = Pregnancies, y = BloodPressure)) +
  geom_violin() +
  labs(title = "Glucosa", x = "Embarazos", y = "Presión arterial")

Parcelas de contorno :

Las parcelas de contorno son útiles para visualizar distribuciones conjuntas de dos variables continuas.

ggplot(diabetes, aes(x = Pregnancies, y = BloodPressure)) +
  geom_point() +
  geom_density_2d() +
  labs(title = "Glucosa", x = "Embarazos", y = "Presión arterial")

IV Manipulación de datos no estructurados

La manipulación de datos no estructurados, especialmente datos de texto, es un área crucial en el ámbito de la ciencia de datos y la inteligencia artificial. veremos de manera general algunas técnicas y herramientas utilizadas para manipular datos no estructurados.

1.-Tokenización:

Definición: La tokenización implica dividir un texto en unidades más pequeñas llamadas tokens. Los tokens suelen ser palabras o frases.

Herramientas:

Bibliotecas como NLTK (Natural Language Toolkit) en Python o la tokenización integrada en muchas bibliotecas de procesamiento de lenguaje natural (NLP) como spaCy.

2.-Limpieza de texto:

Definición:

Eliminación de caracteres no deseados, signos de puntuación, números y otras irregularidades del texto.

Herramientas:

Funciones de procesamiento de texto en Python, como expresiones regulares (‘re’), y bibliotecas como NLTK o spaCy.

3.-Stopwords:

Definición:

Palabras comunes que a menudo se eliminan del texto debido a que no aportan un significado sustancial (p. ej., “y”, “en”, “el”). Herramientas: Listas predefinidas de stopwords en bibliotecas como NLTK o spaCy.

4.-Modelos de Incrustación de Palabras (Word Embeddings):

Definición: Representación vectorial de palabras que captura su significado semántico. Herramientas: Word2Vec, GloVe, FastText. Estos modelos pueden ser utilizados mediante bibliotecas como gensim en Python.

5.-Flexibilidad en Formatos:

RStudio permite importar datos desde diversas fuentes y formatos, como archivos CSV, TXT, Excel o incluso directamente desde bases de datos. La función read.table() es altamente configurable, permitiendo especificar delimitadores, encabezados y otros parámetros para adaptarse a la estructura de los datos.

6.-Extracción de Información:

Expresiones Regulares Avanzadas: RStudio, con la librería stringr, permite el uso de expresiones regulares avanzadas para una extracción más precisa de patrones específicos en el texto.

Análisis de Entidades Nombradas (NER): Paquetes como udpipe ofrecen herramientas para realizar análisis de Entidades Nombradas, identificando automáticamente nombres de personas, lugares, organizaciones, etc.

7.-Exportacion de resultados.

En R, la exportación de resultados es el proceso de guardar y almacenar los resultados de análisis, gráficos o cualquier otro tipo de salida generada en R en archivos externos que pueden ser utilizados posteriormente o compartidos con otros. Hay varias formas de exportar resultados en R, y la elección dependerá del tipo de salida que se desee exportar.

                         CONCLUCION
                         

Conclusiones especificas.

La manipulación de DataFrame: Despues del trabajo realizado, la manipulacion del dataframe es una parte fundamental en el análisis de datos y la ciencia de datos. Un DataFrame es una estructura tabular bidimensional que organiza los datos en filas y columnas, y es comúnmente utilizado en bibliotecas de Python como Pandas. La manipulación de DataFrames implica realizar diversas operaciones para limpiar, transformar y analizar datos de manera eficiente.

Manejo de datos:

El manejo de datos en R es fundamental para cualquier análisis estadístico y científico. R ofrece una amplia gama de herramientas y paquetes que facilitan la importación, limpieza, transformación y visualización de datos. La flexibilidad de R permite a los usuarios realizar manipulaciones complejas de datos con relativa facilidad.

Visualización de datos:

La visualización de datos en R no solo ofrece una variedad de opciones y flexibilidad, sino que también promueve la transparencia, la colaboración y una exploración más profunda de los conjuntos de datos. Al aprovechar las capacidades de visualización de R, los profesionales pueden contar historias convincentes a través de datos de manera impactante y significativa.

Conclucion general.

Las habilidades esenciales en el ámbito de la ciencia de datos y análisis han demostrado ser herramientas poderosas para extraer información significativa a partir de conjuntos de datos. Al dominar la manipulación de DataFrame, hemos adquirido la capacidad de gestionar y transformar datos de manera efectiva. Combinado con técnicas avanzadas de manejo de datos, hemos mejorado nuestra capacidad para limpiar, organizar y preparar datos para análisis más profundos. La visualización de datos, por otro lado, ha sido clave para comunicar de manera clara y efectiva patrones, tendencias y conclusiones a partir de nuestros análisis.

          REFERENCIAS BIBLIOGRAFICAS
          

Chang, W. (2013). Libro de cocina de gráficos R. Medios O’Reilly.

Limpieza y preparación de datos en R: Jurečková, J. y Picek, J. (2018). Análisis de datos, Springer.

Data Manipulation with R, Roger D. Peng, Hadley Wickham y Romain François, Springer, 2019.

The Art of Data Cleaning, Cathy O’Neil, HarperCollins, 2017.

Data Visualization: A Practical Introduction, Claus O. Wilke, O’Reilly Media, 2011.