Позднее Ctrl + ↑

Тексты песен: статистика и выводы

Время чтения текста – 19 минут

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

«Отличная мысль!» — подумали мы и приступили к сбору данных.

А что в плейлисте?

Наш анализ текстов проводился на основе набора данных, взятых с txtsong.ru, который включал в себя названия исполнителей, песен, альбомов, год выпуска, жанр, тексты и перевод песен (если они были написаны на иностранном языке).

C сайта эти данные собирались с помощью HTTP-запросов и парсинга HTML-кода страниц с использованием библиотеки BeautifulSoup. Весь набор мы сначала загрузили в Google Sheets, затем, с помощью библиотеки gspread, метода get, он был считан в DataFrame.

В результате исходный датасет в DataFrame состоял из 7 колонок: «Исполнитель», «Название песни», «Название альбома», «Год выпуска», «Жанр музыки», «Текст песни» и «Перевод текста песни», и 115 318 строк, каждая из которых — одна песня. В анализируемом наборе данных было представлено 25 265 уникальных российских и иностранных исполнителей, 80 473 уникальных названий песен, 102 жанра и 11 150 альбомов за последние 68 лет.

Самыми многочисленными по количеству песен оказались такие жанры, как «русский рэп» — 34 334 песни, «русская поп-музыка» — 21 980 песен, «русский рок» — 10 111 песен, «иностранный рэп и хип-хоп» — 8 591 песня и «русская эстрада» — 7 914.

Давайте миксовать!

Далее мы обработали тексты и переводы всех песен с помощью регулярных выражений и методов библиотеки Pandas: были удалены ненужные символы, знаки препинания, стоп-слова, лишние пробелы. Также мы перевели буквы в нижний регистр.

Анализ текстов песен мы провели по нескольким направлениям:

• по жанрам;
• по годам;
• по лексическому содержанию песен;
• по показателю repetitiveness.

Для каждой песни мы рассчитали показатель repetitiveness тремя способами. Первый заключался в том, что для текста каждой песни мы сформировали два списка: из уникальных строк и из всех строк текста. Затем мы рассчитали длины списков, и repetitiveness была найдена по следующей формуле (1):

Второй способ расчета — это подобие алгоритма Лемпеля—Зива. Он заключался в вычислении размера текста с уникальными строками и всего текста песни в байтах. Repetitiveness в данном случае рассчитывалась по следующей формуле (2):

Третий способ расчета repetitiveness заключался в составлении двух списков — списка с уникальными словами песни и списка со всеми словами песни. В этом случае, repetitiveness рассчитывалась по следующей формуле (3):

Анализ песен по жанрам

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

Распределение числа уникальных слов в песнях по жанрам показало, что на общем фоне заметно выбиваются «рэп и хип-хоп», «русский рэп», «иностранный рэп и хип-хоп» и «регги». Для данных жанров размах количества уникальных слов в песнях более широкий, что может указывать на разнообразность песен.

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

Любопытно, что среди русского рэпа песен с отсутствием матерных слов больше (51%), чем среди русской поп-музыки (49%), хотя в песнях русского рэпа матерные слова используются в большем количестве.

Далее: анализ использования имен собственных в песнях различных жанров показал следующее распределение наиболее популярных имен собственных в различных жанрах музыки:

Мы обнаружили, что в значительной части текстов песен, относящихся к жанру «рок», используется имя российского комика Александра Долгополова. Возможно, такой шквал популярности связан с его резкими высказываниями по поводу власти и отъездом за границу. Также, в целом, достаточно популярно использование имени «Саша» в песнях данного жанра.

Анализ по годам

Мы попытались выявить тенденции в текстах песен со всего мира на протяжении 2000—2022 на основании наиболее часто встречаемых слов в текстах, частоты употребляемости матерных слов, кластерного и сентимент-анализа текстов. Также мы посчитали, какие года были более продуктивными в музыкальной индустрии с точки зрения количества релизов песен.

При анализе наиболее часто встречающихся слов в русской музыке мы выявили, что по мере ухода от 2013 и приближения к 2022 году тексты песен из категории «русский рэп» становятся более мягкими, все чаще начинают звучать слова, касающиеся любви. В текстах песен русского рока сквозь все года за исследуемый период прослеживается тема небес, молитвы и веры во что-то неземное. Тексты песен 2020 года заметно меняют настрой на более позитивный, по сравнению с более ранним периодом.

Стоит также отметить, что с 2000 по 2022 гг. процент русских и иностранных песен, в которых используются матерные слова, постепенно растет с небольшими перепадами в сторону его уменьшения. Резкий скачок вниз наблюдается в 2003 и 2021 гг. Своего максимума данный показатель достиг в 2022 году и составил 26%:

Аналогично, сентимент-анализ песен по годам показал, что процент русских и иностранных песен с негативной эмоциональной окраской в 2019-2020 и 2022 гг. более высокий по сравнению со значениями данного показателя за остальные годы. Это может расцениваться как попытка авторов передать в песнях накал страстей, нарастающий в разных странах или же в отдельно взятом «лирическом герое».

В целом, такая заметная эмоциональная эмансипация в музыкальном творчестве и обширное прибегание к матерной лексике за последнее десятилетие могли иметь несколько причин, среди которых мы можем предположить:
• большую свободу, дозволенность в выражении негативных эмоций а также личного опыта в текстах песен нежели ранее (и отсутствие необходимости вуалировать определенные темы в текстах во благо несовершеннолетних слушателей);
• открытый социальный протест как реакцию на реалии жизни в современном мире;
• начало пандемии и карантина (2019-2020 гг.);
• обострение политической ситуации в России и мире (2022 г.).

Также мы можем отметить, что наибольшее количество песен было выпущено в последние 4 года, а рекордное количество песен увидело свет в 2021 году. В 2022 году количество выпускаемых песен резко сократилось по сравнению с 2021 годом. Хотя 2022 год еще не подошел к концу, мы можем предположить, что к концу года, показатель 2021 года достигнут уже не будет.

Анализ по лексическому содержанию песен

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

При выявлении наиболее схожих по текстам пар песен мы получили следующий результат: наиболее похожие песни были обнаружены в русской поп-музыке, поскольку их названия «кричат» о тематике любви — очень часто используются такие слова, как «любовь» и «сердце». Вряд ли эти данные можно было бы отнести к рэпу, инди, року или любому другому жанру музыки. В топ 5 пар схожих песен в категории «русская поп-музыка» вошли такие пары песен, как «Налетели вдруг дожди» и «Али ты», «Где же ты, где» и «Только ты», «Я тебя не люблю» и «Зелёный свет», «Смотрю на тебя» и «Не зарекайся», «Шатер из звезд» и «Ритмы людей». Об этом может свидетельствовать приведенная ниже тепловая карта (heatmap).

Если говорить наоборот о разнообразии лексического состава текстов песен, среди исполнителей, выпустивших более 150 альбомов, первое место по наибольшему медианному числу уникальных слов в песнях занимает Александр Розенбаум. Примерно на том же уровне по данному показателю находятся Владимир Высоцкий и ДДТ.

Остальные исполнители отстают по данному показателю. Наименьшее медианное число уникальных слов в песнях имеет Ленинград — всего 55 слов. Кстати, наибольший размах числа уникальных слов наблюдается в песнях Владимира Высоцкого, наименьший — у Ирины Алегровой, Ани Лорак и Стаса Михайлова:

В рамках сентимент-анализа песен мы установили, что в исследуемом наборе данных преобладают песни с негативной коннотацией (их примерно половина):

Также стоит отметить, что песни с позитивной коннотацией в основном несут в себе тематику светлой и доброй любви. Кстати, не только к противоположному полу, но и к родителям! Такие песни характеризуются почти полным отсутствием матерных слов и ругательств, использованием в достаточно малом количестве слов с негативной окраской и, наоборот, большим количеством позитивных и добрых слов, например «люблю», «бурно», «прикосновения», «счастье», «мечты», «целуй», «мама», «любимые», «вселенная» и пр.

Матерные слова в текстах таких песен, как правило, обыгрываются с позитивной окраской, например, в таком словосочетании, как «восхитительно ох*енная». Кроме того, названия таких песен несут в себе по большей части только позитивную лексику, например «Обняла. Люблю. Целую», «Восхитительно» или «Лучшая ночь».

А теперь разбавим лирику: при анализе по отдельным исполнителям, наиболее матерными песнями оказались «Fuck You» исполнителя Lil Butterfly («иностранный рэп и хип-хоп»), текст которой включает 132 матерных слова и песня Ноггано «Застрахуй» из категории «руский рэп», которая также включает в себя более 100 матерных слов.

Затем, на примере русского рэпа мы определили, для каких отдельных исполнителей и в каких конкретных альбомах наблюдается частое использование матерных слов: наибольшее число матерных слов использует Скриптонит и 104, наименьшее — 10AGE.

Отметим, что панк музыканты, даже больше, чем русские рэпперы и рокеры вместе взятые, употребляют матерные слова в своих песнях, особенно группы Мятная Фанта, кис-кис, Казенный Унитаз и Порнофильмы.

Анализ показателя Repetitiveness

Repetitiveness — «повторяемость»

Изучив данные, мы пришли к выводу, что среднее значение показателя repetitiveness в последние 3 года возросло на свой рекордный уровень и достигло 34%. Также в 2011 году наблюдалось резкое падение данного показателя до 25%. Кроме того, интересно заметить, что за период с 2015 по 2020 гг. наблюдался равномерный рост среднего значения repetitiveness на 1 п.п. в год. С 2000 по 2011 гг. среднее значение данного показателя было весьма нестабильно и колебалось в интервале от 25% до 33%.

Медианное значение repetitiveness, по сравнению со средним, в последние 2 года различается. Пик был достигнут в 2021 году, а в 2022 году значение данного показателя снизилось на 1 п.п. Так же, как и для среднего значения, медианное значение repetitiveness в 2011 году достигает своего минимума, но более низкого, нежели для среднего, и равного 23%.

Равномерный рост, который был справедлив для среднего значения repetitiveness с 2015 по 2020 гг., для медианного значения отсутствует. Он здесь наблюдается только с 2018 по 2021 гг.:

При анализе среднего значения repetitiveness по жанрам мы заметили, что для всех представленных жанров музыки наблюдается тенденция к росту repetitiveness.

Наибольшее среднее значение показателя было выявлено среди песен поп-музыки в 2002 году, оно равнялось 50%, но затем в последующие году снизилось и находилось преимущественно в интервале от 30% до 40%. Среднее значение же в этом жанре отличается своей стабильностью в течение 22 лет и находится около 40%.

Еще один примечательный факт: у песен, в текстах которых отсутствуют матерные слова, среднее значение repetitiveness всегда выше (по крайней мере с 2000 по 2022 гг.):

И на десерт: любопытно, что среди всех прочих исполнителей особое место занимает феномен Григория Лепса. В его дискографии присутствует как альбом с достаточно высоким средним значением repetitiveness, достигающим почти 50%, так и альбом с нулевым значением этого показателя:

Альтернатива голубому и розовому: какие цвета использовать для визуализации гендерных данных?

Время чтения текста – 22 минуты

Перевод статьи “An Alternative to Pink & Blue: Colors for Gender Data”

В своем блоге Лиза Шарлотта Мут решила взяться за вопрос классической комбинации «голубой + розовый» для отображения данных о мужчинах и женщинах. Проведя исследование альтернативных цветовых дуэтов, она делится новаторскими решениями ведущих новостных изданий. Готовы открыть для себя новые способы цветового обозначения гендерных данных? Тогда поехали!

Чжон Ми Юн, проект «Голубое и Розовое»

Несколько недель назад, я написала статью в своем блоге о том, что учесть при выборе цветов для визуализации данных. В ней я отметила, что необходимо избегать стереотипной пары «голубой для мужчин» и «розовый для женщин» при визуализации гендерно-значимых данных. Джон Берн-Мердок из Financial Times твитнул в ответ, как разные новостные редакции используют определенные цвета в своих репортажах о неравенстве в оплате труда мужчин и женщин в Великобритании.

Эта статья идет в продолжение того твита. Я начну сразу же с примеров новостной графики, где используются розовый и голубой, а также добавлю примеры, где обыграны другие цвета, чтобы объяснить, почему классическая комбинация «розовый + голубой» — не самый лучший выбор. После этого, мы рассмотрим два варианта как уйти от этого цветового сочетания при визуализации гендерно-значимых данных. А начнем с плохим новостей:

Розовый + голубой все еще с нами

Розово-голубая эпоха еще не канула в Лету. Как ни странно, достаточно крупные проекты использовали эти цвета в последние четыре года, чтобы наглядно рассказать о гендерно-ориентированной статистике, например, The New York Times, Bloomberg и The Wall Street Journal. Два проекта The Pudding, увидевшие свет в 2017, которые исследовали тему гендера в кино, использовали красный и голубой, а третий проект, тоже из 2017, «Гендерный анализ персонажей комиксов», использовал темно-синий для мужчин и золотой для женщин.

Слева — оттенки для обозначения мужчин, справа — женщин.

The Pudding, 2017: «Диалог о кино»

The Pudding, 2017: «Она хихикает, он на коне»

Bloomberg, 2016: «Наглядно: кто выбирает себе в пару директоров, врачей, поваров и дворников»

The New York Times, 2015: «Как меняется характер работ среднего класса»

The New York Times, 2017: «Слова, которые используют мужчины и женщины, когда пишут о любви»

The Wall Street Journal, 2016: «Неравенство в оплате труда»

DailyMail, 2018

ZEIT, 2016

ZEIT, 2018

Почему? Итак, существует один аргумент в пользу использования розового и голубого: читатели смогут быстрее разобраться в данных, представленных на графике, если используются эти стереотипные цвета. Нет даже нужды сначала объяснять значения цветов. Алан Смит из Financial Times написал об этом в колонке «The Chart Doctor»: после того, как он создал таблицу с детскими именами, используя розовый и голубой,

«Я привел аргумент в пользу такого решения, так как устойчивая культурная традиция в использовании этих цветов снимала с меня обязанность добавлять отдельную легенду на таблицу. Это, в свою очередь, делало мою иллюстрацию “чище”, к чему все дизайнеры и стремятся».
Алан Смит

1. Неудивительно, что именно женщин заботит эта проблема. Энди Керк из visualisingdata.com провел опрос среди 126 дизайнеров по визуализации данных (76 мужчин, 50 женщин) в 2015 году, на тему того, какие цвета они бы назначили для обозначения каждого пола. Среди мужчин, 41% использовали бы розовый и голубой. Среди женщин, такую комбинацию выбрали лишь 14%.

В чем же проблема с розовым и голубым? В западной культуре, эти цвета идут в комплекте с целым чемоданом гендерных стереотипов. Розовый рисует в воображении слабых, стеснительных девочек, которые играют с куклами и не заслуживают тех же привилегий, что и мальчики. Голубой соотносится с мальчиками, которым нужно быть сильными и грубоватыми. Когда мы создаем график с розовым и голубым, мы поддерживаем гендерные стереотипы. [1] Но когда мы изображаем неравенство полов (в оплате труда, например), это именно того, чего бы нам хотелось избежать.

Многие новостные редакции воздерживаются от использования розового и голубого

А теперь к хорошим новостям: в то время как некоторые продолжают использовать эту комбинацию, розовый + голубой перестали быть золотым стандартом, по крайней мере в крупных новостных компаниях. Когда в этом году в Великобритании вышла статистика с данными о неравенстве в оплате труда мужчин и женщин, дизайнеры визуализации использовали очень разнообразную цветовую палитру. До этого я предполагала, что они будут использовать голубой для мужчин и какой-то теплый цвет для женщин. Но меня ждал сюрприз: The Economist, Guardian, The Telegraph, Washington Post и другие использовали более холодный цвет для женщин, чем для мужчин. Вау! Более сильное отступление от шаблона и представить нельзя. Вот несколько примеров (не только из статистики этого года о неравенстве в оплате труда мужчин и женщин).

И снова, слева — оттенки для обозначения мужчин, справа — женщин.

Economist, 2018

Morgenpost, 2017

Guardian, 2018

Financial Times, 2018

The Telegraph, 2018

Information Is Beautiful, 2014

Washington Post, 2017

Bloomberg, 2018

BBC, 2017

BBC, 2018

В новостных редакциях нет единого подхода

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

По-видимому, дизайнеры визуализации не видят в этом необходимости. Если мы посмотрим на цвета, которые дизайнеры используют в отдельном новостном издании, мы не увидим постоянства. Для каждой отдельной статьи, решение об используемых цветах для гендерно-значимых данных принимается индивидуально. Внизу вы можете увидеть примеры цветов, которые использует Bloomberg, но я могла бы взять любое другое издание — The New York Times, Guardian, ZEIT Online и так далее.

Левая колонка — цвета для обозначения мужчин, правая — женщин.

Bloomberg, 2018

Bloomberg, 2018

Bloomberg, 2018

Bloomberg, 2018

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

Cлева — цвета, которые использовались для мужчин, справа — для женщин.

Quartz, 2015

Quartz, 2015

Quartz, 2015

Quartz, 2016

Quartz, 2016

Quartz, 2017

Quartz, 2017

Quartz, 2017

Quartz, 2018

Quartz, 2018

Мне такая практика кажется опасной. Графики, которые меняют роли классического значения цветов, могут затруднять восприятие информации. Когда читатели видят розовый и голубой в графиках о гендерных данных, они почти наверняка не станут консультироваться с легендой.

Использование розового для мужчин и голубого для женщин в графиках о неравенстве полов может иметь негативные последствия: вместо того, чтобы поставить стереотипы под сомнение, читатель может ошибочно подумать, «О, а женщины-то себя здесь лучше ощущают, чем мужчины». Это в частности создает проблемы, когда читатели привыкли к тому, что то же самое издание использует комбинацию розового и голубого в «правильной», классической интерпретации.

Как выбирать цвета: пример The Telegraph

Следуя зову любопытства о том, как The Telegraph решили использовать сиреневый для женщин и зеленый для мужчин, я спросила Фрейзера Лайнесса, директора графического репортажа в The Telegraph. Его ответ меня впечатлил:

Такой выбор цвета был вдохновлен кампанией «Votes for Women», которая была частью движения суфражисток в Великобритании в начале XX века. В сердце этого движения стояли «Сильвия Панкхерст и Эммелина Петик-Лоуренс. А цвета, в сущности, были выбраны ими самими (символизируя: сиреневый — свободу и честь, белый — чистоту, зеленый — надежду)».

Фрейзер и его команда ввели в использование эти цвета в свои графики о неравенстве полов, тонко, но при этом недвусмысленно, намекая о необходимости равенства.

В последних графиках (например, здесь в платной версии или в этой статье «Рожденные равными. Неравные по жизни»), женщины представлены сиреневым, а мужчины — зеленым. Но как было принято такое решение?

«Когда мы думали над тем, каким цветом обозначить каждый пол, это была скорее попытка дать фору женщинам в этой гендерной эстафете. На контрасте с белым, сиреневый выделяется гораздо ярче и привлекает больше внимания по сравнению с зеленым. Не значительно больше, но достаточно, чтобы склонить чашу весов. Во многих графиках, мужчины часто превышают по количеству женщин, поэтому нам хотелось иметь простой способ вернуть их в центр внимания».
Фрейзер Лайнесс

Можно легко заметить подобный эффект в графиках, похожий на этот:

При грамотной подготовке проект принесет плоды. Фрейзер смог не только отобрать два красивых цвета, но и обосновать такой выбор весомой причиной. «Имея в качестве отсылки движение суфражисток, мне было проще принять окончательное решение», — сказал он мне.

Жаловались ли его коллеги, что более привычные для глаза розовый и голубой не были использованы в проекте? Видимо, нет:

«В целом, никто не возражал против идеи о том, что эти цвета не будут так же легко идентифицироваться, как и комбинация розовый + голубой. Скорее наоборот, им казалось, что привычная цветовая пара может навредить тому посланию, которое мы надеялись передать».
Фрейзер Лайнесс

Новая жизнь розового и голубого

Попытка уйти от розового и голубого в гендерно-ориентированных данных — это задача с двумя фронтами. С одной стороны, данные о мужчинах и женщинах необходимо отображать с помощью других цветов. С другой стороны, комбинация розовый + голубой также нуждается в переосмыслении. И я рада поделиться с вами примерами того, как визуализация данных меняется в этом направлении. Первые три примера выиграли награды Kantar Information Is Beautiful Awards 2017, а последний из них — это работа Джона Берн-Мердока, которому награда Information Is Beautiful Award в целом-то и не нужна. Все примеры переосмысляют розовый и голубой. И ни один не отображает гендерно-значимые данные:

«Включен & выключен» Джона Нельсона

«Пути науки» Кима Албрехт

«Неравенство туристической визы» Кристиана Лэссера

«Регионы Англии наиболее уязвимые для будущего экономического давления» Джона Берн-Мердока

Мне приятно видеть, что многие новостные издания отказываются от розового и голубого. Спасибо каждому, кто пересматривает свои цвета перед тем, как опубликовать что-либо. Спасибо каждому, кто экспериментирует с цветами для гендерно-значимых данных, даже если это по началу кажется плохой идеей. Вы заслуживаете похвалы. Также спасибо Джону Берн-Мердоку за вдохновение и Фрейзеру Лайнессу за ответы на мои вопросы о цветах, которые использует The Telegraph.

 Нет комментариев    523   2022  

Анализируем речь с помощью Python: Сколько раз в минуту матерятся на интервью YouTube-канала «вДудь»?

Время чтения текста – 19 минут

Выход практически каждого ролика на канале «вДудь» считается событием, а некоторые из этих релизов даже сопровождаются скандалами из-за неосторожных высказываний его гостей.
Сегодня при помощи статистических подходов и алгоритмов ML мы будем анализировать прямую речь. В качестве данных используем интервью, которые журналист Юрий Дудь (признан иностранным агентом на территории РФ) берет для своего YouTube-канала. Посмотрим с помощью Python, о чем таком интересном говорили в интервью на канале «вДудь».

Сбор данных

C помощью YouTube API мы получили список всех видео с канала Юрия Дудя, а также их метаинформацию. О том, как это сделать, вы можете узнать, например, из статьи нашего блога.
Если вы уже слышали знаменитое “Юрий будет дуть, дуть будет Юрий”, то наверняка знаете, что на этом канале есть документальные фильмы, а также интервью, в которых участвуют сразу несколько гостей. Нас заинтересовали только те выпуски, в которых преимущественно говорит только один гость. Поэтому нам пришлось провести фильтрацию всех видео вручную.
Для дальнейшего анализа нам необходимо было получить длительности роликов. Это мы сделали с помощью GET-запросов к YouTube API. Результаты приходили в специфическом формате (для примера: “PT1H49M35S”), поэтому их нам пришлось распарсить и перевести в секунды.
Итак, мы получили датафрейм, состоящий из 122 записей:

На основе метаинформации по лайкам, комментариям и просмотрам мы построили следующий Bubble Chart:

Так как наша цель — проанализировать речь в интервью, нам необходимо было получить текстовые составляющие роликов. В этом нам помог API-интерфейс youtube_transcript_api, который скачивает субтитры из видео на YouTube. Для каких-то роликов субтитры были прописаны вручную, но для большинства они были сгенерированы автоматически. К сожалению, для 10 видео субтитров не оказалось: беседы с L’one, Шнуром, Ресторатором, Амираном, Ильичом, Ильей Найшуллером, Соболевым, Иваном Дорном, Навальным, Noize MC. Причину их отсутствия мы, к сожалению, понять не смогли.

А гости кто?

Спектр рода деятельности гостей канала «вДудь» достаточно обширен, поэтому было решено пополнить исходные данные информацией о том, чем же в основном занимается приглашенный участник каждого интервью. К сожалению, ролики не сопровождаются четкими метками профессиональной принадлежности гостя, поэтому мы прописали эту информацию сами. На момент выгрузки данных последним видео на канале был разговор с комиком Дмитрием Романовым.
Если с идентификацией профессии каждого гостя мы не ошиблись, то вот такое распределение в итоге получается:

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

Обработка текста

Анализ текстовой информации сложен в той степени, в какой сложен язык, на котором написан текст. Подробно о подготовке текста к анализу мы рассказывали в материале «Python и тексты нового альбома Земфиры». Тут была проведена идентичная работа.
Как и раньше, для решения аналитической задачи мы решили использовать такой подход как лемматизация, т. е. приведение слова к его словарной форме. Проведя лемматизацию текстовых данных по правилам русского языка, мы получим существительные в именительном падеже единственного числа (кошками — кошка), прилагательные в именительном падеже мужского рода (пушистая — пушистый), а глаголы в инфинитиве (бежит — бежать). В этом проекте мы опять воспользовались библиотекой Pymorphy, представляющую собой морфологический анализатор.
Помимо приведения к словарной форме нам потребовалось убрать из текстов часто встречающиеся слова, которые не несут ценности для анализа. Это было необходимо, потому что так называемые стоп-слова могут повлиять на работу используемой модели машинного обучения. Список таких слов мы взяли из пакета ntlk.corpus, а после расширили его, изучив тексты интервью. Конечно, мы также убрали все знаки пунктуации.

Анализ словарного запаса

После обработки текста мы посчитали для каждого интервью количество всех слов, а также абсолютное и относительное количество уникальных слов. Конечно, полученные значения неидеальны, так как, во-первых, для большинства интервью были получены автоматически сгенерированные субтитры, которые являются неточными, а во-вторых, тексты были очищены от лишней информации.
Сперва мы решили наглядно представить основной массив лексики, которая звучит в интервью. После группировки интервью по роду деятельности гостя нам удалось это сделать и в этом нам помогла библиотека wordcloud. У нас получились такие облака слов:

Лейтмотивом всех интервью Юрия являются обсуждение России (политики, социальной жизни и других особенностей), уровня заработка гостей, а также непосредственно профессиональной деятельности гостя (это особенно заметно у представителей индустрии кинопроизводства).
Далее мы решили построить боксплот для количества слов для каждого рода деятельности (профессии, которые были представлены единственным гостем, мы не стали учитывать):

Наиболее разговорчивыми гостями оказались блогеры. По медиане, они наговорили больше всего слов. Чуть поодаль от них журналисты и комики, а вот самыми немногословными оказались рэперы.

Что касается количества уникальных слов, то тут ситуация аналогичная. И рэперы опять в аутсайдерах…

Если говорить об отношении уникальных слов к общему количеству, то тут можно увидеть совершенно иную картину. Теперь впереди оказываются, рэперы, музыканты и бизнесмены. Предыдущие же лидеры, наоборот, становятся самыми последними.
Конечно, стоит отметить, что такие сравнения могут быть несправедливыми, так как длительность интервью у каждого гостя Дудя разная, а потому кто-то просто мог успеть наговорить больше слов, чем остальные. Наглядно в этом можно убедиться, взглянув на распределение длительности интервью по роду деятельности (для построения использовался тот же пул гостей, что и для боксплотов выше):

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

Первое место по упоминаниям очевидно занимает Россия. Что касается Запада, то про США гости говорили в 2,5 раза меньше. Что касается лидера РФ, то про него речь заходила достаточно часто. Его оппонент, Алексей Навальный, в этой словесной “баталии” потерпел поражение. Интересно, что политики далеко не в топе по упоминаниям Путина. Впереди оказался экономист Сергей Гуриев, после него ведущий Александр Гордон, а тройку замкнули журналисты.
Глагол “любить” чаще использовали люди, имеющие отношение к искусству, творчеству и гуманитарным наукам — кинокритик Антон Долин, мультипликатор Олег Куваев, историк Тамара Эйдельман, актеры, рэперы, художник Федор Павлов-Андреевич, комики, музыканты, режиссеры. Про страхи (если судить по глаголу “бояться”) гости говорили реже, чем о любви. В топ вошли историк Эйдельман, дизайнер Артемий Лебедев, кинокритик Долин и политики. Может быть в этом кроется ответ на вопрос, почему же политики не так охотно произносили имя президента России.
Что касается денег, то о них говорили все. Ну, за исключением человека науки, астрофизика Константина Батыгина. С церковью же имеем совершенно обратную ситуацию. О ней по большей части говорили только писатели и художник Павлов-Андреевич.

Анализ мата

Далее мы решили проанализировать то, как часто гости Юрия Дудя ругались матом. С помощью регулярных выражений мы составили словарь матерных слов со всех интервью. После этого, для каждого ролика было подсчитано суммарное количество вхождений элементов составленного словаря.
Мы построили диаграммы, отражающие топ-10 любителей нецензурно выражаться по количеству “запрещенных” слов в минуту.

Как видим, рэперы и музыканты почти полностью захватили топ. Помимо них очень часто ругались такие гости как блогер Данила Поперечный и комики Иван Усович и Алексей Щербаков. Первое место в рейтинге с большим отрывом от остальных держит Morgenstern (признан иностранным агентом на территории РФ), а вот Олег Тиньков в своем последнем интервью матерился не так много, чтобы попасть в Топ-10.
Зато, как искрометно!

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

Ожидаемо, что больше всех матерились рэперы. На втором месте оказались блогеры (по большей части за счет Поперечного). За ними следует Артемий Лебедев, единственный дизайнер в нашей выборке, благодаря разнообразия речи которого, представители этой профессии и попали в топ-3 этого распределения. Кстати, если вы еще не знакомы с нашим анализом телеграм-канала Лебедева, то мы не понимаем, чего же вы ждете! Несмотря на то что генератор постов Артемия Лебедева сейчас выключен, исследование его телеграм-канала все равно заслуживает вашего внимания.

Ограничения анализа

Стоит отметить, что в нашем небольшом исследовании есть два недостатка:

  1. Как уже говорилось ранее, мы не смогли отделить слова гостей Дудя от речи Юрия, который и сам зачастую не брезгует использовать нецензурные выражения. Однако, задача интервьюера — подстроиться под стиль речи гостя, поэтому, скорее всего, результаты бы не сильно изменились.
  2. В автосгенерированных субтитрах нам встретилось некое подобие цензуры — некоторые слова были заменены на ‘[ __ ]’. Тут можно выделить несколько интересных моментов:
    • действительно некоторые матерные слова были зацензурены (по большей части слово “бл**ь”);
    • остальные матерные слова остались нетронутыми;
    • под чистку попали некоторые другие грубые слова, при этом не являющиеся матерными (“мудак”, “гавно”).

Продемонстрируем наглядно на примере следующего диалога:
Дудь: Почему твои треки такое гавно?
Гнойный: Мои треки ох**тельные, Юра, просто ты любишь гавно.

Такие замены встречались в субтитрах роликов с людьми, которые не употребляли нецензурные выражения в своей речи (по крайней мере на протяжении интервью). Однозначное решение, что же делать с ‘[ __ ]’, мы не смогли принять, поэтому для некоторых гостей какая-то часть матерных слов была, увы, не подсчитана.

Работа с Word2vec

После статистического анализа интервью мы перешли к определению их контекста. Для этого мы, как и раньше, воспользовались моделью Word2vec. Она основана на нейронной сети и позволяет представлять слова в виде векторов с учетом семантической составляющей. Косинусная мера семантически схожих слов будет стремиться к 1, а у двух слов, не имеющих ничего общего по смыслу, она близка к 0. Модель можно обучать самостоятельно на подготовленном корпусе текстов, но мы решили взять готовую — от RusVectores. Для ее использования нам понадобилась библиотека gensim.
Мы рассчитали векторы-представления для каждой профессиональной группы. Наверное, можно ожидать, что режиссёры обсуждали кино и все, что с ним связано, а музыканты — музыку. Поэтому для каждого рода деятельности мы получили список слов, описывающих тематику текстов соответствующих роликов. Также мы раскрасили ячейки в зависимости от того, насколько каждое полученное слово было близко к текстам соответствующей категории гостей.

Можно сказать, что в целом каждая профессиональная категория описывается вполне соответствующими терминами. Конечно, некоторые слова могут показаться спорными. К примеру, на первом месте для рэперов стоит слово “джазовый”, хотя ни с 1 представителем хип-хоп течения речь о джазе не заходила. Тем не менее модель посчитала, что это слово достаточно близко к общему смыслу интервью людей, относящихся к этой категории (видимо, за счет непосредственного отношения рэперов к музыке).

P.S. Мистическое число 25.000000

Как мы уже говорили, среди скачанных субтитров некоторые были написаны вручную. Интересно, что все они начинаются с числа 25.000000, причем оно нигде не озвучивается.

Что же это за мистическое число? Если уйти в конспирологию, то можно вспомнить про 25-й кадр. К сожалению, нам об этом ничего неизвестно, мы просто оставим это как пищу для размышлений…

Обзор дашборда в Superset

Время чтения текста – 2 минуты

В сегодняшней статье в рамках большого обзора BI-систем мы вновь посмотрим на обновленный и улучшенный Apache Superset — open-source инструмент с множеством опций, которые позволяют пользователям с любым опытом изучать и визуализировать данные, от простых линейных графиков до высокодетализированных геопространственных диаграмм (ух!).

В видео обзоре мы разберем интерфейс этого BI-инструмента, конфигурацию, настроим отчеты и визуализацию (с дополнительными примерами), поговорим о фишках и сложностях Apache Superset, и построим итоговый дашборд.
Кстати, первую версию дашборда мы сделали еще в прошлом году, но с тех пор вышло много апдейтов и мы построили новый. Так как мы уже показывали вам дашборд в Superset, в видео мы сравним предыдущую версию с новой и обсудим различия.

Все аналитики команды Valiotti Analytics оценили дашборд в Superset. В итоге, мы получили следующие средние оценки (1 — худшая оценка, 10 — лучшая):
Отвечает ли заданным вопросам — 8,1
Порог входа в инструмент — 5,8
Функциональность инструмента — 7,7
Удобство пользования — 8,1
Соответствие результата макету — 8,9
Визуальная составляющая — 7,3

Итог: дашборд получает 7,7 баллов из 10. Посмотрите на финальный результат и тоже оцените его!

Автор дашборда, член команды Valiotti Analytics — Егор Сатюков

Как развернуть Airbyte и подключить к нему Facebook API?

Время чтения текста – 13 минут

В этой статье мы покажем, как развернуть open-source сервис Airbyte на вашем компьютере и с его помощью подключиться к Facebook Marketing API.

Что такое Airbyte?

Airbyte — это платформа интеграции данных с открытым исходным кодом для создания ELT пайплайнов, которая помогает вам реплицировать данные в ваших хранилищах, озерах и базах данных. Кроме того, она имеет удобный интерфейс, который очень красиво оформлен (вы только посмотрите на эту осьминожку)!

Разворачиваем Airbyte

Установка Airbyte на машину выполняется достаточно просто. В этом можно убедиться, заглянув в официальную документацию. Для этого выполнить несколько шагов:

  1. Установить Docker (см. Инструкции) и убедиться, что у вас стоит последняя версия docker-compose.
  2. Выполнить следующие команды в терминале:

Как только в выводе терминала появится баннер Airbyte, UI станет доступен по адресу http://localhost:8000.

Подключаем Facebook

С полной документацией по работе с Facebook Marketing из Airbyte можно ознакомиться по ссылке. Мы же дадим выжимку из нее. Итак, для того, чтобы подключить Facebook в Airbyte, надо учесть следующие условия:

  • Наличие Facebook Ad Account ID (где его найти?)
  • Наличие Facebook App с включенным Marketing API (подробнее)
  • Наличие Facebook Marketing API Access Token (подробнее)
  • Запросить увеличение лимита на количество запросов: Facebook сильно ограничивает токены API, сгенерированные из приложений Facebook с уровнем «Стандартный доступ» (по умолчанию для новых приложений именно такой уровень доступа), что делает невозможным использование токена для синхронизации с Airbyte. Вам нужно будет запросить апгрейд до расширенного доступа для вашего приложения со следующими разрешениями (подробнее):
    • Ads Management Standard Access
    • ads_read
    • Ads_management
  • Перед этим вам нужно будет пройти процесс проверки вашей компании (подробнее).

После этого можно подключить Facebook в Airbyte.

  1. Заходим в UI на вкладку Sources и нажимаем ‘+ new source’

  1. Выбираем в качестве источника Facebook Marketing и прописываем конфигурации подключения:
    • Название источника, под которым он будет отображаться в Airbyte
    • Facebook Ad Account ID
    • Дата начала — с этого момента будут грузиться данные из Facebook (⚠️ВАЖНО: Данные по инсайтам можно получить только за последние 37 месяцев)
    • Дата окончания — до этого момента будут грузиться данные из Facebook (можно оставить пустым, чтобы получать последние данные из аккаунта)
    • Facebook Marketing API Access Token

  1. Также имеются несколько дополнительных конфигурационных опций:
    • Включение удаленных данных Campaigns, Ads и AdSets
    • Сохранение миниатюр изображений
    • Настройка кастомных Insignts

  1. После заполнения полей нажимаем ‘Set up source’ и ждем, пока процесс подключения не завершится

  1. При необходимости настройки подключения к источнику можно поменять на его вкладке ‘Settings’

Может возникнуть ошибка в связи с тем, что версия фреймворка устарела. Тогда надо будет перейти в основную вкладку ‘Settings’ (шестеренка в левом нижнем углу), там выбрать ‘Sources’, в списке найти Facebook Marketing и нажать кнопку ‘Change’ (или нажать ‘Upgrade all’, чтобы загрузить все доступные обновления).

Подключаем хранилище данных

После того, как мы подключили Facebook Marketing, нам необходимо связать этот источник с нашим хранилищем данных.

  1. Нажимаем ‘add destination’ на вкладке с настроенным источником (см. пункт 4 предыдущего раздела) либо идем на вкладку ‘Destinations’ и там нажимаем ‘+ new destination’.

  1. Далее выбираем тип хранилища, с которым будем работать. Airbyte может подключаться к большому количеству популярных СУБД. Опишем необходимые шаги конфигурации на примере работы с PostgreSQL. Заполняем следующие поля:
    • Название хранилища, под которым оно будет отображаться в Airbyte
    • Хост
    • Порт
    • База данных
    • Схема
    • Пользователь
    • Пароль
    • Нужно ли использовать SSL
    • Параметры SSH туннеля (опционально)

  1. После заполнения полей нажимаем ‘Set up destination’ и ждем, пока процесс подключения не завершится
  2. Если вы выполняли подключение к хранилищу отдельно с вкладки ‘Destinations’, то надо связать с ним источник, нажав на ‘add source’

  1. При необходимости настройки подключения к хранилищу можно поменять на его вкладке ‘Settings’
  2. Версию образа для работы с хранилищем можно обновить при необходимости (по аналогии с тем, что мы писали в конце предыдущего раздела)

Настраиваем связь источника и  хранилища данных

После всех проделанных шагов у нас открывается вкладка ‘Set up connection’, на которой мы можем настроить то, как и какие данные мы будем грузить с помощью Airbyte:

  • Как часто будет происходить загрузка
  • Куда именно мы будем помещать данные в хранилище
  • Какие данные из источника мы будем брать и каким образом (Full refresh | Increment, Overwrite | Append)
  • Надо ли нормализовывать данные (сырые данные все равно останутся в хранилище)
  • Настройка кастомных трансформаций (опционально)


После заполнения полей, нажимаем ‘Set up connection’. Далее откроется страница настроенного подключения, где мы можем наблюдать историю выгрузок данных, а также вносить изменения в установленную связь Источник-Хранилище.


Если нажать на Sync, то будут показаны логи исполнения.

Результаты

После того, как загрузка была успешно завершена, мы можем заглянуть в наше хранилище.

Сразу можно обратить внимание на количество сгенерированных таблиц.

Так как мы указали, что нам необходима нормализация данных, то у нас в результате получилось чуть меньше 400 таблиц для streams [activities, ‘ad_account’, ‘ad_creatives’, ‘ad_sets’, ‘ads’, ‘ads_insights’, ‘campaigns’], причем многие из них оказались пустыми (так сгенерировал Airbyte).

Сырые данные содержатся в таблицах с именами ‘_airbyte_raw_*’. В таких таблицах имеется всего 3 поля — ‘_airbyte_ab_id’, ‘_airbyte_data’ и ‘_airbyte_emmited_at’. Столбец ‘_airbyte_data’ имеет тип jsonb.
Пример для ‘_airbyte_raw_ads_insights’:

В процессе нормализации каждое поле из json выносится в отдельную колонку. Пример: часть списка колонок из таблицы ‘ads_insignts’:

После получения основной нормализованной таблицы для каждого stream создаются различные breakdowns, например, для тех же ‘ads_insights’:

Ранее Ctrl + ↓