Esempio n. 1
0
    def get_soulmates_all_users():
        """
        Encuentra la afinidad entre todos los usuarios.
         
        """
        users1 = UserLikees.objects.all()
        users2 = UserLikees.objects.all()

        Soulmates_Coef.objects.all().delete()

        for user1 in users1:
            votes1 = Vote.objects.filter(user=user1.id)

            if votes1.count() < 40:
                continue

            votes_a = {}

            for vote1 in votes1:
                votes_a[vote1.item.id] = vote1.rate

                for user2 in users2:
                    if user1.id == user2.id:
                        break

                    votes2 = Vote.objects.filter(user=user2.id)

                    if votes2.count() < 40:
                        continue

                    votes_b = {}

                    for vote2 in votes2:
                        votes_b[vote2.item.id] = vote2.rate

                        print "Calculando coef G entre " + user1.username + "(" + str(
                            votes1.count(
                            )) + ")" + " " + user2.username + "(" + str(
                                votes2.count()) + ")" + "..."

                        coef = Soulmates_Coef()
                        coef.user1 = user1
                        coef.user2 = user2
                        coef.coef = soulmates(votes_a, votes_b)
                        coef.save()
Esempio n. 2
0
    def get_soulmates_by_user(self, user):
        """
        Calcula la afinididad de un usuario con el resto de usuarios.
    
        """
        Soulmates_Coef.objects.filter(Q(user1=user) | Q(user2=user)).delete()

        votes_user = Vote.objects.filter(user=user.id)

        if votes_user.count() < 40:
            return

        votes_a = {}

        for vote_user in votes_user:
            votes_a[vote_user.item.id] = vote_user.rate

        users = UserLikees.objects.all().exclude(pk=user.id)

        for user_soul in users:
            votes_soul = Vote.objects.filter(user=user_soul.id)

            if votes_soul.count() < 40:
                continue

            votes_b = {}

            for vote_soul in votes_soul:
                votes_b[vote_soul.item.id] = vote_soul.rate

            print "Calculando coef G entre " + user.username + "(" + str(
                votes_user.count(
                )) + ")" + " " + user_soul.username + "(" + str(
                    votes_soul.count()) + ")" + "..."

            coef = Soulmates_Coef()
            coef.user1 = user
            coef.user2 = user_soul
            coef.coef = self.soulmates(votes_a, votes_b)
            coef.save()