samedi 21 mars 2015

Visualisation de données généalogiques avec Gephi 1/2


Visualisation de données généalogiques avec Gephi 1/2


 Je vais vous montrer comment je crée une visualisation de données généalogiques "intégrales". Il ne s'agit pas de dessiner mon arbre généalogique mais, à partir de données collectées de manière intégrale, de visualiser toutes les familles et les liens qui les unissent, ou non.
En image de titre vous pouvez avoir un aperçu de ce à quoi on peut aboutir.
Avant de revenir sur l'intérêt en fin de présentation, commençons !

 Ah ! Voilà un hic. Il va falloir utiliser pas moins de 6 programmes ou applications pour arriver à nos fins !
Une bonne nouvelle, on peut n'utiliser que des logiciels en version gratuite voire libre.
Une autre bonne nouvelle : aucune connaissance en programmation particulière. Il y a juste quelques aspects techniques pour le tableur mais qui ne vont pas bien loin.

1.  Elie est un logiciel gratuit de généalogie développé par mcs logiciels.
Il présente notamment une bonne gestion des parrains/marraines. L'équipe de développeurs est réactive et ouverte aux propositions.

 2. Visuged est une application de visualisation basique et classique de généalogie mais qui possède des propriétés intéressantes d'export. Visuged

3.  Tout tableur fera l'affaire.

4.  Editeur de texte basique.

5.  Pas d'autre option que cette application qui met en forme les données pour le logiciel qui suit.
(développé par Sciences Po !!!)

 Le logiciel dont la démonstration m'a donné l'idée qu'on pouvait l'utiliser à autre chose que les exemples donnés (analyse graphique de textes et bibliographies).http://gephi.github.io/

Voilà, tout est en place. Y a plus qu'à.

 ETAPE 1.

Avec votre logiciel de généalogie dans lequel vous saisissez les données récoltées vous pouvez faire un export au format "gedcom".
Vous pouvez surement paramétrer les données exportées. Il faut absolument que les numéros des parents et des individus soient exportés. Le reste est de la mise en forme. Sans export des noms et prénoms le résultat sera bien sûr illisible ...
Si votre logiciel permet un export au format "csv" vous pouvez sauter l'étape 2 !

 ETAPE 2.

Ouvrez votre fichier gedcom dans VISUGED.
Exportez Liste des individus.
Choisissez comme paramètres : numéro, nom, prénom, n° du père, n° de la mère, n° du conjoint (au minimum, d'autres informations peuvent être ajoutées si vous souhaitez les faire apparaître dans la visualisation). Vous obtiendrez un fichier "csv".

 ETAPE 3.

ouvrez le "csv" avec votre tableur préféré (capable de sauvegarder en "csv").
Il faut maintenant mettre les données dans une forme lisible pour table2net.
L'idée sera de croiser deux colonnes : une qui servira à créer les "nœuds" individuels (à priori un par individu) et l'autre qui servira à coder les liens qui peuvent exister entre eux.
On doit utiliser celle des "n° d'individu" pour la première (à priori différente du SOSA). Quand on saisit un nouvel individu dans une généalogie, le logiciel lui attribut un numéro d'ordre (le suivant en partant du nombre d'individus déjà existant). Dans le tableur, à l'ouverture les individus apparaissent dans cet ordre.
Vous devrez créer la deuxième colonne de toute pièce (plus quelques autres)
En effet, pour créer la visualisation, GEPHI n'utilise que deux colonnes principales (d'autres informations peuvent être affichées mais elles ne seront pas utilisées pour les calculs).
Pour représenter les liens entre les individus il faut donc trouver un moyen de les résumer tous en une seule case.
Il suffit donc de "concatener" les différents liens à des individus qui seront donc "référencés" pour ainsi dire dans une case.
dans open office calc on utilisera la fonction "concatener".
nous allons concaténer 4 cases : n° d'individu, n° du père, n° de la mère et n° du conjoint.
parfois ces cases sont vides mais ce n'est pas grave.
Table2net ne fera la différence entre ces 4 informations que si elles sont séparées d'un "dash", c'est à dire le "tiret du 6" ou "signe moins". Il faudra créer trois autres colonnes (entre chacune des 4 autres) avec des "moins" pour faire la concaténation (on ne fait que la première case bien sûr. Des reports et des copier/coller permettent de faire rapidement le reste).
On pourra ainsi entrer comme formule dans la case finale : =concatener(A1;A3;A4;A5;A6;A7;A8).
Il marquera un résultat comme : 143-12-13-0
Les cases A3, A5 et A7 contiennent les "-".
l'individu porte le numéro 143, son père le 12, sa mère le 13. Il n'est pas marié (dans la base) le n° de conjoint est donc 0.
Profitez en donc pour corriger les erreurs de tabulation. Supprimer les "accents" qui passent mal et vérifiez vos données. Les noms composés avec des espaces doivent être simplifiés. J'ai personnellement choisi de supprimer l'espace (ce qui demande quelques manipulations dans le tableur).
Laissez bien les noms des "têtes de colonnes" quitte à les renommer comme vous voulez.
Il faut absolument que le tableau soit "propre" pour les opérations suivantes, soit : "les bonnes données dans les bonnes cases".
Enregistrer au format "csv".


 Voilà ce que vous obtenez peut-être ...


 ETAPE 4.

Ouvrez le "csv" avec wordpad (ou un autre éditeur de texte, mais il faudra sauvegarder en csv ensuite aussi).
Il faut terminer la mise en forme des données pour table2net qui ne comprend pas le séparateur ";" qui est celui par défaut dans un tableur. Or tous les tableurs ne permettent pas de modifier cet élément.
Pas besoin de comprendre exactement de quoi je parle, je vous rassure (je n'en sais d'ailleurs pas beaucoup plus que ce que je dis).
Wordpad possède la fonction qu'il nous faut pour modifier directement le "code" dans lequel est écrit le fichier pour que les tableurs "sachent" dans quelles cases sont les données.
Vous allez utiliser la fonction "remplacer par"
Il faut saisir ";" "le point virgule" dans la case "chercher" et "," "la virgule" dans la case "remplacer par".
Cliquez sur "remplacer tout".
Sauvegardez. Vous pouvez fermer et le rouvrir pour vérifier que la manipulation est inscrite.

 ETAPE 5.

Allez sur le site de table2net, application de Sciences Po, rien de moins.
Elle va permettre de mettre en forme les données pour Gephi.
Vous pouvez ouvrir le fichier "csv" que l'application charge. Elle vous en donne un premier aperçu sur quelques lignes qui permet de voir s'il n'y pas eu de problème de mise en forme. Le rappel des têtes de colonnes vous permettra de bien désigner celles que l'on veut que l'application prenne en compte.
Vous allez choisir comme type (network) : citations.
Comme "nœuds" (nodes) choisissez : numéro (de l'individu). Comme attributs vous devriez choisir les nom et prénom au minimum, et d'autres si vous souhaitez pouvoir les consulter dans la visualisation. Attention, plus on ajoute de critères plus les visualisations sont lentes ...
Comme "liens" (links) choisissez la colonne que vous avez créée en concaténant. IMPORTANT : sélectionnez le "dash" comme séparateur (c'est le tiret du 6). Inutile d'ajouter des attributs.
Dans les options additionnelles ne choisissez rien pour l'instant.
Build the network ! (fichier "gexf").

 TADAA ! ETAPE 6. Etape finale.

Ouvrez "Gephi".
Attention, s'il ne s'ouvre pas c'est peut être un problème d'application "java" (qui gère l'environnement graphique). Au moment ou j'écris ces lignes (par exemple), alors que java 8 est sorti j'ai dû réinstaller la 7 pour Gephi ...
ATTENTION : Sur la première fenêtre qui vous informe de la quantité de données de votre fichier, il faut désélectionner "générer automatiquement les noeuds manquants" sinon, pour des données incohérentes en référence à un noeud qui n'existe pas il les créera (pour les "zéro" du tableur par exemple), cela peut rendre le résultat difficilement lisible.
Nous allons créer des variables qui pourront être utilisées pour la mise en forme.
Je ne maîtrise pas encore assez pour connaître les "vraiment utiles" des "moins utiles". N'hésitez pas en m'en faire retour (je ne suis pas mathématicien).
Si vous avez trop de données il est peut être utile de commencer par supprimer celles qui, de toute façon, ne seront pas utiles (on peut le faire d'ailleurs dans le tableur pour restreindre la visualisation).
Dans l'onglet (en haut) "laboratoire de données" vous pouvez supprimer des lignes inutiles.
Si vous aviez créé des individus "X" car pas encore documentés, ou si l'application a créé des lignes pour l'individu "0" qui va se retrouver avec tous les liens inexistants, vous pouvez les supprimer avant toute manipulation.
Dans le menu de droite "statistiques" je vous conseille de calculer (appuyer sur "exécuter") :
degré - modularité - composantes connexes et plus courts chemins. Ces données sont maintenant disponibles dans le "laboratoire".
Les nœuds sont ordonnés au hasard au départ.
Ils sont tous gris. Afin de commencer à les distinguer les uns des autres nous allons utiliser la fonction de gauche : "partition" et "nœuds". Cliquez sur les deux flèches (symbole "rafraichir").
Choisissez "nom" et validez. Chaque nœud a maintenant une couleur identique si l'individu porte le même nom (attention, strictement écrit pareil, ce qui pourra vous donner des idées pour des essais ultérieurs).
Nous pouvons également modifier la taille de chaque nœud en fonction d'un paramètre.
Onglet "classement", choisissez le paramètre. Degré est la somme de tous les liens passant par un nœud, betweeness centrality est une évaluation de son "importance" dans le système (je préfère celui-là). Cliquez sur le "diamant rouge" et validez. Vous distinguez maintenant parmi tous les individus ceux qui ont une importance particulière (surement dûe au nombre d'enfants s'il s'agit d'une généalogie familiale).
Nous allons utiliser "spatialisation" à gauche pour qu'ils commencent à se déplacer en prenant en compte les caractéristiques que je viens de vous faire calculer et les nombres de liens entre chaque nœud.
Si vous souhaitez éliminer certains nœuds mineurs (très peu de liens) vous pouvez retourner dans les données. Vous constaterez que le logiciel a ajouté une colonne pour chaque valeur que nous lui avons fait calculer. En classant dans la colonne "degré" vous repérerez peut-être des données qui ne sont pas nécessaires et que vous pouvez supprimer pour alléger la visualisation.
Dans "spatialisation " différentes fonctions permettent de modifier la position relative des nœuds selon des algorithmes paramétrables :
les 2 "force atlas" déplacent les nœuds en créant un système virtuel de "gravité" au centre, vers lequel sont attirés les nœuds au "poids" le plus élevé en fonction du nombre de liens qu'ils ont avec les autres. Ils sont freinés par les nœuds à faible poids auxquels ils sont reliés. Les petits systèmes sont donc repoussés en périphérie.
Pour tester les fonctions, je vous propose de commencer par un "force atlas" en augmentant la force de répulsion à 1000 si comme moi vous avez beaucoup de nœuds (1455 pour moi...).
Si vous attendez trop et que l'ensemble est trop étiré, utilisez "contraction". "Expansion" fera l'inverse mais d'une manière non pondérée contrairement aux autres algorithmes.
Faites en suite un "petit" "force atlas 2" avec la fonction "empêcher le recouvrement". Les nœuds ne se superposeront plus.
Essayez les autres fonctions. Lorsque l'on clique sur chaque option, une brève explication apparaît en bas (très succinte).

 Visualiser les individus.
Pour l'instant vous avez des ronds plus ou moins gros et de couleurs différentes (on peut évidemment changer les couleurs à sa convenance).
Nous allons maintenant afficher les noms des individus (chaque nœud en est un).
En bas de la fenêtre de visualisation sont des options de mise en forme de type "traitement de texte".
Appuyez sur le "T" majuscule pour afficher le label.
Si vous avez suivi mes conseils, c'est le numéro de l'individu qui apparaît dans chaque rond.
A droite de cette ligne d'options il y a un petit icône qui permet de développer cette zone, faites-le.
Dans l'onglet "label", le dernier, tout à droite il y a un menu "éditer", allons-y.
Décochez "label" et cochez "nom" et "prénom". Le résultat est immédiat.
Modifier la taille de la police dans le menu de mise en forme, où est indiqué le nom de cette police il y a une petite réglette à curseur déplaçable.
Une fois la taille des noms à votre convenance, pour clarifier tout cela, dans "spatialisation" vous pouvez choisir "ajustement des labels" et les nœuds bougeront pour que les labels de la taille choisie ne se chevauchent plus.
N'hésitez pas à regarder les autres options de mise en forme. On peut jouer sur l'attractivité des nœuds liés, leur répulsion. Etc.
En zoomant sur un système particulier vous pourrez mieux voir les liens qui relient les nœud. Il s'agit en fait de flèches sortantes ou entrantes. Si vous avez fait comme moi, les époux sont reliés par deux flèches de sens inverse (vous maîtrisez également l'épaisseur de trait des flèches). Un individu génère au moins une flèche sortante vers chacun de ses parents.
Lorsque l'on passe le pointeur sur un rond, restent affichés uniquement les nœuds qui ont un lien direct avec lui.
En cas d'un trop grand nombre de données on peut réduire le nombre de nœuds comme je l'ai dit plus haut et être plus sélectif sur leur pertinence.




 Épilogue

L'intérêt par rapport à la visualisation classique de tout logiciel de généalogie qui se respecte, c'est la possibilité de voir tous les individus d'un coup et d'une manière plus esthétique. L'inconvénient étant que cela peut être très confus au départ et que cela demande un travail de mise en forme qui peut être important. Cela dit, la bonne idée du logiciel c'est aussi que lorsque l'on met le pointeur sur un nœud, seuls ses voisins restent apparents.
Pour aller plus loin il faut vraiment tirer partie du caractère paramétrable du logiciel qui permet de mettre en évidence des informations (méta-informations) que l'on ne pouvait pas facilement voir avant.
Quelques exemples :
L'accès direct aux données permet de sélectionner et de se concentrer sur des individus, des lignées, des noms...
L'outil de recherche de liens dans la fenêtre principale à gauche (en forme d'avion) est également intéressant. Une fois sélectionné vous cliquez sur un premier nœud puis un deuxième, le logiciel vous matérialise le plus court chemin entre les deux (s'il existe).
La "carte de chaleur", en sélectionnant l'option "ne pas peindre les nœuds hors de portée", permet de voir toutes les connexions au nœud sélectionné colorées en fonction de leur "force" (contrairement à ceux mis en surbrillance par le passage du pointeur qui ne sont que les directs).
Dans un second article j'essaierai de montrer comment mettre en valeur des données plus riches grâce au tableur.

Références :

page de "Gephi"

Visualisation de données généalogiques avec Gephi 2/2


Pour cette deuxième présentation, je vais axer sur la préparation des données dans le tableur.


 Quels objectifs ?

Je m'amuse avec une généalogie globale.
Est-il possible, à partir des archives d'une petite commune, en intégrant la totalité des individus (j'en suis à 1500 environ), de rendre compte d'une communauté et des liens qui existent ?
Existe-t-il des clans ? des familles isolées ? Qui sont les personnages incontournables de la communauté ?

 Quelles données ?

Maintenant, la plupart des archives départementales sont accessibles gratuitement en ligne. Il ne tient qu'à chacun de s'en saisir.
Cela passera par un apprentissage intéressant et peu difficile de la graphie ancienne du français. Il s'agit d'être systématique et exhaustif.
Il y a tout de même un "biais de saisie" qu'il faut mentionner. Peut-être que la visualisation permettra d'ailleurs d'en restreindre les effets.
Une part des individus saisis sont des témoins. Témoins des naissances (parrains et marraines), et témoins des mariages (j'ai exclu les officiants qui n'ont pas de caractère personnel puisqu'ils officient pour tous).
Or, sans plus de précisions et en raison d’homonymies possibles, nous ne pouvons pas identifier avec certitude ces témoins avec des personnes présentes ou à venir dans la base.
Aussi ai-je choisi de toujours relier ces témoignages au même individu qui peut s'en trouver artificiellement "hypertrophié" dans son importance dans le réseau social (c'est l'hypothèse la plus "économique" qui doit prévaloir).
J'ai parfois dû créer un nouvel individu quand "il" réapparaissait bien plus tard avec un gros doute sur la possibilité que le même vive encore.
On se retrouve donc avec un ensemble d'individus dont on connait parfois les dates de baptême, de décès,le mariages et les témoins à ces différents évènements.

 La sélection et le traitement des données.

Les logiciels de généalogie ne permettent malheureusement pas d'exporter en une fois les données utiles pour les mettre au format spécifique exploitable par gephi.
Le fichier gedcom ne contient pas la qualité de témoin. Le logiciel ELIE permet toutefois de les exporter directement en "xls", mais en plusieurs fois ; témoins de baptêmes, témoins de mariages.
De plus, les témoins de mariage sont rattachés au couple selon un numéro de famille qui leur est attribué lorsque l'on enregistre l'union. Ce numéro de famille n'est pas non plus exporté dans le gecom. Il est par contre exportable seul.
Je conseille de garder l'information "sexe" qui sera utile pour la mise en forme des données par tri.
Donc on devra successivement :
1. exporter le gedcom et le transformer en xls (pour les tableurs)
2. exporter les n° de familles et les inclure dans le xls
3. exporter les témoins de mariages et les y inclure
4. exporter les témoins de baptêmes et faire de même.
Pour des raisons pratiques, avant chaque étape il faudra remettre en forme les données.
1b. simplifier le tableau et supprimer les accents. simplifier les noms composés en supprimant les espaces.
2b. On aura pris le soin de créer une colonne "n° de famille" dans sa base pour pouvoir y coller l'information.
on ajoute les lignes de n° de famille. le mari apparaît en premier. modifier leur sexe en "A", ce qui permettra de les re-trier facilement pour les supprimer après le recopiage de l'info.
par un copie/coller on refait des lignes pour les épouses avec les mêmes informations (n° de famille, sexe). On colore le fond de toutes ces lignes pour les retrouver plus facilement.
 Par un tri selon le n° d'ordre on se retrouve avec des doubles pour tous les individus mariés. Il n'y a plus qu'à recopier l'info du n° de famille pour chacun d'eux. Une fois fini on trie à nouveau par le sexe. Toutes les lignes à supprimer se retrouvent ensemble et on les enlève. Sauvegarder !
3b. On procède de la même manière pour les témoins de mariage. On classera par le numéro de famille grâce à l'info que l'on ajoutée précédemment.
On créé une colonne témoin_mariage. Dans la mesure où un individu peut l'être plusieurs fois, on indiquera les numéros de deux époux pour chaque mariage, séparés par des "tirets du 6". On supprime les lignes en trop comme précédemment.
4b. C'est à peu de choses près pareil pour les témoins de baptêmes. Attention, ces lignes importées contenant l'info des témoignages prennent la forme d'une ligne par témoignage. Or, chaque individu a pu être témoin plusieurs fois et ils sont déjà présents dans la base. Il faut prendre les même précautions de repérage que pour les autres. On portera les informations dans une nouvelle colonne "temoin_bapteme".

 Finaliser le tableau.

Gephi n'utilise que deux colonnes de référence. Une pour les nœuds, une pour les liens qui les relient.
Les noeuds seront représentés par le numéro d'ordre. vérifiez bien (avec la base originale du logiciel de généalogie) qu'il n'y a pas eu de décalage.
Les liens seront représentés par une seule colonne, appelons là "citations" où apparaitront les numéros de tous les individus auxquels celui de la ligne est connecté, quelle qu'en soit la raison.
Il s'agit donc de "concatener" les infos des précédentes colonnes avec un séparateur.
Il faut ajouter des colonnes intermédiares qui contiennent ce séparateur entre chaque colonne qui contient ces informations. Le séparateur est le "tiret du 6".
Ensuite seulement on peut utiliser la fonction "concatener" pour remplir la dernière colonne.
Attention, la fonction doit s'écrire à la main. Je vous conseille d'intégrer en premier le propre n° de l'individu à des fins ultérieures de vérification dans Gephi.
CONCATENER () ; entre les parenthèses, il faut indiquer les cases les unes à la suite des autres en les séparant d'un "point-virgule".
Après on peut recopier la formule sur toute la colonne, il fera la manipulation tout seul.
Il faut terminer par ouvrir le fichier dans un traitement de textes et transformer tous les "point-virgules" en "virgules" pour que Table2net puisse traiter le fichier.

 Les données utilisées.

Table2net prépare les données pour Gephi.
Après une vérification rapide des premières lignes de données on indique que l'on va utiliser la fonction "citation".
On indique la colonne du n° comme déterminant les nœuds (il n'y a qu'une "expression" par cellule).
On peut donner les noms et prénoms comme attributs. Cela permettra de les afficher à la place du numéro. Attention, le numéro est essentiel car c'est à lui que se réfère la colonne citations.
On désigne la colonne "citations" comme citation (d'où le nom...).
Il faut indiquer que le séparateur des données est le "dash", c'est le "tiret du 6" (sinon on obtient n'importe quoi).
Aucun attribut à préciser.
A ce stade, vous comprenez que Gephi ne fera pas de différence entre les liens : ils auront tous la même valeur sans distinction de s'il s'agit d'un parrain, d'un témoin ou d'un père.
Je pense essayer d'en pondérer certains dès le tableur.
On pourra toutefois repérer les parents dans la visualisation. En effet, les parents auront des liens réciproques contrairement aux enfants avec leurs parents. Des cas particuliers pourront apparaître mais rarement : deux frère et sœur témoins mutuels à leurs mariages ou un parent témoin du mariage de son enfant.
Dans les "options additionnelles" il est intéressant d'ajouter la "time series" et de désigner le numéro d'ordre.
En effet, les données saisies dans le logiciel de généalogie le sont généralement par ordre chronologique (dans un cas comme le mien, qui n'est pas familial). Aussi, le numéro d'ordre des individus rend compte d'une certaine temporalité.
Gephi pourra proposer une visualisation selon ce critère qui peut être intéressante pour voir une évolution dans le temps.

 Dans cette exemple on voit plusieurs choses (on est au XVIIème siècle) :

C'est Jan Hattes qui est sélectionné, seuls ses liens directs apparaissent.
1- Jan Hattes est l'époux de Françoise de Montalembert (flèches réciproques)
2. ils ont eu au moins quatre enfants : Isaur, X et deux marguerittes (l'une est décédée en bas âge), flèches unidirectionnelles vers Jan. La couleur des nœuds représente le même nom de famille.
3. Jullian Marot et Charles Hallet sont surement des témoins du mariage de Jan Hattes.
4. La taille des nœuds est fonction du paramètre "betweeness centrality" qui met en évidence les nœuds importants, qui ont un grand nombre de connexions singulières. Jullian Marot est un personnage central de la communauté. Magistrat de la ville, il est souvent sollicité pour être parrain des enfants et témoin de mariage.
On voit par sa taille que Jan Hattes est lui-même pas mal sollicité. Il a au moins été témoin de deux personnes visibles ici, Marie Ruaulx et Jan Delamare (surement parrain, on prend souvent le prénom du parrain pour un garçon).
On distingue "l'auto-lien" de Jan Hattes. Il est dû au fait qu'on ai rappelé le numéro de l'individu dans la case "citations". C'est un bon moyen de vérification des nœuds dans le tableau. Un nœud sans lien a forcément été généré par la machine.
à vos généalogies !

Références :

 logiciel Elie
 application table2net
 logiciel gephi
Site des archives départementales de l'Ille-et-Vilaine (par exemple)