python - возвращение трех лучших исполнителей для похожих пользователей - ошибка типа данных - PullRequest
0 голосов
/ 21 мая 2018

Мой код предназначен для генерации трех рекомендаций артиста для случайного пользователя.Это модель коллаборативной фильтрации на основе пользователя, но я сталкиваюсь с ошибкой, которая читает TypeError: string indices must be integers, not Series, которая указывает на строку, где я назначаю rating_c.

Я проверил типы данных и не могу определить, какая часть вэта переменная регистрируется как серия.Кто-нибудь видит, что это может быть за серия?

Ниже df head:

userArtist.head()

    users   artist             gender      plays    age
0   a       aesop rock         m           72       28.0
1   b       air                m           178      28.0
2   c       amon tobin         m           106      28.0
3   d       animal collective  m           203      28.0
4   e       annie              m           75       28.0

Код:

music_mat = userArtist.pivot_table(index='artist', columns='users', values='plays').fillna(0).apply(np.sign)
# user-item collaberative filtering of random user 
random_user = np.random.choice(userArtist.users)
# Check df for values of random user
random_user_rating = music_mat[random_user]
# Pairwise correlation of top five similar users 
user_corr = music_mat.corrwith(random_user_rating)[:5]

rating_c = userArtist[(userArtist.artist.isnull().values) & (userArtist.users != random_user)]
rating_c['similarity'] = rating_c['users'].map(user_corr.get)
rating_c['sim_rating'] = rating_c.similarity * rating_c.plays

recommendation = rating_c.groupby('artist').apply(lambda s: s.sim_rating.sum() / s.similarity.sum())
recommendation

1 Ответ

0 голосов
/ 21 мая 2018

Я думаю, что в строке есть ошибка:

rating_c = userArtist[random_user[userArtist.artist].isnull().values & (userArtist.users != random_user)]

random_user , как вы определили, является строкой, и вы индексируете ее с помощью Series

random_user[userArtist.artist]
...