propriétés du nœud du modèle d'extension

Icône du noeud Modèle d'extensionAvec le nœud Extension Model, vous pouvez exécuter R ou Python pour les scripts Spark afin de générer et de noter les résultats.

Notez que la plupart des propriétés et des informations de cette page ne s'appliquent qu'aux flux d' SPSS Modeler Desktop.

Python pour l'exemple Spark

import modeler.api
stream = modeler.script.stream()
node = stream.create("extension_build", "extension_build")
node.setPropertyValue("syntax_type", "Python")

build_script = """
import json
import spss.pyspark.runtime
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.linalg import DenseVector
from pyspark.mllib.tree import DecisionTree

cxt = spss.pyspark.runtime.getContext()
df = cxt.getSparkInputData()
schema = df.dtypes[:]

target = "Drug"
predictors = ["Age","BP","Sex","Cholesterol","Na","K"]

def metaMap(row,schema):
    col = 0
    meta = []
    for (cname, ctype) in schema:
        if ctype == 'string':
            meta.append(set([row[col]]))
        else:
            meta.append((row[col],row[col]))
        col += 1        
    return meta

def metaReduce(meta1,meta2,schema):
    col = 0
    meta = []
    for (cname, ctype) in schema:
        if ctype == 'string':
            meta.append(meta1[col].union(meta2[col]))
        else:
            meta.append((min(meta1[col][0],meta2[col][0]),max(meta1[col][1],meta2[col][1])))
        col += 1
    return meta

metadata = df.rdd.map(lambda row: metaMap(row,schema)).reduce(lambda x,y:metaReduce(x,y,schema))

def setToList(v):
    if isinstance(v,set): 
        return list(v)
    return v

metadata = map(lambda x: setToList(x), metadata)
print metadata

lookup = {}
for i in range(0,len(schema)):
    lookup[schema[i][0]] = i

def row2LabeledPoint(dm,lookup,target,predictors,row):
    target_index = lookup[target]
    tval = dm[target_index].index(row[target_index])
    pvals = []
    for predictor in predictors:
        predictor_index = lookup[predictor]
        if isinstance(dm[predictor_index],list):        
            pval = dm[predictor_index].index(row[predictor_index])
        else:
            pval = row[predictor_index]
        pvals.append(pval)
    return LabeledPoint(tval,DenseVector(pvals))

# count number of target classes
predictorClassCount = len(metadata[lookup[target]])

# define function to extract categorical predictor information from datamodel 
def getCategoricalFeatureInfo(dm,lookup,predictors):
    info = {}
    for i in range(0,len(predictors)):
        predictor = predictors[i]
        predictor_index = lookup[predictor]
        if isinstance(dm[predictor_index],list):
            info[i] = len(dm[predictor_index])
    return info

# convert dataframe to an RDD containing LabeledPoint
lps = df.rdd.map(lambda row: row2LabeledPoint(metadata,lookup,target,predictors,row))

treeModel = DecisionTree.trainClassifier(
    lps,
    numClasses=predictorClassCount,
    categoricalFeaturesInfo=getCategoricalFeatureInfo(metadata, lookup, predictors),
    impurity='gini',
    maxDepth=5,
    maxBins=100)

_outputPath = cxt.createTemporaryFolder()
treeModel.save(cxt.getSparkContext(), _outputPath)
cxt.setModelContentFromPath("TreeModel", _outputPath)
cxt.setModelContentFromString("model.dm",json.dumps(metadata), mimeType="application/json")\
   .setModelContentFromString("model.structure",treeModel.toDebugString())

"""

node.setPropertyValue("python_build_syntax", build_script)

Exemple

node.setPropertyValue("syntax_type", "R")
node.setPropertyValue("r_build_syntax", """modelerModel <- lm(modelerData$Na~modelerData$K,modelerData)
modelerDataModel
modelerModel 
""")
Tableau 1. propriétés de extensionmodelnode
extensionmodelnode Propriétés Valeurs Description de la propriété
syntax_type R Python Spécifiez le script à exécuter : R ou Python (R est le script par défaut).
r_build_syntax chaîne La syntaxe de script R pour la construction de modèles.
r_score_syntax chaîne La syntaxe de script R pour la notation des modèles.
python_build_syntax chaîne La syntaxe de script d' Python, pour la construction de modèles.
python_score_syntax chaîne La syntaxe de script d' Python, pour la notation des modèles.
convert_flags StringsAndDoubles
LogicalValues
Possibilité de convertir les champs de drapeau.
convert_missing option Option permettant de convertir les valeurs manquantes en RNAvaleur.
convert_datetime option Possibilité de convertir les variables au format date ou date/heure en format R date/heure.
convert_datetime_class
POSIXct

POSIXlt
Options permettant de spécifier le format dans lequel les variables de date ou de date et heure sont converties.
output_html option Possibilité d'afficher des graphiques dans le nugget du modèle R.
output_text option Possibilité d'écrire la sortie de texte de la console R dans le nugget du modèle R.