分析プログラムでは、厳密な行と列の構造を持つデータが必要であり、行は通常、独立した観測値として扱われます。原因と結果の図では、行は親子関係のペアによって記述される階層構造に配置されます。元々は品質管理におけるブレインストーミングの結果を記録するために考案されたこのプラットフォームは、他の構造を視覚化するための強力なツールとしても活用できます。
JSLスクリプトにおける汎用データ構造は、連想配列とリストです。これらの要素は、値だけでなく、リストや連想配列も使用でき、複雑なデータ構造を迅速かつ効率的に管理するためのフレームワークを提供します。システム通信で広く用いられているJSONインターフェースも、階層型データ構造の一例です。項目が異なる方法で処理され、処理後に様々なパラメータが測定される場合、実際の組み合わせを同じ方法で文書化できます。
本プレゼンテーションでは、リストまたは配列を走査し、すべての内容をデータテーブルに格納するJSL関数を紹介します(および関数を提供します)。原因と結果の図は、その内容をグラフィカルに表示します。アプリケーション例は、この概念の汎用性と強力さを示しています。
ようこそ。さあ、私と一緒に深層階層構造の世界を探検しましょう。まずはデータテーブルから始めましょう。これが私たちが見たいレイアウトです。完全なグリッドで、空白も欠損値もありません。しかし、このデータテーブルを見ると、レイアウトとウェハIDに重複した値があることがわかります。これは階層構造の存在を示しています。
まずは少し簡単なところから始めましょう。JMPスクリプト言語であるJSLを使って、階層構造とは何かを理解しましょう。これはリストです。リストは中括弧で囲まれ、要素は位置によって評価されます。ここで2番目の位置は私の姓であるHeinenです。
これは同じ内容ですが、連想配列になっています。連想配列は角括弧で囲まれ、要素には名前が付けられます。この要素は「fn」(first name)と呼ばれ、データがバインドされています。つまり、「first name」の内容がバインドされているということです。
データ構造を構築するには、2つの異なる方法があります。これらの構造は積み重ねることができ、次のような組み合わせ変換につながります。波括弧と角括弧がたくさん見られますが、最後には2つの角括弧と閉じられた波括弧があります。このような構造では、何がどこにあるのかを把握するのは非常に困難です。
しかし、これは知っておくべき重要な点です。特に、例えばコンピュータがインターネットサービスと通信するいわゆるRESTインターフェースでは、データはJSON構造で交換されますが、JSON構造はまさにリストと連想配列の組み合わせです。どこに何があるかを把握することが重要になります。
これを手動で行うのは少し面倒です。それを自動で行ってくれるプログラムがあります。私が作成したので、公開します。プログラミングの知識はほとんど必要ありません。重要な文は「for」と「recurse」の2つだけです。
For はループを意味します。この括弧内の内容は複数回繰り返されます。再帰は興味深いものです。JMP に対して、プログラム内の現在位置を覚えておき、アプリケーション全体を再度実行するように指示します。そして、処理が完了したら、この場所に戻って処理を続行します。再帰は、その性質上、任意の回数繰り返すことができます。
このプログラムは何をしますか?まず、全体の構造を取得します。リストか連想配列かを尋ね、そうであれば、これを親として割り当てます。階層構造を考える場合、世代、祖父母、親、子、孫などを考えることができます。これは最初の親世代です。
最初の要素、つまりそれらの最初の子要素を取得し、スタックレベルを上げて、現在第2世代であることを念頭に置き、最後に行き着くまで質問処理を最初からやり直します。最後には必ずデータ要素が残ります。
次に、このデータ要素のすべての情報を保存し、スタックレベルを下げて、1世代前に戻ります。孫世代にいる場合、1世代前に戻って、その世代に兄弟姉妹がいるかどうかを尋ねます。いる場合は、次の兄弟姉妹を取得し、兄弟姉妹がいなくなるまでプロセス全体を繰り返します。これは最終的に最上位の祖父母世代で発生します。その後、出力を作成します。
この場合の出力、あるいは例として、相互比較では、標準化された部品が研究所に送られ、そこで異なる分析装置でテストされ、異なるグループの測定値が出力されます。
そのデータは分析され、この表に表示されます。親と子の列があることがわかります。何が起こったのか分かりやすくするために、少し色を付けました。これは最初のデータ要素への最初のパスで、次にその兄弟要素すべて、1つ上のレベル、そこで既に終わりがあり、それ以上の子要素はなく、さらに1つ上のレベルと次の構造要素が見つかります。
データも保存しているので、各ステップで何について話しているのかが明確です。ラボのこと、部品のこと、ラボ分析の測定値のグループのことなどです。一番下には、この場合は変動係数(cv)と呼ばれる値があります。
このようなデータテーブルをどう活用すればいいのでしょうか?この図を作成したいのです。これは「分析」メニューの「分析」→「品質とプロセス」→「図」から行えます。以前にも作成したことがあるので、自動的に入力できます。難しいことは何もありません。
デフォルトはフィッシュボーン図です。一番最後に、ここに全体のセットがあります。これは読みにくいです。ここで右クリックして、タイプを階層に変更できます。これで、最大 7 レベルの階層があり、ここから全体のセットが始まり、以下同様です。連想配列があります。リストもあります。
これらのグループ内でどのようにナビゲートするのでしょうか? もちろん、まずは全体のセットから始めます。次に、パーツの連想配列を 1 レベル下に進み、さらに最初のラップを 1 レベル下に進みます。線が右に大きく伸びているので、ラップがいくつも、あるいはいくつかあることがわかります。アナライザーの 1 つ、この場合は E2 を取ります。測定値のグループがリストになっており、リストの 3 番目の要素は値が 6 のデータ ポイントです。
これはまさにプログラマーがデータポイントにアクセスする方法です。このような構造をたどって探すよりも、はるかに簡単に見つけて理解できます。分析を行うプログラムがあり、アプリケーション、JSONインターフェース、RESTインターフェース、JSON構造など、この方法が非常に役立ちます。
すべて完璧ですか? スクリプトは、構造が既にJSL構造であることを前提としています。ユーザーが「これは私のデータテーブルです。これは私の列の階層です。このようなグラフを生成してください」と指定できるユーザーインターフェースがあれば便利かもしれません。そうすれば、プログラムはそのように生成します。
この図を扱っていると、現代のプラットフォームのようにJMPに完全に統合されていないことに気づくかもしれません。どうやらJMP 2か3の頃から存在しているようです。JMP開発チームの方がこのレビューを読んでいるなら、ぜひこのプラットフォームを改良してください。
私のディスカバリー・プレゼンテーションのウェブページから、そのスクリプトを入手できます。ご興味のある方、ご質問のある方、3月7日(木)のディスカバリー・サミットで私に会いたい方は、ボールルームの展示ブース2にお越しください。必ずそこにいます。