Программирование Викиданных/Корабли
Cтатья посвящена исследованию объекта Викиданных “корабли”. Выделены по три примера хорошо и плохо заполненных объектов “корабли”. При помощи SPARQL-запросов, вычисляемых на объектах типа “корабль” Викиданных, решены следующие задачи: выведен список всех кораблей мира, а также найдены корабли, участвовавшие в военных конфликтах и при этом связанные с какой-либо страной. Также приведена оценка полноты Викиданных. В работе представлен график, показывающий зависимость между кораблями, связанными с Россией и военными конфликтами, в которых они участвовали.
Экземпляры объекта "Корабли"
правитьКорабль (Q11446) — это крупное морское судно.
Исследуемые свойства:
Построим список всех кораблей.
#List of ship in English and Russian
SELECT ?ship ?shipLabel
WHERE
{
?ship wdt:P31 wd:Q11446.
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru, en" }
}
SPARQL-запрос, 19 820 записей (2017), 50 681 записей (2020), 71 203 записей (2021).
По данным ProWD больше всего свойств (34) имеет Красин (ледокол, 1916), а меньше всего свойству у корабля Ливень (Q99198666) (5 свойств) и корабля Dispatch (Q28155282) (5 свойств).
Составим список кораблей, операторы которых находятся или находились в России, СССР или Российской Империи.
# List of ship from Russia, Soviet Union and Russian Empire
SELECT ?ship ?shipLabel
WHERE
{
?ship wdt:P31 wd:Q11446. # instance of ship
wdt:P137/wdt:P17 ?country. # belongs to country
VALUES ?country {wd:Q34266 # Russian Empire
wd:Q15180 # Soviet Union
wd:Q159} # Russia
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru, en" }
}
SPARQL-запрос, 107 записей (2017), 578 записей (2021).
Полнота Викиданных
правитьПоиск точного количества кораблей в мире — трудная задача. Ведь данные о некоторых из них являются совершенно секретными, какие-то же — это частные судна и информации о них тоже нет. Предположим, что общее число кораблей примерно равно 1.6 миллионам, как указано в базе данных судов. На 2021 год было найдено только 71 206 записей, что составило только 4.5% от общего числа кораблей.
Что касается российских кораблей, в состав российский военных и гражданских флотов входит 17 657 кораблей. В это же время скрипт в листинге показывает лишь 578 кораблей, что составляет 3.27% от общего числа российских кораблей.
В обоих случаях разница между фактическим количеством кораблей и результатом запросов огромная, что говорит о неполноте Викиданных.
ProWD
правитьДанные получены с помощью сервиса ProWD.id, 2020 год. График и коэффициент Джини показывают низкую равномерность заполнения свойств кораблей (Q11446).
Полнота свойств объектов военных кораблей
правитьТребуется найти и заполнить сто объектов кораблей, связанных с Россией и участвовавших в каких-либо военных конфликтах.
# List of ships with countries and war conflicts
SELECT ?ship ?shipLabel ?countryLabel ?conflict ?conflictLabel
WHERE
{
?ship wdt:P31 wd:Q11446; # instance of ship
wdt:P137/wdt:P17 ?country;# belongs to country
wdt:P607 ?conflict. # engaged in some conflict
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru, en" }
}
SPARQL-запрос, 1400 записей (2017), 3586 записей (2020), 3567 записей (2021).
При заполнении свойств военных кораблей, а именно военных конфликтов, в которых они участвовали, указывалось свойство conflict (P607) (война/сражение). В то же время военные конфликты и военные операции, которые являются частью войн, являются разными понятиями. Заполненные данных о кораблях можно условно по делить на два типа:
- Объекты, у которых военные операции объединены с военными конфликтами. Например, у эсминца Гремящий 10 войн/сражений (см. листинг ниже). Такое большое число связано с тем, что корабль принял участие во многих арктических конвоях, которые являются военными операциями.
- Объекты, у которых военные операции отделены от военных конфликтов. Например, у британского крейсера HMS Trinidad участие в военной кампании и арктическом конвое указаны как часть Второй мировой войны с помощью квалификатора including (P1012). Таким образом, в Викиданных у этого крейсера указана одна война/сражение.
# List of military conflicts of the two ships
SELECT ?ship ?shipLabel ?conflict ?conflictLabel
WHERE
{
VALUES ?ship {wd:Q4148613 # Soviet destroyer Gremyashchiy
wd:Q1565575} # United Kingdom's HMS Trinidad
?ship wdt:P607 ?conflict. # conflict
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru, en" }
}
SPARQL-запрос, найдено 10 конфликтов для эсминеца Гремящий (Q4148613) и 1 конфликт для HMS Trinidad (Q1565575) в 2021 году.
Для первого типа заполнения в скриптах с поиском у кораблей свойства conflict (P607) будет отображаться больше войн/сражений, чем при втором. Но в этом случае операция Одесская оборона будет стоять наряду с Великой Отечественной войной, хотя она является частью этой войны. В такой ситуации выводимые данные будут не точными.
Для второго типа заполнения в скриптах можно четко различить войну и военную операцию, также выводимые на графике данные будут точнее.
# List of ship with countries and war conflicts
SELECT ?ship ?shipLabel ?countryLabel ?conflict ?conflictLabel
WHERE
{
?ship wdt:P31 wd:Q11446; # instance of ship
wdt:P137/wdt:P17 ?country;# belongs to operator
wdt:P607 ?conflict. # engaged in some conflict
VALUES ?country {wd:Q34266 # Russian Empire
wd:Q15180 # Soviet Union
wd:Q159} # Russia
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru, en" }
}
SPARQL-запрос, 105 записей в 2017 году, 86 записей в 2020 году, 82 в 2021 году.
При анализе результатов работы скрипта в листинге важно заметить, что попавшие в него корабли не обязательно связанны только с Россией, СССР или Российской империей. Например, корабль Kasato Maru (Q653477) — японский, однако, в списке его операторов указано несколько значений. Среди них есть Добровольный флот (Q3737187), который также владел этим кораблем. Это значит, что один и тот же корабль в различные периоды времени могут принадлежать разным операторам, переходить от владельца в владельцу.
На рис. 2 приведен график зависимости между кораблями (связанными с Россией) и военными конфликтами, в которых они участвовали.
Можно заметить, что большинство кораблей и военных действий приходятся на времена СССР и России. Следует также заметить, что в данном графике, как и в самих данных, из которых они строились, есть один недочёт. Дело в том, что Россию можно разделить на несколько разных стран (по периодам: в частности на Российскую империю, Российскую Социалистическую Федеративную Советскую Республику, СССР и постсоветский период). И в заполненных, редакторами Викиданных, кораблях не всегда верно указан период, когда существовало судно. Например, на рис. 2 видно (и Викиданные это подтверждают), что броненосец Бородино существовал в России, а не в Российской Империи, что является ошибкой.
Но, несмотря на недочёты, график наглядно показывает, какой корабль участвует в каком конкретном военном сражении. В том числе рисунок отображает эту зависимость в разрезе некоторых периодов правления России. На нём также можно отследить на какое военное событие приходится больше всего военных кораблей и наоборот, найти корабль, участвующий в большем количестве войн.
В связи с изменениями в описании объектов wikidata изменилось и число кораблей, связанных с Россией. Ранее каждому кораблю было сопоставлено свойство country, но теперь вместо него указывает лишь operator. Страну теперь можно получить только через operator. Однако, некоторые корабли по какой-то причине не получили этого свойства, например, Dmitrii Donskoi, который не попал в результат запроса за 2020 год (рис. 3). У этого объекта страна обозначена через свойство country of registry. Дальнейшая работа с подобными запросами требует дополнительного исследования способов выяснить страну корабля по свойствам объекта. |
Корабли-музеи в странах мира
правитьКорабль-музей (Q575727) — корабль, на котором размещена музейная экспозиция, посвященная истории корабля. Такие корабли используются в общеобразовательных и мемориальных целях. Участие корабля в военном конфликте (Q180684) может послужить поводом для создания корабля-музея в память о прошедших событиях.
Построим граф кораблей-музеев и стран, в которых эти корабли находятся. Вершинами графа являются страны (Q6256) и корабли-музеи (Q575727). Ребро между кораблем и страной означает, что корабль находится в этой стране. А ребро между двумя странами означает, что между этими странами были конфликты, число которых равно весу ребра. Скрипт в листинге ниже строит граф по описанным выше правилам.
#defaultView:Graph
SELECT ?vertex1 ?vertex1Label ?vertex2 ?vertex2Label ?edgeLabel ?image
WHERE {
{
# Conflicts
SELECT ?vertex1 ?vertex1Label ?vertex2 ?vertex2Label
(STR(COUNT(?conflict)) as ?edgeLabel)
WHERE
{
?conflict wdt:P31 wd:Q180684 .
?conflict wdt:P710 ?vertex1, ?vertex2 .
?vertex1 wdt:P31 wd:Q6256 .
?vertex2 wdt:P31 wd:Q6256
FILTER (?vertex1 != ?vertex2 && STR(?vertex1) < STR(?vertex2))
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
GROUP BY ?vertex1 ?vertex1Label ?vertex2 ?vertex2Label
}
UNION
{
# Museum ships
SELECT DISTINCT ?vertex1 ?vertex1Label ?vertex2 ?vertex2Label ?image
WHERE
{
?vertex2 wdt:P31 wd:Q575727 .
{?vertex2 wdt:P17 ?vertex1} UNION # located in country
{?vertex2 wdt:P131/wdt:P17 ?vertex1}
OPTIONAL { ?vertex2 wdt:P18 ?image}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en"}
}
}
}
SPARQL-запрос, 117 вершин графа в 2021 году.
Из фрагмента графа на рисунке 4 видно, что корабли-музеи по большей части принадлежат Германии, США и Австралии. Такая "корреляция" вполне логична, так как данные страны имеют длительную историю, за которую они поучаствовали во многих военных конфликтах. Также эти страны имеют выход к морю, что исторически обуславливает наличие у них флота, в котором могут найтись корабли для создания музея.
Будущая работа
править- Найти "корабль Гиннесса" (на выбор: самый большой, самый длинный, самый вместительный).
- Вывести фотографии тех кораблей, про которые снимали кино. Если таких не найдётся, тогда те корабли, о которых писали в книгах.
- Вывести корабли-музеи.
Упражнения
править
Примечания
правитьЛитература
править- База данных судов // База данных судов. — 2017.
- Актуальный список корабельного состава ВМФ России на 16 октября 2017 г. // Боевые корабли Российской Федерации 2017. — 2017.
Ссылки
править- Larionov D. Ships in Russia (англ.). ProWD (2020). Проверено 24 сентября 2020.