Один из таких пакетов мы уже посмотрели — это пакет phonfieldwork. Но давайте начнем немножко с другого. Я просил вас скачать пакет vowels, давайте его запустим и посмотрим. Пакеты, vowels, вот. Этот пакет предназначен для работы с гласными, и в том числе рисования графиков для него. Из функций, которые полезно здесь упомянуть — это то, что он считает средние, медианы и прочее для каждого гласного, то есть, допустим, он берет и вычисляет какую-то статистику для какого-то гласного. Допустим, у нас есть три или, не знаю, пять носителей, от которых мы записали разные гласные, и вот мы после этого берем и начинаем сравнивать, что же у нас происходит. В результате если мы хотим нарисовать какое-то такое облако гласных, а посередине написать большое-большое А, которое обозначает какую-то, допустим, репрезентацию чего-то, то для этого нужно взять и сгруппировать по гласному и посчитать среднее внутри этой группы гласного, внутри каждого гласного. В целом это можно сделать кучей разных способов, но в целом здесь много функций, которые позволяют это делать. Соответственно, если вы видите, подсчет разных статистик, конвертация частот, например, из частоты в Барки. И кроме этого, здесь есть некоторая важная вещь, а именно разные методы нормализации. И здесь надо обсудить следующую вещь, что, допустим, представьте себе, что мы записываем какие-то разные гласные от разных носителей. Может так случиться, что одни носители говорят одним образом, какие-то другие носители говорят другим образом, и если мы все их наляпаем на один график, то получится такое большое болото. Дело в том, что форманты гласных все-таки достаточно сильно подвержены тому, как кто говорит. В результате если у нас дети будут говорить одним образом, женщины будут говорить другим образом, взрослые будут говорить третьим образом, и кажется, хорошо, давайте разделим женщин, мужчин и женщин. Будем делать для каждого отдельный график, все равно он будет не очень удачным, потому что мужчины тоже на самом деле по сравнению друг с другом могут говорить по-разному. И в результате чтобы все это учесть, нам хорошо бы использовать нормализацию, а именно, если мы хотим взять и попробовать учесть, что общего у языка вообще, то гласные имеет смысл нормализовать таким образом, чтобы можно было их использовать друг относительно друга, то есть, например, данные мужчины, женщины и так далее и детей. Для этого придуманы несколько методов нормализации. Я всячески вас отсылаю к соответствующей литературе, соответствующим функциям, которые вы можете увидеть здесь. Ohiovowels — это такой просто датасет, в котором доступна некоторая информация, видимо, вот смотрите, 447 строчек, 9 колонок. Видимо, Эрик Томас не написал нам, сколько тут носителей, но мы можем, на самом деле, что-нибудь выяснить в источнике, если туда взглянем. В целом мы можем на самом деле все это сделать самостоятельно. Мы можем взять, воспользоваться датасетом, который создал кто-нибудь другой, и дальше визуализировать его. Смотрите, мы это уже делали, ggplot, aesthetic, извините, ggplot, data = = ohiovowels, aesthetic. Упс, а какие у нас переменные-то в нашей в нашем ohiovowels. Мы можем это сделать вот так вот. Видно, что это старый датафрейм, потому что, видите, он печатается вот так на всю катушку. Новый тип печатается таким образом, чтобы можно было обозреть, что там происходит. Так смотреть не очень удобно, поэтому я предлагаю вам другой метод: можно взять, пойти вот сюда и ткнуть. И тогда перед нами будет открыта вот такая новая вкладка, в которой можно будет посмотреть, что же у нас здесь происходит. Как мы видим, здесь это устроено следующим образом. У нас есть спикер, и, видимо, их всего не очень много, судя по тому, что... То есть у нас есть какой-то OHDMTV_M и еще какой-то, дальше vowel.frame, в английский традиции есть такая традиция записывать гласные при помощи соответствующих слов. И, видимо, это контекст. То есть, например, этот гласный EE записан в слове eating. Давайте попробуем еще какой-нибудь гласный. А BET — это на самом деле слово dead. И тому подобное. Дальше у нас есть какая-то информация про форманты гласных, и мы можем немножко с этим поиграть. В целом здесь есть еще дополнительные столбцы, но, возможно, они сделаны для того, чтобы визуализировать дифтонги или что-нибудь такое. Давайте возьмем и попробуем визуализировать. По оси X нам нужно f2, по оси, только я не помню вот, с какой буквы они там. Они с большой буквы используют, значит, нам тоже нужно. И мы можем на самом деле более-менее использовать все, что мы делали вот здесь, то есть скопировать этот скрипт и вставить его сюда. Все, что нам нужно поменять — это только датасет, data — это ohiovowels. И дальше здесь нужно заменить на большие буквы. Раскрашивать давайте по переменной speaker, label давайте будем брать из vowel.frame. [ЗВУК] И дальше на самом деле все, более-менее что у нас было. Если мы такое сделаем, то у нас получится вот что-то такое. И мы видим, что здесь у нас очень много разных гласных. Это, конечно, не самый удачный способ представлять гласные, я предпочитаю такой способ, который, который берет и использует все-таки один гласный, например, в МФА, а не английское слово. Ну такова традиция у них. И, собственно говоря, дальше мы можем видеть такой датасет, который находится в этом пакете. Дальше все примеры в этом датасете приводятся на основании этого пакета. Давайте посмотрим функцию vowelplot, vowelplot здесь проиллюстрирована визуализацией данного, данного пакета. Например, мы берем и используем vowelplot по умолчанию, и он нарисует какой-то график. График, который он нарисует, будет выглядеть как-то вот так. Они, видимо, еще как-то закодировали, что вот это — дифтонг, поэтому у них BAIT становится E. И вот здесь разные гласные раскрашены, и есть такая куча-куча разных гласных. И, видимо, в виде точки и в виде квадратика обозначены разные носители. Здесь кружочек, а здесь квадратик. То есть квадратик сказал вот этот носитель, а кружочек сказал вот этот. Хорошо. Давайте вернемся в Help и посмотрим, что еще есть в нашем, в нашем датасете. Например, у нас есть разные, например, вот здесь предлагается сделать график, когда у нас совмещается несколько, несколько графиков. График по отдельности выглядит примерно так. То есть здесь у нас обозначены разные гласные, и это некоторый общий график для всех носителей. А вот здесь такой же график тоже, когда у нас применена нормализация. И то, что предлагается в туториале, на самом деле сделать как-то вот так. Он считает, ему слишком маленькие границы. Давайте тогда увеличим ему пространство, не хватает пространства, чтобы нарисовать. [ЗВУК] Давайте сделаем так, и вот он нарисовал некоторый график, который выглядит вот так. На данном графике изображено F2, F1 и, к сожалению, не самым удачным образом закодировано, какой тип гласного и что же они здесь имеют в виду. Но в целом идея заключается в том, что мы можем нарисовать такие графики, а что самое главное, мы можем посчитать среднее, то есть это сделано на основании каких-то всех гласных, и с ними, и дальше на основании тех же самых гласных, но с нормализацией Лобанова. Чтобы нарисовать новый график, нам придется немножко изменить этот код, то есть здесь он предназначен для того, чтобы рисовать два рисунка вместе, а сейчас я его поменяю. В дате мы можем посмотреть, что у нас происходит дальше. Дальше, например, есть предложение нарисовать график вот с такой нормализацией. Давайте посмотрим. И [ЗВУК] давайте попробуем поэтапно. Здесь сначала мы нарисовали весь график, давайте теперь вернемся вот сюда и посмотрим на код внимательнее. То есть здесь эта штука позволяет уже внутри рисования графиков фильтровать. В результате получается следующее. Title нам не очень важен, мы его можем просто убрать. И в результате получается «Нарисуй мне, пожалуйста, график гласных, нормализованных при помощи вот этого алгоритма, выбери одного спикера и раскрась по этому спикеру. Ну и label тоже подбери по гласным». Если мы посмотрим на график, который получается, выглядит это примерно вот так вот. И теперь есть дополнительная функция «Добавь еще обобщенный график». В результате на этом обобщенном графике мы видим уже не конкретные реализации, а обобщение, которое произошло на основании данных, которых мы наблюдаем. То есть видите, что у нас, например, BAIT, или лучше BEET, оно крутится вокруг этого значения. И вот это BEET черное является обобщением того, что мы наблюдали. BEER, BOOT, при этом это, видимо, BOOT, судя по формантам, а не BUT. POOL уже в U. И все вот это можно анализировать, и черное в данном случае является обобщением, а красное — это некоторые реальные данные. То есть мы отошли от гласных [НЕРАЗБОРЧИВО]. Так что, как видно, пакет vowels позволяет нам рисовать такие графики гласных, не очень красивые, но в целом если мы будем использовать непосредственно сами функции, например, norm.что-нибудь, то тогда он нормализует, и если правильно научиться пользоваться этими функциями, то тогда он будет сам изменять значения, то есть ohiovowels устроены таким образом, давайте посмотрим, вот так устроены ohiovowels, а если мы хотим посмотреть на то, как устроены norm, то тогда в таком случае я наберу View, и видите, что он поменял значения, которые, и здесь какие-то другие значения, соответственно, он как-то их транспонировал, нормализовал и тому подобное. Так что здесь появились новые значения, которые можно потом опять же использовать для визуализации, но уже теми средствами, которые нам удобны. То есть нам необязательно использовать те средства, которые здесь встроены, а мы можем взять тот же самый ggplot и спокойно взять и эту колонку нарисовать и эту колонку нарисовать, использовать этот vowel, эту колонку vowel для того, чтобы с ней работать. Так что хоть какие-то вещи нам и предлагают делать по умолчанию, но мы не обязаны делать это так, как нам сказали. Чтобы это было воспроизводимо, я, пожалуй, просто этот кусочек кода добавлю здесь, а это оставлю здесь. Давайте посмотрим на другие пакеты. Мы уже немножко посмотрели на пакет phonfieldwork, phonTools. Не в Help нужно искать, а в списке пакетов, phonTools. И мы уже увидели, что здесь много просто наборов данных, то есть Hebrew Vowel Data, Spanish Vowel Data, Swedish Vowel Data и тому подобное. Но также есть всякие штуки, которые позволяют тоже работать с разными гласными. Например, здесь тоже есть функция, которая рисует гласные, которая следит за формантами гласных, но также есть и штуки, которые позволяют, например, визуализировать звуковой файл. Например, где-то здесь, вот тоже один, еще один vplot. Все любят визуализировать гласные, я смотрю. Давайте найдем его. Э-э-э... Вот, например, Sound object, давайте попробуем так сделать. Собственно говоря, если я скажу library(phonTools) и загружу эту библиотеку, то после этого я могу взять и загрузить объект data. Вообще-то, sound, он немножко другого типа. Если вы здесь видите, все датафреймы, они, они здесь хранятся как тип dataframe или вектор, а это особый тип, который называется List. Это список, который, если мы в него ткнем, выглядит примерно таким образом, что у него есть какие-то характеристики, а также значения, которые записаны как-то вот так, в виде таблицы, которая позволяет ее потом восстановить. Получившийся объект sound мы можем на самом деле взять и нарисовать. И вот перед нами предстала осциллограмма звука, который мы видим. Возможно, мы даже можем сказать play(sound), если он справится с моим компьютером. Но, видимо, он не справляется с моим компьютером, и он требует какой-то VLC player. В целом он у меня стоит, но почему-то он его не видит, неважно. Может быть, на вашем компьютере это будет работать. Чаще всего все-таки прослушать звуки в R — это не самая важная задача. Что важно, что на этом месте мы также можем сказать spectrogram(sound), и вот перед нами есть уже какая-то спектрограмма, которую мы можем посмотреть и понять что-то про нее. В целом не то чтобы это какой-то богатый инструмент, не знаю, можно нарисовать то же самое, есть какие-то параметры, в которых можно покопаться, colors = "black", нет, colors, видимо, надо сказать FALSE. В таком виде мы получим примерно то же самое, но не цветное, а черно-белое. И дальше можем как-то работать с этим. В целом можно попробовать соединить разные графики, например, осциллограмму и спектрограмму в один, и как-то анализировать их. Но это, наверное, не входит сейчас в нашу задачу, и мы переходим к последнему пакету, который мы сегодня обсуждаем, а именно пакет phonfieldwork. [ЗВУК]