Bonne année à tous !
J'ai commencé à explorer cet ensemble de données de Kaggle : https://www.kaggle.com/chicago/chi-restaurant-inspections . Chaque ligne correspond à une inspection de restaurant, avec une seule colonne pour la liste des infractions. Heureusement, les violations sont délimitées par "|". Exemple ci-dessous. Le nombre d'infractions varie.
40. THERMOMÈTRES DE RÉFRIGÉRATION ET À TIGE MÉTALLIQUE FOURNIS ET APPARENTÉS - Commentaires : THERMOMÈTRE À TIGE NÉCESSAIRE POUR SURVEILLER LES TEMPÉRATURES DES ALIMENTS. CHARGE DE FOURNIR ET DE MAINTENIR. | 41. LIEUX MAINTENUS EXEMPTS DE DÉCHETS, D'ARTICLES NON NÉCESSAIRES, ÉQUIPEMENT DE NETTOYAGE CORRECTEMENT ENTREPOSÉ - Commentaires : OBSERVÉ QUELQUES ARTICLES NON SURÉLEVÉS À 6 POUCES DU SOL DANS LA ZONE DE PRÉPARATION ARRIÈRE. DOIT ÉLÉVER ET MAINTENIR. | 38. VENTILATION : PIÈCES ET ÉQUIPEMENT VENTILÉS SELON LES BESOINS : PLOMBERIE : INSTALLÉ ET ENTRETENU - Commentaires : ÉVIER À MAIN EXPOSÉ DANS LA CUISINE À L'ARRIÈRE DE LA ZONE DE PRÉPARATION DES ALIMENTS DRAINAGE LENT. DOIT RÉPARER ET MAINTENIR. | 32. SURFACES DE CONTACT ALIMENTAIRE ET NON ALIMENTAIRE CONÇUES, CONSTRUITES ET ENTRETENUES CORRECTEMENT - Commentaires : ÉTAGÈRES DE STOCKAGE DES ALIMENTS ROUILLÉES OBSERVÉES AU SOUS-SOL. DOIT REPEINT ET ENTRETENIR. | 34. PLANCHERS : CONSTRUITS SELON LE CODE, NETTOYÉS, BIEN RÉPARÉS, COVING INSTALLÉS, MÉTHODES DE NETTOYAGE SANS POUSSIÈRE UTILISÉES - Commentaires : SALETÉ ET DÉBRIS OBSERVÉS SUR LE SOL SOUS LES PALETTES AU SOUS-SOL. DOIT NETTOYER ET ENTRETENIR.
En regardant la structure : ViolationID#. Violation_Type - Commentaires. Je peux penser à deux façons d'analyser ces chaînes en ID#, Type, Commentaires :
1) Cols> Utilities> Text to Columns, puis Tables> Stack, puis supprimez les lignes vides, puis analysez la nouvelle colonne avec Word(text,delimiter)
2) Utilisez Words(Violations, "|") pour créer une liste comme celle ci-dessous puis travaillez sur chacun des éléments de la liste
{"40. RÉFRIGÉRATION ET THERMOMÈTRES À TIGE MÉTALLIQUE FOURNIS ET VISIBLES - Commentaires : THERMOMÈTRE À TIGE NÉCESSAIRE POUR SURVEILLER LES TEMPÉRATURES DES ALIMENTS. CHARGE DE FOURNIR ET DE MAINTENIR. ", " 41. LIEUX MAINTENUS EXEMPTS DE DÉCHETS, D'ARTICLES NON NÉCESSAIRES, ÉQUIPEMENT DE NETTOYAGE CORRECTEMENT ENTREPOSÉ - Commentaires : OBSERVÉ QUELQUES ARTICLES NON SURÉLEVÉS À 6 POUCES DU SOL DANS LA ZONE DE PRÉPARATION ARRIÈRE. DOIT ÉLÉVER ET MAINTENIR. ", " 38. VENTILATION : PIÈCES ET ÉQUIPEMENT VENTILÉS SELON LES BESOINS : PLOMBERIE : INSTALLÉ ET ENTRETENU - Commentaires : ÉVIER À MAIN EXPOSÉ DANS LA CUISINE À L'ARRIÈRE DE LA ZONE DE PRÉPARATION DES ALIMENTS DRAINAGE LENT. DOIT RÉPARER ET MAINTENIR. ", " 32. SURFACES DE CONTACT ALIMENTAIRE ET NON ALIMENTAIRE CONÇUES, CONSTRUITES ET ENTRETENUES CORRECTEMENT - Commentaires : ÉTAGÈRES DE STOCKAGE DES ALIMENTS ROUILLÉES OBSERVÉES AU SOUS-SOL. DOIT REPEINT ET ENTRETENIR. ", " 34. PLANCHERS : CONSTRUITS SELON LE CODE, NETTOYÉS, BIEN RÉPARÉS, COVING INSTALLÉS, MÉTHODES DE NETTOYAGE SANS POUSSIÈRE UTILISÉES - Commentaires : SALETÉ ET DÉBRIS OBSERVÉS SUR LE SOL SOUS LES PALETTES AU SOUS-SOL. DOIT NETTOYER ET MAINTENIR."}
Je n'ai pas beaucoup d'expérience avec les listes.
Serait-il plus efficace de travailler avec la liste {}, d'utiliser l'approche Text to Columns ou existe-t-il un meilleur moyen ? Si l'approche par liste est la plus efficace, quelle est l'approche la plus efficace pour faire l'équivalent de Tables > Pile pour chaque ligne, élément de la liste ?
Alternativement, il y a une colonne avec InspectionID#. Serait-il plus efficace de diviser cela en deux tables en utilisant InspectionID# comme clé au lieu de créer une table empilée massive ?
Craig :
Merci! En tant que débutant en analyse de texte, je n'ai jamais utilisé les fonctions de correspondance de modèles auparavant. Belle solution au problème. Je vais certainement passer du temps à apprendre les regex et les correspondances de modèles.
BTW - l'analyse de texte ferait un excellent sujet de webinaire Mastering JMP !
Juste en jouant avec les 100 premières lignes, voici une carte :
LocationsLocationsEmplacements
Voici une colonne de formules pour obtenir uniquement les champs de commentaire :
a = :Violations;
b = "";
Pat Match( a, // full violation text
Pat Repeat(
Pat Arb() + "Comments:"
+ ( Pat Break( "|" ) | Pat Rem()) >> c // the interesting bit
+ Pat Test( // not really a test, just some JSL to build text
b = b || "|" || c; // build text here
1; // always succeed the test
)
),
NULL, // no replacement
FULLSCAN // get the final one
);
b;
L'explorateur de texte peut utiliser la nouvelle colonne pour former des clusters
clustersclusters groupes
Le tracé du numéro de groupe pour les commentaires par rapport au résultat réel de l'inspection semble prometteur ; les commentaires du groupe 2 n'ont pas obtenu de notes d'échec et les commentaires du groupe 4 ont échoué. Typiquement quelque chose comme « ACCUMULATION DE GRAISSE OBSERVÉE SUR LES FILTRES DE LA HOTTE DE VENTILATION. DOIT NETTOYER LES FILTRES DE LA HOTTE DE VENTILATION" (réussite) vs "PAS DE LAVAGE DES MAINS NI DE RETRAIT DES GANTS ALIMENTAIRES" (échec).
clustered by comment textclustered by comment textregroupés par texte de commentaire
Je ne pense pas que les lignes 145K seront trop lentes pour l'une des idées d'analyse. Je pense que vous voudrez probablement des colonnes d'indicateurs pour chaque type de violation, 0 ou 1. Si vous avez JMP 13, vous pouvez utiliser l'explorateur de texte sur les commentaires ; Je suggérerais d'exécuter tous les commentaires, sans les descriptions constantes, ensemble dans un seul champ de caractères.