如何使用维基百科API获取一个位置查询(国家或州/省和/或县)的人口数量?

3

我正在尝试使用 Covid-19 数据集 构建一个 SIR 模型。为了构建这个模型,我需要每个地区(国家或省/州和/或县)的人口数量来计算 S(易感者)在 SIR 中的值。由于这个数据集不包含人口数据,所以我想通过一个 API 来获取这些数据。我找到了 countryinfo,但是人口估计值自 2018 年以来就没有更新过(根据示例和 pypi);此外,在输入国家名称时必须小心,因为 countryinfo 接受的国家名称可能与数据集中提供的名称不同。

from countryinfo import CountryInfo

country = CountryInfo('Singapore')
p = country.population()
print(p)
# 5469700

country = CountryInfo('United States')
# country = CountryInfo('US') # is not accepted
p = country.population()
print(p)
# 319259000

我可以在谷歌搜索中输入通用的查询词(例如,输入 "US""美国"),以查找任何地点的人口数量,但我不知道如何在 Python 中编程实现。将 'us' 替换 location,下面的代码将显示美国的人口数量(通过此解决方案)。

query = 'https://www.google.com/search?q=' + location + 'population

我认为 wikipedia API 可以用于相同的效果,但是我不太确定如何做到这一点。是否有更好的方法?如果没有,我该怎么使用 wikipedia 来获取查询位置的人口信息?


1
这绝对是使用Wikidata而不是Wikipedia API的时候。不太确定如何操作,但这是您想要的属性:https://www.wikidata.org/wiki/Property:P1082,这里有详细信息如何访问数据:https://www.wikidata.org/wiki/Wikidata:Data_access。 - smartse
1个回答

3
如smartse所提到的,使用Wikidata比使用Wikipedia更容易解决此类问题。在Wikipedia上,信息并未以结构化方式存储,因此您无法编写查询直接获取人口数量。您需要使用API调用来加载有关地点的文章,然后使用自己的代码解析文本以检索人口数量。
要查询Wikidata,您可以使用Wikidata查询服务。以下是首先使用关键字执行搜索,然后返回结果的人口数量的查询。
SELECT ?population WHERE {
  SERVICE wikibase:mwapi {
      bd:serviceParam mwapi:search "Singapore" .    
      bd:serviceParam mwapi:language "en" .    
      bd:serviceParam wikibase:api "EntitySearch" .
      bd:serviceParam wikibase:endpoint "www.wikidata.org" .
      bd:serviceParam wikibase:limit 1 .
      ?item wikibase:apiOutputItem mwapi:item .
  }
  ?item wdt:P1082 ?population
}

请注意,在维基数据中也会有过时的数据。但由于人口在一年内不会发生巨大变化,因此这对您的应用程序不应构成问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接