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

Статья посвящена исследованию космических кораблей и станций на основе Викиданных. С помощью SPARQL-скриптов построен список отечественных кораблей и станций, нарисованы временные графики запуска кораблей в нашей стране и в мире за период с 1960 по 2021 год. Выполнена оценка полноты Викиданных, показавшая, что многие объекты имеют неправильное значение свойства "частный случай понятия (P31)". В ходе работы было обнаружено, что текущие показатели росийской космонавтики по количеству запусков космических кораблей за последние годы соответствуют показателям в СССР пятьдесят лет назад.

Список космических кораблей и станцийПравить

Построим запрос для вывода списка всех космических кораблей и станций. Нам потребуются объекты космические станции (Q25956), космические корабли (Q40218) и отношение экземпляр (P31).

# List of spacecraft (Q40218) and space station (Q25956)
SELECT  ?s ?sLabel ?typeLabel
WHERE
{
  VALUES ?type {wd:Q40218 wd:Q25956}
  ?s wdt:P31 ?type.  # Selecting the type of object
  SERVICE wikibase:label {bd:serviceParam wikibase:language"ru,en"}
}

SPARQL-запрос, Найдено 145 объектов в 2021 году.

Глубина проработки объектовПравить

По состоянию на 2021 год на Викиданных наиболее полным и проработанным является космический корабль Аполлон-8, имеющий 30 свойств. При этом всего всего по одному свойству имеют такие корабли, как: Europa Astrobiology Lander, Project Orbiter, LRK, EarthForce One, Союз ГВК, CubeSat for Solar Particles. Для поиска этой информации был использован запрос, построенный с помощью сервиса ProWD. Этот же сервис показал, что заполнение космических объектов неравномерное, большая часть заполнены менее, чем на 30%.

Отметим непростую судьбу объекта EarthForce One. Этот объект был создан в Викиданных ботом автоматически в 2013 году, поскольку существовала статья в Английской Википедии. Как написано на странице EarthForce One в Английской Википедии, статья была удалена из-за отсутствия надёжных источников, доказывающих значимость объекта. А в Викиданных объект остался как неприкаянный. Подумайте над запросом, который вывел бы список аналогичных объектов Викиданных, не соответствующих ни одной статье Википедии.

Список отечественных кораблей и станцийПравить

Найдём корабли и станции, сконструированные в СССР или России, с помощью запроса:

# List of Russian and USSR spacecrafts and stations
SELECT  ?spacecraft  ?spacecraftLabel 
WHERE
{
  {?spacecraft wdt:P31 wd:Q40218.} UNION #spacecraft
  {?spacecraft wdt:P31 wd:Q25956.} # and space station
  
  # Soviet Union and Russia
  VALUES ?ruCountries {wd:Q15180 wd:Q159}
  ?spacecraft wdt:P17 ?ruCountries. # related to Russian countries
  
  SERVICE wikibase:label {bd:serviceParam wikibase:language "ru,en"}
}

SPARQL-запрос, 3 отечественных корабля найдено в 2017 и 21 в 2021

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

Проанализируем степень заполнения Викиданных в области отечественных космических кораблей и станций. Если по запросу из раздела "Список космических кораблей и станций" было получено 145 результатов, то по запросу из раздела "Список отечественных кораблей и станций" - всего 25.

На сайте Буран.Ру в разделе кораблей СССР и России по состоянию на 2021 год содержится информация о 36 кораблях. То есть в Викиданных представлено не более 70% от всех отечественных кораблей, однако ситуация в 2021 стала значительно лучше по сравнению с 2017 годом, когда по запросу из раздела "Список отечественных кораблей и станций" выдавалось менее 10% от всех кораблей. В советской энциклопедии <<Космонавтика>> от 1985 года упоминаются 94 космических корабля и орбитальных станции СССР и США, запущенных с 1961 по 1983 годы, из них 51 кораблей принадлежат СССР. Это означает, что в Викиданных представлено менее половины советских космических кораблей. В Американской книге "The Facts On File Space and Astronomy Handbook" приведены всего 10 советских и российских запусков космических станций, 126 запусков шатла у НАСА в период с 1981 по 2008 год , и 31 международный запуск.

Временные графики освоения космоса в нашей стране и миреПравить

Временной (с 1960-х годов) график запуска космических аппаратов в нашей стране (рис. 15.4) построен с помощью запроса:

 
# The number of spacecraft launches in Russia every 5 years
#defaultView:BarChart
SELECT (STR(?lapse) AS ?lapse_str) (COUNT(?item) AS ?quantity)
WHERE {                                  # spacecraft belongs to
        {?item wdt:P17 wd:Q15180}               # country = USSR
  UNION {?item wdt:P17 wd:Q159}               # country = Russia
  UNION {?item wdt:P495 wd:Q159}    # country of origin = Russia
  UNION {?item wdt:P495 wd:Q15180}.  # country of origin =  USSR
  
  ?item wdt:P619 ?launch. # date of spacecraft launch
  BIND( YEAR(?launch) AS ?year) 
  BIND(FLOOR(?year/5)*5 AS ?lapse)      # count for each 5 years
SERVICE wikibase:label {bd:serviceParam wikibase:language "ru,en"}
} 
GROUP BY ?lapse
ORDER BY ?lapse # Order 1970, 1975, 1980, ...

SPARQL-запрос.

Ранее в запросах для получения каких-либо списков мы использовали свойство "экземпляр (P31)". В запросе выше мы обошлись без этого свойства за счёт использования отношения "дата запуска космического корабля (619)" в строке 10 для обхода и подсчёта таких объектов, которые были запущены в космос. Логический оператор UNION в строках 5-8 позволяет объединить советские и российские запуски космолётов. Если бы в запросе вместо переменной ?lapse оставалась - ?year (строки 3 и 12), то на графике мы бы получили число запусков за каждый год. Благодаря функции округления FLOOR() и группировке, объекты ?item, имеющие запуски, группируются за пятилетний период, и в переменную ?quantity записывается число этих объектов, подсчитанное с помощью функции COUNT(). Группировка выполняется в строке 15 запроса командой GROUP BY ?lapse. То, что группировка идёт именно по пятилеткам, а не, например, шестилеткам, определяется в строке 12, где переменная ?year делится на 5, округляется и умножается на 5. Для представления результатов в виде столбчатой диаграммы используется стиль отображения BarChart.

Горизонтальной оси на графике отвечает переменная ?lapse_str. Если не преобразовывать число ?lapse в текстовую переменную ?lapse_str (Преобразование числа в текст в третьей строке запроса STR(?lapse) AS ?lapse_str)), то ось X имеет диапазон от 0 до 2200, вместо требуемого диапазона от 1960 до 2025 года, а результаты обозначаются точками с координатами (пятилетка, число запусков), и график становится нечитаемым.

График количества запущенных космических аппаратов по пятилеткам, начиная с 1960-х гг. представлен на столбчатой диаграмме ниже:

 
Визуализация количества запусков космических кораблей а России каждые 5 лет 2021 SPARQL

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

Скрипт построения графика запусков космический кораблей в мире по годам и странам представлен ниже:

# Diagram of spacecraft launches by year and country
#defaultView:BarChart
SELECT ?year (COUNT(?obj) AS ?count) ?country ?countryLabel
WHERE {
  ?obj wdt:P17 ?country. # spacecraft belongs to country 
  ?obj wdt:P619 ?launch. # date of spacecraft launch
  BIND(str(YEAR(?launch)) AS ?year)
  
  SERVICE wikibase:label {bd:serviceParam wikibase:language "ru".}
}
GROUP BY ?year ?country ?countryLabel

SPARQL-запрос.

График количества запусков космический кораблей в мире по годам и странам представлен на столбчатой диаграмме ниже:

 
Визуализация количества запусков космических кораблей по годам и странам 2021 SPARQL

Из графика видно, что больше всего космических аппаратов запускали Индия и США (только у них зафиксировано более 10 ежегодных запусков) в 2017-2018 годах. Пик запусков в мире был в 2018 году (59 запусков). По Викиданным российская космонавтика занимает средние позиции по количеству запусков, её численные показатели за 2016-2019 годы схожи с показателями СССР в 1970-е и 1980-е годы и составляют 3-5 запусков в год.

Космонавты в международных полётахПравить

Запрос строит граф c вершинами типа "ракеты" и "космонавты" с раскраской по странам.

# Graph of astronauts as crew of flights of different countries
#defaultView:Graph
SELECT DISTINCT ?item ?itemLabel ?rgb ?link ?naut_seed
WHERE
{ 
  VALUES ?toggle { true false }
  # Let's select a subset of astronauts
  {
    SELECT DISTINCT ?naut WHERE
    { 
      VALUES ?naut_seed {wd:Q313815}.  # Sergei Krikalev
      ?s wdt:P1029 ?naut_seed, ?naut;  
    }       # ?naut_seed & ?naut are member of a same crew
  }
  ?s  wdt:P31/wdt:P279* wd:Q40218; # spacecraft and subclasses
      wdt:P31/wdt:P279* wd:Q752783;# human spaceflight and subclasses
          wdt:P1029 ?naut;         # has member of the crew ?naut    
  SERVICE wikibase:label {bd:serviceParam wikibase:language "ru,en"}
  BIND(IF(?toggle,?s,?naut) AS ?item).
  BIND(IF(?toggle,?sLabel,?nautLabel) AS ?itemLabel).
  BIND(IF(?toggle,"FFFFFF","7FFF00") AS ?rgb_source).
  BIND(IF(?toggle,"",?s) AS ?link).
  ?naut wdt:P27 ?country. # astronaut is citizen of country 
  # ?toggle = true then spacecraft node
  # ?toggle = false then astronaut node
  BIND(             # Soviet & Russian astronauts have red nodes
    IF(!?toggle && (?country=wd:Q15180||?country=wd:Q159),"FF0000",
    IF(!?toggle && ?country=wd:Q30,"FF00FF",  # USA - fuchsia
    IF(!?toggle && ?country=wd:Q183,"C0C0C0", # Germany - silver
    IF(!?toggle && ?country=wd:Q142,"008080", # France - teal
    IF(!?toggle && ?country=wd:Q40,"800000", # Austria - maroon
    IF(!?toggle && ?country=wd:Q38,"00FFFF", # Italy - aqua
    ?rgb_source))))))
    AS ?rgb).
}

SPARQL-запрос, найдено 68 результатов в 2022 году.

 
Граф связи одновременно летавших космонавтов через космические корабли, результат SPARQL запроса

Для работы скрипта необходимо указать начальную точку - космонавта, который принимал участие в международных космических полётах. Начальная точка задаётся в строке 11 скрипта и записывается в переменную ?naut_seed. Далее, в строке 12, выполняется поиск астронавтов, летавших совместно с тем, кого мы указали ранее. В строках 15-17 подгружаются данные о космических аппаратах, полётах и астонавтах. Булевая переменная ?toggle имеет значение ?true, если найденный объект является космическим аппаратом или ?false, если найденный объект является космонавтом. В переменную ?item в строке 19 записывается выбранный объект (космический аппарат или космонавт). В строке 20 в переменную ?itemLabel записывается название объекта, в строке 21 в переменную ?rgb_source записываются данные для раскраски кораблей.

Если выбран корабль, то в строке 22 в переменную ?link ничего не записывается, если выбран космонавт, то в переменную ?link записываем его корабль. На графе этой переменной будет соответствовать дуга от космонавта к кораблю.

В строке 23 подгружаются данные о гражданстве космонавта, а в строках 26-34 вершинам космонавтов на графе присваивается цвет в зависимости от их гражданства.

Будущая работаПравить

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

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

1 Выберите, сколько кораблей было запущено в СССР в 60-х, 70-х и 80-х гг XX века.

42 39 16
60-е
70-е
80-е

2 Расставьте количество запусков кораблей по десятилетиям в порядке возрастания

63 76 115 121
70-е
80-е
90-е
00-е

3 Напишите название страны, в которой спроектировали космические корабли, представленные на изображениях:

     


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

Ответ на первые 2 вопроса.

Изображения кораблей.

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

ЛитератураПравить

  • Глушко В. П. Энциклопедия Космонавтика. — 1985.
  • Joseph A. and Angelo, Jr The facts on file space and astronomy handbook. — 2009.

СсылкиПравить

  • SavinovED All Spacecraft (англ.). ProWD (2021). Проверено 24 сентября 2021.