Modifier les paramètres d'un nœud dans un super nœud avec le script SPSS Modeler Python

Supernodes et scripts Python

J'utilise souvent des supernodes pour organiser (faciliter la visualisation) de longs flux dans SPSS Modeler, mais je ne sais pas comment gérer les nœuds dans les supernodes lors de la modification des paramètres de nœud dans les scripts Python. Fait. (Si vous développez les supernœuds, cela sera résolu, mais pour le moment, il y a beaucoup de supernœuds, et je voulais le résoudre avec un script si possible.) Je laisserai un moyen de le réaliser sous forme de mémorandum.

Tout d'abord, le manuel

En conclusion, la méthode est bien documentée et trouvée rapidement.

IBM SPSS Modeler 18.2 Python Scripting and Automation Guide (http://public.dhe.ibm.com/software/analytics/spss/documentation/modeler/18.2/en/ModelerScriptingAutomation.pdf)

Extrait P.383 ** Paramètres de propriété du nœud d'encapsulation ** Vous pouvez définir les propriétés d'un nœud particulier encapsulé dans un supernode en accédant au diagramme enfant dans le supernode. Par exemple, supposons que vous ayez un supernœud d'entrée avec un fichier de longueur variable encapsulé pour lire les données. Vous pouvez transmettre le nom du fichier lu (spécifié à l'aide de la propriété full_filename) en accédant au diagramme enfant et en recherchant les nœuds associés comme suit:

childDiagram = source_supernode.getChildDiagram() varfilenode = childDiagram.findByType("variablefile", None) varfilenode.setPropertyValue("full_filename", "c:/mydata.txt")


## Édition pratique
 Si vous pouvez le comprendre facilement en consultant le manuel ci-dessus, vous n'avez plus besoin de le lire.

### Exemple de flux
 (1) Il existe un flux tel que RFM agrège à partir des données d'historique d'achat
 <img width="300" alt="WS0057.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361272/85ea0092-1ffd-9966-6a51-efdfaab41b8e.jpeg ">
 ② Supposons que le contenu du super nœud soit comme ça.
 <img width="900" alt="WS0058.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361272/0cf2ef31-2c6b-8da5-9668-c8083723020c.jpeg ">

 Le contenu du nœud de création de champ qui est "RECENCY" dans le super nœud est maintenant comme ça.
 <img width="600" alt="WS0061.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361272/b78affdd-74af-886d-6d15-906c24352bf3.jpeg ">


 Ce que nous faisons, c'est calculer combien de jours il y a la dernière date d'achat est basée sur 2020/10/1.
 (SDATE est la date d'achat. Considérez SDATE_Max comme la dernière date d'achat pour chaque client dans le nœud de pré-agrégation.)

 Supposons maintenant que vous souhaitiez modifier la date de base du 01/10/2020 en fonction de la synchronisation d'exécution du flux, par exemple, vous souhaitez agréger en fonction du dimanche précédent, peu importe le moment où vous l'exécutez.

 Dans ce cas, vous pouvez modifier la partie datetime_date (2020, 10, 1) dans le script Python à la date appropriée que vous souhaitez utiliser comme référence, mais comme les nœuds du super nœud ne peuvent pas être traités directement par findByXXXX (), le manuel précédent Cela demandera des efforts comme on le voit dans.

 Voici un exemple de script Python.

import datetime stream = modeler.script.stream()

#Réglage de la date de base RefDate = datetime.date(2020, 10, 10)

#Identifier les supernodes dans le flux rfm_process_super_node = stream.findByType("process_super", u"Agrégation RFM") #Instancier un diagramme (flux?) Développé à l'intérieur d'un supernode rfm_child_diagram = rfm_process_super_node.getChildDiagram() #Identifiez le nœud de création de champ dans le supernode rfm_derive_node = rfm_child_diagram.findByType("derive", u"RECENCY") #Modifier la date de base pour le nœud de création de champ spécifié rfm_derive_node.setPropertyValue("formula_expr", u"date_days_difference(SDATE_Max,datetime_date(" + str(RefDate.year) + "," + str(RefDate.month) + "," + str(RefDate.day) + ")")


 Ce sera un peu plus facile à comprendre si vous comprenez que "stream" est le flux de ① et "rfm_child_diagram" est le flux dans le super nœud de ②.

 Si vous exécutez ce script dans le flux (Outils ⇒ Propriétés du flux ⇒ Exécuter), la date de base passera au 10/10/2020. Cette fois, j'ai spécifié la date de base pour plus de simplicité, mais pensez à la logique de ce qu'il faut faire avec la date de base en fonction de vos besoins.

 Vous trouverez ci-dessous le paramètre du nœud qui a été modifié en exécutant le script. Ça s'est bien passé.
 (Je ne l'ai jamais réécrit à la main!)

 <img width="600" alt="WS0062.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361272/1aef661a-afdc-cf5d-f68c-8b9f7b988528.jpeg ">


 * Veuillez ne pas vous précipiter dans quelque chose comme "Si c'est un flux si court, pourquoi ne vous donnez-vous pas la peine d'en faire un super nœud?"



Recommended Posts

Modifier les paramètres d'un nœud dans un super nœud avec le script SPSS Modeler Python
Réécrivez le nœud d'ajout d'enregistrement de SPSS Modeler avec Python.
Réécrire le nœud d'échantillonnage de SPSS Modeler avec Python (2): échantillonnage en couches, échantillonnage en grappes
Réécrivez le nœud de reconfiguration de SPSS Modeler avec Python. Agrégation par catégorie de produits achetés
Paramètres pour démarrer avec MongoDB avec python
Changer les paramètres IP en ACL de conoha avec python
Paramètres VS Code pour le développement en Python avec achèvement
Exploitez LibreOffice avec Python
Grattage avec chromedriver en python
Importer dynamiquement des scripts en Python
Gérer les sons en Python
Grattage avec du sélénium en Python
[Python] Changer de type avec les pandas
Modifier les paramètres de nouvelle tentative avec boto3
Grattage avec Tor en Python
Combiné avec ordinal en Python
Essayez Juniper JUNOS PyEz (bibliothèque python) Memo 3 ~ Modifier les paramètres avec PyEz ~
Comment passer des arguments à un script Python dans SPSS Modeler Batch
Tester avec des nombres aléatoires en Python
Scraping avec Node, Ruby et Python
GOTO en Python avec Sublime Text 3
Travailler avec LibreOffice en Python: import
Scraping avec Selenium en Python (Basic)
Numer0n avec des objets fabriqués avec Python
Ouvrez UTF-8 avec BOM en Python
Utiliser rospy avec virtualenv dans Python3
Utilisez des scripts personnalisés Python avec StackStorm
Utiliser Python mis en pyenv avec NeoVim
Utiliser OpenCV avec Python 3 dans Window
Jusqu'à traiter de python dans Atom
Démarrez avec Python avec Blender
Travailler avec des images DICOM en Python
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
Écrire de la documentation dans Sphinx avec Python Livereload
Obtenez des données supplémentaires vers LDAP avec python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Programmation de compétition avec les paramètres de l'environnement local python
Essayez de vous connecter à qiita avec Python
Changer l'environnement Python 64 bits en environnement 32 bits avec Anaconda
Python3> dans le mot clé> Vrai avec une correspondance partielle?
Contrôle exclusif avec fichier de verrouillage en Python
Surveillance des appareils effectuée par Python On-box de IOS-XE
Modifier les paramètres de lot avec la commande withlist de Mailman
Essayez de travailler avec des données binaires en Python
Dessinez Nozomi Sasaki dans Excel avec python
Conseils pour gérer les binaires en Python
Afficher Python 3 dans le navigateur avec MAMP
Comment utiliser BigQuery en Python
Classe Trump en Python (avec comparaison)
Manipulation des données DynamoDB avec Lambda (Node et Python)
Modèle pour l'écriture de scripts batch en python
Gérer les "années et mois" en Python
Traiter plusieurs listes avec for en Python
Remplacer non-ASCII par des expressions régulières en Python
Un serveur Web de ligne (avec CGI) en python