Warning: package 'readr' was built under R version 4.3.2
# install.packages("readxl")library(readxl)
Warning: package 'readxl' was built under R version 4.3.2
b) Dataframe, Manipulación e Introducción al análisis de datos.
En RStudio, un dataframe es una estructura de datos tabular que se utiliza para organizar y almacenar conjuntos de datos.
Es una de las estructuras de datos más comunes y útiles en R para trabajar con datos de manera eficiente.
Un dataframe puede verse como una matriz, donde cada columna puede tener un tipo de datos diferente (por ejemplo, números, caracteres, factores, etc.).
Esto lo hace adecuado para representar conjuntos de datos heterogéneos, como los comunes en análisis de datos y estadísticas.
Ejemplo de creacion de dataframe básico
df <-data.frame(id =11:15, genero =c("F", "F", "M", "M", "F"), masa =c(17, 18, 18, 21, 20))df
id genero masa
1 11 F 17
2 12 F 18
3 13 M 18
4 14 M 21
5 15 F 20
Para hacer uso de las diversas funciones que tiene y que se le pueden aplicar a un dataframe, usaremos de ejemplo la data iris que nos proporciona el mismo R.
Un poco sobre el dataframe iris
La base de datos Iris es un conjunto de datos ampliamente conocido y utilizado en el campo de la estadística y el aprendizaje automático. Introducida por el biólogo y estadístico británico Ronald A. Fisher en 1936, esta base de datos proporciona mediciones detalladas de cuatro características botánicas de flores pertenecientes a tres especies diferentes de iris: setosa, versicolor y virginica. Las características medidas incluyen la longitud y el ancho del sépalo, así como la longitud y el ancho del pétalo, todas expresadas en milímetros.
Mostrar datos
Si queremos ver la cabezera de los datos, usaremos la función head() , por defecto esta función mostrará los 6 primeros datos del archivo.
Podemos cambiar el nombre de las columnas, para fines prácticos o específicos
colnames(iris) <-c("Longitud del sepalo", "Ancho del sepalo", "Longitud del petalo", "Ancho del petalo", "Especie")# Otra forma# names(iris) <- c("Longitud del sepalo", "Ancho del sepalo", "Longitud del petalo", "Ancho del petalo", "Especie")
Verificamos el cambio de nombre de las columnas
colnames(iris)
[1] "Longitud del sepalo" "Ancho del sepalo" "Longitud del petalo"
[4] "Ancho del petalo" "Especie"
Conocer la estructura de un dataframe
str(iris)
'data.frame': 150 obs. of 5 variables:
$ Longitud del sepalo: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Ancho del sepalo : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Longitud del petalo: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Ancho del petalo : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Especie : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Acceder a las columnas del dataframe
# Una columna, en específicoiris$"Ancho del sepalo"
# Varias columnashead(iris[c("Ancho del sepalo","Longitud del sepalo")])
Ancho del sepalo Longitud del sepalo
1 3.5 5.1
2 3.0 4.9
3 3.2 4.7
4 3.1 4.6
5 3.6 5.0
6 3.9 5.4
Accerder a las filas del dataframe
# Una filairis[1,]
Longitud del sepalo Ancho del sepalo Longitud del petalo Ancho del petalo
1 5.1 3.5 1.4 0.2
Especie
1 setosa
# Varias filasiris[75:80,]
Longitud del sepalo Ancho del sepalo Longitud del petalo Ancho del petalo
75 6.4 2.9 4.3 1.3
76 6.6 3.0 4.4 1.4
77 6.8 2.8 4.8 1.4
78 6.7 3.0 5.0 1.7
79 6.0 2.9 4.5 1.5
80 5.7 2.6 3.5 1.0
Especie
75 versicolor
76 versicolor
77 versicolor
78 versicolor
79 versicolor
80 versicolor
Accerder a los elementos del dataframe
# Un elementoiris[10,"Especie"]
[1] setosa
Levels: setosa versicolor virginica
# Varios elementosiris[30:37, c("Longitud del petalo", "Ancho del petalo")]
Longitud del petalo Ancho del petalo
30 1.6 0.2
31 1.6 0.2
32 1.5 0.4
33 1.5 0.1
34 1.4 0.2
35 1.5 0.2
36 1.2 0.2
37 1.3 0.2
Añadir una columna al dataframe
iris$id <-c(1:150)head(iris)
Longitud del sepalo Ancho del sepalo Longitud del petalo Ancho del petalo
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
6 5.4 3.9 1.7 0.4
Especie id
1 setosa 1
2 setosa 2
3 setosa 3
4 setosa 4
5 setosa 5
6 setosa 6
Eliminar una columna del dataframe
iris$id <-NULL# Eliminando la columna que agregamoshead(iris)
Longitud del sepalo Ancho del sepalo Longitud del petalo Ancho del petalo
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
6 5.4 3.9 1.7 0.4
Especie
1 setosa
2 setosa
3 setosa
4 setosa
5 setosa
6 setosa
Añadir filas al dataframe
nuevafila <-c(3.5, 2.5, 2.2, 1.5, "setosa")iris1 <-rbind(iris, nuevafila)# La nueva fila se coloca al finaltail(iris1)
Longitud del sepalo Ancho del sepalo Longitud del petalo Ancho del petalo
146 6.7 3 5.2 2.3
147 6.3 2.5 5 1.9
148 6.5 3 5.2 2
149 6.2 3.4 5.4 2.3
150 5.9 3 5.1 1.8
151 3.5 2.5 2.2 1.5
Especie
146 virginica
147 virginica
148 virginica
149 virginica
150 virginica
151 setosa
Eliminar filas del dataframe
# Eliminando la fila que agregamostail(iris1[-151,])
Longitud del sepalo Ancho del sepalo Longitud del petalo Ancho del petalo
145 6.7 3.3 5.7 2.5
146 6.7 3 5.2 2.3
147 6.3 2.5 5 1.9
148 6.5 3 5.2 2
149 6.2 3.4 5.4 2.3
150 5.9 3 5.1 1.8
Especie
145 virginica
146 virginica
147 virginica
148 virginica
149 virginica
150 virginica
Ver el resumen de todo el dataframe
summary(iris)
Longitud del sepalo Ancho del sepalo Longitud del petalo Ancho del petalo
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Especie
setosa :50
versicolor:50
virginica :50
En caso que nuestro dato a trabajar tenga las clases incorrectas o se hayan cambiado, podemos arreglarlo de la siguiente manera
iris$`Longitud del sepalo`<-as.numeric(iris$`Longitud del sepalo`)iris$`Ancho del sepalo`<-as.numeric(iris$`Ancho del sepalo`)iris$`Longitud del petalo`<-as.numeric(iris$`Longitud del petalo`)iris$`Ancho del petalo`<-as.numeric(iris$`Ancho del petalo`)
Verificamos cambios
summary(iris)
Longitud del sepalo Ancho del sepalo Longitud del petalo Ancho del petalo
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Especie
setosa :50
versicolor:50
virginica :50
c) Flujo del proceso de análisis de datos.
d) Importación de datos.
Existen diversas maneras de importar datos en R, dependiendo del formato en el que estén almacenados. Algunas de las funciones más comunes para importar datos son las siguientes:
CSV:
CSV son las siglas de “Comma-Separated Values” (Valores Separados por Comas). Es un formato de archivo de texto simple utilizado para almacenar datos tabulares. En un archivo CSV, cada línea representa una fila de datos, y los valores de cada fila están separados por comas (u otro delimitador, como punto y coma).
Importar
Para importar datos desde un archivo CSV, puedes usar la función read.csv o read.csv2 si el archivo utiliza coma como separador decimal.
data_csv <- read.csv("ruta/del/archivo.csv")
En caso que la data este separado en puntos, podemos usar lo siguiente:
data_csv2 <- read.csv2("ruta/del/archivo.csv")
Para otros tipos de separador, hacer la conversión a comas.
Excel:
Si los datos están en un archivo de Excel, utilizar la biblioteca readxl o openxlsx.
data_excel <- read_xlsx("ruta/del/archivo.xlsx")
Otros formatos:
Para la importacion de datos con otros formatos, como archivos de texto plano, JSON, HDF5, entre otros, hay funciones específicas según la extensión y el formato del archivo.
# Para archivos de texto plano# data_tp <- read.table("ruta/del/archivo.txt", header = TRUE)# Para archivos JSON# install.packages("jsonlite")# library(jsonlite)# data_JSON <- fromJSON("ruta/del/archivo.json")# Para archivos HDF5# install.packages("hdf5")# library(hdf5)# data_HDF5 <- h5read("ruta/del/archivo.h5", "/dataset")
Si nuestro dato se encuentra en un página web, como Github, podemos hacer lo siguiente:
Cuando tengamos definido la data a utilizar, para el caso de archivo.csv, dar click en raw y obtener el url.
Posteriormente, verificar si tenemos instalado la libreria readr
Rows: 608 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): resultado, tipo_prueba
dbl (1): personas
date (1): fecha
ℹ 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.
II. Manejo de datos
a) Identificación y manejo de datos missing
Concepto: Los datos faltantes (missing data) se refieren a la ausencia de valores en una variable o columna. Pueden surgir por diversas razones, como errores en la recolección de datos, pérdida de información o simplemente porque ciertos datos no están disponibles.
Manejo: - Identificación: Verificar la presencia de datos faltantes en el conjunto de datos. - Estrategias de manejo: Eliminar filas o columnas con datos faltantes, imputar valores (por ejemplo, reemplazarlos con la media o la mediana), o utilizar técnicas más avanzadas dependiendo del contexto.
Ejemplo
# Verificar si hay datos faltantes en el dataframemissing_values <-any(is.na(df))print(paste("¿Hay datos faltantes en el dataframe? ", missing_values))
[1] "¿Hay datos faltantes en el dataframe? FALSE"
En esta parte, se está verificando si hay algún valor faltante (missing) en el dataframe df. La función is.na() se utiliza para detectar valores faltantes, y any() devuelve TRUE si al menos uno de esos valores es TRUE. El resultado se almacena en la variable missing_values y luego se imprime un mensaje indicando si hay o no datos faltantes.
# Contar la cantidad de datos faltantes por columnamissing_count <-colSums(is.na(df))print("Cantidad de datos faltantes por columna:")
[1] "Cantidad de datos faltantes por columna:"
print(missing_count)
id genero masa
0 0 0
Aquí, se cuenta la cantidad de datos faltantes por columna utilizando la función colSums(). Esta función suma los valores en cada columna, y como los valores faltantes son codificados como NA, la suma de NA da como resultado la cantidad de datos faltantes en cada columna. Luego, se imprime esta información.
# Eliminar filas con datos faltantesdf_sin_missing <-na.omit(df)print("Dataframe sin datos faltantes:")
[1] "Dataframe sin datos faltantes:"
print(df_sin_missing)
id genero masa
1 11 F 17
2 12 F 18
3 13 M 18
4 14 M 21
5 15 F 20
En esta sección, se eliminan las filas que contienen datos faltantes utilizando la función na.omit(). El nuevo dataframe sin datos faltantes se almacena en la variable df_sin_missing y se imprime.
# Imputar valores faltantes (por ejemplo, usando la media)df_imputado <- dfdf_imputado$masa[is.na(df_imputado$masa)] <-mean(df_imputado$masa, na.rm =TRUE)print("Dataframe con valores imputados:")
[1] "Dataframe con valores imputados:"
print(df_imputado)
id genero masa
1 11 F 17
2 12 F 18
3 13 M 18
4 14 M 21
5 15 F 20
Aquí, se imputan los valores faltantes en la columna “masa” utilizando la media de esa columna. Primero, se crea una copia del dataframe original llamada df_imputado. Luego, se utiliza la función mean() para calcular la media de la columna “masa” (ignorando los valores faltantes con na.rm = TRUE) y se asigna esa media a los valores faltantes en esa columna. Finalmente, se imprime el dataframe resultante.
EJEMPLO En este ejemplo vamos a cargar datos y trabajar con ellos con los diferentes requerimientos del primer punto.
# Carga el paquetelibrary(readr)# Especifica la URL del archivo CSVurl_2 <-"https://raw.githubusercontent.com/raulvalerio/statistics-test-and-exploration/master/fast_food.csv"# Lee el archivo CSV y almacena los datos en un data frame llamado 'datos'datos <-read_csv(url_2)
New names:
Rows: 515 Columns: 18
── Column specification
──────────────────────────────────────────────────────── Delimiter: "," chr
(3): restaurant, item, salad dbl (15): ...1, calories, cal_fat, total_fat,
sat_fat, trans_fat, cholestero...
ℹ 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.
• `` -> `...1`
# Muestra las primeras filas del data framehead(datos)
Este código verifica si hay datos faltantes en tu dataframe datos. Si la respuesta es sí, obtenemos la cantidad de datos faltantes por columna. Ahora, veamos algunas estrategias de manejo.
Supongamos que decidimos eliminar las filas que tienen datos faltantes en lugar de imputar valores.
# Eliminar filas con datos faltantesdatos_no_missing <-na.omit(datos)print("Dataframe sin datos faltantes:")
Este código utiliza la función na.omit() para eliminar las filas que contienen al menos un valor faltante. data_sin_missing es el nuevo dataframe resultante.
Ahora, consideremos la imputación de valores usando la media de cada columna para los datos faltantes.
# Imputar valores faltantes con la mediadata_imputado <- datosfor (col incolnames(data_imputado)) {if (any(is.na(data_imputado[[col]]))) { data_imputado[[col]][is.na(data_imputado[[col]])] <-mean(data_imputado[[col]], na.rm =TRUE) }}print("Dataframe con valores imputados:")
Este código itera sobre todas las columnas de tu dataframe y, si encuentra datos faltantes, los imputa con la media de la respectiva columna.
b) Identificación y manejo de datos outlier e inconsistentes
Concepto: Los outliers son observaciones que se desvían significativamente de la tendencia general de los datos. Pueden indicar errores en la recolección de datos o patrones interesantes en los datos. Inconsistencias se refieren a datos que no cumplen con las expectativas o reglas definidas para el conjunto de datos.
Manejo: - Identificación: Utilizar métodos estadísticos como el rango intercuartílico (IQR) para detectar valores atípicos. - Estrategias de manejo: Eliminar outliers si se consideran errores, transformar los datos, o ajustar los valores atípicos según el contexto del análisis.
Ejemplo
# Identificar outliers en la columna "masa" usando el método de IQRmasa_iqr <- df$masaq1 <-quantile(masa_iqr, 0.25)q3 <-quantile(masa_iqr, 0.75)iqr <- q3 - q1lower_bound <- q1 -1.5* iqrupper_bound <- q3 +1.5* iqroutliers <- masa_iqr[masa_iqr < lower_bound | masa_iqr > upper_bound]print("Valores considerados como outliers:")
[1] "Valores considerados como outliers:"
print(outliers)
numeric(0)
En esta sección, se identifican outliers en la columna “masa” utilizando el método del rango intercuartílico (IQR). Se calculan los cuartiles (q1 y q3), el IQR, y se definen límites inferior y superior. Los valores fuera de estos límites se consideran outliers y se almacenan en la variable outliers, que luego se imprime.
# Eliminar outliers en la columna "masa"df_sin_outliers <- df[!(df$masa %in% outliers), ]print("Dataframe sin outliers:")
[1] "Dataframe sin outliers:"
print(df_sin_outliers)
id genero masa
1 11 F 17
2 12 F 18
3 13 M 18
4 14 M 21
5 15 F 20
Aquí, se eliminan las filas que contienen outliers en la columna “masa”. Se crea un nuevo dataframe llamado df_sin_outliers que excluye las filas con valores en la columna “masa” que están en la lista de outliers. Luego, se imprime el nuevo dataframe.
Ejemplo
Para nuestro data frame (datos)
Primero, vamos a identificar los posibles outliers de una columna del dataframe datos utilizando el método del rango intercuartílico (IQR).
# Identificación de outliers con el método del IQRtotal_carb_iqr <- datos_no_missing$total_carb # Columna de ejemploq1 <-quantile(total_carb_iqr, 0.25)q3 <-quantile(total_carb_iqr, 0.75)iqr <- q3 - q1lower_bound <- q1 -1.5* iqrupper_bound <- q3 +1.5* iqroutliers <- total_carb_iqr[total_carb_iqr < lower_bound | total_carb_iqr > upper_bound]print("Valores considerados como outliers:")
[1] "Valores considerados como outliers:"
print(outliers)
[1] 156 109 118 126 121 118 118 112
Este código identificará las filas que contienen valores atípicos en al menos una columna utilizando el método del IQR. Si queremos identificas los outliers de las demás columnas, repetir el procedimiento con la columnas respectiva.
Ahora, si consideremos eliminar los outliers de la columna, debemos hacer lo siguiente
# Eliminar filas con outliersDatos_sin_outliers <- datos_no_missing[!(datos_no_missing$total_carb %in% outliers), ]print("Dataframe sin filas que contienen outliers:")
Este código crea un nuevo dataframe llamado Datos_sin_outliers que excluye las filas que contienen valores atípicos en al menos una columna.
Estas son solo estrategias iniciales y la elección de cómo manejar los outliers dependerá de tu conocimiento del dominio y del contexto específico de tus datos. Puedes ajustar estas estrategias según tus necesidades y objetivos analíticos.
c) Limpieza y preparación de datos
Concepto: La limpieza y preparación de datos es el proceso de acondicionar el conjunto de datos para su análisis. Involucra la identificación y corrección de errores, la transformación de datos en el formato adecuado, la gestión de datos faltantes, la creación de nuevas variables derivadas, y otras acciones que permitan trabajar con los datos de manera efectiva.
Manejo: - Identificación de errores y problemas en los datos. - Transformación de datos según las necesidades del análisis. - Manejo de datos faltantes, outliers, y valores inconsistentes. - Creación de nuevas variables o características que puedan ser relevantes para el análisis.
En resumen, estos conceptos son fundamentales en el proceso de análisis de datos para garantizar la calidad y confiabilidad de los resultados obtenidos.
Ejemplo
Renombrar columnas: Aquí, estamos cambiando los nombres de las columnas del dataframe df para que en lugar de “id”, “genero”, y “masa”, tengan los nombres “ID”, “Género”, y “Masa”, respectivamente. Esto se hace mediante la asignación de un nuevo vector de nombres a colnames(df).
Convertir la columna “Género” a factor: La columna “Género” originalmente podría ser de tipo caracter o factor. Aquí, aseguramos que sea tratada como un factor utilizando la función as.factor().
# Convertir la columna "Género" a factordf$Género <-as.factor(df$Género)
Agregar una columna de Altura: Se agrega una nueva columna llamada “Altura” al dataframe df con valores de altura de ejemplo (160, 165, 170, 175, 180). Esta columna es necesaria para calcular el Índice de Masa Corporal (IMC) más adelante.
# Agregamos una columna de Altura para poder calcular el IMCdf$Altura <-c(160, 165, 170, 175, 180)
Crear una nueva columna calculada (IMC): Se calcula el IMC utilizando la fórmula estándar: IMC = Masa / (Altura^2), donde la altura se expresa en metros. Dado que nuestros datos de altura están en centímetros, dividimos por 100 para convertirlos a metros. El resultado se almacena en la nueva columna “IMC”.
# Crear una nueva columna calculada a partir de otras columnasdf$IMC <- df$Masa / ((df$Altura/100)^2)
Seleccionar filas con IMC mayor que 25: Creamos un nuevo dataframe llamado df_sobrepeso que contiene solo las filas donde el IMC es mayor que 25. Este paso es solo un ejemplo y puedes ajustar el umbral según tus necesidades. Finalmente, se imprime este nuevo dataframe, mostrando las personas con IMC mayor que 25.
# Seleccionar solo las filas donde el IMC es mayor que 25df_sobrepeso <- df[df$IMC >25, ]print("Personas con sobrepeso:")
[1] "Personas con sobrepeso:"
print(df_sobrepeso)
[1] ID Género Masa Altura IMC
<0 rows> (or 0-length row.names)
Ejemplo Para nuestro date frame (datos)
Identificación de errores y problemas en los datos
# Identificación de errores y problemas en los datossummary(datos)
...1 restaurant item calories
Min. : 1.0 Length:515 Length:515 Min. : 20.0
1st Qu.:129.5 Class :character Class :character 1st Qu.: 330.0
Median :258.0 Mode :character Mode :character Median : 490.0
Mean :258.0 Mean : 530.9
3rd Qu.:386.5 3rd Qu.: 690.0
Max. :515.0 Max. :2430.0
cal_fat total_fat sat_fat trans_fat
Min. : 0.0 Min. : 0.00 Min. : 0.000 Min. :0.000
1st Qu.: 120.0 1st Qu.: 14.00 1st Qu.: 4.000 1st Qu.:0.000
Median : 210.0 Median : 23.00 Median : 7.000 Median :0.000
Mean : 238.8 Mean : 26.59 Mean : 8.153 Mean :0.465
3rd Qu.: 310.0 3rd Qu.: 35.00 3rd Qu.:11.000 3rd Qu.:1.000
Max. :1270.0 Max. :141.00 Max. :47.000 Max. :8.000
cholesterol sodium total_carb fiber
Min. : 0.00 Min. : 15 Min. : 0.00 Min. : 0.000
1st Qu.: 35.00 1st Qu.: 800 1st Qu.: 28.50 1st Qu.: 2.000
Median : 60.00 Median :1110 Median : 44.00 Median : 3.000
Mean : 72.46 Mean :1247 Mean : 45.66 Mean : 4.137
3rd Qu.: 95.00 3rd Qu.:1550 3rd Qu.: 57.00 3rd Qu.: 5.000
Max. :805.00 Max. :6080 Max. :156.00 Max. :17.000
NA's :12
sugar protein vit_a vit_c
Min. : 0.000 Min. : 1.00 Min. : 0.00 Min. : 0.00
1st Qu.: 3.000 1st Qu.: 16.00 1st Qu.: 4.00 1st Qu.: 4.00
Median : 6.000 Median : 24.50 Median : 10.00 Median : 10.00
Mean : 7.262 Mean : 27.89 Mean : 18.86 Mean : 20.17
3rd Qu.: 9.000 3rd Qu.: 36.00 3rd Qu.: 20.00 3rd Qu.: 30.00
Max. :87.000 Max. :186.00 Max. :180.00 Max. :400.00
NA's :1 NA's :214 NA's :210
calcium salad
Min. : 0.00 Length:515
1st Qu.: 8.00 Class :character
Median : 20.00 Mode :character
Mean : 24.85
3rd Qu.: 30.00
Max. :290.00
NA's :210
La función summary() proporciona un resumen estadístico de las variables en el dataframe datos. Muestra la media, mediana, mínimo, máximo y otros estadísticos para las variables numéricas, así como la frecuencia para las variables categóricas.
Resultado: El resultado será un resumen de todas las variables en datos.
Transformación de datos según las necesidades del análisis
# Transformación de datos según las necesidades del análisisdatos$calories <-as.numeric(datos$calories)datos$total_fat <-as.numeric(datos$total_fat)
En este caso, estamos convirtiendo las variables “calories” y “total_fat” a formato numérico utilizando as.numeric(). Esto se hace para asegurarnos de que estas variables sean tratadas como numéricas en lugar de caracteres.
Resultado: Los datos en las columnas “calories” y “total_fat” se transformarán a formato numérico.
Creación de nuevas variables o características
# Creación de nuevas variables o característicasdatos$cal_per_protein <- datos$calories / datos$total_fat
Aquí estamos creando una nueva variable llamada “cal_per_protein” que representa calorías por gramo de proteína. Esta operación se realiza dividiendo la columna “calories” entre la columna “total_fat”.
Resultado: Se añadirá una nueva columna llamada “cal_per_protein” al dataframe datos.
Mostrar el dataframe después de las transformaciones
# Mostrar el dataframe después de las transformacionesprint("Dataframe después de la limpieza y preparación:")
[1] "Dataframe después de la limpieza y preparación:"
grafico_barras <-ggplot(Data, aes(x = Data$restaurant, y = Data$sugar)) +geom_bar(stat ="summary", fun ="mean", fill ="skyblue") +labs(title ="Gráfico de Barras Restaurante vs Azucar", x ="Restaurante", y ="Azucar")grafico_barras
Warning: Use of `Data$restaurant` is discouraged.
ℹ Use `restaurant` instead.
Warning: Use of `Data$sugar` is discouraged.
ℹ Use `sugar` instead.
Grafica de Caja y bigotes
# Crear el gráfico de caja y bigotes usando ggplot2grafico_caja_bigotes <-ggplot(Data, aes(x = Data$restaurant, y = Data$sugar, fill = Data$restaurant)) +geom_boxplot() +labs(title ="Gráfico de Caja y Bigotes Bivariado", x ="Restaurante", y ="Media azucar") +theme_minimal()# Mostrar el gráficoprint(grafico_caja_bigotes)
Warning: Use of `Data$restaurant` is discouraged.
ℹ Use `restaurant` instead.
Warning: Use of `Data$sugar` is discouraged.
ℹ Use `sugar` instead.
Warning: Use of `Data$restaurant` is discouraged.
ℹ Use `restaurant` instead.
Tambien podemos hacer un histograma sin agrupar por media
# Reorganizar el DataFrame para facilitar la visualizaciónData_R <- tidyr::gather(Data_media, key ="Media", value ="Valor", -restaurant)# Crear el gráfico de barras apiladas usando ggplot2grafico_barras_apiladas <-ggplot(Data_R, aes(x = Data_R$restaurant, y = Valor, fill = Media)) +geom_bar(stat ="identity") +labs(title ="Gráfico de Barras Bivariado", x ="Restaurante", y ="Media") +theme_minimal()# Mostrar el gráficoprint(grafico_barras_apiladas)
Warning: Use of `Data_R$restaurant` is discouraged.
ℹ Use `restaurant` instead.
d) Visualización de datos avanzados (imágenes)
Grafica que indica datos perdidios de un dataframe.
# Usando la data originalplot_missing(datos)
# Usando la data sin valores nulosplot_missing(datos_no_missing)
Multiples graficas de histogramas en una imagen para el dataframe, útil para un análisis rapido.
plot_histogram(Data)
Gráfica de correlación con mapa de calor
plot_correlation(Data)
1 features with more than 20 categories ignored!
item: 298 categories
Normalizar datos con graficas spiderweb
# Creamos funcion para normalizar los datos del dataframenormalizar <-function(x) { x = (x -min(x))/(max(x)-min(x))return(x)}
# Aplicando a las diferentes columnas del dataframenormalizacion_aplicada <-lapply(Data[,-c(1,2)], normalizar)
# Creando rada o spiderwebradar_Data <-data.frame(Data["restaurant"], normalizacion_aplicada)
ggradar(as.data.frame(radar_Data))
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, 2] * sin(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, 2] * cos(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, 2] * sin(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, 2] * cos(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, 2] * sin(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, 2] * cos(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, 2] * sin(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, 2] * cos(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, 2] * sin(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, 2] * cos(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, 2] * sin(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, 2] * cos(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, j] * sin(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, j] * cos(angles[j - 1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$x[rowNum] <- pathData[, 2] * sin(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
Warning in graphData$y[rowNum] <- pathData[, 2] * cos(angles[1]): número de
items para para sustituir no es un múltiplo de la longitud del reemplazo
IV. Manipulación de datos no estructurados
1. Importación de Datos
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.
Exploración Preliminar: Antes de la importación, RStudio ofrece herramientas gráficas y de consola para explorar los datos, lo que facilita comprender la estructura y planificar la estrategia de importación.
2. Limpieza y Preprocesamiento
Eliminación de Outliers: RStudio proporciona funciones para identificar y tratar valores atípicos o datos anómalos que pueden surgir en el texto, lo que contribuye a la integridad de los resultados del análisis.
Normalización de Texto: La normalización, como la conversión de texto a minúsculas, es crucial. RStudio ofrece funciones como tolower() para garantizar consistencia y facilitar la comparación de palabras.
3. Tokenización
Personalización de Tokens: La tokenización no se limita solo a palabras. RStudio permite personalizar la tokenización para adaptarse a las necesidades específicas del análisis, incluyendo la tokenización de oraciones o la creación de n-gramas.
Manejo de Stop Words: RStudio facilita la eliminación de palabras comunes (stop words) durante la tokenización para centrarse en términos más significativos.
4. Análisis de Texto
Matrices de Términos y Documentos (DTM): RStudio, mediante la librería tm, facilita la construcción de DTMs, que son esenciales para representar la frecuencia de palabras en documentos y realizar análisis más avanzados.
Análisis de Sentimientos: Paquetes especializados como tidytext permiten realizar análisis de sentimientos, identificando tonalidades positivas, negativas o neutrales en el texto.
5. 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.
6. Visualización de Datos
Gráficos Interactivos: RStudio facilita la creación de gráficos interactivos utilizando paquetes como plotly, permitiendo explorar visualmente resultados y patrones de manera dinámica.
Personalización Estilística: La personalización estilística de gráficos, incluyendo colores, etiquetas y leyendas, es intuitiva en RStudio, proporcionando un control completo sobre la presentación visual de los resultados.
7. Exportación de Resultados
Formatos Versátiles: RStudio permite exportar resultados a una variedad de formatos, como CSV, Excel, PDF o imágenes, facilitando la integración con otras herramientas y la presentación de informes.
Automatización de Exportación: Con el uso de scripts, es posible automatizar el proceso de exportación, lo que es especialmente útil en análisis recurrentes o en la producción de informes programados.
8. Paquetes Útiles
Integración con Tidyverse: RStudio se integra de manera eficiente con el tidyverse, un conjunto de paquetes que siguen principios consistentes, facilitando un análisis más estructurado y limpio.
Comunidad Activa: La comunidad de R es amplia y activa. RStudio facilita la instalación y gestión de paquetes, permitiendo acceder a contribuciones continuas y mejoras.
En resumen, RStudio proporciona un entorno completo para la manipulación de datos no estructurados en texto, ofreciendo herramientas versátiles y flexibles para cada fase del proceso, desde la importación hasta la visualización de resultados.
V. Conclusiones
Manipulación de DataFrame - La manipulación de DataFrame es esencial en el análisis de datos en R. Los DataFrames permiten organizar y trabajar con datos de manera estructurada, facilitando la aplicación de operaciones y funciones a conjuntos de datos.
Funciones, Módulos y Librerías Principales en R - El uso eficiente de funciones, módulos y librerías en R es fundamental para simplificar y optimizar el código. Algunas librerías esenciales incluyen dplyr para manipulación de datos, ggplot2 para visualización, y tidyr para la limpieza y preparación de datos.
Flujo del Proceso de Análisis de Datos - El flujo del proceso de análisis de datos generalmente sigue una secuencia lógica que incluye la importación de datos, manipulación, limpieza, análisis exploratorio, modelado y visualización. Este enfoque estructurado ayuda a mantener un orden y facilita la reproducibilidad de los resultados.
Importación de Datos - R ofrece diversas funciones y métodos para importar datos desde diferentes fuentes, como archivos CSV, Excel, bases de datos SQL, entre otros. La habilidad de trabajar con una variedad de formatos de archivos es crucial para el análisis de datos diverso.
Manejo de Datos - Identificar y manejar datos faltantes es crucial para obtener resultados precisos. El manejo de outliers e inconsistencias garantiza la calidad de los datos y mejora la confiabilidad de los análisis.
Limpieza y Preparación de Datos - La limpieza y preparación de datos son pasos críticos para asegurar que los datos estén en un formato adecuado para el análisis. Esto incluye la corrección de errores, estandarización de formatos y la transformación de datos según sea necesario.
Visualización de Datos - La visualización es una herramienta poderosa para comprender patrones, identificar tendencias y comunicar resultados. La capacidad de crear visualizaciones univariadas, bivariadas y multivariadas permite explorar la información desde diferentes perspectivas.
Manipulación de Datos No Estructurados - La manipulación de datos no estructurados, como imágenes, requiere enfoques específicos. Librerías como ‘tidytext’ pueden ser útiles para analizar texto, mientras que librerías como ‘imager’ pueden facilitar la manipulación de imágenes en R.
Referencias
Análisis exploratorio de datos en R:
Kabacoff, RI (2015). R en Acción: Análisis de datos y gráficos con R. Publicaciones de Manning.
Importación de datos y manejo de datos faltantes en R:
Hadley, W. (2019). tidyverse: Instale y cargue fácilmente el ‘Tidyverse’. Paquete R versión 1.2.1. URL: https://CRAN.R-project.org/package=tidyverse
Limpieza y preparación de datos en R: Jurečková, J. y Picek, J. (2018). Análisis de datos, aprendizaje automático y descubrimiento de conocimiento. Springer.
Manipulación de datos y análisis en R:
Wickham, H. y Grolemund, G. (2016). R para ciencia de datos: importar, ordenar, transformar, visualizar y modelar datos. Medios O’Reilly.
Visualización de datos en R:
Chang, W. (2013). Libro de cocina de gráficos R. Medios O’Reilly.
Diseño de pág (ignorar)
body {background-color: #2C3E50;/* Fondo gris oscuro */color: #ECF0F1;/* Texto blanco */font-family: 'Consolas',monospace;/* Tipo de fuente monoespaciada */line-height: 1.6;/* Altura de línea */}h1, h2, h3, h4, h5, h6 {color: WHITE;/* Azul intenso */font-family: 'Inconsolata',monospace;/* Tipo de fuente monoespaciada para encabezados */font-weight: bold;/* Negrita para encabezados */margin-bottom: 10px;/* Espaciado inferior para encabezados */}/* Cambia el color del fondo del bloque de resultados de código */.output {background-color: GREEN;/* Un tono de gris claro */color: GREEN;/* Color de texto más oscuro */}/* Cambia el color del fondo y del texto dentro de los bloques de código */pre {background-color: #495057;/* Fondo gris claro */color: WHITE;/* Color de texto más oscuro */padding: 10px;/* Añade un espacio interno para separar el texto del borde del bloque */border-radius: 5px;/* Agrega esquinas redondeadas al bloque */overflow: auto;/* Añade barras de desplazamiento si el contenido es muy largo */}