Réécrivez le nœud de reconfiguration de SPSS Modeler avec Python. Agrégation par catégorie de produits achetés

Réécrivons le nœud de reconstruction qui convertit les données détenues verticalement en données détenues horizontalement avec SPSS Modeler avec des pandas Python.

1. 1. Image du traitement

À partir des données POS suivantes avec ID, ajoutons (1) le montant total d'achat pour chaque catégorie de produit et (2) le ratio d'achat pour chaque catégorie de produit pour chaque client.

■ Avant le traitement Nous utilisons des données PDV attachées à une pièce d'identité qui enregistrent qui (CUSTID) a acheté quand (SDATE) et quoi (PRODUCTID, classification principale du produit L_CLASS, classification intermédiaire du produit M_CLASS) et combien (SOUS-TOTAL).

image.png

■ Après le traitement Pour chaque client (CUSTID), le montant total d'achat pour chaque catégorie de produits (1) et le ratio d'achat pour chaque catégorie de produits (L_CLASS) sont totalisés. image.png

Il existe trois grandes catégories de produits: SAC, COMETICS et CHAUSSURES. Le client 100001 a un achat de 7243 yens pour le sac, 10273 yens pour les COSMÉTIQUES et 26870 yens pour les CHAUSSURES. Si vous le calculez en pourcentage du montant, ce sera SAC 16,3%, COSMÉTIQUE 23,1%, CHAUSSURES 60,5%. Ce type d'agrégation révèle les caractéristiques du client.

2. Paramètres sur le nœud de reconfiguration Modeler ① Montant total de l'achat pour chaque catégorie de produit

Tout d'abord, (1) Trouvez le montant total de l'achat pour chaque catégorie de produits. Les nœuds de reconfiguration sont couramment utilisés dans des combinaisons de nœuds de type de données, de résumés d'enregistrement et même de nœuds de remplacement. En outre, cette fois, nous combinerons également l'agrégation d'enregistrements et les nœuds de jointure d'enregistrement pour calculer le prix d'achat total.

image.png

Tout d'abord, le nœud de type de données reconnaît la valeur de la catégorie dans la catégorie de produit (L_CLASS). Lorsque vous effectuez "Lire la valeur" sur le nœud de type de données, toutes les catégories principales sont automatiquement reconnues.

image.png

Ensuite, sélectionnez la valeur du champ que vous souhaitez conserver horizontalement dans le nœud de reconfiguration. Dans l'exemple suivant, BAG, COMETICS, SHOES sont développés sous forme de colonnes pour la classification principale du produit (L_CLASS) et des sous-totaux (SUBSTOTAL) sont définis pour les valeurs. image.png

Un aperçu du résultat de ce paramètre ressemble à celui ci-dessous. Vous pouvez voir que le sous-total (SUBSTOTAL) a été trié dans les colonnes de chaque catégorie principale de produit (L_CLASS). image.png

Ensuite, utilisez le nœud «Record Aggregation» pour agréger les valeurs de sous-total de BAG, COMETICS et SHOES en un seul enregistrement par le client (décochez-le car la fréquence d'enregistrement n'est pas nécessaire). image.png

Avec cela, le montant total d'achat pour chaque catégorie de produits BAG, COMETICS et SHOES pour chaque client a été agrégé. Il a été calculé que le client 100001 avait un achat de 7243 yens pour BAG, 10273 yens pour COSMÉTIQUE et 26870 yens pour CHAUSSURES.

image.png

C'est presque terminé, mais il existe des valeurs NULL. Cela signifie que ce client n'a jamais effectué d'achat dans cette catégorie de produits. Si cela reste tel quel, il sera difficile à utiliser pour le calcul, alors remplacez NULL par 0.

C'est le nœud de remplacement qui fait cela. Sélectionnez le nœud avec la valeur totale de BAG, COMETICS, SHOES et définissez-le sur 0 s'il s'agit d'une valeur nulle.

image.png

Les valeurs nulles ont été converties en 0 comme indiqué ci-dessous.

image.png

Ensuite, le montant total de l'achat pour chaque client est calculé en ajoutant les nœuds d'agrégation d'enregistrements et de combinaison d'enregistrements. image.png

Tout d'abord, le nœud d'agrégation d'enregistrements calcule le sous-total total (SOUS-TOTAL) de chaque client (CUSTID), c'est-à-dire le montant total de l'achat (là encore, la fréquence d'enregistrement n'est pas requise).

image.png

Le client 100001 achète un total de 44 386 yens. image.png

Combinez ce résultat d'agrégation avec l'agrégation du montant total de BAG, COMETICS et SHOES plus tôt avec le nœud de jointure d'enregistrement. image.png

Ensuite, le montant total de l'achat pourrait être combiné après le montant total de SAC, COMETICS et CHAUSSURES pour chaque client. image.png

À la fin, j'ai raccourci le nom long de la colonne dans le nœud de filtre (ce travail n'est pas obligatoire). image.png

Les données finales ressemblent à ceci: image.png

2. Paramètres du nœud de reconfiguration Modeler (2) Ratio d'achat par catégorie de produit

A partir de là, il s'agit d'un petit usage appliqué en tant que nœud de reconfiguration, mais je vais le présenter car je souhaite souvent calculer un «ratio» facile à comparer avec d'autres clients.

Jetons un coup d'œil aux données que nous avons créées précédemment.

image.png

Pour le client 100001, le ratio du montant d'achat peut être calculé en divisant le SAC par 7243 yens ÷ 44 386 yens, les COSMÉTIQUES par 10273 yens ÷ 44 386 yens et les chaussures par 26870 yens ÷ 44 386 yens. Faites ce calcul sur le nœud de création de champ.

image.png

Définissez plusieurs modes et sélectionnez BAG_SUM, COSMETICS_SUM, SHOES_SUM dans la liste des champs. Ensuite, vous pouvez utiliser @FIELD dans l'expression CLEM pour faire référence aux colonnes BAG_SUM, COSMETICS_SUM et SHOES_SUM. ici @FIELD/ALL_SUM En spécifiant Trois ratios de BAG_SUM / ALL_SUM, COSMETICS_SUM / ALL_SUM et SHOES_SUM / ALL_SUM sont calculés.

image.png

Avec cela, le ratio d'achat pour chaque catégorie de produits BAG, COMETICS et SHOES pour chaque client a été agrégé. Le taux d'achat du client 100001 est SAC 16,3%, COSMÉTIQUE 23,1%, CHAUSSURES 60,5%. image.png

3. Paramètres dans pandas ① Montant total d'achat pour chaque catégorie de produits

J'essaierai le même traitement de données avec les pandas. En fait (1) Le montant total de l'achat pour chaque catégorie de produits peut être calculé très facilement avec une méthode appelée pivot_table chez les pandas.

pivot_tran_df= df.pivot_table(
    index=['CUSTID'],columns=['L_CLASS'],values=['SUBTOTAL'],
    aggfunc='sum',
    fill_value=0,
    margins=True, margins_name='ALL')

--index = ['CUSTID'], columns = ['L_CLASS'], values = ['SUBTOTAL'] et développez SOUS-TOTAL pour chaque catégorie principale de BAG, COMETICS, SHOES inclus dans L_CLASS en utilisant CUSTID comme clé. .. Ceci est l'image des paramètres du nœud de reconfiguration. --Indique que la valeur totale de SUBTOTAL est calculée avec aggfunc = 'sum'. Voici une image du nœud d'agrégation. --fill_value = 0 indique que la partie devenue NULL est remplie avec 0. Voici une image du nœud de remplacement. --margins = True, margins_name = 'ALL' indique d'ajouter les totaux de colonne et de ligne. Cela sert de nœud de résumé et de nœud de jointure d'enregistrement.

Le montant de l'achat et le montant total d'achat de SAC, COMETICS, CHAUSSURES peuvent être calculés pour chaque CUSTID comme indiqué ci-dessous.

image.png

--Référence

La colonne du total de la colonne est obligatoire, mais la ligne du total de la ligne n'est pas nécessaire cette fois, nous la supprimerons donc ci-dessous.

pivot_tran_df=pivot_tran_df[:-1]

--Référence --python - Comment supprimer la dernière ligne de données dans une trame de données pandas https://www.it-swarm.dev/ja/python/pandas%E3%83%87%E3%83%BC%E3%82% BF% E3% 83% 95% E3% 83% AC% E3% 83% BC% E3% 83% A0% E3% 81% AE% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 81% AE% E6% 9C% 80% E5% BE% 8C% E3% 81% AE% E8% A1% 8C% E3% 82% 92% E5% 89% 8A% E9% 99% A4% E3% 81% 99% E3% 82% 8B% E6% 96% B9% E6% B3% 95/1050572731 /

Si vous utilisez pivot_table, les colonnes seront hiérarchiques et multi-colonnes.

image.png image.png

S'il est encore multi-colonnes, il sera difficile à combiner et à gérer, donc convertissez-le en un nom de colonne au format serpent plat (concaténé avec un trait de soulignement). Selon la convention de dénomination de Modeler, c'est comme suit.

pivot_tran_df.columns = [
    pivot_tran_df.columns.names[1]+"_"+levels[1]+"_"+levels[0] 
    for levels in pivot_tran_df.columns]

image.png

image.png

J'ai également utilisé une expression régulière ici et l'ai changé en un nom de colonne plus court comme BAG_SUM.

import re
pivot_tran_df=pivot_tran_df.rename(
    columns= lambda str:
    re.sub('L_CLASS_(.+)_SUBTOTAL',r'\1_SUM',str))

image.png

3. Paramètres dans les pandas ② Ratio d'achat par catégorie de produits

(2) Dans Modeler, le ratio d'achat pour chaque catégorie de produits a été calculé par @ FIELD / ALL_SUM.

pandas utilise la méthode div. Près de l'image du nœud Remplacer dans Modeler, toutes les colonnes sont divisées par ALL_SUM et remplacées. ALL_SUM lui-même est également divisé en 1,0.

pivot_tran_ratio_df=pivot_tran_df.div(pivot_tran_df["ALL_SUM"], axis=0)

image.png

--Référence

Supprimez ALL_SUM et renommez-le car il s'agit de RATIO (pourcentage) au lieu de SUM (total).

import re
pivot_tran_ratio_df=pivot_tran_ratio_df\
    .drop(columns=['ALL_SUM'])\
    .rename(columns= lambda str:re.sub('_SUM','_RATIO',str))

image.png

Enfin, (1) rejoignez le DataFrame du montant total d'achat pour chaque catégorie de produits à compléter.

pivot_tran_df=pivot_tran_df.join(pivot_tran_ratio_df)

image.png

4. Échantillon

L'échantillon est placé ci-dessous.

courant https://github.com/hkwd/200611Modeler2Python/blob/master/Restructure/Restructure.str?raw=true notebook https://github.com/hkwd/200611Modeler2Python/blob/master/Restructure/restructure.ipynb Les données https://raw.githubusercontent.com/hkwd/200611Modeler2Python/master/data/sampletranDEPT4en2019S.csv

■ Environnement de test Modeler 18.2.1 Windows 10 64bit Python 3.6.9 pandas 0.24.1

5. Informations de référence

[Sérialisation de relais] Mon "nœud de reconstruction" de technicien node-Sugo recommandé qui génère des quantités de fonctionnalités à partir du point de vente avec des données de série chronologique ID et IoT | Blog de solutions IBM https://www.ibm.com/blogs/solutions/jp -ja / spssmodeler-push-node-4 /

Recommended Posts

Réécrivez le nœud de reconfiguration de SPSS Modeler avec Python. Agrégation par catégorie de produits achetés
Réécrire le nœud de filtre de SPSS Modeler avec Python
Réécrivez le nœud d'ajout d'enregistrement de SPSS Modeler avec Python.
Modifier les paramètres d'un nœud dans un super nœud avec le script SPSS Modeler Python
Réécrire le nœud d'échantillonnage de SPSS Modeler avec Python (2): échantillonnage en couches, échantillonnage en grappes
Réécrire le nœud d'échantillonnage de SPSS Modeler avec Python ①: N premiers cas, échantillonnage aléatoire
Réécrivez le nœud de reconfiguration de SPSS Modeler avec Python. Agrégation par catégorie de produits achetés
Réécrivez le nœud d'ajout d'enregistrement de SPSS Modeler avec Python.
Réécrire le nœud de filtre de SPSS Modeler avec Python
Réécrire le nœud d'échantillonnage de SPSS Modeler avec Python ①: N premiers cas, échantillonnage aléatoire
Réécrire le nœud d'échantillonnage de SPSS Modeler avec Python (2): échantillonnage en couches, échantillonnage en grappes
Trier par date en python
Comment passer des arguments à un script Python dans SPSS Modeler Batch
[Python] Créez des tracés de coordonnées parallèles codés par couleur par catégorie avec Plotly Express
Réécrivez le nœud de création de champ de SPSS Modeler avec Python. Extraction de caractéristiques à partir de données de capteurs de séries temporelles