- Le blog participatif de bioinformatique francophone depuis 2012 -

Cartographie des formations en bioinformatique en France

L'origine du pro­jet :

carte

Dans le cadre d'un pro­jet tuto­ré du mas­ter de Bio­in­for­ma­tique de Rennes, nous avons mis en place un pipe­line d'analyse des mails envoyés par la SFBI durant l'année 2014. Plu­sieurs modules ont été déve­lop­pés sous la forme de scripts Python, par un ou plu­sieurs étu­diants. Je me char­geais de déve­lop­per un module capable de géné­rer des cartes à par­tir des don­nées extraites des mails par d'autres modules. Au cours du déve­lop­pe­ment du module de car­to­gra­phie j'ai pu déve­lop­per un module capable à par­tir de fichiers tabu­lés de géné­rer deux cartes :

  • Une pre­mière affi­chant le nombre de labo­ra­toires dans nos ana­lyses par ville, en dis­tin­guant les labo­ra­toires publics des labo­ra­toires pri­vés.
  • Une autre carte affi­chant les thé­ma­tiques de recherche ville par ville.

Ayant pu déve­lop­per rapi­de­ment ce module, Oli­vier Dame­ron, l'un des deux tuteurs, m'a pro­po­sé de déve­lop­per un autre module capable de géné­rer une carte des for­ma­tions en bio­in­for­ma­tique, en France, en m'inspirant de ce que j'avais déve­lop­pé et en uti­li­sant les don­nées du site jebif​.fr.

La tech­nique :

Le script a été déve­lop­pé en Python 2.7, comme l'ensemble du pro­jet.

J'ai tes­té plu­sieurs biblio­thèques gra­tuites capables de géné­rer des cartes ; fina­le­ment mon choix s'est por­té sur Folium, un module gra­tuit capable de géné­rer des cartes inter­ac­tives en s'appuyant sur lea­flet, une librai­rie JavaS­cript. Folium s'est avé­ré très souple à l'usage car ne néces­si­tant pas d'autres modules. La carte géné­rée est sous la forme d'un fichier HTML qui contient toutes les don­nées affi­chées sans avoir besoin des fichiers sources.

carte.001
Le prin­ci­pal pro­blème est que le module a besoin des coor­don­nées GPS pour pla­cer un point. Or dans ce script comme dans le pro­jet, la seule indi­ca­tion géo­gra­phique à ma dis­po­si­tion est la ville. Pour pas­ser de l'un à l'autre, j'ai uti­li­sé une base de don­nées trou­vée sur le site Geo­Names, qui réper­to­rie les coor­don­nées GPS des villes de plus de 1000 habi­tants dans le monde. Un grand nombre d'autres don­nées sont four­nies mais ne m'ont pas été utiles ici. Un script Python m'a per­mis d'extraire les don­nées et de géné­rer un dic­tion­naire des coor­don­nées GPS. Pour cette carte j'ai uti­li­sé une ver­sion sim­pli­fiée en ne pre­nant en compte que la France. À par­tir du nom de la ville, le script a pu accé­der à la lati­tude et la lon­gi­tude. Dans le dic­tion­naire, le nom de la ville sert de clé pour retrou­ver les coor­don­nées. Le dic­tion­naire a été  enre­gis­tré dans un fichier via la librai­rie pickle et est dis­po­nible sur le gitHub sous le nom "DicoPosit.txt".

La source des don­nées pour le script est un fichier csv conte­nant le nom de la ville, le nom de la for­ma­tion et le lien html vers la page cor­res­pon­dante sur le site JeBiF​.fr. Ce fichier a été géné­ré à la main avec libreof­fice mais peut être géné­ré manuel­le­ment ou auto­ma­ti­que­ment. Le script a lu ce fichier et a ras­sem­blé les for­ma­tions par ville dans un dic­tion­naire puis par type de for­ma­tion dans des listes conte­nues dans le dic­tion­naire.

Ensuite le script a ité­ré ville par ville, et pour chaque ville sur chaque type de for­ma­tion. À chaque étape, le script a ajou­té un cercle de taille pro­por­tion­nelle au nombre de for­ma­tion, d'une cou­leur dif­fé­rente selon le type de for­ma­tion (Mas­ters en rouge, DUT en bleu et Licences en vert) et une éti­quette s'affichant en cli­quant sur le cercle. Le texte de l'étiquette est com­pa­tible avec les balises HTML, ce qui a per­mis ici de géné­rer des hyper­liens et de mettre les titres en gras.

for mas­ter in Lis­te­Vil­le­Mat­ser :
lien = creerLien(master[1], master[2])
tag=tag+lien + "<br>"
ajouterPoint(ville, "FR", 5000*len(ListeVilleMatser),tag,"#3ADF00")
Le prin­ci­pal incon­vé­nient est la super­po­si­tion des don­nées. Si deux cercles sont sur la même ville, ils doivent avoir une taille dif­fé­rente. Pour pal­lier cela, le script crée un cercle de mas­ter plus gros s'il n'y a qu'un Mas­ter pour évi­ter qu'il ne soit recou­vert par une autre for­ma­tion. Si un cercle plus gros est posé sur un cercle de petite taille, alors le petit cercle ne peut pas être sélec­tion­né. L'astuce a été de com­men­cer par des­si­ner les cercles les plus gros ; ici ce sont sys­té­ma­ti­que­ment les Mas­ters.

La carte sera dis­po­nible sur le site de JeBiF très pro­chai­ne­ment pour illus­trer l'annuaire des for­ma­tions en cli­quant sur ce lien.

-Le script est dis­po­nible à ce lien : https://​github​.com/​j​a​c​k​l​a​b​e​l​e​t​t​e​/​C​a​r​t​o​g​r​a​p​h​i​e​J​e​B​i​f​/​t​r​e​e​/​m​a​s​ter

Mer­ci aux nom­breux relec­teurs de cet article : Yoann M, Mathu­rin, Nico M, Nol­wenn et Estel, mer­ci aux admi­nis­tra­teurs de ce blog de m'avoir per­mis de publier cet article et un grand mer­ci à Oli­vier Dame­ron pour m'avoir conseillé de réa­li­ser cette carte et de la publier.

Vous avez aimé ? Dites-le nous !

Moyenne : 0 /​ 5. Nb de votes : 0

Pas encore de vote pour cet article.

Partagez cet article :




Commentaires

Laisser un commentaire