error al ejecutar el código python (creado a través del depósito de fórmulas JMP)El modelo JMP me daría una fórmula y quiero pasar la fórmula y usarla en el programa python o R.
A través del depósito de fórmulas, generó el código de Python, e intenté copiar el código de Python y ejecutarlo a través de Jupiter Notebook, pero siempre me da un error:
por ejemplo, adjunté el archivo de prueba y el código python creado a partir de JMP y ejecuté. no reconoció como matriz... por favor ayuda. ¡¡¡gracias!!! Pensé que era fácil copiar el código python creado por JMP y ejecutar python sin problemas. parece que no es.....
puntuación def (indata, outdata):
_temp_0 = tu""
si (indatos[u"Núm"] > 50):
_temp_0 = u"Alto"
demás:
_temp_0 = u"Bajo"
outdata[u"clase"] = _temp_0
devolver datos obsoletos[u"clase"]
890 raise ValueError("The truth value of a {0} is ambiguous. "
891 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 892 .format(self.__class__.__name__)) 893
el siguiente es código python de JMP
de la división de importación __future__
de importación matemática *
importar jmp_score como jmp
""" ============================================== ===================
Copyright(C) 2018 SAS Institute Inc. Todos los derechos reservados.
Aviso:
Los siguientes permisos se conceden siempre que el
sobre los derechos de autor y este aviso aparecen en el código de puntuación y
cualquier documentación relacionada. Permiso para copiar, modificar
y distribuir el código de puntuación generado usando
El software JMP(R) está limitado a clientes de SAS Institute Inc. ("SAS")
y sucesivos terceros, todo ello sin garantía alguna, expresa o
implícita, o cualquier otra obligación de SAS. SAS y todos los demás SAS
Los nombres de productos y servicios de Institute.Inc. están registrados
marcas registradas o marcas registradas de SAS Institute Inc. en los EE. UU.
y otros países. Salvo lo contenido en este aviso,
el nombre de SAS Institute Inc. y JMP no se utilizará en
la publicidad o promoción de productos o servicios sin
autorización previa por escrito de SAS Institute Inc.
================================================== ================ """
""" Código Python generado por JMP v13.2.1 """
def getModelMetadata():
return {"creador": u"Clase de columna", "nombre del modelo": u"", "predicho": u"", "tabla": u"Hoja2", "versión": u"13.2.1", "marca de tiempo ":u"2018-04-05T16:10:16Z"}
def getInputMetadata():
devolver {
u"Num": "flotante"
}
def getOutputMetadata():
devolver {
u"clase": "str"
}
puntuación def (indata, outdata):
_temp_0 = tu""
si (indatos[u"Núm"] > 50):
_temp_0 = u"Alto"
demás:
_temp_0 = u"Bajo"
outdata[u"clase"] = _temp_0
devolver datos obsoletos[u"clase"]
los datos se ven como
Núm Clase
15 bajo
17 Bajo
200 alto
60 alto
72 alto
10 bajo
20 bajo
70 alto
55 alto
20 bajo
854 alto
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)pandas sigue la convención numpy de generar un error cuando intenta convertir algo en un bool. Esto sucede en un si o cuando se usan las operaciones booleanas, y, o, o no. No está claro cuál es el resultado de.
ejemplo
5 == pd.Serie([12,2,5,10])
El resultado que obtiene es una serie de booleanos, de igual tamaño que la pd.Series en el lado derecho de la expresión. Entonces, obtienes un error. El problema aquí es que está comparando un pd.Series con un valor, por lo que tendrá múltiples valores verdaderos y múltiples falsos, como en el caso anterior. Esto, por supuesto, es ambiguo, ya que la condición no es verdadera ni falsa. Debe agregar aún más el resultado para que un solo valor booleano resulte de la operación. Para eso, tendrá que usar cualquiera o todos, dependiendo de si desea que al menos uno (cualquiera) o todos los valores satisfagan la condición.
(5 == pd.Series([12,2,5,10])).all()
# False
o
(5 == pd.Series([12,2,5,10])).any()
# True
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)Muchas gracias por la rápida y detallada respuesta,
está funcionando muy bien ahora
gracias
Eran
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)Hola @eranraz1 ,
Encontré dos problemas con el código que publicaste:
1) Proporcionó una cadena como valor de entrada para DESIGN_LAYERS. El código de puntuación espera un flotante, como se indica en el método getInputMetadata(); el valor no debe citarse.
indata_aa = {'DESIGN_LAYERS': '3','EXISTS_LASER_DRILL' : 'YES' }
debería ser en su lugar:
indata_aa = {'DESIGN_LAYERS': 3,'EXISTS_LASER_DRILL' : 'YES' }
2) A la línea de retorno al final del método de puntuación le falta una suscripción, por lo que el valor se agrega a un elemento del diccionario, no al diccionario (de salida) en sí. Si este es el código generado original, es un error. Tal vez sea un cambio introducido por error al crear el script de prueba.
outdata = 358.593374276362 + 26.8517927560789 * indata[u"DESIGN_LAYERS"] + _temp_0
debiera ser
outdata[u"Add"] = 358.593374276362 + 26.8517927560789 * indata[u"DESIGN_LAYERS"] + _temp_0
Con estos cambios (y después de agregar una instrucción de importación Numpy), el script funciona y devuelve un resultado:
***************************
569.3520768491067
[Finished in 0.3s]
Consulte el archivo adjunto para ver el guión completo y actualizado.
PD: La próxima vez, sería mejor abrir una nueva discusión y volver a consultar esta publicación de hace 2 años para obtener contexto.
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)Hola ,
estaba tratando de implementar el mismo método usando un 'Dict' con 2 parámetros, y obtuve el error:
"TypeError: no se puede multiplicar la secuencia por no int de tipo 'float'"
por favor asiste
adjunto el código PY:
#set parameters
indata_aa = {'DESIGN_LAYERS': '3','EXISTS_LASER_DRILL' : 'YES' }
def getModelMetadata():
return {"creator": u"Formula Editor", "modelName": u"", "predicted": u"", "table": u"NEW JMP Pricing 30 RIGID SHORT", "version": u"15.0.0", "timestamp": u"2020-08-30T10:46:03Z"}
def getInputMetadata():
return {
u"DESIGN_LAYERS": "float",
u"EXISTS_LASER_DRILL": "str"
}
def getOutputMetadata():
return {
u"Add": "float"
}
def score(indata, outdata):
_temp_0 = np.nan
if (indata[u"EXISTS_LASER_DRILL"] == u"NO"):
_temp_0 = -130.203324304508
elif (indata[u"EXISTS_LASER_DRILL"] == u"YES"):
_temp_0 = 130.203324304508
else:
_temp_0 = np.nan
print (_temp_0)
outdata = 358.593374276362 + 26.8517927560789 * indata[u"DESIGN_LAYERS"] + _temp_0
return outdata["Add"]
print('***************************')
print(score(indata_aa, {}))gracias
Eran
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)¡Me alegro de que te haya ayudado, Lucy!Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)nascif, https://community.jmp.com/t5/Discovery-Summit-2016/Scoring-Outside-the-Box/ta-p/22381 el ejemplo en esta presentación realmente me ayudó mucho. Gran presentación y muchas gracias por compartir el ejemplo y el código.Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)No tengo acceso a Spotfire, por lo que no puedo probarlo, pero aparentemente, también es posible ejecutar código de Python en SpotFire.
Por favor, eche un vistazo a estos enlaces, pueden ayudar:
* https://community.tibco.com/wiki/how-deploy-custom-python-modules-use-tibco-spotfirer-clients
* https://community.tibco.com/questions/call-local-python-spotfire
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)eso sería bueno si JMP pudiera agregar código R. especialmente nuestra industria usa Spotfire y los códigos R se integrarán fácilmente con Spotfire.
¡Gracias!
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)sí, es realmente una buena sugerencia!!! No soy bueno en python ya que he estado escribiendo códigos SAS durante 20 años.
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)Hola de nuevo,
Hemos recibido solicitudes para la generación de código de lenguaje R pero, lamentablemente, aún no está en el producto ni en la hoja de ruta.
Yo sugeriría agregar una entrada a la Lista de deseos de JMP para que podamos rastrear el interés general en esta característica.
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)¡Me alegro de que te resulte útil! Le sugiero que no copie y pegue el código JMP en la computadora portátil; eso solo funciona para modelos muy pequeños y los dos que mencionó pueden ser bastante grandes. En su lugar, simplemente importe el archivo generado como en los ejemplos del cuaderno Discovery que mencioné.
Aquí hay un consejo: inicie su computadora portátil en el mismo directorio donde guardó el código Python generado por JMP, así como una copia del archivo de ayuda jmp_score.py que viene con el producto, para que Python pueda encontrarlos más fácilmente. Mira esto discusión para más detalles.
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)Nasif,
una pregunta más, en la versión más nueva, ¿Formular Depot generará código R? ¡gracias!
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)Nasif,
Muchas gracias por su sabia y rápida respuesta.Funciona muy bien para esto. Probaré un código python más complicado creado por JMP (fórmula Boosted tree/Random Forest, aunque parece que lleva mucho tiempo incluso copiar y pegar el cuaderno jupyter)
Re: error al ejecutar el código python (creado a través del almacén de fórmulas JMP)Hola Lucy,
La respuesta corta es que debe usar una estructura de datos para almacenar sus datos que sea compatible con el código generado por JMP. Espera que los argumentos de entrada y salida sean del tipo de un diccionario, donde se puede acceder a los valores y escribirlos por clave. La estructura de datos ideal para usar en una tabla es un Pandas DataFrame. Así es como agregaría una nueva columna a un DataFrame usando la función de puntaje JMP de su ejemplo:
import pandas as pd<BR /><BR />indata_df = pd.read_table(testdata, sep = ',')
indata_df['predicted_class'] = indata_df.apply(lambda s: score(s, {}), axis=1)
Consulte los archivos adjuntos para ver un ejemplo completo. Además, eche un vistazo al código de ejemplo adjunto a las presentaciones de Discovery donde se cubrió la generación de código de Formula Depot, Anotando fuera de la caja y Compartiendo la bendición definitiva .