Convertir des fichiers Tableur CSV en Carte Mentale Freemind avec Python

Pour visualiser des données en provenance d'un fichier tableur (Libre/Open Office, Excel; données au format CSV), il peut être intéressant de "voir" les différentes informations sous forme de carte mentale. Pour certains fichiers Tableur lourds l'information est rangée par enregistrements (lignes), et une centaine de lignes devient difficile à analyser.

FreeMind, par sa souplesse d'utilisation, est ici retenu à titre d'exemple. Un petit script Python va donc permettre d'ouvrir le fichier CSV, puis de récupérer les colonnes redondantes pertinentes. Ensuite, dans une seconde étape, les données sont formatées au format XML de Freemind, et insérées dans le fichier carte de destination, avec l'extension "MM", propre aux cartes mentales de Freemind.

L'intérêt est de regrouper certains enregistrements, à partir d'une (ou plusieurs) colonne. La visualisation des informations du tableau est alors immédiate.

Exemple.

Considérons le tableau suivant :

Dans cet exemple simple, il pourrait être intéressant de regrouper les individus par ville. Le programme Python va donc commencer par rechercher dans le fichier les villes différentes. Ces villes constitueront les premiers nœuds périphériques. A chacun de ces nœuds, donc à chacune de ces villes, il suffira d'attacher les nœuds secondaires constitués des informations sur les individus, ce qui donne:

L'idée est d'adapter ensuite au besoin le petit script Python, en indiquant comment regrouper les informations du tableur.

Détails du fichier Freemind

La carte Freemind est une carte au format XML, donc un fichier texte qui s'ouvre avec n'importe quel éditeur de texte. On peut y trouver comment sont rangées les informations.

La carte est une balise de type MAP. Cette balise s'ouvre au début du fichier et se ferme en toute fin.

Les noeuds, rangés en fonction de leur attachement à leur noeud parent, balise de type NODE. Le premier noeud, le noeud central, est donc le noeud auquel seront rattachés tous les autres. Il s'ouvre en tête de fichier, après la balise MAP, et se ferme juste avant.

Les noeuds enfants sont ensuite insérés hiérarchiquement, en fonction de leur noeud parent.

Les attributs des noeuds les plus basiques sont :

  • ID : identifiant (unique je présume!)
  • CREATED / MODIFIED : le timestamp correspondant.
  • BACKGROUND_COLOR : couleur de fond du noeud.
  • POSITION : indique si le noeud enfant est à droite/gauche du noeud parent
  • TEXT : contenu du noeud.
  • Il y d'autres attributs (HGAP, etc) pour positionner plus finement les noeuds. Mais attention, les infos présentées plus haut ne sont pas du tout garanties !

Fichiers d'exemple (disponibles en bas de page)

  • fichier d'origine CSV APB.csv (le séparateur CSV doit être le point virgule)
  • carte Freemind résultante convFreemind.mm
  • petit script Python convCSV_Freemind.py (attention version de Python 2.7.x et non 3.3.y)

Mise à jour d'avril 2014

Deux nouvelles versions du script Python sont disponibles :

  • un fichier convCSV_Freemind_v2.py, une évolution du premier script, avec un parcours récursif du fichier CSV : regroupement par colonne A, puis pour chaque case de la colonne A, les cases liées de la colonne B, et ainsi de suite...
  • un fichier convCSV_Freemind_v3.py, idem que le précédent avec interface graphique TKinter

Fichiers testés sous MacOS X et Ubuntu 14.04.

Ces fichiers peuvent nécessiter quelques connaissances en Python pour adapter le programme. Des problèmes d'indentation m'ont été remontés avec IDLE sur Windows !