errore durante l'esecuzione del codice python (creato tramite JMP formula depot )Il modello JMP mi darebbe una formula e voglio passare la formula e usarla nel programma Python o R.
Attraverso il formula depot, ha generato il codice Python e ho provato a copiare il codice Python ed eseguirlo tramite Jupiter Notebook, ma mi dà sempre errore:
ad esempio, ho allegato il file di test e il codice python creato da JMP ed eseguito. non è stato riconosciuto come array ... per favore aiuto. Grazie!!! Ho pensato che fosse facile copiare il codice Python creato da JMP ed eseguire Python senza problemi. sembra che non lo sia.....
def score(indata, outdata):
_temp_0 = tu""
if (indata[u"Num"] > 50):
_temp_0 = u"Alto"
altro:
_temp_0 = u"Basso"
outdata[u"classe"] = _temp_0
restituisce dati esterni[u"classe"]
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
quello che segue è il codice Python di JMP
dalla divisione di importazione __future__
dall'importazione matematica *
importa jmp_score come jmp
"" ================================================ ===================
Copyright(C) 2018 SAS Institute Inc.Tutti i diritti riservati.
Avviso:
Le seguenti autorizzazioni sono concesse a condizione che il file
sopra il copyright e questo avviso appaiono nel codice del punteggio e
qualsiasi documentazione correlata. Autorizzazione a copiare, modificare
e distribuire il codice del punteggio generato utilizzando
Il software JMP® è limitato ai clienti di SAS Institute Inc. ("SAS")
e successive terze parti, il tutto senza alcuna garanzia, espressa o
implicita, o qualsiasi altro obbligo da parte di SAS.SAS e di tutte le altre SAS
I nomi di prodotti e servizi di Institute.Inc. sono registrati
marchi di fabbrica o marchi di fabbrica di SAS Institute Inc. negli Stati Uniti
e altri paesi. Ad eccezione di quanto contenuto nel presente avviso,
il nome di SAS Institute Inc. e JMP non deve essere utilizzato in
la pubblicità o la promozione di prodotti o servizi senza
previa autorizzazione scritta di SAS Institute Inc.
=================================================== ================ """
""" Codice Python generato da JMP v13.2.1 """
def getModelMetadata():
return {"creator": u"Column class", "modelName": u"", "predicted": u"", "table": u"Sheet2", "version": u"13.2.1", "timestamp ": u"2018-04-05T16:10:16Z"}
def getInputMetadata():
ritorno {
u"Num": "mobile"
}
def getOutputMetadata():
ritorno {
u"class": "str"
}
def score(indata, outdata):
_temp_0 = tu""
if (indata[u"Num"] > 50):
_temp_0 = u"Alto"
altro:
_temp_0 = u"Basso"
outdata[u"classe"] = _temp_0
restituisce dati esterni[u"classe"]
i dati sono simili
Classe Num
15 Basso
17 Basso
200 alto
60 Alto
72 Alto
10 Basso
20 Basso
70 Alto
55 Alto
20 Basso
854 Alta
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Panda segue la convenzione numpy di generare un errore quando si tenta di convertire qualcosa in un bool. Questo accade in un if o quando si usano le operazioni booleane, and, or, or not. Non è chiaro quale sia il risultato.
esempio
5 == pd.Serie([12,2,5,10])
Il risultato ottenuto è una serie di valori booleani, di dimensioni uguali alla pd.Series nella parte destra dell'espressione. Quindi, ottieni un errore. Il problema qui è che stai confrontando un pd.Series con un valore, quindi avrai più valori True e più False, come nel caso sopra. Questo ovviamente è ambiguo, poiché la condizione non è né Vero né Falso. È necessario aggregare ulteriormente il risultato in modo che dall'operazione risulti un singolo valore booleano. Per questo dovrai usare any o all a seconda che tu voglia almeno uno (qualsiasi) o tutti i valori per soddisfare la condizione.
(5 == pd.Series([12,2,5,10])).all()
# False
O
(5 == pd.Series([12,2,5,10])).any()
# True
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Grazie mille per la risposta rapida e dettagliata,
ora funziona alla grande
Grazie
Eran
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)CIAO @eranraz1 ,
Ho riscontrato due problemi con il codice che hai postato:
1) Hai fornito una stringa come valore di input per DESIGN_LAYERS. Il codice del punteggio prevede un float, come indicato nel metodo getInputMetadata(); il valore non dovrebbe essere quotato.
indata_aa = {'DESIGN_LAYERS': '3','EXISTS_LASER_DRILL' : 'YES' }
dovrebbe essere invece:
indata_aa = {'DESIGN_LAYERS': 3,'EXISTS_LASER_DRILL' : 'YES' }
2) Nella riga di ritorno alla fine del metodo di punteggio manca una sottoscrizione in modo che il valore venga aggiunto a un elemento del dizionario, non al dizionario (di output) stesso. Se questo è il codice originale generato, è un bug. Forse è una modifica introdotta per errore durante la creazione dello script di test.
outdata = 358.593374276362 + 26.8517927560789 * indata[u"DESIGN_LAYERS"] + _temp_0
dovrebbe essere
outdata[u"Add"] = 358.593374276362 + 26.8517927560789 * indata[u"DESIGN_LAYERS"] + _temp_0
Con queste modifiche (e dopo aver aggiunto un'istruzione di importazione Numpy) lo script funziona e restituisce un risultato:
***************************
569.3520768491067
[Finished in 0.3s]
Vedi allegato per lo script completo e aggiornato.
PS: La prossima volta, sarebbe meglio aprire una nuova discussione e fare riferimento a questo post di 2 anni per il contesto.
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)CIAO ,
stava cercando di implementare lo stesso metodo utilizzando un 'Dict' con 2 parametri e ha ricevuto l'errore:
"TypeError: impossibile moltiplicare sequenza per non-int di tipo 'float'"
per favore aiutatemi
allegato il codice 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, {}))Grazie
Eran
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Sono così felice che ti sia stato d'aiuto, Lucy!Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Nasciff, https://community.jmp.com/t5/Discovery-Summit-2016/Scoring-Outside-the-Box/ta-p/22381 l'esempio in questa presentazione mi aiuta davvero molto. Ottima presentazione e grazie mille per aver condiviso l'esempio e il codice.Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Non ho accesso a Spotfire quindi non è possibile per me provarlo, ma a quanto pare è possibile eseguire codice Python anche in SpotFire.
Dai un'occhiata a questi link, potrebbero aiutarti:
* https://community.tibco.com/wiki/how-deploy-custom-python-modules-use-tibco-spotfirer-clients
* https://community.tibco.com/questions/call-local-python-spotfire
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)sarebbe positivo se JMP potesse aggiungere il codice R. in particolare il nostro settore utilizza Spotfire e i codici R saranno facilmente incorporati con Spotfire.
Grazie!
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)sì, è davvero un buon suggerimento!!! Non sono bravo con Python da quando scrivo codici SAS da 20 anni.
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Ciao di nuovo,
Abbiamo ricevuto richieste per la generazione del codice del linguaggio R, ma sfortunatamente non è ancora presente nel prodotto o nella roadmap.
Suggerirei di aggiungere una voce al file Lista dei desideri JMP in modo da poter monitorare l'interesse generale per questa funzione.
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Sono contento che lo trovi utile! Suggerirei di non copiare e incollare il codice JMP nel notebook: funziona solo per modelli molto piccoli e i due che hai citato possono essere piuttosto grandi. Invece, basta importare il file generato come negli esempi di notebook Discovery che ho citato.
Ecco un suggerimento: avvia il tuo notebook nella stessa directory in cui hai salvato il codice python generato da JMP, oltre a una copia del file helper jmp_score.py fornito con il prodotto, in modo che Python possa trovarli più facilmente. Guarda questo discussione per ulteriori dettagli.
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Nasif,
un'altra domanda, nella versione più recente, Formular Depot genererà il codice R? Grazie!
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Nasif,
Grazie mille per la tua risposta competente e veloce.Funziona molto bene per questo. Proverò un codice Python più complicato creato da JMP (formula Boosted tree/Random Forest, anche se sembra che ci voglia molto tempo anche per copiare e incollare jupyter notebook)
Ri: errore durante l'esecuzione del codice python (creato tramite JMP formula depot)Ciao Lucia,
La risposta breve è che devi utilizzare una struttura di dati per conservare i tuoi dati che sia compatibile con il codice generato da JMP. Si aspetta che gli argomenti di input e output siano di un tipo simile a un dizionario, in cui è possibile accedere ai valori e scriverli tramite chiave. La struttura dati ideale da utilizzare per una tabella è un DataFrame Pandas. Ecco come aggiungeresti una nuova colonna a un DataFrame utilizzando la funzione punteggio JMP dal tuo esempio:
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)
Si prega di consultare i file allegati per un esempio completo. Inoltre, dai un'occhiata al codice di esempio allegato alle presentazioni Discovery in cui è stata trattata la generazione del codice Formula Depot, Segnare fuori area E Condividere il dono supremo .