Программирование Викиданных/Страны

Материал из Викиверситета

Глава посвящена исследованию стран на основе базы знаний международного проекта Викиданные. С помощью SPARQL-запросов, вычисляемых на объектах «страна» в Викиданных, получены: список всех ныне существующих стран, перечень стран, упорядоченных по дате создания, список этнохоронимов стран, пузырьковая диаграмма с формами правления стран, граф соседних стран и карту соседних стран России. Кроме того, проанализирована полнота Викиданных по этой теме.

Экземпляры объекта «Страна»[править]

Построим список всех стран на английском и русском языках.

#List of countries in English and Russian
SELECT ?country ?label_en ?label_ru
WHERE
{
		?country wdt:P31 wd:Q6256. # instance country
		?country rdfs:label ?label_en filter (lang(?label_en) = "en").
		?country rdfs:label ?label_ru filter (lang(?label_ru) = "ru").
}

SPARQL-запрос, получено 205 стран на 2017 год и 175 стран на 2020 год.


По степени заполненности свойств на Викиданнных можно различать «полные» и «пустые» страны.

Примерами наиболее полных и проработанных стран на Викиданных по данным ProWD являются: Израиль (127 свойств), Франция (126 свойств), Соединённые Штаты Америки (124 свойства).

Наименьшее количество свойств у Соединённых провинций Центральной Америки (3 свойства) и Джалаириды (9 свойств).

Возраст стран[править]

Построим список стран, отсортированных по дате основания страны, то есть по первому упоминанию о стране.

Используются:

# List of countries sorted by inception 
SELECT ?country ?countryLabel ?inception
WHERE
{
	?country wdt:P31 wd:Q6256.    # instance of country
	?country wdt:P571 ?inception. # the first mention
	SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
}
ORDER BY (?inception)

SPARQL-запрос, получено 112 стран на 2017 год и 199 стран на 2020.

В результате выполнения запроса получен скромный список стран, включающий на 2020 год всего 184 страны. На примере России разберемся, в чем здесь дело. Объект Россия в поле "instance of" содержит не одно, а восемь значений, в том числе country.

На странице Викиданных "Request a query" одни редакторы задают вопросы, как написать тот или иной скрипт, а другие редакторы отвечают. Пользуйтесь этим форумом.

Решение и ответ на этот вопрос были найдены на странице "Wikidata: Request a query", а именно в разделе доступном по ссылке

https://w.wiki/tLm.

Дело в том, что конструкция wdt позволяет находить только истинные значения. Для России предпочтительным ответом (англ. preferred value) в поле "instance of" является «суверенное государство», а не страна. Чтобы проверить все варианты, представленные в поле "instance of" России, нужно использовать конструкцию p:/ps:.

Таким образом, построим скрипт для получения всех 232 стран, отсортированных по дате создания:

# List of countries sorted by inception date
SELECT ?country ?countryLabel
		(MIN(?year) AS ?min_year)
WHERE
{
	?country p:P31 [ps:P31 wd:Q6256]. # instance of a country 
	?country p:P571 [ps:P571 ?inception]. # all inception dates
	BIND(YEAR(?inception) AS ?year)
	SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
}
GROUP BY ?country ?countryLabel ?min_year
ORDER BY ?min_year

SPARQL-запрос, получено 235 стран на 2020 год.

Чтобы убрать из этого списка уже не существующие страны, то есть экземпляры объекта historical country, используем оператор MIN US. Построим этот список.

# List of countries sorted by inception date without historical countries
SELECT ?country ?countryLabel 
(MIN(?year) AS ?min_year)
WHERE
{
	?country p:P31 [ps:P31 wd:Q6256]. # instance of a country 
	MINUS {?country p:P31 [ps:P31 wd:Q3024240]}. # except historical countries
	?country p:P571 [ps:P571 ?inception]. # all inception dates
	BIND(YEAR(?inception) AS ?year)
	SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
}
GROUP BY ?country ?countryLabel ?min_year
ORDER BY ?min_year

SPARQL-запрос, получено 211 стран на 2020 год.

С помощью запроса получено 211 не исторических стран с известной датой основания (2021).

Например, Франция(Q142) — 463 год, Россия (Q159) — 862 год, Косово (Q1246) — 2008 год, Южный Судан (Q958) — 2011. Наибольшее количество стран появилось в 1960 (16 стран), в 1991 году (15 стран), в 1962 (6 стран) и в 1821 (6 стран).

Выведем список стран с пустым свойством «дата основания».

#List of `instances of` "countries without a inception" 
SELECT ?country ?countryLabel 
WHERE
{
?country wdt:P31 wd:Q6256. # country

MINUS { ?country wdt:P571 [] } . # inception of country is empty
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

SPARQL-запрос, получено 100 стран на 2017 год и 7 стран на 2020 год.

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

Проанализируем полноту Викиданных.

По данным «Общероссийского классификатора стран мира» на земле существует 251 страна[1].

Отдельного анализа заслуживают древние, уже не существующие государства, например, Ассирия (Q41137). Объекты таких страны на Викиданных являются экземплярами не объекта «country», а «historical country» (исторические страны).

Построим список исторических государств.

# List of historical countries
SELECT ?country ?countryLabel
WHERE
{
	?country p:P31 [ps:P31 wd:Q3024240]. # instance of a historical country 
	SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],ru,en"} 
}

SPARQL-запрос, получено 3026 стран на 2020 год.

Таких бывших государств оказалось три тысячи, что на порядок больше числа современных государств.

По данным статьи «Алфавитный список стран и территорий» Русской Википедии существует 252 страны (недостает Косово).

По данным статьи "List of sovereign states" Английской Википедии существует 206 стран.

У экземпляров объекта страна обычно заполнено свойство inception (P571), то есть дата основания. Однако не всегда точно можно указать дату основания страны по разным причинам: отсутствие, недостаток или противоречие письменных источников. Например, основание Древнерусского государства связывают с призванием варяжского князя Рюрика в 862 году, но точной даты нет (объект Россия (Q159)). Некоторым современным странам предшествовали ряд исторических предшественников, и дату образования какого из них считать за дату создания современной страны ‒ это вопрос открытый. Например, датой основания Монголии(Q711) принято считать 29 декабря 1911 года, когда произошло провозглашение независимости от Китая. Хотя в истории Монголия появляется со времён деятельности Чингисхана, который кратковременно в начале 13 века объединил под своей властью большую часть Евразии.

Этнохоронимы на русском языке[править]

Этнохороним — это название жителей определённой местности, соотнесённое с топонимом. Например, этнохронимами для России будут россияне, россиянин, россиянка, для Чехии – чехи, чех, чешка.

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

Этнохоронимы могут определяться названиями разных объектов земной поверхности: гор, островов, континентов. Так же обозначение места происхождения людей может зависеть от политико-административного деления. Например, для обозначения гражданства: Таиланд — таиландцы, Канада — канадцы. Внутригосударственное деление также может породить новые наименования, Крым — крымчане.

Построим список стран, у которых есть этнохоронимы на русском языке.

Используются:

# List of countries with demonyms in Russian
SELECT ?country ?countryLabel 
WHERE
{
	?country p:P31 [ps:P31 wd:Q6256]. # instance of a country
	?country wdt:P1549 ?demonym .     # has demonym
	FILTER((LANG(?demonym)) = "ru")
	SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
}
GROUP BY ?country ?countryLabel

SPARQL-запрос, получено 28 стран на 2017 год и 131 страна на 2021 год.

Cписок этнохоронимов[править]

Построим список этнохоронимов стран на русском языке.

# List of demonyms of countries in Russian
SELECT ?country ?countryLabel ?demonym
WHERE
{
	?country p:P31 [ps:P31 wd:Q6256]. # instance of a country
	?country wdt:P1549 ?demonym .     # has demonym
	FILTER((LANG(?demonym)) = "ru")
	SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
}

SPARQL-запрос, получено 83 этнохоронима на 2017 год и 296 этнохоронима на 2021 год.

Страны с незаполненными этнохоронимами[править]

Построим список стран, у которых нет этнохоронимов на русском языке.

#List of countries without demonyms in Russian
SELECT ?country ?countryLabel 
WHERE
{
	?country p:P31 [ps:P31 wd:Q6256].  # instance of a country
	MINUS { ?country wdt:P1549 ?demonym.    # without demonyms
		FILTER((LANG(?demonym)) = "ru") # in Russian
	}
	SERVICE wikibase:label { bd:serviceParam wikibase:language "ru" }
}
GROUP BY ?country ?countryLabel

SPARQL-запрос, получено 170 стран на 2017 год и 105 стран на 2021 год.

Благодаря конструкции MINUS в итоговый список не попали страны, имеющие этнохоронимы на русском языке.

Количество заполненных этнохоронимов у стран[править]

У одной страны может быть от нуля, если данные не заполнены, до трёх-четырёх этнохоронимов. Например, у Турции есть три названия жителей: турок, тарчанка, турки, у Эфиопии четыре: эфиоп, эфиопка, эфиопы, эфиопки.

Выведем список стран, упорядоченный по количеству заполненных в Викиданных этнохоронимов.

# List of countries ordered by number of demonyms
SELECT  ?country ?countryLabel (COUNT(*) AS ?demonyms)
WHERE
{
	?country p:P31 [ps:P31 wd:Q6256].# instance of a country
	?country p:P1549 [ps:P1549 []].  # has demonym
	SERVICE wikibase:label {bd:serviceParam wikibase:language "ru"}
}
GROUP BY ?country ?countryLabel 
ORDER BY DESC(?demonyms)

GROUP BY ?country ?countryLabel 
ORDER BY DESC(?count)

SPARQL-запрос, получено 199 стран на 2017 год и 215 стран на 2021 год.

По данным на 2017 год наибольшее число этнохоронимов у Соединённых Штатов Америки (41 этнохороним), затем идут Великобритания (40), Германия (40) и Канада (36). На 2021 год наибольшее число этнохоронимов у Германии (64 этнохоронима), России (61), Канады (60) и США (60). Таким образом, с 2017 по 2021 год добавилось примерно по 20 этнохоронимов на одну страну.

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

Построим пузырьковую диаграмму форм правления стран, где размер пузырка будет соответствовать числу стран с той или иной формой правления.

Используются:

# Forms of government ordered by number of countries
#defaultView:BubbleChart
SELECT ?bfog ?form (COUNT(*) AS ?countries)
WHERE 
{
	?country p:P31 [ps:P31 wd:Q6256].# instance of a country
	?country p:P122 [ps:P122 ?bfog].# # basic form of government
	OPTIONAL {
		?bfog rdfs:label ?form
		FILTER (LANG(?form) = "ru")
	}
	SERVICE wikibase:label { bd:serviceParam wikibase:language "ru"}
}
GROUP BY ?bfog ?form
ORDER BY DESC(?countries) ASC(?form)

SPARQL-запрос, получено 30 форм правления на 2017 год и 41 форма правления на 2021 год.

Переменная "bfog" (сокращение от "basic form of government") содержит форму правления, например, «республику».

Последняя сточка в запросе содержит команды упорядочения сначала по убыванию (DESC) и затем по возрастанию (ASC). Таким образом, формы правления сначала сортируются по числу стран (?countries). Затем, если стран поровну, то формы правления сортируются лексикографически.

В результате выполнения запроса мы получаем пузырьковую диаграмму с наиболее распространенными формами правления в странах на 2017 и 2020 годы.

Пузырьковая диаграмма форм правления стран, 2017
Пузырьковая диаграмма форм правления стран, 2020


Таким образом, за период с 2017 по 2020 год форма правления «республика» стала более «популярной». Значительно уменьшилось количество стран, имеющих форму «смешанная республика. Появились такие формы как демократический централизм, демократическая республика, демократия, исламское государство и парламентская демократия.

Соседние страны[править]

У стран существует такое свойство, как общая граница. На Викиданных это свойство shares border with (P47). Используя это свойство, построим граф соседних стран.

Используются:

# Graph of countries which share border
#defaultView:Graph
SELECT ?country ?countryLabel ?border ?borderLabel
WHERE
{
	?country p:P31 [ps:P31 wd:Q6256]. # instance of a country
	OPTIONAL { ?country wdt:P47 ?sharesBorderWith }
	SERVICE wikibase:label {bd:serviceParam wikibase:language "ru"}
}

SPARQL-запрос, получено 787 соседств на 2017 год и 912 соседств на 2021 год.

В результате выполнения запроса мы получаем граф с 787 ребрами на 2017 год и 912 ребрами на 2021 год, где ребро указывает на общую границу двух стран. Граф представляет из себя несколько связных компонент, так как есть островные страны, у которых нет соседей (например, Маврикий и Мальдивы. Также стоит упомянуть, что теперь свойство shares border with (P47) включает общую не только сухопутную, но и морскую границу. Поэтому в будущем этот граф будет представлять одну связную компоненту.

Граф соседних стран, в центре Россия, 2017
Граф соседних стран, в центре Россия, 2020


Соседние страны России[править]

Построим карту соседних стран России.

# Map of neighboring countries of Russia
#defaultView:Map
SELECT ?border_country ?border_countryLabel ?coords ?layer
WHERE 
{                                         # border_country
	?border_country p:P47 [ps:P47 wd:Q159]. #   has border with Russia
	?border_country p:P31 [ps:P31 wd:Q6256].#   is a country
	OPTIONAL {?border_country wdt:P3896 ?coords.}
	BIND (?coords AS ?layer)
	SERVICE wikibase:label { bd:serviceParam wikibase:language "ru". }
}

SPARQL-запрос, получено 17 стран на 2021 год.

Строка в запросе с комментарием "is a country" нужна, чтобы проверить, что объект, указанный как «имеющий общуюю границу» с Россией является страной. Это позволило исключить из списка район Грузии (Рача-лечхуми и Квемо-Сванети), и например, остров Японии (Хоккайдо), указанные в списке пограничных объектов.

В результате выполнения запроса мы получаем карту соседних стран России, включающую 17 стран, а именно: Япония, Норвегия, США, Финляндия, Швеция, Польша, Литва, Китайская Народная Республика, Белоруссия, Эстония, Латвия, Украина, Азербайджан, Грузия, Казахстан, КНДР и Монголия.

Карта соседних стран России, 2021.


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

  1. Постройте список флагов и девизов стран. Девизы есть не у всех стран.
  2. Отметьте на карте столицы современных стран.
  3. В каждой части света вычислите первые пять стран с наибольшей плотностью населения.
  4. Построить столбчатую диаграмму демонстрирующую распределение количества стран по формам правления. Оцените, является ли это распределение тяжелым хвостом
  5. Выведите список стран, упорядоченных по числу соседей. У каких стран больше всего и меньше всего соседей, какое среднее число соседей? Есть ли корреляция между этим показателем и каким-либо другим параметром стран?

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

1 Какие из двухсот существующих сегодня стран возникли в самые "урожайные" годы по количеству образованных стран?

1821, 1918, 1971, 1991
16 стран: Россия, Молдавия, Белоруссия, Украина, Эстония, Словения, Республика Македония, Хорватия, Азербайджан, Грузия, Казахстан, Узбекистан, Армения, Киргизия, Таджикистан
6 стран: Греция, Перу, Гватемала, Гондурас, Коста-Рика, Никарагуа
5 стран: Латвия, Литва, Польша, Эстония, Грузия
4 страны: Бангладеш, Бахрейн, Катар, Шри-Ланка

2 У Латвии их 119, у Таиланда 77, у Дании 5, а у России 81. О чём идет речь?

Количество городов с населением более миллиона человек?
Количество высших учебных заведений?
Количество административных единиц?
Количество официальных языков?

3 Площадь Израиля 20770 квадратных километров, население 8463400 человек, площадь Монголии 1566000 квадратных километров, население 2953190 человек, площадь Республики Кореи 100295 квадратных километров, население 50219669 человек, а площадь Сингапура 719.1 квадратных километров, население 5781728 человек.
Расположите флаги этих стран Азии в порядке возрастания плотности населения.

1 место,2 место,3 место,4 место

4 Какие из этих языков являются официальными в России?

абазинский
мокшанский
эрзянский
белорусский

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

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

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

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