Расчет дифференциалов Slope One из MongoDB

У меня есть 3 коллекции в моей учебной базе данных: пользователи, компании и обзоры. Я хотел бы прогнозировать рейтинги для других элементов, используя наклон один, но я не уверен, как лучше всего собирать различия в рейтингах от MongoDB между предприятиями.

У меня есть 200 000 оценок в коллекции отзывов, и я хотел бы сравнить только те компании, у которых есть общая категория. Итак, я нахожу всех пользователей, у которых есть отзывы о компаниях в этих категориях.

business = businesses.find({'categories':{"$in" : business_categories}},{'business_id'})

for biz in all_businesses:
    biz_list.append(biz['business_id'])
reviews = training_reviews.find({'business_id':{"$in" : biz_list}})

for review in reviews:
    review_list.append(review['user_id'])

available_users = users.find({'user_id':{"$in": review_list}})

Как только у меня появятся пользователи, мне нужно настроить матрицу всех их оценок, чтобы я мог рассчитать разницу между каждым бизнесом. Моя матрица минимального размера будет 10k x 10k, и поскольку у меня будет несколько категорий для каждой рекомендации, которую я делаю, мне придется переделывать ее для каждой рекомендации.

Есть ли эффективный способ сделать это в python? Было бы лучше экспортировать матрицу рейтингов для ВСЕХ компаний, а затем прогнозировать рейтинги на ее основе?

Спасибо.


person chebyshev    schedule 05.08.2013    source источник


Ответы (1)


Я бы сказал, что если вы ищете эффективность, вы должны попытаться получить всю необходимую информацию во встроенных документах в коллекции обзоров.

Это будет означать, что вы можете агрегировать в MongoDB

См. раздел Модель отношений "один ко многим". со встроенными документами для обсуждения моделирования с использованием встроенных документов в отличие от нормализации и общей темы Модели данных

person Alan Spencer    schedule 19.11.2013