La manipulación de dataframes desempeña un papel fundamental en el análisis de datos y la exploración de información. En el ambiente de R, los dataframes son estructuras que permiten organizar datos de manera eficaz. Este proceso de manipulación se enfoca en la transformación, limpieza y exploración de datos para extraer la información deseada.
Dentro del mundo referente a la manipulación de dataframe existe una gran diversidad de fubcionalidades, dentro de estas se encuentran, el filtrado de datos, la manipulación de variables, la limpieza de datos, el cálculo de estadísticas descriptivas, la preparación de datos para modelos estadísticos y de Machine Learning, etc.
Funciones En el ámbito de la programación, las funciones pertenecen a un bloque de código que efectua cualquier tipo de operación. Estas son útiles para guardar condensar operaciones básicas en un solo código reutilizable, normalmente el nombre de cada función lleva un nombre que describa lo que hace ella misma (Como ejemplo “mean”,“len”, etc). En Rstudio, las funciones se caracterizan por llevar un nombre corto y que da una idea directa de su labor. Los elementos que van dentro de la función tienen el nombre de parámetros o argumentos. Cabe resaltar que el mismo Rstudio te da una serie de gran cantidad de funciones que vienen de manera predeterminada junto al programa.
Funciones integradas a R Rstudio es un entorno que brinda al consumidor ciertas funciones que pueden ayudar al programador a encontrar una gran cantidad de soluciones a diferentes órdenes deseadas. Podemos realizar operaciones básicas como suma, resta,etc. También tenemos funciones personalizadas para vectores, funciones de texto, funciones lógicas, funciones de gráficos, funciones de dataframe y más que procederemos a ver con los siguientes ejemplos.
Operaciones básicas como suma, resta, multiplicación, división, etc.
## [1] 8
## [1] 10
## [1] 4225
## [1] 120
Funciones matemáticas como potencia, raíz, valor absoluto, etc.
## [1] 7
## [1] 243
## [1] 46
Funciones personalizadas para vectores, donde se puede contar la cantidad de elementos, o diversas descripciones estadísticas
## [1] 5
## [1] 15
## [1] 3
Funciones de texto donde tenemos una gran diversidad como convertir la letra de minúsculas a mayúsculas o concatenar texto.
nombre <- "Jair"
apellido <- "Castro Albrecht"
nombrecompleto <- paste(nombre,apellido)
nombrecompleto## [1] "Jair Castro Albrecht"
## [1] "JAIR CASTRO ALBRECHT"
Funciones lógica donde se tratan operadores lógicos como <,>,==, and, etc.
## [1] FALSE
## [1] FALSE
## [1] TRUE
También funciones estadísticas como la desviación estandar, los cuartiles, la varianza, media, etc.
## [1] 1.581139
## 25% 75%
## 2 4
Tambien hay funciones para crear y trabajar con dataframe.
## nombre edad
## 1 Jair 18
## 2 Matías 20
## 3 Maquera 30
Tambien hay funciones de control de flujo donde se trabajan con if, else, else if,for, etc.
## [1] "y es mayor que x"
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
La ventja principal que podemos encontrar al momento de usar los módulos es que es mucho más sencillo poder compartir componentes con otros programadores; además que, hace que un programa pueda ser organizado en varias secciones lógicas
Este paquete se destaca por su versatilidad en la selección de filas y columnas, lo que resulta crucial en el análisis exploratorio de datos. La eficiencia de dplyr, incluso en conjuntos de datos extensos, convierte a esta librería en una elección fundamental para quienes buscan una manipulación de datos poderosa y eficiente en R.
Con ggplot2, los usuarios pueden construir gráficos utilizando capas, donde cada capa representa un componente específico de la visualización. La función ggplot() establece el marco general, y las capas adicionales, como geom_point() para puntos o geom_line() para líneas, se agregan para definir cómo se representarán los datos. La facilidad para personalizar detalles estéticos, como colores y etiquetas, contribuye a la flexibilidad y versatilidad de ggplot2.
Además, ggplot2 permite la creación de gráficos estadísticos complejos mediante funciones como facet_grid() para la generación de gráficos facetados y stat_smooth() para la incorporación de líneas de ajuste. Esta capacidad para representar datos de manera efectiva y expresiva ha convertido a ggplot2 en una herramienta esencial para profesionales que buscan comunicar eficazmente patrones y tendencias a través de visualizaciones impactantes.
Tidyr, una librería complementaria a dplyr en el ecosistema tidyverse de R, está diseñada para facilitar la manipulación y organización de datos, especialmente en el contexto de dataframes. Su función principal es simplificar las transformaciones entre formatos de datos ancho y largo, ofreciendo una serie de verbos específicos que mejoran la estructura y limpieza de los conjuntos de datos.
La función gather() de tidyr permite llevar datos de formato ancho a largo, una operación esencial en situaciones donde las variables están distribuidas en columnas. Por otro lado, spread() realiza la operación opuesta, convirtiendo datos de formato largo a ancho. Estos verbos, combinados con la capacidad de renombrar y eliminar variables con rename() y select(), respectivamente, facilitan la creación de conjuntos de datos más organizados y adaptados a las necesidades analíticas.
Tidyr, al trabajar en armonía con dplyr y otras librerías del tidyverse, contribuye a la creación de flujos de trabajo de manipulación de datos más eficientes y coherentes en R, permitiendo a los usuarios preparar sus datos de manera óptima para análisis y visualización.
Shiny es una librería en R que revoluciona la forma en que los usuarios interactúan con sus datos al permitir la creación de aplicaciones web interactivas de manera sencilla. Su funcionalidad principal se centra en transformar análisis y visualizaciones estáticas en experiencias dinámicas y accesibles a través de interfaces web. Shiny facilita la construcción de aplicaciones sin requerir conocimientos extensos de desarrollo web.
Con Shiny, los usuarios pueden crear paneles de control interactivos, gráficos actualizables en tiempo real y aplicaciones personalizadas sin tener que salir del entorno R. La capacidad de incorporar widgets, como deslizadores, botones y cuadros de texto, permite a los usuarios ajustar parámetros y observar instantáneamente cómo estos cambios afectan a los resultados. Esto hace que Shiny sea invaluable para la comunicación efectiva de resultados y hallazgos a audiencias no técnicas.
Además, Shiny se integra armoniosamente con otras librerías de R, como ggplot2 y dplyr, lo que facilita la incorporación de análisis avanzados y visualizaciones complejas en aplicaciones web. En resumen, Shiny ofrece una puerta de entrada accesible para transformar análisis de datos en experiencias interactivas y compartibles, abriendo nuevas posibilidades para la difusión y comprensión de la información.
nombres <- c("Jair", "Matias", "Daniel", "Maquera", "Garrido", "Felupo", "Lady", "Moon", "Andrew", "Alexis")
notas <- c(85, 92, 78, 94, 88, 76, 90, 82, 96, 89)
genero <- c("Masculino", "Masculino", "Masculino", "Masculino", "Masculino", "Masculino", "Femenino", "Femenino", "Masculino", "Masculino")
dfya <- data.frame(Nombres = nombres, Notas = notas, Genero = genero)
dfya## Nombres Notas Genero
## 1 Jair 85 Masculino
## 2 Matias 92 Masculino
## 3 Daniel 78 Masculino
## 4 Maquera 94 Masculino
## 5 Garrido 88 Masculino
## 6 Felupo 76 Masculino
## 7 Lady 90 Femenino
## 8 Moon 82 Femenino
## 9 Andrew 96 Masculino
## 10 Alexis 89 Masculino
## $Femenino
## Nombres Notas Genero
## 7 Lady 90 Femenino
## 8 Moon 82 Femenino
##
## $Masculino
## Nombres Notas Genero
## 1 Jair 85 Masculino
## 2 Matias 92 Masculino
## 3 Daniel 78 Masculino
## 4 Maquera 94 Masculino
## 5 Garrido 88 Masculino
## 6 Felupo 76 Masculino
## 9 Andrew 96 Masculino
## 10 Alexis 89 Masculino
## [,1] [,2] [,3] [,4] [,5] [,6]
## nombres "Jair" "Matias" "Daniel" "Maquera" "Garrido" "Felupo"
## genero "Masculino" "Masculino" "Masculino" "Masculino" "Masculino" "Masculino"
## [,7] [,8] [,9] [,10]
## nombres "Lady" "Moon" "Andrew" "Alexis"
## genero "Femenino" "Femenino" "Masculino" "Masculino"
## nombres genero
## [1,] "Jair" "Masculino"
## [2,] "Matias" "Masculino"
## [3,] "Daniel" "Masculino"
## [4,] "Maquera" "Masculino"
## [5,] "Garrido" "Masculino"
## [6,] "Felupo" "Masculino"
## [7,] "Lady" "Femenino"
## [8,] "Moon" "Femenino"
## [9,] "Andrew" "Masculino"
## [10,] "Alexis" "Masculino"
El proceso en el análisis de datos sigue una secuencia coherente desde la definición de objetivos hasta la iteración y mejora constante. Inicia con la adquisición de datos, seguida de la exploración, depuración y análisis estadístico. Se puede aplicar la modelización predictiva, y los resultados se presentan a través de visualizaciones efectivas. La interpretación de los resultados y la toma de decisiones informadas cierran el ciclo, destacando la importancia de la documentación y la iteración en este procedimiento dinámico y adaptable.
Dentro del entorno de trabajo, tenemos la opción de importar datasets que ya tenemos debidamente descargados. En este caso veremos como hacerlo de manera manual. Con texto cuando ya tengamos un dataset descargado.
Antes de nada, cabe resaltar que para la importanción de datos, hay un par de librerías en específico que son fundamentales para el desarrollo eficaz de estre proceso. Estoy hablando de readr y readxl. Uno permite la lectura de datos rectangulares como csv, mientras que el otro directamente archivos excel. En este caso descargaremos de kaggle una base de datos para más adelante desarrollarlo. El link del kaggle descargado es https://www.kaggle.com/datasets/santiagovolpi/los-100-clubes-de-futbol-mejor-valuados-del-mundo
## Club Competition Age Squad_size Market_value
## 1 Manchester City Premier League 27.2 23 €1.05bn
## 2 Paris Saint-Germain Ligue 1 26.1 35 €997.75m
## 3 Manchester United Premier League 28.0 28 €937.25m
## 4 Chelsea FC Premier League 26.8 27 €882.50m
## 5 Liverpool FC Premier League 27.0 27 €879.50m
## 6 Bayern Munich Bundesliga 25.9 26 €852.90m
## Market_value_of_players MV_Top_18_players Share_of_MV
## 1 €45.75m €988.00m 93.9 %
## 2 €28.51m €889.00m 89.1 %
## 3 €33.47m €850.00m 90.7 %
## 4 €32.69m €816.00m 92.5 %
## 5 €32.57m €810.50m 92.2 %
## 6 €32.80m €819.90m 96.1 %
Ahora importaré de manera manual una base de datos en spss, sin código usando la ventana de herramientas. El link de la base de datos es https://proyectos.inei.gob.pe/microdatos/Consulta_por_Encuesta.asp
## Warning: package 'haven' was built under R version 4.3.2
## # A tibble: 21,767 × 78
## CONG NSELV HOGAR TOT_HOGAR CCDD NOMBREDD CCPP NOMBREPP CCDI NOMBREDI
## <chr> <chr> <dbl> <dbl> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 00002 0012 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## 2 00002 0080 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## 3 00002 0119 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## 4 00002 0146 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## 5 00002 0203 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## 6 00002 0222 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## 7 00002 0252 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## 8 00002 0277 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## 9 00010 0003 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## 10 00010 0030 1 1 24 TUMBES 02 CONTRALMIRAN… 01 ZORRITOS
## # ℹ 21,757 more rows
## # ℹ 68 more variables: UBIGEO <chr>, VIVIENDA <chr>, DOMINIO <dbl+lbl>,
## # ESTRATO <dbl+lbl>, PER <dbl>, P101 <dbl+lbl>, P102 <dbl+lbl>,
## # P103 <dbl+lbl>, P104 <dbl+lbl>, P105 <dbl>, P106 <dbl+lbl>,
## # P108_1 <dbl+lbl>, P108_2 <dbl+lbl>, P108_3 <dbl+lbl>, P108_4 <dbl+lbl>,
## # P108_5 <dbl+lbl>, P108_6 <dbl+lbl>, P109_1 <dbl+lbl>, P109_2 <dbl+lbl>,
## # P109_3 <dbl+lbl>, P109_4 <dbl+lbl>, P109_5 <dbl+lbl>, P109_6 <dbl+lbl>, …
La identificación y manejo de datos faltantes, conocidos como “missing data” en inglés, se refieren al proceso de reconocer, analizar y tratar los valores ausentes o desconocidos dentro de un conjunto de datos. Estos valores faltantes pueden surgir por diversas razones, como errores de entrada, fallas en la medición, o simplemente porque la información no está disponible.
Supongamos que tienes un conjunto de datos en formato CSV y deseas
cargarlo en R. Puedes usar la función
read.csv() y luego verificar los valores
faltantes.
datos <- read.csv("C:/Users/jairc/OneDrive/Escritorio/DATASETS/ufc-fighters-statistics (1).csv")
head(datos)## name nickname wins losses
## 1 Rex Richards -0.5717426 -0.7291651
## 2 Luana Santos -0.6783976 -0.9250680
## 3 Cortavious Romious Are You Not Entertained? -0.5717426 -0.7291651
## 4 Danny Silva El Puma -0.4650876 -0.9250680
## 5 Angel Pacheco -0.5717426 -0.7291651
## 6 Charalampos Grigoriou Ferocious -0.4650876 -0.5332622
## draws height_cm weight_in_kg reach_in_cm stance date_of_birth
## 1 -0.3213415 1.9513045 2.3795679 1.757895e-16
## 2 -0.3213415 -1.1918309 -1.1504868 -1.493353e+00 Orthodox 2000-04-16
## 3 -0.3213415 -1.7633101 -0.8986577 -1.167028e+00 Southpaw 1994-01-06
## 4 -0.3213415 0.2368670 -0.6462727 -5.143771e-01 Switch 1997-01-30
## 5 -0.3213415 -0.6203517 -0.6462727 -5.143771e-01 Orthodox 1992-01-13
## 6 -0.3213415 -0.9060913 -0.8986577 -1.493353e+00 Orthodox 1992-03-31
## significant_strikes_landed_per_minute significant_striking_accuracy
## 1 7.616951 1.1000246
## 2 7.341481 1.1980394
## 3 6.029241 -0.2231751
## 4 5.588489 1.3940690
## 5 5.353087 0.2178915
## 6 5.287976 1.4430764
## significant_strikes_absorbed_per_minute significant_strike_defence
## 1 0.7519509 1.31399576
## 2 1.1835172 1.13481501
## 3 6.1553022 -0.07465501
## 4 3.5027479 0.73165834
## 5 3.6676554 -0.34342613
## 6 0.2993325 0.91083908
## average_takedowns_landed_per_15_minutes takedown_accuracy takedown_defense
## 1 -0.6463722 -0.9153491 -1.1322854
## 2 -0.6463722 -0.9153491 1.7698695
## 3 -0.6463722 -0.9153491 -1.1322854
## 4 0.3890349 1.3820159 1.7698695
## 5 -0.6463722 -0.9153491 -0.1745743
## 6 -0.6463722 -0.9153491 -1.1322854
## average_submissions_attempted_per_15_minutes reach_in_cm_mediana
## 1 7.616951 1.757895e-16
## 2 7.341481 -1.493353e+00
## 3 6.029241 -1.167028e+00
## 4 5.588489 -5.143771e-01
## 5 5.353087 -5.143771e-01
## 6 5.287976 -1.493353e+00
# Reemplaza 'ruta/a/tu/dataset.csv' con la ruta de tu conjunto de datos CSV
datos <- read.csv("C:/Users/jairc/OneDrive/Escritorio/DATASETS/ufc-fighters-statistics (1).csv")
# Verificar los valores faltantes en todo el conjunto de datos
print(sum(is.na(datos))) # Muestra la cantidad total de valores faltantes en el conjunto de datos## [1] 384
A veces, eliminar filas con datos faltantes puede ser una opción si las filas con datos faltantes son pocas en comparación con el tamaño total del conjunto de datos.
## name nickname wins losses
## 1 Rex Richards -0.5717426 -0.7291651
## 2 Luana Santos -0.6783976 -0.9250680
## 3 Cortavious Romious Are You Not Entertained? -0.5717426 -0.7291651
## 4 Danny Silva El Puma -0.4650876 -0.9250680
## 5 Angel Pacheco -0.5717426 -0.7291651
## 6 Charalampos Grigoriou Ferocious -0.4650876 -0.5332622
## draws height_cm weight_in_kg reach_in_cm stance date_of_birth
## 1 -0.3213415 1.9513045 2.3795679 1.757895e-16
## 2 -0.3213415 -1.1918309 -1.1504868 -1.493353e+00 Orthodox 2000-04-16
## 3 -0.3213415 -1.7633101 -0.8986577 -1.167028e+00 Southpaw 1994-01-06
## 4 -0.3213415 0.2368670 -0.6462727 -5.143771e-01 Switch 1997-01-30
## 5 -0.3213415 -0.6203517 -0.6462727 -5.143771e-01 Orthodox 1992-01-13
## 6 -0.3213415 -0.9060913 -0.8986577 -1.493353e+00 Orthodox 1992-03-31
## significant_strikes_landed_per_minute significant_striking_accuracy
## 1 7.616951 1.1000246
## 2 7.341481 1.1980394
## 3 6.029241 -0.2231751
## 4 5.588489 1.3940690
## 5 5.353087 0.2178915
## 6 5.287976 1.4430764
## significant_strikes_absorbed_per_minute significant_strike_defence
## 1 0.7519509 1.31399576
## 2 1.1835172 1.13481501
## 3 6.1553022 -0.07465501
## 4 3.5027479 0.73165834
## 5 3.6676554 -0.34342613
## 6 0.2993325 0.91083908
## average_takedowns_landed_per_15_minutes takedown_accuracy takedown_defense
## 1 -0.6463722 -0.9153491 -1.1322854
## 2 -0.6463722 -0.9153491 1.7698695
## 3 -0.6463722 -0.9153491 -1.1322854
## 4 0.3890349 1.3820159 1.7698695
## 5 -0.6463722 -0.9153491 -0.1745743
## 6 -0.6463722 -0.9153491 -1.1322854
## average_submissions_attempted_per_15_minutes reach_in_cm_mediana
## 1 7.616951 1.757895e-16
## 2 7.341481 -1.493353e+00
## 3 6.029241 -1.167028e+00
## 4 5.588489 -5.143771e-01
## 5 5.353087 -5.143771e-01
## 6 5.287976 -1.493353e+00
La imputación implica reemplazar los valores faltantes con algún valor estimado, como la media, la mediana o un valor predicho.
# Imputación usando la media de la columna
datos$reach_in_cm <- ifelse(is.na(datos$reach_in_cm), mean(datos$reach_in_cm, na.rm = TRUE), datos$reach_in_cm)
# Imputación usando la mediana de la columna
datos$reach_in_cm_mediana <- ifelse(is.na(datos$reach_in_cm), median(datos$reach_in_cm, na.rm = TRUE), datos$reach_in_cm)
head(datos)## name nickname wins losses
## 1 Rex Richards -0.5717426 -0.7291651
## 2 Luana Santos -0.6783976 -0.9250680
## 3 Cortavious Romious Are You Not Entertained? -0.5717426 -0.7291651
## 4 Danny Silva El Puma -0.4650876 -0.9250680
## 5 Angel Pacheco -0.5717426 -0.7291651
## 6 Charalampos Grigoriou Ferocious -0.4650876 -0.5332622
## draws height_cm weight_in_kg reach_in_cm stance date_of_birth
## 1 -0.3213415 1.9513045 2.3795679 1.757895e-16
## 2 -0.3213415 -1.1918309 -1.1504868 -1.493353e+00 Orthodox 2000-04-16
## 3 -0.3213415 -1.7633101 -0.8986577 -1.167028e+00 Southpaw 1994-01-06
## 4 -0.3213415 0.2368670 -0.6462727 -5.143771e-01 Switch 1997-01-30
## 5 -0.3213415 -0.6203517 -0.6462727 -5.143771e-01 Orthodox 1992-01-13
## 6 -0.3213415 -0.9060913 -0.8986577 -1.493353e+00 Orthodox 1992-03-31
## significant_strikes_landed_per_minute significant_striking_accuracy
## 1 7.616951 1.1000246
## 2 7.341481 1.1980394
## 3 6.029241 -0.2231751
## 4 5.588489 1.3940690
## 5 5.353087 0.2178915
## 6 5.287976 1.4430764
## significant_strikes_absorbed_per_minute significant_strike_defence
## 1 0.7519509 1.31399576
## 2 1.1835172 1.13481501
## 3 6.1553022 -0.07465501
## 4 3.5027479 0.73165834
## 5 3.6676554 -0.34342613
## 6 0.2993325 0.91083908
## average_takedowns_landed_per_15_minutes takedown_accuracy takedown_defense
## 1 -0.6463722 -0.9153491 -1.1322854
## 2 -0.6463722 -0.9153491 1.7698695
## 3 -0.6463722 -0.9153491 -1.1322854
## 4 0.3890349 1.3820159 1.7698695
## 5 -0.6463722 -0.9153491 -0.1745743
## 6 -0.6463722 -0.9153491 -1.1322854
## average_submissions_attempted_per_15_minutes reach_in_cm_mediana
## 1 7.616951 1.757895e-16
## 2 7.341481 -1.493353e+00
## 3 6.029241 -1.167028e+00
## 4 5.588489 -5.143771e-01
## 5 5.353087 -5.143771e-01
## 6 5.287976 -1.493353e+00
queremos identificar outliers en la columna llamada ‘significant_striking_accuracy’:
# Tenemos una columna 'datos$significant_striking_accuracy'
columna_outliers <- datos$significant_striking_accuracy
# Calcular el rango intercuartílico (IQR) ignorando los valores faltantes
Q1 <- quantile(columna_outliers, 0.25, na.rm = TRUE)
Q3 <- quantile(columna_outliers, 0.75, na.rm = TRUE)
IQR_valor <- Q3 - Q1
# Definir los límites para identificar outliers
umbral_inferior <- Q1 - 1.5 * IQR_valor
umbral_superior <- Q3 + 1.5 * IQR_valor
# Identificar outliers
outliers <- columna_outliers[columna_outliers < umbral_inferior | columna_outliers > umbral_superior]
print(outliers)## [1] 3.158335 2.521239 2.472232 2.766276 3.158335 2.325210 2.325210 2.423224
## [9] 2.423224 3.158335 3.158335 3.158335 2.521239 3.158335 3.158335 3.158335
## [17] 3.158335 3.158335 3.158335 3.158335 3.158335 3.158335 2.325210 3.158335
## [25] 3.158335 3.158335 3.158335
# Eliminar outliers del conjunto de datos
datos_limpio <- datos[!(columna_outliers %in% outliers), ]## name nickname wins losses
## 1 Rex Richards -0.5717426 -0.7291651
## 2 Luana Santos -0.6783976 -0.9250680
## 3 Cortavious Romious Are You Not Entertained? -0.5717426 -0.7291651
## 4 Danny Silva El Puma -0.4650876 -0.9250680
## 5 Angel Pacheco -0.5717426 -0.7291651
## 6 Charalampos Grigoriou Ferocious -0.4650876 -0.5332622
## draws height_cm weight_in_kg reach_in_cm stance date_of_birth
## 1 -0.3213415 1.9513045 2.3795679 1.757895e-16
## 2 -0.3213415 -1.1918309 -1.1504868 -1.493353e+00 Orthodox 2000-04-16
## 3 -0.3213415 -1.7633101 -0.8986577 -1.167028e+00 Southpaw 1994-01-06
## 4 -0.3213415 0.2368670 -0.6462727 -5.143771e-01 Switch 1997-01-30
## 5 -0.3213415 -0.6203517 -0.6462727 -5.143771e-01 Orthodox 1992-01-13
## 6 -0.3213415 -0.9060913 -0.8986577 -1.493353e+00 Orthodox 1992-03-31
## significant_strikes_landed_per_minute significant_striking_accuracy
## 1 7.616951 1.1000246
## 2 7.341481 1.1980394
## 3 6.029241 -0.2231751
## 4 5.588489 1.3940690
## 5 5.353087 0.2178915
## 6 5.287976 1.4430764
## significant_strikes_absorbed_per_minute significant_strike_defence
## 1 0.7519509 1.31399576
## 2 1.1835172 1.13481501
## 3 6.1553022 -0.07465501
## 4 3.5027479 0.73165834
## 5 3.6676554 -0.34342613
## 6 0.2993325 0.91083908
## average_takedowns_landed_per_15_minutes takedown_accuracy takedown_defense
## 1 -0.6463722 -0.9153491 -1.1322854
## 2 -0.6463722 -0.9153491 1.7698695
## 3 -0.6463722 -0.9153491 -1.1322854
## 4 0.3890349 1.3820159 1.7698695
## 5 -0.6463722 -0.9153491 -0.1745743
## 6 -0.6463722 -0.9153491 -1.1322854
## average_submissions_attempted_per_15_minutes reach_in_cm_mediana
## 1 7.616951 1.757895e-16
## 2 7.341481 -1.493353e+00
## 3 6.029241 -1.167028e+00
## 4 5.588489 -5.143771e-01
## 5 5.353087 -5.143771e-01
## 6 5.287976 -1.493353e+00
# Verificar los valores faltantes en todo el conjunto de datos
print(sum(is.na(datos))) # Muestra la cantidad total de valores faltantes en el conjunto de datos## [1] 384
# Seleccionar columnas numéricas
columnas_numericas <- sapply(datos, is.numeric)
# Estandarizar columnas numéricas (restar la media y dividir por la desviación estándar)
datos[columnas_numericas] <- scale(datos[columnas_numericas])
head(datos)## name nickname wins losses
## 1 Rex Richards -0.5717426 -0.7291651
## 2 Luana Santos -0.6783976 -0.9250680
## 3 Cortavious Romious Are You Not Entertained? -0.5717426 -0.7291651
## 4 Danny Silva El Puma -0.4650876 -0.9250680
## 5 Angel Pacheco -0.5717426 -0.7291651
## 6 Charalampos Grigoriou Ferocious -0.4650876 -0.5332622
## draws height_cm weight_in_kg reach_in_cm stance date_of_birth
## 1 -0.3213415 1.9513045 2.3795679 1.757351e-16
## 2 -0.3213415 -1.1918309 -1.1504868 -1.493353e+00 Orthodox 2000-04-16
## 3 -0.3213415 -1.7633101 -0.8986577 -1.167028e+00 Southpaw 1994-01-06
## 4 -0.3213415 0.2368670 -0.6462727 -5.143771e-01 Switch 1997-01-30
## 5 -0.3213415 -0.6203517 -0.6462727 -5.143771e-01 Orthodox 1992-01-13
## 6 -0.3213415 -0.9060913 -0.8986577 -1.493353e+00 Orthodox 1992-03-31
## significant_strikes_landed_per_minute significant_striking_accuracy
## 1 7.616951 1.1000246
## 2 7.341481 1.1980394
## 3 6.029241 -0.2231751
## 4 5.588489 1.3940690
## 5 5.353087 0.2178915
## 6 5.287976 1.4430764
## significant_strikes_absorbed_per_minute significant_strike_defence
## 1 0.7519509 1.31399576
## 2 1.1835172 1.13481501
## 3 6.1553022 -0.07465501
## 4 3.5027479 0.73165834
## 5 3.6676554 -0.34342613
## 6 0.2993325 0.91083908
## average_takedowns_landed_per_15_minutes takedown_accuracy takedown_defense
## 1 -0.6463722 -0.9153491 -1.1322854
## 2 -0.6463722 -0.9153491 1.7698695
## 3 -0.6463722 -0.9153491 -1.1322854
## 4 0.3890349 1.3820159 1.7698695
## 5 -0.6463722 -0.9153491 -0.1745743
## 6 -0.6463722 -0.9153491 -1.1322854
## average_submissions_attempted_per_15_minutes reach_in_cm_mediana
## 1 7.616951 1.757351e-16
## 2 7.341481 -1.493353e+00
## 3 6.029241 -1.167028e+00
## 4 5.588489 -5.143771e-01
## 5 5.353087 -5.143771e-01
## 6 5.287976 -1.493353e+00
Un histograma es una representación gráfica de la distribución de una variable numérica. Divide los datos en intervalos y muestra la frecuencia (o densidad) de los valores en cada intervalo mediante barras. Es útil para entender la forma y la dispersión de una distribución de datos, permitiendo identificar patrones como la simetría, la asimetría, la concentración de valores, y los valores atípicos.
# Supongamos que queremos visualizar la distribución de la columna 'variable_a_analizar'
hist(datos$significant_strikes_absorbed_per_minute
, main = "Histograma de significant_strikes_absorbed_per_minute
", xlab = "Valores", ylab = "Frecuencia")El gráfico de densidad es una representación visual suave de la distribución de una variable numérica. Muestra la estimación de la densidad de probabilidad de los datos. Es similar al histograma pero suavizado, lo que hace que sea útil para identificar patrones en la forma de la distribución de los datos, como la simetría, la multimodalidad y las áreas de alta densidad.
# Gráfico de densidad para la misma variable 'significant_strikes_absorbed_per_minute'
plot(density(datos$significant_strikes_absorbed_per_minute), main = "Gráfico de Densidad de significant_strikes_absorbed_per_minute", xlab = "Valores", ylab = "Densidad")El gráfico de caja es una representación gráfica que muestra la distribución de una variable numérica mediante cuartiles. Muestra la mediana, los cuartiles, y los posibles valores atípicos. Es útil para identificar la posición central de los datos, la dispersión, así como la presencia de valores atípicos o la asimetría en la distribución.
# Gráfico de caja para la misma variable 'wins'
boxplot(datos$wins, main = "Gráfico de Caja de wins", ylab = "Valores")El gráfico de barras representa la frecuencia o el recuento de valores de una variable categórica. Muestra cada categoría en el eje x y su frecuencia en el eje y, con barras rectangulares. Es útil para comparar la frecuencia de diferentes categorías y entender la distribución de una variable categórica.
# Gráfico de barras para la distribución de esta variable ´stance´
barplot(table(datos$stance), main = "Gráfico de Barras de stance", xlab = "Categorías", ylab = "Frecuencia")Un gráfico de dispersión muestra la relación entre dos variables numéricas. Cada punto en el gráfico representa una observación con valores para ambas variables, lo que permite identificar patrones visuales de asociación, tendencia, dispersión y posibles valores atípicos.
# Supongamos que queremos visualizar la relación entre 'variable_x' y 'variable_y'
plot(datos$wins, datos$losses,
main = "Gráfico de Dispersión",
xlab = "wins X", ylab = "losses Y")Un gráfico de líneas muestra la relación entre dos variables numéricas utilizando líneas conectando puntos de datos ordenados. Es útil para representar cambios y tendencias en una variable a lo largo de la otra variable.
# Supongamos que queremos visualizar la tendencia de 'variable_y' en función de 'variable_x'
plot(datos$wins, datos$losses,
type = "l",
main = "Gráfico de Líneas",
xlab = "wins X", ylab = "losses Y")Un gráfico de barras muestra la comparación entre dos variables categóricas o una variable categórica frente a una numérica. Puede ser agrupado o apilado, representando la relación entre las variables categóricas y la frecuencia o suma de la variable numérica.
# Supongamos que queremos comparar la frecuencia de 'variable_y' para diferentes categorías de 'variable_categorica'
barplot(table(datos$stance, datos$wins),
main = "Gráfico de Barras",
xlab = "stance", ylab = "wins Y")# Supongamos que queremos visualizar la relación entre dos variables 'wins' y 'losses'
plot(datos$wins, datos$losses,
main = "Gráfico de Dispersión",
xlab = "wins", ylab = "losses")# Calcular la matriz de dispersión
matriz_dispersión <- cor(datos[c('wins', 'losses', 'takedown_defense')])
# Mostrar la matriz de dispersión en la consola
print(matriz_dispersión)## wins losses takedown_defense
## wins 1.0000000 0.62580317 0.24023286
## losses 0.6258032 1.00000000 0.05553998
## takedown_defense 0.2402329 0.05553998 1.00000000
Usamos corrplot
# Convertir las variables a numéricas si no lo están
sipi <- as.numeric(datos$wins)
nopi <- as.numeric(datos$losses)
# Crear una matriz con ambas variables
matriz_datos <- cbind(sipi, nopi)
# Calcular la matriz de correlación
matriz_correlacion <- cor(matriz_datos)
# Gráfico de calor para visualizar la matriz de correlación
library(corrplot) # Asegúrate de cargar la librería corrplot## Warning: package 'corrplot' was built under R version 4.3.2
## corrplot 0.92 loaded
Usamos la librería oro.nifti
## Warning: package 'oro.nifti' was built under R version 4.3.2
## oro.nifti 0.11.4
ruta_imagen <- "C:/Users/jairc/OneDrive/Escritorio/DATASETS/1-004.nii"
imagen_nifti <- readNIfTI(ruta_imagen)
# Visualizar una sección de la imagen
slice <- 1
imagen_slice <- imagen_nifti[,,slice]
# Utilizar la función 'image' para mostrar la imagen
image(imagen_slice, col = gray.colors(256), main = "Imagen Médica")rgl:rgl es una librería potente para
gráficos en 3D interactivos en R. Permite representar gráficos
tridimensionales y escenas interactivas.
## Warning: package 'rgl' was built under R version 4.3.2
plotly:plotly es una librería que permite
crear gráficos interactivos en R, incluyendo visualizaciones 3D.
## Warning: package 'plotly' was built under R version 4.3.2
## Loading required package: ggplot2
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:oro.nifti':
##
## slice
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
datos <- read.csv("C:/Users/jairc/OneDrive/Escritorio/DATASETS/ufc-fighters-statistics (1).csv")
# Supongamos que 'x', 'y' y 'z' son columnas numéricas de tu dataset
fig <- plot_ly(
data = datos,
x = ~wins,
y = ~losses,
z = ~significant_strikes_landed_per_minute,
type = "scatter3d",
mode = "markers",
marker = list(size = 5)
)
figLos datos no estructurados, carecen de una organización, son datos que llegan sin procesar, y están formados por fotos, videos, audios, etc. Como no tienen una organización para que se pueda ordenar de manera adecuada, por lo que no se podría poner en una tabla ni en una base de datos. Es un conglomerado masivo y desorganizado que no llega a tener valor hasta que se identifiquen de manera organizada. En el caso del texto, R facilita la extracción de la informacion adecuada. Para imágenes y audio se necesitan bibliotecas como magick e imager o turner # Conclusiones
La capacidad de manipular DataFrames en R establece un cimiento robusto para la ejecución eficaz de análisis de datos, capacitando a los usuarios para explorar, transformar y adecuar datos de manera eficiente antes de adentrarse en análisis más complejos.
En el contexto de R, la administración de datos implica enfrentarse a valores faltantes, outliers e incongruencias, lo que desempeña un papel crucial en la mejora de la calidad de los resultados analíticos. Este procedimiento resulta fundamental para asegurar la integridad y confiabilidad de los datos previo a la realización de análisis más sofisticados.
La visualización de datos en R es crucial para representar patrones y relaciones en conjuntos de datos, facilitando la interpretación y comunicación efectiva de la información. Este enfoque mejora la comprensión intuitiva de datos univariados y bivariados, así como matrices de correlación, proporcionando una herramienta esencial en el análisis de datos.
#Referencias
Wickham, H., & Grolemund, G. (2017). R for Data Science. O’Reilly Media. R Core Team (2021). R: A language and environment for statistical computing. R Foundation for Statistical Computing.
Zuur, A., Ieno, E. N., & Meesters, E. (2009). A Beginner’s Guide to R. Springer Science & Business Media. Fox, J., & Weisberg, S. (2019). An R Companion to Applied Regression. Sage.
Wickham, H. (2019). Advanced R. CRC Press. Peng, R. D. (2015). Exploratory Data Analysis with R. Springer. Visualización de datos:
Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis. Springer. Kabacoff, R. I. (2011). R in Action: Data Analysis and Graphics with R. Manning Publications.
Chang, W. (2013). R Graphics Cookbook. O’Reilly Media. Murrell, P. (2005). R Graphics. CRC Press.
Sarkar, D. (2008). Lattice: Multivariate Data Visualization with R. Springer. Friendly, M., & Kwan, E. (2018). Data Visualization with R: 100 Examples. CRC Press.
Sievert, C. (2020). Interactive web-based data visualization with R, plotly, and shiny. CRC Press. Chang, W. (2018). R Graphics Cookbook: Practical Recipes for Visualizing Data. O’Reilly Media.