In meinem vorheriger Blogeintrag In Bezug auf iTunes-Daten habe ich ein einfaches JMP Scripting Language (JSL) -Programm gezeigt, um die iTunes XML-Datei zu analysieren. Ich beendete den Beitrag und fragte mich, ob der Code in meiner 13.3MB großen iTunes Library.xml-Datei gut funktionieren würde.
Das JSL-Programm lief in weniger als einer Sekunde auf meiner 7-KB-Testdatei. Wie lange hat es für die gesamten 13,3 MB gedauert? Es dauerte volle 90 Sekunden. Wo wurde die Zeit verbracht? Die Antwort darauf ist der Fokus dieses Beitrags, der Teil zwei einer Serie über mein Projekt ist, in dem iTunes-Daten gesammelt werden.
Wie kann ich die Leistung meines Skripts verbessern?
Vor JMP 11, diese Frage war nicht leicht zu beantworten. JMP 11 führte die JSL-Profiler . Dies ist ein großartiges Werkzeug, um zu beurteilen, wo ein JSL-Programm Zeile für Zeile Zeit verbringt.
Um den JSL-Profiler zu verwenden, habe ich oben im JSL-Editor auf das Symbol „Debug-Skript“ geklickt und dann auf das Symbol „Timer“ geklickt, um den Debugger in den Profiler-Modus zu bringen. Bei der Ausführung meines Skripts für die gesamte 13,3-MB-Datei wurde gezeigt, dass der Code seine gesamte Zeit in der Parse-XML-Zeile verbrachte, die den Befehl Zeile hinzufügen () enthält. Ich schätze, dass die meiste Zeit damit verbracht wird, den Tabellenstatus zu aktualisieren.

Der JSL-Profiler-Bericht in JMP
Ich erkannte, dass ich der Datentabelle eine JSL-Nachricht hinzufügen konnte, um alle Aktualisierungsnachrichten abzuhalten. Die Nachricht lautet:
dt << Datenaktualisierung beginnen;
Am Ende der Datentabelle, die die Nachricht verarbeitet, muss ich Folgendes hinzufügen:
dt << Datenaktualisierung beenden;
Nach dem Hinzufügen dieser Meldungen dauerte das Programm nur etwa 13 Sekunden und nicht 90 Sekunden - eine Reduzierung der Verarbeitungszeit um 85 Prozent!
Jetzt muss ich einige Daten bereinigen, die ich für meine Analyse nicht benötige. Meine Daten enthalten viele Datensätze, die detailliert angeben, welche Titel Teil von Wiedergabelisten sind. Ich muss meiner JSL etwas Code hinzufügen, um keine Tags zu verarbeiten, die Wiedergabelistendaten enthalten. Nach meinen Angaben waren dies etwa 10 Prozent der Gesamtsumme.

iTunes-Wiedergabelistendaten
Vielen Dank an den JMP-Entwickler Michael Hecht für den folgenden Code, den ich der JSL hinzugefügt habe. Nun wurden alle "Schlüssel" -Tags, die "Playlist" als Textwerte hatten, nicht als Daten verarbeitet.
OnElement (
"Schlüssel",
Endtag (
txt = XML-Text ();
Ob(
Prozessmarke,
Ob(
txt == "Playlists", Prozess-Tag = 0,
Fehlt (Num (txt)),
roh dt << Zeilen hinzufügen (1);
Rohdt: Key [Row ()] = txt;
)
txt == "Tracks", Prozesskennzeichen = 1
);
)
)
Sie können meine herunterladen JSL-Programm aus dem JMP File Exchange und untersuchen Sie Ihre eigenen iTunes-Daten. (Download erfordert eine kostenlose JMP-Benutzergemeinschaft Konto.)
Ich werde die vollständige Analyse der Daten für meinen letzten Beitrag speichern, aber ich gebe Ihnen eine Vorschau. Unten ist eine Treemap, die mein Hören nach Genre und Künstler zeigt. Ich liebe Bruce Springsteen und habe meine Kinder "gezwungen", im Laufe der Jahre viel zu hören und sogar zu vielen Live-Konzerten mitzunehmen. Ich liebe auch Oper, Jazz und Blues. Wie Sie sehen können, liebe ich einfach Musik.

Treemap der Spielzählung nach Genre und Interpret über die JMP Treemap-Plattform.