Tyler, the Creator: анализ альбома IGOR

Author

Чудинова София

Published

November 30, 2024

Введение

Tyler, the Creator — феномер в мире музыки 21 века. C его альбомом IGOR (Genius 2019) он совершает самый резкий стилистический поворот своей карьеры. Акцентируясь на звуковой палитре, а не на песенной структуре, альбом представляет собой мозаику, собранную из гудящих бас-линий, выдающихся клавишных проигрышей и расстроенных синтов.

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

Про альбом IGOR

В альбоме IGOR всего 12 песен.

Для их анализа я использую следующие библиотеки:

  • xml2
  • dplyr
  • tidytext
  • tidyr
  • ggplot2
  • wordcloud2
  • stringr

Этап 1. Загружаем необходимые библиотеки

options(warn = -1)
library(xml2)
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(tidytext)
library(tidyr)
library(ggplot2)
library(wordcloud2)
library(stringr)

Этап 2. Загружаем XML с песнями альбома

Предварительно загрузив XML-документ с текстами песен в рабочую директорию, я строю тиббл с названиями 12 песен альбома, их текстами, а также считаю количество слов в каждой песне.

xml_data <- read_xml("igor_lyrics.xml")
titles <- xml_find_all(xml_data, ".//title")
lyrics <- xml_find_all(xml_data, ".//lyrics")
titles_text <- xml_text(titles)
lyrics_text <- xml_text(lyrics)
songs_tibble <- tibble(
  title = titles_text,
  lyrics = lyrics_text)

count_words <- function(text) {
  words <- unlist(strsplit(text, "\\s+"))
  length(words)
}

songs_tibble <- songs_tibble %>%
  mutate(number_of_words = sapply(lyrics, count_words))

songs_tibble
# A tibble: 12 × 3
   title                                        lyrics           number_of_words
   <chr>                                        <chr>                      <int>
 1 IGOR'S THEME                                 "What? What? Wh…             272
 2 EARFQUAKE                                    "For real, for …             367
 3 I THINK                                      "(Four, four, f…             403
 4 EXACTLY WHAT YOU RUN FROM YOU END UP CHASING "Exactly what y…              31
 5 RUNNING OUT OF TIME                          "Running out of…             260
 6 NEW MAGIC WAND                               "Sometimes you …             481
 7 A BOY IS A GUN                               "No, don't shoo…             589
 8 PUPPET                                       "I wanna talk, …             363
 9 WHAT’S GOOD                                  "Turn my lights…             540
10 GONE, GONE / THANK YOU                       "Comparing scar…             604
11 I DON’T LOVE YOU ANYMORE                     "See, heavy fee…             265
12 ARE WE STILL FRIENDS?                        "Dream\n       …             250

Этап 3. Строим облако слов

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

song_tokens <- songs_tibble %>%
  unnest_tokens(word, lyrics) %>%
  anti_join(stop_words, by = "word") %>%
  count(word, sort = TRUE)

song_tokens <- song_tokens %>%
  rename(word = word, freq = n)

wordcloud2(
  song_tokens[1:30, ], 
  size = 1,
  color = c("lightpink", "pink", "hotpink", "deeppink", "black", 
            "mediumvioletred", "orchid", "palevioletred", "violetred", 
            "grey", "lavender", "lightcoral", "darkviolet"), 
  backgroundColor = "white", 
  minRotation = 0,
  maxRotation = 0
)

В облаке можно заметить, помимо слова love, такие наиболее частотные слова, как time и friends, в связи с чем можно предположить (если не читать тексты песен и при этом знать общий контекст), что любовь в данном альбоме тесно связана с темой дружеских отношений. В связи с этим я решила, что могу построить гистограмму, в которой будет отражена встречаемость слов, связанных с любовью и дружбой в каждой песне альбома в той последовательности, в которой они идут.

Этап 3. Строим гистограмму любви и дружбы песен альбома

# Заранее устанавливаю порядок песен, так как при первой попытке выполнить задание оказалось, что программа не может сама определить порядок по тибблу, как я ожидала, и распределяет все песни в рандомном порядке 
songs_tibble <- songs_tibble %>%
  mutate(title = factor(title, levels = c(
    "IGOR'S THEME", "EARFQUAKE", "I THINK",
    "EXACTLY WHAT YOU RUN FROM YOU END UP CHASING",
    "RUNNING OUT OF TIME", "NEW MAGIC WAND",
    "A BOY IS A GUN", "PUPPET", "WHAT’S GOOD",
    "GONE, GONE / THANK YOU", "I DON’T LOVE YOU ANYMORE",
    "ARE WE STILL FRIENDS?"
  )))

love_friend_counts <- songs_tibble %>%
  mutate(
    love_count = str_count(lyrics, "\\blov\\w*\\b"),
    friend_count = str_count(lyrics, "\\bfriend\\w*\\b") 
  ) %>%
  select(title, love_count, friend_count) %>%
  pivot_longer(cols = c(love_count, friend_count), names_to = "word", values_to = "count")

love_friend_counts$title <- factor(
  love_friend_counts$title,
  levels = rev(unique(love_friend_counts$title))
)

ggplot(love_friend_counts, aes(x = title, y = count, fill = word)) +
  geom_col(data = filter(love_friend_counts, word == "love_count"), aes(y = count), position = "identity", alpha = 0.8) +
  geom_col(data = filter(love_friend_counts, word == "friend_count"), aes(y = -count), position = "identity", alpha = 0.8) +
  coord_flip() +
  scale_y_continuous(
    labels = abs,
    breaks = seq(-max(love_friend_counts$count), max(love_friend_counts$count), by = 1)
  ) +
  labs(
    x = "Название песни",
    y = "Частотность слов",
    fill = "Вид слова"
  ) +
  theme_minimal(base_family = "Arial") + # Современный шрифт
  scale_fill_manual(values = c("love_count" = "#FF69B4", "friend_count" = "#FFB6C1")) + # Розовые тона
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, color = "darkmagenta"),
    axis.text.y = element_text(size = 10, color = "hotpink4"),
    panel.background = element_rect(fill = "white", color = NA), # Белый фон графика
    plot.background = element_rect(fill = "white", color = NA), # Белый фон страницы
    legend.background = element_rect(fill = "white"),
    legend.key = element_rect(fill = "white", color = NA),
    legend.title = element_text(size = 12, color = "hotpink"),
    legend.text = element_text(color = "darkmagenta"),
    plot.margin = margin(t = 10, r = 10, b = 10, l = 10) # Минимальные отступы
  )

Вывод

В графике мы можем проследить динамику отношений персонажа Тайлера и его возлюбленного. Интересно, что слова, однокоренные со словом love, используются всего в 5 песнях, причем используются они неравномерно по ходу всего альбома: чаще всего во второй и третьей песнях, далее в десятой и одиннадцатой. Высокая частотность слов, однокоренных со словами love и friend в финальных песнях может отражать желание автора объединить темы любви и дружбы, подчеркивая их значимость в завершении альбома. В то же время можно предположить, что, так как начальные песни больше сосредоточены на теме любви, а ближе к концу появляется фокус на дружбе, именно дружба и может являться возможной альтернативой или разрешением любовных конфликтов.

И немного забавного Тайлера

Список литературы

Genius. 2019. “Tyler, the Creator — IGOR Lyrics.” https://genius.com/albums/Tyler-the-creator/Igor.