rm(list=ls())
1. Cargue la base de datos Act3.csv y los paquetes que sean necesario para trabajar un data.table.
library('data.table')
Act3<-fread('Act3.csv',fill=T)
Act3<-as.data.table(Act3)
2. Revise la base de datos y elimine las aplicaciones que se encuentran duplicadas.
Act3[duplicated(Act3)]
## App Category Rating
## 1: Quick PDF Scanner + OCR FREE BUSINESS 4.2
## 2: Box BUSINESS 4.2
## 3: Google My Business BUSINESS 4.4
## 4: ZOOM Cloud Meetings BUSINESS 4.4
## 5: join.me - Simple Meetings BUSINESS 4.0
## ---
## 479: Wunderlist: To-Do List & Tasks PRODUCTIVITY 4.6
## 480: TickTick: To Do List with Reminder, Day Planner PRODUCTIVITY 4.6
## 481: ColorNote Notepad Notes PRODUCTIVITY 4.6
## 482: Airway Ex - Intubate. Anesthetize. Train. MEDICAL 4.3
## 483: AAFP MEDICAL 3.8
## Reviews Size Installs Type Price Content Rating
## 1: 80805 Varies with device 5,000,000+ Free 0 Everyone
## 2: 159872 Varies with device 10,000,000+ Free 0 Everyone
## 3: 70991 Varies with device 5,000,000+ Free 0 Everyone
## 4: 31614 37M 10,000,000+ Free 0 Everyone
## 5: 6989 Varies with device 1,000,000+ Free 0 Everyone
## ---
## 479: 404610 Varies with device 10,000,000+ Free 0 Everyone
## 480: 25370 Varies with device 1,000,000+ Free 0 Everyone
## 481: 2401017 Varies with device 100,000,000+ Free 0 Everyone
## 482: 123 86M 10,000+ Free 0 Everyone
## 483: 63 24M 10,000+ Free 0 Everyone
## Genres Last Updated Current Ver Android Ver
## 1: Business February 26, 2018 Varies with device 4.0.3 and up
## 2: Business July 31, 2018 Varies with device Varies with device
## 3: Business July 24, 2018 2.19.0.204537701 4.4 and up
## 4: Business July 20, 2018 4.1.28165.0716 4.0 and up
## 5: Business July 16, 2018 4.3.0.508 4.4 and up
## ---
## 479: Productivity April 6, 2018 Varies with device Varies with device
## 480: Productivity August 6, 2018 Varies with device Varies with device
## 481: Productivity June 27, 2018 Varies with device Varies with device
## 482: Medical June 1, 2018 0.6.88 5.0 and up
## 483: Medical June 22, 2018 2.3.1 5.0 and up
Act3<-Act3[!duplicated(Act3)]
names(Act3)[names(Act3)=='Category']<-'Categoria'
Act3<-as.data.table(Act3)
3.Cree un nuevo objeto que contenga las siguientes variables de interés: App,Category,Rating,Reviews,Installs,Type,Price y Content Rating.
Obj1<-Act3[,c(1:4,6:9)]
Obj1<-as.data.table(Obj1)
4.Para el objeto anterior, elimine la categoría 1.9 de la variable Category.
Obj1$Categoria[Obj1$Categoria=='1.9']<-''
Obj1$Rating[Obj1$Rating=='19']<-'1.9'
Obj1$Reviews[Obj1$Reviews=='3.0M']<-'19'
Obj1$Installs[Obj1$Installs=='Free']<-'3.0M'
Obj1$Type[Obj1$Type=='0']<-'Free'
Obj1$Price[Obj1$Price=='Everyone']<-'0'
Obj1$`Content Rating`[Obj1$`Content Rating`=='']<-'Everyone'
5.Cree un objeto que este compuesto por el número de observaciones de cada categoría.
Total_Category<-Obj1[,.N,by=Categoria]
Total_Category<-as.data.table(Total_Category)
names(Total_Category) = c('Categoria','Total_Category')
6.Reemplace el objeto anterior para que ahora contenga el número de observaciones, el promedio de comentarios (Reviews) y el promedio del Rating por categoría.
Obj1$Reviews<-as.numeric(as.character(Obj1$Reviews))
Prom_Reviews<-aggregate(x = Obj1$Reviews, by = list(Obj1$Categoria), FUN = mean)
names(Prom_Reviews) = c('Categoria','Prom_Reviews')
Obj1$Rating[Obj1$Rating=='NaN']<-'' # Transformo valores NaN en NA
Obj1$Rating[is.na(Obj1$Rating)]<-''
Obj1<-as.data.table(Obj1, na.rm = TRUE, na.action = NULL)
Obj1$Rating<-as.numeric(as.character(Obj1$Rating))
Prom_Rating<-aggregate(x = Obj1$Rating, by = list(Obj1$Categoria), FUN = mean, na.rm = TRUE, na.action = NULL)
names(Prom_Rating) = c('Categoria','Prom_Rating')
Total_Category<-merge(x = Total_Category, y = Prom_Reviews, by = 'Categoria')
Total_Category<-merge(x = Total_Category, y = Prom_Rating, by = 'Categoria')
7.Renombre las columnas del objeto de la pregunta 6. La primera columna debe ser Categoria, la segunda columna Numero_Observaciones, la tercera columa Promedio_Comentarios y la cuarta columna Promedio_Rating.
names(Total_Category) = c('Categoria','Numero_Observaciones','Promedio_Comentarios','Promedio_Rating')
8.Ahora queremos analizar el nivel de competencia que existe por categoría para identificar cómo se encuentra valorada cada categoría de aplicaciones. Para realizar esto, debe crear un objeto con el identificador de competencia para cada categoría. El indicador esta definido como Icompetencia=(reviews∗rating)/1000 Este identificador debe calcularse con el objeto de la Pregunta 4.
ICompetencia<-Obj1[complete.cases(Obj1),]
ICompetencia[,'Indicador' := Reviews * Rating / 1000,]
ICompetencia<-ICompetencia[,c(2,9)]
ICompetencia<-aggregate(x = ICompetencia$Indicador, by = list(ICompetencia$Categoria), FUN = mean,)
9.Renombrar las columnas del objeto de la Pregunta 8. La primera columna debe ser Categoria y la segunda columna Identificador.
names(ICompetencia) = c('Categoria','Identificador')
10.Reemplace el objeto de la Pregunta 7 realizando un merge entre el objeto de la Pregunta 7 y el objeto de la Pregunta 9.
Total_Category<-merge(x = Total_Category, y = ICompetencia, by = 'Categoria')
Bonus.Realizar un gráfico que relacione dos variables que para usted sean relevantes relacionar. Para esto utilice el objeto de la Pregunta 3. Explique su gráfico.
Obj1$Prices = as.numeric(gsub("[\\$,]", "", Obj1$Price)) # Se crea variable de Price sin simbolo '$'
Obj1$Prices<-as.numeric(as.character(Obj1$Prices))
Obj1$Installs2 = as.numeric(gsub("[\\+,]", "", Obj1$Installs)) # Se crea variables de Installs sin simbolo '+'
## Warning: NAs introduced by coercion
Obj1$Installs2<-as.numeric(as.character(Obj1$Installs2))
Obj1$Installs2[is.na(Obj1$Installs2)]<-'0' # Se reemplaza valores NA por 0
Plot<-Obj1[,c(2,9,10)]
Plot<-as.data.table(Plot)
Plot$Installs2<-as.numeric(as.character(Plot$Installs2))
Plot<-Plot[,'Ingresos_Totales':=Prices * Installs2,]
Plot<-aggregate(.~Categoria,Plot,sum)
Plot<-as.data.table(Plot)
names(Plot) = c('Categoria','Precio','Cantidad_Instaladas','Ingresos_Totales')
Plot<-within(Plot,N_Categoria<-factor(Categoria,labels = c(1:34)))
# Indica qué Categoría recauda más dinero comparando la sumatoria de precios de todas las aplicaciones multiplicada por la cantidad de instalaciones de cada una (sepearadas por categoría) y comparándola con las demás.
plot(x = Plot$N_Categoria,y = Plot$Ingresos,type = 'p',xlab = "Categoría",ylab = "Ingresos_Totales")
