| スピーカー |
トランスクリプト |
| ジョーダン・ヒラー |
皆さん、こんにちは。Jordan Hillerです。今回の講演は「このコードを盗め!拡張ログから得られるスクリプトの3つのアップグレード」です。 |
| |
さて、今回の講演のインスピレーションはこれです。挑発家で活動家のアビー・ホフマンの本です。そう、彼は著書に『Steal this Book(この本を盗め)』というタイトルをつけました。素晴らしいタイトルですね。自分の本にそんなタイトルをつけるのがビジネスプランとして良いかどうかは分かりませんが、とにかくとてもキャッチーです。 |
| |
では、なぜこのコードを盗むのでしょうか?JMPはコードを盗むことを望んでいます。JMPでは、ポイントアンドクリックで分析を実行できるのです。 |
| |
ポイント&クリックの背後にあるコードは保存されます。拡張ログに保存されるので、取り出して再利用できます。 |
| |
これが本番環境のスクリプトの約90%です。これを再利用して、 |
| |
一般的なタスクを自動化し、ポイントアンドクリックの連続操作ではなく、ボタン1つをクリックするだけで実行できるようにします。これがここでの目標です。 |
| |
拡張ログからのスクリプト、それが本番スクリプトの骨組みになります。 |
| |
残りの約10%は自分で書く必要がありますが、それが今回の講演の目的です。制作スクリプトをまとめる結合組織についてお話しします。 |
| |
この講演では、構文の細かい部分ではなく、 |
| |
全体像をより深く理解し、それがJSLプログラミングを学ぶ良い方法だと考えています。既存のコードを使って例から学ぶ方がはるかに効果的です。そのコードを使ってください。 |
| |
やりたいことを実現するスニペットを見つけてください。JMPユーザーコミュニティか、スクリプトガイドで見つかるかもしれません。 |
| |
それをコピーして、自分の用途に合わせて調整するだけです。複雑な構文をすべて理解する必要はありません。そうすれば、かなり上達します。構文は経験を積むにつれて自然に身に付くものです。 |
| |
では、拡張ログからコードを強化するための3つのケーススタディについてお話ししますが、まずはJSLについておさらいしましょう。もしかしたら、皆さんの中にはJSLの基礎を少し学ぶことになるかもしれません。 |
| |
JSLを始めるにあたって知っておくべき重要なことは、すべてがオブジェクトであるということです。 |
| |
何かをしたいのはオブジェクトなので、データテーブルとデータテーブル内の列、分布プラットフォーム、グラフビルダー、Fit Y by Xなどのプラットフォームが含まれます。 |
| |
そして、それらのプラットフォームから送られてくるレポートです。オブジェクトがある場合、それを操作するにはメッセージを送信します。オブジェクトはメッセージを受信します。これは、拡張ログからコピーした非常に簡単な例です。 |
| |
サンプルデータディレクトリにあるBig Classデータテーブルを開き、簡単な分布分析を実行してみましょう。ログからコピーしたコードは以下のようになります。 |
| |
今。 |
| |
まず最初に、データテーブルに名前を付けます。名前を付けるために、5行目のコードを拡張しました。 |
| |
bctable= を残りの部分、つまりステートメントの open 部分の前に追加しました。これで、データテーブルを開くと bctable という名前が作成されます。私は bctable を選択しましたが、ドキュメントには dt と記載されています。これはご自身で割り当てた名前なので、お好きな名前を使用してください。 |
| |
では、これをハイライトして実行ボタンをクリックし、Big Classを開いてbctableという名前を割り当てて実行してみましょう。これを行う利点、そしてなぜそれが重要なのかというと、これで次のコードができたからです。 |
| |
ハンドル。これは後でコード内で使えるフックで、bctable です。bctable と言うときは、Big Class のことを言っています。 |
| |
それで |
| |
次の行は配布コマンドですが、これも変更しました。ログに記録されているのは、配布コマンドそのものです。何も… |
| |
データテーブルを指していません。このように実行すると、JMPはフォーカスのあるデータテーブルに対してのみ実行します。 |
| |
現在のデータテーブルは、直前に開いたため、大きなクラスになっています。ただし、明示的に指定することは常に良いことです。どのデータテーブルに対して操作を行うのかを明示的に指定するのが良いでしょう。それでは、このように実行してみましょう。 |
| |
bctable、そして二重矢印、そして配布コマンドです。これが二重矢印のbctableを追加したものです。 |
| |
これはメッセージを送信するための構文です。右側の分散メッセージを、左側のbctableという名前のデータテーブルに送信しています。bctableにマウスオーバーすると、Big Classであることがわかります。このコード全体を実行すると、 |
| |
配布レポートを受け取る |
| |
私たちが望んでいたもの。 |
| |
さて、ここでもう一歩進めてみます。これはよくあることですが、プラットフォームを運用する際に名前を付けます。 |
| |
ここに二重矢印とイコールの両方が組み込まれた行がありますね。それでは…右から左へ読んでいきましょう。この配布メッセージを取得して、bctableに送信します。 |
| |
そして、そのすべての結果、つまりプラットフォームを、distplat という変数に保存します。 |
| |
それを実行してみましょう。 |
| |
はい、同じように見えますが、違いは、後でコード内で使用できる JSL 変数 distplat があることです。 |
| |
これを何に使うのでしょうか?出力に赤い三角形のオプションを追加するために使うかもしれません。それでは、これをここに持ってくることにしましょう... |
| |
配布レポートを皆さんが見ることができる場所に持ってきましょう。 |
| |
そして、その distplat オブジェクトを取得します。これは、配布プラットフォームです。 |
| |
ほら、マウスオーバーしてこの線を実行してみましょう。分布プラットフォームで正規分布五分位プロットをオンにしてください。そこにあります。 |
| |
わかった。 |
| |
最後のステップは、プラットフォームを取り、このオブジェクトをここに持ってきて、 |
| |
そこからレポートオブジェクトを取得します。これがこの行です。プラットフォームオブジェクトにレポートメッセージを送信すると、レポートオブジェクトが取得されます。 |
| |
コード内でこれらの値(レポート内の数値やグラフ、グラフィック要素など)にアクセスしたい場合は、rdistplatというオブジェクトが必要です。rdistplatをもう一度実行してください。 |
| |
実行してみましたが、目に見えて何も表示されません。しかし、rdistplatというオブジェクトが作成されました。これは表示ボックスと表示されており、後ほど、このオブジェクトを使ってレポート内の数値にアクセスする方法について説明します。 |
| |
ログをクリアします |
| |
まずは |
| |
ケーススタディ。 |
| |
最初に学ぶテクニックは、データテーブル内の異なる列に対して同じコマンドを何度も繰り返し実行することです。for eachコマンドを使ってループ処理を行い、列を反復処理します。 |
| |
これは本当に一般的なニーズであり、列の形式やモデリング タイプを変更するなど、単純な操作だけが必要な場合もあります。 |
| |
非常に複雑なものになる可能性がある |
| |
列の変換を行って管理図を作成し、その管理図を使って何かを行います。つまり、この手法はスケールするということです。 |
| |
JSLコードでこれを実現する方法を説明します。まず、ポイント&クリックして、やりたいことを実行します。1つの列に対して実行し、拡張ログを使ってそのコードを取得します。 |
| |
これがスクリプトの骨組みです。これを修正して、アクションを実行したいすべての列をループ処理するようにします。 |
| |
ループや反復処理に使用するメソッドは for each ですが、これは JMP 16 で導入されたため、この手法は JMP の以前のバージョンでは機能しません。 |
| |
これには JSL リストと呼ばれる概念も使用されているので、これについても少し説明します。 |
| |
では、始めます |
| |
JMP では、ホーム ウィンドウから始めます。 |
| |
では…ログを確認して、クリーンな状態か確認します。いや、一つだけ削除する必要があるのは、ログをクリアすることです。では、やりたいことをポイントしてクリックしてみましょう。sc20というデータテーブルを開きます。 |
| |
このデータ テーブルは、オンラインで入手できるプレゼンテーション資料で入手できます。 |
| |
このデータテーブルを見ると、ID列があり、約20個の |
| |
データの列です。小数点以下の桁数が非常に多く、精度が高すぎるため、小数点以下2桁で切り捨てたいのです。そこで、データの小数点以下2桁だけを表示するようにフォーマットを変更しましょう。 |
| |
簡単なポイントアンドクリック操作です。右クリックして列情報に移動し、 |
| |
表示形式をデフォルトの最適なものから 2 桁の小数点に固定するように変更します。 |
| |
さて、NPN1 に対してこれを実行しましたが、他に 19 列に対しても同様の処理を実行したいと考えています。 |
| |
それでは、拡張されたログを調べてみましょう。 |
| |
これが、NPN1列のフォーマットを変更するために必要なコードです。これを再利用するには、赤い三角形をクリックして、スクリプトをクリップボードに保存するか、新しいスクリプトウィンドウに保存します。 |
| |
いくつか作業を行った別のファイルに切り替えて、もう少し詳しく調べてみましょう。 |
| |
わかった。 |
| |
ここの最初の2行…3行はログからのコードです。まずはデータテーブルを開きます。 |
| |
少し編集したことに気付いたかもしれません。このファイルへの長いパス名と長いディレクトリ パスを編集しました。 |
| |
このように実行すると、 |
| |
JMPデータテーブルsc20がこのJSLファイルと同じディレクトリにある限り動作します。つまり、これは現在いるディレクトリへのローカルファイルパスのようなものです。 |
| |
とにかく、ログからデータ テーブルを開いて、ここで形式の変更を適用し、小数点 10 桁を固定し、小数点 2 桁にします。 |
| |
テーブル参照…左側の列参照は、列を指定する方法の一つです。他にもいくつか方法がありますが、これはコロンを使った非常に一般的な方法です。コロンの左側にテーブル参照…参照…参照、右側に列名を指定します。 |
| |
これもログから直接取得したものです。 |
| |
JMPはログ内でデータテーブルを参照するためにこの方法を使用しています。先ほどお話ししたように、JSLを開く際にJSL名を指定して、その後はそのJSL名を使用する方がよいと思います。そこで、コロンの前の「」を「dt」に変更しました。 |
| |
同じコードを少し修正しただけですが、実行すると、確かに正しい結果が得られます。データテーブルが開き、 |
| |
書式を小数点2桁に変更します。これで、かなり簡単に |
| |
残りの19列もすべて変更します。NPN1がありますね。この行をコピーして、すべてを変更し、さらに19回書きます。 |
| |
ええ、もちろんそれは非効率的です。プログラミングの素晴らしい点の一つは、同じことを何度も繰り返す必要がないことです。つまり、これを19回、20回と書く代わりに、一度だけ書けばメンテナンスが楽になるということです。 |
| |
では、そのやり方を説明します。まず、操作対象となるすべての列のリストを取得します。 |
| |
ここで言う「リスト」とは、単なる一般的なリストのことではありません。JSLリスト、つまりJSLでプログラミングする際に使用する特定のデータ構造のことです。 |
| |
リストとは、コンテナに格納された複数のオブジェクトで構成されており、ここではその使い方を説明します。ここでは、列オブジェクトのリストを作成する3つの方法を紹介します。 |
| |
最初の方法は手動で行う方法で、すべてを入力するだけです。これを実行すると、 |
| |
3 つのテーブル参照...3 つの列参照、NPN1、PNP1、PNP2。 |
| |
コード内と、CNames変数にマウスオーバーした際に中括弧が使われていることにご注目ください。これらの中括弧を見ると、JSLのリストを扱っていることがわかります。 |
| |
さて、これがリストを取得する一つの方法です。他の方法もいくつか見ていきましょう。この例では、最終的にこれを使用します。 |
| |
つまり、現在のデータテーブル(ここではdtと名付けたデータテーブル)にある連続した列をすべて取得するということです。メッセージオブジェクトを使って新しいリストを作成します。 |
| |
ではこれを実行してみましょう。 |
| |
CNamesにマウスを合わせると、これが目的のものです。操作対象となる20個のリストが表示されます。 |
| |
最後に、データテーブル内の列をユーザーに選択させる方法があります。このようになります。2つだけ選択してみましょう。IVPとPNP4の2列を選択しましょう。 |
| |
これを実行すると、 |
| |
データ テーブルから選択した 2 つの列だけを含むリストが取得されます。 |
| |
さて、リストを取得したら、次の作業は、リスト内の各項目に書式設定行を適用することです。これはループまたは反復処理と呼ばれます。 |
| |
では、古いやり方をご紹介します。JMPのforコマンドを使います。これはJMP 16より前のバージョンで使っていたやり方で、まだJMP 15を使っている方のためにここに載せておきます。しかし、 |
| |
ご存知のとおり、これは少し複雑で、新しいユーザーを探すのが大変です。そこで、JMP 16 でリストを使用する場合は、よりコンパクトで読みやすい方法があります。リストのすべての要素に対してアクションを繰り返したい場合は、各コマンドに対してこれを使用できます。 |
| |
では、実際に何をしているのか見てみましょう。3つの引数を取ります。引数はカンマで区切られており、右から左へ渡していきます。 |
| |
最後の引数は、フォーマット コマンドです。フォーマットを適用します。dt NPN1 に対して行う代わりに、1 つの列に対して行う代わりに、ここにプレースホルダーを配置してリスト項目を選択しました。必要なものを選択します。 |
| |
そうです、これは単なる単語、変数名です。あなたが選んでください。私はリスト項目を選びました。これがプレースホルダーで、これがリストの各項目に対して実行したいコマンドです。どのリストですか?このリストですね。これが私たちのリストです。これが2番目のリストです。 |
| |
引数です。そして最初の引数はプレースホルダーです。これは、リスト内の要素の値を保持するためにプレースホルダーを使用していることを示しています。 |
| |
これは中括弧で囲まれているので、このコードを再利用する場合は必ず中括弧を使用してください。 |
| |
全体の見た目はこんな感じです。20行以上のコードの代わりに、たった3行のコードで済みます。これにはデータテーブルを開く処理も含まれます。 |
| |
列名のリストを取得し、それを繰り返します…このアクションを連続する20列すべてに対して繰り返します。全体を実行すると、どのような結果になるかがわかります。 |
| |
それで、ここにあります。それぞれの列は |
| |
形式では小数点以下 2 桁が表示されます。 |
| |
これは、for eachを使って非常に単純な処理を実行する例です。 |
| |
列の上。 |
| |
もう少し興味深い例をお見せしましょう。 |
| |
同じデータセットのsc20の場合の例を示します。 |
| |
それぞれの列に管理図を作成し、それをジャーナルに添付して、全体をPDFとして保存します。 |
| |
同じ for each を使っていて、最初の2つの引数も同じです。つまり、リスト項目が1つ目で、2つ目にリスト名を指定します。しかし、3つ目の項目として、つまり for each の3つ目の引数として、たくさんのコードが書かれています。 |
| |
さあ、始めましょう。このスクリプト全体を実行してみましょう。 |
| |
たくさんの管理図を開いて、実行し、ジャーナルにまとめます。そして今、デスクトップを見ると、report.pdf が作成されています。そこには、すべての管理図と1ページ目、そしてそれらを区切るための改ページが含まれています。つまり、1ページ目、2ページ目、3ページ目です。 |
| |
この例も、プレゼンテーション資料に含まれていますので、お時間のある時にご覧ください。 |
| |
さて、これが今回お話しする最初のテクニックです。次のテクニックのためにログをクリアしましょう。 |
| |
さて、レポートから値を抽出します。これはJSLではよくあることです。何らかの分析、例えば分布や回帰分析などを行うには、 |
| |
そこから何かを得て、何かを収集します。平均値や中央値かもしれません。回帰分析の傾き係数やP値かもしれません。 |
| |
これが私たちの仕事です。ここで難しいのは、レポートが階層構造になっており、高度にネストされているため、その階層構造をたどってツリーを辿って、まさに欲しいものを見つけるのが少し難しい場合があることです。そこで、ちょっとしたコツをお教えします。 |
| |
コツは、いつものようにポイントしてクリックして分析を進め、次に取得したいものをクリックすることです。 |
| |
テキストの色を赤に変更します。これはちょっとした書式変更です。そして、このスクリプトをログに保存すると、その赤い項目への対処方法を学習します。 |
| |
JSLで。それでは一緒にやってみましょう。 |
| |
再び JMP に戻ります。 |
| |
古き良き Big Class を開いて、高さの列で分布を実行してみましょう。 |
| |
さて、これが分布レポートです。ここから何かを抽出したいのですが、例えば中央値、今回の場合は63です。これをJSL変数に格納して、後で再利用できるようにします。この変数を使って何かを書き込んだり、計算したり、といったことができます。 |
| |
63 という数字に対処する方法を見つけるためのコツは次のとおりです。 |
| |
取得したいものの色やフォントなどを変更します。まだ見たことがない方は、やり方を知っておくと便利です。 |
| |
ツールバーにプロパティのボタンがありますが、これは JMP 16 の新しいボタンだと思います。 |
| |
したがって、このレポートのプロパティをオンにすると、 |
| |
この木を下りていけば、必要なものが見つかります。それでは、これをご覧ください。 |
| |
右側の番号列ボックスです。レポートのさまざまな部分をクリックすると、対応する |
| |
アイテム、つまり表示ボックスの種類がプロパティ パネルで強調表示されます。 |
| |
さて、これらすべての結果が含まれているこのものは、すべての数字が入った数値ボックスであることがわかります。先ほど言ったように、これを取得して、テキストの色を赤に変更します。 |
| |
まさにその通りです。 |
| |
ここで、プロパティ パネルを閉じます。 |
| |
レポートがあるので、このスクリプトを拡張ログに送信しましょう。 |
| |
赤い三角形は、スクリプトをログに保存します。 |
| |
そして今、そのログを表示しています。 |
| |
これが必要な部分です。分布コマンドと、中央値やその他の統計値のテキストの色を赤に変更する部分があります。それでは、もう少し詳しく見ていきましょう。 |
| |
さて、これがそのコードです…拡張ログと同じコードです。ここにコピーして少し整形したので、必要な機能について詳しく説明できます。 |
| |
私たちがこれをやった主な理由は、これから解釈するこの部分を取得するためです。これはsendを使ってレポートし、その中でdispatchを使っています。 |
| |
ここでは、ディスパッチの4つの引数に注目します。最初の3つは必要ですが、4つ目の引数は色の変更ですが、これは本来の目的ではありません。私たちが注目しているのは、表示ボックス、つまり必要な要素への対応です。 |
| |
最初の引数はナビゲーションです。これは、表示ボックス(実際にはアウトラインボックス)まで下がって、アウトラインボックスまで下がって、 |
| |
では、このレポートを見てみましょう。JMPでは、レポートにネストレベルがあることに気づいたと思います。そして、ここに… |
| |
外側のアウトラインボックスの分布。その中にアウトラインボックスの高さがあり、その中にアウトラインボックスの四分位数があり、その四分位数の中に抽出したいものがあります。 |
| |
これが私に伝えようとしていることです。あの木を下りろと言っているのです。必要なのは高さと四分位数だけで、これで木が何なのかが分かります。 |
| |
いいですね。次の2つの引数は、この要素、つまり赤く塗りつぶした要素について何かを示しています。3つ目の引数は、それが何であるかを示しています。数値ボックスであることは、プロパティで確認しました。 |
| |
2番目の引数はタイトルを指定します |
| |
番号欄のボックスです。これは空白です。タイトルはありませんが、問題ありません。この情報を使ってデータを取得することはできますので、タイトルが表示される場合と表示されない場合があります。 |
| |
さて、この情報を使って |
| |
中央値を抽出します。 |
| |
これを実行するコードは次のとおりです。23行目から29行目までです。 |
| |
データテーブルをもう一度開きます |
| |
配布に名前を付け、連続配布を実行します。 |
| |
ディスパッチやレポートへの送信がないことに気付くでしょう。これは、本番スクリプトでこれを赤にする必要がないためです。 |
| |
そうですね、配布分析を実行し、プラットフォームに名前を付けます。 |
| |
これは重要です。レポートレイヤーにアクセスしているということです。この行で抽出しているので、rdist、つまりレポートオブジェクトを作成しています。 |
| |
そして、魔法が起こるのはこのラインです。ここで私たちは |
| |
中央値をJSL変数mdnに代入し、今回はログに書き込みます。これについてはもう少し詳しく説明しますが、まずは一度まとめて実行して、どのような動作をするのかを確認しましょう。 |
| |
23行目を実行しようとしたんですが、おっと、代わりにこうしましょう。23行目から29行目までを実行してみましょう。 |
| |
分布を実行しました。赤ではなく、中央値を抽出し、mdnに保存しました。この変数の値は63であることがわかります。 |
| |
中央値は63です。完璧です。 |
| |
大丈夫。 |
| |
ここで抽出する行は |
| |
中央値はレポートの数字63です。 |
| |
では、これを見てみましょう。ここでこれを呼び出して |
| |
私たちがやっていることと同じように、これを参照してください。 |
| |
これがその線です。各要素を個別に確認できるように整理されています。 |
| |
63、レポートの中央値。 |
| |
その方法は次の通りです。 |
| |
これは添え字と呼ばれます。JSLコードで角括弧が使われている場合、それはオブジェクトを添え字で囲んでいることを意味します。そのオブジェクトとは、ディスプレイボックスなどのコンテナのことです。 |
| |
多くの場合、リストです。リストに添え字を付けることもできます。つまり、このレポートオブジェクト内のネストされた項目を抽出しているということです。 |
| |
まず最初に、高さのアウトラインボックスに進みます。覚えておいてください。それから、四分位数のボックスに進みます。覚えておいてください。 |
| |
これで正しい場所に来ました。あとは必要な項目、つまり数値ボックスを掴むだけです。 |
| |
タイトルを使うこともできますが(上の画像ではタイトルがありませんでした)、代わりに番号で参照します。これは、四分位数のアウトラインボックスの最初の数値列ボックスです。 |
| |
これを見て、「ちょっと待って、ここにも数字があるじゃないか。これも数値の列ボックスじゃないか」と思うかもしれません。いいえ、違います。文字列の列ボックスです。あと、必要に応じてすべてチェックできます。これもプロパティから確認できます。 |
| |
ここをクリックすると |
| |
数値列ボックス、文字列列ボックス、文字列列ボックス。ここにありますか?文字列…文字列数値なので、最初の数値列ボックスです。 |
| |
そして、これらすべての数字を取得します。 |
| |
さて、最後に必要なのは、この添え字です。このように添え字を付けると、6番目の要素を取得できます…1、2、3、4、5、6。これが中央値で、63です。この行を実行すると、レポートに添え字が付けられ、中央値が取得されるので、後で再利用できます。 |
| |
レポートから何かを取得する方法があります。プレゼンテーション資料で共有する別の例があります。 |
| |
タイトルがあり、確認できる要素であれば、そのような状況に遭遇した場合に、それをモデルとして独自の作業に使用できます。 |
| |
さて、最後に説明するのは、スクリプトを実行しているユーザーから入力を取得する方法です。 |
| |
どのファイルを分析するか、あるいはデータテーブルのどの列を分析するかを、ユーザーに選ばせます。これがおそらく最も一般的な方法です。 |
| |
初心者のスクリプト作成者がやりたいこと。ある列で何かを実行するスクリプトを設定して、組織内の他の人に何かを提供したいのです |
| |
異なるデータに対してユーザーが自分で操作できるようにするということですね。つまり、スクリプトをこのように一般化して、ユーザーがファイルか列、あるいはその両方を選択できるようにすれば、 |
| |
スクリプトを一般化することで、その価値は大きく高まります。組織内の他のメンバーに提供すれば、彼らはあなたの作業を再現し、クリック操作を一切せずに素早く実行できるようになります。 |
| |
さて、このセクションではケーススタディというよりは、具体的なリストを紹介します。ユーザーにファイルを選択させる3つの方法と、列を選択させる2つの方法を紹介します。 |
| |
それでは、ファイルの選択方法から始めましょう。いつものように、まずログに何かを記録し、それをコピーします。Big Class を開くと、ログにこのように表示されます。Big Class を開いてください。 |
| |
dtです。今回はdtを使っているので、Big Classを開くと、 |
| |
今は…Big Classを指していますね。それでは制作の脚本を進めていきましょう。 |
| |
ここで重要なのは、ユーザーが希望するファイルを選択できるようにするには、dt が他のものを指すようにする方法を見つけることだけです。 |
| |
スクリプトの残りの部分を記述し、dt を使用します。その後、先頭でこれを変更できます。dt は Big Class を指すだけでなく、別のものを指すようになります。 |
| |
さて、それはユーザーが決めることです。 |
| |
スクリプトを実行する人。さて、一番簡単なのは、データテーブルを開く代わりにこの行を使うことだと思います。スクリプトの先頭でこれを使ってdtを代入すれば、 |
| |
つまり、JMPはこのスクリプトを実行し、そのdtを返します。 |
| |
前面にあるデータ テーブルに名前を付けます。 |
| |
ユーザーの視点から見ると、データテーブルを開いて、ここでsc20を開いてsc20を作成します |
| |
現在のデータテーブルです。上の方に見えますか?このウィンドウに表示されているのが現在のデータテーブルです。 |
| |
したがって、ユーザーがデータ テーブルを開いてスクリプトを実行し、この行に遭遇すると、dt は sc20 を指すようになります。 |
| |
これはかなり強力な方法です。問題は…ユーザーが何をすべきかを正確に理解している必要があることです。まずデータファイルを開いてからスクリプトを実行する必要があることをユーザーに知ってもらう必要があります。 |
| |
もう少し堅牢な方法があります。スクリプト実行時にファイル選択ダイアログを表示し、ディレクトリ構造内を移動して適切なファイルを見つけられるようにします。 |
| |
これは実に簡単です。ここにあるものをすべて削除し、Big Classへの参照を削除して、引数なしで open と書くだけです。 |
| |
JSLが…JMPがこの行を解釈しようとすると、「ユーザーは何かを開きたいようですが、それが何なのか…わかりません。ファイル選択ツールを表示して、ユーザーが決められるようにしましょう」というメッセージが表示されます。 |
| |
では、これを実行してみましょう。dt = open。 |
| |
スクリプトを実行します。ここに一般的なファイル選択ツールがありますので、デスクトップからIrisを開きます。 |
| |
Iris はオープンで、もちろん dt という名前が付いています。 |
| |
すべてのJMPファイル、すべてのファイルですね。ここにはたくさんのものが表示されている可能性があります。 |
| |
だから、もっとコントロールしたいなら、いや、もっとコントロールしたいなら |
| |
ユーザーが選択する項目については、open を使用する代わりに、pick file と呼ばれるものを使います。 |
| |
「Pick file」はいくつかのオプションを持つコマンドです。私はそのうち3つだけ使用しています。 |
| |
この例を見てみましょう。pick fileの最初の3つの引数は、選択ウィンドウに表示されるタイトルです。 |
| |
チューザーが起動するディレクトリと、そのチューザーから開けるファイルを指定するフィルターですね。それでは、この行、このコードセクション、つまりファイル選択コマンドを実行して、結果をPFに保存してみましょう。 |
| |
それを実行してください。 |
| |
わかりました。ここにある引数「Excelファイルを選択してください」に注目してください。ウィンドウタイトルに表示されているのがそれです。 |
| |
フォルダー、つまり 2 番目の引数のパス、そこが始まります。 |
| |
3つ目のフィルターは、ユーザーが開くExcelファイルのみを表示するというものです。これはここにあります。Excelファイル以外のファイルに変更することはできません。Excelファイルのみに制限されています。 |
| |
では、サンドイッチと入力して、「開く」をクリックします。 |
| |
えっと、ちょっと待ってください、なぜ開かないのですか? |
| |
では、確認してみましょう。PF は pick file と同じです。PF って何ですか? ああ、PF は開きたいものへのパスです。まだ open コマンドを発行していません。pick file はファイルを開くのではなく、ファイルを選択するだけです。 |
| |
では、円を閉じるには、次の操作を行います。テーブル参照を作成するには、 |
| |
PF 変数は、必要なファイル、つまり必要な Excel ファイルを指します。 |
| |
できました。これでサンドイッチのデータテーブルが開き、データテーブルが作成されました。これでデータテーブルが作成され、スクリプトを実行する準備が整いました。まさに私が望んでいた通りです。 |
| |
ここで少し立ち止まって、重要な点をお見せしましょう。Pick file ですが、もしこのような状況に遭遇し、引数の全てが分からず、もっと詳しく知りたい場合は、いくつか注意点があります。まず、少し |
| |
ホバーヘルプは、構文に関する情報が書かれた小さなポップアップです。もっと良い方法があります。スクリプトウィンドウで右クリックしてください。 |
| |
スクリプト索引で調べることができます。スクリプト索引はJSLプログラマーにとって非常に重要なツールであり、 |
| |
探しているコマンドがあります。引数のリストと説明文があり、そして本当に重要なのは、実際に実行して動作を確認できる例がいくつかあることです。この例を実行すると、pickファイルが生成されます。 |
| |
まあ、それは私が行きたくない場所へ私を送りました。 |
| |
とりあえず閉じておきましょう。 |
| |
そうです。そして、このコードを試して取得し、盗んで、必要に応じてスクリプト内で使用することができます。 |
| |
はい、これがスクリプトのインデックスです。ヘルプメニューからもアクセスできます。スクリプトメニュー…上の項目をご覧ください。 |
| |
現在のデータテーブル、ネイキッドオープン、またはピックファイル。他にも方法はありますが、まずはこの3つが参考になるでしょう。 |
| |
ここで、ユーザーが操作する列を選択できるようにする方法について説明します。 |
| |
ログからコピーしたものができました。「prices(価格)」というデータテーブルを開いて、リンゴの価格の推移を示すグラフを作成しました。 |
| |
ポイント&クリックの部分は説明しません。スクリプトを実行するだけです。拡張ログからスクリプトを抽出する方法は既にご存知だと思いますので、スクリプトが何をするのか見てみましょう。価格を開くと、リンゴの数量と日付、つまりリンゴの価格の推移を示すグラフが表示されます。 |
| |
このデータテーブルを見てください。価格、リンゴもありますが、他にもたくさんのものがありますね。では、ユーザーがどのグラフを見たいのか、どの列をグラフ化したいのかを指定できるようにしたいとします。 |
| |
このセクションでは、ユーザーに選択させる方法について説明します。 |
| |
わかった。 |
| |
それでは2つの方法についてお話しましょう。1つ目の方法をご紹介します。 |
| |
これは、ユーザーが選択した列に対して操作されます。 |
| |
この構文は以前にも見たことがあります。確か2つ目のケーススタディで見ました。リストの作り方です。 |
| |
データテーブルで選択された列が含まれています。それでは、データテーブルに戻りましょう。 |
| |
3列くらい選択して |
| |
走ろう |
| |
これ。実はdtを実行した方がいいと思う。両方実行してみよう。 |
| |
鶏肉、コーヒー、卵。 |
| |
よし。 |
| |
それで。 |
| |
どれを操作したいですか?ループを使ってリストを反復処理する方法はご存知でしょうが、今回はそうしません。ショートカットを使います。 |
| |
ユーザーが複数選択した場合は、最初の1つだけグラフ化します。つまり、ユーザーはスクリプトを実行する前に鶏肉、コーヒー、卵を選択しています。鶏肉のグラフだけを表示したいのです。 |
| |
そうです、次の行です。これが添え字です。CNamesリストに添え字を付けて最初の項目を取得しています。 |
| |
それでこれを実行します。 |
| |
今では、colという素晴らしい変数があります。 |
| |
リストの最初の項目である chicken と、コロンで囲まれた列参照が含まれます。 |
| |
これでグラフビルダーを実行できます。これで作業を続けられます。唯一の違いは、上のリンゴの代わりにグラフビルダーを使ったことです。 |
| |
これが私の列になりました。これが私たちが行った唯一の変更です。これを実行すると、鶏肉の価格のグラフが表示されます。 |
| |
良い。 |
| |
はい、それは一つの方法ですが、先ほどお話ししたように、ユーザーが何をすべきかを知っている必要があります。そのためには… |
| |
この方法では、ユーザーはデータテーブルを開いて、これを選択し、スクリプトを実行する必要があることを認識している必要があり、少し面倒です。 |
| |
代わりに、実行時にユーザーに列選択ダイアログを表示する方が、より堅牢です。その様子は以下のようになります。構文は少し複雑ですが、ここでは詳細は割愛し、概要を説明します。データテーブルは先ほどと同じように開きます。 |
| |
列ダイアログと呼ばれるコマンドを使用します |
| |
ユーザーに選択ツール...列選択ツールを表示します。 |
| |
繰り返しになりますが、引数はたくさんあります。ここではいくつかだけ使っています。つまり、「商品を選択」というボタンを用意して、ユーザーは最大1つの列しか選択できず、少なくとも1つは選択する必要がある、というわけです。 |
| |
それでは、このスクリプトを 60 行目から実行してみましょう。 |
| |
始値、これが私のダイアログです。非常に少ないコードで、こんなにリッチなダイアログが作れるなんて驚きです。これが、私たちが使っているこの列ダイアログのメリットです。では、コーヒーを選択して「OK」をクリックします。 |
| |
よし。スクリプトに戻って、この行を実行しました。 |
| |
選択した結果がdlgに保存されます。確認してみましょう。 |
| |
ちょっと複雑ですね。dlg はリストだと書いてあって、中括弧がありますね。中括弧がネストされているので、ネストされたリストのようです。 |
| |
これが、その目的を達成するための添え字です。ここでは詳しく説明しませんが、必要に応じてこのコードをコピーして使ってください。つまり、ダイアログから「coffee」という部分だけを取得するには、coffeeへの列参照が必要です。 |
| |
ここに列を作成するための添字があるので、この行を実行します。 |
| |
これで、列にはコーヒー列への参照だけが含まれるようになり、これは以前と同じです。グラフビルダーを実行するには、 |
| |
my col をリンゴの代わりに使用すると、コーヒーなどユーザーが選択したものが得られます。 |
| |
さて、皆さんにお伝えしたかったことはこれですべてです。最後に、JSLプログラミングをこれから始める皆さんに少しアドバイスをしたいと思います。 |
| |
アドバイスとしては、できる限りJMPにコードを任せましょう。拡張ログ機能はまさにそのためにあるのです。ログからコードを盗むのです。スクリプトの大部分はJMPに任せましょう。 |
| |
そして、それをまとめ、実際に使えるスクリプトに仕上げる、いわば結合組織のような部分を書くだけです。そのコードも盗用できます。スクリプトインデックスから盗用するでしょうし、もちろんこのプレゼンテーションから盗用することも可能です。 |
| |
すべての資料はこのプレゼンテーションに付属しており、JMP ユーザー コミュニティの JSL クックブックからも資料を入手できます。これは、多くの一般的な JSL タスクが記載されており、それらのタスクを実行するために必要なコードが提供される優れたリソースです。 |
| |
もう一度強調しておきますが、構文をあまり気にしすぎないでください。コードを取得して必要なものを置き換える方が簡単です。何も壊れることはありませんし、経験を積むにつれてこの構文の微妙なニュアンスも理解できるようになります。 |
| |
ご清聴ありがとうございました。 |