Повышение скорости вычисления ячейка за ячейкой в ​​кадре данных Python, система рекомендаций - PullRequest
0 голосов
/ 13 марта 2019

Это простой алгоритм рекомендаций

У меня есть пара информационных фреймов:

Элементы:

Index    1       2        3
item1  item1   item2    item3
item2  item2   item1    item3
item3  item3   item1    item2

Buy_Frequency:

UserId    item1   item2    item3
  1         0       5       15
  2         2       0       0
  3         0       2       10

Correlation_matrix:

         item1    item2      item3
item1      1       0.1        0.1
item2     0.1       1         0.8
item3     0.1      0.8         1

и целевой фрейм данных, Рекомендация:

UserId   item1    item2     item3
  1        Na      Na        Na 
  2        Na      Na        Na
  3        Na      Na        Na

Мой алгоритм следующий:

def getScore(frequency, correlation):
    return sum(frequency * correlation) / sum(correlation)

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

for i in range(0,len(Recommendation.index)):
    for j in range(1,len(Recommendation.columns)):
        user = Recommendation.index[i]
        activity = Recommendation.columns[j]

        if Buy_Frequency.loc[i][j] != 0: 
            Recommendation.loc[i][j] = 0
        else:
            item_top_names = items.loc[activity][1:dt_length]
            item_top_corr = Correlation_matrix.loc[activity].sort_values(ascending=False)[1:dt_length]
            user_purchases = Buy_Frequency.loc[user,activity_top_names]

            Recommendation.loc[i][j] = getScore(user_purchases,item_top_sims)

Результат вывода следующий, число не точное

User     item1   item2   item3
 1       5.25      0       0
 2         0      6.13   7.45
 3       4.15      0       0

У меня вопрос: можно ли как-нибудь увеличить скорость расчета этих пунктов Рекомендации?(не ячейка за ячейкой) Использовать NumPy?

А также, пожалуйста, дайте мне знать, если у вас есть лучшая идея для выполнения рекомендации.

...