Lautsprecher
|
Transkript
|
| Jordan Hiller |
Hallo zusammen. Ich bin Jordan Hiller und dieses Gespräch ist Steal This Code! Drei Upgrades für Skripts aus dem erweiterten Protokoll. |
| |
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 großartiger Titel ist. Ich bin mir nicht sicher, ob es ein großartiger Geschäftsplan ist, Ihr Buch so zu benennen, aber trotzdem ist es sehr eingängig. |
| |
Warum also diesen Code stehlen? JMP möchte, dass Sie Code stehlen. Die Idee ist, dass Sie in JMP zeigen und klicken und Ihre Analyse durchführen. |
| |
und dieser 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 ungefähr 90 % Ihres Produktionsskripts. Du wirst es dir schnappen und wiederverwenden, damit du es kannst |
| |
Automatisieren Sie häufige Aufgaben und erledigen Sie dies mit einem Klick auf eine Schaltfläche, anstatt einer Abfolge von Point-and-Clicks. Das ist also das ganze Ziel hier, du wirst sparen |
| |
Skript aus dem erweiterten Protokoll und das sind die Knochen, das Gerüst Ihres Produktionsskripts. |
| |
Es bleiben noch etwa 10 % übrig, die Sie selbst schreiben müssen, und das ist unser Ziel für diesen Vortrag. Wir werden über etwas von diesem Bindegewebe sprechen, das Produktionsskripte zusammenhält. |
| |
In diesem Vortrag konzentriere ich mich mit Ihnen, wissen Sie, nicht so sehr auf das Wesentliche der Syntax, |
| |
viel mehr über das große Ganze, und das stimmt mit meiner Meinung überein, dass es eine gute Möglichkeit ist, JSL-Programmierung zu lernen. Es ist viel besser, vorhandenen Code zu nehmen und durch Beispiel 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 Skripthandbuch. |
| |
Und kopieren Sie es einfach und passen Sie es für Ihre Verwendung an. Sie müssen nicht alle Komplexitäten der Syntax kennen. Damit kommst du wirklich weit. Das Erlernen der Syntax kommt mit dem Sammeln von Erfahrung. |
| |
Wir werden also über drei Fallstudien zu Dingen sprechen, die Sie tun können, um Ihren Code aus dem erweiterten Protokoll zu verbessern, aber lassen Sie uns zunächst eine Überprüfung von JSL durchführen. Vielleicht ist es für einige von Ihnen eine Einführung in einige JSL-Grundlagen. |
| |
Das Wichtigste für Sie, wenn Sie JSL kennen, ist, dass alles ein Objekt ist. Alles was du |
| |
etwas tun möchten, ist ein Objekt, so dass Datentabellen und Spalten in Datentabellen und Plattformen wie die Verteilungsplattform, Graph Builder, Fit Y by X, |
| |
und die Berichte, die von diesen Plattformen kommen. Wenn Sie also Objekte haben, arbeiten Sie mit ihnen so, dass Sie ihnen Nachrichten senden. Objekte empfangen also Nachrichten. Hier ist ein wirklich einfaches Beispiel, das ich aus dem erweiterten Protokoll kopiert habe. |
| |
Öffnen Sie die Big Class-Datentabelle im Beispieldatenverzeichnis und führen Sie eine einfache Verteilungsanalyse durch, rechts. Und so sieht dieser Code aus, nur aus dem Protokoll kopiert. |
| |
Jetzt. |
| |
Was wir tun wollen, ist das erste, was wir tun wollen, ist die Datentabelle zu benennen. Geben Sie ihm einen Namen, und dafür habe ich den Code aus Zeile fünf hierher genommen und ihn verbessert. ich |
| |
fügte dieses bctable= vor dem Rest hinzu, vor dem offenen Teil der Anweisung, in Ordnung. Und was das bewirkt, ist, wenn wir diese Datentabelle öffnen, erstellen wir diesen Namen, bctable. Weißt du, ich habe bctable gewählt, du wirst dt in der Dokumentation sehen. Verwenden Sie, was Sie wollen, dies wird von Ihnen zugewiesen. |
| |
Lassen Sie uns dies ausführen, indem Sie es markieren und auf die Schaltfläche Ausführen klicken, Big Class öffnen und gleichzeitig den Namen bctable zuweisen. Nun, die Tugend, das zu tun, warum ist es wichtig, weil ich jetzt das 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. |
| |
So |
| |
Hier ist die nächste Zeile, aber Verteilungsbefehl, und ich habe das auch geändert. Und wissen Sie, vorher hier aus dem Protokoll, das ist ein nackter Verteilungsbefehl. Es hat nicht... |
| |
es zeigt nicht auf eine Datentabelle. Wenn Sie es auf diese Weise ausführen, führt JMP es nur für die Datentabelle aus, die den Fokus hat. |
| |
die aktuelle Datentabelle, die zufällig eine große Klasse ist, weil Sie sie kurz davor geöffnet haben, okay. Aber es ist immer gut, explizit zu sein. Es ist eine gute Idee, explizit anzugeben, welche Datentabelle Sie bearbeiten möchten, also führen wir sie auf diese Weise aus. |
| |
bctable und dann die Doppelpfeile und dann die Verteilungsbefehle. Das haben wir also hinzugefügt, bctable mit den Doppelpfeilen. |
| |
Und dies ist die Syntax zum Senden einer Nachricht. Wir senden also die Verteilungsnachricht rechts an die Datentabelle, nach der bctable benannt ist, links. Und Sie können sehen, dass das Big Class ist, wenn ich mit der Maus über bctable fahre. Also das Ganze laufen lassen, |
| |
wir bekommen den Verteilungsbericht |
| |
die wir wollten. |
| |
Hier ist ... wir können noch einen Schritt weiter gehen und müssen dies oft tun. Wir werden einen Namen für die Plattform erstellen, während wir sie betreiben, also |
| |
Hier ist eine Linie, die sowohl den Doppelpfeil als auch die Gleichen enthält, in Ordnung. Also, äh... lesen wir das mal von rechts nach links. Wir nehmen diese Verteilungsnachricht und senden sie an die bctable. |
| |
Und das Ergebnis von all dem, die Plattform, speichern wir in dieser Variable, die ich distplat nenne. |
| |
Lass uns das laufen lassen. |
| |
Alles klar, sieht gleich aus, aber der Unterschied ist, dass ich jetzt diese JSL-Variable distplat habe, die ich später in meinem Code verwenden kann. |
| |
Wofür würdest du es verwenden? Sie können es verwenden, um der Ausgabe rote Dreiecksoptionen hinzuzufügen, also lassen Sie uns das hier bringen ... |
| |
Bringen wir den Verteilungsbericht dorthin, wo Sie ihn sehen können. |
| |
Und wir nehmen das distplat-Objekt, das ist die... das ist die Distributionsplattform. |
| |
Sehen Sie, schweben Sie darüber und lassen Sie uns diese Zeile ausführen. Schalten Sie das normale Quintildiagramm in der Verteilungsplattform ein. Da ist es. |
| |
Okay. |
| |
Der letzte Schritt besteht darin, die Plattform zu nehmen, dieses Objekt hierher zu nehmen und zu |
| |
einen Bericht davon abrufen, 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 – auf Zahlen, Grafiken oder grafische Elemente im Bericht –, das brauchen Sie, okay. Dieses Objekt rdistplat. Also einfach noch einmal laufen lassen, rdistplat. |
| |
Ich habe es ausgeführt und Sie sehen nichts sichtbar, aber was passiert ist, ist, dass ich jetzt dieses Objekt habe, rdistplat. Darin steht, dass es sich um ein Anzeigefeld handelt, und später werden wir darüber sprechen, wie Sie hier im Bericht auf Nummern zugreifen können. |
| |
Okay, ich lösche mein Log |
| |
und starte mit unserem |
| |
Fallstudien. |
| |
Die erste Technik, die wir lernen werden, besteht darin, denselben Befehl immer und immer wieder für verschiedene Spalten in der Datentabelle zu wiederholen, indem über Spalten mit Schleifen iteriert wird, wobei für jeden Befehl das verwendet wird. So |
| |
Dies ist ein sehr häufiges Bedürfnis, manchmal ist es nur etwas Einfaches, das Sie tun müssen, wie das Ändern des Formats oder des Modellierungstyps einer Spalte. |
| |
Es könnte sehr komplex sein wie |
| |
Nehmen Sie eine ... Nehmen Sie eine Transformation der Spalte vor und führen Sie eine Kontrollkarte aus und machen Sie etwas mit dieser Kontrollkarte. Also ja, es skaliert; diese Technik skaliert. |
| |
So erreichen wir dies im JSL-Code. Wir zeigen und klicken zuerst, richtig, tun, was wir tun möchten. Tun Sie es für eine einzelne Spalte, und dann werden wir diesen Code mithilfe des erweiterten Protokolls abrufen. |
| |
und das ist dann das Skelett 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 zum Iterieren verwenden werden, ist for each und wurde in JMP 16 eingeführt, daher wird diese Technik in früheren Versionen von JMP nicht funktionieren. |
| |
Dies verwendet auch ein Konzept namens JSL-Listen, also werden wir auch ein wenig darüber sprechen. |
| |
Okay, ich fange an |
| |
Lassen Sie mich in JMP beim Startfenster beginnen. |
| |
Und ich werde... lassen Sie mich einfach das Protokoll überprüfen, um sicherzustellen, dass es sauber ist. Nein, ich muss eine Sache 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 ungefähr 20 |
| |
Spalten mit Daten. Diese haben viele, viele Nachkommastellen, zu viel Genauigkeit und ich möchte sie auf zwei Nachkommastellen abschneiden. Ä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 Spalteninfo, |
| |
und wir ändern das Anzeigeformat vom standardmäßigen Bestwert, um Dezimalstellen mit zwei Stellen festzulegen. |
| |
OK, und jetzt haben wir das für NPN1 gemacht, wir haben 19 andere Kolumnen, für die wir das auch gerne tun 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, richtig zu ändern. Um dies 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 einige Arbeit geleistet habe, und damit wir uns ein wenig näher damit befassen können. |
| |
Okay. |
| |
Also die ersten beiden Zeilen hier...drei Zeilen, das ist der Code aus dem Log. In Ordnung, als erstes öffnen wir die Datentabelle. |
| |
Und Sie haben vielleicht bemerkt, dass ich ein wenig bearbeitet habe, ich habe meinen langen Pfadnamen herausgeschnitten, meinen langen Verzeichnispfad zu dieser Datei. |
| |
Wenn Sie es auf diese Weise 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 öffnen wir nur die Datentabelle, und dann sind wir hier, wenden diese Formatänderung an, feste Dezimalstellen 10 Zeichen zwei Dezimalstellen. |
| |
Die Tabelle ... die Spaltenreferenz hier links ist eine Möglichkeit, eine Spalte zu adressieren. Es gibt verschiedene Möglichkeiten, aber dies ist eine sehr häufige, die Sie beim Doppelpunkt sehen werden. Tabelle ref...ref...reference auf der linken Seite des Doppelpunkts und der Spaltenname auf der rechten Seite des Doppelpunkts. |
| |
Das ist also wieder direkt aus dem Log. |
| |
JMP verwendet diesen Weg im Protokoll, um die Datentabelle zu adressieren. Ich denke, es ist besser, das zu tun, worüber wir gesprochen haben, es ist besser, den JSL-Namen beim Öffnen anzugeben und dann diesen JSL-Namen für die Zukunft zu verwenden. Anstelle dieser Sache vor dem Doppelpunkt habe ich sie in dt geändert. |
| |
Hier ist also derselbe Code, nur ... nur ein wenig korrigiert, und wenn ich ihn ausführe, ja, hat er den richtigen Effekt. Es öffnet die Datentabelle und es |
| |
ändert das Format auf zwei Dezimalstellen. Okay, ja, jetzt, wo wir das haben, ist es ziemlich einfach, |
| |
ändern Sie alle 19 anderen Spalten, rechts. Da ... hier ist NPN1, und dann kann ich diese Zeile einfach kopieren und alle ändern und sie noch 19 Mal schreiben. |
| |
Ja, das ist natürlich ineffizient, und eines der großartigen Dinge beim Programmieren ist, dass man das Gleiche nicht mehr als einmal machen muss, richtig. Das wird also einfacher zu pflegen, wenn wir ... wenn wir dies nur einmal schreiben, anstatt es 19-mal, 20-mal zu schreiben. |
| |
So machen wir das also. Als erstes erhalten wir eine Liste aller Spalten, die wir bearbeiten möchten. |
| |
Und wenn ich eine Liste sage, 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 ist nur ein paar Objekte, die in einem Container enthalten sind, und 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 Sie einfach alles eingeben. Also wenn ich das laufen lassen 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 diese CNames-Variable fahre. Wenn Sie diese geschweiften Variablen ... diese geschweiften Klammern sehen, 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, holen Sie sich alle fortlaufenden Spalten in meiner aktuellen Datentabelle, also in der Datentabelle, die ich hier nenne, dt. Also Nachrichtenobjekt, erstelle eine neue Liste. |
| |
Also lassen Sie uns dieses ausführen. |
| |
Und wenn ich jetzt über CNames fahre, sehen Sie, dass wir das wollen. Das ist die Liste aller 20, die wir bearbeiten wollen. |
| |
Okay, und die letzte Möglichkeit besteht darin, den Benutzer die Spalten in der Datentabelle auswählen zu lassen. Das sieht so aus. Ich wähle nur zwei aus. Wählen wir IVP und PNP4 aus, zwei ausgewählte Spalten. |
| |
Und wenn ich das laufe, |
| |
Wir erhalten eine Liste mit nur diesen beiden ausgewählten Spalten aus der Datentabelle. |
| |
In Ordnung, Sie erhalten diese Liste, der nächste Job besteht darin, diese Formatierungszeile auf jedes der Elemente in der Liste anzuwenden, und das wird als Schleifen oder Iterieren bezeichnet. |
| |
Also hier ist der alte Weg, es zu tun. Es verwendet den for-Befehl in JMP. Das ist, was Sie vor JMP 16 tun würden, und ich habe es hier als Referenz für den Fall, dass Sie noch JMP 15 verwenden, eingefügt. Aber, |
| |
Wissen Sie, es ist ein bisschen kompliziert und verbietet, nach neuen Benutzern zu suchen. Es gibt also 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. |
| |
In Ordnung, und lassen Sie uns es anschauen und sehen, was es tut. Es braucht drei Argumente, die Argumente werden durch Kommas getrennt, wir nehmen sie von rechts nach links. |
| |
Das letzte Argument ist, dass der Formatbefehl rechts 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; du wählst was du willst. |
| |
Richtig, das ist nur ein Wort, ein Variablenname, Sie wählen ihn aus. Ich habe ein Listenelement gewählt. Das ist also unser Platzhalter, und dies ist 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 halten. |
| |
Es ist in geschweiften Klammern, also stellen Sie sicher, dass Sie es verwenden, wenn Sie diesen Code wiederverwenden. |
| |
So sieht das Ganze also aus, statt 20 plus Zeilen Code habe ich nur drei Zeilen Code, und dazu gehört das Öffnen der Datentabelle, |
| |
eine Liste von Spaltennamen abrufen und dann wiederholen ... diese Aktion für alle 20 fortlaufenden Spalten wiederholen. Um das Ganze laufen zu lassen, o Sie sehen, wie es aussieht. |
| |
Und da ist es. Nun jede dieser Spalten |
| |
hat zwei Dezimalstellen, die im Format angezeigt werden. |
| |
Okay, das war ein sehr einfaches Beispiel für die Verwendung von for each, 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 den gleichen Datensatz für sc20 |
| |
Ich werde für jede Spalte eine Kontrollkarte erstellen und diese Kontrollkarten an ein Tagebuch anhängen und das ganze verdammte Ding als PDF speichern, okay. So |
| |
es verwendet für jedes das gleiche, und es hat die gleichen ersten beiden Argumente, wissen Sie, Listenelement ist das erste, ein Listenname für das zweite. Aber jetzt habe ich viel Code als drittes Element ... als drittes Argument für jedes. |
| |
Auf geht's. Lassen Sie uns dieses ganze Skript ausführen. |
| |
Öffnen, Ausführen einer Reihe von Regelkarten, Zusammenfügen in einem Tagebuch. Und jetzt, wenn ich auf meinen Desktop schaue, habe ich dieses Ding erstellt, meine report.pdf, die all diese Kontrolldiagramme, Seite eins, und ihre Seitenumbrüche enthält, um sie zu trennen. 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. Lassen Sie uns das Protokoll für unsere nächste Technik löschen. |
| |
Okay, einen Wert aus einem Bericht extrahieren. Dies geschieht häufig in JSL. Sie machen eine Art Analyse, vielleicht ist es eine Verteilung, vielleicht ist es eine Regression, Sie müssen es tun |
| |
etwas holen, etwas sammeln. 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 Schwierige daran ist, dass Berichte eine hierarchische, stark verschachtelte Struktur haben, und es kann ein bisschen schwierig sein, diese Hierarchie nach unten zu durchlaufen, diesen Baum entlang zu gehen, um genau das zu finden, was wir suchen. Also werde ich dir einen Trick beibringen. |
| |
Der Trick ist, dass wir uns wie üblich durch die Analyse zeigen und klicken und dann das Ding, das wir greifen möchten, |
| |
Ich werde die Textfarbe in Rot ändern, nur eine geringfügige Formatierungsänderung. Und dann, wenn wir dieses Skript im Protokoll speichern, verwenden wir es, um zu lernen, wie man dieses rote Element anspricht |
| |
in JSL. Lassen Sie uns das also gemeinsam durchgehen. |
| |
Zurück in JMP. |
| |
Ich öffne Big Class, die gute alte Big Class und lass uns eine Verteilung auf der Höhenspalte durchführen. |
| |
In Ordnung, 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 das in eine JSL-Variable stecken, damit ich es später wiederverwenden kann, und du weißt, dass du damit schreibst oder etwas rechner oder so ähnlich . |
| |
Hier ist der Trick, um herauszufinden, wie Sie diese Nummer 63 ansprechen können. |
| |
Ändern Sie die Farbe oder, wissen Sie, die Schriftart oder was auch immer von diesem Ding, das ich greifen möchte. Wie das geht, wenn Sie dies noch nie gesehen haben, ist es wert, dies zu wissen. |
| |
Es gibt eine Schaltfläche in der Symbolleiste 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. Also schau dir das an. |
| |
Nummernspalte rechts. Und beachten Sie, dass, wenn ich auf verschiedene Teile des Berichts klicke, die entsprechenden |
| |
Das Element, die Art des Anzeigefelds, wird im Eigenschaftenfenster hervorgehoben. |
| |
Okay, wir können also sehen, dass dieses Ding, das all diese Ergebnisse hat, ein Zahlenfeld mit all diesen Zahlen ist, und ich habe dir gesagt, wir nehmen dieses Ding einfach und ich werde es ändern Textfarbe auf Rot. |
| |
Genau so. |
| |
Jetzt schließe ich das Eigenschaftenfenster. |
| |
Da ist der Bericht, und wir senden dieses Skript an das erweiterte Protokoll. |
| |
Rotes Dreieck, Skript im Protokoll speichern. |
| |
Und jetzt sehen Sie sich dieses Protokoll an. |
| |
Dies ist der Teil, den wir wollen. Es hat, wissen Sie, den Verteilungsbefehl mit dem Teil, der die Textfarbe dieses Medians und dieser anderen Statistiken in Rot ändert. Schauen wir uns das also jetzt etwas genauer an. |
| |
Okay, hier ist also dieser Code...derselbe Code aus dem erweiterten Protokoll. Ich habe es einfach hierher kopiert und ein wenig formatiert, damit wir mehr darüber sprechen können, was wir brauchen. |
| |
Der ganze Grund, warum wir das gemacht haben, war also, diesen Teil zu bekommen, den wir jetzt interpretieren werden, in Ordnung. Es verwendet Senden, um zu berichten und darin zu versenden. |
| |
Und wir werden uns hier wirklich auf die vier Argumente für den Versand konzentrieren. Wir brauchen die ersten drei, das vierte Argument ist die Änderung der Farbe, das interessiert uns wirklich nicht. Wir sind daran interessiert, die Anzeigebox anzusprechen, das Element, das wir wollen, okay. So |
| |
Dieses erste Argument ist die Navigation. Es sagt uns, gehen Sie nach unten zu den Anzeigefeldern, dies sind tatsächlich umrandete Felder, gehen Sie nach unten zu den Umrandungsfeldern |
| |
Hier. Schauen wir uns also diesen Bericht an. Auch hier bin ich sicher, dass Sie in JMP bemerkt haben, dass Sie in einem Bericht diese Verschachtelungsebenen haben, richtig, und ich habe nur eine ... |
| |
eine äußere Umrisskastenverteilung. Darin befindet sich eine Umriss-Box-Höhe und darin sind Umriss-Box-Quantile, und innerhalb dieser Quantile befindet sich das Zeug, das ich extrahieren muss. |
| |
Das sagt es mir also. 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 ... der dritte sagt, was es ist, es ist ein Zahlenfeld, das haben wir in den Eigenschaften gesehen. |
| |
Und das zweite Argument sagt uns den Titel |
| |
dieser Nummer col. Dieser 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, daher sehen Sie hier manchmal einen Titel, manchmal nicht. |
| |
Okay, jetzt, da wir das haben, werden wir diese Informationen nehmen und sie verwenden |
| |
um den Median zu extrahieren. |
| |
Hier ist der Code, der es tut. Es beginnt hier auf Linie 23 und geht bis Linie 29. |
| |
Wir öffnen die Datentabelle wieder, |
| |
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 rot färben müssen. |
| |
Also ja, führen Sie die Verteilungsanalyse durch, benennen Sie die Plattform. |
| |
Dies ist wichtig, Sie müssen ... Sie greifen auf die Berichtsebene zu. Sie extrahieren es mit dieser Zeile, sodass rdist, dieses Berichtsobjekt, erstellt wird. |
| |
Und dann ist dies die Linie, an der die Magie passiert. Hier greifen wir das auf |
| |
diesen Medianwert, weisen ihn der JSL-Variablen mdn zu, und für diesen schreiben wir ihn in das Protokoll. Ich werde Ihnen also ein wenig mehr darüber erzählen, aber zuerst lassen Sie uns es einmal insgesamt ausführen, damit Sie sehen, was es tut. |
| |
Ich werde Linie 23 laufen lassen, hoppla, lass es uns stattdessen so machen. Lassen Sie uns die Zeile ... 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. |
| |
Median ist 63. Perfekt. |
| |
In Ordung. |
| |
Hier ist also die Zeile, in der wir die extrahieren |
| |
der Medianwert, diese Zahl 63 aus dem Bericht. |
| |
Schauen wir uns das an. Ich rufe das einfach hier an, damit wir es können |
| |
beziehen sich darauf, wie wir, wie wir es tun. |
| |
Also hier ist diese Zeile. Es ist nur noch einmal so organisiert, dass wir jedes Element einzeln betrachten können. |
| |
63, der Medianwert aus dem Bericht. |
| |
So kommen wir dazu. |
| |
Dies wird als tiefgestellt ... tiefgestellt bezeichnet. Wenn Sie die eckigen Klammern im JSL-Code sehen, bedeutet dies, dass Sie ein Objekt subskribieren. Dieses Objekt ist eine Art Container, entweder Anzeigeboxen, |
| |
oft eine Liste. Auf diese Weise können Sie auch Listen indizieren. Wir extrahieren also verschachtelte Elemente in diesem Berichtsobjekt. |
| |
Das erste, was wir tun werden, ist das Feld für die Höhenkontur. Du erinnerst dich daran, und dann gehen wir runter zur Quantilen-Box, du erinnerst dich daran. |
| |
Und jetzt sind wir am richtigen Ort. Wir müssen uns nur schnappen, was wir wollen, was wir wollen, ist die Nummernspalte, richtig, und weil sie keine hatte |
| |
einen Titel, den wir verwenden könnten (das war das hier oben, kein Titel), stattdessen beziehen wir uns darauf mit Nummern. Es ist das erste Zahlenspaltenfeld in diesem Quantilumrissfeld. |
| |
Schauen Sie sich das an und sagen Sie sich: Moment mal, hier sind Zahlen. Das ist auch eine Nummernbox, oder? Nein, ist es eigentlich nicht. Es ist ein String-Col-Feld, und denken Sie daran, Sie können all das Zeug überprüfen, wenn Sie möchten. Das ist wieder von den Eigenschaften. |
| |
Und wenn ich hier reinklicke, |
| |
Nummernspaltenbox, Stringspaltenbox, Stringspaltenbox. Siehst du sie hier? String...string Nummer, also das erste Nummernspaltenfeld. |
| |
Und das wird all diese Zahlen erfassen. |
| |
Okay, das Letzte, was wir tun müssen, ist dieses tiefgestellte Skript. Auf diese Weise zu abonnieren sagt, hol 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, damit wir ihn später wiederverwenden können. |
| |
Es gibt also eine Anleitung, wie man etwas aus einem Bericht herausholt. Ich habe ein weiteres Beispiel, das ich in den Präsentationsmaterialien teilen werde, die haben werden |
| |
ein Element, das einen Titel hat und Sie sehen können, können Sie das als Vorlage für Ihre eigene Arbeit verwenden, wenn Sie in diese Situation geraten. |
| |
In Ordnung, 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 oder sogar welche Spalte in der Datentabelle sie analysieren möchten. Also das ist vielleicht das gebräuchlichste |
| |
etwas, das die beginnenden Scripter tun wollen. Wissen Sie, ich habe mein Skript so eingerichtet, dass es etwas in einer Spalte macht, und ich möchte anderen Leuten in meiner Organisation etwas geben |
| |
sie es selbst mit verschiedenen Daten machen zu lassen, richtig. Wenn Sie also Ihre Skripte so verallgemeinern, dass 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 replizieren und schnell erledigen, ohne alle Klicks ausführen zu müssen. |
| |
Okay, in diesem Abschnitt handelt es sich weniger um eine Fallstudie als um eine Wäscheliste. Wir werden... Ich zeige Ihnen drei Methoden, mit denen Sie Ihre Benutzer Dateien auswählen lassen können, und zwei Methoden, mit denen Sie Spalten auswählen 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. So sieht es aus, wenn Sie Big Class öffnen. Sie erhalten dies einfach im Protokoll, öffnen Sie Big Class. |
| |
dt. Ich verwende in diesem Fall 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. |
| |
Damit Ihr Benutzer die gewünschte Datei auswählen kann, müssen wir nur einen Weg finden, dt auf etwas anderes zeigen zu lassen. |
| |
Schreiben Sie den Rest Ihres Skripts, verwenden Sie dt, und dann können Sie dies am Anfang ändern. dt zeigt nicht mehr nur auf Big Class; es wird auf etwas anderes hinweisen. |
| |
Okay, und das wird vom Benutzer bestimmt, |
| |
die Person, die das Skript ausführt. Okay, hier ist das Einfachste, was Sie tun können, ich denke, Sie 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ühren wird und dieses dt zurückgibt |
| |
Name zu der Datentabelle, die davor steht. |
| |
Aus der Benutzerperspektive öffnen sie also eine Datentabelle, ich werde hier sc20 öffnen und sc20 erstellen |
| |
meine aktuelle Datentabelle. Siehst du das hier oben? Das, was in diesem Fenster aufgeführt ist, ist die aktuelle Datentabelle. |
| |
Wenn Ihr Benutzer eine Datentabelle öffnet und dann das Skript ausführt und dann auf diese Zeile stößt, zeigt dt jetzt auf sc20. |
| |
Das ist also eine ziemlich mächtige Methode. Das Problem dabei ist ... es erfordert, dass Ihr Benutzer genau weiß, 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 kinderleicht ist. Was Sie tun, ist, dass Sie einfach all das Zeug hier loswerden, Sie den Hinweis auf Big Class loswerden und einfach ohne jegliche Argumente offen sagen. |
| |
Und wenn JSL versucht ... wenn JMP versucht, diese Zeile zu interpretieren, sagt es, okay, der Benutzer möchte etwas öffnen, aber ich habe keine Ahnung was ... keine Ahnung was. Lassen Sie uns ihnen eine Dateiauswahl zeigen, damit sie sich entscheiden können. |
| |
Also lass uns... lass uns das laufen lassen. dt = offen. |
| |
Führen Sie das Skript aus. Hier ist Ihre allgemeine Dateiauswahl und von meinem Desktop aus werde ich Iris öffnen. |
| |
Iris ist offen und trägt natürlich den dt-Namen. |
| |
alle JMP-Dateien, alle Dateien, richtig. Es könnte eine Menge Zeug hier drinnen zeigen. |
| |
Also, wenn du mehr Kontrolle brauchst, oops, wenn du mehr Kontrolle darüber brauchst |
| |
die Entscheidungen, die Ihr Benutzer treffen wird, statt open verwenden wir etwas namens pick file. |
| |
Datei auswählen ist ein Befehl, der verschiedene Optionen hat. Ich benutze nur drei davon. |
| |
Gehen wir dieses Beispiel durch. Die ersten drei Argumente für pick file sind also ein Titel, der im Auswahlfenster angezeigt wird. |
| |
ein Verzeichnis, in dem die Auswahl gestartet wird, und ein Filter, der Ihnen mitteilt, welche Dateien Sie von dieser Auswahl aus öffnen können. 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 die Excel-Datei aus. Das sehen wir hier oben im Fenstertitel. |
| |
Der Ordner, der Pfad im zweiten Argument, dort beginnt es. |
| |
Und das dritte Bit, der Dateifilter, der sagt, hey, zeige dem Benutzer nur Excel-Dateien zum Öffnen, das ist hier unten. Ich darf nicht von Excel-Dateien weg wechseln. Ich bin auf Excel-Dateien beschränkt. |
| |
Sagen wir Sandwiches und klicken Sie auf Öffnen. |
| |
Nun, warte eine Minute, warum wurde es nicht geöffnet? |
| |
Lassen Sie 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 Open-Befehl noch nicht ausgegeben. Datei auswählen öffnet keine Datei, sondern wählt nur eine Datei aus. |
| |
Um den Kreis zu schließen, müssen wir Folgendes tun. Erstellen Sie unsere Tabellenreferenz, indem Sie die |
| |
PF-Variable, die auf die gewünschte Datei zeigt, die gewünschte Excel-Datei. |
| |
Da ist es. Das öffnet die Sandwiches-Datentabelle, und jetzt habe ich mein dt und bin bereit, mit meinem Skript fortzufahren, genau wie ich es wollte. |
| |
Lassen Sie mich hier innehalten, um Ihnen etwas Wichtiges zu zeigen. Wählen Sie Datei, wenn Sie auf so etwas stoßen und nicht alle Argumente kennen und mehr erfahren möchten, ein paar Dinge. Zuerst bekommst du ein wenig |
| |
Hover-Hilfe, ein kleines Popup mit Informationen zur Syntax. Hier ist eine bessere Option. Klicken Sie mit der rechten Maustaste darauf im Skriptfenster, |
| |
und Sie können es im Scripting-Index nachschlagen. Der Scripting-Index ist ein sehr wichtiges Werkzeug für jeden JSL-Programmierer, und |
| |
es hat den Befehl, den Sie suchen. Es enthält die Liste der Argumente, einige erklärende Texte und, was wirklich wichtig ist, es enthält ein paar Beispiele, die Sie durchgehen und sehen können, was es bewirkt. Wenn ich also nur dieses Beispiel hier ausführe, bekomme ich eine Auswahldatei. |
| |
Nun, es hat mich irgendwohin geschickt, wo ich nicht hin will. |
| |
Schließen wir es einfach. |
| |
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 Scripting-Index. Es ist auch über das Hilfemenü verfügbar. Scripting-Menü ... schau dir das Zeug dort oben an. |
| |
aktuelle Datentabelle, ein nacktes Öffnen oder eine Auswahldatei. Es gibt auch andere Möglichkeiten, aber das sind drei gute für den Anfang. |
| |
Lassen Sie uns nun darüber sprechen, wie Sie Ihren Benutzern die Wahl lassen, welche Spalte sie bearbeiten möchten. |
| |
Hier bin ich... Ich habe etwas aus dem Log kopiert. Ich habe eine Datentabelle namens Preise geöffnet. und ich habe eine Grafik erstellt, die den Preis von Äpfeln im Laufe der Zeit zeigt. |
| |
Ich werde Ihnen nicht den Point-and-Click-Teil zeigen, sondern nur das Skript ausführen. Ich denke, Sie wissen bereits, wie Sie ein Skript aus dem erweiterten Protokoll extrahieren, also lassen Sie uns einfach sehen, was das Skript macht. Öffnet Preise und da ist mein Diagramm, Äpfel gegen Datum, Preis von Äpfeln im Laufe der Zeit. |
| |
Schauen Sie sich diese Datentabelle an, Preise, ja, es gibt Äpfel, aber ich habe auch all diese Typen, richtig. Was ist also, wenn ich meinen Benutzer sagen lassen möchte, welche Grafik er sehen möchte, welche Spalte er grafisch sehen möchte. |
| |
Darum geht es in diesem Abschnitt: Lassen Sie Ihre Benutzer wählen. |
| |
Okay. |
| |
Wir werden also zwei Methoden besprechen. Hier ist der erste. |
| |
Es arbeitet mit Spalten, die der Benutzer ausgewählt hat. |
| |
Und wir haben dies schon einmal gesehen, wir haben diese Syntax früher, glaube ich, in unserer zweiten Fallstudie gesehen. Ja, so erstellen wir eine Liste |
| |
das die Spalten enthält, die in der Datentabelle ausgewählt sind. Lassen Sie mich also zu dieser Datentabelle zurückkehren. |
| |
Ich werde auswählen, vielleicht drei Spalten und |
| |
lass uns laufen |
| |
Dies. Eigentlich denke ich sollte ich dt laufen lassen. Lassen Sie uns beide ausführen. |
| |
Hühnchen, Kaffee und Eier. |
| |
Gut. |
| |
So. |
| |
Welche möchte ich operieren? Nun, Sie wissen, wie man arbeitet, wie man mit einer Schleife über eine Liste iteriert, aber das tun wir nicht. Ich werde nur eine Verknüpfung verwenden. Ich werde sagen, schau, |
| |
Wenn mein Benutzer mehr als einen ausgewählt hat, einfach den ersten für ihn grafisch darstellen. Mein Benutzer hat also Hühnchen, Kaffee und Eier ausgewählt, bevor er das Skript ausgeführt hat. Ich möchte ihnen nur die Grafik zu Hühnchen geben. |
| |
Richtig, das ist also die nächste Zeile hier. Da ist unser Abo. Wir subskribieren die CNames-Liste, um das erste Element zu erhalten. |
| |
Also führen wir das durch. |
| |
Jetzt habe ich diese schöne Variable, mein Col, |
| |
das hat das erste Element aus der Liste, Huhn, 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 ist, dass wir hier oben die Äpfel ersetzt haben, |
| |
das ist jetzt mein col. Das ist die einzige Änderung, die wir vorgenommen haben, und deshalb erhalten wir eine Grafik des Hühnchenpreises. |
| |
Gut. |
| |
Okay, das ist eine Möglichkeit, aber wie bereits erwähnt, erfordert dies, dass der Benutzer weiß, was er zu tun hat. Dafür braucht man... |
| |
-Methode erfordert, dass der Benutzer wissen muss, dass er die Datentabelle öffnen, diese auswählen und dann das Skript ausführen muss, und das ist ein bisschen mühsam. So |
| |
Stattdessen ist es etwas robuster, dem Benutzer zur Laufzeit einen Spaltenauswahldialog 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 benutze nur ein Paar. Was ich tue, ist, dass ich sage, hey, gib mir eine Schaltfläche mit der Aufschrift Commodity auswählen, und der Benutzer kann maximal eine Spalte dafür auswählen und muss mindestens eine auswählen. |
| |
Lassen Sie uns dieses Skript also ab Zeile 60 ausführen. |
| |
Eröffnungspreis, hier ist mein Dialog und schau, was für ein reichhaltiger Dialog ich für sehr wenig Code habe. Das ist der Vorteil dieses Kolumnendialogs, den wir verwenden. Also trinke ich Kaffee als meine Auswahl 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. Schauen wir uns das an. |
| |
Alles klar, das ist etwas kompliziert. Es sagt, dass dlg eine Liste ist, siehe die geschweiften Klammern, und ich habe einige verschachtelte geschweifte Klammern, also ist es wie verschachtelte Listen. |
| |
Hier ist das Abonnement, das 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 vom Dialog zu kommen, um nur den Teil zu erhalten, der Kaffee sagt, einen Spaltenbezug zu Kaffee dort, |
| |
Hier ist die Subskription, um meinen Col zu erstellen, also führen Sie diese Zeile aus. |
| |
Und jetzt enthält mein Col genau diesen Hinweis auf die Kaffeekolumne, und dieser ist identisch mit zuvor. Wir führen den Graph Builder mit |
| |
mein col, ersetzt es durch äpfel und so bekommen wir kaffee oder was auch immer der benutzer gewählt hat. |
| |
Okay, das ist alles, was ich mit dir teilen wollte. Ich schließe nur mit einem kleinen Ratschlag für jeden, der auf diese Weise mit der JSL-Programmierung beginnt. |
| |
Der Rat ist, wissen Sie, JMP Ihren Code korrigieren zu lassen, so viel wie möglich. Und dafür ist das erweiterte Protokoll da, diesen Code aus dem Protokoll zu stehlen. Das ist der größte Teil Ihres Skripts, |
| |
Und dann muss man nur noch das Bindegewebe schreiben, die Teile, die das Zeug zusammenhalten und daraus ein brauchbares Produktionsskript machen. Sie können diesen Code auch stehlen. Sie werden es aus dem Scripting-Index stehlen, Sie können es sicherlich aus dieser Präsentation stehlen. |
| |
Alle Materialien sind in dieser Präsentation enthalten und Sie können auch aus dem JSL-Kochbuch in der JMP-Benutzergemeinschaft stehlen, einer fantastischen Ressource, die viele gängige JSL-Aufgaben enthält und Ihnen den Code liefert, den Sie für diese Aufgaben benötigen. |
| |
Und noch einmal, ich werde betonen, dass Sie die Syntax nicht zu sehr ins Schwitzen bringen. Es ist einfach einfacher, sich den Code zu schnappen und zu ersetzen, was Sie brauchen. Sie werden nichts kaputt machen und Sie werden die Feinheiten dieser Syntax mit mehr Erfahrung lernen. |
| |
Vielen Dank für Ihre Aufmerksamkeit. |