Ich habe nach guten Daten gesucht, um den neuen Query Builder zu demonstrieren, der jetzt kommt JMP 12 im März. Der Abfrage-Generator ist ein modernes SQL-Datenbank-Abfrage-Tool, mit dem Benutzer interessante Daten erkennen und korrekte Abfragen erstellen können, die wiederholbar und gemeinsam nutzbar sind. Die Daten mussten sich von den mit JMP gelieferten Beispieldaten unterscheiden. Es musste ein Satz von Tabellen sein, in dem viele unserer Kunden ihre Daten speichern. Und dieser Satz musste eine definierte Beziehung zwischen den Tabellen haben, von denen jede ein anderes Thema von Interesse beschrieb.
Wo sollte ich nach Daten suchen, die mehrere Themen enthielten und reich genug waren, um zu zeigen, wie die Software die statistische Ermittlung beschleunigen kann? Mir ist aufgefallen, dass viele meiner Kollegen iTunes zum Musikhören verwenden und möglicherweise aus ihrem Zuhören interessante Daten generieren.
Mit ein wenig Recherche im Internet fand ich das iTunes generiert eine XML-Datei um Musik und Wiedergabelisten für andere Anwendungen verfügbar zu machen. Das klang nach einer guten Passform für JMP. Und weil ich ein Geek für Datenanalyse bin, schien es mir Spaß, iTunes-Daten in JMP zu betrachten, und ich konnte die Daten erhalten, die ich brauchte.
Ich habe einen XML-Parser für die iTunes-Datei mit JSL geschrieben. Ich habe auch eine kurze Umfrage in JSL geschrieben, um demografische Daten von Personen zu sammeln, die bereit sind, ihre iTunes-Daten zu teilen. Das Projekt gliederte sich in vier Teile:
XML mit JMP lesenVerbessern der Leistung von JSL mithilfe des Performance Profiler im JSL-DebuggerVerwenden des Application Builder zum Erstellen der UmfrageAnalysieren der iTunes-DatenXML mit JMP lesen
Wir bekommen oft die Frage "Öffnet JMP XML-Dateien?". Dies ist eine knifflige Frage. XML ist eine Textdatei, die Informationen enthält, die in einem beliebigen Baum von "Tags" organisiert sind.
Schauen wir uns ein einfaches XML-Beispiel an, das Daten für zwei Variablen, X und Y, mit drei Datenzeilen enthält.
Hier ein Beispiel für XML-Daten:
Hier ein einfaches JSL-Beispiel zum Analysieren der XML-Daten:
example = Textdatei laden ("xml data example.xml");
XML analysieren
(Beispiel
Auf Element
( "Tabelle",
Starttag (neue Tabelle (XML-Attr ("Name")))
)
Auf Element
("col",
Endtag (Neue Spalte (XML-Attr ("Name"),
Werte setzen (Parse (XML Text ()))))
)
);
Beachten Sie die drei Schlüsselelemente, die in der obigen JSL verwendet werden. Die On Element-Syntax gibt an, welcher JSL-Ausdruck ausgeführt werden soll, wenn die Zeichenfolge "table" oder "col" innerhalb des XML-Tags gefunden wird, das durch die Symbole gekennzeichnet ist. Das Start-Tag und das End-Tag geben an, welcher JSL-Ausdruck am Anfang der Tags "table" oder "col" oder am Ende der Tags ausgeführt werden soll. In diesem Fall wird ein New Table-Ausdruck ausgeführt, wenn ein "table" -Tag gestartet wird, und ein New Column-Ausdruck wird ausgeführt, wenn ein "col" -Tag beendet wird (durch ein Tag). Durch das Ausführen der neuen Spalte und der Einstellung von Werten am Endtag wird sichergestellt, dass alle Werte für die Spalte gelesen wurden, bevor Werte festgelegt werden.
Hier ist die resultierende JMP-Datentabelle:

Apple iTunes XML
Sehen wir uns nun an, wie Apple iTunes-Daten in XML speichert. XML ist in einem Format aufgebaut, das auf Apples "plist" Datenstruktur basiert. Ich habe einen ... gefunden Dokument auf der Apple-Website das gab die Grundlagen der Dateielemente.
Hier ist ein Ausschnitt der iTunes Library.xml-Datei, die durch meine Verwendung von iTunes generiert wird. Das Key-Tag wird als generischer Auslöser für einen Spaltennamen verwendet oder zeigt an, dass eine neue Spur kommt. Die anderen Tags (Integer, String usw.) kennzeichnen Beobachtungen in den Daten und geben die Datentypen an.
2739
Track-ID2739
NameGlück Plango Vulnera
KünstlerCarl Orff
...
Hier ist ein kurzes JSL-Programm, das ich geschrieben habe, das mit einem reduzierten Satz meiner iTunes Library.xml-Datei einwandfrei zu funktionieren schien. Um den reduzierten Datensatz zu erstellen, habe ich einfach die .xml-Datei (meine ist 14 MB) in einem Texteditor geöffnet und die ersten Spuren von Daten kopiert.
iTunespath = "~ / Music / iTunes / iTunes Library short.xml";
// Lade die XML-Datei in den Speicher im globalen 'iTunespath'
cd_file_contents = Textdatei laden (iTunespath);
// Erstellen Sie eine leere Datentabelle, in der die Rohdaten enthalten sind
raw dt = Neue Tabelle ("iTunes Data raw");
Rohdt << Neue Spalte ("Namen", Zeichen);
Rohdt << Neue Spalte ("Werte", Zeichen);
// Analysiere die iTunes-XML
XML analysieren (cd_file_contents,
OnElement ("key", Starttag (If (Row ()> 0, raw dt << Zeilen hinzufügen (1)))) end Tag (Spalte (raw dt, "names") [Row ()] = XML Text ))),
onElement ("Ganzzahl", Endtag (Spalte (Rohdt, "Werte") [Row ()] = XML Text ())),
onElement ("real", end tag (Spalte (Rohdt, "Werte") [Row ()] = XML Text ())),
onElement ("Datum", Endtag (Spalte (Rohdt, "Werte") [Row ()] = XML Text ())),
onElement ("Daten", Endtag (Spalte (Rohdaten, "Werte") [Row ()] = XML Text ())),
onElement ("Zeichenfolge", Endtag (Spalte (Rohdaten, "Werte") [Row ()] = XML Text ())),
onElement ("true", Endtag (Spalte (Rohdt, "Werte") [Row ()] = XML Text ())),
onElement ("false", Endtag (Spalte (Rohdt, "Werte") [Row ()] = XML Text ())),
Endtag (Zeile ++)
); // Ende der Analyse der iTunes-XML-Datei
Hier ist was das Programm produziert hat:

Beachten Sie, dass es am Anfang einige Daten gibt, die ich nicht benötige, aber ich kann sie später aufräumen.
Die große Frage ist nun: Wird das Skript für meine 14 MB-Datei skaliert? Die Ausführungszeit betrug bei meiner Uhr 1 Minute 45 Sekunden. In meinem nächsten Blogbeitrag werde ich zeigen, wie Sie mit dem Performance Profiler des JSL Debugger herausfinden können, wie Sie meinen Code beschleunigen können.