Я пытаюсь настроить матрицу элемент-элемент для системы совместной фильтрации.У меня есть система просмотра фильмов, поэтому я хочу матрицу, в которой столбцы - это фильмы (названия или идентификаторы), а строки - рецензенты.
Итак, я попытался повернуть кадр панд с этой информацией, и это сработало, нос небольшим количеством данных.У меня около 4500000 обзоров, и поворот панд не поддерживает столько данных.Итак, я изменил свой подход и попытался создать разреженную матрицу с помощью scipy.sparse csr_matrix.И проблема здесь в том, что мои идентификаторы фильмов и идентификаторы рецензентов являются строками, а рейтинги двойные, и я получаю ошибку, что Сципи пытался преобразовать эти значения в int.
Подход панд: в целом это 5-звездный рейтинг, данный рецензентом
import pandas as pd
import numpy as np
reviews = pd.read_json('reviews_Movies_and_TV.json', lines=True)
reviews = reviews[pd.notnull(reviews['reviewText'])]
movie_titles = pd.read_json('meta_Movies.json', lines=True)
reviews = pd.merge(reviews, movie_titles, on='asin')
ratings = pd.DataFrame(reviews.groupby('title')['overall'].mean())
ratings['number_of_ratings'] = reviews.groupby('title')['overall'].count()
movie_matrix = reviews.pivot_table(index='reviewerID', columns='title', values='overall').fillna(0)
Матрица csr:
import pandas as pd
import numpy as np
reviews = pd.read_json('reviews_Movies_and_TV.json', lines=True)
reviews = reviews[pd.notnull(reviews['reviewText'])]
reviews = reviews.filter(['reviewerID', 'asin', 'overall'])
movie_titles = pd.read_json('meta_Movies_and_TV.json', lines=True)
movie_titles = movie_titles.filter(['asin', 'title'])
reviews = pd.merge(reviews, movie_titles, on='asin')
ratings = pd.DataFrame(reviews.groupby('title')['overall'].mean())
ratings['number_of_ratings'] = reviews.groupby('title')['overall'].count()
reviews_u = list(reviews.reviewerID.unique())
movie_titles_u = list(reviews.asin.unique())
data = np.array(reviews['overall'].tolist(),copy=False)
row = np.array(pd.Series(reviews.reviewerID).astype(pd.api.types.CategoricalDtype(categories = reviews_u)),copy=False)
col = np.array(pd.Series(reviews.asin).astype(pd.api.types.CategoricalDtype(categories = movie_titles_u)),copy=False)
sparse_matrix = csr_matrix((data, (row, col)), shape=(len(reviews_u), len(movie_titles_u)))
df = pd.DataFrame(sparse_matrix.toarray())
Итак, я застрял и не знаю, как решить эту проблему.Панды находятся вне стола с поворотом, если нет другого решения с пандами, которого я не нашел.И матрица csr может работать, если есть способ, которым я могу связать рецензента 'X953D' или фильм с целым числом (которого я еще не нашел)