gpt4 book ai didi

python - 为什么这个 SPARQL 查询缺少这么多结果?

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:18 24 4
gpt4 key购买 nike

(首先,我很抱歉,因为这是一个公然的交叉帖子。我认为 opendata.SE 会是这个地方,但那里几乎没有任何浏览量,而且它似乎不是一个非常活跃的网站,所以我想我应该在这里尝试一下,因为它与编程相关。)

我正在尝试获取世界主要城市的列表:它们的名称、人口和位置。我在 Wikidata 上找到了一个看起来不错的查询,稍微调整了其中一个内置查询示例:

SELECT DISTINCT ?cityLabel ?population ?gps WHERE {
?city (wdt:P31/wdt:P279*) wd:Q515.
?city wdt:P1082 ?population.
?city wdt:P625 ?gps.
FILTER (?population >= 500000) .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY DESC(?population)

结果乍一看似乎不错,但缺少大量重要城市。例如,旧金山(人口 80 万+)和西雅图(人口 65 万+)不在列表中,当我特别询问所有人口大于 50 万的城市时。

我的查询有问题吗?如果不是,则维基数据使用的数据一定有问题。无论哪种方式,我怎样才能获得一个有效的数据集,使用我可以从 Python 脚本查询的 API? (我已经让脚本为此工作;我只是没有取回有效数据。)

from SPARQLWrapper import SPARQLWrapper, JSON
from geopy.distance import great_circle

def parseCoords(gps):
base = gps[6:-1]
coords=base.split()
return (float(coords[1]), float(coords[0]))

sparql = SPARQLWrapper("https://query.wikidata.org/sparql")
sparql.setReturnFormat(JSON)
sparql.setQuery("""SELECT DISTINCT ?cityLabel ?population ?gps WHERE {
?city (wdt:P31/wdt:P279*) wd:Q515.
?city wdt:P1082 ?population.
?city wdt:P625 ?gps.
FILTER (?population >= 500000) .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY DESC(?population)""")
queryResults = sparql.query().convert()
cities = [(city["cityLabel"]["value"], int(city["population"]["value"]), parseCoords(city["gps"]["value"])) for city in queryResults["results"]["bindings"]]
print (cities)

最佳答案

西雅图的人口根本不在这个数据库中。

如果你执行:

#Largest cities of the world
#defaultView:BubbleChart
SELECT * WHERE {
wd:Q5083 wdt:P1082 ?population.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

您得到零结果。尽管实例 wd:Q5083(seattle) 存在,但它没有谓词 wdt:P1082(population)。

关于python - 为什么这个 SPARQL 查询缺少这么多结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37547300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com