Let’s take a look at the queen of pop music today - Ariana Grande. The singer has shown courage in the face of trauma, tragedy and tabloid sniping to become the voice of a mass movement towards infectious optimism. Over the course of her career, Ariana Grande has released five major albums:

  1. Yours Truly (2013)
  2. My Everything (2014)
  3. Dangerous Woman (2016)
  4. Sweetener (2018)
  5. Thank U, Next (2019)

Grande’s music has changed significantly as she has aged and from album to album. She has changed a lot in person as well, maturing from the Broadway and Nickelodeon rising star she started off her career as to the resilient success story and inspiration for those who endure hardships everywhere. Due to this, I hypothesize that the afinn values specifically for Ariana Grande’s album lyrics will be more extreme (-5, -4, -3, 3, 4, 5) for later albums than earlier ones.

I chose to analyze each of the five albums. I wanted this report to explore the unique results I could find by intertwining the visual data with prominent events that look place during Grande’s career to form a coherent conclusion. I wanted to use this report to explore different results I could find by using two different sentiment scales: bing and afinn. For a more visual context, I also utilized wordclouds. I used the “genius” pacakage to download the lyrics of each album, as well as the “wordcloud2” package to create visuals of the frequent lyrics per album.

Word Cloud Analysis

I began my analysis by using word clouds to present text data in a simple and clear format. Word clouds are also easy and quick to understand. A word cloud shoes the frequency of words in a document by varying the size of words in a visualization.

After installing the proper packages, I had to first compile all of the lyrics from all five albums. Using all of the lyrics, I unnested the tokens, removed stop words and filtered by specific album. From each album, I removed any words that were not words (i.e. “ooh,” “ah,” “di,” “da”) so they would not show up in the visualization. From doing this, I was able to create a word cloud. I repeated the process for each album.

Code for Compiling Lyrics from All Albums
library(tidytext)
library(tidyverse)
library(genius)
library(wordcloud2)

Ariana_Albums <- tribble(
  ~ artist, ~ title,
  "Ariana Grande", "Yours Truly",
  "Ariana Grande", "My Everything",
  "Ariana Grande", "Dangerous Woman",
  "Ariana Grande", "Sweetener",
  "Ariana Grande", "Thank U, Next")

Ariana_song_lyrics <- Ariana_Albums %>% 
  add_genius(artist, title, type = "album")
Word Cloud & Code for Yours Truly (2013):
devtools::install_github("gaospecial/wordcloud2")
library(wordcloud2)

Ariana_song_lyrics %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  filter(title %in% "Yours Truly") %>% 
  filter(!word %in% "ooh") %>% 
  count(word, sort = TRUE) -> ArianaWordsAlbum1

ArianaWordsAlbum1 %>% 
  wordcloud2(shape = 'circle')
Word Cloud & Code for My Everything (2014):
devtools::install_github("gaospecial/wordcloud2")
library(wordcloud2)

Ariana_song_lyrics %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  filter(title %in% "My Everything") %>% 
  filter(!word %in% "ooh") %>% 
  filter (!word %in% "na") %>% 
  filter(!word %in% "ya") %>% 
  count(word, sort = TRUE) -> ArianaWordsAlbum2

ArianaWordsAlbum2 %>% 
  wordcloud2(shape = 'circle')
Word Cloud & Code for Dangerous Woman (2016):
devtools::install_github("gaospecial/wordcloud2")
library(wordcloud2)

Ariana_song_lyrics %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  filter(title %in% "Dangerous Woman") %>% 
  filter(!word %in% "ooh") %>% 
  filter(!word %in% "la") %>% 
  filter(!word %in% "bout") %>% 
  filter(!word %in% "lo") %>% 
  filter(!word %in% "em") %>% 
  filter(!word %in% "eh") %>% 
  filter(!word %in% "da") %>% 
  filter(!word %in% "woo") %>% 
  count(word, sort = TRUE) -> ArianaWordsAlbum3

ArianaWordsAlbum3 %>% 
  wordcloud2(shape = 'circle')
Word Cloud & Code for Sweetener (2018):
devtools::install_github("gaospecial/wordcloud2")
library(wordcloud2)

Ariana_song_lyrics %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  filter(title %in% "Sweetener") %>% 
  filter(!word %in% "ayy") %>% 
  filter(!word %in% "da") %>% 
  filter(!word %in% "bum") %>% 
  filter(!word %in% "yuh") %>% 
  filter(!word %in% "mmm") %>% 
  filter(!word %in% "ah") %>% 
  filter(!word %in% "em") %>% 
  filter(!word %in% "ooh") %>% 
  filter(!word %in% "ohh") %>% 
  filter(!word %in% "yeah") %>% 
  filter(!word %in% "sheesh") %>% 
  filter(!word %in% "ay") %>% 
  filter(!word %in% "st") %>% 
  count(word, sort = TRUE) -> ArianaWordsAlbum4

ArianaWordsAlbum4 %>% 
  wordcloud2(shape = 'circle')
Word Cloud & Code for Thank U, Next (2019):
devtools::install_github("gaospecial/wordcloud2")
library(wordcloud2)

Ariana_song_lyrics %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  filter(title %in% "Thank U, Next") %>% 
  filter(!word %in% "yeah") %>% 
  filter(!word %in% "eh") %>% 
  filter(!word %in% "i'ma") %>% 
  filter(!word %in% "gon") %>% 
  filter(!word %in% "ah") %>% 
  filter(!word %in% "uh") %>% 
  filter(!word %in% "woo") %>% 
  filter(!word %in% "mmm") %>% 
  count(word, sort = TRUE) -> ArianaWordsAlbum5

ArianaWordsAlbum5 %>% 
  wordcloud2(shape = 'circle')

In four of the five albums, the word “love” has appeared to be one of the most frequent words. In three of the five albums, the word “baby” has appeared to be one of the most frequent words as well. Other common words include “heart,”time" and “boy.”

Another interesting aspect to note is the number and variety in the collection of words that make up each word cloud visual. The word clouds for each album are meant to be the same size, but it clear that the word clouds in the final two albums are the largest. I then took the search to iTunes to see if there were more songs in the later albums to account for the larger word cloud size and magnitude.

My findings are as follows:

  1. Yours Truly (2013) = 13 songs
  2. My Everything (2014) = 15 songs
  3. Dangerous Woman (2016) = 15 songs
  4. Sweetener (2018) = 15 songs
  5. Thank U, Next (2019) = 12 songs

Even though the album Thank U, Next only has 12 songs total, it has one of the largest word clouds. The number of songs present on each album clearly does not alter the size and complexity of the word cloud itself. Instead, the variety of the words present in each album should be analyzed.

I did this analysis for each album, and my findings are as follows:

  1. Yours Truly (2013) = 460 words
  2. My Everything (2014) = 470 words
  3. Dangerous Woman (2016) = 440 words
  4. Sweetener (2018) = 452 words
  5. Thank U, Next (2019) = 420 words

The variety of the words present in each album does not directly affect the overall size of the word cloud or presence of words. In general, there may be more words that are not words (i.e. “ooh,” “do” or “di”), words in other languages, or slang words (i.e. “yo,” “gotta,” “drip,” “huh,” “bae,” “bout,” “gonna,” “thinkin,” etc.).

Album Sentiments Using Bing

I then used the bing sentiment scale to analyze the positive and negative words. After getting the lyrics for each album with the genius package, I unnested the tokens and removed the stop words. Then, I inner joined the list of words with the bing sentiment sclae. In order to see this data visually, I created a column chart by reordering the data by sentiment and reversing the coordinates to see a more collective visual. I repeated the process for each album.

Code for Yours Truly (2013):
library(tidytext)
library(tidyverse)
library(genius)

yours_truly <- genius_album(artist = "Ariana Grande", album = "Yours Truly")
yourstruly_sentiment <- yours_truly %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("bing"))

yourstruly_sentiment %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, n), n, fill = sentiment)) + 
  geom_col() + 
  coord_flip() + 
  facet_wrap(~sentiment, scales = "free_y")

Code for My Everything (2014):
my_everything <- genius_album(artist = "Ariana Grande", album = "My Everything")
myeverything_sentiment <- my_everything %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("bing"))

myeverything_sentiment %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, n), n, fill = sentiment)) + 
  geom_col() + 
  coord_flip() + 
  facet_wrap(~sentiment, scales = "free_y")

Code for Dangerous Woman (2016):
dangerous_woman <- genius_album(artist = "Ariana Grande", album = "Dangerous Woman")
dangerouswoman_sentiment <- dangerous_woman %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("bing"))

dangerouswoman_sentiment %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, n), n, fill = sentiment)) + 
  geom_col() + 
  coord_flip() + 
  facet_wrap(~sentiment, scales = "free_y")

Code for Sweetener (2018):
sweetener <- genius_album(artist = "Ariana Grande", album = "Sweetener")
sweetener_sentiment <- sweetener %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("bing"))

sweetener_sentiment %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, n), n, fill = sentiment)) + 
  geom_col() + 
  coord_flip() + 
  facet_wrap(~sentiment, scales = "free_y")

Code for Thank U, Next (2019):
thanku_next <- genius_album(artist = "Ariana Grande", album = "Thank U, Next")
thankunext_sentiment <- thanku_next %>% 
  unnest_tokens(word, lyric) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("bing"))

thankunext_sentiment %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, n), n, fill = sentiment)) + 
  geom_col() + 
  coord_flip() + 
  facet_wrap(~sentiment, scales = "free_y")

What we can gather from these charts are the compositions of positive and negative words in each album. It is important to judge the albums by relative composition of positive and negative words instead of comparing the number of instances of negative words to others. We can see that in earlier albums like Yours Truly, My Everything and Dangerous Woman, the positive sentiment is driven by the word “love,” which appears in each album between 70 and 155 times. There was a presence of negative words here, but in small frequencies.

For later albums Sweetener and Thank U, Next, there was a higher concentration of words that resemble negative sentiment. These albums were not predominantly positive or negative. Instead, there was a large mixture of both positively and negatively sentimented words.

According to Ariana Grande’s biography via https://www.biography.com/musician/ariana-grande, 2018 and 2019 (the years that these albums were released) represent the transition from 2017, the presumably worst year of Ariana Grande’s life. She had no choice but to bounce back after the May 2017 terror attack at her Manchester Concert. The suicide bomber struck the foyer on May 22, just after the encore performance. 23 people, including te attacker, were killed and at least 139 were wounded. Earlier in 2018, Grande had also ended her two-year relationship with rapper with Mac Miller after his substance abuse becamse too much for her to balance. Miller passed away from an overdose in September of 2018. Following the month of Mac Miller’s tragic death, Ariana Grande called off her engagement to SNL comedian Pete Davidson.

Album Sentiments Using Afinn

The afinn sentiment scale is a list of English words rated for valence with an integer between minus five (negative) and plus five (positive). This scale is useful when you want to find how strongly positive or negative a text is, not just by amount of positive/negatie words but how strongly positive and negative the words in the text are (the concentration). I innerjoined the afinn scale for each album and counted the value to help measure for the strongest sentiment in the lyrics. I repeated the process for each album.

Code for Yours Truly (2013):
yours_truly_word_counts_afinn <- ArianaWordsAlbum1 %>% 
  inner_join(get_sentiments("afinn"))
yours_truly_word_counts_afinn %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, value), value, fill = value)) +
  geom_col() +
  coord_flip()

Code for My Everythig (2014):
my_everything_word_counts_afinn <- ArianaWordsAlbum2 %>% 
  inner_join(get_sentiments("afinn"))
my_everything_word_counts_afinn %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, value), value, fill = value)) +
  geom_col() +
  coord_flip()

Code for Dangerous Woman (2016):
dangerous_woman_word_counts_afinn <- ArianaWordsAlbum3 %>% 
  inner_join(get_sentiments("afinn"))
dangerous_woman_word_counts_afinn %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, value), value, fill = value)) +
  geom_col() +
  coord_flip()

Code for Sweetener (2018):
sweetener_word_counts_afinn <- ArianaWordsAlbum4 %>% 
  inner_join(get_sentiments("afinn"))
sweetener_word_counts_afinn %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, value), value, fill = value)) +
  geom_col() +
  coord_flip()

Code for Thank U, Next (2019):
thanku_next_word_counts_afinn <- ArianaWordsAlbum5 %>% 
  inner_join(get_sentiments("afinn"))
thanku_next_word_counts_afinn %>% 
  head(20) %>% 
  ggplot(aes(reorder(word, value), value, fill = value)) +
  geom_col() +
  coord_flip()

In each of the five albums, the stronger, more positively sentimented words included (but not limited to) words like “perfect,” “love,” “lucky,” “fun” and “amazing.” The stronger, more negatively sentimented words included (but not limited to) words like “awful,” “bad,” “crazy,” “shit” and “fuck.”

Of the 20 words analyzed in the visual for the Yours Truly album, 11 out of the 20 words swayed more in a negative direction - 55 percent stronger negative sentiment.

Of the 20 words analyzed in the visual for the My Everything album, 10 out of the 20 words swayed more in a negative direction - 50 percent stronger negative sentiment.

Of the 20 words analyzed in the visual for the Dangerous Woman album, 13 out of the 20 words swayed more in a negative direction - 60 percent stronger negative sentiment.

Of the 20 words analyzed in the visual for the Sweetener album, 10 out of the 20 words swayed more in a negative direction - 50 percent stronger negative sentiment.

Of the 20 words analyzed in the visual for the Thank U, Next album, 14 out of the 20 words swayed more in a negative direction - 70 percent stronger negative sentiment.

How Do Past Events & Experiences Relate to Sentiment?

In times of personal upheaval and heartbreak, Grande was not only able to find reslience but also sought to spread it. According to an article via https://popcrush.com/ariana-grande-2018-timeline-moments/, Ariana Grande’s One Love Manchester concert raised 17 million pounds for victims and their families. Following this, she performed at the Concert for Charlottesille benefit for victims of an attack at a far-right rally in Virginia. In March 2018, she met survivors of the Parkland, Florida school shooting at the March for Our Lives in Washington, D.C.

Musically, Ariana Grande has turned on the light. Sweetener is an expressio of optimism, its title track sa reference to seeking out and savoring the good. On Thank U, Next, she expresses gratitude for the lessons of her past relationships - including that with Pete Davison, only weeks after their split.

Grande has been in showbusiness for close to half of her life, but the events of the last three years make it easy to forget that her public image was once not so at odds with that of the young star warped by early fame and success. Her 2013 debut album Yours Truly was labored to communicate her mastery of a powerful vocal range that has since been compared to Mariah Carey, as stated in the article published to https://www.theguardian.com/music/2018/dec/26/ariana-grande-resilience.

No pop career should ever have a terrorist attack as a milestone, but it is clear that Ariana Grande’s response to the bombing event at her 2017 concert changed her public image for the better. Her optimism represents a different way to be, choosing to be hopeful when it seems impossible.