Как получить матрицу полезности из исходного набора данных?

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

Я работаю над набором данных Movielens из 20 миллионов, который содержит файл рейтинга (userId, MovieId, Rating).

Я знаю матрицу полезности (M X N), где M - количество пользователей, а N - количество фильмов.

мой вопрос: Как построить матрицу полезностей из рейтингового файла?


person Salm    schedule 24.07.2020    source источник


Ответы (1)


Поскольку набор данных 20M не поместился на моем компьютере, во время вызова сводной таблицы я показываю процесс для набора данных 1M.

import re
import os
import zipfile
import numpy as np
import pandas as pd
from sklearn import preprocessing
from urllib.request import urlretrieve

# Creating required folders, if they don't exist
def create_dir(dirname):
    if os.path.exists(dirname):
        print(f"Directory {dirname} already exists.")
    else:  
        os.mkdir(dirname)
        
create_dir('Datasets')

print("Downloading movielens data...")
urlretrieve("http://files.grouplens.org/datasets/movielens/ml-1m.zip", "movielens.zip")
zip_ref = zipfile.ZipFile('movielens.zip', "r")
zip_ref.extractall()
print("Extraction done")


# Loading ratings dataset and renamed extracted folder
ratings = pd.read_csv('ml-1m/ratings.dat', sep='::', names=['userId', 'movieId', 'rating', 'timestamp'])
ratings = ratings.drop(columns=['timestamp'])
ratings.to_csv('Datasets/ratings.csv', index=False)
print(ratings.shape)

pivot_table = ratings.pivot_table(index=['userId'], columns=['movieId'], values='rating')
pivot_table.to_csv('Datasets/user_vs_movies.csv', index=False)
pivot_table.head()

Выход:

Downloading movielens data...
Extraction done
(1000209, 3)
movieId 1   2   3   4   5   6   7   8   9   10  ... 3943    3944    3945    3946    3947    3948    3949    3950    3951    3952
userId                                                                                  
1   5.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5   NaN NaN NaN NaN NaN 2.0 NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 rows × 3706 columns
person Kartikey Singh    schedule 25.07.2020
comment
Спасибо, но я хочу применить к нему поиск. - person Salm; 25.07.2020
comment
В чем проблема, которую он не решает? - person Kartikey Singh; 25.07.2020