In JMP 14 gibt es mehrere neue Funktionen, von denen viele die Leistungsfähigkeit von JSL erweitern oder verbessern. In diesem Blog werde ich nur einige der neuen Funktionen für JSL und den Scripting Index behandeln.
HTTP-Anfrage
Verfügen Sie über eine Datenquelle, die eine REST-API für den Zugriff auf Daten unterstützt? Möchten Sie mit öffentlichen REST-API-Diensten wie Twitter- oder Google-APIs interagieren? In JMP 14 können Sie jetzt nativ auf diese APIs zugreifen, indem Sie die Funktion New HTTP Request () verwenden.
Hier ein kleines Beispiel aus dem Scripting Index, der einen öffentlichen API-Dienst zum Testen einer POST-Anforderung verwendet.
Names Default To Here( 1 );
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( "\[{"username":"bob","address":"12345"}]\" )
);
data = request << Send();
Nachdem Sie das Zeichenfolgenergebnis in der Datenvariablen in einer JSON-Datei gespeichert haben, können Sie die Ergebnisse in der neuen JSON-Syntax mit hervorgehobenem Skripteditor anzeigen. Wenn Sie sich entschieden haben, wie Sie mit dieser JSON-Antwort umgehen möchten, können Sie auch eine beliebige Anzahl von JSON-Handhabungsfunktionen verwenden, wie Parse JSON, JSON to List oder JSON to Data Table.
Python-Integration
Wollten Sie schon immer die Macht von Python aus einer Ihrer JMP-Anwendungen nutzen? Mit der Python-Integration von JMP 14 ist es jetzt einfacher als je zuvor.
Das folgende Beispiel zeigt ein Streuungsdiagramm aus Gewicht und Größe, das mit dem Alter farbig ist, und zwar unter Verwendung des Pakets matplotlib Python.
NamesDefaultToHere( 1 );
// Establish connection to Python
PythonConnection = PythonConnect();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Send the data table to Python as a dataframe
PythonConnection << Send( dt );
Close( dt, NoSave ); // close the JMP data table
// Submit python program that uses our data table (dataframe in python)
ml = PythonConnection << Submit(
"\[
import matplotlib.pyplot as plt
plt.scatter(dt.weight, dt.height, c=dt.age)
plt.ylabel('Height')
plt.xlabel('Weight')
plt.title('Weight vs. Height for Big Class')
plt.show(block=False)
]\"
);
// Get the graphics added by 'plt.show(...)'
plot = PythonConnection << Get Graphics( png );
// Show the graphic in a new window
pngJMP = NewWindow( "Plot", PictureBox( plot ) );
// close the plot
PythonConnection << Submit( "plt.close()" );
// disconnect from python
PythonConnection << Disconnect;

Klassen
Wenn Sie ein JSL-Programmierer mit einem objektorientierten Hintergrund sind oder wenn Sie in Ihrer erweiterten Anwendung Neues ausprobieren möchten, sind Sie möglicherweise an der neuen Funktionalität zum Definieren von Klassen interessiert. Klassen sind wie Namespaces, Sie können jedoch mehrere Instanzen haben, die als Objekte bezeichnet werden. Auf diese Weise können Sie mehrere Instanzen erstellen, z. B. eine Gruppe von Anzeigefeldern, die jeweils ihr eigenes Verhalten haben.
Diese Verhaltensweisen in einer Klasse werden mit einer sogenannten Methode ausgeführt. Eine Methode ist dem, was derzeit als Funktion bezeichnet wird, sehr ähnlich, mit der Ausnahme, dass Methoden nur innerhalb einer Klasse existieren können.
Hier ist ein Beispiel eines einfachen Rechners, der mehrere Male zu einem Fenster hinzugefügt werden kann, ohne sich gegenseitig auf die Zehen zu treten.
// Define the class so we can create instances of it later
Define Class(
"Calculator",
// Define member variables
content = Empty();
num1_neb = Empty();
num2_neb = Empty();
operand_cmb = Empty();
calc_btn = Empty();
result_neb = Empty();
// _init_ is special method called when a new object is created
_init_ = Method( {},
content = H List Box(
num1_neb = Number Edit Box( 0 ),
operand_cmb = Combo Box( {"+", "- "} ),
num2_neb = Number Edit Box( 0 ),
calc_btn = Button Box( "=",
calc( operand_cmb << Get Selected(), num1_neb << Get(), num2_neb << Get() );
),
result_neb = Number Edit Box()
);
initializeValues();
);
// called from the _init_ method
initializeValues = Method( {},
num1_neb << Set( Random Integer( 10 ) );
num2_neb << Set( Random Integer( 10 ) );
);
// called when '=' button is clicked
calc = Method( {operand, n1, n2},
result = If( operand == "+",
addition( n1, n2 ),
subtraction( n1, n2 )
);
result_neb << set( result );
);
// methods called by calc
addition = Method( {n1, n2},
Return( n1 + n2 )
);
subtraction = Method( {n1, n2},
Return( n1 - n2 )
);
);
// Create multiple instances of the Calculator class
c1 = New Object( Calculator );
c2 = New Object( Calculator );
c3 = New Object( Calculator );
// Create a new window with the content of the three instances of Calculator
New Window( "Example", c1:content, c2:content, c3:content );

Verwenden eines JMP-Projekts als IDE
Mit JMP 14-Projekten können Sie problemlos eine tabellarische Ansicht Ihrer Skripts mit integriertem Protokoll und Lesezeichen erstellen. Dies kann für ein hervorragendes Workflow-Management mit all Ihren Skripts für ein Add-In oder ein Projekt an einem Ort sorgen. Weitere Beispiele für die Nutzung der neuen JMP-Projektfunktionen finden Sie im Blog Bleiben Sie mit JMP 14 auf dem Laufenden .

Ich hoffe, Sie genießen all diese neuen Funktionen in JSL für JMP 14. Weitere Verbesserungen bei JSL finden Sie im Abschnitt "Scripting" des Dokuments "Neue Funktionen", das über "Hilfe"> "Neue Funktionen" verfügbar ist.