ich bin gerade dabei eine Sprächlichkeitsmatrix zu erstellen. Leider erhalte ich einen Fehler. Woran liegt dieser und wie verbessere ich es?
Zunächst entferne ich alle User die weniger als 2 Produkte haben. Anschließend splitte ich mit 0,1% in Train und Test den Dataframe auf. Und diese gesplitten Dataframes gebe ich danach in die Matrix Generierung und hier tritt auch der Fehler auf.
Code: Alles auswählen
import numpy as np
import pandas as pd
import scipy.sparse as sp
d = {'userid': [0, 0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5],
'itemid': [715, 845, 98, 12324, 85, 715, 2112, 85, 2112, 852, 102, 85, 2112, 852, 98, 652]}
df = pd.DataFrame(data=d)
print(df)
def remove_purchase_cleanded(df, value):
return df[df['userid'].map(df['userid'].value_counts()) > value].reset_index(drop=True)
df_new = remove_purchase_cleanded(df, 2)
print(df_new)
def splitter(df, split):
indices = np.random.permutation(len(df))
test_size = int(len(df) * split)
test_indices = indices[:test_size]
train_indices = indices[test_size:]
return df.iloc[train_indices], df.iloc[test_indices]
def generate_matrix(df_main, dataframe):
mat = sp.dok_matrix((df_main.shape[0], len(df_main['itemid'].unique())), dtype=np.float32)
for userid, itemid in zip(dataframe['userid'], dataframe['itemid']):
mat[userid, itemid] = 1.0 # here is the error
train, test = splitter(df_new, 0.1)
train = train.sort_values(by=['userid']).reset_index(drop=True)
test = test.sort_values(by=['userid']).reset_index(drop=True)
print(train)
print(test)
train_mat = generate_matrix(df_new, train) # here is the error
test_mat = generate_matrix(df_new, test)
# The error
IndexError: column index (98) out of range