Программирование Викиданных/Музыкальные композиции
Статья посвящена исследованию музыкальных композиций на основе базы знаний международного проекта Викиданные. С помощью SPARQL-запросов, вычисляемых на объектах типа ”музыкальная композиция” в Викиданных, получен список всех музыкальных композиций, список музыкальных композиций, имеющих композиторов, а также построена пузырьковая диаграмма, показывающая композиторов с наибольшим количеством композиций. Кроме того, решена задача поиска музыкальных лакун в общественном достоянии и выполнена оценка полноты Викиданных.
Экземпляры объекта «Музыкальные композиции»
править- Объекты: музыкальное произведение/композиция (Q105543609).
- Свойство: экземпляр (P31).
Построим список всех музыкальных композиций.
#List of all musical compositions
SELECT ?composition ?compositionLabel
WHERE {
?composition wdt:P31 wd:Q105543609.
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en". }
}
SPARQL-запрос, 5494 записи в 2017 году.
👍 Наиболее полными и проработанными музыкальными композициями на Викиданных являются: Волшебная флейта, К Элизе, Реквием, Маленькая ночная серенада.
👎 Почти пустыми и малоинформативными музыкальными композициями были: Полёт шмеля, Ромео и Джульетта, Симфонический эпизод «Завод», Binks’ Waltz, The Rose-bud March, Leola.
В 2022 году тот же скрипт нашёл 106757 музыкальные композиции вместо 5,5 тысяч в 2017 году. Уменьшение числа композиций связано с тем, что эти объекты Викиданных являются теперь не экземплярами объекта «музыкальные произведения», а его экземплярами различных подклассов «музыкального произведения». При поиске подклассов объекта «музыкальные произведения» можно найти такие жанры: драматико-музыкальное произведение (Q58483083), гимн (Q484692), баллада (Q182659).
Найдём количество музыкальных композиций в каждом жанре с помощью следующего запроса.
# Count of pieces of music in each subclass
SELECT ?type (COUNT(?subMusicInstance) AS ?count) ?subMusicLabel WHERE {
?type wdt:P279* wd:Q105543609. # subclass of musical composition
?subMusicInstance wdt:P31 ?type # instance of that class of which this subject is a particular example and member
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru, en". }
}
GROUP BY ?type ?subMusicLabel
ORDER BY DESC (?count)
SPARQL-запрос, 161 подкласса музыкальных композиций на 2022 год.
Теперь подсчитаем общее суммарное число музыкальных произведений с учётом музыкальных композиций в подклассах. Для этого добавим в наш скрипт команду SUM() и удалим лишние строки. Получим такой код:
# The total number of musical works for all subclasses
SELECT (SUM(?count) AS ?sum) WHERE{
SELECT (COUNT(?music) AS ?count) WHERE {
?type wdt:P279* wd:Q105543609. # subclass of musical composition
?music wdt:P31 ?type # instance of that class of which this subject is a particular example and member
}
}
Можно записать этот код еще короче. Переменная ?type нам не нужна, поэтому можно обойтись без неё, а 4 и 5 строки поменяем местами.
# The total number of musical works for all subclasses
SELECT (SUM(?count) AS ?sum) WHERE{
SELECT (COUNT(?music) AS ?count) WHERE {
?music wdt:P31 # instance of
[ wdt:P279* wd:Q105543609 ]. # subclass of musical composition
}
}
SPARQL-запрос, на 2022 год запрос выдает 145046 музыкальных произведений. По сравнению с 2017 годом "5494 записи", число записей увеличилось в несколько раз. Это связано с тем, что за 5 лет было добавлено множество новых музыкальных произведений, а также старых, которые не учли ранее.
Количество музыкальных произведений по годам
правитьДалее представлен запрос, подсчитывающий сколько музыкальных произведений было написано в каждом десятилетии с XIX века до настоящего времени.
# The number of musical compositions for every 10 years
#defaultView:BarChart
SELECT (STR(?date) AS ?date_str) (COUNT(?composition) AS ?count) WHERE {
?composition wdt:P31 wd:Q105543609; # instance of compostion
wdt:P86 ?composer; # composition has a composer
wdt:P577 ?publication. # composition has a publication date
BIND(YEAR(?publication) AS ?year)
BIND((FLOOR(?year / 10 )) * 10 AS ?date)
FILTER(?publication > "1850-01-01T00:00:00Z"^^xsd:dateTime)
FILTER(?publication < "2030-01-01T00:00:00Z"^^xsd:dateTime)
FILTER (!wikibase:isSomeValue(?publication)) # field "date" must be filled
}
GROUP BY ?date
ORDER BY (?date)
Из графика можно увидеть, что до 1890 года количество написанных музыкальных произведений невелико. После 1890 года начинается резкий подъем и продолжается до нашего времени. Такое увеличение музыкальных произведений можно объяснить тем, что со временем появляются новые жанры и новые устройства для записи. На гистограмме видим два пика: 1960-е — 1980-е ("первая волна"), 2000-е и 2010-е ("вторая волна").
Количество музыкальных произведений по жанрам
правитьНайдем, в каких жанрах были написаны музыкальные произведения в пиках графика и изобразим жанры на круговой диаграмме. "Первая волна"
# Count of pieces of music in each subclass
SELECT ?type (COUNT(?typeInstance) AS ?count) ?typeLabel WHERE {
?type (wdt:P279*) wd:Q207628.
?typeInstance wdt:P31 ?type.
?typeInstance wdt:P577 ?publication.
?typeInstance wdt:P86 ?composer.
FILTER(?publication > "1960-01-01T00:00:00Z"^^xsd:dateTime)
FILTER(?publication < "1990-01-01T00:00:00Z"^^xsd:dateTime)
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru, en". }
}
GROUP BY ?type ?typeLabel
ORDER BY DESC (?count)
"Вторая волна"
# Count of pieces of music in each subclass
SELECT ?type (COUNT(?typeInstance) AS ?count) ?typeLabel WHERE {
?type (wdt:P279*) wd:Q207628.
?typeInstance wdt:P31 ?type.
?typeInstance wdt:P577 ?publication.
?typeInstance wdt:P86 ?composer.
FILTER(?publication > "2000-01-01T00:00:00Z"^^xsd:dateTime)
FILTER(?publication < "2020-01-01T00:00:00Z"^^xsd:dateTime)
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru, en". }
}
GROUP BY ?type ?typeLabel
ORDER BY DESC (?count)
Можем сделать вывод, что жанры музыкальных произведений первого пика, не отличаются от жанров второго. На второй диаграмме, видим сильное преобладание одного жанра "песня". В жанре "духовная песня" количество музыкальных произведений уменьшилось. А такие музыкальные жанры как: "переведенная песня" и "лирико-музыкальное произведение" пропали.
Число композиций по десятилетиям в России
правитьДобавим в скрипт страну происхождения "Россия" и "СССР". Ограничение по годам уберем. Получим скрипт, подсчитывающий сколько музыкальных произведений было написано в каждом десятилетии с XIX века до настоящего времени в России и СССР.
# The number of musical compositions in Russia for every 10 years
#defaultView:BarChart
SELECT (STR(?date) AS ?date_str) (COUNT(?composition) AS ?count) WHERE {
{?composition wdt:P17 wd:Q15180} # country = USSR
UNION {?composition wdt:P17 wd:Q159} # country = Russia
UNION {?composition wdt:P495 wd:Q159} # country of origin = Russia
UNION {?composition wdt:P495 wd:Q15180}. # country of origin = USSR
?composition wdt:P31 wd:Q105543609; # instance of compostion
wdt:P86 ?composer; # composition has a composer
wdt:P577 ?publication. # composition has a publication date
BIND(YEAR(?publication) AS ?year)
BIND((FLOOR(?year / 10 )) * 10 AS ?date)
FILTER (!wikibase:isSomeValue(?publication)) # field "date" must be filled
}
GROUP BY ?date
ORDER BY (?date)
Количество музыкальных произведений в России и СССР очень мало. Проанализировав несколько песен, написанных в России, таких как: Песня без слов (Кино) (Q101001315), Музыка нас связала (Q105724079), Розовое вино (Q57744615), не попавших в данный скрипт, стало понятно, что у этих произведений отсутствует Cтрана происхождения (P495).
Поиск музыкальных лакун в общественном достоянии
правитьЗадача состоит в том, чтобы найти такие музыкальные произведения, авторы которых умерли более 70 лет назад, и аудиозапись которых отсутствует на Викискладе. Упорядочить такие произведения от самых старых к новым. Существует практическая выгода и польза от такого скрипта, поскольку видно, какие произведения можно и нужно оцифровывать (с пластинок, кассет) и загружать на Викисклад.
#Search music gaps in public domain
SELECT ?composition ?compositionLabel ?publication
WHERE {
?composition wdt:P31 wd:Q105543609. # instance of compostion
?composition wdt:P86 ?composer. # composition has a composer
?composition wdt:P577 ?publication. # composition has a publication date
?composer wdt:P570 ?death. # composer has a date of death
MINUS {?composition wdt:P51 []}. # compositions without audio
FILTER(?death < "1947-01-01T00:00:00Z"^^xsd:dateTime) # composers that passed away more than 70 years ago
FILTER(?publication < "1947-01-01T00:00:00Z"^^xsd:dateTime) # compositions that were published more thatn 70 years ago
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en". }
}
ORDER BY ASC(?publication)
SPARQL-запрос, 3771 записей.
Полнота Викиданных
правитьПроанализируем полноту Викиданных.
По данным "Музыкального словаря Гроува" [1] за всю историю человечества существовало 20374 композиторов.
По данным категории "Композиторы по алфавиту" Русской Википедии существует 6130 композиторов.
По данным категории "List of composers by name" Английской Википедии существует 4685 композиторов.
Количество музыкальных композиций с заполненным свойством "композитор (P86)" равно 3862, что показывает нам SPARQL-запрос, и это с учётом того, что один композитор мог написать несколько музыкальных произведений. Например, Вольфганг Амадей Моцарт написал 95 произведений, что существенно снижает количество уникальных композиторов. Полученное число 3862 меньше, чем количество композиторов из русской и английской Википедии, и существенно меньше, чем количество композиторов из "Музыкального словаря Гроува", что говорит нам о неполноте Викиданных.
SPARQL-запрос по композициям с заполненным свойством "композитор (P86)" и свойством "страна происхождения (P495)", имеющим значения "Российская империя (Q34266)", "СССР (Q15180)" или "Россия (Q159)", выдал всего лишь 8 произведений, что говорит о невозможности анализа русских музыкальных произведений в связи с недостатком данных.
Построим пузырьковую диаграмму композиторов музыкальных композиций.
#composers of musical compositions
#defaultView:BubbleChart
SELECT ?composer ?form (COUNT(*) AS ?count)
WHERE {
?composition wdt:P31 wd:Q105543609. # instance of composition
?composition wdt:P86 ?composer. # composition has a composer
OPTIONAL {
?composer rdfs:label ?form.
FILTER((LANG(?form)) = "ru,en")
}
}
GROUP BY ?composer ?form
ORDER BY DESC(?count) ?form
SPARQL-запрос, 773 записи.
Размер круга означает количество написанных музыкальных композиций. Диаграмма показывает, что у одних композиторов значительно больше композиций чем у других. В 2017 году в первую пятерку входят Нильс Гаде(173 композиции), Иоганн Себастьян Бах (155 композиций), Кристиан Август Синдинг (125 композиций), Юхан Хальворсен (121 композиция), Алан Хованесс (108 композиций).
Диаграмма за 2022 год позывает как изменилось количество написанных композиций у различный композиторов. По сравнению с 2017 годом в первую пятерку входят Маклауд Кевин (1237 композиций), Гендель Георг Фридрих (1236 композиция), Рахул Дев Бурман (744 композиций), Вольфганг Амадей Моцарт (699 композиций), Жан-Батист Люлли (686 композиций). Исходя из данных диаграмм, можно сделать вывод, что появились новые композиторы, которые имеют значительно больше публикаций. Так же можно наблюдать имена старых композиторов, тоже с существенным приростом опубликованных композиций, что говорит о дополнении Викиданных ранее не учтенными произведениями.
Заполнение Викиданных
правитьДля того чтобы получить больше записей при выполнении скрипта для поиска музыкальных лакун в общественном достоянии, было решено заполнить свойство "композитор (P86)" у объектов типа "музыкальная композиция (Q207628)".
Построим список всех музыкальных композиций с заполненным свойством "композитор (P86)".
#Lists of compositions that has a composer in Russian
SELECT ?composition ?compositionLabel ?composer ?composerLabel
WHERE {
?composition wdt:P31 wd:Q207628. # instance of composition
?composition wdt:P86 ?composer. # composition has a composer
SERVICE wikibase:label { bd:serviceParam wikibase:language "ru". }
}
}
SPARQL-запрос, 3864 записи на 30 октября 2017 года, 10:51.
SPARQL-запрос, 3965 записей на 30 октября 2017 года, 12:47.
Будущая работа
править- Найти список музыкальных композиций, созданных во время эпохи классицизма (XVII—XVIII века).
Свойство: "дата создания (P571)". - Найти композитора, который написал больше симфоний чем остальные.
Свойства: "экземпляр (P31)", "композитор (P86)". - Построить гистограмму, на которой отображается количество музыкальных композиций группы The Beatles по году публикации.
Свойства: "исполнитель (P175)", "дата публикации (P577)".
Упражнения
править
SPARQL-запросы с ответами:
- SPARQL-запрос списка композиторов музыкальных композиций по убыванию количества музыкальных композиций, 782 записи.
- SPARQL-запрос музыкальных композиций, созданных в Российской империи, 4 записи.
- SPARQL-запрос списка всех музыкальных композиций, 5259 записей.
- SPARQL-запрос списка музыкальных композиций, появившихся в 21 веке, 5 записей.
- SPARQL-запрос списка музыкальных композиций, появившихся в 20 веке, 49 записей.
- SPARQL-запрос упорядоченного списка количества частей в музыкальном произведении , 15 результатов.
- SPARQL-запрос диаграммы количества частей в музыкальных произведениях, имеющих логотипы, 9 результатов.
Примечания
правитьСсылки
правитьМузыкальный словарь Гроува. — Издательство Оксфордского университета, 2001.