<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />내 안에 너무 이른 블로그 게시물에서 Excel에서 JMP로 BodyMedia® Activity Summary 데이터 파일을 가져온 방법에 대해 설명했습니다. 오늘, BodyMedia® 푸드 로그를 JMP에 거의 4 년 동안 자동으로 가져 오는 방법에 대해 알려 드리겠습니다. 나는 또한 추가 기능 자신의 활동 요약 및 식품 로그 파일뿐만 아니라 인기있는 무료 MyFitnessPal 식품 로깅 웹 사이트의 CSV 형식의 식품 로그 파일을 가져 오는 데 사용할 수있는 JMP 파일 교환에 연결하십시오.
나를 위해 포스터 프로젝트 (아래 세부 정보 참조), JSL 스크립트를 작성하여 BodyMedia® 소프트웨어에서 내 보낸 약 50 개의 활동 요약 Excel 파일과 50 개의 음식 로그 파일을 결합하여 12/20/2010에서 7/28/14 기간 동안 분석하고 구문을 분석했습니다. BodyMedia® 웹 기반 활동 모니터 소프트웨어에서 내 음식 로그 파일을 PDF 형식으로 내보냈습니다.
음식 로그 파일 작업을 처음 시작했을 때 JMP가 PDF 형식에서 가져 오기를 지원하지 않기 때문에 직접 처리 할 수 없다는 것을 깨달았습니다. 뒤따른 경험을 통해 왜 그런지 이해할 수있었습니다. 나는 고객이 JMP가 PDF 가져 오기에 대한 지원을 추가해야한다고 제안한다고 들었습니다. JMP 개발자는 PDF의 표를 프레젠테이션 목적으로 사용하고 JMP가 지원하는 다른 파일 형식과 같은 일반 형식으로 구성하지 않을 것이라고 응답합니다. 나는이 파일을 내 자신의 파일로 직접 경험했다.
처음에는 필자의 PDF 음식 로그 파일을 Excel 형식으로 변환하고 이전과 비슷한 방식으로 가져올 수 있다고 생각했습니다. 내 활동 요약 파일 가져 오기 . 쉬운 PDF-to-Excel 변환을 약속하는 다양한 소프트웨어 제품을 시험해 보았지만, 전체 경험을 서사시가 실패한 것으로 만 특성화 할 수 있습니다. 변환 된 테이블의 구조가 페이지마다 매우 불규칙하다는 것을 알게되었습니다. 하나의 엑셀 파일을 수작업으로 편집하는 시간을 좀 더 정규 형식으로 보낸 후에 나는 포기했다. 나는이 엄청나게 지루한 작업에 1 분을 더 소비하는 것을 상상할 수 없었습니다. 그리고 그 시점에서 처리 할 파일이 40 개였습니다! Discovery Summit 2017에서 가져온 데이터를 가져올 때까지 기다릴 용의가 없었기 때문에 더 쉽고 빠른 경로를 찾기로했습니다.
Adobe Acrobat을 사용하여 PDF 파일을 텍스트 파일로 저장할 수 있음을 발견했습니다. 불행히도 파일에는 다양한 길이의 공백으로 구분 된 항목 이름이 포함되어 있으며 그 다음에 칼로리, 서빙 크기 및 대량 영양소 양을 나타내는 공백으로 구분 된 숫자가 나옵니다. JMP의 포인트 앤 클릭 텍스트 가져 오기 옵션에는 필드 사이에 고정 길이 또는 구분 기호가 필요하므로 어느 옵션도 내 파일에서 분석 준비 데이터 테이블을 생성하지 않았습니다. 대신 Activity Summary Excel 파일을 가져 오기 위해 작성한 것과 비슷한 구조로 루프를 사용하여 파일을 가져 와서 결합했습니다. (필자가 이전 글을 읽었을 때, 텍스트 가져 오기 JSL 예제에서 SESUG 논문 작성자 : 마이클 헤 흐트 .
일단 내 파일을 가져 와서 연결하면 JSL의 정규식을 사용하여 각 텍스트 줄에서 개별 정보를 파싱 할 수 있습니다. 처음에는이 길에 대해 약간의 공포감이있었습니다. 대학원 정규 표현식으로 Perl을 사용했지만 정규 표현식 기술은 녹슬었고 이전에는 JSL에서 정규 표현식을 사용하지 않았습니다. JMP에서 정규 표현식 엔진을 구현 한 JMP 개발자 Craige Hales를 방문했으며 많은 도움과 격려를 아끼지 않았습니다.
추가 분석을 위해 테이블을 포맷하려면 테이블의 모든 행을 반복하고 날짜, 식사 이름, 칼로리 내용 및 다양한 다량 영양소 유형의 그램에 해당하는 패턴을 일치시켜야했습니다. 다음과 같은 루프를 사용하여 필요한 데이터를 분석하고 각 정보를 자체 열에 배치했습니다. 아래에서, 나는 식사 이름을 확인하고 그것이 나타나는 곳에서 그것을 잡았습니다 - 매일 첫 줄에. 그런 다음 다음 식사의 항목 시작을 나타내는 새로운 일치 항목이 나올 때까지 식사 이름 열의 셀에 해당 식사 이름 값을 채웠습니다.
// 캡처 식사
for (c = 1, c <= y, c ++,
문자열 = 조합 로그 : 라이프 스타일 및 칼로리 관리 시스템;
// 식사 이름과 일치하는지 확인합니다.
w = (정규식 일치 (
끈,
팻 Regex ( "^ (아침 식사 | 오전 스낵 | 점심 | 오후 스낵 | 저녁 | 늦은 스낵) (. * $)")));
if (N Items (w) == 0,
조합 기록 : 식사= 식사;
계속 ());
복합 로그 : 라이프 스타일 및 칼로리 관리 시스템= w [3];
조합 기록 : 식사= w [2];
식사 = w [2];
);
위에 표시된 일반 정규식 매칭 전략을 사용하여 필요한 모든 정보를 추출했습니다. 내 스크립트의 최종 버전을 실행 한 후 날짜와 식사별로 정렬 된 관련 칼로리 및 다량 영양 정보가있는 34,432 행의 식품 항목 이름이 포함 된 멋지게 형식화 된 표가있었습니다.
BodyMedia 식품 로그 파일을 PDF 형식으로 저장 한 경우 Adobe Acrobat의 텍스트 파일에 저장하고 다운로드 할 수 있습니다. 추가 기능 JMP File Exchange에서 자신의 푸드 로그 파일을 포인트 앤 클릭 (point-and-click)하여 JMP로 가져올 수 있습니다. 이 추가 기능의 도구는 활동 요약 파일, MyFitnessPal에서 내 보낸 텍스트로 저장된 음식 로그 파일 및 음식 로그 텍스트 파일을 지원합니다. JMP 테스트 매니저 Audrey Shull과 테스터 Melanie Drake에게 스크립팅 제안 및 추가 기능 테스팅 도움에 감사드립니다!
불행히도 성공적인 수입으로 느낀 승리의 의미는 오래 가지 못했습니다. 나의 탁자에 대한 간략한 요약은 그것이 1,800 가지 이상의 독특한 식품 항목 이름을 포함하고 있음을 나타 냈습니다! 나는이 데이터 테이블을 사용한 작업이 이제 막 시작되었음을 깨닫기 시작했습니다. 수년 동안 식품 항목 데이터베이스에서 매우 다른 이름을 지녔지 만 매우 유사한 항목을 다양하게 선택했기 때문에 내 식량 일지에는 명명 불일치가있었습니다. 제가 음식 로그 데이터의 패턴을 이해하기 시작하려면 음식 항목 이름을 정리하고 더 의미있는 방식으로 그룹화해야했습니다. 이 블로그 시리즈의 4 부에 대해 계속 지켜보고 음식 아이템 이름 레코딩에 대한 내 모험에 대해 자세히 알아보십시오.
이 최근 체크 아웃 블로그 게시물 "QS (quantified self) 분석 프로젝트에 대한 관심이 어떻게 디스커버리 서밋 (Joint Discovery Summit) 2014 전자 포스터 인 JMP를 이용한 개인 다이어트 및 피트니스 데이터 분석"을 만들었는지에 대해 자세히 알아보십시오. "내 전자 포스터를 캐리의 회의에서 로그인하고 볼 수 있습니다. PDF 버전 JMP 사용자 커뮤니티의 Discovery Summit 2014 섹션