TRABAJO FINAL DE LENGUAJE DE PROGRAMACIÓN ESTADÍSTICA
Integrantes:
Coaquira Coaquira Jose Luis
Salvador Ataucusi Nilson
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:
#mean(datos)
2.Mediana:
#median(datos)
#var(datos)
#sd(datos)
# Cuantil 25%
#quantile(datos, 0.25)
# Cuantil 75%
#quantile(datos, 0.75)
# hist(datos)
# boxplot(datos)
# cor(datos1, datos2)
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.
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)
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>
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:
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):
# Ejemplo
## summary(datos)
## ggplot(datos, aes(x = variable1, y = variable2)) + geom_point()
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)
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
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)
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()
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.
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.
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>
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
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
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")
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'
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?
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")
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.