Taki mam kod:
from sklearn import cross_validation as cv
import pandas as pd
header = ['user_id', 'movie_id', 'rating', 'timestamp']
df = pd.read_csv('../files/ratings.csv', sep=',', names=header)
n_users = df.user_id.unique().shape[0]
n_items = df.movie_id.unique().shape[0]
train_data, test_data = cv.train_test_split(df, test_size=0.20)
train_data_matrix = np.zeros((n_users, n_items)) #n_users wynosi 672, n_items 9067
for line in train_data.itertuples():
train_data_matrix[int(line[1]) - 1, int(line[2]) - 1] = float(line[3])
Błąd, przekroczenia indeksu w train_data_matrix
IndexError: index 46971 is out of bounds for axis 1 with size 9067
Powód:
user-film-ocena w jednym wierszu więc tabela może wyglądać ( jeden uzytkownik ma kilka wierszy, rozniace sie filmem jaki oceniał ) np.
user_id | movie_id | rating
5 | 404 | 4.0
5 | 60 | 3.5
6 | 13 | 5.0
chciałbym stworzyć tablicę train_data_matrix[users_id, movies_id] o wartościach rating dla danego filmu ( czyli wierszy tyle ile użytkowników - bez powtórek, tak samo movie_id - bez powtórek )
Jak to zrobić w python 3.5 ?