Pop star, Post Malone is one of the world’s most popular singers. He got his start in 2016 by releasing album, “Stoney”, followed by “Beerbongs & Bentleys”, “Hollywoods Bleeding” and “Twelve Carat Toothache”. Post Malones outstanding albums that have brought him to the Billboard Top Hits time and time again.This data gives insight to album sentiments after his growth in popularity. I hypothesize that although Post Malone is considered to be an upbeat artist, his albums have become increasingly dark over time.
Download Required Packages and Files for Analysis
library(tidyverse)
library(tidytext)
library(textdata)
library(ggthemes)
library(readr)
library(jsonlite)
library(wordcloud2)
stoney <- fromJSON("~/Downloads/Lyrics_Stoney.json")
hollywoodsbleeding <- fromJSON("~/Downloads/Lyrics_HollywoodsBleeding.json")
beerbongsbentleys <- fromJSON("~/Downloads/Lyrics_beerbongsbentleys.json")
twelvecarattoothache <- fromJSON("~/Downloads/Lyrics_twelvecarattoothache.json")
Create Dataframes
as.data.frame(stoney$tracks$song) -> stoney_df
stoney_df %>%
mutate(album = "Stoney") -> stoney_df
as.data.frame(hollywoodsbleeding$tracks$song) -> hollywood_df
hollywood_df %>%
mutate(album = "Hollywoods Bleeding") -> hollywood_df
as.data.frame(beerbongsbentleys$tracks$song) -> beerbongs_df
beerbongs_df %>%
mutate(album = "BeerBongs & Bentleys") -> beerbongs_df
as.data.frame(twelvecarattoothache$tracks$song) -> twelvecarattooth_df
twelvecarattooth_df %>%
mutate(album = "Twelve Carat Toothache") -> twelvecarattooth_df
stoney_df %>%
unnest_tokens(word, lyrics) -> stoney_words
beerbongs_df %>%
unnest_tokens(word, lyrics) -> beerbongs_words
hollywood_df %>%
unnest_tokens(word, lyrics) -> hollywood_words
twelvecarattooth_df %>%
unnest_tokens(word, lyrics) -> twelvecarattooth_words
###Most Commons Words per Album
stoney_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(!word %in% c("verse", "chorus", "ooh", "uh", "yeah","ayy", "bridge","wanna", "woo", "ha", "whoa", "2", "1", "outro", "skrrt")) %>%
head(100) %>%
wordcloud2(shape = 'star')
## Joining, by = "word"
stoney_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(!word %in% c("verse", "chorus", "ooh", "uh", "yeah","ayy", "bridge","wanna", "woo", "ha", "whoa", "2", "skrrt")) %>%
head(12) %>%
ggplot(aes(n, reorder(word,n))) + geom_col()
## Joining, by = "word"
“Stoney”, was the first album released by Post Malone in 2016 by Republic studios. This album consists of hits like ‘Congratulations’ and ‘I Fall Apart’. Across all 4 albums, its clear the most commonly used words are ‘Post’ and ‘Malone’. This however, is not uncommon for musical artists these days. On top of his name, Malone sings lyrics such as ‘feel’, ‘baby’, and ‘cold’ in addition to proclaimed swear words.
beerbongs_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(!word %in% c("verse", "chorus", "ooh", "uh", "yeah","ayy", "bridge","wanna", "intro", "outro", "oo", "1", "2", "ta", "ohh", "ooo", "21", "skrrt")) %>%
head(100) %>%
wordcloud2(shape = 'oval')
## Joining, by = "word"
beerbongs_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE)%>%
filter(!word %in% c("verse", "chorus", "ooh","oo", "yeah", "ayy","uh", "bridge", "ta", "mm", "da", "haha", "woo")) %>%
head(12) %>%
ggplot(aes(n, reorder(word,n))) + geom_col()
## Joining, by = "word"
“Beerbongs & Bentleys” was the second album released from Post Malone in 2018. Songs like ‘Rockstar’ ruled #1 on Billboard Top 100 for several weeks, as well as other tracks like ‘Better Now’, and ‘Psycho’. Here we start to see the rise of Post Malone in this popularity and the lifestyle he picks up while stepping into the spotlight. He sings about women, cars, being spoiled and living the party life, which we see through the top 12 words sung in this album.
hollywood_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(!word %in% c("verse", "chorus", "ooh", "uh", "yeah","ayy", "bridge","wanna", "intro", "outro", "1", "2", "em")) %>%
head(100) %>%
wordcloud2(shape = 'star')
## Joining, by = "word"
hollywood_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(!word %in% c("verse", "chorus", "ooh", "yeah", "ayy", "bridge", "blah", "ha", "til", "em", "gonna", "1", "2")) %>%
head(12) %>%
ggplot(aes(n, reorder(word,n))) + geom_col()
## Joining, by = "word"
Post Malone released “Hollywood’s Bleeding” in 2019, again with skyrocketing hits. Tracks “Sunflowers’, ‘Circles’, and ‘WOW’ reached Billboard Top 100 within weeks of being open for the public. The most common words seen in this album consist of ‘die’, ‘lied’, ‘low’, and ‘bad’.
twelvecarattooth_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(!word %in% c("verse", "chorus", "ooh", "uh", "yeah","ayy", "bridge","wanna", "intro", "outro", "da", "ta", "mm", "na", "lyrics", "ah", "1", "2", "finger")) %>%
head(100) %>%
wordcloud2(shape = 'oval')
## Joining, by = "word"
twelvecarattooth_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(!word %in% c("verse", "chorus", "ooh", "ooh","yeah", "ayy","uh", "bridge", "ta", "mm", "da", "lyrics", "finger", "pull", "40you", "liveget", "na", "1", "2")) %>%
head(12) %>%
ggplot(aes(n, reorder(word,n))) + geom_col()
## Joining, by = "word"
The most recent album to be released by post Malone was “Twelve Carat Toothache” in 2022. Along with his name, words like ‘wrapped’, ‘life’, ‘burnin’ and ‘low’ make up a large portion of the album lyrics. None of these tracks have made it to the Billboard Top 100 yet, however were released in June of this year.
Below is an analysis of positive & negative sentiments using the AFINN lexicon, for each album. This lexicon provided a clear representation of how strongly sentiments can reflect.
stoney_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 2) %>%
inner_join(get_sentiments('afinn')) %>%
filter(value < 0) %>%
ggplot(aes(reorder(word, n),n, fill = value)) + geom_col() + coord_flip() + theme_economist()
## Joining, by = "word"
## Joining, by = "word"
stoney_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 2) %>%
inner_join(get_sentiments('afinn')) %>%
filter(value > 0) %>%
ggplot(aes(reorder(word, n),n, fill = value)) + geom_col() + coord_flip() + theme_economist()
## Joining, by = "word"
## Joining, by = "word"
The graph displays 11 positive words that frequent the Stoney album. We tracked 24 negative words throughout the album.
beerbongs_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 2) %>%
inner_join(get_sentiments('afinn')) %>%
filter(value < 0) %>%
ggplot(aes(reorder(word, n),n, fill = value)) + geom_col() + coord_flip() + theme_economist()
## Joining, by = "word"
## Joining, by = "word"
beerbongs_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 2) %>%
inner_join(get_sentiments('afinn')) %>%
filter(value > 0) %>%
ggplot(aes(reorder(word, n),n, fill = value)) + geom_col() + coord_flip() + theme_economist()
## Joining, by = "word"
## Joining, by = "word"
19 positive words and 28 negative words throughout the album “Beerbongs & Bentleys”.
hollywood_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 2) %>%
inner_join(get_sentiments('afinn')) %>%
filter(value < 0) %>%
ggplot(aes(reorder(word, n),n, fill = value)) + geom_col() + coord_flip() + theme_economist()
## Joining, by = "word"
## Joining, by = "word"
hollywood_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 2) %>%
inner_join(get_sentiments('afinn')) %>%
filter(value > 0) %>%
ggplot(aes(reorder(word, n),n, fill = value)) + geom_col() + coord_flip() + theme_economist()
## Joining, by = "word"
## Joining, by = "word"
11 positive words and 30 negative words throughout the album.
twelvecarattooth_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 2) %>%
inner_join(get_sentiments('afinn')) %>%
filter(value < 0) %>%
ggplot(aes(reorder(word, n),n, fill = value)) + geom_col() + coord_flip() + theme_economist()
## Joining, by = "word"
## Joining, by = "word"
twelvecarattooth_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 2) %>%
inner_join(get_sentiments('afinn')) %>%
filter(value > 0) %>%
ggplot(aes(reorder(word, n),n, fill = value)) + geom_col() + coord_flip() + theme_economist()
## Joining, by = "word"
## Joining, by = "word"
We tracked 13 positively associated words and 24 negatively associated words throughout the album “Twelve Carat Toothache”.
By looking at the most common words and phrases of each album, and by the sentimental association to them, a conclusion can be drawn that there has been little transformation in lyrical sentiment across each album. The 4 albums consistently present more negatively associated terms throughout the music than that of positive words.
My hypothesis reflected a negative evolution in Post Malone’s album lyrics, simultaneous to his rise in popularity. The graphical data presented does not support the argument that Post Malone’s albums have becoming increasingly negative. However, it does support the concept that his lyrics have an overall negative sentiment.