Программирование Викиданных/Населённые пункты

Материал из Викиверситета
Перейти к навигации Перейти к поиску

Викиданные представляют собой базу структурированных данных. В статье исследуется объект Викиданных "населённый пункт" (human settlement) и его свойства. В каждом из разделов представлены задачи, решённые с помощью SPARQL-запросов. В их числе: нахождение экземпляров объекта "населённый пункт", построение упорядоченного списка стран по суммарному количеству населения, проживающего в "населённых пунках" , и списка объектов, сопутствующих "населённым пунктам" в свойстве "экземпляр" (instance of). Также построена диаграмма, показывающая долю населения страны, проживающего в "населённых пунктах". Диаграмма показывает, что высокий процент населения, проживающего в "населённых пунках", приходится на менее промышленные страны, в то время, как в более индустриальных странах меньшая доля населения проживает в "населённых пунках". На 2017 год Википедия описывает примерно половину населённых пунктов (75 тыс.), Викиданные содержат менее 3% таких поселений (4 тыс.) относительно данных переписи за 2010 год (155,5 тыс.). Для улучшения результатов решения вышеописанных задач отдельные объекты Викиданных были дополнены свойством "экземпляр". Трудность исследования вызвана отсутствием чёткой типологии населённых пунктов (например, от численности населения) в законодательстве России и в Викиданных.

Экземпляры объекта "Населённый пункт"[править]

Построим список всех населённых пунктов.

# 20.10.2017
SELECT ?hum ?humLabel 
WHERE 
{
  ?hum wdt:P31 wd:Q486972. # instances of human settlement
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

SPARQL-запрос, 411393 записей.

Наиболее полными и проработанными населёнными пунктами на Викиданных являются: Antakya, General Roca, Padre Las Casas.

Почти пустыми и малоинформативными населёнными пунктами оказались: Belomorsk, Segezha, Yanishpole.

Произведено объединение дублей объектов Belomorsk с Belomorsk, Segezha с Segezha, Yanishpole с Yanishpole.

Список стран по суммарному количеству населения[править]

Построим упорядоченный список стран по суммарному количеству населения, проживающего в "населённых пунктах".

# 26.10.2017
SELECT ?countryLabel (SUM(?population) as ?sumPopulation)
WHERE
{
    ?hum wdt:P31 wd:Q486972;    # instances of human settlement
         wdt:P17 ?country;      
         wdt:P1082 ?population. 
  
   SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
 }
  GROUP BY ?country ?countryLabel 
  ORDER BY DESC (?sumPopulation)

SPARQL-запрос, 161 записей.

Для группирования населённых пунктов по странам, используем команду GROUP BY:

GROUP BY ?country ?countryLabel
Пузырьковая диаграмма стран по суммарному количеству населения, проживающего в объектах типа "населённый пункт"


Пузырьковая диаграмма выше показывает соотношение стран по количеству населения в "населённых пунктах". Результат запроса в виде диаграммы показывает, что наибольшее количество населения проживает в объектах "населённый пункт" в таких странах, как: Бразилия (12 млн), Пакистан (10 млн), Мексика (8 млн), Йемен (8 млн), Индия (7 млн), Бангладеш (7 млн). Эти страны имеют пригодные климатические и географические условия для комфортного проживания относительно небольших населённых пунктах.

Проверка правильности выполнения скрипта[править]

Проверим правильность подсчётов вышеописанного запроса, который строит список стран по суммарному числу населения. Для этого напишем скрипт, где для страны с самым маленьким результатом суммарного числа населения можно увидеть список поселений с количеством жителей. Запрос показал, что это страна Черногория, следовательно, получим список населённых пунктов и число жителей населённых пунктов Черногории.

# 26.10.2017
SELECT ?humLabel ?hum ?population
WHERE
{
    ?hum wdt:P31 wd:Q486972; # instances of human settlement
         wdt:P17 wd:Q236;    # Montenegro 
         wdt:P1082 ?population. 
  
   SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
 }

SPARQL-запрос, 1 запись.

Проверка прошла успешно, так как данный скрипт подтвердил результат численности населения, проживающего в "населённых пунктах" Черногории.

Полнота Викиданных[править]

Населённый пункт — это общее название мест с постоянными жителями[1]. По версии редакторов Викиданных в понятие насёленный пункт входят города, сёла, деревни и другие. Полный список можно увидеть в разделе этой статьи «Cписок объектов, сопутствующих "human_settlement" в "instance of"». Точной информации о количестве населённых пунктов в мире не было найдено. Поэтому проверим полноту населённых пунктов, которые есть в Викиданных и которые использовались для решения задачи. Была поставлена задача: построить упорядоченный список стран по суммарному количеству населения, проживающего в "human_settlement". Для этого напишем SPARQL-запрос, который выведет населённые пункты с незаполненным свойством 'population'. Запрос показал, что таких населённых пунктов 372997. Значит из 411393 (исходя из запроса) только у 38396 или 9,3% населенных пунктов мира указано количество населения (свойство 'population'). А теперь посмотрим населённые пункты, у которых не указана принадлежность к какой-либо стране - SPARQL-запрос. Таких нашлось 8427 объектов. Поэтому в результате решения данной задачи получились неполная картина о суммарном количестве населения в населённых пунктах по странам.

Рассмотрим населённые пункты России. По данным проекта "Населённые пункты России/Статистика" Русская Википедия содержит приблизительно 75000 статей о населённых пунктах России. По переписи 2010 года в России 155 510 населённых пунктов. Проверим, сколько объектов содержится в Викиданных о населённых пунктах России с помощью следующего SPARQL-запроса. В результате получено 4113 объектов, что составляет 2,6% от общего числа населённых пунктов по переписи за 2010 год. Таким образом, в Викиданных содержится слишком мало информации о населённых пунктах России.

Итак, степень заполненности Викиданных по населённым пунктам низкая. А именно, у некоторых городов, поселков, деревень и других населённых пунктов на Викиданны отсутствует свойство "экземпляр" (instance of), значением которого может быть "населённый пункт" (human settlement). Кроме того, есть почти пустые и плохо проработанные объекты. Для решения этих проблем необходимо заполнять эти свойства и связывать между собой объекты Викиданных.

Заполнение Викиданных[править]

В ходе заполнения объектов Викиданных было решено заполнять свойство "экземпляр" (instance of).

Были внесены данные о 100 объектах России, которые не имели значения "населённый пункт" (human settlement) в свойстве "экземпляр" (instance of).

На 25.10.2017, после заполнения данными, Викиданные содержали 4207 объектов о населённых пунктах России, что составляло 2,6% от общего числа населённых пунктов по переписи за 2010 год и 5,6% от данных Русской Википедии. Это можно увидеть с помощью следующего SPARQL-запроса.

Доля населения страны, проживающего в "human_settlement"[править]

Построим упорядоченный список стран доли населения (в процентах), проживающего в "населённых пунктах", к числу всех жителей страны.

# 23.11.2017
SELECT ?countryLabel (SUM(?population / ?pop) as ?proportionPopulation) (?proportionPopulation * 100 as ?percentPopulation)
WHERE {
  ?hum wdt:P31 wd:Q486972.    # instances of human settlement  
  ?hum wdt:P17 ?country.      # country 
  ?hum wdt:P1082 ?population. # population
  ?country wdt:P1082 ?pop.    # population in the country
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  }
GROUP BY ?country ?countryLabel
ORDER BY DESC (?percentPopulation)

SPARQL-запрос, 158 записей.

Диаграмма доли населения страны, проживающего в "населённых пунктах"


Столбчатая диаграмма на рисунке позволяет увидеть для каждой отдельной страны отношение количества людей, проживающих в "населённых пунктах" к числу жителей в стране. Из графика видно, что наиболее высокий процент приходится на следующие страны: Кирибати (78%), Ниуэ (70%), Греция (53%), Тувалу (48%), Коморы (43%), Маврикий (42%). Интересно заметить, что в основном это маленькие островные государства. Вероятно, большая часть жителей этих стран сконцентрирована в населённых пунктах.

Рассмотрим отдельно страны большой восьмёрки, доля жителей в населённых пунктах составила: Россия (2.98%), США (1.76%), Япония (0.80%), Канада (0.26%), Франция (0.20%), Германия (0.24%), Великобритания (0.18%), Италия (0.07%). Отметим, что это страны промышленно развитые.

Построенная диаграмма подтверждает следующую гипотезу: высокий процент населения страны, проживающего в "населённых пунктах", указывает на более аграрную страну. В действительности имеется возможность развития сельского хозяйства в этих странах. Исходя из диаграммы и запроса видно, что наиболее высокий процент населения страны, проживающего в "населённых пунктах", приходится на островные, южные, жаркие страны, в которых, по-видимому, менее развита промышленность (маленькая территория, небольшое количество населения, удаленность от материков). А индустриальные страны (большой восьмёрки) имеют очень низкий процент населения страны, проживающего в "населённых пунктах".

Cписок объектов, сопутствующих "human_settlement" в "instance of"[править]

Трудность исследования вызвана отсутствием чёткой типологии населённых пунктов (например, от численности населения) в законодательстве России и в Викиданных. Поэтому представляет интерес получение списка объектов, сопутствующих "human_settlement" в свойстве "instance of", с помощью следующего скрипта.

# 20.10.2017
SELECT ?instLabel (COUNT(?hum) as ?sumHum) 
WHERE
 { 
   ?hum wdt:P31 wd:Q486972;  # instances of human settlement
        wdt:P31 ?inst.       # other objects in instance
   SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
 }  
GROUP BY ?inst ?instLabel

SPARQL-запрос, 610 объектов, сопутствующих "human_settlement" в "instance of".

Так как данный запрос слишком долго выполняется и выводится сообщение об ошибке: "Query timeout limit reached", сделаем его более лёгким. Для этого уменьшим число перебираемых объектов.

Во-первых, выключим из рассмотрения такие населённые пункты, которые имеют в списке "instance of" только human settlement. Результат не ухудшится, так как в него не будут включёны экземпляры только типа "human settlement". С этой целью внесём в наш скрипт фильтр для отбора нужных поселений.

Во-вторых, не будем рассматривать такие объекты переменной ?inst, которые имеют свойство "country". Это позволит отсечь сотни типов населённых пунктов специфичных для отдельных стран, например, административно-территориальная единица России.

Эти ограничения позволили выполнить запрос по всем странам мира за приемлемое время (87 мс).

# 15.11.2017
SELECT ?instLabel (COUNT(?hum) as ?sumHum) 
WHERE
 { 
   ?hum wdt:P31 wd:Q486972;  # instances of human settlement
        wdt:P31 ?inst.       # other objects in instance
     
   MINUS {?inst wdt:P17 []}. # without country
   FILTER(?inst != wd:Q486972 ). # without human settlement
   SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
 }  
GROUP BY ?inst ?instLabel

SPARQL-запрос, 355 объектов.

В число таких объектов входят:

  1. Cёла (village) - 2844.
  2. Муниципалитеты (municipality) - 1181.
  3. Деревни (hamlet) - 662.
  4. Археологические памятники (archaeological site) - 425.
  5. Местные поселения (locality) - 425.
  6. Разрушенные города (destroyed city) - 423.
  7. Города (city) - 322.
  8. Малые города (town) - 277.
  9. Заброшенные деревни (abandoned village) - 254.
  10. Внутренние районы (quarter) - 207.

Будущая работа[править]

  • Подсчитать и вывести по странам список известных личностей, родившихся в населённых пунктах.
  • Подсчитать и построить график отношения суммарной площади населённых пунктов к площади страны.
  • Найти населённые пункты, основанные в XXI веке.
  • Рассмотреть только те населённые пункты, которые уже не существуют. Построить список таких пунктов, упорядоченный по длительности существования населённого пункта.

Упражнения[править]

2

Выберите, какие из представленных гербов относятся к населённым пунктам Российской Федерации, а какие — нет.

Относится,Не относится
Aznakeevskii rayon gerb.png
Coat of Arms of Asbest (Sverdlovsk oblast).png
Loučovice CoA.jpg
POL Otynia COA.svg
Coat of Arms of Azov.svg

3

К какой стране относится панорама этого населенного пункта?

Vothonas Banner Santorini.jpg


SPARQL-запросы с ответами:

См. также[править]

Примечания[править]

Литература[править]

  • Ожегов С. И. Толковый словарь русского языка. — Москва, 2003.

Ссылки[править]