propriétés du nœud du modèle d'extension
Avec 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
""")
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 |
POSIXctPOSIXlt |
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. |