Me parece de mal gusto que la profesora de a entender que el comando al minuto 3:53 le haya funcionado cuando evidentemente aparece un error pues no debe ingresar:
ncol=3
sino
n=3
Además luego sigue como si le hubiera funcionado y el descaro es ya le aparece con los nombres, ajustada la media y de forma numérica, siendo que la función ni siquiera en los manuales muestra que remotamente haga eso y ella asume que el comando hace eso. Es un procso que toca realizar y se esta saltando una buena parte de la explicación con comandos que no funcionan para lo que ella muestra.
En el minuto 4:07 hay un error en la edición: las variables ya aparecen con los nombres "alto, ancho y profundidad" sin embargo no se ve el momento en que se asignaron esos nombres. Además son de tipo numérico y el comando "str_split_fixed" genera cadenas de texto. Me parece que esas variables ya existían corregidas porque el código para separar el campo no se ejecuta porque tienen un error (que se ve en el minuto 3:53)
dimen<-str_split_fixed(aspiradoras$`Dimensiones del producto`,"x", ncol=3)
El código correcto es:
dimen<-str_split_fixed(aspiradoras$`Dimensiones del producto`,"x", n=3)
Habrá que editar esta parte para no confundir.
LEER ANTES DE MIRAR EL VIDEO!
En el vídeo la profesora ya tenia cargada la variable "dimen", en el momento en el que nos muestra como la crea obtiene un error por poner:
ncol = 3
en vez de:
n = 3
por lo tanto la profesora en vez de crear (o remplazar) la variable dimen utiliza la que ya tenia de antes.
El codigo que tienen que hacer es ponerle nombre a las columnas y luego remplazar los datos faltantes de cada columna por su media.
Buena Suerte, si no les sale miren los otros comentarios.
Gracias, fue super util entender esto
Les dejo mi código que soluciona los errores desde la parte que separa las dimensiones en 3 (los nombres que uso de variables tienen punto por si algo)
dimen<-str_split_fixed(aspiradoras$DImensiones.del.producto,"x",3)dimen<-as.data.frame(dimen)colnames(dimen)<-c("ancho","alto","profundidad")dimen
#ya lo tenemos como dataframe
#hasta aca vamos
#Ahora saquemos las medias para llenar vacios
#para hacer esto debemos pasar las columnas de dimen a characer y despues a numeric
#o se llena todo de información falsa
dimen$ancho<-as.character(dimen$ancho)dimen$alto<-as.character(dimen$alto)dimen$profundidad<-as.character(dimen$profundidad)dimen$ancho<-as.numeric(dimen$ancho)dimen$alto<-as.numeric(dimen$alto)dimen$profundidad<-as.numeric(dimen$profundidad)dimen
#Ahora si calculamos las medias
mediaancho<-mean(dimen$ancho,na.rm=TRUE)mediaalto<-mean(dimen$alto, na.rm=TRUE)mediaprofundidad<-mean(dimen$profundidad, na.rm=TRUE)#y reemplazamos los NA por las medias
dimen$ancho[is.na(dimen$ancho)]<-mediaancho
dimen$alto[is.na(dimen$alto)]<-mediaalto
dimen$profundidad[is.na(dimen$profundidad)]<-mediaprofundidad
View(dimen)resultadolimpio<-cbind(aspiradoras,dimen)View(resultadolimpio)resultadolimpio<-resultadolimpio[,-5]View(resultadolimpio)
Muchas gracias!!
En el video no veo cuando llama las columnas para que se llamen alto, ancho y profundidad
Si se perdieron en el minuto 4:07 les comparto mi código que hice:
# Script para obtener información de Amazon mediante Rvestrm(list =ls())library(xml2)library(rvest)mis_aspiradoras<-read.csv(file='mis_aspiradoras.csv')View(mis_aspiradoras)# Preprocesamiento de datos
mis_aspiradoras$Peso<-as.character(mis_aspiradoras$Peso)mis_aspiradoras$Peso<-gsub("Kg","", mis_aspiradoras$Peso)mis_aspiradoras$Peso[grep("g", mis_aspiradoras$Peso)]<-as.numeric(gsub("g","", mis_aspiradoras$Peso[grep("g", mis_aspiradoras$Peso)]))/1000str(mis_aspiradoras$Peso)# reemplazando los valores NAmis_aspiradoras$Peso<-gsub(",",".", mis_aspiradoras$Peso)mis_aspiradoras$Peso<-gsub("-1",NA, mis_aspiradoras$Peso)mis_aspiradoras$Peso<-as.numeric(mis_aspiradoras$Peso)mis_aspiradoras$Peso
#calculo del peso medio
pesomedio<-mean(mis_aspiradoras$Peso, na.rm=TRUE)pesomedio
mis_aspiradoras$Peso[is.na(mis_aspiradoras$Peso)]<-pesomedio
hist(mis_aspiradoras$Peso)# mayor detalle de la columna peso
summary(mis_aspiradoras$Peso)# preprocesado Volumenmis_aspiradoras$Volumen<-as.character(mis_aspiradoras$Volumen)mis_aspiradoras$Volumen<-gsub("litros","", mis_aspiradoras$Volumen)mis_aspiradoras$Volumen[grep("ml", mis_aspiradoras$Volumen)]<-as.numeric(gsub("ml","", mis_aspiradoras$Volumen[grep("ml", mis_aspiradoras$Volumen)]))/1000# reemplazando los valores NAmis_aspiradoras$Volumen<-gsub(",",".", mis_aspiradoras$Volumen)mis_aspiradoras$Volumen<-gsub("-1",NA, mis_aspiradoras$Volumen)mis_aspiradoras$Volumen<-as.numeric(mis_aspiradoras$Volumen)mis_aspiradoras$Volumen
# vamos a reemplazar los NA con el Volumen medio
#calculo del peso medio
Volmedio<-mean(mis_aspiradoras$Volumen, na.rm=TRUE)Volmediomis_aspiradoras$Volumen[is.na(mis_aspiradoras$Volumen)]<-Volmediomis_aspiradoras$Volumen
hist(mis_aspiradoras$Volumen)summary(mis_aspiradoras$Volumen)#--->PreprocesadoNúmero de opiniones
mis_aspiradoras$Opiniones<-as.character(mis_aspiradoras$Opiniones)mis_aspiradoras$Opiniones<-gsub("opiniones de clientes","", mis_aspiradoras$Opiniones)# reemplazando los valores NAmis_aspiradoras$Opiniones<-gsub(",","", mis_aspiradoras$Opiniones)mis_aspiradoras$Opiniones<-gsub("-1",NA, mis_aspiradoras$Opiniones)mis_aspiradoras$Opiniones<-as.numeric(mis_aspiradoras$Opiniones)mis_aspiradoras$Opiniones
#LOSNA los voy a reemplazar x 0#pesomedio<-mean(mis_aspiradoras$Peso, na.rm=TRUE)#pesomedio
mis_aspiradoras$Opiniones[is.na(mis_aspiradoras$Opiniones)]<-0hist(mis_aspiradoras$Opiniones)# mayor detalle de la columna peso
summary(mis_aspiradoras$Opiniones)#--->Preprocesado precio
mis_aspiradoras$Precio<-as.character(mis_aspiradoras$Precio)mis_aspiradoras$Precio<-gsub("€","", mis_aspiradoras$Precio)# reemplazando los valores NAmis_aspiradoras$Precio<-gsub(",",".", mis_aspiradoras$Precio)mis_aspiradoras$Precio<-gsub("-1",NA, mis_aspiradoras$Precio)mis_aspiradoras$Precio<-as.numeric(mis_aspiradoras$Precio)mis_aspiradoras$Precio
#calculo del precio medio
preciomedio<-mean(mis_aspiradoras$Precio, na.rm=TRUE)preciomedio
mis_aspiradoras$Precio[is.na(mis_aspiradoras$Precio)]<-preciomedio
hist(mis_aspiradoras$Precio)# mayor detalle de la columna peso
summary(mis_aspiradoras$Precio)#--->PreprocesadoNúmero de opiniones
mis_aspiradoras$Opiniones<-as.character(mis_aspiradoras$Opiniones)mis_aspiradoras$Opiniones<-gsub("opiniones de clientes","", mis_aspiradoras$Opiniones)# reemplazando los valores NAmis_aspiradoras$Opiniones<-gsub(",","", mis_aspiradoras$Opiniones)mis_aspiradoras$Opiniones<-gsub("-1",NA, mis_aspiradoras$Opiniones)mis_aspiradoras$Opiniones<-as.numeric(mis_aspiradoras$Opiniones)mis_aspiradoras$Opiniones
#LOSNA los voy a reemplazar x 0#pesomedio<-mean(mis_aspiradoras$Peso, na.rm=TRUE)#pesomedio
mis_aspiradoras$Opiniones[is.na(mis_aspiradoras$Opiniones)]<-0hist(mis_aspiradoras$Opiniones)# mayor detalle de la columna peso
summary(mis_aspiradoras$Opiniones)#--->PreprocesadoPotenciamis_aspiradoras$Potencia<-as.character(mis_aspiradoras$Potencia)mis_aspiradoras$Potencia<-gsub("vatios","", mis_aspiradoras$Potencia)mis_aspiradoras$Potencia[grep("kW", mis_aspiradoras$Potencia)]<-as.numeric(gsub("kW","", mis_aspiradoras$Potencia[grep("kW", mis_aspiradoras$Potencia)]))*1000# reemplazando los valores NAmis_aspiradoras$Potencia<-gsub(",",".", mis_aspiradoras$Potencia)mis_aspiradoras$Potencia<-gsub("-1",NA, mis_aspiradoras$Potencia)mis_aspiradoras$Potencia<-as.numeric(mis_aspiradoras$Potencia)mis_aspiradoras$Potencia
#calculo del ppotencia medio
potenciamedia<-mean(mis_aspiradoras$Potencia, na.rm=TRUE)potenciamedia
mis_aspiradoras$Potencia[is.na(mis_aspiradoras$Potencia)]<-potenciamedia
hist(mis_aspiradoras$Potencia)# mayor detalle de la columna potencia
summary(mis_aspiradoras$Potencia)#--->PreprocesadoDimensiones del producto
library(stringr)mis_aspiradoras$Dimensiones.del.producto<-gsub("cm","", mis_aspiradoras$Dimensiones.del.producto)mis_aspiradoras$Dimensiones.del.producto<-as.character(mis_aspiradoras$Dimensiones.del.producto)mis_aspiradoras$Dimensiones.del.producto<-gsub(",",".", mis_aspiradoras$Dimensiones.del.producto)dimen<-str_split_fixed(mis_aspiradoras$Dimensiones.del.producto,"x", n=3)dimen
dimen<-as.data.frame(dimen)colnames(dimen)<-c("alto","ancho","profundidad")dimen$alto<-gsub("-1",NA, dimen$alto)dimen$ancho[is.na(dimen$alto)]<-dimen$alto[is.na(dimen$alto)]dimen$profundidad[is.na(dimen$alto)]<-dimen$alto[is.na(dimen$alto)]dimen$alto<-as.numeric(dimen$alto)dimen$ancho<-as.numeric(dimen$ancho)dimen$profundidad<-as.numeric(dimen$profundidad)# cambiamos los NA x la media
altomedio<-mean(dimen$alto, na.rm=TRUE)anchomedio<-mean(dimen$ancho, na.rm=TRUE)profundidadmedio<-mean(dimen$profundidad, na.rm=TRUE)# cambiamos los NA por las medias de cada dimensión
dimen$alto[is.na(dimen$alto)]<-altomedio
dimen$ancho[is.na(dimen$ancho)]<-anchomedio
dimen$profundidad[is.na(dimen$profundidad)]<-profundidadmedio
dimen
# Se unen los dataframes dimen y mis_aspiradoras
res_limpio <-cbind(mis_aspiradoras, dimen)View(res_limpio)res_limpio <- res_limpio[,-1]res_limpio <- res_limpio[,-5]
Saludos
Me estaba dando un error que no se si te pase, cuando paso de data.frame a numeric, cambia todos los valores de la tabla.
Lo arregle pasando de dataframe que estaba tipo factor a character y luego si a numeric para poder operar y no perder información.
Como supo el sistema que debían llamarse alto, ancho y profundidad? en que momento lo ingreso?
Como se llama las columnas generadas de alto profundidad y anchura ?
DUMMIES?
Hola Mailo, no entiendo bien tu pregunta. Si te refieres a como se llaman las columnas dentro del dataset pues tienen los nombres de alto, ancho y profundidad, por otro lado si te refieres a como nombro la variable de esas 3 columnas entonces es dimen, puedes ver el fragmento donde lo escribe cerca del 03:17
gracias por tu respuesta Demian me refiero a que en muchos otros casos vamos a tener que hacer el mismo procedimiento. Generar columnas para poderlas usar en el algoritmo... esas columnas generadas independientemente del nombre que les pongan como se llaman?... lo he consultado un poquito. "Crear variables dummy implica transformar datos de un formato “alto”, en el que cada columna contiene la información de una variable, a datos con un formato “ancho”," me imagino que en ese procedimiento creamos variables dummi
Me di cuenta del error, pero extraordinario la comunidad de platzi ya documento el error y cada uno de varias maneras diferente, excelente, sigamos.
¡Nunca pare de aprender!
Aquí no queda claro cómo es que una vez que creo el vector dimen con la función"str_split_fixed" - que genera cadenas de texto - relleno los NA con la media de los datos de Alto, Ancho y Profundidad. Convendría revisar la edición del video, Platzi, porque se brinca un paso muy importante.
Por qué al hacer el split, de una lo tomó como alto, ancho y profundidad?
tal parece que ella ya tenia la variable "dimen" creada, porque uno de los argumentos de str_split_fixed no es "ncol" simplemente es "n", al igual que el rellenado de los -1, omitio todo el proceso de liimpieza de los 3 campos.
tambien la asignacion del nombre de cada columna
Para renombrar las columnas después de utilizar la función str, se puede usar la siguiente función:
Para sustituir los 1 con la media se puded utilizar:
dimen$Alto<-gsub(1,AltoMedio,dimen$Alto)
Y así con las 3 variables
desde el inicio algo está mal, no coinciden los valores de "dimensiones" con las columnas ya separadas, pausar video en 5:56 para comparar.
Tienes toda la razón, le cambian los valores. Pero mira que paso cuando se paso de tipo FACTOR en el data frame a tipo NUMERIC, no se porque llenar todo y reemplaza automatico hasta los NA.
Para evitarlo pase la columna primero de FACTOR a CHARACTER, y luego de CHARACTER a NUMERIC, y si se conservaron bien los datos.
#Detalle de producto
str(aspiradoras$`Dimensiones del producto`)aspiradoras$`Dimensiones del producto`<-as.character((aspiradoras$`Dimensiones del producto`))aspiradoras$`Dimensiones del producto`<-gsub(" cm","",aspiradoras$`Dimensiones del producto`)aspiradoras$`Dimensiones del producto`<-gsub(",",".",aspiradoras$`Dimensiones del producto`)library(stringr)dimen<-str_split_fixed(aspiradoras$`Dimensiones del producto`,"x",n=3)dimen<-as.data.frame(dimen)colnames(dimen)<-c("alto","ancho","profundidad")dimen$alto<-gsub("-1",NA, dimen$alto)dimen$ancho[is.na(dimen$alto)]<-dimen$alto[is.na(dimen$alto)]dimen$profundidad[is.na(dimen$alto)]<-dimen$alto[is.na(dimen$alto)]dimen$alto<-as.numeric(dimen$alto)dimen$ancho<-as.numeric(dimen$ancho)dimen$profundidad<-as.numeric(dimen$profundidad)altomedio<-mean(dimen$alto, na.rm=TRUE)anchomedio<-mean(dimen$ancho, na.rm=TRUE)profundidadmedio<-mean(dimen$profundidad, na.rm=TRUE)dimen$alto[is.na(dimen$alto)]<-altomedio
dimen$ancho[is.na(dimen$ancho)]<-anchomedio
dimen$profundidad[is.na(dimen$profundidad)]<-profundidadmedio
dimen
res_limpio<-cbind(aspiradoras,dimen)res_limpio<-res_limpio[,-5]View(res_limpio)
En vez de ncol = 3
se debe usar
n = 3
La meta es ahora recortarlo porque me toco hacer unos pasos de una forma algo larga
library(stringr)aspiradoras <-as.data.frame(res)# Procesado de Peso del producto
str(aspiradoras$`Peso del producto`)aspiradoras$`Peso del producto`<-as.character(aspiradoras$`Peso del producto`)aspiradoras$`Peso del producto`<-gsub(' kg','', aspiradoras$`Peso del producto`)aspiradoras$`Peso del producto`<-gsub(',','.',aspiradoras$`Peso del producto`)aspiradoras$`Peso del producto`<-gsub('-1',NA, aspiradoras$`Peso del producto`)aspiradoras$`Peso del producto`<-as.numeric(aspiradoras$`Peso del producto`)class(aspiradoras$`Peso del producto`)pesomedio <-mean(aspiradoras$`Peso del producto`, na.rm=TRUE)aspiradoras$`Peso del producto`[is.na(aspiradoras$`Peso del producto`)]<- pesomedio
hist(aspiradoras$`Peso del producto`)summary(aspiradoras$`Peso del producto`)View(aspiradoras)#Procesado de Volumenstr(aspiradoras$Volumen)aspiradoras$Volumen <-as.character(aspiradoras$Volumen)aspiradoras$Volumen <-gsub(' Litros','',aspiradoras$Volumen)aspiradoras$Volumen <-gsub('-1',NA, aspiradoras$Volumen)aspiradoras$Volumen <-as.numeric(aspiradoras$Volumen)volumenmedio <-mean(aspiradoras$Volumen, na.rm=TRUE)aspiradoras$Volumen[is.na(aspiradoras$Volumen)]<- volumenmedio
hist(aspiradoras$Volumen)summary(aspiradoras$Volumen)View(aspiradoras)#Procesado de precio
str(aspiradoras$Precio)aspiradoras$Precio <-as.character(aspiradoras$Precio)aspiradoras$Precio <-gsub('\u00A0€','',aspiradoras$Precio)aspiradoras$Precio <-gsub(',','.',aspiradoras$Precio)aspiradoras$Precio <-as.numeric(aspiradoras$Precio)preciomedio <-mean(aspiradoras$Precio, na.rm=TRUE)aspiradoras$Precio[is.na(aspiradoras$Precio)]<- preciomedio
hist(aspiradoras$Precio)summary(aspiradoras$Precio)View(aspiradoras)#Procesado de valoraciones
str(aspiradoras$Opiniones)aspiradoras$Opiniones <-as.character(aspiradoras$Opiniones)aspiradoras$Opiniones <-gsub(' valoraciones','',aspiradoras$Opiniones)aspiradoras$Potencia <-gsub('-1',NA, aspiradoras$Potencia)aspiradoras$Opiniones <-as.numeric(aspiradoras$Opiniones)opinionesmedio <-mean(aspiradoras$Opiniones, na.rm=TRUE)aspiradoras$Opiniones[is.na(aspiradoras$Opiniones)]<- opinionesmedio
hist(aspiradoras$Opiniones)summary(aspiradoras$Opiniones)View(aspiradoras)#Procesado de Potenciastr(aspiradoras$Potencia)aspiradoras$Potencia <-as.character(aspiradoras$Potencia)aspiradoras$Potencia <-gsub(' vatios','',aspiradoras$Potencia)aspiradoras$Potencia <-as.numeric(aspiradoras$Potencia)potenciamedio <-mean(aspiradoras$Potencia, na.rm=TRUE)aspiradoras$Potencia[is.na(aspiradoras$Potencia)]<- potenciamedio
hist(aspiradoras$Potencia)summary(aspiradoras$Potencia)View(aspiradoras)#Procesado de Dimensionesstr(aspiradoras$`Dimensiones del producto`)aspiradoras$`Dimensiones del producto`<-as.character(aspiradoras$`Dimensiones del producto`)aspiradoras$`Dimensiones del producto`<-gsub(' cm','',aspiradoras$`Dimensiones del producto`)aspiradoras$`Dimensiones del producto`<-gsub(' ','',aspiradoras$`Dimensiones del producto`)aspiradoras$`Dimensiones del producto`<-gsub('-1',NA, aspiradoras$`Dimensiones del producto`)dimen <-str_split_fixed(aspiradoras$`Dimensiones del producto`,";", n=2)dimen[,1]dimen <-str_split_fixed(dimen[,1],"x", n=3)colnames(dimen)<-c('alto','ancho','profundidad')alto <- dimen[,1]class(alto)alto <-as.numeric(alto)mediaalto <-mean(alto, na.rm=TRUE)alto[is.na(alto)]<-mediaalto
ancho <- dimen[,2]class(ancho)ancho <-as.numeric(ancho)mediaancho <-mean(ancho, na.rm=TRUE)ancho[is.na(ancho)]<-mediaancho
profundidad <- dimen[,3]class(profundidad)profundidad <-as.numeric(profundidad)mediaprofundidad <-mean(profundidad, na.rm=TRUE)profundidad[is.na(profundidad)]<-mediaprofundidad
dimensiones <-cbind(alto,ancho,profundidad)View(dimensiones)str(dimensiones)res_limpio <-cbind(aspiradoras, dimensiones)View(res_limpio)res_limpio <- res_limpio[,-5]View(res_limpio)