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.
À 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).
■ 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.
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.
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.
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.
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.
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).
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).
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.
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.
Les valeurs nulles ont été converties en 0 comme indiqué ci-dessous.
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.
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).
Le client 100001 achète un total de 44 386 yens.
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.
Ensuite, le montant total de l'achat pourrait être combiné après le montant total de SAC, COMETICS et CHAUSSURES pour chaque client.
À la fin, j'ai raccourci le nom long de la colonne dans le nœud de filtre (ce travail n'est pas obligatoire).
Les données finales ressemblent à ceci:
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.
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.
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.
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%.
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.
--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.
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]
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))
(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)
--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))
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)
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
[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