https://drive.google.com/file/d/1y5DYn0dGoSbC22xowBq2d4po6h1JxcTQ/view?usp=sharing
Chaque ligne représente l'ID utilisateur et chaque colonne représente l'article acheté par l'utilisateur. Le nombre de colonnes correspond au nombre d'achats de l'utilisateur avec les articles les plus achetés. Par conséquent, NaN est entré dans l'espace.
Épinglez chaque colonne à un article spécifique et indiquez si chaque utilisateur l'a acheté par 1/0
Utilisez MultiLabel Binarizer de scikit-learn. Soit df la trame de données avant la conversion. La sortie après conversion est df_trans.
from sklearn.preprocessing import MultiLabelBinarizer
df = df.fillna("none")
mlb = MultiLabelBinarizer()
result = mlb.fit_transform(df.values)
df_trans = pd.DataFrame(result, columns = mlb.classes_).drop('none', axis=1)
Si NaN est inclus dans la trame de données, une erreur se produira dans MultiLabel Binarizer, donc convertissez-le en une chaîne de caractères appropriée (il n'est pas nécessaire qu'elle soit aucune si elle n'est pas dupliquée).
Créez un objet MultiLabelBinarizer et appelez la méthode fit_transform. Spécifiez df.values dans l'argument au format numpy.array.
Le nom de la colonne (nom de l'élément) peut être récupéré avec mlb.classes_.
Enfin, n'en supprimez aucun avec la méthode drop pour obtenir la table convertie.
Recommended Posts