Questions d'itération: Filtrage des données et dénomination de fichier<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour,
Je me demande comment configurer un code qui exécute une analyse de manière itérative selon un filtre de données spécifique, puis répétez cette analyse pour un nouveau filtre de données. Le filtre de données est défini pour exclure les lignes en fonction de la présence de 1 ou de 0 dans une colonne et les colonnes sont dans un ordre séquentiel. Voici un exemple de script:
dt = Ouvrir ( "Hyperspectral_DataCleanedOrdered.jmp" ) ;
dt << Filtre de données (
Mode ( Comprendre ( 1 )) ,
Inverse ,
Ajouter un filtre (
Les colonnes ( Rand001 ) ,
Où ( : Rand001 > = 0,875 Et : Rand001 <= 1 )
) ,
) ;
Discriminant =
Expr (
da = dt << Discriminant (
X ( : Type de site ) ,
Y (
:
: prénom ( "366" ) ,
: prénom ( "367" ) ,
: prénom ( "368" ) ,
: prénom ( "369" ) ,
: prénom ( "370" ) ,
: prénom ( "371" ) ,
: prénom ( "372" ) ,
: prénom ( "373" ) ,
: prénom ( "374" ) ,
: prénom ( "375" ) ,
: prénom ( "376" ) ,
: prénom ( "377" ) ,
: prénom ( "378" ) ,
: prénom ( "379" ) ,
: prénom ( "380" ) ,
: prénom ( "381" ) ,
: prénom ( "382" ) ,
)
) ;
pour ( je = 1 , je <= dix , je ++,
Discriminant ;
da << StepwiseVariableSelection ;
pour ( k = 1 , k <= je , k ++, da << stepForward ) ;
da << applyThisModel ;
daRep = da << rapport ;
daRep [ "Résumés de scores" ] << sélectionner ;
daRep [ "Résumés de scores" ] << Journal ( "test1" ) ;
Journal actuel () << Ajouter ( zone de texte ( "Test1" )) ;
daRep << Fermer la fenêtre ;
) ;
Journal actuel () << Enregistrer le journal ( "Rand001" ) [Idéalement, ce nom est mis à jour à chaque itération]
L'analyse discriminante est en boucle pour un certain nombre d'itérations par sélection variable par étapes (10): Ce que je veux, c'est que chaque itération 1-10 de l'analyse discriminante ait lieu pour chaque itération d'un filtre de données. Le filtre de données est défini pour lire une colonne (Rand001, Rand002, ... Rand100), puis pour exclure des lignes spécifiques en fonction du contenu de la colonne.
De plus, je n’étais pas en mesure de trouver un moyen simple de sauvegarder les journaux / fichiers texte de manière itérative avec un nom qui se met à jour par itération. C’est donc un autre conseil utile.
Je vous remercie!
Re: Questions d'itération: Filtrage des données et dénomination de fichierVous ne savez pas exactement ce que vous visez, mais c’est un moyen de mettre à jour le filtre de données de manière itérative:
dt = Ouvrir ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Nouvelle colonne ( "Rand001" , Formule ( Uniforme aléatoire ( 0 , 1 ))) ;
dt << Nouvelle colonne ( "Rand002" , Formule ( Uniforme aléatoire ( 0 , 1 ))) ;
dt << Nouvelle colonne ( "Rand003" , Formule ( Uniforme aléatoire ( 0 , 1 ))) ;
// objet de filtre de données "vide"
df = dt << Filtre de données ( Mode ( Comprendre ( 1 )) , Inverse ) ;
Pour ( je = 1 , je <= 3 , je ++,
col = Colonne ( "Rand00" || Carboniser ( je )) ; // variable de col dynamique
df << effacer tout ; // Supprimer les anciennes colonnes de df
df << ajouter un filtre ( Les colonnes ( col ) , Où ( col > 0,875 )) ; // Ajouter la colonne actuelle
Attendre ( 2 ) ; // Retarder uniquement à des fins de démonstration
) ;
Mais l’approche de Vince ci-dessus, qui consiste à inclure une clause where dans la plateforme d’analyse au lieu d’utiliser un filtre de données, peut sembler plus logique ici.
Re: Questions d'itération: Filtrage des données et dénomination de fichierVince,
Merci pour cette information, je comprends que ma méthode actuelle n’est probablement pas la plus efficace. Si le segment Where de votre code suggéré exclura effectivement les lignes avec des valeurs de cellule de 1 pour la colonne Rand respectée, quelle est la syntaxe? Cela résoudra mon problème!
Re: Questions d'itération: Filtrage des données et dénomination de fichierJe suppose alors quel est le but de l'exclusion? Si vous excluez simplement un graphique différent à chaque fois, vous pouvez le faire avec l’option Où.
autre que cela, vous ne devriez pas colonne col scope.
: col == {1} // ne fonctionnera pas
col == 1 // fonctionnera
Re: Questions d'itération: Filtrage des données et dénomination de fichierMerci pour cette aide, cela m’a donné un aperçu des prochaines étapes. Cependant, ce que je cherchais, c'était d'appliquer un filtre de données de manière itérative, et non d'exécuter le DA de manière itérative. Exemple, voici un exemple de code:
dt = Tableau de données actuel () ;
col = Colonne ( "Rand00" || carboniser ( je )) ;
dt = ouvrir ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Nouvelle colonne ( "Rand001" , Formule ( Random Integer ( 0 , 1 ))) ;
dt << Nouvelle colonne ( "Rand002" , Formule ( Random Integer ( 0 , 1 ))) ;
dt << Nouvelle colonne ( "Rand003" , Formule ( Random Integer ( 0 , 1 ))) ;
doDataFilter =
col = Colonne ( "Rand00" || carboniser ( je )) ;
dt << Filtre de données (
Mode ( Comprendre ( 1 )) ,
Inverse ,
Ajouter un filtre (
Les colonnes ( "Rand00" || carboniser ( je )) ,
Où ( : col == { 1 })
// Où (: "Rand00" || char (i)> 0.875 &: "Rand00" || char (i) = 1)
) ,
) ;
pour ( je = 1 , je <= 3 , je ++, doDataFilter ;
col = Colonne ( "Rand00" || carboniser ( je )) ; ) ;
Ce code lit l'erreur:
La clause WHERE n'a pas été correctement spécifiée. en accès ou évaluation de 'Equal',: col == / * ### * / {1} / * ### * /
Comment puis-je écrire la clause WHERE pour inclure le caractère 'i', afin que le filtre se déplace le long des lignes désignées à chaque itération?
Re: Questions d'itération: Filtrage des données et dénomination de fichierJe ne pense pas avoir répondu à toutes vos questions, mais cela pourrait vous mettre sur la bonne voie.
dt = ouvrir ( "$ SAMPLE_DATA \ big class.jmp" ) ;
dt << Nouvelle colonne ( "Rand001" , Formule ( Random Integer ( 0 , 1 ))) ;
dt << Nouvelle colonne ( "Rand002" , Formule ( Random Integer ( 0 , 1 ))) ;
dt << Nouvelle colonne ( "Rand003" , Formule ( Random Integer ( 0 , 1 ))) ;
pour ( je = 1 , je <= 3 , je ++,
col = Colonne ( "Rand00" || carboniser ( je )) ;
da = dt << Discriminant (
X ( : sexe ) ,
Y ( : la taille ) ,
Où ( col [ rangée ()] == 1 ) ,
Afficher les chiffres de classement ( 1 ) ,
Position du rayon de biiplot ( [ 0 , 15.5914608488282 , 1,5 ] )
) ;
da << Titre ( "Rand00" || carboniser ( je )) ;
da << Redessiner ;
da << Journal ;
da << Fermer la fenêtre () ;
)
J'utiliserais soit l'instruction where, soit le filtre de données local.
J'espère que c'est au moins un peu utile.