Je cherchais de bonnes données pour démontrer le nouveau constructeur de requêtes, qui arrive JMP 12 en mars. Query Builder est un outil de requête de base de données SQL moderne qui aide les utilisateurs à découvrir des données intéressantes et à rendre les requêtes correctes, reproductibles et partageables. Les données devaient être différentes des exemples de données fournis avec JMP. Il devait s'agir d'un ensemble de tables, c'est-à-dire combien de nos clients stockent leurs données. Et cet ensemble devait avoir une relation définie entre les tables, décrivant chacune un sujet d’intérêt différent.
Où devrais-je chercher des données contenant plusieurs sujets et suffisamment riches pour montrer comment le logiciel peut accélérer la découverte statistique? Je me suis rendu compte que beaucoup de mes collègues utilisent iTunes pour écouter de la musique et qu'ils peuvent générer des données intéressantes à partir de leur écoute.
Après quelques recherches sur le Web, j’ai trouvé que iTunes génère un fichier XML mettre de la musique et des listes de lecture à la disposition d'autres applications. Cela semblait être un bon choix pour JMP. Et parce que je suis un geek en analyse de données, regarder des données iTunes dans JMP semblait amusant, et je pouvais obtenir les données dont j'avais besoin.
J'ai écrit un analyseur XML pour le fichier iTunes en utilisant JSL. J'ai également écrit un bref sondage dans JSL pour collecter des données démographiques auprès des personnes souhaitant partager leurs données iTunes. Le projet s'est nettement divisé en quatre parties:
Lecture de XML avec JMPAmélioration des performances de JSL à l'aide de Performance Profiler dans le débogueur JSLUtilisation du générateur d'applications pour construire l'enquêteAnalyser les données iTunesLecture de XML avec JMP
On nous pose souvent la question «JMP ouvre-t-il des fichiers XML?». C'est une question délicate. XML est un fichier texte contenant des informations organisées dans une arborescence arbitraire de «balises».
Jetons un coup d'œil à un exemple XML simple contenant des données pour deux variables, X et Y, avec trois lignes de données.
Voici un exemple de données XML:
Voici un exemple simple de JSL pour analyser les données XML:
exemple = charger un fichier texte ("données xml exemple.xml");
Analyser XML
( Exemple,
Sur élément
( "table",
Balise de démarrage (nouvelle table (XML Attr ("nom")))
),
Sur élément
("col",
Balise de fin (nouvelle colonne (XML Attr ("nom"),
Définir des valeurs (Parse (XML Text ()))))
)
)
Notez les trois éléments clés utilisés dans la JSL ci-dessus. La syntaxe On Element indique quelle expression JSL doit être exécutée lorsque la chaîne «table» ou «col» est trouvée dans la «balise» XML désignée par les symboles. Les balises de début et de fin indiquent quelle expression JSL doit être exécutée au début des balises «table» ou «col» ou à la fin des balises. Dans ce cas, une expression New Table est exécutée à chaque démarrage d'une balise «table» et une expression New Column est exécutée à chaque fin d'une balise «col» (par une balise). L'exécution de la nouvelle colonne et de la définition des valeurs sur la balise de fin garantit que toutes les valeurs de la colonne ont été lues avant la définition des valeurs.
Voici la table de données JMP résultante:

Apple iTunes XML
Voyons maintenant comment Apple stocke les données iTunes en XML. Le format XML est basé sur la structure de données «plist» d’Apple. j'ai trouvé un document sur le site Apple cela a donné les bases des éléments du fichier.
Voici un extrait du fichier iTunes Library.xml généré par mon utilisation d’iTunes. La balise de clé sert de déclencheur générique pour ce qui pourrait être un nom de colonne ou pour indiquer qu'une nouvelle piste arrive. Les autres balises (entier, chaîne, etc.) désignent des observations dans les données et donnent les types de données.
2739
ID de piste2739
prénomFortune Plango Vulnera
ArtisteCarl Orff
...
Voici un court programme JSL que j’ai écrit et qui semblait bien fonctionner avec un ensemble réduit de mon fichier iTunes Library.xml. Pour créer l'ensemble de données réduit, j'ai simplement ouvert le fichier .xml (le mien est de 14 Mo) dans un éditeur de texte et copié les quelques premières pistes de données.
iTunespath = "~ / Musique / iTunes / Bibliothèque iTunes short.xml";
// charge le fichier XML en mémoire dans le 'iTunespath' global
cd_file_contents = Charger un fichier texte (iTunespath);
// Créer une table de données vide pour contenir les données brutes
raw dt = New Table ("iTunes Data raw");
raw dt << Nouvelle colonne ("noms", caractère);
raw dt << New Column ("Values", character);
// Analyser iTunes xml
Analyser XML (contenu_cd_fichier,
OnElement ("key", balise de début (If (Row ()> 0, raw dt << ajouter des lignes (1)))), balise de fin (Column (raw dt, "names") [Row ()] = XML Text ( ))),
onElement ("integer", balise de fin (Column (raw dt, "values") [Row ()] = XML Text ())),
onElement ("real", balise de fin (Column (raw dt, "values") [Row ()] = XML Text ())),
onElement ("date", balise de fin (Column (raw dt, "values") [Row ()] = XML Text ())),
onElement ("data", balise de fin (Column (raw dt, "values") [Row ()] = XML Text ())),
onElement ("string", balise de fin (Column (raw dt, "values") [Row ()] = XML Text ())),
onElement ("true", balise de fin (Column (raw dt, "values") [Row ()] = XML Text ())),
onElement ("false", balise de fin (Column (raw dt, "values") [Row ()] = XML Text ())),
Balise de fin (rangée ++)
) // fin de l'analyse du fichier iTunes xml
Voici ce que le programme a produit:

Notez qu’il existe certaines données au début dont je n’ai pas besoin, mais que je peux nettoyer plus tard.
Maintenant, la grande question est la suivante: le script sera-t-il adapté à mon fichier de 14 Mo? Le temps d'exécution, selon ma montre, était de 1 minute 45 secondes. Dans mon prochain article, je montrerai comment utiliser Performance Profiler du débogueur JSL pour savoir comment accélérer mon code.