Développement de wotmap

wotmap
graph
sigmajs
#113

Finalement, le plugin de calcul des forces n’implémente pas ce genre de choses. Par contre, un autre plugin qui uitlise le même algo de calcul des forces propose qqe chose qui s’en rapproche. Du coup, plus besoin du bouton “Pause” :slight_smile: L’inconvénient c’est qu’il faut trouver un compromis entre temps de calcul et équilibre final. Avec les valeurs par défaut, c’est pas trop mal (j’ai fait plein d’essais)
Vous en pensez quoi ? : https://duniter.normandie-libre.fr/wotmap

1 Like
#114

Avec une barre de progression plutôt qu’une barre infinie ça serait parfait :wink:

1 Like
#115

En fait, il n’y a pas vraiment moyen de prédire à l’avance la fin de l’algorithme. Je ne peux donc pas afficher une barre de progression. J’ai deux paramètres :

  • Le nombre maximum d’itérations (en l’occurrence, j’ai laissé par défaut : 1000)
  • La distance moyenne de déplacement des nœuds en dessous de laquelle l’algorithme s’arrête.

Page de description du plugin ForceLink Layout

#116

Tu peux pas afficher une barre de progression dont la valeur correspond au rapport “distance moyenne actuelle parcourue par les noeuds / distance moyenne maximum” ?

1 Like
#118

Il s’avère que la condition limitante actuellement est le nombre d’itérations. Je vais donc me baser sur le nbre d’itérations effectuées par rapport au nbre max d’itérations pour afficher cette barre de progression.

EDIT : Mise à jour effectuée pour implémenter cette barre de progression :slight_smile:

#119

si je voulais en faire une animation qui commence a l’instant 0 et non pas a l’instant t
comment devrais-je m’y prendre ?

#120

cela avait déjà été fait. Le projet me semble pas maintenu et abandonné et je ne me rappelle plus qui avait fait ça. J’ai un screenschot mais peut-être que d’autres ont plus d’infos que moi. Néanmoins c’est toujours possible de le faire grâce aux timestamps enregistrés en BDD duniter

1 Like
#121

En effet, fait par framasky, repris par @jytou :

#122

Pour ceux qui s’y connaissent un peu, des chercheurs en graphes m’ont parlé du “Label Propagation Algorithm” qui serait très efficient pour faire le calcul de détection de communautés. Apparemment, il y a très peu d’implémentation, excepté en Python et en Java (Je ne vous ai mis que deux exemples mais dans ces deux langages, j’ai trouvé d’autres implémentations). Or, ça fait deux jours que j’essaie de l’écrire en Javascript mais je coince :confused: : cela me retourne la même communauté pour tous les noeuds et j’arrive pas à trouver où est-ce que j’ai merdé.

Pour les habitués du Javascript, c’est par là que ça se passe.

1 Like
#123

J’ai réussi à implémenter cet algo sur des petits graphes… Mais pour la Toile de Confiance, ça boucle à l’infini :frowning: Je sais pas si j’irai jusqu’au bout mais c’est intéressant. Pour les curieux, j’ai trouvé encore un autre algo de détection de communautés suite à la lecture d’un papier sur la comparaison entre différents algo. Il s’agit de l’agorithme LICOD

#124

Je continue de faire un peu de R&D sur les graphes et je suis tombé sur cet article en français et plutôt complet.

2 Likes
#126

Je suis en train de tester igraph en python :slight_smile: Sinon, en java, y’a les chercheurs de mon Université qui développent le framework GraphStream

2 Likes
#128

@tuxmain m’a fait un script en python pour générer le json de la wotmap afin de remplacer celui en PHP. Le but est de pouvoir interroger la nouvelle BDD duniter et, à termes, d’utiliser la bibliothèque igraph pour faire les calculs de communauté, de centralités et de position des nœuds côté serveur.

J’ai mergé son code puis ai fait 2/3 adaptations. Vous pouvez tester le résultat grâce au gitlab. @1000i100 : faudra que tu regardes pour le pipeline CI/CD (https://wotmap.duniter.io) quand tu auras 5min

1 Like
#132

Toujours dans le cadre de la R&D autour de la wotmap, je pose ça là :

PyGraphistry est une bibliothèque d’analyse de graphes visuelle qui permet d’extraire, de transformer et de charger de grands graphiques dans l’explorateur de graphes Graphistry (technologie basée dans le cloud).

Il supporte des graphiques exceptionnellement grands pour la visualisation interactive. Le moteur de rendu WebGL personnalisé du client restitue jusqu’à 8 millions de nœuds et liens à la fois, et la plupart des GPU anciens prennent en charge de manière fluide des éléments compris entre 100 000 et 1 000 000. Le moteur d’analyse OpenCL côté serveur prend en charge des graphiques encore plus volumineux.

2 Likes
#133

@Pierre_Jean_CHANCELL Je regarde les exemples déjà présents à partir du github, c’est simplement génial ! Belle trouvaille !

2 Likes
#134

J’ai ajouté une petite fonctionnalité à la wotmap mais qui m’aura pris presque toute la journée… Désormais, lorsque vous afficherez les liens (les certifications), le lien que vous survolez à la souris se mettra en surbrillance pour plus de clarté.

PS : @1000i100 : le CI/CD n’a pas fonctionné, je t’ai transféré l’erreur sur 1000i100 at tuta.io

3 Likes
#135

Cette semaine, @tuxmain m’a aidé à importer la bibliothèque python-igraph pour le calcul de la position des nœuds et des communautés côté serveur.

Dans la liste des algorithmes proposés dans la bibliothèque python-igraph, on ne retrouve pas l’algo de Louvain pour les communautés mais, entre autres, l’algo LPA (“Label Propagation Algorithme”). Cet algo donne un résultat différent à chaque fois qu’il est exécuté et nous donne plus de communautés qu’habituellement (entre 40/45 communautés). Du coup, j’ai été obligé de repenser l’IHM. Désormais, un double-clic sur un nœud permet de n’afficher QUE la communauté du nœud (double-cliquez à nouveau sur noeud pour afficher à nouveau la toile en entier) alors qu’un clic-droit sur un nœud MASQUE la communauté du nœud. Dites-moi ce que vous en pensez :slight_smile:

Pour la position des nœuds, la bibliothèque pyhon-igprah ne propose pas l’algo de positionnement de Gephi (ForceAtlas2) qui est, selon moi, le meilleur que j’ai trouvé pour afficher la toile de confiance de la June. Du coup, python-igraph pré-calcule la position des noeuds avec un autre algo et sigmaJS finalise le boulot. Il y a bien une tentative d’implémentation de cet algo en python mais il n’est pas terminé et je ne suis pas sûr d’avoir les compétences en Python pour l’intégrer au projet et le tester… :confused: J’ai regardé aussi du côté de la bibliothèque python NetworkX mais elle n’implémente pas non plus les algos que je souhaite utiliser.

N.B : je n’ai pas encore pushé le code sur le gitlab car j’attends qqes corrections de la part de @tuxmain :wink:

#136

L’interface est super comme ça ! Par contre c’est dur de lire les pseudos des petits nœuds, il faudrait une taille minimale pour le texte. Et aussi pouvoir zoomer avec +/- en plus de la molette ça serait pratique.

Pour info pour les autres : mon script trouve trop d’identités (un peu plus de 2000) alors qu’il est sensé ne prendre que les membres.

Edit: En fait c’est à cause des identités qui ont été membres mais qui ne le sont plus. Le problème : si on les met, il ça signifie que la wotmap ne liste pas que les membres ; si on ne les met pas, ça pose des problèmes puisque leurs certifications sont encore valides et doivent être représentées.

Re2·edit: wot_json.py qui prend toutes les identités, avec [“attributes”][“member”] qui indique si il est membre ou pas. Dans stats.json, total_nodes liste toutes les ids, total_members seulement les membres. total_noreferents ne compte que les membres non référents. Du coup il faudrait ajouter un figuré pour les non-membres dans l’interface, par exemple grisé ou hachuré.

3 Likes
#137

Avant les vacances, je vous livre une nouvelle version de la wotmap grâce aux contributions de @tuxmain et de moi-même :wink: N’hésitez pas si vous avez des retours (bugs, améliorations). Je n’ai pas encore implémenté les demandes ci-dessus. Je verrai ça plus tard :wink:

2 Likes
#143

Pour sa première version officielle, la wotmap passe en v0.10 sur l’adresse https://wotmap.duniter.org

Au programme :

  • Possibilités de survoler les certifications et de cliquer dessus pour voir les détails
  • Filtrage de communautés par double click sur un noeud
  • Un clic droit sur un noeud masque la communauté
  • Utilisation des touches du clavier pour déplacer la wotmap et zoomer dessus
  • Aide en ligne
  • Affichage de statistiques
  • Meilleure gestion des temps d’attentes

N’hésitez pas à remonter les éventuels bugs que vous pouvez rencontrer ou vos idées d’amélioration. Le nouveau dépôt se trouve sur https://git.duniter.org/paidge/wotmap

3 Likes