Então, estou tendo problemas para conseguir as recomendações para o novo usuário. Eu criei as funções direitinho e até antes disso estava funcionando. Quando eu passo sugere_para(611) ele me retorna os mesmos resultados de notas, só que em outra ordem. Ou seja, ele não sugeriu filmes novos, ele simplesmente sugeriu todos da mesma lista. Não sei o que fiz de errado, vou colocar os códigos aqui, começando do fim do módulo passando, onde o professor escrever o kmn. O único ponto diferente é que os dados do professor é diferente do sugerido no início, então eu tenho menos dados que ele, por isso na hora de passar o "sugere_para" o número é diferente do dele.
def knm(voce_id, k_mais_proximos = 10, numero_de_usuarios_a_analisar = None):
distancias = distancia_de_todos(voce_id, numero_de_usuarios_a_analisar = numero_de_usuarios_a_analisar)
distancias = distancias.sort_values('distancia')
distancias = distancias.set_index('outra_pessoa').drop(voce_id)
return distancias.head(k_mais_proximos)
def sugere_para(voce, k_mais_proximos = 10, numero_de_usuarios_a_analisar = None):
notas_de_voce = notas_do_usuario(voce)
filmes_que_voce_ja_viu = notas_de_voce.index
similares = knm(voce, k_mais_proximos = k_mais_proximos, numero_de_usuarios_a_analisar = numero_de_usuarios_a_analisar)
usuarios_similares = similares.index
notas_dos_similares = notas.set_index('usuarioId').loc[usuarios_similares]
recomendacoes = notas_dos_similares.groupby('filmeId').mean()[['nota']]
recomendacoes = recomendacoes.sort_values('nota', ascending = False)
return recomendacoes.join(filmes)
def novo_usuario(dados):
novo_usuario = notas['usuarioId'].max()+1
notas_do_usuario_novo = pd.DataFrame(dados, columns = ['filmeId', 'nota'])
notas_do_usuario_novo['usuarioId'] = novo_usuario
return pd.concat([notas, notas_do_usuario_novo])
notas = novo_usuario([[122904,2],
[1246, 5],
[2529, 2],
[2329, 5],
[2324, 5],
[1, 2],
[7, 0.5],
[2, 2],
[1196, 1],
[260, 1]
])
notas['usuarioId'].max()
Resultado: 611
sugere_para(611)
A ordem dos filmes que saiu foi: 1246, 2324, 2329, 1, 2, 2529, 122904, 260, 1196, 7. Inclusive tentei mudar o k_mais_proximo para outros valores, mas não mudou o resultado. Se eu mudar essa função sugere_para pra outros valores ele retona o resultado certo, porém, para o novo usuário que criei ele dá errado.
Foi mal a mensagem grande e valeu quem puder ajudar!!