Data.gouv, c’est quoi ?

 

Le site data.gouv.fr est un site, lancé dans sa version 1.0 en 2011. À l’époque, c’était pas terrible. Mais depuis début 2014, ça a fait du chemin.

La première utilité du site est la publication en open-access de données gouvernementales. Budgets, statistiques, listes de choses et d’autres .. On trouve de tout sur data.gouv.

Sa deuxième utilité est la publication de données par des citoyens lambda, mais SURTOUT des possibilités de réutilisations de ces données. Par exemple, une jolie carte de l’obésité en France, dessinée grâce à un jeu de donnée sur les habitudes alimentaires de nos bons concitoyens.

 

Et euh, pourquoi tu rages alors ?

 

Je tiens tout de même à mettre ça au clair, Jeannette. L’initiative en tant que telle est bonne. Très bonne même. Il faut militer pour l’open-access pour tout ce qui est possible.

 

Seulement voilà.

 

Alons-y par paliers, tu veux bien très chère ?

Récupérer les données

 

Pour un data scientist, tout doit être automatisable (c’est français, ça ?).

Récupérer, en 50 lignes de Python, beaucoup de data. Pour ce faire, une fois n’est pas coutume, ouvre moi vite un éditeur de texte.

 

import re
import time
import json
import urllib
import requests

''' Variables '''
start = time.time()
success = 0
error = 0
errorURL = []

''' Endpoint '''
url = 'https://www.data.gouv.fr/api/1/topics/'
response = urllib.request.urlopen(url)
data = response.read()
encoding = response.info().get_content_charset('utf-8')
dataGouv = json.loads(data.decode(encoding))
''' Parsing level 1 '''
for i in range(0, len(dataGouv['data'])):
    ''' For every dataset '''
    for j in range(0, len(dataGouv['data'][i]['datasets'])):
        title = dataGouv['data'][i]['datasets'][j]['title']
        url = dataGouv['data'][i]['datasets'][j]['uri']
        ''' Get second level '''
        try:
            response2 = urllib.request.urlopen(url)
            data2 = response2.read()
            encoding2 = response2.info().get_content_charset('utf-8')
            data2Gouv = json.loads(data2.decode(encoding))
        except:
            continue
        ''' For every file '''
        for k in range(0, len(data2Gouv['resources'])):
            try:
                f = urllib.request.urlopen(data2Gouv['resources'][k]['url'])
                filename = dataGouv['data'][i]['name'] + '__' + title + '__' + data2Gouv['resources'][k]['title']
                urllib.request.urlretrieve(data2Gouv['resources'][k]['url'], filename) 
                print('Downloaded : {}'.format(f))
                success += 1
            except:
                errorURL.append(data2Gouv['resources'][k]['url'])
                error += 1
''' Get URL with no file downloaded '''
fToWrite = open('./0_ERROR_URL.csv', 'w')
for URL in errorURL:
    fToWrite.write(URL + '\n')
fToWrite.close()
print('Elapsed time : {}\nSuccess : {}\nError : {}'.format(time.time()-start, success, error))

 

Voilà, on ne détaille pas, ce n’est pas le sujet, veux-tu ? Mais tu remarquera les 49 lignes, pas une de plus.

Ce script va donc parcourir le site data.gouv et récupérer tout ce qu’il peut.


Tu te retrouves ainsi avec un dossier de 444 fichiers, divers et variés, représentant 54.9 Go récuprées en suivant 819 liens à partir de l’API de data.gouv.

Bon, à l’heure où ce billet est écrit, le site nous annonce 25125 jeux de données.

Si on les croit, tu viens de récupérer moins de 2% des données publiées, en terme de notre de fichiers.


Pourquoi un tel écart ? Simplement parce que des sites comme l’INSEE, pourtant une espèce de référence à la Française, ne daignent pas donner DIRECTEMENT accès à ses jeux de données.

Donc souvent, tu te retrouves avec, à la place de l’URL du fichier, une URL pointant vers le site de l’INSEE.

Donc, oui, il est possible de récupérer ces données via d’autres alternatives (scraping de la page, trouver le lien du fichier, le télécharger). Mais on parlait d’aller VITE au début de cet article.

Hey, vous avez vraiment à ce point besoin d’augmenter le traffic sur votre site à l’INSEE ?

 

data.gouv statitics meme

 

Bref, une accessibilité des données qui laisse à désirer.

Pitié, chez data.gouv, centralisez tout sur un seul serveur, et laisser les gens piocher.

 

Exploiter les données

 

Et là, on arrive au fond de l’urinoir, Jeanette. Vraiment.

format fichiers data.gouv

Si le Capitaine Haddock était un data analyst, il te sortirait la plus longue suite d’insultes que tu as jamais entendu, ma petite.

En se basant sur les extensions des fichiers, tu obtiens moins de 42% de fichiers analysables automatiquement (JSON et CSV).

SINCÈREMENT, data.gouv ? Mettre des données en tableur Excel ?

 

Une conclusion ?

 

Les initiatives de publications de données, quelles qu’elles soient, doivent être encouragées. Mais ne confonds pas ça avec l’anarchie, Jeanette.

Une uniformisation des formats doit être mise en place (je ne t’ai pas parlé des tableaux avec un nombre de colonnes différent pour chaque ligne, ni des archives renfermant des .. archives).

De plus, quand on se pâme de tout publier, on s’arrange pour que tout soit accessible de la même manière. Je conçois que tout le monde n’a pas besoin de télécharger l’intégralité du site data.gouv.fr, mais sérieux, les gars, ça ferait plus pro si c’était possible.

Et je suis également d’accord, on peut extraire ce qu’on veut et le reformater à la main. Mais bon, va faire des graphiques et des statistiques à la chaîne après.

Enfin, tout ça décourage un peu de se lancer dans une étude digne de ce nom sur ces données, aussi interessante puisse-t-elle être.

 

 

Allez, va regarder les courbes de l’INSEE sur les personnes agées s’initiant à l’informatique.

 

 

PS : Le code, sur Github. Améliore ça, si tu as des idées, moi j’ai des archives d’archives à décompresser.

 

2 thoughts on “data.gouv.fr est un site bienveillant qui te rend fou”

·

[…] toi. Dis donc, tu te rappelles du post où je critiquais le site data.gouv en disant qu’on pouvait rien en faire ? Eh bien c’est toujours […]

·

[…] Tu définis ensuite une fonction a qui on fournit une année, un mois, un jour et qui va créer un dictionnaire avec ça. Tu vois la requête POST avec session.post. Puis tu extrais les données du json de réponse du site, comme lors du data mining sur data.gouv.fr. […]

Post your comment