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

Материал из Викиверситета
Перейти к навигации Перейти к поиску

В рамках статьи исследуется объект Викиданных «аниме». С помощью SPARQL-запросов, вычисляемых на объектах типа «аниме» в Викиданных, решены такие задачи: получен список сэйю, упорядоченный по числу озвученных ими аниме, построена гистограмма числа аниме, озвученных одним сэйю, построен граф, связывающий сэйю и озвученные ими аниме, получены оценки трудоспособного возраста сэйю.

Экземпляры объекта «Аниме»[править]

Аниме — это японская мультипликация. У каждого аниме есть свои актёры озвучивания. В дальнейшем под «сэйю» будем понимать японского актёра озвучивания. В японской анимации слова «актёры озвучивания» и «сэйю» являются синонимами[1]. Под словом «тайтл» (от англ. «title», название) обычно понимают конкретное аниме[2]. В общем же смысле слово «тайтл» означает понятие, объединяющее различные виды продукции (от кинофильма до романа), созданные на основе конкретного произведения, за которым закреплено строго определённое название [3].

Чтобы работать со списком аниме, о которых есть информация на Викиданных, нам понадобятся собственно объект «аниме» (Q1107), а также свойство «экземпляр» (P31).

Получим список всех аниме без учёта подклассов с помощью такого запроса:

# List of instances of anime
SELECT ?anime ?animeLabel
WHERE
{
    ?anime wdt:P31 wd:Q1107. # instance of anime
    SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en,ja" }
}

то получим 216 результатов. В 2017 году подобный запрос возвращал 683 результата. В действительности в Викиданных объектов аниме гораздо больше, но они являются экземплярами не объекта «аниме», а его подклассов.

Список жанров аниме (подклассов объекта «аниме» (Q1107)) можно получить следующим образом:

# Select anime and its subclasses with number of titles corresponding to these subclasses
SELECT ?subAnime ?subAnimeLabel (COUNT(?subAnimeInstance) AS ?count) WHERE {
  ?subAnime wdt:P279* wd:Q1107.       # select anime subclass list
  ?subAnimeInstance wdt:P31 ?subAnime # connect titles and their subclasses
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en,ja". }
}
GROUP BY ?subAnime ?subAnimeLabel
ORDER BY DESC(?count)

Полученная классификация аниме по жанрам не идеальна, так как есть большое смещение в сторону аниме-сериалов: из 4757 тайтлов 2917 отнесены к жанру «аниме-сериал» (61,3 %); вероятно, классификация жанров аниме в Викиданных требует дальнейшего уточнения. Также в подклассы попали понятия, относящиеся не к общей классификации, а к отдельным аниме, например, «Евангелион».

Получим список всех аниме, включая тайтлы, относящиеся к жанрам аниме:

# List of instances of anime and subclasses of anime
SELECT ?anime ?animeLabel
WHERE
{
    ?anime wdt:P31/wdt:P279* wd:Q1107. # instance of anime with subclasses
    SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en,ja" }
}

SPARQL-запрос, 683 результата без учёта подклассов (2017) и 4756 результатов со всеми подклассами (жанрами) аниме (2021).

👍 Аниме, о которых есть наиболее полная информация на Викиданных — это Гуррен-Лаганн, Space Battleship Yamato, Project A-ko

👎 Аниме с малоинформативными записями на Викиданных: Doraemon, The Animal Conference on the Environment, Assassins Pride

Среди всех аниме-тайтлов в Викиданных больше всего свойств по данным сервиса ProWD у Fullmetal Alchemist: The Sacred Star of Milos (23 свойства).

Упорядоченный список сэйю по числу озвученных ими аниме[править]

Разумеется, в большинстве аниме есть не только один персонаж. Соответственно, разных персонажей озвучивают разные сэйю. Большинство сэйю озвучили за свою карьеру несколько тайтлов, а многие — несколько десятков тайтлов. Талантливых сэйю приглашают озвучивать сразу несколько персонажей в одном аниме. Одним из самых популярных сэйю является Хироси Камия, который за свою карьеру озвучил более 180 аниме. Самым известным аниме с его участием является «Атака титанов», где он озвучил одного из главных персонажей — капитана Леви.

Построим упорядоченный список сэйю по числу озвученных ими аниме.

# Ordered list of actors (seiyu) according to the number of anime where they took part in.
SELECT ?seiyu (SAMPLE(?label) AS ?seiyuLabel) (COUNT(?anime) AS ?count)
WHERE
{
  ?anime wdt:P31/wdt:P279* wd:Q1107;	 # instance of anime or its subclasses
         wdt:P725 ?seiyu. 	             # instance of seiyu (voice actor)
  ?seiyu rdfs:label ?label	             # subclass of label
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en,ja" }
}
GROUP BY ?seiyu		    # group by seiyu 
ORDER BY DESC(?count)	# order by count of voiced anime

SPARQL-запрос, 148 результатов без подклассов (2017) и 2684 результата со всеми подклассами аниме (2021).

График по числу сэйю, озвучивших одно и более аниме[править]

Было бы интересно построить график (линейную диаграмму) сэйю, озвучивших аниме. Чем больше аниме озвучил сэйю, тем правее на диаграмме он будет находиться.

# Graph of the number of voice actings of different seiyu
#defaultView:LineChart                                            # use line chart as result representation
SELECT ?seiyuRoles (COUNT(?seiyuRoles) AS ?quantity) WHERE {      # count the number of seiyu that have a same number of roles
  FILTER(?seiyuRoles < 71) # limit the output as there are few seiyu that act in more than 71 anime
  {
     SELECT (COUNT(?seiyu) AS ?seiyuRoles) WHERE {            # count quantity of voice acting by one seiyu
       ?anime wdt:P31/wdt:P279* wd:Q1107;                     # instance of anime and its subclasses
              wdt:P725 ?seiyu.                                # instance of seiyu
       SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en,ja"}
     }
     GROUP BY ?anime              # group list by number of voiced anime
     ORDER BY DESC(?seiyuRoles)   # order by voice acting quantity (descending)
  }
}
GROUP BY ?seiyuRoles
ORDER BY DESC(?seiyuRoles)  # grouping and sorting seiyu by number of voice actings

SPARQL-запрос, 13 результатов без подклассов (2017) и 58 результатов со всеми подклассами аниме (2021).

Очевидно, что чем большее количество аниме берётся в расчёт, тем меньшее количество сэйю участвует в озвучке (рис. 1). Многие сэйю, как показано на диаграмме, озвучили только одно аниме — на графике их оказалось 254. Это может быть связано с неполнотой Викиданных.

Рис. 1: График, который показывает число ролей, озвученных различными сэйю (2021)

Граф, связывающий сэйю и озвученные ими аниме[править]

Итак, многие сэйю за свою карьеру успевают озвучить несколько аниме. Построим граф, связывающий сэйю и озвученные ими аниме, чтобы нагляднее показать эту взаимосвязь.

# Graph of seiyu with more than one anime
#defaultView:Graph
SELECT DISTINCT ?item ?itemLabel ?rgb ?link
WHERE
{ # voice actors (seiyu) with more than one anime
  VALUES ?toggle { true false }
  VALUES ?seiyu { wd:Q6381410 wd:Q1347031 wd:Q1207010 
           wd:Q233902  wd:Q1323728 wd:Q2440809 
           wd:Q355173  wd:Q957795  wd:Q50033}
  ?anime  wdt:P31/wdt:P279* wd:Q1107; # instance of anime or its subclass
          wdt:P725 ?seiyu;            # seiyu who voiced this anime 
  SERVICE wikibase:label {bd:serviceParam wikibase:language "ru,en,ja"}
  BIND(IF(?toggle,?anime,?seiyu) AS ?item).
  BIND(IF(?toggle,?animeLabel,?seiyuLabel) AS ?itemLabel).
  BIND(IF(?toggle,"FFFFFF","7FFF00") AS ?rgb).
  BIND(IF(?toggle,"",?anime) AS ?link).
}

SPARQL-запрос, 826 результатов без подклассов (2017) и 494 результата со всеми подклассами аниме (2021).

Конструкция BIND(IF(?toggle, ?variable1, ?variable2)) позволяет определить тип вершины графа: например, в строке 14 если для объекта ?toggle принимает значение true, то этот объект соответствует аниме, иначе — сэйю. Аналогично в строках 15 и 16 определяется тип текстовой метки для вершины и цвет вершины.

Рис. 2: Фрагмент графа, связывающего сэйю и озвученные ими аниме (2021)


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

Список тайтлов в Русской Википедии содержит 1638 аниме. Также можно посмотреть телевизионные показы аниме в России по годам.

В Английской Википедии можно наблюдать примерно такой же результат. Можно просмотреть все аниме с помощью категорий аниме, которых на данный момент 17.

На сайте [4] в списке аниме 801 страница по 20 наименований. Нетрудно посчитать, что на сайте есть информация о 16020 тайтлах, в то время как в Викиданных объектов, описывающих аниме, всего 4756. К тому же, стоит учитывать, что скорость выхода новых аниме довольно велика. Из этого можно сделать вывод, что Викиданные крайне неполно отражают данные (есть информация только о 29.6% аниме). То же самое касается и жанров: в разделе поиска [4] доступны 42 жанра аниме, в то время как Викиданные содержат информацию только о 17.

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

На сайте [5] приведён список из 5756 аниме.

На сайте [6] приведён список из 1968 аниме.

На сайте [7] приведён список из 4795 аниме.

На сайте [8] приведён список из 420 аниме.

Можно сделать вывод, что различные сайты имеют разную информацию об имеющихся аниме. Какие-то сайты появились позже, какие-то раньше, поэтому количество аниме на них может разниться, причём довольно серьёзно. Если упорядочить все приведённые сайты, данные Русской Википедии, Английской Википедии и Викиданные по количеству аниме, то Викиданные окажутся не на последнем месте, но, например, сайту [4] они уступают почти в 4 раза.

Вспомним запрос, в котором говорилось о 2684 сэйю на Викиданных. Дело в том, что поиск производился только по актёрам озвучивания, связанным с аниме, поэтому результат оказался таким скромным. Если запросить информацию о всех актёрах озвучивания (то есть убрать ограничение на категорию аниме), то результат изменится.

# Ordered list of actors according to the quantity of projects voiced by them
SELECT ?actor (SAMPLE(?label) AS ?actorLabel) (COUNT(?media) AS ?count)
WHERE
{
  ?media wdt:P725 ?actor.	 # instance of voice actor
  ?actor rdfs:label ?label	 # subclass of label
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en,ja" }
}
GROUP BY ?actor		    # group by actor
ORDER BY DESC(?count)	# order by number of voiced projects

SPARQL-запрос, 3965 результатов (2017) и 14252 результата (2021).

Значительный прирост числа результатов относительно вышеупомянутого запроса говорит о том, что сэйю могут озвучивать не только аниме, но и другие проекты, и это нужно учитывать при формировании запросов.

Указана ли дата публикации у аниме?[править]

Каждый любитель японской анимации желает знать, в каком году вышло его любимое аниме. Викиданные располагают этой информацией не в полной мере. Напишем скрипт, который бы показывал количество аниме с незаполненным полем "publication date" (дата публикации).

# List of anime the release date of which is empty
SELECT ?anime ?animeLabel
WHERE
{
    ?anime wdt:P31/wdt:P279* wd:Q1107;                # instance of anime
    FILTER NOT EXISTS { ?anime wdt:P577 [] }          # return the list of anime the release date of which is empty
    SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en,ja" }
}

SPARQL-запрос, 237 результатов без подклассов (2017), 2940 результатов со всеми подклассами аниме (2021).

На 2021 год из 4756 аниме на Викиданных у 2940, а это 61.8%, не указана дата выхода. В 2017-м из 683 аниме на Викиданных только 237 (то есть 34.7%) не имели указанной даты выхода. Похоже, что, к сожалению, увеличение количества информации не всегда сопровождается сохранением её качества.

Анализ возраста, в котором сэйю озвучивают аниме[править]

Как и в любой другой профессии, у актёра озвучки есть возраст, когда он находится в «расцвете сил» и озвучивает множество аниме, а спустя какое-то время уходит на пенсию. Использование SPARQL и внешних инструментов для анализа данных, таких как язык программирования Python, может позволить оценить такой возраст на основе информации из Викиданных.

Чтобы получить исходные данные для исследования, необходимо выполнить три SPARQL-скрипта и экспортировать результаты их выполнения в формате .csv (формате представления табличных данных, в котором таблица хранится в виде последовательности строк текста. Эти строки содержат значения полей таблицы, разделённые запятыми).

Получить список всех зарегистрированных в Викиданных сэйю и их дат рождения можно двумя способами:

# Get list of all seiyu objects, their names and birth dates
SELECT ?seiyu ?seiyuLabel ?bDate WHERE {
  ?anime (wdt:P31/(wdt:P279*)) wd:Q1107;
    wdt:P725 ?seiyu.       # seiyu is anime voice actors
  ?seiyu wdt:P569 ?bDate.  #       has a birthday
  SERVICE wikibase:label {bd:serviceParam wikibase:language "ru,en,ja"}
}
GROUP BY ?seiyu ?seiyuLabel ?bDate

SPARQL-запрос, 2515 результатов (2021).

# Get list of all seiyu objects, their names and birth dates
SELECT ?seiyu (SAMPLE(?seiyu) AS ?seiyuLabel) ?bDate WHERE {
  ?anime (wdt:P31/(wdt:P279*)) wd:Q1107;
    wdt:P725 ?seiyu.       # seiyu is anime voice actors
  ?seiyu wdt:P569 ?bDate.  #       has a birthday 
  ?seiyu rdfs:label ?label.
}
GROUP BY ?seiyu ?bDate

SPARQL-запрос, 2515 результатов (2021).

Различия между скриптами заключаются в том, что:

  • метка (имя) сэйю в первом случае получается с помощью переменной ?seiyuLabel (в таком случае нужно указать команду SERVICE для установки языков, на котором будут возвращены имена), а во втором — с помощью конструкции rdfs:label;
  • в первом варианте скрипта необходимо указывать ?seiyuLabel как параметр GROUP BY, чтобы связать объекты сэйю и их метки.

Получение списка всех зарегистрированных в Викиданных аниме и дат их выхода:

# Get all anime objects, their names and release dates
SELECT ?anime ?animeLabel ?animePubDate ?animeSeriesStartDate WHERE {
  ?anime (wdt:P31/(wdt:P279*)) wd:Q1107.               # objects of anime and its subclasses
  OPTIONAL { ?anime wdt:P577 ?animePubDate. }          # anime may have a release date if it's a movie...
  OPTIONAL { ?anime wdt:P580 ?animeSeriesStartDate. }  # ...or start date if it's series; or have neither, it will be checked in Python
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ru,en,ja" }
}

SPARQL-запрос, 5264 результата (2021). Обратите внимание, что скрипт получает не только даты выхода полнометражных аниме (свойство P577), но и даты начала показа сериалов (свойство P580).

Получение ссылок между объектами сэйю и аниме, которые они озвучивали:

# List of links between seiyu and anime where they are involved in
SELECT DISTINCT ?item ?itemLabel ?link ?itemType
WHERE
{
  VALUES ?toggle { true false }
  ?anime  wdt:P31/wdt:P279* wd:Q1107; # instance of anime or its subclass
          wdt:P725 ?seiyu.            # list seiyu who acted in this anime
  
  BIND(IF(?toggle,?anime,?seiyu) AS ?item).                 # connection of "from anime to seiyu" type
  BIND(IF(?toggle,?animeLabel,?seiyuLabel) AS ?itemLabel).  # similar connection between labels
  BIND(IF(?toggle,?seiyu,?anime) AS ?link).                 # # connection of "from seiyu to anime" type
  BIND(IF(?toggle,?seiyu,"seiyu") AS ?itemType).            # service column to distinguish seiyu and anime items
                                                            # if the item describes a seiyu, its value is "seiyu",
                                                            # the link is kept otherwise
  SERVICE wikibase:label {bd:serviceParam wikibase:language "ru,en,ja"}
}

SPARQL-запрос, 27092 результата (2021).

Результат анализа удобно представить в виде гистограммы. Для её построения можно воспользоваться средствами таких библиотек для Python, как Pandas для обработки табличных данных и Matplotlib для непосредственно построения графиков. Код скрипта, создающего гистограмму, опубликован на сервисе GitHub.

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

Рис. 3: Гистограмма, которая отображает число аниме, озвученное сэйю разных возрастов (2021)

Отметим следующий забавный факт: в Викиданных нашлись случаи, когда сэйю родился позже, когда вышло аниме с его участием. Вероятно, это связано с отсутствием информации в Викиданных о втором сезоне/перезапуске аниме. Например, на 2021 год такая ситуация наблюдается для аниме Sazae-san и сэйю Нобунага Симадзаки.

Будущая работа[править]

  1. Вывести 10 аниме, выпущенных в текущем году.
  2. Вывести 5 аниме, в которых задействовано самое большое число сэйю-женщин.
  3. Построить пузырьковую диаграмму (BubbleChart) распределения аниме по жанрам (сколько аниме в каждом жанре), воспользовавшись свойством «подкласс» (P279).
  4. Отметить на карте места рождения сэйю.
  5. Построить гистограмму или пузырьковую диаграмму национальностей сэйю.
  6. Построить гистограмму количества вышедших аниме по годам или количества сэйю по годам рождения.
  7. Построить гистограммы, аналогичные рисунку 3, но с учётом пола сэйю (одну для мужчин, другую для женщин).

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

1 Перечислены такие аниме:
Рэйв Мастер (Shan T Lao Fu Zi)
Новый железный человек №28 (Tetsujin 28-gou)
Гренадёр (Grenadier)
Вторжение гигантов (Shingeki no Kyojin)
Соотнесите эти аниме с изображениями ниже.

1 (Рэйв Мастер),2 (Новый железный человек №28),3 (Гренадёр),4 (Вторжение гигантов)
Rave.jpg
Attack on Titan logo.png
Файл:若林公園(鉄人28号モニュメント) TETSUJIN28 - panoramio.jpg
Fruit de grenadier.jpg

2 Известны такие аниме:
Гуррен-Лаганн (Tengen Toppa Gurren Lagann)
Врата Штейна (Steins;Gate)
Хеллсинг (Hellsing)
Эльфийская Песнь (Elfen Lied)
Известны года создания (даты выхода) аниме: 2011, 2007, 2004, 2001.
Расположите данные аниме в порядке убывания даты их выхода (1 место - самое новое аниме, 4 место - самое старое).

1 место (2011),2 место (2007),3 место (2004),4 место (2001)
Гуррен-Лаганн
Врата Штейна
Хеллсинг
Эльфийская Песнь

3 О каком аниме идёт речь:
Краткое описание: "А что будет после смерти? Бесчисленные поколения людей задавались этим вопросом..."
Жанры: Драма, Экшен, Комедия, Школа
Сэйю (ж.): Кана Ханадзава
Дата публикации: 2005 год.
Прим.: Стоит указывать знаки препинания и пробелы, если таковые имеются.


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

Литература[править]

  • Andrew Krizhanovsky, Daria Boollieva Аниме. — 2017.

Ссылки[править]

  • Parenchenkov E. Anime (англ.). ProWD (2021). Проверено 24 сентября 2021.