User
Lepticed7/LiliMap
< User:Lepticed7
Cette page décrit le protocole à suivre pour obtenir la carte du contributorat de Lili.
Script python
Ce script requête les données sur Lili, Wikidata, les associe et génère un fichier csv.
import requests
import re
import numpy as np
from qwikidata.sparql import return_sparql_query_results
def fetch_lili_data():
url = "https://lingualibre.org/bigdata/namespace/wdq/sparql"
myobj = {"query":"""SELECT ?loc (COUNT(?loc) AS ?weight) WHERE {
?item prop:P2 entity:Q3.
?item prop:P14 ?loc.
FILTER regex(?loc, "Q")
} GROUP BY ?loc"""}
x = requests.post(url, data=myobj)
weights = {}
for q, n in re.findall(r"(Q\d+)<\/literal>.+?integer'>(\d+)<\/literal>", x.text, re.VERBOSE | re.DOTALL):
weights[q] = int(n)
return weights
def fetch_wiki_data(locations):
query_string = f"""
SELECT ?loc ?coords
WHERE
{{
?loc wdt:P625 ?coords.
VALUES ?loc {{ {" ".join(["wd:" + loc for loc in locations])} }}
}}"""
results = return_sparql_query_results(query_string)
coordinates = {}
for result in results['results']['bindings']:
loc = result['loc']['value'].split("/")[-1]
coords = result['coords']['value']
coords_match = re.match("Point\((.+) (.+)\)", coords)
x = coords_match[1]
y = coords_match[2]
coordinates[loc] = (y, x)
return coordinates
def export_csv_file(lili_data, wiki_data):
file = open("out.csv", "w")
try:
file.write('Lat,Lon,Weight\n')
for loc, coords in wiki_data.items():
file.write(f"{coords[0]},{coords[1]},{np.log(lili_data[loc]*10)}\n")
finally:
file.close()
lili_data = fetch_lili_data()
wiki_data = fetch_wiki_data(lili_data.keys())
export_csv_file(lili_data, wiki_data)
Visualisation
Pour visualiser les données, Kepler.gl est utilisé :
- importer le fichier csv
- dans les layers, choisir Heatmap
- paramétrer les colonnes Lat, Lon et Weight avec les champs associés
- (conseil) augmenter le rayon de la heatmap à 100%
- (conseil) cliquer sur la barre des couleurs et activer "reversed"