Intercept Interview 03: développeur utilisant un jeu de données

2019-11-29T23:00:00Z
Script de l’interview

A propos de toi

Q: Quel est ton background ?
R: Je suis un développeur dans l’embarqué pour l’industrie. Je suis arrivé dans les données libres via mon engagement militant au comité d’entreprise de ma boite (bilan comptable etc.) en tant que représentant des salariés. J’ai voulu les comprendre pour les expliquer à mes collègues. Puis je me suis dit que le genre de travail que j’avais fait pour ma boite, il faudrait le faire pour les toutes les entreprises, pour, entre autre, pouvoir les comparer. C’est à ce moment là que j’ai appris que ces données étaient publiées en OpenData par l’administration française.
Q: Tu as commencé il y a longtemps ?
R: J’ai eu l’idée il y a un an. J’ai commencé à y travailler en décembre 2018. Je n’ai jamais eu plusieurs jours entiers d’affilé. Plutôt plusieurs heures, je me réserve une soirée ou une après midi le week-end. Peut-être que mon expérience de développeur et des méthodes agiles m’aide aussi à découper en tâches unitaires d’une ou deux heures. Même quand je n’y travaille pas, je peux y réfléchir pour découper les tâches et avoir un livrable à la fin.
Q: Tu y travailles avec d’autres personnes ?
R: J’ai commencé seul et j’ai rejoint https://codefor.fr/, un peu par hasard. Et j’ai maintenant quelques contacts qui m’aident ponctuellement.
Q: Quel genre de langage utilises-tu d’habitude ?
R: C++ et des scripts en python. Et c’est ce que j’utilise aussi pour transformer les données pour qu’elles soient utilisables. Pour la partie web c’est du php symfony. On m’a conseillé django parce que les personnes qui traitent de la donnée utilisent plutôt du python.

A propos des jeux de données

Q: Peux-tu définir avec tes mots ce qu’est un jeu de données ?
R: Ensemble de données lisibles par un programme… non, j’enlèverais le coté lisible par un programme. L’administration française publie probablement des jeux de données en PDF.
Q: Peux-tu définir avec tes mots ce qu’est un jeu de données libres ?
R: C’est la même chose, associé à une licence qui permet de les utiliser, de les transformer, de les distribuer.

A propos de l’utilisation du jeu de donnés

Q: Depuis combien de temps utilises tu ce jeu de données ?
R: Un peu moins d’un an.
Q: Quel genre de chose fais-tu avec ce jeu de données et d’où provient-il ?
R: C’est un jeu de données très mal rangé. Il faut le parser, le re-ordonner. Je voulais afficher des graphiques concernant la répartition du chiffre d’affaire, des dépenses et de la marge de mon entreprise. J’ai ensuite généralisé pour toutes les entreprises. Dans un premier temps j’ai parsé toutes les données uniquement pour extraire celles qui me servent à afficher ces graphiques. Je n’ai donc pris que le compte de résultat, et pas le bilan comptable complet.
Q: Donc d’autres personnes pourraient afficher des visualisations différentes, auxquelles tu n’as pas pensé ?
R: Mon objectif c’est vraiment de donner un exemple d’utilisation, mettre en avant la richesse des données disponibles dans le but que d’autres personnes les utilisent. Les données publiées sont impraticables pour quelqu’un qui sait seulement se servir d’un tableur, donc mon but est aussi de les rendre facilement explorable et téléchargeable.
Q: Peux-tu donner un exemple qui montre que ces données sont mal ordonnées ?
R: Elles sont rangées par ordre chronologique de dépôt à l’administration française. Pour chercher les données concernant une entreprise, il faut savoir à quelle date le dépôt a eu lieu. Quand je me suis demandé comment comparer les données de mon entreprises avec les autres du même secteur, je me suis heurté à ce problème. Il y a des dossiers par année, puis par mois, puis par jour et un fichier zip par entreprise et le checksum. C’est ça que j’ai téléchargé pour les mettre dans une base. À l’intérieur des fichiers, les champs sont nommés avec les codes du plan comptable. La documentation associée explique la correspondance pour chaque code, dans quel cadre on peut les utiliser. Mais il y a des erreurs de saisie. Donc avant toute application, il faut tout remettre proprement dans une base pour permettre des recherche avec critère pertinent, et pas la date de dépot du document -_-.
Q: Est-ce que tu fais d’autres logiciels (en plus du site web qui affiche les informations dont tu viens de parler) qui utilisent ces données ?
R: Non. Mon ambition c’est de montrer ce qu’il y a dans la base et de donner des idées à d’autres. Par exemple montrer l’argent qui va a l’entreprise et ce qui va a l’état. J’aimerais que la donnée soit utilisable par des gens qui utilisent seulement un tableur, ce qui n’est pas possible avec des gros dumps linéaires.
Q: Est-ce qu’il y a des librairies qui t’ont aidé à manipuler ce jeu de données ?
R: Pour la visualisation j’ai bricolé avec des librairies javascript (schema network, bargraph etc.). J’ai découvert https://apiviz.io/ et l’auteur va essayer d’utiliser son front end avec mon jeu de données. Son objectif est de permettre de faire des recherches dans des données, pour peu qu’il y ait l’API qui le permette. Il a fait trois types de recherche, dont une recherche géographique et défini des critères pour filtrer ou trier les résultats de recherche. Ensuite il fait un rendu (liste, carte, etc.). Cette librairies me permettrait de faire un rendu de recherche sous forme de graphe, de réseau. Ce que je reproche à des sites comme https://opencorporates.com/ c’est que si on cherche l’entreprise “Total” on obtient une longue liste linéaire, dans laquelle il faut trouver la maison mère. Si c’était présenté sous forme de graphe avec des liens entre les entreprises ce serait plus clair.

A propos de la consommation du jeu de données

Q: As-tu été confronté à des changements de formats ?
R: Non, pas depuis la fin de l’année dernière.
Q: Et si ça se produit ?
R: Pour ne pas être trop dérangé, même si je change le format (xml -> database), j’ai décidé de stocker les données à peu près comme je les reçois. Avec l’idée que plus on transforme les données plus il est difficile de suivre une transformation des données originales, comme la suppression d’un champ. J’ai été inspiré par l’exemple d’OpenStreetMap. Ils ont une seule base de données mère avec une API très succincte. Les applications qui utilisent OSM doivent la dupliquer, pour y ajouter leur api haut niveau, via des index ou des vues par exemple selon les besoins spécifiques de l’application. La base de données mère centralise les modifications de contenu, et des diffs et dump sont générés à intervalles réguliers pour que les autres bases puissent se mettre à jour à leur rythme. OpenStreetMap permet aussi l’ajout d’information par les utilisateurs: chaque champ est versionné.
Q: Comment sais-tu qu’une nouvelle version du jeu de données est publié ?
R: Pour l’instant je ne fais pas de mise à jour automatisée. Mais la documentation dit que c’est mis à jour quotidiennement.
Q: Est-ce qu’ils publient des release notes ?
R: Il n’y a pas de transformation de données, seulement des ajouts. Il m’est arrivé de détecter des incohérences dans les jeux de données. Par exemple un Q majuscule dans un chiffre (00000Q000), probablement de l’OCR qui n’a pas marché. Je me suis demandé s’il était possible de remonter ces problèmes mais je ne suis même pas sur qu’ils le prendraient en compte. Mais en nettoyant les données de notre coté, les fournisseurs pourraient aussi venir chercher les modifications chez nous.
Q: Est-ce que la documentation a été parfois insuffisante pour comprendre la signification des champs ?
R: Non je ne pense pas. Il y a plein de termes comptables que je ne comprends pas, mais ce n’est pas un problème de documentation, c’est juste que je ne suis pas comptable ;-). Et puis je me suis concentré sur la partie du jeu de donnée qui m’intéresse. En utilisant un autre jeu de données j’ai été confronté au fait que la cadence de mise a jour est différente. Et les mises à jour sont publiées sur la forme d’un diff (par exemple “telle personne a été ajoutée”, etc.). La documentation précise que certaines modifications peuvent s’appliquer à des entités qui n’existent pas encore et qu’il faut ignorer ces cas. Heureusement une personne a déjà fait le travail d’interprétation et je peux me contenter de réutiliser ce travail. Il y a aussi des incohérences, par exemple une personne qui apparaît trois fois. Elle est enregistrée avec un nombre de prénoms différents, ce qui a provoqué l’attribution de trois identifiants différents.
Q: Tu met a jour tes données en lançant le script manuellement ?
R: Oui. Mon script relit tous les fichiers, il détecte si un fichier a déjà été entré dans la base et ne fait rien. Sinon il l’ajoute en base.
Q: Est-ce que ton script a buté sur un problème la dernière fois que tu l’as lancé ?
R: Au début, quand je le mettais au point, je rencontrait des problèmes fréquemment. Et je corrige pour le rendre un peu plus robuste. Maintenant j’ai plutôt des problèmes de lenteur sur mon serveur.