
In dieser Demonstration sehen wir uns an, wie man bestimmte Zeilen auswählt und mit dem Befehl „subset“ (interaktiv im Menü „Tabellen“) eine Teilmenge der Datentabelle extrahiert. Im Kursjournal klicke ich im Abschnitt „Skihüttentemperaturdaten“ auf „Skihüttentemperaturdaten“. Die Datentabelle ist zwar umfangreich, aber recht kurz. Unser Szenario: Wir haben ein Skigebiet mit einer Wetterstation, die stündlich die Temperatur aufzeichnet und in einer Datei speichert. Jede Beobachtung in der Datei enthält das Datum und die stündlichen Temperaturwerte. Die Uhrzeit ist morgens, also die Temperatur morgens. Nehmen wir nun an, wir planen, die Beschneiungsanlage einzuschalten, wenn die Temperatur unter minus Grad Celsius fällt, da es bei dieser Temperatur möglicherweise zu kalt zum Schneien ist. Wir möchten daher unsere historischen Daten analysieren und die Tage ermitteln, an denen wir die Beschneiungsanlage eingesetzt hätten. Vielleicht versuchen wir, den Einbau einer weiteren Anlage oder den Austausch der bestehenden zu rechtfertigen. Dazu ein paar Punkte. Erstens wurde diese Temperatur in Fahrenheit und nicht in Celsius gemessen. Zweitens verwenden wir nur eine kleine Teilmenge der Daten. Diese sind zwar in Tagesreihenfolge angegeben, entsprechen aber unserer bewährten Vorgehensweise bei der Arbeit mit großen Datensätzen. Versuchen Sie, eine repräsentative Stichprobe von Beobachtungen für die Entwicklung Ihres Skripts zu erhalten, um dieses anhand einer kleineren Teilmenge entwickeln und testen zu können. Auch hier gilt, dass diese alle zu erwartenden Probleme in den Daten abbildet. Anschließend können Sie es am gesamten Datensatz testen. In diesem Beispiel ist dies hoffentlich repräsentativ, da wir nur Daten einer einzigen Woche verwendet haben. Zweitens haben wir Temperaturen in Fahrenheit gemessen, aber unser Grenzwert liegt bei minus Grad Celsius. Obwohl wir natürlich minus Grad Celsius in Fahrenheit umrechnen können, verwenden wir stattdessen das Konzept der vektorisierten Operationen und extrahieren alle Fahrenheit-Temperaturen als Matrix und konvertieren sie in Celsius-Temperaturen. Im Journal befindet sich ein vorgefertigtes Skript namens „Skript zur Isolierung von Schneeherstellungstagen“. Ich führe das Skript Stück für Stück aus. In dieser Demonstration verwende ich die Option „Eingebettetes Protokoll“, anstatt zwischen den Protokollfenstern hin- und herzunavigieren. Ich klicke mit der rechten Maustaste in mein Skript-Editor-Fenster und wähle „Eingebettetes Protokoll anzeigen“. Ich passe die Größe an, damit das gesamte Skript im Editorbereich angezeigt wird. Ich wähle „line“ aus und führe es aus. Dadurch wird die Referenz für die aktuelle Datentabelle, die Ski Lodge Temperature-Datentabelle, abgerufen und in dt gespeichert. Anschließend sende ich die Nachricht „get as matrix“ und speichere das Ergebnis in der Variable „tempF“. Ich führe „line“ aus. Bei größeren Matrizen werden oft nur die Matrixdimensionen und die Zuweisung angezeigt, anstatt sie im Protokoll anzuzeigen. Beachten Sie, dass es sieben Zeilen und Spalten sind. Wenn ich zurück zur Datentabelle navigiere, sehe ich Spalten darin. Warum haben wir nur Spalten herausgezogen? Wenn Sie sich die Datumsspalte ansehen, sehen Sie, dass sie nominal ist. Das deutet darauf hin, dass die Daten möglicherweise als Zeichendaten und nicht als numerische Daten verarbeitet werden. Ich kann das bestätigen. Ich könnte natürlich die Spalte „info“ aufrufen, aber ich kann das zusätzlich bestätigen, indem ich die Spalte etwas verbreitere und die Werte linksbündig ausrichte, so wie JMP Zeichendaten verarbeitet. Als ich also „get as matrix“ an die Datentabelle schickte, ignorierte es diese Zeichenspalte und extrahierte nur die numerischen Spalten. Line nimmt dann jedes Element der Variable „tempF“, der dort gespeicherten Matrix, konvertiert es in Celsius und speichert es in „tempC“. Auch hier erhalte ich dieselbe Meldung im Protokoll. Sie können aber natürlich mit der Maus über „tempf“ oder „tempc“ fahren, um die Werte anzuzeigen. Als Nächstes zähle ich die Zeilen in „tempC“. Ich habe dies als bewährte Methode erwähnt, Zeilen oder Spalten außerhalb einer Schleife zu zählen. Also zähle ich die Zeilen in der Matrix „tempC“ und speichere sie in der Variable „nr“. Ich führe „line“ aus, und es sind natürlich sieben. Außerdem möchte ich zwei Matrizen erstellen. Eine gibt die minimale Temperatur an einem bestimmten Tag an (minTemp), die andere gibt an, ob die Beschneiungsanlage eingeschaltet sein sollte (Machine). Beide beginnen mit einer bestimmten Anzahl von Zeilen, einer Spalte und fehlenden Werten. In Zeile kaskadieren wir die Zuweisungsfunktion. Ich verwende die J-Funktion, um eine Matrix mit einer bestimmten Anzahl von Zeilen zu erstellen. Hier ist die Anzahl der Zeilen von tempC, die erwähnte einzelne Spalte und der fehlende Wert. Wenn Machine, minTemp und alle anderen Variablen mit demselben Wert beginnen, können wir sie einfach kaskadierend zuweisen, wie in Zeile 1 gezeigt. Ich führe das aus. Im Protokoll sehen Sie, wenn Sie mit der Maus über Machine oder minTemp fahren, die Spalte mit den fehlenden Werten. Dann möchte ich eine Schleife ausführen und beginne mit einem Zähler. Ich teste, ob r kleiner oder gleich den in nr gespeicherten Zahlen ist. Der Hauptteil der For-Schleife besteht darin, dass ich eine Variable namens obs verwende, die in diesem Fall die erste Zeile und alle Spalten von tempC übernimmt. Ich suche den Minimalwert in dieser Zeile und setze ihn an die r-te Stelle in minTemp. Dann vergleiche ich den Wert, den ich gerade in minTemp an dieser Stelle eingetragen habe, mit minus. Wenn dieser Vergleich wahr ist, also kleiner als minus, erhalte ich einen Booleschen Wert als Ergebnis und setze diesen an die erste Stelle in Machine. Wenn er falsch ist, also größer oder gleich minus, setze ich ihn in Machine. Dann aktualisieren wir, testen erneut und obs wird mit der nächsten Zeile in der Datentabelle überschrieben. Und wir führen die gleichen Schritte aus, bis sowohl minTemp als auch Machine gefüllt sind. Ich führe also Zeilen durch und wir können mit der Maus über minTemp fahren. Es erscheint erneut in der Kurzinfo und auch unten im Skripteingabefenster. Ich fahre mit der Maus über „Machine“, und dort sind diese Meldungen. In den letzten Schritten hätten wir diese Meldungen kaskadieren können, aber zu Demonstrationszwecken trennen wir sie. Ich sende eine neue Spaltenmeldung an dt. Sie heißt „minTemp“, und die Werte sind genau die, die ich gerade aus der For-Schleife erhalten habe. Ich führe die Zeilen durch. Im Hintergrund sehen Sie, dass die neue Spalte erstellt wurde. Ich hätte der neuen Spalte beispielsweise ein Formatargument hinzufügen können, um eine feste Anzahl von Dezimalstellen zu erhalten. Dies gab auch eine Spaltenobjektreferenz zurück, die ich in einer Variable hätte speichern können, wenn ich die Spalte erneut verwenden wollte. Der nächste Codeabschnitt setzt eine neue Spaltenmeldung an dt. Diese heißt „Make Snow“. Die Werte stammen aus dem Maschinenspaltenvektor, der … hat. Mein Skript fordert uns auf, Wertbeschriftungen zu verwenden. Bei einem Wert für den Datenwert lautet die Beschriftung „nein“, bei einem Wert für den Datenwert „ja“. Natürlich aktivieren wir die Option mit dem Booleschen Wert. Ich führe die Zeilen durch. Wir erstellen erneut eine Instanz eines Spaltenobjekts. Ich gehe zurück zur Tabelle und scrolle darüber. In der Spalte werden jetzt „nein“ und „ja“ angezeigt. Im Spaltenbereich, wenn ich nach unten scrolle, sehen Sie weiterhin, dass „Make Snow“ kontinuierlich ist. Das bedeutet, dass es sich um numerische Daten für die tatsächlichen Datenwerte handelt. Und noch etwas zu den Wertbeschriftungen: Das Sternchen im Spaltenbereich zeigt eine Eigenschaft an. Wenn Sie darauf klicken, sehen Sie Folgendes: Wenn ich Wertbeschriftungen verwende und den Mauszeiger über eine Zelle in der Datentabelle bewege, wird mir der tatsächliche Datenwert angezeigt. Wenn ich jetzt ein Diagramm oder eine Analyse erstellen würde, würden diese Beschriftungen verwendet, sofern sie aktiviert sind. Im Skript könnten wir diese Meldungen erneut an die Datentabelle senden. Zu Demonstrationszwecken führen wir dies jedoch in diesen Schritten aus. Ich sende „select where“ an die Datentabelle und suche nach den Zeilen, deren Wert in der Spalte „Make Snow“ gleich ist. Ich führe also „line“ aus. Im Hintergrund sehen Sie vier ausgewählte Zeilen. Abschließend sende ich den Befehl „subsect“ an die Datentabelle. Ich gebe einen Namen für die Ausgabetabelle an und spezifiziere die Spalten. Da ich vier Zeilen ausgewählt habe, muss ich nicht angeben, welche Zeilen ich möchte. Diese werden automatisch in die Teilmengentabelle übernommen. Ich führe also „line“ aus. So, und wir haben diese Teilmengentabelle. An dieser Stelle könnten wir die Daten zur Mindesttemperatur formatieren. Das Quellskript spiegelt die Teilmenge wider. Sehen wir uns das kurz an: Ich klicke mit der rechten Maustaste auf „Quelle“ und wähle „Bearbeiten“. Jedes Mal, wenn ich ein neues Skript mit einem Befehl aus dem Tabellenmenü erstelle, egal ob interaktiv oder mit einem Skript, erhalte ich das Quellskript. Es zeigt also lediglich, dass „subset“ der verwendete Tabellenbefehl war. Der Nachteil von „subset“ besteht darin, dass es nicht weiß, warum diese Zeilen extrahiert wurden, und diese daher fest codiert. Es gibt keine Grundlage für diese Auswahl im von JMP geschriebenen Skript. JMP überschreibt außerdem die standardmäßige Tendenz, nur die ausgewählten Zeilen zu extrahieren, indem es „a“ als Argument für ausgewählte Zeilen einfügt. Wenn Sie also das Skript erfassen und an ein anderes Skript anpassen möchten, sollten Sie die beiden angezeigten Zeilen entfernen und vor dem Senden der Subset-Nachricht die erforderlichen logischen Auswahlen Ihres Skripts treffen. Ich werde also aus diesem Skript aussteigen. Dies war also ein Beispiel für die Verwendung eines Befehls aus dem Tabellenmenü, aber auch für die Arbeit mit Daten als Matrizen.