我正在使用Gowalla数据集对推荐系统进行研究。但是,数据集没有位置评级,因此我必须将该数据生成为隐含评级,其值为' 1'对于那些访问过该地点的人来说,' 0'对于那些从未访问过该地点的人。我应该如何使用python创建该矩阵? This is a Gowalla dataset
答案 0 :(得分:1)
这段代码应该按照您的要求进行。它创建了一个稀疏评级矩阵(scipy.sparse.csr_matrix),其行数等于不同用户的数量,列数等于不同位置的数量。
import pandas as pd
import numpy as np
from scipy.sparse import csr_matrix
#Load dataset
df = pd.read_csv('gowalla.csv', sep='\t', names=['user_id','','','','location_id'])
# Group interactions
users_locations = df.groupby(by=['user_id','location_id']).apply(lambda x: 1).to_dict()
# Number of different Users / Locations
nu = len(df['user_id'].unique())
nl = len(df['location_id'].unique())
# Build Rating matrix
row, col = zip(*(users_locations.keys())) #row-> users, col-> locations
map_u = dict(zip(df['user_id'].unique(),range(nu)))
map_l = dict(zip(df['location_id'].unique(),range(nl)))
row_idx = [map_u[u] for u in row]
col_idx = [map_l[l] for l in col]
data = np.array(users_locations.values(), dtype=np.float32)
rating_matrix = csr_matrix((data, (row_idx, col_idx)), shape=(nu,nl))