<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />私の中で前ブログ記事では、BodyMedia®Activity SummaryデータファイルをExcelからJMPにインポートする方法について説明しました。今日は、私のBodyMedia®食品ログの約4年間をJMPに自動インポートする方法を共有します。私もアップロードしました加える JMP File Exchangeにアクセスして、自分のActivity SummaryおよびFood Logファイル、および人気の無料のMyFitnessPal Food Logging WebサイトからCSV形式のFood Logファイルをインポートできます。
私のためにポスタープロジェクト (以下の詳細を参照)、私はBodyMedia®ソフトウェアからエクスポートされた約50のActivity Summary Excelファイルと50のフードログファイルを結合、解析、フォーマットするためのJSLスクリプトを作成しました。私はBodyMedia®のWebベースのActivity MonitorソフトウェアからPDF形式で自分のフードログファイルをエクスポートしました。
私が最初に自分のフードログファイルで作業を始めたとき、JMPはPDFフォーマットからのインポートをサポートしていないので、それらを直接処理することはできないだろうと思いました。その後の経験から、それが事実である理由の理解が深まりました。私は、JMPがPDFインポートのサポートを追加すべきであると顧客から提案されていると聞きました、そしてJMP開発者はPDFのテーブルはプレゼンテーション目的のためのものであると答えました。私は自分自身のファイルでこれを直接経験しました!
当初、私は自分のPDF形式のフードログファイルをExcel形式に変換して、以前と同じ方法でそれらをインポートできると考えました。活動概要ファイルをインポートする 。私は簡単にPDFからExcelへの変換を約束するさまざまなソフトウェア製品を試したが、私は叙事詩の失敗として全体の経験を特徴付けることしかできない。変換されたテーブルの構造は、ページごとに非常に不規則であることがわかりました。1つのExcelファイルを手動でもっと普通のフォーマットに編集するのに一時間を費やした後、私はあきらめた。私はこの信じられないほど退屈な仕事にもう少し費やすことを想像できませんでした、そして私はその時点で処理するために40のファイルを持っていました!Discovery Summit 2017までデータをインポートするのを待つつもりはありませんでしたので、もっと簡単で速いルートを探すことにしました。
私は、Adobe Acrobatを使用して自分のPDFファイルをテキストファイルとして保存できることを発見しました。残念ながら、ファイルには長さが変わるスペース区切りの項目名が含まれ、その後にカロリー、1回分の量、および主要栄養素量を表すスペース区切りの数字が続きます。JMPのポイントアンドクリックによるテキストインポートオプションは、フィールド間の固定長または区切り文字を必要とするため、どちらのオプションも私のファイルから分析可能なデータテーブルを生成しませんでした。代わりに、Activity Summary Excelファイルをインポートするために書いたループと構造が似たループを使用して、ファイルをインポートし結合することにしました。(あなたが私の以前の記事を読んだならば、あなたは私がからのテキストインポートJSLの例から大いに借りたことを知っています SESUG紙によって書かれたマイケル・ヘクト 。
ファイルをインポートして連結したら、JSLの正規表現を使用して各テキスト行から個々の情報を解析できます。私は最初この道について少し不安を感じました。大学院で正規表現にPerlを使用したことがありましたが、私の正規表現のスキルはさびたもので、JSLではこれまで正規表現を使用したことはありませんでした。私はJMPで正規表現エンジンを実装したJMP開発者Craige Halesを訪問し、彼はたくさんの励ましと役に立つ例へのポインタを提供しました。
さらに分析するためにテーブルをフォーマットするには、テーブル内のすべての行をループ処理し、日付、食事名、カロリー量、さまざまな主要栄養素タイプのグラムに対応するパターンを一致させる必要がありました。次のようなループを使用して、必要なデータを解析し、各情報をそれぞれ独自の列に配置しました。以下で、私は食事名をチェックし、それが出現した場所からそれをキャプチャしました - 毎日の最初の行に。次に、次の食事の商品の開始を示す、新しい一致が見つかるまで、[食事]列のセルにその食事名の値を入力しました。
//食事をとらえる
(c = 1、c <= y、c ++、
string = Combinedlog:ライフスタイルとカロリー管理システム;
//食事名との一致を確認する
w =(正規表現マッチ(
ひも、
Pat Regex( "^(朝食| AMスナック|ランチ| PMスナック|ディナー|レイトスナック)(。* $)"));
(N個の項目(w)== 0の場合)
複合ログ:食事=食事;
持続する ());
Combinedlog:ライフスタイルとカロリー管理システム= w [3];
複合ログ:食事= w [2];
食事= w [2];
;
上記の一般的な正規表現照合方法を使用して、必要な情報をすべて抽出しました。私のスクリプトの最終版を実行した後、私は日付と食事によって編成された関連するカロリーと主要栄養素の情報を含む34,432行の食品名の良いフォーマットの表を持っていました。
PDF形式で保存されたBodyMediaフードログファイルがある場合は、それらをAdobe Acrobatのテキストファイルに保存して、私の加える JMPファイル交換からJMPへのあなた自身のフードログファイルのポイントアンドクリックインポートを実行します。このアドインのツールは、アクティビティサマリファイル、テキストとして保存されたフードログファイル、およびMyFitnessPalからエクスポートされたフードログテキストファイルをサポートします。スクリプトの提案とアドインテストの手助けをしてくれたJMPテストマネージャーAudrey ShullとテスターMelanie Drakeに感謝します。
残念ながら、私の輸入成功から感じた勝利の感覚は短命でした。私のテーブルを簡単に要約すると、1,800を超える固有の食品名が含まれていることがわかりました。私はこのデータテーブルを使った作業が始まったばかりであることに気づき始めました。私は何年にもわたって食品データベースから様々に異なる名前で似ているものを選んだので、私の食品ログは命名の矛盾に満ちていました。自分のフードログデータのパターンを理解し始めたい場合は、自分のフードアイテム名を整理し、それらをより意味のある方法でグループ化する必要がありました。このブログシリーズの第4回では、私の食品名の書き換えへの冒険についてもっと学んでください。
最近チェックしてくださいブログ記事定量的自己分析(QS)分析プロジェクトへの関心が、JMPによる個人の食事とフィットネスデータの分析と題したDiscovery Summit 2014の電子ポスターを作成した方法の詳細については、Caryでの会議、ログインして見ることができます PDF版 JMPユーザーコミュニティのDiscovery Summit 2014セクションにあります。