Программирование Викиданных/Страны
Глава посвящена исследованию стран на основе базы знаний международного проекта Викиданные. С помощью SPARQL-запросов, вычисляемых на объектах «страна» в Викиданных, получены: список всех ныне существующих стран, перечень стран, упорядоченных по дате создания, список этнохоронимов стран, пузырьковая диаграмма с формами правления стран, граф соседних стран и карту соседних стран России. Кроме того, проанализирована полнота Викиданных по этой теме.
Экземпляры объекта «Страна»
[править]- Объекты: страна (Q6256)
- Свойство: экземпляр (P31)
Построим список всех стран на английском и русском языках.
#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 свойств).
Возраст стран
[править]Построим список стран, отсортированных по дате основания страны, то есть по первому упоминанию о стране.
Используются:
- объект country (Q6256) (страна),
- свойство inception (P571) (дата основания).
# 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 века объединил под своей властью большую часть Евразии.
Этнохоронимы на русском языке
[править]Этнохороним — это название жителей определённой местности, соотнесённое с топонимом. Например, этнохронимами для России будут россияне, россиянин, россиянка, для Чехии – чехи, чех, чешка.
Помимо географического фактора, новые лексемы, используемые для определения происхождения либо принадлежности, происходят так же от этнических, политических, религиозных характеристик людей.
Этнохоронимы могут определяться названиями разных объектов земной поверхности: гор, островов, континентов. Так же обозначение места происхождения людей может зависеть от политико-административного деления. Например, для обозначения гражданства: Таиланд — таиландцы, Канада — канадцы. Внутригосударственное деление также может породить новые наименования, Крым — крымчане.
Построим список стран, у которых есть этнохоронимы на русском языке.
Используются:
- объект country (Q6256) (страна),
- свойство demonym (P1549) (этнохороним).
# 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 этнохоронимов на одну страну.
Формы правления стран
[править]Построим пузырьковую диаграмму форм правления стран, где размер пузырка будет соответствовать числу стран с той или иной формой правления.
Используются:
- объект country (Q6256) (страна),
- свойство subject's government (P122) (форма правления).
# 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 год форма правления «республика» стала более «популярной». Значительно уменьшилось количество стран, имеющих форму «смешанная республика. Появились такие формы как демократический централизм, демократическая республика, демократия, исламское государство и парламентская демократия.
Соседние страны
[править]У стран существует такое свойство, как общая граница. На Викиданных это свойство shares border with (P47). Используя это свойство, построим граф соседних стран.
Используются:
- объект country (Q6256) (страна),
- свойство 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) включает общую не только сухопутную, но и морскую границу. Поэтому в будущем этот граф будет представлять одну связную компоненту.
Соседние страны России
[править]Построим карту соседних стран России.
# 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 стран, а именно: Япония, Норвегия, США, Финляндия, Швеция, Польша, Литва, Китайская Народная Республика, Белоруссия, Эстония, Латвия, Украина, Азербайджан, Грузия, Казахстан, КНДР и Монголия.
Будущая работа
[править]- Постройте список флагов и девизов стран. Девизы есть не у всех стран.
- Отметьте на карте столицы современных стран.
- В каждой части света вычислите первые пять стран с наибольшей плотностью населения.
- Построить столбчатую диаграмму демонстрирующую распределение количества стран по формам правления. Оцените, является ли это распределение тяжелым хвостом
- Выведите список стран, упорядоченных по числу соседей. У каких стран больше всего и меньше всего соседей, какое среднее число соседей? Есть ли корреляция между этим показателем и каким-либо другим параметром стран?
Упражнения
[править]
SPARQL-запросы с ответами:
- "урожайные" годы по новым странам,
- чего у Латвии 119
- плотность населения
- официальные языки в России
Примечания
[править]Литература
[править]- Н.Ю. Журавлева Особенности перевода катойконимов (на материале испанского и русского языков) // Вестник Российского университета дружбы народов.. — 2012. — P. 41–48.
Ссылки
[править]- Andrew Krizhanovsky, Smykova Elizaveta. WD: Анализ трёх аспектов современных стран по Викиданным: возраст стран, популярные формы правления и этнохоронимы // Authorea
- Balakireva M. Countries (англ.). ProWD (2020). Проверено 24 сентября 2020.