내 안에 이전 블로그 게시물 iTunes 데이터에 대해서는 iTunes XML 파일을 구문 분석하기위한 간단한 JMP 스크립팅 언어 (JSL) 프로그램을 보여 줬습니다. 나는 코드가 내 전체 13.3MB iTunes Library.xml 파일에서 잘 수행 될지 궁금해했습니다.
JSL 프로그램은 7KB 테스트 파일에서 1 초도 채 안 걸렸습니다. 13.3MB 전체에 걸린 시간은 얼마나됩니까? 90 초가 걸렸습니다. 시간은 어디에서 보냈습니까? 이에 대한 답은이 게시물의 초점인데, 이는 iTunes 데이터를 수집하는 프로젝트에 대한 시리즈 중 두 번째 파트입니다.
스크립트의 성능을 어떻게 쉽게 향상시킬 수 있습니까?
전에 JMP 11, 이것은 대답하기 쉬운 질문이 아니 었습니다. JMP 11은 JSL 프로파일 러 . 이것은 JSL 프로그램이 줄 단위로 시간을 보내는 곳을 평가하는 훌륭한 도구입니다.
JSL 프로파일 러를 사용하려면 JSL 편집기 맨 위에있는 "디버그 스크립트"아이콘을 클릭 한 다음 "타이머"아이콘을 클릭하여 디버거를 프로파일 러 모드로 전환하십시오. 전체 13.3MB 파일에서 스크립트를 실행하면 코드가 Parse XML 행에 계속 사용되었다는 것을 알 수있었습니다. 여기에는 Add Row () 명령이 포함되어 있습니다. 내 생각 엔 대부분의 시간이 테이블 상태를 업데이트하는 데 소비되고 있습니다.

JMP의 JSL 프로필러 보고서
모든 업데이트 메시지를 보류하기 위해 데이터 테이블에 JSL 메시지를 추가 할 수 있음을 알았습니다. 메시지는 다음과 같습니다.
dt << 데이터 업데이트 시작;
메시지를 처리하는 데이터 테이블의 끝에서 다음을 추가해야합니다.
dt << 최종 데이터 업데이트;
이 메시지를 추가 한 후 프로그램은 90 초가 아닌 약 13 초 만에 실행되었습니다. 처리 시간이 85 % 단축되었습니다!
이제 필자는 분석을 원하지 않는 데이터를 정리해야합니다. 내 데이터에는 재생 목록에 포함 된 트랙에 대한 세부 정보가 많은 레코드가 있습니다. 재생 목록 데이터가 포함 된 태그를 처리하지 않으려면 JSL에 코드를 추가해야합니다. 내 데이터에서 이것은 전체의 약 10 %였습니다.

iTunes 재생 목록 데이터
덕분에 JMP 개발자 마이클 헤 흐트 내가 JSL에 추가 한 다음 코드를 제안했다. 이제 텍스트 값으로 '재생 목록'을 가진 모든 '키'태그가 데이터로 처리되지 않았습니다.
OnElement (
"키",
종료 태그 (
txt = XML 텍스트 ();
만약(
프로세스 태그,
만약(
txt == "재생 목록", 프로세스 태그 = 0,
누락 됨 (Num (txt)),
raw dt << 행 추가 (1);
원시 dt : 키 [행 ()] = txt;
),
txt == "트랙", 프로세스 태그 = 1
);
)
)
내 다운로드 할 수 있습니다. JSL 프로그램 JMP 파일 교환에서 가져 와서 자신의 iTunes 데이터를 조사하십시오. (다운로드는 무료입니다. JMP 사용자 커뮤니티 계정.)
마지막 게시물에 대한 데이터의 전체 분석을 저장 하겠지만 미리 보겠습니다. 아래는 장르와 아티스트의 듣기를 보여주는 트리 맵입니다. 나는 브루스 스프링스틴을 좋아하고, 내 아이들이 수년 동안 많이 들었고 심지어 많은 라이브 콘서트에 데려가도록 강요했다. 나는 또한 오페라, 재즈와 블루스를 좋아합니다. 보시다시피, 저는 음악을 좋아합니다.

Treemap Play Count of JMP Treemap 플랫폼을 사용하여 장르와 아티스트의 수를 계산합니다.