Allen ein frohes neues Jahr!
Ich habe angefangen, diesen Datensatz von Kaggle zu erkunden: https://www.kaggle.com/chicago/chi-restaurant-inspections . Jede Zeile ist eine Restaurantinspektion mit einer einzelnen Spalte für die Liste der Verstöße. Glücklicherweise werden die Verletzungen durch "|" begrenzt. Beispiel unten. Die Zahl der Verstöße variiert.
40. KÄLTE- UND STAMMTHERMOMETER MITGELIEFERT UND AUFFÄLLIG - Bemerkungen: STAMMTHERMOMETER ZUR ÜBERWACHUNG DER NAHRUNGSMITTELTEMPERATUREN ERFORDERLICH. BEAUFTRAGT ZUR BEREITSTELLUNG UND WARTUNG. | 41. RÄUMLICHKEITEN WERDEN FREI VON EINFALL, UNNÖTIGEN GEGENSTÄNDEN, REINIGUNGSGERÄTEN RICHTIG GELAGERT - Kommentare: BEOBACHTET EIN PAAR GEGENSTÄNDE, DIE NICHT 6 ZOLL ÜBER DEM BODEN IM HINTEREN VORBEREITUNGSBEREICH ERHÖHT WURDEN. MUSS ERHÖHEN UND HALTEN. | 38. BELÜFTUNG: RÄUME UND GERÄTE WERDEN NACH BEDARF BELÜFTET: SANITÄRSYSTEME: INSTALLIERT UND GEWARTET - Kommentare: FREIGEGEBENES HANDSPÜLWASCHBECKEN IM HINTEREN KÜCHENBEREICH FÜR DIE ZUBEREITUNG VON LEBENSMITTELN LANGSAM ABLAUFEN. MUSS REPARIEREN UND WARTEN. | 32. LEBENSMITTEL- UND NICHT-LEBENSMITTEL-KONTAKTFLÄCHEN RICHTIG ENTWORFEN, KONSTRUIERT UND GEWARTET - Kommentare: ROSTIGE LEBENSMITTELLAGERREGALE IM UNTERGESCHOSS BEOBACHTET. MUSS NEU LACKIERT UND INSTANDHALTEN. | 34. BÖDEN: PRO CODE KONSTRUIERT, GEREINIGT, GUT REPARIERT, ABDECKUNG INSTALLIERT, STAUBFREIE REINIGUNGSMETHODEN VERWENDET - Kommentare: BEOBACHTETER SCHMUTZ UND SCHMUTZ AUF DEM BODEN UNTER PALETTEN IM KELLER. MUSS REINIGEN UND INSTANDHALTEN.
Betrachtet man die Struktur: ViolationID#. Violation_Type - Kommentare. Ich kann mir zwei Möglichkeiten vorstellen, diese Zeichenfolgen in ID#, Typ, Kommentare zu analysieren:
1) Cols > Utilities > Text to Columns, dann Tables > Stack, dann leere Zeilen löschen, dann die neue Spalte mit Word (Text, Trennzeichen) parsen
2) Verwenden Sie Words(Violations, "|"), um eine Liste wie die untenstehende zu erstellen, und bearbeiten Sie dann jedes der Elemente in der Liste
{"40. KÜHLUNG UND STAMMTHERMOMETER AUS METALL GELIEFERT UND AUFFÄLLIG - Kommentare: STAMMTHERMOMETER ZUR ÜBERWACHUNG DER NAHRUNGSMITTELTEMPERATUREN ERFORDERLICH. BEAUFTRAGT ZUR BEREITSTELLUNG UND WARTUNG. “, „41. RÄUMLICHKEITEN WERDEN FREI VON EINFALL, UNNÖTIGEN GEGENSTÄNDEN, REINIGUNGSGERÄTEN RICHTIG GELAGERT - Kommentare: BEOBACHTET EIN PAAR GEGENSTÄNDE, DIE NICHT 6 ZOLL ÜBER DEM BODEN IM HINTEREN VORBEREITUNGSBEREICH ERHÖHT WURDEN. MUSS ERHÖHEN UND HALTEN. “, „38. BELÜFTUNG: RÄUME UND GERÄTE WERDEN NACH BEDARF BELÜFTET: SANITÄRSYSTEME: INSTALLIERT UND GEWARTET - Kommentare: FREIGEGEBENES HANDSPÜLWASCHBECKEN IM HINTEREN KÜCHENBEREICH FÜR DIE ZUBEREITUNG VON LEBENSMITTELN LANGSAM ABLAUFEN. MUSS REPARIEREN UND WARTEN. “, „32. LEBENSMITTEL- UND NICHT-LEBENSMITTEL-KONTAKTFLÄCHEN RICHTIG ENTWORFEN, KONSTRUIERT UND GEWARTET - Kommentare: ROSTIGE LEBENSMITTELLAGERREGALE IM UNTERGESCHOSS BEOBACHTET. MUSS NEU LACKIERT UND INSTANDHALTEN. “, „34. BÖDEN: PRO CODE KONSTRUIERT, GEREINIGT, GUT REPARIERT, ABDECKUNG INSTALLIERT, STAUBFREIE REINIGUNGSMETHODEN VERWENDET - Kommentare: BEOBACHTETER SCHMUTZ UND SCHMUTZ AUF DEM BODEN UNTER PALETTEN IM KELLER. MUSS REINIGEN UND INSTANDHALTEN."}
Ich habe nicht viel Erfahrung mit Listen.
Wäre es effizienter, mit der Liste {} zu arbeiten, den Text-zu-Spalten-Ansatz zu verwenden, oder gibt es einen besseren Weg? Wenn der Listenansatz am effizientesten ist, was ist der effizienteste Ansatz, um das Äquivalent zu Tabellen > Stapeln für jede Zeile und jedes Element in der Liste auszuführen?
Alternativ gibt es eine Spalte mit InspectionID#. Wäre es effizienter, dies mit der InspectionID# als Schlüssel in zwei Tabellen aufzuteilen, anstatt eine massive gestapelte Tabelle zu erstellen?
Craige:
Danke! Als Textanalyse-Neuling habe ich die Pattern-Matching-Funktionen noch nie zuvor verwendet. Schöne Lösung des Problems. Ich werde auf jeden Fall einige Zeit damit verbringen, etwas über Regex und Mustererkennung zu lernen.
Übrigens – Textanalyse wäre ein großartiges Thema für das Mastering JMP-Webinar!
Ich spiele nur mit den ersten 100 Reihen, hier ist eine Karte:
LocationsLocationsStandorte
Hier ist eine Formelspalte, um nur die Kommentarfelder zu erhalten:
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;
Der Text-Explorer kann die neue Spalte verwenden, um Cluster zu bilden
clustersclusters Cluster
Das Auftragen der Clusternummer für die Kommentare gegen das tatsächliche Inspektionsergebnis sieht vielversprechend aus; Kommentare zu Cluster 2 erhielten keine ungenügende Note und Kommentare zu Cluster 4 fielen durch. Typischerweise etwas wie „BEOBACHTETE FETTABBAUUNG AUF LÜFTUNGSHAUBENFILTERN. LÜFTUNGSHAUBENFILTER MÜSSEN REINIGT WERDEN“ (bestanden) vs. „HÄNDE WASCHEN NOCH KEINE LEBENSMITTELHANDSCHUHE AUSZIEHEN“ (nicht bestanden).
clustered by comment textclustered by comment textgruppiert nach Kommentartext
Ich glaube nicht, dass die 145K-Zeilen für eine der Parsing-Ideen zu langsam sein werden. Ich denke, Sie werden wahrscheinlich Indikatorspalten für jede Art von Verstoß benötigen, 0 oder 1. Wenn Sie JMP 13 haben, können Sie den Text-Explorer für die Kommentare verwenden; Ich würde vorschlagen, alle Kommentare ohne die konstanten Beschreibungen in einem einzigen Zeichenfeld zusammenzuführen.