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.
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