Как получить популяцию запроса местоположения (страна или штат / провинция и / или округ) с помощью API Википедии? - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь использовать Набор данных 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

Я могу набирать обобщенные c запросы (ie, введите "US" или "United States") в Google, чтобы найти население любого местоположения, но я не уверен, как это сделать программно в python. Ввод 'us' вместо location ниже покажет население США (через это решение ).

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

Я думаю, что API Википедии может привыкнуть к тому же эффекту, но я не совсем уверен, как это сделать. Есть ли способ лучше? Если нет, как я могу использовать wikipedia, чтобы получить население из запрашиваемого местоположения?

1 Ответ

1 голос
/ 26 марта 2020

Как уже упоминалось в smartse, это, безусловно, легче решить с помощью Wikidata, а не Wikipedia. В Википедии информация не хранится в структурированном виде, поэтому вы не можете написать запрос, чтобы напрямую получить информацию о населении. Вам нужно будет использовать вызов API, чтобы загрузить статью о месте, а затем проанализировать текст с вашим собственным кодом, чтобы получить информацию о населении.

Для запросов к Викиданным вы можете использовать Сервис запросов 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
}

Будьте осторожны, также в Викиданных данные иногда бывают устаревшими. Но поскольку численность населения не меняется кардинально от года к году, это не должно быть проблемой для вашего приложения.

...