Rendre mon script plus convivial
Étant très nouveau dans le domaine des scripts, j'ai pu générer ce script pour aider à rationaliser certaines analyses de données pour mon groupe de recherche. Pour le moment, il n'est pas très convivial (il faut aller dans le script et insérer manuellement le chemin du fichier cible, changer tous les 'By1' et 'By1 Variable #' pour qu'ils correspondent au nom de l'échantillon défini par le chemin du fichier cible ( By1 = Chemin du fichier cible) et fermez manuellement toutes les fenêtres de données, de tabulation et de rapport que le script ouvre. J'essaie de m'apprendre à travers l'index de script comment surmonter tous ces obstacles et rationaliser le script, mais c'est relativement lent.
Mon objectif est que l'opérateur n'ait à interagir qu'avec deux fenêtres d'invite, l'une qui vous demande de désigner le fichier que vous souhaitez ouvrir et l'autre pour enregistrer la table de données finale générée, tout en fermant toutes les fenêtres générées par le script.
Toutes les suggestions et astuces sont les bienvenues, apprendre les scripts pour la première fois en JSL est très agréable!
Names Default To Here( 1 );
dt = Open( "Target File Path");
obj = dt << Tabulate(
Add Table(
Column Table(
Analysis Columns( :X1, :Y, :X2, :X3 ),
Statistics( Mean )
),
Row Table( Grouping Columns( :By1, :By2 ) )
)
);
obj << Make into Data Table;
nw = New Window ("Bivarate By2 Fit",
V List Box(
Fit Group(
Biv = Bivariate(
SendToByGroup( {:By1 == "By1 Variable 1"} ),
SendToByGroup( {:By1 == "By1 Variable 1"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 1", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 1", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 2"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 2", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 2", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 3"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 3", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 3", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 4"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 4", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 4", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 5"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 5", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 5", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 6"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 6", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 6", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 7"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 7", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 7", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 8"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 8", Platform Index( 2 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 8", Platform Index( 3 )},
Y( :Name( "Mean(X2)" ) )
),
X( :Name( "Mean(Y)" ) ),
Fit Line( {Line Color( {212, 73, 88} )} ),
By( :By1 )
)
)
)
);
Report ( Biv[1] ) ["Parameter Estimates"][Table Box(1)] << Make Combined Data Table;
dt = current data table ();
obj = dt << Split(
Split By( :Term ),
Split( :Y, :By1, :Estimate ),
Remaining Columns( Drop All ),
Sort by Column Property
);
New Column( "By2", Numeric, Continuous );
:"By2" << Format( "Percent", ,2 );
:"Estimate Mean(Y)" << Set Name ("Estimate Mean");
dt = current data table();
col =Column(dt, "By2");
col << Set Formula (:Estimate Mean() / :Estimate Intercept);
obj = dt << Tabulate(
Add Table(
Column Table(
Grouping Columns( :By1 Intercept ),
Analysis Columns( :By2 )
),
Row Table( Grouping Columns( :Y Intercept ) )
)
);
obj << Make into Data Table;
AnalytiqueTableau de donnéesScriptingRe: Rendre mon script plus convivialJ'ai compris les fonctions d'ouverture et de fermeture, mais j'ai toujours du mal à comprendre comment remplir automatiquement la variable By1 dans la section Fit Group à partir des données de la colonne By1 des fichiers ouverts.
Aucune suggestion? script mis à jour ci-dessous
dt1 = Open(
Pick File("Select JMP File",
"$Documents",
{"JMP Files|jmp", "All Files|*"},
1,
0
)
);
obj1 = dt1 << Tabulate(
Add Table(
Column Table(
Analysis Columns( :X1, :Y, :X2, :X3 ),
Statistics( Mean )
),
Row Table( Grouping Columns( :By1, :By2 ) )
)
);
obj1 << Make into Data Table;
dt2 = current data table();
Close (dt1);
nw1 = New Window ("Bivarate Fit",
V List Box(
Fit Group(
Biv = Bivariate(
SendToByGroup( {:By1 == "Series-1"} ),
SendToByGroup( {:By1 == "Series-1"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "Series-1", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "Series-1", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 2"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 2", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 2", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 3"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 3", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 3", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 4"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 4", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 4", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 5"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 5", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 5", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 6"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 6", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 6", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 7"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 7", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 7", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 8"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 8", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 8", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 9"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 9", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 9", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
SendToByGroup( {:By1 == "By1 Variable 10"}, Y( :Name( "Mean(X1)" ) ) ),
SendToByGroup(
{:By1 == "By1 Variable 10", Platform Index( 2 )},
Y( :Name( "Mean(X2)" ) )
),
SendToByGroup(
{:By1 == "By1 Variable 10", Platform Index( 3 )},
Y( :Name( "Mean(X3)" ) )
),
X( :Name( "Mean(Y)" ) ),
Fit Line( {Line Color( {212, 73, 88} )} ),
By( :By1 )
)
)
)
);
Report ( Biv[1] ) ["Parameter Estimates"][Table Box(1)] << Make Combined Data Table;
dt3 = current data table ();
obj2 = dt3 << Split(
Split By( :Term ),
Split( :Y, :By1, :Estimate ),
Remaining Columns( Drop All ),
Sort by Column Property
);
New Column( "By2", Numeric, Continuous );
:"By2" << Format( "Percent", ,2 );
:"Estimate Mean(Y)" << Set Name ("Estimate Mean");
Close (dt3);
dt4 = current data table();
col =Column(dt4, "By2");
col << Set Formula (:Estimate Mean() / :Estimate Intercept);
obj3 = dt4 << Tabulate(
Add Table(
Column Table(
Grouping Columns( :By1 Intercept ),
Analysis Columns( :By2 )
),
Row Table( Grouping Columns( :Y Intercept ) )
)
);
obj 3 << Make Into Data Table;
Close (dt4);
dt = current data table();
If( dt << Save( "" ),
Write( "\!nsaved to " || (dt << GetPath) ),
Write( "\!nsave canceled" )
);