Программирование Викиданных/Корабли

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% от общего числа российских кораблей.

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

 
Рис. 1. Заполненность свойств кораблей ВМФ России и коэффициент Джинни

Данные получены с помощью сервиса 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) (война/сражение). В то же время военные конфликты и военные операции, которые являются частью войн, являются разными понятиями. Заполненные данных о кораблях можно условно по делить на два типа:

  1. Объекты, у которых военные операции объединены с военными конфликтами. Например, у эсминца Гремящий 10 войн/сражений (см. листинг ниже). Такое большое число связано с тем, что корабль принял участие во многих арктических конвоях, которые являются военными операциями.
  2. Объекты, у которых военные операции отделены от военных конфликтов. Например, у британского крейсера 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. Дальнейшая работа с подобными запросами требует дополнительного исследования способов выяснить страну корабля по свойствам объекта.
 
Рис. 2. Список кораблей, связанных с Россией и участвовавших в военных конфликтах (2017)
 
Рис. 3. Список кораблей, связанных с Россией и участвовавших в военных конфликтах (2020)

Корабли-музеи в странах мира

править

Корабль-музей (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 видно, что корабли-музеи по большей части принадлежат Германии, США и Австралии. Такая "корреляция" вполне логична, так как данные страны имеют длительную историю, за которую они поучаствовали во многих военных конфликтах. Также эти страны имеют выход к морю, что исторически обуславливает наличие у них флота, в котором могут найтись корабли для создания музея.

 
Рис. 4. Фрагмент графа стран, кораблей-музеев и конфликтов (2020)

Будущая работа

править
  1. Найти "корабль Гиннесса" (на выбор: самый большой, самый длинный, самый вместительный).
  2. Вывести фотографии тех кораблей, про которые снимали кино. Если таких не найдётся, тогда те корабли, о которых писали в книгах.
  3. Вывести корабли-музеи.

Упражнения

править

1 Исходя из графика зависимости кораблей и военных действий, на какую страну приходится больше всего значений войн, с которыми связаны корабли?

СССР
Россия
Российская империя

2 Исходя из этого же графика, на какую войну приходится больше всего значений кораблей?

Русско-японская война
Вторая мировая война
Крымская война

3 На рисунке представлен самый известный советский эскадренный миноносец проекта 7, удостоенный звания "гвардейский", назовите его.

 


Примечания

править

Литература

править

Ссылки

править
  • Larionov D. Ships in Russia (англ.). ProWD (2020). Проверено 24 сентября 2020.