Das Erste, was ich gerne wüsste, als ich mit dem Schreiben von Skripten begann: Es gibt verschiedene Arten von SkriptenNoch einmal zur Bresche!
Ich habe vor ein paar Wochen mit meinem Vater gesprochen. Ich bin nicht mit ihm ausgegangen, aber er hat Drogen genommen JMP seit Version 1.0. Ich erinnere mich, dass ich die 3,5-Zoll-Discs neben unserem Mac II-se liegen sah, als ich zum ersten Mal den Umgang mit einer Maus lernte. Die gleiche Maschine wurde auf der Discovery Summit-Konferenz 2019 in Tucson, Arizona, ausgestellt. Hier ist ein Bild davon:

Wie auch immer, mein Vater und ich haben darüber gesprochen meine erste Five Things-Blogserie . Er erwähnte, dass er sich wünschte, jemand würde eine Serie darüber schreiben, wie man mit der Skripterstellung in JMP beginnt. Zu diesem Zeitpunkt war ich bereits dabei, einige andere Artikel zu schreiben, also habe ich es für ein zukünftiges Projekt aufgehoben. Das Leben hatte jedoch andere Pläne. Eine Woche später wurde ich gebeten, bei einer Kundenpräsentation mitzuhelfen, und zu meiner Überraschung war eines der Themen, die ich behandeln sollte, eine Einführung in die Skripterstellung! Anscheinend liebt das Universum Witze.
Wie auch immer, es geht wieder los! In Anlehnung an das Format meiner ersten Five Things-Reihe sind hier die fünf Dinge, die meiner Meinung nach jeder wissen sollte, wenn er mit dem Schreiben von Drehbüchern beginnt. Zunächst ein konzeptioneller Gedanke.
Ein Bedürfnis erkennen, ein Bedürfnis erfüllen
Bevor Sie mit der Skripterstellung beginnen, müssen Sie den Bedarf berücksichtigen. Die Chancen stehen gut, dass es einen Grund dafür gibt, wenn Sie ein Skript erstellen möchten. Vielleicht tun Sie es, um bei der Arbeit effizienter zu werden. Vielleicht möchten Sie Analysemethoden für eine Gruppe standardisieren. Oder vielleicht gehören Sie tatsächlich zu den seltenen Menschen, die sich zum Grinsen und Kichern entschieden haben, es in die Hand zu nehmen. Keiner dieser Gründe ist schlecht, obwohl der letzte die Sache vielleicht etwas schwieriger macht (ich werde gleich erklären, warum). Der Punkt ist, dass Sie einen Grund im Kopf und einen bestimmten Zweck für Ihr erstes Drehbuch haben sollten.
Es gibt Skripte, und dann gibt es Skripte
Meiner Meinung nach gibt es jedenfalls zwei verschiedene Arten von Skripten: solche, die auf vorhandene Daten reagieren, und solche, die Daten erstellen. Skripte, die vorhandene Daten bearbeiten, interagieren mit einer Datentabelle und vorhandenen Plattformen in JMP, um eine neue benutzerdefinierte Ausgabe zu erstellen. Dabei kann es sich um so einfache Dinge handeln wie das Umschließen eines Fensters um mehrere Berichte oder um so komplexe Dinge wie einen benutzerdefinierten Bericht im Application Builder. Die wichtigste Gemeinsamkeit besteht darin, dass Skripte wie dieses vorhanden sind Ändern vorhandener Inhalte .
Die zweite Gruppe sind Skripte, die Daten erstellen. Skripte, die Daten erstellen, können Simulationstools, benutzerdefinierte Grafiken, Tools zum Verwalten von Metadaten in einer JMP-Datei usw. sein. Diese Gruppe ist etwas nebulöser, aber das gemeinsame Thema ist, dass die Skripte JMP auf eine Weise erweitern, die über die Anreicherung bestehender Daten oder Analysen hinausgeht. In den meisten Fällen werden diese Skripte ausgeführt neue Inhalte erstellen von Grund auf neu.
Wenn Menschen über das Erlernen der JMP-Skriptsprache (JSL) nachdenken, beginnen sie im Allgemeinen mit Skripten, die vorhandene Inhalte ändern. Hier werden auch wir unsere Diskussion beginnen. Machen wir also einen Schritt zurück und überlegen Sie, warum Sie daran interessiert sind, JSL zu lernen.
Sag mir einen Satz, Wassili. Bitte nur einen Satz.
Nehmen Sie sich einen Moment Zeit und denken Sie über sich selbst nach brauchen . Welchen Problempunkt möchten Sie mit JSL angehen? Verstehen Sie jetzt, warum es (zumindest am Anfang) schwierig sein kann, Skripte für Grinsen und Kichern zu erstellen? Es ist viel wahrscheinlicher, dass Sie die Lernkurve vorantreiben, wenn Sie einen Grund haben, die Spitze zu erreichen. Ich sage nicht, dass man sich JSL nicht einfach so zulegen kann, sondern nur, dass der Kampf ohne die zusätzliche Motivation schwieriger ist.
Der nächste und letzte Schritt, den wir in dieser Episode behandeln werden, ist, was Sie mit diesem Bedürfnis tun. Die einfache Antwort ist, dass Sie zwei Dinge tun werden. Zuerst werden Sie die (möglicherweise nebulöse) Idee, die Sie dazu bringt, JSL zu lernen, in einem einzigen Satz niederschreiben – einer Problemstellung. Und ich meine nur einen Satz. Stellen Sie sicher, dass Sie die Idee in etwas Greifbares umwandeln können, auf dem Sie aufbauen können. Es wird auch dabei helfen, das Scope Creep einzudämmen. Hier sind einige Beispiele:
- Ich möchte die gesamte Diagrammerstellung für meinen Wochenbericht in einem Skript automatisieren.
- Ich möchte die Formatierungsarbeit für eine vom Kunden bereitgestellte Datentabelle automatisieren.
- Ich möchte einen Satz Regelkarten aus einer Datendatei erstellen, die von meinem Fabrikcomputersystem bereitgestellt wird.
Beachten Sie, dass ich nicht über Einzelheiten spreche; Ich beschreibe lediglich den Schmerzpunkt, der mich dazu bringt, JSL zu betrachten. Und dann habe ich aufgehört zu schreiben.
Machen Sie Ihre Schlagliste
Haben Sie Ihre Problemstellung? Gut! Jetzt werden wir eine Reihe spezifischer Ergebnisse für Ihr Skript schreiben. Dies wird unsere Liste sein, die uns dabei helfen soll, die Ressourcen zu finden, die SAS zum Erlernen von JSL bereitstellt. Listen Sie keine grafische Benutzeroberfläche (GUI) oder Benutzeroberfläche (UI) speziell auf. Listen Sie die Aktionen auf, die das Skript ausführen muss. Hier sind Beispiele für die obigen Problemstellungen:
Problemstellung 1: Ich möchte die gesamte Diagrammerstellung für meinen wöchentlichen Bericht in einem Skript automatisieren.
Schlagliste:
- Rufen Sie einen Datensatz aus unserer Produktionsdatenbank ab, der die Daten der letzten drei Wochen enthält.
- Erstellen Sie ein Zeit-Temperatur-Diagramm für mein Produkt.
- Führen Sie eine Analyse von Zeit und Temperatur mithilfe eines Polynommodells durch.
- Exportieren Sie die Grafiken und Berichte in eine PowerPoint-Datei.
Problemstellung 2: Ich möchte die Formatierungsarbeit für eine vom Kunden bereitgestellte Datentabelle automatisieren.
Schlagliste:
- Benennen Sie Spalten basierend auf internen Standards um (unter Verwendung einer Tabelle aus Spezifikationen).
- Weisen Sie den benötigten Spalten Einheiten zu (unter Verwendung der Tabelle aus den Spezifikationen).
- Konvertieren Sie Breiten- und Längengrade in geografische Koordinaten.
- Ändern defekte Einheiten Spalte von kontinuierlich Zu Ordinal- .
Problemstellung 3: Ich möchte einen Satz Regelkarten aus einer Datendatei erstellen, die von meinem Fabrikcomputersystem bereitgestellt wird.
Schlagliste:
- Importieren Sie Daten vom Netzwerkstandort.
- Weisen Sie Spezifikationsgrenzen zu.
- Erstellen Sie Kontrolldiagramme.
Beachten Sie hier, dass ich mich nicht zu sehr einschränke. Ich erstelle gerade eine Liste mit Dingen, die ich im Drehbuch erledigen muss. Da ich davon ausgehe, dass Sie noch nie zuvor in JSL gearbeitet haben, gehe ich auch davon aus, dass Sie nicht wissen, wie Sie diese Probleme angehen sollen. Indem Sie sie aufschreiben, wissen Sie, worauf Sie bei der Hilfe und den Ressourcen achten müssen. An dieser Stelle werde ich im nächsten Teil dieser Serie weitermachen.
Schlussgedanke für diese Woche
Da sich diese Serie über mehrere Wochen erstrecken wird, habe ich beschlossen, sie eher zu einer Mitarbeitsserie als zu etwas zu machen, das man einfach nur liest. Nehmen Sie also diese letzten Punkte, die ich gemacht habe, als Hausaufgabe. Wenn Sie Verantwortung oder Feedback wünschen, schreiben Sie dies in die Kommentare unten. Ich melde mich, wenn ich helfen kann, oder sage Ihnen Bescheid, wenn Sie in Zukunft möglicherweise auf Schwierigkeiten stoßen.
Um Bonuspunkte zu erhalten, öffnen Sie ein Skriptfenster in JMP ( Datei > Neu > Skript ) und geben Sie Ihre Problemstellung und Aufzählungspunkte in das Skriptfenster ein, einen pro Zeile mit einem doppelten Schrägstrich („//“) am Zeilenanfang. Möglicherweise ändert sich die Textfarbe für diese Zeilen im JSL-Skripteditor in Grün. Wir werden in einer kommenden Folge darüber berichten, was Sie gerade getan haben.
Oh, und wenn Sie sich fragen, wer Vasily ist und warum er Ihnen einen einzigen Satz sagen sollte, schauen Sie mal rein Hier .
- Das Zweite, was ich gerne wüsste, als ich mit der Skripterstellung begann: Hilfe bekommen
- Das Dritte, was ich gerne gewusst hätte, als ich mit der Skripterstellung begonnen habe: Der Antwortknopf ist dein Freund
- Das vierte, was ich gerne wüsste, als ich mit dem Schreiben von Skripten begann: Was zu tun ist, wenn etwas schief geht
- Das fünfte, was ich gerne wüsste, als ich mit dem Schreiben von Skripten begann: Wie man Dinge aneinanderreiht
- Die (andere) fünfte Sache, die ich gerne wüsste, als ich mit der Skripterstellung begann: Wie man Dinge verpackt
- Das Neue, was ich den Leuten zeigen werde, wenn sie mit der Skripterstellung beginnen: Das erweiterte Protokoll

Es gibt zwei verschiedene Arten von Skripten: solche, die auf vorhandene Daten reagieren, und solche, die Daten erstellen.
Betreff: Das Erste, was ich gerne gewusst hätte, als ich mit dem Schreiben von Skripten begann: Es gibt verschiedene Arten von SkriptenGuter Gedanke! Weitere Hilfestellungen finden Sie in Teil 2 der Serie: Das Zweite, was ich gerne wüsste, als ich mit der Skripterstellung begann: Hilfe bekommen
Am besten,
M
Betreff: Das Erste, was ich gerne wüsste, als ich mit dem Schreiben von Skripten begann: Es gibt verschiedene Arten von SkriptenGute Gedanken.Zum Erlernen von JMP, der neuen Ausgabe von Steigen Sie ein in die JMP-Skripterstellung , von Murphrey und Lucas war hilfreich für mich.
Betreff: Das Erste, was ich gerne gewusst hätte, als ich mit dem Skripten anfing: Es gibt verschiedene Arten von SkriptenMeine Hauptprogrammiersprache ist SAS. Data Step, Makrosprache, PROC SQL, PROC IML – also nicht wirklich eine einzige Sprache. Aber ich habe einen kurzen Kurs zu JMP gesehen und war sofort begeistert. Warum? Über die Jahre bin ich zu dem Schluss gekommen, dass es eigentlich nur zwei wichtige Dinge gibt.
1. Zuerst fragte ich: „Liefert Ihre Software die richtige Antwort?“, dann änderte ich das in: „Liefert Ihre Software eine Antwort, die Sie verteidigen können, wenn sie in Frage gestellt oder kritisiert wird?“
2. Wie schnell können Sie die Antwort aus Aufgabe 1 erhalten?
Anfangs nutzte ich nur die Point-and-Click-Funktionen von JMP, aber ich habe festgestellt, dass ich etwas JSL lernen muss, um JMP effizienter nutzen zu können.
Zum Beispiel zeige ich meinen Studierenden, wie man mit k-NN eine kontinuierliche Zielvariable vorhersagt. Es gibt 12 mögliche Prädiktoren (eine Mischung aus kontinuierlichen und nominalen Variablen) mit einer kontinuierlichen Zielvariable und einer Validierungsvariable. Ich möchte zeigen, wie sich R² , RASE und AAE verändern, wenn man Prädiktoren entfernt. Dazu benötige ich einen Durchlauf mit 12 Prädiktoren, dann mit 11 usw. bis hin zu einem letzten Durchlauf mit zwei Prädiktoren. In Ihrem dritten Beitrag dieser Blogreihe habe ich etwas über das neue Fenster gelernt.
New Window("My Window",
// Launch platform: K Nearest Neighbors 12 Variables
Data Table( "Boston Housing Plus Validation Column" ) <<
K Nearest Neighbors(
Validation( :Validation ),
Y( :MEDV ),
X(:CRIM, :ZN, :INDUS, :CHAS, :NOX, :RM, :AGE, :DIS, :RAD, :TAX, :PTRATIO, :LSTAT),
K( 20 )
);
additional analyses with 10 predictors down to last run with 2. So, a total of 11 analyses.
);
Mit „Neues Fenster“ werden die Ergebnisse in einem einzigen Fenster angezeigt, im Gegensatz zu den elf Fenstern, die bei der Ausführung des k-NN-Algorithmus mit elf verschiedenen Prädiktorlisten entstehen. Anschließend kann ich mit der rechten Maustaste auf die Ergebnistabelle klicken und „Kombinierte Datentabelle erstellen“ auswählen. Dadurch erhalte ich die Ergebnisse aller elf Analysen in einer Tabelle.
Ich denke, es ist offensichtlich, dass ich den Code mit 11 verschiedenen Analysen (von 12 Prädiktoren auf 2) in eine Schleife umwandeln muss. Das ist mein nächster Schritt beim Erlernen von JSL.
JMP JSL für Anfänger.
Vielen Dank für Ihre Beiträge. Ich verwende JMP Student 19 auf einem Windows-Rechner.
John
Betreff: Das Erste, was ich gerne gewusst hätte, als ich mit dem Skripten anfing: Es gibt verschiedene Arten von Skripten@jkeighley , vielen Dank für die netten Worte! Ich freue mich, dass Ihnen die Reihe geholfen hat. Sie geht zwar etwas in die Tiefe, aber schauen Sie sich doch mal dieses Beispiel an … es könnte Ihnen Anregungen für die Strukturierung des neuen Berichts geben (das Skript-Index sollte Ihnen bei einigen Details weiterhelfen):
Names Default To Here( 1 );
Clear Log();
// data table goes here
dt = Open( "$Sample_Data/penguins.jmp" );
// report names go here (this is what the tabs will be named)
reportNames = {"report 1", "report 2", "report 3", "report 4", "report 5"};
// jsl for each tab's contents go here. One tab per Expr() call. They
// should be in the same order as the report names.
reportScripts = {Expr(
dt << Scatterplot 3D(
Y( :Culmen Length, :Culmen Depth, :Flipper Length ),
Coloring( :Species ),
Normal Contour Ellipsoids( 1, :Species ),
Nonpar Density Contour( 1, :Species ),
Legend( 1 ),
Frame3D(
Set Graph Size( 655, 672 ),
Legend( 1 ),
Set Grab Handles( 0 ),
Set Rotation( -72.1900689453449, -1.75327107936844, 34.4563606108469 )
),
SendToReport( Dispatch( {}, "Density Contour Controls", OutlineBox, {Close( 1 )} ) )
)
), Expr(
dt << Hierarchical Cluster(
Y( :Culmen Length, :Culmen Depth, :Flipper Length, :Body Mass, :Delta 15 N, :Delta 13 C ),
Label( :Species ),
Method( "Centroid" ),
Standardize By( "Columns" ),
Color Clusters( 1 ),
Show Dendrogram( 0 ),
Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 4 ),
Constellation Plot( 1 ),
Cluster Summary( 1 )
)
), Expr(
dt << Graph Builder(
Size( 662, 560 ),
Show Control Panel( 0 ),
Variables( X( :Species ), Y( :Culmen Length ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
)
), Expr(
dt << Graph Builder(
Size( 662, 552 ),
Show Control Panel( 0 ),
Variables( X( :Body Mass ), Y( :Flipper Length ), Overlay( :Species ) ),
Elements( Points( X, Y, Legend( 13 ) ), Contour( X, Y, Legend( 16 ), Contour Type 2D( "HDR" ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", FrameBox,
{DispatchSeg( Contour Seg( "Contour (Adelie penguin (Pygoscelis adeliae))" ), {Line Color( {230, 159, 0} )} ),
DispatchSeg( Contour Seg( "Contour (Chinstrap penguin (Pygoscelis antarctica))" ), {Line Color( {86, 180, 233} )} ),
DispatchSeg( Contour Seg( "Contour (Gentoo penguin (Pygoscelis papua))" ), {Line Color( {0, 158, 115} )} )}
)
)
)
), Expr(
dt << Fit Group(
Bivariate( Y( :Flipper Length ), X( :Culmen Length ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
Bivariate( Y( :Flipper Length ), X( :Culmen Depth ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
Bivariate( Y( :Body Mass ), X( :Culmen Length ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
Bivariate( Y( :Body Mass ), X( :Culmen Depth ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
<<{Arrange in Rows( 2 )}
)
)};
// I'm creatng an Associative array to manage the looping for me
reports = Associative Array( reportNames, reportScripts );
// build the window wrapper
nw = New Window( "Example Report", tb = Tab Box() );
// loop through the AA and append each tab page box to the tab box in the report
For Each( {{k, v}, i}, reports, tb << Append( Tab Page Box( Title( k ), Eval( v ) ) ) );
// set the view back to the first report.
tb << Set Selected( 1 );