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')

11.Cree un objeto, a partir del objeto de la pregunta anterior, que contenga información solo de las categrías que más se relacionan con el rubro de la empresa (SOCIAL y PHOTOGRAPHY).

SOCIAL_y_PHOTOGRAPHY<-merge(x = Act3, y = Total_Category, by = 'Categoria')
SOCIAL_y_PHOTOGRAPHY<-SOCIAL_y_PHOTOGRAPHY[SOCIAL_y_PHOTOGRAPHY$Categoria == 'SOCIAL'|SOCIAL_y_PHOTOGRAPHY$Categoria == 'PHOTOGRAPHY',]

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")