Sunday Query : où meurent les Bretons ?

Ash_Crow Wikidata , Projets Wikimédia

Cette #SundayQuery part d’une question de @belett sur Twitter : comment afficher des points de différentes couleurs sur une carte générée sur le point d’accès SPARQL de Wikidata ?

Première requête

En l’occurrence, il cherchait à afficher le lieu de mort des personnes nées à Rennes ou à Brest, avec une couleur différente selon leur lieu de naissance. À ma connaissance, on ne peut pas spécifier directement la couleur des points d’une carte avec un paramètre ?rgb comme on peut le faire avec un graphe. En revanche, si la requête comporte un paramètre ?layer, la carte l’utilisera pour gérer des couches avec des points de couleurs différentes et, encore mieux, qu’on peut afficher et masquer à volonté.

Voici donc ma première réponse, en donnant à mes couches le nom de la ville via la fonction BIND, qui permet de définir à la main le contenu d’une variable :

#defaultView:Map
SELECT ?coord ?layer WHERE {
  {
    ?item wdt:P31 wd:Q5 ; # On cherche, pour des êtres humains
          wdt:P19 wd:Q647 ; # nés à Rennes
          wdt:P20 ?place . # leur lieu de décès
    ?place wdt:P625 ?coord . # enfin ses oordonnées
    BIND("Rennes" AS ?layer) . # On met manuellement "Rennes" comme valeur de ?layer
  } UNION {
    ?item wdt:P31 wd:Q5 ;  # Idem avec Brest
          wdt:P19 wd:Q12193 ;
          wdt:P20 ?place .
    ?place wdt:P625 ?coord .
    BIND("Brest" AS ?layer) .
  }

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}

http://tinyurl.com/jyzaa9o

Carte avec deux couches, une pour Rennes et une pour Brest, et montrant le sélecteur.

La carte est centrée sur l'Europe, et montre que la plupart des décès sont en Bretagne et dans les régions voisines.

Avec VALUES

Mais je ne suis pas fan des UNION quand je peux les éviter, ou de mettre le nom des ?layer à la main avec un BIND : tout ça est so SPARQL 1.0 ! Heureusement, SPARQL 1.1 apporte un mot-clef pratique pour définir une liste de valeurs autorisées pour une variable[1] : VALUES. Voici la requête améliorée pour l’utiliser, et au passage chercher les gens nés à Nantes, tant qu’à y être :

#defaultView:Map
SELECT ?item ?itemLabel ?placeOfBirth ?placeOfBirthLabel ?placeOfDeath ?placeOfDeathLabel ?image ?coord ?layer  WHERE {
  ?item wdt:P31 wd:Q5 ; # On cherche des êtres humains
        wdt:P19 ?placeOfBirth ; # Leur lieu de naissance
        wdt:P20 ?placeOfDeath . # Leur lieu de décès
  ?placeOfDeath wdt:P625 ?coord . # les coordonnées de celui-ci
  
  VALUES ?placeOfBirth { # Si le lieu de naissance est dans cette liste :
    wd:Q647    # Rennes
    wd:Q12193  # Brest
    wd:Q12191  # Nantes
  }
  
  ?placeOfBirth rdfs:label ?layer . # On définit un calque par lieu de naissance
  FILTER(LANG(?layer) = "fr") .  # en ne gardant que les noms de lieu de naissance en français
  
  OPTIONAL { ?item wdt:P18 ?image . } # S'il y a une image, on l'affiche
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en" . }
}

http://tinyurl.com/zgr6lle

Les points de Rennes et Brest sont toujours là, Nantes est venue s’y rajouter

J’en ai profité pour ajouter l’image si elle existe, qu’on voit en cliquant sur un point.

Dans toute la Bretagne

Mais pourquoi s’arrêter à quelques villes ? Autant y aller carrément avec toutes les personnes nées en Bretagne, par lieu de naissance.

#defaultView:Map
SELECT ?item ?itemLabel ?placeOfBirth ?placeOfBirthLabel ?placeOfDeath ?placeOfDeathLabel ?image ?coord ?layer WHERE {
  ?item wdt:P31 wd:Q5 ; # On cherche des êtres humains
        wdt:P19 ?placeOfBirth ; # Leur lieu de naissance
        wdt:P20 ?placeOfDeath . # Leur lieu de décès
  ?placeOfDeath wdt:P625 ?coord . # les coordonnées de celui-ci
  
  ?placeOfBirth (wdt:P131|wdt:P706|wdt:P276)* wd:Q12130 . # nés dans un lieu situé en Bretagne administrative
  
  ?placeOfBirth rdfs:label ?layer . # On définit un calque par lieu de naissance
  FILTER(LANG(?layer) = "fr") . # en ne gardant que les noms de lieu de naissance en français
  
  OPTIONAL { ?item wdt:P18 ?image . } # S'il y a une image, on l'affiche
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en" . }
}

http://tinyurl.com/zx7rww7

Il suffit de remplacer la liste de valeurs autorisées par la propriété disant que le lieu est situé en Bretagne[2]… Seulement, suivant les éléments, plusieurs propriétés peuvent être utilisées : localisation administrative (P131), localisation géographique (P706), ou tout simplement lieu (P276)… Heureusement, SPARQL permet d’interroger toutes ces propriétés à la fois, en les séparant par des « | ». Les parenthèses sont optionnelles, on aurait aussi bien pu écrire ?placeOfBirth wdt:P131*|wdt:P706*|wdt:P276* wd:Q12130 .  qui donne les mêmes résultats. Notez au passage qu’il faut alors mettre l’étoile au niveau de chaque propriété. Cette étoile sert à dire qu’il faut si besoin remonter plusieurs niveaux de résultats jusqu’à atterrir sur Q12130.

Tiens, un sapin de Noël.

Oups : comme il y a une couche par lieu de naissance, ça fait beaucoup de calques, ce qui fait que la carte devient illisible… Et que le sélecteur de calques ne peut pas tout afficher à l’écran.

Optimisation

Heureusement, il est possible d’arranger ça facilement: il suffit de demander au passage le département de naissance[3] et l’utiliser comme ?layer à la place du lieu. Histoire de rester concis, je profite du fait qu’on peut utiliser la virgule pour plusieurs valeurs partageant le même sujet et la même propriété, de la même façon qu’on peut utiliser le point virgule pour des couples propriété-valeur ayant le même sujet.

#defaultView:Map
SELECT ?item ?itemLabel ?placeOfBirth ?placeOfBirthLabel ?placeOfDeath ?placeOfDeathLabel ?image ?coord ?layer WHERE {
  ?item wdt:P31 wd:Q5 ; # On cherche des êtres humains
        wdt:P19 ?placeOfBirth ; # Leur lieu de naissance
        wdt:P20 ?placeOfDeath . # Leur lieu de décès
  ?placeOfDeath wdt:P625 ?coord . # les coordonnées de celui-ci
  
  ?placeOfBirth (wdt:P131|wdt:P706|wdt:P276)* wd:Q327, # Nés en Bretagne
                                              ?departement . # Dans un lieu...
  ?departement wdt:P31 wd:Q6465 . # Qui est un département français
  
  ?departement rdfs:label ?layer . # On définit ce département comme calque
  FILTER(LANG(?layer) = "fr") . # en ne gardant que les noms de département en français
  
  OPTIONAL { ?item wdt:P18 ?image . } # S'il y a une image, on l'affiche
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en" . }
}

http://tinyurl.com/z3cttt3

Résultat final

Résultat final

La carte montre deux résultats intéressants : beaucoup de gens meurent dans leur département de naissance et encore plus meurent à Paris.

Ces deux remarques rappellent la question de savoir quelle est la distance moyenne entre le lieu de naissance et celui de décès des gens. Plusieurs études se sont plongées dessus, notamment celle-ci, publiée dans Science en 2014 et qui se base sur Freebase[4], qui a depuis été intégrée dans Wikidata, et a des caractéristiques similaires, notamment le biais de sélection inhérent[5].

De fait, l’étude ne visait pas tant à mesurer la distance moyenne globale pour l’ensemble de l’humanité[6], mais à s’appuyer sur ce biais de sélection pour identifier des « attracteurs de mort », c’est à dire des lieux où il meurt plus de gens notables qu’il n’en naît, et par ricochet identifier des capitales culturelles. C’est le cas de Paris, où Wikidata recense 18 532 naissances contre 22 205 décès.

Ils constataient cependant qu’au cours du temps, la distance moyenne entre le lieu de naissance et celui de décès des personnes étudiées augmentait, passant de 215 km au 14e siècle à 380 km au 21e. Les Bretons présents sur Wikidata, toutes époques confondues, semblent encore plus voyageurs, avec une distance moyenne de 473 km, mais pas mal de variation entre les départements : cela va de 420 km pour les Morbihannais⋅es à 510 pour les Brétilien⋅nes.

Image d’en-tête:

Image d’en-tête : Les Merveilles de la nuit de Noël / Burzudou Nedellek (détail), par Émile Souvestre, 1844.

0 commentaire publié.

Notes de bas de page

  1. Ou plusieurs d’ailleurs.

  2. Administrative sur cette requête.

  3. Il y a les cinq départements cette fois, puisque la requête porte sur la Bretagne historique cette fois.

  4. Ainsi que sur deux bases d’artistes célèbres, non nommées dans l’article du Boston Globe.

  5. Il faut être notoire pour une raison ou une autre pour être dans la base.

  6. Je n’arrive pas à retrouver les chiffres, mais il me semble me souvenir que la majeure partie de la population mondiale vit et meurt à moins de 30 km de son lieu de naissance… Le livre The Limits to Travel de David Metz ne donne pas de chiffres pour les décès mais note que de nos jours, l’écart moyen entre les lieux de naissance de deux mariés britanniques est d’un peu plus de 50 mi.

Commentaires

Les commentaires sont fermés.