Программирование Викиданных/Космические корабли и станции
Статья посвящена исследованию космических кораблей и станций на основе Викиданных. С помощью 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, ...
Ранее в запросах для получения каких-либо списков мы использовали свойство "экземпляр (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-х гг. представлен на столбчатой диаграмме ниже:
Из графика можно увидеть, что самый активный период развития космонавтике в нашей стране был в 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
График количества запусков космический кораблей в мире по годам и странам представлен на столбчатой диаграмме ниже:
Из графика видно, что больше всего космических аппаратов запускали Индия и США (только у них зафиксировано более 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 году.
Для работы скрипта необходимо указать начальную точку - космонавта, который принимал участие в международных космических полётах. Начальная точка задаётся в строке 11 скрипта и записывается в переменную ?naut_seed. Далее, в строке 12, выполняется поиск астронавтов, летавших совместно с тем, кого мы указали ранее. В строках 15-17 подгружаются данные о космических аппаратах, полётах и астонавтах. Булевая переменная ?toggle имеет значение ?true, если найденный объект является космическим аппаратом или ?false, если найденный объект является космонавтом. В переменную ?item в строке 19 записывается выбранный объект (космический аппарат или космонавт). В строке 20 в переменную ?itemLabel записывается название объекта, в строке 21 в переменную ?rgb_source записываются данные для раскраски кораблей.
Если выбран корабль, то в строке 22 в переменную ?link ничего не записывается, если выбран космонавт, то в переменную ?link записываем его корабль. На графе этой переменной будет соответствовать дуга от космонавта к кораблю.
В строке 23 подгружаются данные о гражданстве космонавта, а в строках 26-34 вершинам космонавтов на графе присваивается цвет в зависимости от их гражданства.
Будущая работа
[править]- Подсчитать и вывести список кораблей, которые отправились или планируется отправить на Марс.
- Подсчитать и построить график доли кораблей, предназначенных для отправки на Марс, по отношению к кораблям отправленным на Луну.
- Подсчитать количество успешных космических запусков относительно неудачных.
Упражнения
[править]
SPARQL-запросы с ответами:
Примечания
[править]Литература
[править]- Лукашевич В. П. Все корабли. — 2019.
- Глушко В. П. Энциклопедия Космонавтика. — 1985.
- Joseph A. and Angelo, Jr The facts on file space and astronomy handbook. — 2009.
Ссылки
[править]- SavinovED All Spacecraft (англ.). ProWD (2021). Проверено 24 сентября 2021.