親愛なるみんな、
少し前に書いたスクリプトを更新しています。 オリジナルのスクリプト/アイデアを見つけることができますここ。 元のスクリプトは、ユーザーが現在のデータ テーブルの [列の選択] パネル ボックスにリストされている列をクリックすると、いくつかの基本的な統計情報を更新することを目的としていました。
ここでやりたいのは、ユーザーが現在のデータ テーブルから利用可能なさまざまな列をクリックしたときにも更新されるパネル ボックスをいくつか追加することです。 列内のデータの分布を表示するパネル ボックスを更新したいと考えています。これを行うためのグラフ ビルダーやグラフ ボックスを生成するだけではなく、(可能であれば) 分布プラットフォームの結果を実際に表示します。 もう 1 つは、Explore Outliers プラットフォームの結果を表示するパネル ボックスです。 ユーザーが確認する新しい列を選択したときに、これらのパネル ボックスの両方が更新されるようにしたいと考えています。
「Big Class.jmp」サンプル データ ファイルを使用して、表示したいものの小さなモックアップを作成しました。 JSL を最後に含めました。
これはユーザー インターフェイスの現在のビューです。

これは、誰かが興味のある列 (この場合は :height) をクリックしたときにどのように見えるかという概念です。

次に、ユーザーが新しい列 (たとえば、:weight) をクリックすると、表示が更新され、次のように表示されます。

実際には、分布プラットフォームに要約統計量は必要ありませんが、箱ひげ図とその上にグラフ化されたデータ ポイントを含む分布が必要です。箱ひげ図には、平均値、中央値、最大 50% などの追加情報が含まれます。データ -- たとえば、グラフ ビルダーでこれらを簡単に追加することはできません。
私のためにこれを完全に解決する必要はありませんが、誰かが開始方法について提案を持っている場合は、本当に感謝します。これまで試したアイデアは機能しなかったためです。 それが可能かどうかさえわかりませんが、可能であることを願っています。 ダッシュボードとして使用する必要はないと思います。
よろしくお願いいたします。 以下はJSLです
ありがとう!、
DS
//GUI for quickly reporting statistics written by D. Schmidt, ver2.0
//Thanks to JMP User community members: jthi, ian_jmp, and ErraticAttach for helpful suggested changes.
Names Default To Here( 1 );
Clear Symbols();
//the width of the column list box in pixels
lbWidth = 200;
dt = Current Data Table();
//dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//List of statistics to calculate
StatsList1 = {"µ", "σ", "Max", "Min", "Range(Δ)", "N"};
StatsList2 = {"µ", "Median", "Mode", "N"};
StatsList3 = {"Quantiles", "5%", "25%", "50%", "75%", "95%", "Int. Q. Range"};
StatsList4 = {"N", "N Missing", "N 0", "Prop 0", "Prop non-0"};
maxStatCount = Max( N Items( StatsList1 ), N Items( StatsList2 ), N Items( StatsList3 ), N Items( StatsList4 ) );
//RadioBox() arguments
rbArg = Eval List(
{Concat Items( StatsList1, ", " ), Concat Items( StatsList2, ", " ), Concat Items( StatsList3, ", " ), Concat Items( StatsList4, ", " )}
);
rbcArg = {"Select for categorical columns"};
//Statistics to Calculate
statMean = Expr( Col Mean( tempCol ) );
statStd = Expr( Col Std Dev( tempCol ) );
statMax = Expr( Col Max( tempCol ) );
statMin = Expr( Col Min( tempCol ) );
statMed = Expr( Col Median( tempCol ) );
statMode = Expr(
Mode( dt:tempcol << getvalues )
);
statRange = Expr(
Col Max( tempCol ) - Col Min( tempCol )
);
statN = Expr( Col Number( tempCol ) );
statQ95 = Expr(
Col Quantile( tempCol, 0.05 )
);
statQ75 = Expr(
Col Quantile( tempCol, 0.25 )
);
statQ50 = Expr(
Col Quantile( tempCol, 0.5 )
);
statQ25 = Expr(
Col Quantile( tempCol, 0.75 )
);
statQ5 = Expr(
Col Quantile( tempCol, 0.95 )
);
statIntQR = Expr( StatQ25 - StatQ75 );
statMiss = Expr(
Col N Missing( tempCol )
);
statZero = Expr(
N Items( Loc( tempCol << get as matrix, 0 ) )
);
statProp0 = Expr( statZero / statN );
statPropn0 = Expr( 1 - statProp0 );
OrdStats = Expr(
colmodeltype = tempCol << Get Modeling type;
If( colmodeltype == "Ordinal",
orddist = dt << Distribution( Nominal Distribution( Column( tempCol ) ), Invisible );
rpt_orddist = orddist << Report;
ordlvl = rpt_orddist[String Col Box( 1 )] << Get;
ordCount = rpt_orddist[Number Col Box( 1 )] << Get;
ordProb = rpt_orddist[Number Col Box( 2 )] << Get;
OrdSummNMiss = rpt_orddist[List Box( 7 )][2] << Get Text;
OrdSummLvl = rpt_orddist[List Box( 8 )][1] << Get text;
OrdnumNMiss = Num( OrdSummNMiss );
OrdnumLvl = Num( OrdSummLvl );
Orddist << Close Window;
);
Insert Into( Ordlvl, {"N Missing", "N Levels"} );
Insert Into( OrdCount, OrdnumNMiss );
Insert Into( OrdCount, OrdnumLvl );
);
CatStats = Expr(
coltype = tempCol << Get Data type;
If( coltype == "Character",
catdist = dt << Distribution( Nominal Distribution( Column( tempCol ) ), Invisible );
rpt_catdist = catdist << Report;
lvl = rpt_catdist[String Col Box( 1 )] << Get;
Count = rpt_catdist[Number Col Box( 1 )] << Get;
Prob = rpt_catdist[Number Col Box( 2 )] << Get;
SummNMiss = rpt_catdist[List Box( 7 )][2] << Get Text;
SummLvl = rpt_catdist[List Box( 8 )][1] << Get text;
numNMiss = Num( SummNMiss );
numLvl = Num( SummLvl );
catdist << Close Window;
);
Insert Into( lvl, {"N Missing", "N Levels"} );
Insert Into( Count, numNMiss );
Insert Into( Count, numLvl );
);
//List for results
StatList = Eval List( {StatsList1, StatsList2, StatsList3, StatsList4} );
StatListRes1 = Expr(
Eval List( {statMean, statStd, statMax, statMin, statRange, statN} )
);
StatListRes2 = Expr(
Eval List( {statMean, statMed, statMode, statN} )
);
StatListRes3 = Expr(
Eval List( {., statQ95, statQ75, statQ50, statQ25, statQ5, StatIntQR} )
);
StatListRes4 = Expr(
Eval List( {statN, statMiss, statZero, statProp0, statPropn0} )
);
StatListRes = Expr(
Eval List( {StatListRes1, StatListRes2, StatListRes3, StatListRes4} )
);
//Expression to handle the distribution platform
DistExpr = Expr(
Distribution(
Continuous Distribution(
Column( tempCol ),
Quantiles( 0 ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Customize Summary Statistics( N Zero( 1 ) )
),
SendToReport( Dispatch( tempCol, "Summary Statistics", OutlineBox, {Close( 1 )} ) )
)
);
//Expression for Outliers
OutlierExpr = Expr(
Explore Outliers( Y( tempCol ), Quantile Range Outliers)
);
//User window
ValueDlg = Expr(
nwin = New Window( "GUI for quick stats",
<<RETURN result=""></RETURN>
いくつかのアイデアが思い浮かびます。
- サイズ付きのスペーサー ボックスを使用して、分布を保存し、外れ値を調査するボックスを特定のサイズで強制的に表示します。 ユーザーが興味のある列に変更したとき -> 古い分布を削除し、外れ値を調べて同じ場所に作り直します(追加はここで機能するはずです)
- 非表示の列スイッチャーを使用し、ユーザーが列リストに変更を加えたときに列選択を更新します。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
eo = dt << Explore Outliers(
Y(:weight),
Quantile Range Outliers
);
cs_eo = eo << Column Switcher(
:weight,
{:weight, :height}
);
(Report(eo) << top parent)[Outline Box("Column Switcher")] << Visibility("Collapse");
wait(1);
cs_eo << Set Current("height");
wait(1);
cs_eo << Set Current("weight");やあ@jthi 、
良い提案が得られると思っていたので、本当は返信してもらえると思っていました、ありがとう!
あなたの提案は私が探していたものではありませんでしたが、私が求めていた変更を行う方法についていくつかの良いアイデアを与えてくれました。 結局、コード内の <
興味のある人のために、以下に私のコードを含めます。 他にも方法はあると思いますが、これはいくつかの異なるタイプのデータ ファイルに適用できるほど一般的なので、今のところはこれで満足しています。
ありがとう!、
DS
//GUI for quickly reporting statistics written by D. Schmidt, ver2.1<BR />//Thanks to JMP User community members: jthi, ian_jmp, and ErraticAttach for helpful suggested changes.
Names Default To Here( 1 );
Clear Symbols();
//the width of the column list box in pixels
lbWidth = 200;
dt = Current Data Table();
//dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//List of statistics to calculate
StatsList1 = {"µ", "σ", "Max", "Min", "Range(Δ)", "N"};
StatsList2 = {"µ", "Median", "Mode", "N"};
StatsList3 = {"Quantiles", "5%", "25%", "50%", "75%", "95%", "Int. Q. Range"};
StatsList4 = {"N", "N Missing", "N 0", "Prop 0", "Prop non-0"};
maxStatCount = Max( N Items( StatsList1 ), N Items( StatsList2 ), N Items( StatsList3 ), N Items( StatsList4 ) );
//RadioBox() arguments
rbArg = Eval List(
{Concat Items( StatsList1, ", " ), Concat Items( StatsList2, ", " ), Concat Items( StatsList3, ", " ), Concat Items( StatsList4, ", " )}
);
rbcArg = {"Select for categorical columns"};
//Statistics to Calculate
statMean = Expr( Col Mean( tempCol ) );
statStd = Expr( Col Std Dev( tempCol ) );
statMax = Expr( Col Max( tempCol ) );
statMin = Expr( Col Min( tempCol ) );
statMed = Expr( Col Median( tempCol ) );
statMode = Expr(
Mode( dt:tempcol << getvalues )
);
statRange = Expr(
Col Max( tempCol ) - Col Min( tempCol )
);
statN = Expr( Col Number( tempCol ) );
statQ95 = Expr(
Col Quantile( tempCol, 0.05 )
);
statQ75 = Expr(
Col Quantile( tempCol, 0.25 )
);
statQ50 = Expr(
Col Quantile( tempCol, 0.5 )
);
statQ25 = Expr(
Col Quantile( tempCol, 0.75 )
);
statQ5 = Expr(
Col Quantile( tempCol, 0.95 )
);
statIntQR = Expr( StatQ25 - StatQ75 );
statMiss = Expr(
Col N Missing( tempCol )
);
statZero = Expr(
N Items( Loc( tempCol << get as matrix, 0 ) )
);
statProp0 = Expr( statZero / statN );
statPropn0 = Expr( 1 - statProp0 );
OrdStats = Expr(
colmodeltype = tempCol << Get Modeling type;
If( colmodeltype == "Ordinal",
orddist = dt << Distribution( Nominal Distribution( Column( tempCol ) ), Invisible );
rpt_orddist = orddist << Report;
ordlvl = rpt_orddist[String Col Box( 1 )] << Get;
ordCount = rpt_orddist[Number Col Box( 1 )] << Get;
ordProb = rpt_orddist[Number Col Box( 2 )] << Get;
OrdSummNMiss = rpt_orddist[List Box( 7 )][2] << Get Text;
OrdSummLvl = rpt_orddist[List Box( 8 )][1] << Get text;
OrdnumNMiss = Num( OrdSummNMiss );
OrdnumLvl = Num( OrdSummLvl );
Orddist << Close Window;
);
Insert Into( Ordlvl, {"N Missing", "N Levels"} );
Insert Into( OrdCount, OrdnumNMiss );
Insert Into( OrdCount, OrdnumLvl );
);
CatStats = Expr(
coltype = tempCol << Get Data type;
If( coltype == "Character",
catdist = dt << Distribution( Nominal Distribution( Column( tempCol ) ), Invisible );
rpt_catdist = catdist << Report;
lvl = rpt_catdist[String Col Box( 1 )] << Get;
Count = rpt_catdist[Number Col Box( 1 )] << Get;
Prob = rpt_catdist[Number Col Box( 2 )] << Get;
SummNMiss = rpt_catdist[List Box( 7 )][2] << Get Text;
SummLvl = rpt_catdist[List Box( 8 )][1] << Get text;
numNMiss = Num( SummNMiss );
numLvl = Num( SummLvl );
catdist << Close Window;
);
Insert Into( lvl, {"N Missing", "N Levels"} );
Insert Into( Count, numNMiss );
Insert Into( Count, numLvl );
);
//List for results
StatList = Eval List( {StatsList1, StatsList2, StatsList3, StatsList4} );
StatListRes1 = Expr(
Eval List( {statMean, statStd, statMax, statMin, statRange, statN} )
);
StatListRes2 = Expr(
Eval List( {statMean, statMed, statMode, statN} )
);
StatListRes3 = Expr(
Eval List( {., statQ95, statQ75, statQ50, statQ25, statQ5, StatIntQR} )
);
StatListRes4 = Expr(
Eval List( {statN, statMiss, statZero, statProp0, statPropn0} )
);
StatListRes = Expr(
Eval List( {StatListRes1, StatListRes2, StatListRes3, StatListRes4} )
);
//User window
ValueDlg = Expr(
nwin = New Window( "GUI for quick stats",
<<RETURN result=""></RETURN>