私の中で前のブログ投稿 iTunesのデータについては、iTunesのXMLファイルを解析するための簡単なJMP Scripting Language(JSL)プログラムを紹介しました。私はこのコードが私の13.3MBのiTunes Library.xmlファイル全体でうまく機能するかどうか疑問に思って記事を終えた。
JSLプログラムは私の7KBテストファイルで1秒もかからずに走りました。13.3MB全体にかかる時間はどれくらいですか?それは完全に90秒かかりました。時間はどこで過ごしましたか。その答えが、この記事の焦点です。これは、私のiTunesデータ収集プロジェクトに関するシリーズの第2部です。
スクリプトのパフォーマンスを簡単に向上させる方法
前 JMP 11、これは答えるのが簡単な質問ではありませんでした。JMP 11では、 JSLプロファイラー 。これは、JSLプログラムがどこで時間を費やしているかを行ごとに評価するための優れたツールです。
JSLプロファイラを使用するには、JSLエディタの上部にある[Debug Script]アイコンをクリックし、次に[timer]アイコンをクリックしてデバッガをプロファイラモードにしました。私のスクリプトを13.3MBのファイル全体で実行したところ、Add Row()コマンドを含むParse XML行にコードが費やされていたことがわかりました。私の推測は、ほとんどの場合、テーブル状態の更新に費やされていると思います。

JMPのJSLプロファイラレポート
JSLメッセージをデータテーブルに追加して、すべての更新メッセージを差し控えることができることに気付きました。メッセージは次のとおりです。
dt <<データ更新の開始。
メッセージを処理するデータテーブルの最後に、これを追加する必要があります。
dt <<データ更新の終了。
これらのメッセージを追加した後、プログラムは90秒ではなく、実行に約13秒しかかかりませんでした - 処理時間が85パーセント短縮されました!
今度は私が私の分析のために望まないデータのいくつかを一掃する必要があります。私のデータには、どのトラックがプレイリストの一部であるかを詳述したたくさんのレコードがあります。プレイリストデータを含むタグを処理しないように、JSLにコードを追加する必要があります。私のデータでは、これは全体の約10パーセントでした。

iTunesプレイリストデータ
JMP開発者に感謝しますマイケル・ヘクト私がJSLに追加した以下のコードを提案するため。テキスト値として「Playlist」を持つ「key」タグはデータとして処理されなくなりました。
OnElement(
"キー"、
終了タグ(
txt = XML Text();
もし(
プロセスタグ
もし(
txt == "プレイリスト"、プロセスタグ= 0、
不足しています(Num(txt))、
raw dt << Add Row(1);
生のdt:キー[Row()] = txt。
、
txt == "トラック"、プロセスタグ= 1
;
)
)
あなたは私をダウンロードすることができます JSLプログラム JMPファイル交換から、あなた自身のiTunesデータを調べてください。(ダウンロードには無料が必要です JMPユーザーコミュニティアカウント。)
前回の投稿のデータの完全な分析は保存しますが、プレビューをします。以下は、ジャンルとアーティストによる私のリスニングを示すツリーマップです。私はブルース・スプリングスティーンを愛していて、長年にわたって子供たちに彼の話を聞くように「強制」してきました。私はまた、オペラ、ジャズ、ブルースが好きです。ご覧のとおり、私は音楽が大好きです。

JMPツリーマッププラットフォームを使用したジャンル別およびアーティスト別の再生回数のツリーマップ。