Objetivo. Es una simulación de recomendaciones de películas para un usuario. Caso para IEBS.

Extracción de los datos

similitudes <- read.csv("https://raw.githubusercontent.com/rpizarrog/Curso-Titulacion-Data-Science-/master/2019/Datos/similitudes%20peliculas.csv",
                  header = TRUE)

peliculas <- read.csv("https://raw.githubusercontent.com/rpizarrog/Curso-Titulacion-Data-Science-/master/2019/Datos/catalogo%20de%20peliculas.csv",
                      header = TRUE)

peliculasVistas <- read.csv("https://raw.githubusercontent.com/rpizarrog/Curso-Titulacion-Data-Science-/master/2019/Datos/preferencias%20de%20peliculas%20por%20usuarios.csv",
                                   header = TRUE)

Las preferencias de películas para el usuario 4

# Las preferencias son las películas que ha visto un Usuario, por ejemplo 4
preferencias <- subset(peliculasVistas, userId == 4)

# El datafrme de recomendaciones lo iniciamos vacio 
recomendaciones <- data.frame(NA, NA, NA) # Vacio
recomendaciones <- recomendaciones[-1,] # Vacio

# Las pelSimilares serán las películas que son similares a las que ha visto
# Repetir el proceso para cada pelicula que haya visto

for (movieID in 1:length(preferencias$movieId)) {
    pelSimilares <- subset(similitudes, movieId == preferencias[movieID,2])
    pelSimilares <- sort(pelSimilares, decreasing = TRUE)

    # Las columnas o películas con mayores similitudes de esa película
    # La columna 1 es la movieId 
    # La columna 2, refleja la similitud consigo misma con valor de 1
    # y las otras 4 columnas, son las mejores similitudes con otras películas

    # Las mas similares que serán las recomendadas son las peliculas similares para ese usuario
    massimilares <- pelSimilares[1,2:5] # A partir de la columna 2 porque la 1 es la columna movieId
    laPelicula <- preferencias[movieID,2]

    # Un ciclo para recorrer las peliculasmas similares de un en particular
    for (i in 1:length(colnames(massimilares))) {
  
      numeroPel <- strsplit(colnames(massimilares)[i], "X")# Cual pelicula dividiendo
      if (as.numeric(numeroPel[[1]][2]) != as.numeric(laPelicula)) {
        # print("Siguiente")
        # print("Agregar a similares")
        recomienda <- c(as.numeric(laPelicula), 
                      as.numeric(numeroPel[[1]][2]),
                      massimilares[1,i]) 
        recomendaciones <- rbind(recomendaciones, recomienda)
      }
      colnames(recomendaciones) <- c("Pelicula", "Recomendada", "Similitud")
    }
}
recomendaciones
##    Pelicula Recomendada Similitud
## 1        21          63 0.7867958
## 2        21          20 0.7125253
## 3        21           6 0.5897436
## 4        32         103 1.0000000
## 5        32          47 0.7867958
## 6        32          50 0.5897436
## 7        45          61 0.7867958
## 8        45          72 0.7867958
## 9        45          75 0.7867958
## 10       47          32 0.7867958
## 11       47          50 0.7867958
## 12       47         103 0.7867958
## 13       52           4 1.0000000
## 14       52          11 1.0000000
## 15       52          58 1.0000000
## 16       58           4 1.0000000
## 17       58          11 1.0000000
## 18       58          52 1.0000000
## 19      106          72 1.0000000
## 20      106          75 1.0000000
## 21      106          82 1.0000000
## 22      106          96 1.0000000

# Ahora a determinar los títulos de las películas
# Determinando la frecuencia, es decir, cuales películas
# aparecen más veces recomendadas, en dun data.frame
peliculasRecomendadas <- head(sort(table(recomendaciones$Recomendada), 
                                   decreasing = TRUE), 10)

peliculasRecomendadas <- as.data.frame(peliculasRecomendadas)

# Un ciclo para determinar los nombres de 
# película de las que hayan sido recomendadas
nombresPel <- NULL # Vector vacio
for (i in 1:length(peliculasRecomendadas$Var1)) {
      nombresPel <- rbind(nombresPel, subset(peliculas, movieId == peliculasRecomendadas$Var1[i], select = c(title)))
  }


peliculasRecomendadas <- cbind(peliculasRecomendadas, nombresPel)

colnames(peliculasRecomendadas) <- c("IdPelicula", "Frecuencia", "Nombre")

Las películas recomendadas

peliculasRecomendadas
##    IdPelicula Frecuencia                                    Nombre
## 4           4          2                  Waiting to Exhale (1995)
## 11         11          2            American President, The (1995)
## 47         50          2                Usual Suspects, The (1995)
## 65         72          2              Kicking and Screaming (1995)
## 68         75          2                          Big Bully (1996)
## 92        103          2                      Unforgettable (1996)
## 6           6          1                               Heat (1995)
## 20         20          1                        Money Train (1995)
## 32         32          1 Twelve Monkeys (a.k.a. 12 Monkeys) (1995)
## 44         47          1               Seven (a.k.a. Se7en) (1995)