Lautsprecher
|
Transkript
|
| Jordan Hiller |
Hallo zusammen. Ich bin Jordan Hiller und dieser Vortrag ist Steal This Code! Drei Upgrades für Skripte, die aus dem erweiterten Protokoll stammen. |
| |
Und hier ist die Inspiration für diesen Vortrag. Es ist ein Buch von Abbie Hoffman, einer Provokateurin und Aktivistin. Ja, er hat sein Buch „Steal this Book“ genannt, was ein toller Titel ist. Ich bin mir nicht sicher, ob es ein toller Geschäftsplan ist, Ihr Buch so zu nennen, aber es ist trotzdem sehr einprägsam. |
| |
Warum also diesen Code stehlen? JMP möchte, dass Sie Code stehlen. Die Idee dahinter ist, dass Sie per Mausklick Ihre Analyse in JMP durchführen. |
| |
und der Code hinter Ihrem Point-and-Click wird gespeichert. Es wird im erweiterten Protokoll gespeichert und Sie können es abrufen und wiederverwenden. |
| |
Und das sind etwa 90 % Ihres Produktionsskripts. Sie werden sich das schnappen und es wiederverwenden, damit Sie es können |
| |
Automatisieren Sie häufige Aufgaben und erledigen Sie diese mit einem Klick auf eine Schaltfläche, statt mit einer Folge von Point-and-Clicks. Das ist also das ganze Ziel hier: Sie werden sparen |
| |
Skript aus dem erweiterten Protokoll und das sind die Grundgerüste Ihres Produktionsskripts. |
| |
Es bleiben etwa 10 % übrig, die Sie selbst schreiben müssen, und das ist unser Ziel für diesen Vortrag. Wir werden über etwas von dem Bindegewebe sprechen, das Produktionsskripte zusammenhält. |
| |
In diesem Vortrag werde ich mich mit Ihnen also nicht so sehr auf das Wesentliche der Syntax konzentrieren, sondern |
| |
viel mehr auf das große Ganze, und das steht im Einklang mit dem, was meiner Meinung nach eine gute Möglichkeit ist, JSL-Programmierung zu lernen. Es ist viel besser, vorhandenen Code zu nehmen und anhand von Beispielen zu lernen. Verwenden Sie diesen Code. |
| |
Finden Sie das Snippet, das das tut, was Sie tun möchten. Sie finden es in der JMP-Benutzer-Community oder vielleicht im Skript-Handbuch. |
| |
Und kopieren Sie es einfach und passen Sie es für Ihre Verwendung an. Sie müssen nicht alle Komplexitäten der Syntax kennen. Da kommt man wirklich weit. Das Erlernen der Syntax erfolgt mit zunehmender Erfahrung. |
| |
Wir werden also über drei Fallstudien darüber sprechen, was Sie tun können, um Ihren Code anhand des erweiterten Protokolls zu verbessern. Lassen Sie uns jedoch zunächst einen Überblick über JSL geben. Vielleicht ist es für einige von Ihnen eine Einführung in einige JSL-Grundlagen. |
| |
Das Wichtigste, was Sie als Anfänger über JSL wissen sollten, ist, dass alles ein Objekt ist. Alles, was du |
| |
etwas tun möchte, ist ein Objekt, das Datentabellen und Spalten in Datentabellen sowie Plattformen wie die Verteilungsplattform, den Graph Builder, Fit Y by X usw. umfasst. |
| |
und die Berichte, die von diesen Plattformen kommen. Wenn Sie also Objekte haben, senden Sie ihnen Nachrichten, indem Sie sie bearbeiten. Objekte empfangen also Nachrichten. Hier ist ein wirklich einfaches Beispiel, das ich aus dem erweiterten Protokoll kopiert habe. |
| |
Öffnen Sie die Datentabelle „Big Class“ im Beispieldatenverzeichnis und führen Sie rechts eine einfache Verteilungsanalyse durch. Und so sieht dieser Code aus, der gerade aus dem Protokoll kopiert wurde. |
| |
Jetzt. |
| |
Was wir tun möchten, ist das erste, was wir tun möchten, ist, die Datentabelle zu benennen. Geben Sie ihm einen Namen, und dafür habe ich den Code aus Zeile fünf hier übernommen und ihn erweitert. ICH |
| |
Ich habe dieses bctable= vor dem Rest, vor dem offenen Teil der Anweisung, hinzugefügt, alles klar. Und wenn wir diese Datentabelle öffnen, erstellen wir diesen Namen: bctable. Wissen Sie, ich habe mich für bctable entschieden, Sie werden dt in der Dokumentation sehen. Benutzen Sie, was Sie möchten, dies wird von Ihnen zugewiesen. |
| |
Lassen Sie uns dies also ausführen, indem wir es markieren und auf die Schaltfläche „Ausführen“ klicken, Big Class öffnen und gleichzeitig den Namen bctable zuweisen. Warum ist es wichtig, das zu tun, weil ich es jetzt habe? |
| |
handhaben. Es ist ein Hook, den ich später im Code verwenden kann, bctable. Immer wenn ich bctable sage, spreche ich von Big Class. |
| |
Also |
| |
Hier ist die nächste Zeile, aber der Verteilungsbefehl, und den habe ich auch geändert. Und wie Sie wissen, ist das hier aus dem Protokoll ein nackter Verteilungsbefehl. Es hat nicht... |
| |
Es zeigt nicht auf eine Datentabelle. Wenn Sie es auf diese Weise ausführen, führt JMP es einfach für die Datentabelle aus, die den Fokus hat. |
| |
Die aktuelle Datentabelle ist zufällig eine große Klasse, weil Sie sie kurz davor geöffnet haben, okay. Aber es ist immer gut, explizit zu sein. Es ist eine gute Idee, explizit anzugeben, mit welcher Datentabelle Sie arbeiten möchten, daher führen wir es auf diese Weise aus. |
| |
bctable, dann die Doppelpfeile und dann die Verteilungsbefehle. Das haben wir also hinzugefügt, erreichbar mit den Doppelpfeilen. |
| |
Und das ist die Syntax zum Senden einer Nachricht. Wir senden also die Verteilungsnachricht rechts an die Datentabelle links, nach der bctable benannt ist. Und Sie können sehen, dass das Big Class ist, wenn ich mit der Maus über bctable fahre. Also läuft das Ganze, |
| |
Wir bekommen den Verteilungsbericht |
| |
das wir wollten. |
| |
Hier ist... wir können noch einen Schritt weiter gehen und oft müssen wir das auch tun. Wir werden der Plattform einen Namen geben, während wir sie betreiben |
| |
Hier ist eine Zeile, die sowohl den Doppelpfeil als auch die Gleichheitszeichen enthält. Also lasst uns, ähm, das von rechts nach links lesen. Wir nehmen diese Verteilungsnachricht und senden sie an die bctable. |
| |
Und das Ergebnis all dessen, nämlich die Plattform, werden wir in dieser Variablen speichern, die ich distplat nenne. |
| |
Lassen Sie uns das ausführen. |
| |
Alles klar, sieht gleich aus, aber der Unterschied besteht darin, dass ich jetzt diese JSL-Variable distplat habe, die ich später in meinem Code verwenden kann. |
| |
Wofür würden Sie es verwenden? Sie könnten es verwenden, um der Ausgabe Optionen für rote Dreiecke hinzuzufügen, also bringen wir das hier ... |
| |
Bringen wir diesen Verteilungsbericht dorthin, wo Sie ihn sehen können. |
| |
Und wir nehmen dieses Distplat-Objekt, das ist die ... das ist die Vertriebsplattform. |
| |
Sehen Sie, schweben Sie darüber und lassen Sie uns diese Zeile ausführen. Aktivieren Sie das normale Quintildiagramm in der Verteilungsplattform. Da ist es. |
| |
Okay. |
| |
Der letzte Schritt besteht darin, die Plattform zu nehmen, dieses Objekt hierher zu bringen und dorthin |
| |
Holen Sie sich daraus einen Bericht, ein Berichtsobjekt. Das ist diese Zeile. Senden Sie die Berichtsnachricht an das Plattformobjekt, und jetzt erhalten wir ein Berichtsobjekt. |
| |
Und wir müssen dies tun, wenn Sie auf diese Werte in Ihrem Code zugreifen möchten – beliebige Zahlen, Diagramme oder grafische Elemente im Bericht –, dann benötigen Sie dies, okay. Dieses Objekt ist rdistplat. Also führe es einfach noch einmal aus, rdistplat. |
| |
Ich habe es ausgeführt und Sie sehen nichts sichtbares, aber was passiert ist, ist, dass ich jetzt dieses Objekt habe, rdistplat. Es heißt, dass es sich um ein Anzeigefeld handelt, und später werden wir darüber sprechen, wie Sie damit auf die Nummern hier im Bericht zugreifen können. |
| |
Okay, ich werde mein Protokoll löschen |
| |
und beginnen Sie mit unserem |
| |
Fallstudien. |
| |
Die erste Technik, die wir lernen werden, besteht also darin, denselben Befehl immer wieder für verschiedene Spalten in der Datentabelle zu wiederholen und mit Schleifen über die Spalten zu iterieren, wobei für jeden Befehl der Befehl „for“ verwendet wird. Also |
| |
Dies ist ein wirklich häufiger Bedarf, manchmal ist es nur etwas Einfaches, das Sie tun müssen, wie zum Beispiel das Ändern des Formats oder des Modellierungstyps einer Spalte. |
| |
Es könnte sehr komplex sein |
| |
Nehmen Sie eine ... Nehmen Sie eine Transformation der Spalte vor, führen Sie ein Kontrolldiagramm aus und machen Sie etwas mit diesem Kontrolldiagramm. Also ja, es skaliert; Diese Technik skaliert. |
| |
So erreichen wir dies im JSL-Code. Wir zeigen und klicken zuerst, rechts, und tun, was wir tun möchten. Machen Sie es für eine einzelne Spalte, und dann holen wir uns diesen Code mithilfe des erweiterten Protokolls. |
| |
Und das ist dann das Grundgerüst unseres Drehbuchs. Und wir werden es ändern, um alle Spalten zu durchlaufen, für die wir diese Aktion ausführen möchten. |
| |
Die Methode, die wir zum Schleifen und Iterieren verwenden werden, ist „for every“ und wurde in JMP 16 eingeführt, sodass diese Technik in früheren Versionen von JMP nicht funktionieren wird. |
| |
Dabei wird auch ein Konzept namens JSL-Listen verwendet, also werden wir auch ein wenig darüber sprechen. |
| |
Okay, ich fange an |
| |
Lassen Sie mich in JMP mit dem Startfenster beginnen. |
| |
Und ich werde ... einfach das Protokoll überprüfen und sicherstellen, dass es sauber ist. Nein, ich muss eines entfernen: das Protokoll löschen. Okay, also lassen Sie uns zeigen und klicken, was wir tun möchten. Ich werde eine Datentabelle namens sc20 öffnen. |
| |
Diese Datentabelle steht Ihnen in den Präsentationsmaterialien zur Verfügung, die Sie online finden. |
| |
Und wenn man sich diese Datentabelle ansieht, hat sie eine ID-Spalte und dann etwa 20 |
| |
Datenspalten. Diese haben viele, viele Dezimalstellen, sind zu präzise und ich möchte sie auf zwei Dezimalstellen kürzen. Ändern wir also das Format, sodass nur die ersten beiden Dezimalstellen der Daten angezeigt werden. |
| |
Das ist eine einfache Point-and-Click-Operation. Klicken Sie mit der rechten Maustaste, gehen Sie in die Spalte „Info“, |
| |
und wir werden das Anzeigeformat von der Standardeinstellung auf die Dezimalzahl mit zwei Stellen ändern. |
| |
OK, und jetzt haben wir das für NPN1 gemacht, wir haben 19 weitere Spalten, für die wir das auch gerne machen würden. |
| |
Sehen wir uns also das erweiterte Protokoll an. |
| |
Und das ist es, das ist der Code, den wir brauchen, um das Format für eine Spalte, NPN1, zu ändern. Und um es dann wiederzuverwenden, gehen Sie zum roten Dreieck und Sie können das Skript entweder in Ihrer Zwischenablage oder sogar in einem neuen Skriptfenster speichern. |
| |
Ich werde zu einer anderen Datei wechseln, in der ich etwas Arbeit geleistet habe, damit wir uns etwas genauer damit befassen können. |
| |
Okay. |
| |
Also die ersten beiden Zeilen hier ... drei Zeilen, das ist der Code aus dem Protokoll. Also gut, als Erstes öffnen wir die Datentabelle. |
| |
Und Sie haben vielleicht bemerkt, dass ich ein wenig bearbeitet habe, ich habe meinen langen Pfadnamen, meinen langen Verzeichnispfad zu dieser Datei herausgeschnitten. |
| |
Wenn Sie es so ausführen, |
| |
Es funktioniert, solange sich die JMP-Datentabelle sc20 im selben Verzeichnis wie diese JSL-Datei befindet. Das ist also wie ein lokaler Dateipfad zu demselben Verzeichnis, in dem Sie sich gerade befinden. |
| |
Wie auch immer, aus dem Protokoll heraus öffnen wir einfach die Datentabelle, und dann sind wir hier und wenden diese Formatänderung an, feste Dezimalzahl 10 Zeichen, zwei Dezimalstellen. |
| |
Die Tabelle...die Spaltenreferenz hier links ist eine Möglichkeit, eine Spalte anzusprechen. Es gibt verschiedene Möglichkeiten, aber dies ist eine sehr häufige Variante, die man beim Dickdarm sieht. Tabellenreferenz...Referenz...Referenz auf der linken Seite des Doppelpunkts und der Spaltenname auf der rechten Seite des Doppelpunkts. |
| |
Das ist also wieder direkt aus dem Protokoll. |
| |
JMP verwendet diese Methode im Protokoll, um die Datentabelle zu adressieren. Ich denke, es ist besser, das zu tun, worüber wir gesprochen haben. Es ist besser, beim Öffnen den JSL-Namen anzugeben und diesen JSL-Namen dann in Zukunft zu verwenden. Anstelle dieses Geschäfts vor dem Doppelpunkt habe ich es also in dt geändert. |
| |
Hier ist also derselbe Code, nur ... nur ein wenig korrigiert, und wenn ich ihn ausführe, hat er tatsächlich den richtigen Effekt. Es öffnet die Datentabelle und es |
| |
Ändert das Format auf zwei Dezimalstellen. Okay, also ja, jetzt, wo wir das haben, ist es ziemlich einfach |
| |
Ändern Sie alle 19 anderen Spalten, richtig. Da...hier ist NPN1, und dann kann ich einfach diese Zeile kopieren und alle ändern und sie noch 19 Mal schreiben. |
| |
Ja, das ist natürlich ineffizient, und das Tolle am Programmieren ist, dass man nicht mehr als einmal dasselbe tun muss, richtig. Das lässt sich also leichter aufrechterhalten, wenn wir ... wenn wir dies nur einmal schreiben, anstatt es 19-mal, 20-mal zu schreiben. |
| |
So machen wir das. Als Erstes erhalten wir eine Liste aller Spalten, die wir bearbeiten möchten. |
| |
Und wenn ich von einer Liste spreche, meine ich nicht nur eine allgemeine Art von Liste. Ich spreche von einer JSL-Liste, ich spreche von einer bestimmten Datenstruktur, die Sie verwenden, wenn Sie in JSL programmieren. |
| |
Eine Liste besteht lediglich aus ein paar Objekten, die in einem Container enthalten sind, und genau so verwenden wir sie. Hier sind also drei Möglichkeiten, eine Liste von Spaltenobjekten zu erstellen. |
| |
Die erste Möglichkeit besteht darin, dies manuell zu tun, indem man einfach alles eintippt. Wenn ich das also ausführen würde, |
| |
Drei Tabellenverweise ... drei Spaltenverweise, NPN1, PNP1, PNP2. |
| |
Beachten Sie die geschweiften Klammern sowohl in meinem Code als auch wenn ich mit der Maus über die CNames-Variable fahre. Wenn Sie diese geschweiften Variablen sehen, diese geschweiften Klammern, wissen Sie, dass Sie es mit der Liste in JSL zu tun haben. |
| |
Okay, das ist eine Möglichkeit, eine Liste zu erhalten. Lassen Sie uns über ein paar andere Möglichkeiten sprechen. Dies ist diejenige, die wir letztendlich für dieses Beispiel verwenden werden. Das ist |
| |
sagen: Hey, hol dir alle fortlaufenden Spalten in meiner aktuellen Datentabelle, also in der Datentabelle, die ich hier nenne, dt. Also Nachrichtenobjekt, erstellen Sie eine neue Liste. |
| |
Also lassen Sie uns dieses ausführen. |
| |
Und wenn ich jetzt mit der Maus über CNames fahre, werden Sie sehen, dass wir das wollen. Das ist die Liste aller 20, die wir operieren wollen. |
| |
Okay, und die letzte Möglichkeit besteht darin, dem Benutzer die Auswahl der Spalten in der Datentabelle zu überlassen. Das sieht so aus. Ich werde nur zwei auswählen. Wählen wir IVP und PNP4 aus, zwei ausgewählte Spalten. |
| |
Und wenn ich das ausführe, |
| |
Wir erhalten eine Liste mit nur diesen beiden ausgewählten Spalten aus der Datentabelle. |
| |
Also gut, wenn Sie diese Liste erhalten, besteht die nächste Aufgabe darin, diese Formatierungszeile auf jedes Element in der Liste anzuwenden. Dies wird als Schleife oder Iteration bezeichnet. |
| |
Hier ist also die alte Vorgehensweise. Es verwendet den for-Befehl in JMP. Das würden Sie vor JMP 16 tun, und ich habe es hier als Referenz für den Fall aufgeführt, dass Sie noch JMP 15 verwenden. Aber, |
| |
Wissen Sie, die Suche nach neuen Benutzern ist etwas kompliziert und erschreckend, daher gibt es eine viel kompaktere und lesbarere Sache, die Sie tun können, wenn Sie eine Liste in JMP 16 verwenden. Wenn ich eine Aktion für jedes Element einer Liste wiederholen möchte, kann ich dies für jeden Befehl verwenden. |
| |
Also gut, schauen wir es uns an und sehen, was es tut. Es werden drei Argumente benötigt, die Argumente werden durch Kommas getrennt, wir verarbeiten sie von rechts nach links. |
| |
Das letzte Argument ist der Formatbefehl, richtig, der das Format anwendet, und anstatt es für dt NPN1 zu tun, anstatt es für eine Spalte zu tun, habe ich hier einen Platzhalter eingefügt und ein Listenelement ausgewählt; Sie wählen, was Sie wollen. |
| |
Richtig, das ist nur ein Wort, ein Variablenname, Sie wählen ihn aus. Ich habe ein Listenelement ausgewählt. Das ist also unser Platzhalter und der Befehl, den wir für jedes Element der Liste ausführen möchten. Welche Liste? Diese Liste, okay. Das ist also unsere Liste, das ist die zweite |
| |
Streit. Und dann ist das erste Argument der Platzhalter, richtig. Es sagt uns, dass wir diesen Platzhalter verwenden, um die Werte der Dinge in der Liste zu speichern. |
| |
Es steht in geschweiften Klammern. Stellen Sie also sicher, dass Sie diese verwenden, wenn Sie diesen Code wiederverwenden. |
| |
So sieht das Ganze also aus: Anstelle von mehr als 20 Codezeilen habe ich nur drei Codezeilen, und dazu gehört auch das Öffnen der Datentabelle. |
| |
Abrufen einer Liste von Spaltennamen und Wiederholen dieser Aktion ... Wiederholen dieser Aktion für alle 20 fortlaufenden Spalten. Um das Ganze laufen zu lassen, sehen Sie, wie es aussieht. |
| |
Und da ist es. Nun jede dieser Spalten |
| |
Im Format werden zwei Dezimalstellen angezeigt. |
| |
Okay, das war ein sehr einfaches Beispiel für die Verwendung von „for every“, um etwas sehr Einfaches zu tun |
| |
auf einer Säule. |
| |
Lassen Sie mich Ihnen ein etwas interessanteres Beispiel zeigen. |
| |
Hier ist ein Beispiel, bei dem für denselben Datensatz für sc20 |
| |
Ich werde für jede Spalte ein Kontrolldiagramm erstellen und diese Kontrolldiagramme an ein Journal anhängen und das ganze verdammte Ding als PDF speichern, okay. Also |
| |
Es wird für jedes das Gleiche verwendet und es hat die gleichen ersten beiden Argumente, wissen Sie, das Listenelement ist das erste, ein Listenname für das zweite. Aber jetzt habe ich jede Menge Code als drittes Element ... als drittes Argument für jedes. |
| |
Auf geht's. Lassen Sie uns das gesamte Skript ausführen. |
| |
Öffnen, eine Reihe von Kontrolldiagrammen durchgehen und sie in einem Tagebuch zusammenfügen. Und jetzt, wenn ich auf meinen Desktop schaue, habe ich dieses Ding erstellt, mein report.pdf, das alle diese Kontrolldiagramme, Seite eins, und ihre Seitenumbrüche, um sie zu trennen, enthält. Also Seite eins, Seite zwei, Seite drei. |
| |
Sie können sich dieses Beispiel also auch in Ruhe ansehen. Es ist in den Präsentationsmaterialien enthalten. |
| |
Okay, und das ist unsere erste Technik, über die wir sprechen. Löschen wir das Protokoll für unsere nächste Technik. |
| |
Okay, ich extrahiere einen Wert aus einem Bericht. Dies passiert häufig in JSL. Sie führen eine Art Analyse durch, vielleicht ist es eine Verteilung, vielleicht ist es eine Regression, das müssen Sie tun |
| |
Holen Sie sich etwas, sammeln Sie etwas da raus. Vielleicht ist es ein Mittelwert oder Median. Vielleicht ist es ein Steigungskoeffizient aus der Regression oder ein P-Wert. |
| |
Das ist also unsere Aufgabe, und das Knifflige daran ist, dass Berichte eine hierarchische, stark verschachtelte Struktur haben und es ein wenig schwierig sein kann, diese Hierarchie und diesen Baum entlang zu wandern, um genau das zu finden, was wir wollen. Also werde ich dir einen Trick beibringen. |
| |
Der Trick besteht darin, dass wir wie üblich durch die Analyse zeigen und klicken und dann das Ding, das wir uns schnappen wollen, |
| |
Ich werde die Textfarbe in Rot ändern, nur eine kleine Formatierungsänderung. Und wenn wir dieses Skript dann im Protokoll speichern, lernen wir damit, wie wir mit diesem roten Element umgehen |
| |
in JSL. Also lasst uns das gemeinsam durchgehen. |
| |
Wieder zurück in JMP. |
| |
Ich öffne Big Class, die gute alte Big Class, und lass uns eine Verteilung für die Höhenspalte durchführen. |
| |
Alles klar, hier ist mein Verteilungsbericht, aus dem ich etwas extrahieren möchte. Nehmen wir an, es ist der Median, in diesem Fall ist der Median 63, und ich werde ihn in eine JSL-Variable einfügen, damit ich ihn später wiederverwenden kann, und Sie wissen schon, damit schreiben oder etwas darüber rechnen oder so etwas in der Art . |
| |
Hier ist der Trick, um herauszufinden, wie man die Nummer 63 anspricht. |
| |
Ändern Sie die Farbe oder, wissen Sie, die Schriftart oder was auch immer von dem Ding, das ich mir schnappen möchte. Wenn Sie das also noch nie gesehen haben, sollten Sie wissen, wie das geht. |
| |
In der Symbolleiste gibt es eine Schaltfläche für Eigenschaften. Ich glaube, das ist eine neue Schaltfläche in JMP 16. |
| |
Wenn Sie also die Eigenschaften für diesen Bericht aktivieren. |
| |
Wir können diesen Baum hinunterreisen und finden, was wir brauchen. Schauen Sie sich das also an. |
| |
Nummernfeld, rechts. Und beachten Sie, dass, wenn ich auf verschiedene Teile des Berichts klicke, die entsprechenden |
| |
Das Element bzw. die Art des Anzeigefelds, um das es sich handelt, wird im Eigenschaftenfenster hervorgehoben. |
| |
Okay, wir können also sehen, dass dieses Ding, das all diese Ergebnisse hat, ein Zahlenfeld mit all diesen Zahlen darin ist, und ich habe Ihnen gesagt, wir nehmen einfach dieses Ding und ich werde es ändern Textfarbe auf Rot ändern. |
| |
Genau so. |
| |
Jetzt schließe ich das Eigenschaftenfenster. |
| |
Da ist der Bericht, und senden wir dieses Skript an das erweiterte Protokoll. |
| |
Rotes Dreieck, Skript im Protokoll speichern. |
| |
Und jetzt sehe ich mir das Protokoll an. |
| |
Das ist der Teil, den wir wollen. Es gibt, wie Sie wissen, den Verteilungsbefehl mit dem Teil, der die Textfarbe dieses Medians und dieser anderen Statistiken in Rot ändert. Schauen wir uns das nun etwas genauer an. |
| |
Okay, hier ist dieser Code ... derselbe Code aus dem erweiterten Protokoll. Ich habe es einfach hierher kopiert und ein wenig formatiert, damit wir mehr darüber reden können, was wir brauchen. |
| |
Der ganze Grund, warum wir das gemacht haben, war, diesen Teil, den wir jetzt interpretieren werden, in Ordnung zu bringen. Es verwendet „Senden“, um Berichte zu erstellen, und innerhalb dessen auch „Versand“. |
| |
Und wir werden uns hier wirklich auf die vier zu versendenden Argumente konzentrieren. Wir brauchen die ersten drei, das vierte Argument ist die Änderung der Farbe, das ist wirklich nicht unser Interesse. Wir sind daran interessiert, die Anzeigebox anzusprechen, das Element, das wir wollen, okay. Also |
| |
Dieses erste Argument ist die Navigation. Es sagt uns, gehen Sie nach unten zu den Anzeigefeldern, das sind eigentlich umrandete Felder, gehen Sie nach unten zu den Umrissfeldern |
| |
Hier. Schauen wir uns also diesen Bericht an. Ich bin mir sicher, dass Ihnen in JMP aufgefallen ist, dass es in einem Bericht diese Verschachtelungsebenen gibt, richtig, und ich habe nur ... |
| |
eine äußere Umrissbox-Verteilung. Darin befindet sich die Höhe des Umrissrahmens und darin befinden sich Quantile des Umrissrahmens, und innerhalb dieses Quantils befindet sich das, was ich extrahieren muss. |
| |
Das ist es also, was es mir sagt. Es sagt mir, dass ich diesen Baum hinuntergehen soll. Ich brauchte nur die Höhe und die Quantile und das wird es für uns identifizieren. |
| |
Gut. Die nächsten beiden Argumente sagen uns etwas darüber ... dieses Element, das wir versuchen, das wir rot geworden sind. Es sagt uns ... das dritte sagt, was es ist, es ist ein Zahlenfeld, das haben wir in den Eigenschaften gesehen. |
| |
Und das zweite Argument verrät uns den Titel |
| |
der Nummer im Feld. Dieses hier ist leer. Dieser hat keinen Titel und das ist in Ordnung. Wir können ... wir können diese Informationen immer noch verwenden, um an diese Daten zu gelangen. Manchmal wird hier also ein Titel angezeigt, manchmal nicht. |
| |
Okay, jetzt, da wir das haben, werden wir diese Informationen nehmen und sie nutzen |
| |
um den Median zu extrahieren. |
| |
Hier ist der Code, der das macht. Es beginnt hier in Zeile 23 und geht bis Zeile 29. |
| |
Wir öffnen die Datentabelle erneut, |
| |
Benennen der Verteilung, Durchführen der kontinuierlichen Verteilung. |
| |
Sie werden feststellen, dass wir nichts von diesem Dispatch und Send to Report haben, weil wir es in unserem Produktionsskript nicht auf Rot setzen müssen. |
| |
Also ja, führen Sie die Verteilungsanalyse durch und benennen Sie die Plattform. |
| |
Das ist wichtig, Sie müssen ... Sie greifen auf die Berichtsebene zu. Sie extrahieren es mit dieser Zeile, also erstellen Sie rdist, dieses Berichtsobjekt. |
| |
Und dann ist dies die Grenze, an der die Magie geschieht. Hier packen wir das an |
| |
diesen Medianwert, indem wir ihn der JSL-Variablen mdn zuweisen, und für diesen werden wir ihn in das Protokoll schreiben. Deshalb werde ich Ihnen etwas mehr darüber erzählen, aber lassen Sie es uns zunächst einmal vollständig ausführen, damit Sie sehen, was es bewirkt. |
| |
Ich werde Zeile 23 ausführen, hoppla, machen wir es stattdessen so. Lassen Sie uns die Zeilen 23 bis 29 ausführen. |
| |
Habe die Verteilung durchgeführt. Es ist nicht rot und wir haben den Median extrahiert. Er ist jetzt in mdn gespeichert. Sie können sehen, dass der Wert für diese Variable 63 ist. |
| |
Der Median liegt bei 63. Perfekt. |
| |
In Ordnung. |
| |
Hier ist also die Zeile, aus der wir das extrahieren |
| |
der Medianwert, diese Zahl 63 aus dem Bericht. |
| |
Schauen wir uns das mal an. Ich werde das hier nur aufrufen, damit wir es können |
| |
beziehen sich darauf, wie wir, wie wir es tun. |
| |
Hier ist also diese Zeile. Es ist nur noch einmal organisiert, sodass wir jedes Element einzeln betrachten können. |
| |
63, der Medianwert aus dem Bericht. |
| |
So kommen wir dazu. |
| |
Dies nennt man subscript...subscriptinig. Wenn Sie die eckigen Klammern im JSL-Code sehen, bedeutet das, dass Sie ein Objekt abonnieren. Dieses Objekt ist eine Art Container, entweder Anzeigeboxen, |
| |
oft eine Liste. Auf diese Weise können Sie auch Listen subskribieren. Wir extrahieren also verschachtelte Elemente in diesem Berichtsobjekt. |
| |
Das erste, was wir tun werden, ist das Höhenumrissfeld. Erinnern Sie sich daran, und von dort aus gehen wir hinunter zum Quantilkasten, Sie erinnern sich daran. |
| |
Und jetzt sind wir am richtigen Ort. Wir müssen uns nur das schnappen, was wir wollen, was wir wollen, ist das Zahlenfeld, richtig, und weil es das nicht gab |
| |
Ein Titel, den wir verwenden konnten (das war das hier oben, kein Titel), stattdessen beziehen wir uns auf die Nummer. Es ist das erste Zahlenspaltenfeld in diesem Quantil-Umrissfeld. |
| |
Vielleicht schauen Sie sich das an und sagen sich: „Moment mal, da sind da Zahlen.“ Das ist doch auch ein Zahlenfeld, nicht wahr? Nein, das ist es eigentlich nicht. Es handelt sich um eine String-Col-Box, und denken Sie daran, Sie können all diese Dinge überprüfen, wenn Sie möchten. Das liegt wiederum an den Eigenschaften. |
| |
Und wenn ich hier reinklicke, |
| |
Zahlenspaltenfeld, Zeichenfolgenspaltenfeld, Zeichenfolgenspaltenfeld. Sehen Sie sie hier? String...String-Nummer, es ist also das erste Zahlenfeld. |
| |
Und das wird alle diese Zahlen erfassen. |
| |
Okay, das Allerletzte, was wir tun müssen, ist dieser Index. Wenn Sie auf diese Weise abonnieren, heißt es: Besorgen Sie mir das sechste Element ... 1, 2, 3, 4, 5, 6. Das ist der Median; es ist 63. Und wenn wir diese Zeile ausführen, wird der Bericht tiefgestellt. Es erfasst diesen Median, sodass wir ihn später wiederverwenden können. |
| |
Es gibt also eine Möglichkeit, etwas aus einem Bericht herauszuholen. Ich habe ein weiteres Beispiel, das ich in den Präsentationsmaterialien veröffentlichen werde |
| |
Ein Element, das einen Titel hat, und wie Sie sehen, können Sie dieses als Modell für Ihre eigene Arbeit verwenden, wenn Sie in diese Situation geraten. |
| |
Okay, das letzte, was wir besprechen werden, ist, wie Sie Eingaben von Ihrem Benutzer erhalten, der Person, die das Skript ausführt. |
| |
Und lassen Sie sie wählen, welche Datei sie analysieren möchten oder welche Spalte in der Datentabelle sie analysieren möchten. Das ist also vielleicht das häufigste Problem |
| |
etwas, das diese beginnenden Drehbuchautoren tun wollen. Wissen Sie, ich habe mein Skript so eingerichtet, dass es in einer Spalte etwas tut, und ich möchte anderen Menschen in meiner Organisation etwas geben |
| |
damit sie es selbst mit verschiedenen Daten machen können, richtig. Wenn Sie also...wenn Sie Ihre Skripte auf diese Weise verallgemeinern, damit Ihre Benutzer entweder eine Datei oder eine Spalte oder beides auswählen können, |
| |
Sie verallgemeinern Ihr Skript und steigern seinen Wert erheblich. Sie werden es an andere Personen in Ihrer Organisation weitergeben. Sie können Ihre Arbeit reproduzieren und dies schnell erledigen, ohne alle Klicks durchlaufen zu müssen. |
| |
Okay, in diesem Abschnitt handelt es sich weniger um eine Fallstudie als vielmehr um eine Wäscheliste. Wir gehen ... Ich zeige Ihnen drei Methoden, mit denen Sie Ihren Benutzern die Auswahl von Dateien ermöglichen können, und zwei Methoden, mit denen Sie ihnen die Auswahl von Spalten ermöglichen können. |
| |
Und wir beginnen mit den Methoden zum Auswählen von Dateien. Wie üblich beginnen wir damit, etwas im Protokoll zu tun und es dann zu kopieren. Hier ist ... so sieht es aus, wenn Sie Big Class öffnen. Sie erhalten dies einfach im Protokoll, öffnen Sie Big Class. |
| |
dt. In diesem Fall verwende ich dt, und wenn ich Big Class öffne, |
| |
Jetzt hat es ... dt zeigt auf Big Class, okay. Und dann würde ich mit meinem Produktionsskript weitermachen, richtig. |
| |
Hier ist die Sache: Damit Ihr Benutzer auswählen kann, welche Datei er möchte, müssen wir lediglich einen Weg finden, dt auf etwas anderes verweisen zu lassen. |
| |
Schreiben Sie den Rest Ihres Skripts, verwenden Sie dt, und am Anfang können Sie dies ändern. dt verweist nicht mehr nur auf Big Class; es wird auf etwas anderes hinweisen. |
| |
Okay, und das ist etwas anderes, das vom Benutzer bestimmt wird. |
| |
die Person, die das Skript ausführt. Okay, hier ist meiner Meinung nach das Einfachste, was Sie tun können: Sie können diese Zeile verwenden, anstatt eine Datentabelle zu öffnen. Wenn Sie dies am Anfang Ihres Skripts verwenden, um dt zuzuweisen, |
| |
Das bedeutet, dass JMP dieses Skript ausführt und diesen dt ausgibt |
| |
Name für die Datentabelle, die davor steht. |
| |
Aus Benutzersicht öffnen sie also eine Datentabelle. Ich werde hier sc20 öffnen und sc20 erstellen |
| |
meine aktuelle Datentabelle. Sehen Sie das hier oben? In diesem Fenster wird die aktuelle Datentabelle aufgeführt. |
| |
Wenn Ihr Benutzer also eine Datentabelle öffnet, dann das Skript ausführt und dann auf diese Zeile stößt, zeigt dt jetzt auf sc20. |
| |
Das ist also eine ziemlich wirkungsvolle Methode. Das Problem dabei ist, dass Ihr Benutzer genau wissen muss, was zu tun ist. Sie müssen wissen, dass sie zuerst die Datendatei öffnen und dann das Skript ausführen müssen. |
| |
Wir können etwas Robusteres machen. Wir können ihnen beim Ausführen des Skripts eine Dateiauswahl anzeigen, damit sie durch ihre Verzeichnisstruktur navigieren und die richtige Datei zum Öffnen finden können. |
| |
Es stellt sich heraus, dass dies ganz einfach zu bewerkstelligen ist. Was Sie tun, ist, dass Sie einfach den ganzen Kram hier weglassen, den Hinweis auf „Big Class“ weglassen und einfach „offen“ sagen, ohne jegliche Argumente. |
| |
Und wenn JSL versucht ... wenn JMP versucht, diese Zeile zu interpretieren, heißt es: Okay, der Benutzer möchte etwas öffnen, aber ich weiß nicht, was ... keine Ahnung, was. Zeigen wir ihnen eine Dateiauswahl, damit sie entscheiden können. |
| |
Also lasst uns...lasst uns das ausführen. dt = offen. |
| |
Führen Sie das Skript aus. Hier ist Ihre generische Dateiauswahl und von meinem Desktop aus öffne ich Iris. |
| |
Iris ist geöffnet und hat natürlich den dt-Namen. |
| |
alle JMP-Dateien, alle Dateien, richtig. Es könnte hier eine Menge Zeug angezeigt werden. |
| |
Wenn Sie also mehr Kontrolle brauchen, hoppla, wenn Sie mehr Kontrolle brauchen |
| |
Für die Entscheidungen, die Ihr Benutzer treffen wird, verwenden wir anstelle von „Open“ etwas namens „Pick File“. |
| |
„Datei auswählen“ ist ein Befehl, der verschiedene Optionen bietet. Ich verwende nur drei davon. |
| |
Gehen wir dieses Beispiel durch. Die ersten drei Argumente für „Datei auswählen“ sind also ein Titel, den Sie im Auswahlfenster sehen. |
| |
ein Verzeichnis, in dem die Auswahl startet, und ein Filter, der Ihnen sagt, welche Dateien Sie von dieser Auswahl aus öffnen können, richtig. Lassen Sie uns also diese ... diese Zeile, diesen Codeabschnitt, den Befehl „pick file“ ausführen und das Ergebnis in PF speichern. |
| |
Führen Sie das aus. |
| |
Okay, beachten Sie, dass das hier das Argument ist. Wählen Sie eine Excel-Datei aus. Das sehen wir hier oben im Fenstertitel. |
| |
Der Ordner, der Pfad im zweiten Argument, dort beginnt es. |
| |
Und der dritte Teil, der Dateifilter, der sagt: „Hey, zeige dem Benutzer nur zu öffnende Excel-Dateien“, das ist hier unten. Es ist mir nicht gestattet, Excel-Dateien zu verlassen. Ich bin auf Excel-Dateien beschränkt. |
| |
Sagen wir also Sandwiches und klicken auf „Öffnen“. |
| |
Nun, Moment mal, warum hat es sich nicht geöffnet? |
| |
Nun, lasst uns das überprüfen. PF entspricht der Auswahldatei. Was ist PF? Ah, PF ist der Weg zu dem, was wir öffnen wollen. Wir haben den Befehl zum Öffnen noch nicht ausgegeben. „Datei auswählen“ öffnet keine Datei, sondern wählt lediglich eine Datei aus. |
| |
Um den Kreis zu schließen, müssen wir Folgendes tun. Erstellen Sie unsere Tabellenreferenz, indem Sie die öffnen |
| |
PF-Variable, die auf die gewünschte Datei zeigt, die gewünschte Excel-Datei. |
| |
Da ist es. Dadurch wird die Sandwiches-Datentabelle geöffnet, und jetzt habe ich mein dt und kann mit meinem Skript fortfahren, genau wie ich es wollte. |
| |
Lassen Sie mich hier innehalten, um Ihnen etwas Wichtiges zu zeigen. Wählen Sie eine Datei aus, wenn Sie auf so etwas stoßen, nicht alle Argumente kennen und mehr erfahren möchten, ein paar Dinge. Zunächst einmal bekommen Sie ein wenig |
| |
Hover-Hilfe, ein kleines Popup mit einigen Informationen zur Syntax. Hier ist eine bessere Option. Klicken Sie im Skriptfenster mit der rechten Maustaste darauf. |
| |
und Sie können es im Skriptindex nachschlagen. Der Skriptindex ist ein sehr wichtiges Werkzeug für jeden JSL-Programmierer |
| |
Es enthält den Befehl, den Sie suchen. Es enthält eine Liste der Argumente, einige erläuternde Texte und, was wirklich wichtig ist, ein paar Beispiele, die Sie durchgehen und sehen können, was es bewirkt. Wenn ich also einfach dieses Beispiel hier ausführe, erhalte ich eine Auswahldatei. |
| |
Nun, es hat mich an einen Ort geschickt, an den ich nicht gehen möchte. |
| |
Lass es uns einfach schließen. |
| |
Und dann können wir experimentieren und uns diesen Code schnappen, diesen Code stehlen und ihn in unserem ... in unserem Skript verwenden, wenn wir wollen. |
| |
Okay, das ist der Skriptindex. Es ist auch über das Hilfemenü verfügbar. Scripting-Menü ... schauen Sie dort oben nach. |
| |
aktuelle Datentabelle, ein nacktes Öffnen oder eine Auswahldatei. Es gibt auch andere Möglichkeiten, aber das sind zunächst einmal drei gute. |
| |
Lassen Sie uns nun darüber sprechen, wie Sie Ihren Benutzern die Auswahl der Spalte ermöglichen, die sie bearbeiten möchten. |
| |
Hier bin ich ... Ich habe etwas aus dem Protokoll kopiert. Ich habe eine Datentabelle mit dem Namen „Preise“ geöffnet. und ich habe darauf eine Grafik erstellt, die den Preis von Äpfeln im Zeitverlauf zeigt. |
| |
Ich werde Ihnen nicht den Point-and-Click-Teil zeigen, sondern nur das Skript ausführen. Ich denke, Sie wissen bereits, wie man ein Skript aus dem erweiterten Protokoll extrahiert. Sehen wir uns also einfach an, was das Skript tut. Öffnet Preise und es gibt meine Grafik, Äpfel im Vergleich zum Datum, Apfelpreis im Zeitverlauf. |
| |
Schauen Sie sich also diese Datentabelle an, Preise, ja, es gibt Äpfel, aber ich habe auch alle diese Typen, richtig. Was also, wenn ich meinem Benutzer sagen möchte, welches Diagramm er sehen möchte und welche Spalte er grafisch sehen möchte? |
| |
Darum geht es in diesem Abschnitt: Ihren Benutzern die Wahl zu lassen. |
| |
Okay. |
| |
Daher besprechen wir zwei Methoden. Hier ist der erste. |
| |
Es handelt sich um die Bearbeitung von Spalten, die der Benutzer ausgewählt hat. |
| |
Und und das haben wir schon einmal gesehen, ich glaube, wir haben diese Syntax früher in unserer zweiten Fallstudie gesehen. Ja, so erstellen wir eine Liste |
| |
die die in der Datentabelle ausgewählten Spalten enthält. Lassen Sie mich also noch einmal auf die Datentabelle zurückkommen. |
| |
Ich werde vielleicht drei Spalten auswählen und |
| |
Lass uns laufen |
| |
Das. Eigentlich denke ich, ich sollte dt ausführen. Lassen Sie uns beides ausführen. |
| |
Hühnchen, Kaffee und Eier. |
| |
In Ordnung. |
| |
Also. |
| |
Welches möchte ich operieren? Nun, Sie wissen, wie man vorgeht und wie man mit einer Schleife über eine Liste iteriert, aber das machen wir nicht. Ich werde einfach eine Verknüpfung verwenden. Ich werde sagen, schau, |
| |
Wenn mein Benutzer mehr als eine ausgewählt hat, zeichnen Sie einfach die erste für ihn grafisch auf. Mein Benutzer hat also Hühnchen, Kaffee und Eier ausgewählt, bevor er das Skript ausführt. Ich möchte ihnen nur die Grafik über Hühnchen geben. |
| |
Richtig, das ist also die nächste Zeile hier. Da ist unser Abonnement. Wir abonnieren die CNames-Liste, um das erste Element zu erhalten. |
| |
Also lassen wir das laufen. |
| |
Jetzt habe ich diese schöne Variable, mein Col, |
| |
das das erste Element aus der Liste enthält, Chicken, die Spaltenreferenz mit dem Doppelpunkt. |
| |
Und jetzt können wir unseren Graph Builder ausführen. Jetzt können wir mit unserem Leben weitermachen. Der einzige Unterschied besteht darin, dass wir die Äpfel dort oben ersetzt haben. |
| |
das ist jetzt mein Col. Das ist die einzige Änderung, die wir vorgenommen haben. Wenn wir dies ausführen, erhalten wir eine Grafik über den Preis für Hühnchen. |
| |
Gut. |
| |
Okay, das ist eine Möglichkeit, aber wie wir bereits erwähnt haben, erfordert dies, dass der Benutzer weiß, was er tun muss. Dafür braucht man... |
| |
Die Methode erfordert, dass der Benutzer weiß, dass er die Datentabelle öffnen, diese auswählen und dann das Skript ausführen muss, und das ist etwas mühsam. Also |
| |
Stattdessen ist es etwas robuster, dem Benutzer zur Laufzeit einen Dialog zur Spaltenauswahl anzuzeigen. So sieht das aus. Die Syntax ist etwas komplex. Ich werde nicht auf alle Details eingehen, sondern auf hohem Niveau darüber sprechen. Wir öffnen die Datentabelle wie zuvor. |
| |
Wir verwenden diesen Befehl namens Spaltendialog |
| |
um dem Benutzer eine Auswahl...Spaltenauswahl anzuzeigen. |
| |
Auch hier gibt es viele Argumente. Ich verwende nur ein paar. Ich sage: „Hey, geben Sie mir eine Schaltfläche mit der Aufschrift „Ware auswählen“, und der Benutzer kann dafür maximal eine Spalte auswählen und muss mindestens eine auswählen.“ |
| |
Lassen Sie uns also dieses Skript ab Zeile 60 ausführen. |
| |
Eröffnungspreis, hier ist mein Dialog und sehen Sie, was für einen reichhaltigen Dialog ich für sehr wenig Code habe. Das ist der Vorteil dieses Kolumnendialogs, den wir verwenden. Ich wähle also „Kaffee“ aus und klicke auf „OK“. |
| |
Gut. Zurück zum Skript, wir haben gerade diese Zeile ausgeführt. |
| |
Und das Ergebnis unserer Wahl wird in dlg gespeichert. Werfen wir einen Blick darauf. |
| |
Okay, das ist etwas kompliziert. Es heißt, dlg sei eine Liste, siehe die geschweiften Klammern, und ich habe einige verschachtelte geschweifte Klammern, also ist es wie verschachtelte Listen. |
| |
Hier ist die Subskription, die Sie dorthin bringt. Ich werde nicht viel Zeit damit verbringen, dies zu erklären, aber Sie können diesen Code kopieren, wenn Sie ... wenn Sie dies tun müssen. Um also aus dem Dialog herauszukommen, genau den Teil zu bekommen, in dem es um Kaffee geht, eine Kolumne, die sich auf Kaffee bezieht, |
| |
Hier ist die Subskription, um meine Spalte zu erstellen. Führen Sie also diese Zeile aus. |
| |
Und jetzt enthält meine Spalte genau diesen Verweis auf die Kaffeespalte, und dieser ist identisch mit dem zuvor. Wir führen den Graph Builder mit aus |
| |
mein col, ersetzt es durch äpfel und so bekommen wir kaffee oder was auch immer der benutzer sonst gewählt hat. |
| |
Okay, das ist alles, was ich mit Ihnen teilen wollte. Zum Schluss möchte ich noch ein paar Ratschläge für alle geben, die auf diese Weise mit der JSL-Programmierung beginnen. |
| |
Der Ratschlag lautet: Lassen Sie JMP Ihren Code so weit wie möglich korrigieren. Und dafür ist das erweiterte Protokoll da: Den Code aus dem Protokoll stehlen. Das ist der größte Teil Ihres Drehbuchs, |
| |
Und dann müssen Sie nur noch das Bindegewebe schreiben, die Teile, die die Dinge zusammenhalten und daraus ein brauchbares Produktionsskript machen. Sie können diesen Code auch stehlen. Sie werden es aus dem Skriptindex stehlen, aus dieser Präsentation können Sie es auf jeden Fall stehlen. |
| |
Alle Materialien sind in dieser Präsentation enthalten und Sie können auch aus dem JSL-Kochbuch in der JMP User Community stehlen, einer fantastischen Ressource, die viele gängige JSL-Aufgaben enthält und Ihnen den Code liefert, den Sie zum Ausführen dieser Aufgaben benötigen. |
| |
Und ich möchte noch einmal betonen, dass Sie sich bei der Syntax nicht zu sehr aufregen sollten. Es ist einfach einfacher, sich den Code zu schnappen und ihn durch das zu ersetzen, was Sie brauchen. Sie werden nichts kaputt machen und mit mehr Erfahrung werden Sie die Feinheiten dieser Syntax erlernen. |
| |
Vielen Dank für eure Aufmerksamkeit. |