모두 새해 복 많이 받으세요!
저는 Kaggle에서 이 데이터 세트를 탐색하기 시작했습니다. https://www.kaggle.com/chicago/chi-restaurant-inspections . 각 행은 레스토랑 검사이며 위반 목록에 대한 단일 열이 있습니다. 고맙게도 위반 사항은 "|"로 구분됩니다. 아래 샘플. 위반 횟수는 다양합니다.
40. 냉장 및 눈에 잘 띄는 금속 줄기 온도계 제공 - 의견: 줄기 온도계는 식품 온도를 모니터링하는 데 필요합니다. 제공하고 유지하도록 지시받았습니다. | 41. 구내에는 쓰레기, 불필요한 물품, 청소 장비가 적절하게 보관되어 있습니다. - 의견: 후면 준비 구역에서 바닥에서 6인치 높이로 올라가지 않은 몇 가지 항목을 관찰했습니다. 높이고 유지해야 합니다. | 38. 환기: 필요에 따라 환기되는 객실 및 장비: 배관: 설치 및 유지 관리됨 - 설명: 후면 주방 음식 준비 구역에 손 세척 싱크대가 노출됨 배수가 느림. 반드시 수리하고 유지해야 합니다. | 32. 식품 및 비식품 접촉 표면을 적절하게 설계, 구성 및 유지 관리 - 의견: 지하실에 녹슨 식품 보관 선반이 관찰되었습니다. 다시 칠하고 유지 관리해야 합니다. | 34. 바닥: 규정에 따라 시공, 청소 완료, 양호한 수리, 덮개 설치, 먼지 없는 청소 방법 사용 - 설명: 지하실 바닥 팔레트 바닥에서 먼지와 파편이 관찰되었습니다. 청소하고 유지 관리해야 합니다.
구조 보기: ViolationID#. Violation_Type - 설명. 이 문자열을 ID#, 유형, 주석으로 구문 분석하는 두 가지 방법을 생각할 수 있습니다.
1) Cols > Utilities > Text to Columns, Tables > Stack, 빈 행 삭제, Word(text,delimiter)로 새 열 구문 분석
2) Words(Violations, "|")를 사용하여 아래와 같은 목록을 만든 다음 목록의 각 요소에 대해 작업합니다.
{"40. 냉장 및 금속 줄기 온도계 제공 및 눈에 잘 띄는 - 의견: 줄기 온도계는 식품 온도를 모니터링하는 데 필요합니다. 제공하고 유지하도록 지시받았습니다. "," 41. 구내에는 쓰레기, 불필요한 물품, 청소 장비가 적절하게 보관되어 있습니다. - 의견: 후면 준비 구역에서 바닥에서 6인치 높이로 올라가지 않은 몇 가지 항목을 관찰했습니다. 높이고 유지해야 합니다. "," 38. 환기: 필요에 따라 환기되는 객실 및 장비: 배관: 설치 및 유지 관리됨 - 설명: 후면 주방 음식 준비 구역에 손 세척 싱크대가 노출됨 배수가 느림. 반드시 수리하고 유지해야 합니다. "," 32. 식품 및 비식품 접촉 표면을 적절하게 설계, 구성 및 유지 관리 - 의견: 지하실에 녹슨 식품 보관 선반이 관찰되었습니다. 다시 칠하고 유지 관리해야 합니다. "," 34. 바닥: 규정에 따라 시공, 청소 완료, 양호한 수리, 덮개 설치, 먼지 없는 청소 방법 사용 - 설명: 지하실 바닥 팔레트 바닥에서 먼지와 파편이 관찰되었습니다. 청소하고 유지 관리해야 합니다."}
목록을 사용한 경험이 많지 않습니다.
목록 {}로 작업하는 것이 더 효율적일까요? Text to Columns 접근 방식을 사용할까요, 아니면 더 좋은 방법이 있을까요? 목록 접근 방식이 가장 효율적인 경우 목록의 각 행, 요소에 대해 테이블 > 스택과 동일한 작업을 수행하는 가장 효율적인 접근 방식은 무엇입니까?
또는 InspectionID#가 있는 열이 있습니다. 방대한 누적 테이블을 생성하는 대신 InspectionID#를 키로 사용하여 이를 두 개의 테이블로 나누는 것이 더 효율적일까요?
크레이지:
감사해요! 텍스트 분석 초보자인 저는 패턴 매칭 기능을 사용해 본 적이 없습니다. 문제에 대한 좋은 해결책. 나는 확실히 정규식과 패턴 일치에 대해 배우는 데 시간을 할애할 것입니다.
BTW - 텍스트 분석은 훌륭한 마스터링 JMP 웨비나 주제가 될 것입니다!
처음 100개의 행을 가지고 놀면 다음과 같은 맵이 있습니다.
LocationsLocations위치
댓글 필드만 가져오는 수식 열은 다음과 같습니다.
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;
텍스트 탐색기는 새 열을 사용하여 클러스터를 형성할 수 있습니다.
clustersclusters 클러스터
실제 검사 결과에 대한 의견에 대한 클러스터 번호를 플로팅하면 유망해 보입니다. 클러스터 2 댓글은 낙제점을 받지 않았고 클러스터 4 댓글은 실패했습니다. 일반적으로 "환기 후드 필터에 기름이 축적됨이 관찰되었습니다. 환기 후드 필터를 청소해야 함"(통과) vs "식용 장갑을 손으로 씻거나 제거하지 않음"(실패).
clustered by comment textclustered by comment text주석 텍스트로 클러스터링됨
145K 행이 구문 분석 아이디어에 비해 너무 느리다고 생각하지 않습니다. 각 유형의 위반(0 또는 1)에 대한 표시기 열이 필요하다고 생각합니다. JMP 13이 있는 경우 댓글에 텍스트 탐색기를 사용할 수 있습니다. 상수 설명 없이 모든 주석을 단일 문자 필드로 함께 실행하는 것이 좋습니다.