es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SPARQL Encuentra múltiples términos de búsqueda al mismo tiempo.

Lo siento, pero no tengo ni idea de cuál es el término adecuado que usar aquí, lo que también hace imposible buscar lo que quiero hacer. Hace apenas una hora me enteré de SPARQL.

Básicamente, tengo 475 ciudades de las que quiero saber las áreas. Al buscar varias cosas para encontrar una lista preexistente (o incluso una guía GIS muy básica) para encontrar esto, uno de mis resultados señaló que Wikipedia tiene las áreas para todas esas ciudades. Desafortunadamente, no pude averiguar cómo obtener las áreas de múltiples ciudades a la vez.

Lo que puedo hacer es muy, muy básico. Basándome en el segundo resultado de búsqueda de Google, puedo hacer cambios muy básicos en la respuesta de Jan Drewniak. Así, en principio, puedo ir a query.wikidata.org y encontrar el área de cada ciudad individualmente cambiando “Paris” en:

SELECT ?town ?area ?population ?coordinate ?country WHERE {
?town ?label “Paris”@en;
wdt:P2046 ?area;
wdt:P625 ?coordinate;
wdt:P1082 ?population;
wdt:P17 ?country.
}

Y habiendo hecho eso, puedo descargar el resultado y luego cambiar “Paris” nuevamente a una de las otras 474 ciudades, descargar ese resultado y así sucesivamente hasta que lo haya hecho para todas las 475 ciudades. Luego puedo combinar los 475 archivos .csv. Eso funcionaría.

Obviamente, preferiría no hacer eso. Mañana es domingo, así que podría hacerlo, pero me llevaría mucho tiempo. Lo que me gustaría poder hacer es:

  1. Ejecutar una sola consulta que incluya las 475 ciudades, ¿es posible?
  2. ¿Es posible obtener el país para que se informe en términos que no sean wd: Q30?
  3. ¿Puedo saber si los resultados que obtengo para el área son todos de la misma unidad, idealmente sqkm, pero las conversiones no son un problema, es posible?
  4. Si es posible hacer las 475 de una vez, ¿podría hacer referencia a los nombres en un archivo .csv?

También debo señalar que query.wikidata.org es el único lugar donde sé que puedo hacer esto.

Si hay alguna otra lista hecha por alguien más de las áreas de las ciudades en los datos de Prospecciones Urbanas Mundiales de la ONU de ciudades de más de 300.000 habitantes (que es de donde se seleccionaron mis 475 ciudades), entonces eso también funcionaría. (En una nota relacionada, Demographia tiene algunas listas PDF de Áreas Urbanas de más de 1.000.000 que sí tienen información de área … si intento copiar y pegar eso, solo sale como una sola línea, no como una tabla. Si me rindiera y encontrar qué ciudades de mis 475 están en esa lista, ¿cómo procedería?)

He intentado lo siguiente:

SELECT ?town ?area ?population ?coordinate ?country WHERE {
?town ?label “Paris”@en;
wdt:P2046 ?area;
wdt:P625 ?coordinate;
wdt:P1082 ?population;
wdt:P17 ?country.
}
SELECT ?town ?area ?population ?coordinate ?country WHERE {
?town ?label “London”@en;
wdt:P2046 ?area;
wdt:P625 ?coordinate;
wdt:P1082 ?population;
wdt:P17 ?country.
}

Pero query.wikidata.org me dio un error y también variaciones de “Paris”| “London”@en o “Paris”@en | “London”@en, por analogía a R.

Con respecto a las etiquetas, acabo de copiarlas de la pregunta donde obtuve el modelo de código anterior y agregué las etiquetas GIS y SPARQL.

Tags:  , , ,

Answer

  1. Avatar for davy.ai
    1. Sí, es posible ejecutar una única consulta que incluya todas las 475 ciudades. Puede modificar la consulta existente utilizando la cláusula IN para consultar varias ciudades a la vez. Por ejemplo:
    SELECT ?town ?area ?population ?coordinate ?country WHERE {
      VALUES ?town { wd:Q90 wd:Q142 wd:Q152 wd:Q174 ... }
      ?town wdt:P2046 ?area;
            wdt:P625 ?coordinate;
            wdt:P1082 ?population;
            wdt:P17 ?country.
    }
    

    Reemplace los puntos suspensivos con los ID de Wikidata (wd:Q...) de las 475 ciudades. Puede usar el separador | para especificar múltiples IDs para una sola ciudad, si es necesario.

    1. Sí, es posible obtener el nombre del país en términos que no sean wd:Q.... Puede utilizar la propiedad rdfs:label para obtener el nombre del país en un idioma específico. Por ejemplo:
    SELECT ?town ?area ?population ?coordinate ?countryLabel WHERE {
      VALUES ?town { wd:Q90 wd:Q142 wd:Q152 wd:Q174 ... }
      ?town wdt:P2046 ?area;
            wdt:P625 ?coordinate;
            wdt:P1082 ?population;
            wdt:P17 ?country.
      ?country rdfs:label ?countryLabel.
      FILTER(LANG(?countryLabel) = "en")
    }
    

    Esta consulta devolverá el nombre del país en inglés. Puede reemplazar "en" con cualquier otro código de idioma.

    1. Sí, es posible saber si los resultados que está obteniendo para el área están todos en la misma unidad. Puede verificar la propiedad Unidad de medida (P5061) de los valores de área (P2046). Por ejemplo:
    SELECT ?unit WHERE {
      SELECT ?area WHERE {
        VALUES ?town { wd:Q90 wd:Q142 wd:Q152 wd:Q174 ... }
        ?town wdt:P2046 ?area.
      }
      ?area p:P5061 ?unitStatement.
      ?unitStatement ps:P5061 ?unit.
    }
    

    Esta consulta devolverá la unidad de medida utilizada para los valores de área de las ciudades que le interesan.

    1. Sí, es posible hacer referencia a los nombres de las ciudades en un archivo .csv. Puede utilizar la función BIND para vincular el título del artículo de Wikipedia (que suele ser el nombre de la ciudad en el idioma deseado) a una variable que se puede utilizar en la consulta. Por ejemplo:
    SELECT ?town ?area ?population ?coordinate ?countryLabel WHERE {
      BIND("París" AS ?city)
      SERVICE wikibase:mwapi {
          bd:serviceParam wikibase:endpoint "en.wikipedia.org";
                          wikibase:api "Generator";
                          mwapi:generator "search";
                          mwapi:gsrsearch ?city;
                          mwapi:gsrlimit "1";
                          mwapi:prop "pageprops";
                          mwapi:ppprop "wikibase_item"
          ?item wikibase:apiOutput mwapi:title.
      }
      ?town schema:about ?item;
            wdt:P2046 ?area;
            wdt:P625 ?coordinate;
            wdt:P1082 ?population;
            wdt:P17 ?country.
      ?country rdfs:label ?countryLabel.
      FILTER(LANG(?countryLabel) = "en")
    }
    

    En esta consulta, utilizamos el servicio mwapi para buscar en Wikipedia el nombre de la ciudad y obtener su ID de Wikidata (que se almacena como valor de propiedad en la página de Wikipedia). Luego utilizamos la función BIND para vincular el nombre de la ciudad a una variable, y reemplazar "París" con ?city en la consulta. Puede cargar los nombres de las ciudades desde un archivo .csv en una variable utilizando la cláusula VALUES.

Comments are closed.