Comment faire des listes imbriquées en JSL ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai un tableau de données avec des points géographiques (localisations GPS). Chaque ligne représente un emplacement avec des colonnes longitude, latitude, etc.
J'essaie de faire une analyse groupée sur ces points.
J'ai déjà un algorithme qui recherche pour chaque point tous les points dans un rayon prédéfini (quartier) et les ajoute à une liste nommée cluster.
Ainsi, pour chaque point de ma table de données, je peux générer une liste contenant tous les points situés à proximité du point (cluster).
Maintenant, je cherche une solution pour ajouter toutes ces listes de clusters dans une seule liste qui contient ensuite toutes les listes de clusters.
Je souhaite avoir une liste imbriquée, ou une liste dans une liste, afin de pouvoir parcourir tous les clusters et par exemple fusionner certains clusters, etc.
Est-ce même possible avec jmp/jsl ?
Merci pour votre aide!
Re : Comment faire des listes imbriquées en JSL ?clearLog();
// Disons que vous regardez quelque chose comme ça
// point (ligne) -> Liste de clusters
// p1 = {1,4,6,8} ;
// p2 = {2,9,6,4,1,7} ;
//p3 = {3,2,5} ;
// Lorsque vous générez vos listes de clusters initiales (je suppose que vous parcourez les lignes de votre table)
// les ajoute à un tableau associatif à la volée.
// clusterAa = associativeArray();
// while(itération sur vos points et listes,
// clusterAa["p1"] = {1,4,6,8}; // La clé ici est une chaîne mais pourrait être un entier, valeur = liste de clusters
// par exemple clusterAa[ligne] = Liste de clusters ;
// );
// En avançant, vous devriez avoir un tableau comme celui-ci.
clusterAa = associativeArray({
{"p1", {1,4,6,8}},
{"p2", {2,9,6,4,1,7}},
{"p3", {3,2,5}}
});
listOfPoints = clusterAa << getKeys; // Récupère les clés sous forme de liste {"p1", "p2", "p3"}
je = 1 ;
listOfClusterLists = {};
while(i <= nItems(listOfPoints), // Parcourir la liste et ajouter à une liste linale
insertInto(listOfClusterLists, evalList(list(clusterAa[listOfPoints ])));
je++;
);
show(listOfClusterLists);
// Résultat = listOfClusterLists = {{1, 4, 6, 8}, {2, 9, 6, 4, 1, 7}, {3, 2, 5}} ;
Bien sûr, vous pouvez également essayer l'outil de clustering sous l'onglet Méthodes multivariées de JMP. J'ai eu un certain succès en effectuant le clustering K-Means à l'aide de cet outil.
Re : Comment faire des listes imbriquées en JSL ?Après avoir lu votre description détaillée de ce que vous voulez, je suggère que, puisqu'un tableau de données n'est qu'une matrice X par Y pour JMP, vous souhaiterez peut-être simplement conserver les données dans un tableau de données, plutôt que de faire tout le déplacement. à des listes et des listes de listes.
En utilisant "Obtenir les lignes où" et en créant de nouvelles colonnes pour enregistrer les différentes valeurs P trouvées dans le rayon donné pour P, vous aurez toutes vos données organisées directement dans votre tableau de données.
Re : Comment faire des listes imbriquées en JSL ?Chaque cluster possède un soi-disant noyau, sur lequel le cluster a été initialement construit.
J'ai donc un point P (représenté par un numéro de ligne de mon tableau de données).
L'étape suivante consiste à rechercher tous les points de ma table de données qui se trouvent dans un rayon prédéfini autour de mon point P.
Quand j'ai tous les points, je les insère dans une nouvelle liste L. Ensuite j'insère le point P dans la Liste L à la position 1.
Maintenant, ma liste L représente un cluster. Le cœur du cluster est mon point P. Et ma liste ressemble à ceci :
L = { , }
On pourrait dire que le numéro de ligne du point P est en fait la "clé" du cluster/liste.
Je dois mentionner que L n'est pas une liste imbriquée ! L est inséré dans une autre liste.
clusterList = { ..., L-2, L-1, L, L+1, L+2, ...}
clusterList est la liste imbriquée.
Après avoir créé la liste de clusters, je souhaite la parcourir et fusionner certains clusters.
Par exemple:
P est le noyau du cluster L.
Si L+2 contient P, alors insérez tous les points de L dans L+2 et supprimez L ensuite.
Itérer avec la liste suivante dans clusterList...
Re : Comment faire des listes imbriquées en JSL ?Si vous disposez d'une sorte de "clé", des tableaux associatifs seraient utiles.Je suppose que dans votre cas, la clé du tableau associatif serait le cluster.
Re : Comment faire des listes imbriquées en JSL ?La liste est une structure de données très flexible, au point que vous pouvez avoir des listes qui ne sont pas homogènes (c'est-à-dire dans lesquelles les éléments n'ont pas le même type de données). Vous pouvez certainement créer une « liste de listes » - Par exemple :
k = 3 ; // Nombre d'éléments dans la liste des listes
maListe = {};
Pour (je= 1 , je<=k, je++,
kk = Entier aléatoire ( 1 , 5 ); // Nombre d'éléments dans cette liste
liste d'éléments = {} ;
Pour (ii= 1 , ii<=kk, ii++,
Insérer dans (liste des articles, Carboniser ( Entier aléatoire ( 1 , dix )));
);
Imprimer (liste des articles);
Insérer dans (ma liste, Évaluer ( Liste d'évaluation ({liste des articles})));
);
Imprimer (ma liste);