Introduction

Miley Cyrus is a well known singer and actor from Nashville, Tennessee. Cyrus first broke onto the scene after starring in the show Hanna Montana, where she played a young pop star. Cyrus has continued to produce popular music over the course of her career, beginning with her Hannah Montana days, and has remained at the top of the music industry since. Cyrus has produced seven albums to date. Her most recent album was released on November 27, 2020. As Cyrus has grown out of her Disney star days and become an adult, her music has grown with her age. The lyrics and sound of Cyrus has appeared to change over time and as she has grown older.
Source: https://www.britannica.com/biography/Miley-Cyrus

This project aims to analyze how Cyrus’ music has progressed and changed over time. Specifically, how her lyrics and sound have changed through her seven albums. In order to analyze her music over time, I used the Genius API and Spotify API.

Hypothesis

I predict that Cyrus’ music has become more vulgar as she has aged, which is expressed throughout her albums. As she has grown older and grown out of her Disney phase of music, I predict that her lyrics have become more negative in sentiment and that positiveness and intensity of her music has changed over time.

Setup for Genius API

In order to run certain functions, I first had to run the necessary packages.

library(tidyverse)
library(tidytext)
library(genius)
library(wordcloud2)
library(textdata)
library(scales)
library(ggthemes)

Prior to analyzing the lyrics and words of Cyrus’ music, I first used the Genius library to insert the lyrical information on each of her albums.

miley_albums <-tribble(
  ~artist, ~title,
  "Miley Cyrus", "Meet Miley Cyrus",
  "Miley Cyrus", "Breakout",
  "Miley Cyrus", "Can't Be Tamed",
  "Miley Cyrus", "Bangerz",
  "Miley Cyrus", "Miley Cyrus & Her Dead Petz",
  "Miley Cyrus", "Younger Now",
  "Miley Cyrus", "Plastic Hearts",
)

miley_song_lyrics <- miley_albums %>%
  add_genius(artist, title, type = "album")

I then unnested the lyrics from Cyrus’ albums and filtered out unneccessary words, such as “hoo,” “la,” “uh,” and “ooh.”

miley_song_lyrics %>%
  unnest_tokens(word, lyric) %>%
  filter(!word %in% "hoo") %>%
  filter(!word %in% "la") %>%
anti_join(stop_words) %>%
  filter(title %in% "Meet Miley Cyrus") %>%
  count(word, sort = TRUE) ->miley_word_album1
miley_song_lyrics %>%
  unnest_tokens(word, lyric) %>%
  filter(!word %in% "la") %>%
anti_join(stop_words) %>%
  filter(title %in% "Breakout") %>%
  count(word, sort = TRUE) ->miley_word_album2
miley_song_lyrics %>%
  unnest_tokens(word, lyric) %>%
anti_join(stop_words) %>%
  filter(title %in% "Can't Be Tamed") %>%
  count(word, sort = TRUE) ->miley_word_album3
miley_song_lyrics %>%
  unnest_tokens(word, lyric) %>%
anti_join(stop_words) %>%
  filter(title %in% "Bangerz") %>%
  count(word, sort = TRUE) ->miley_word_album4
miley_song_lyrics %>%
  unnest_tokens(word, lyric) %>%
anti_join(stop_words) %>%
  filter(title %in% "Miley Cyrus & Her Dead Petz") %>%
  count(word, sort = TRUE) ->miley_word_album5
miley_song_lyrics %>%
  unnest_tokens(word, lyric) %>%
anti_join(stop_words) %>%
  filter(title %in% "Younger Now") %>%
  count(word, sort = TRUE) ->miley_word_album6
miley_song_lyrics %>%
  unnest_tokens(word, lyric) %>%
  filter(!word %in% "uh") %>%
  filter(!word %in% "ooh") %>%
  filter(!word %in% "la") %>%
anti_join(stop_words) %>%
  filter(title %in% "Plastic Hearts") %>%
  count(word, sort = TRUE) ->miley_word_album7

Word Clouds

After unnesting the lyrics and filtering out unneccessary words, I then created word clouds to visually illustrate the top words used in Cyrus’ respective albums. Along with the word clouds, I also created a list of the top ten words used in each of the albums.

Album 1

Meet Miley Cyrus-2007

miley_word_album1 %>%
  wordcloud2(color='random-light')
miley_word_album1 %>%
  head(10) ->album1top10

album1top10 %>%
  ggplot(aes(reorder(word, -n), n, fill=word)) + geom_col() + scale_fill_tableau() + theme_solarized() + ggtitle("Top 10 Words of 'Meet Miley Cyrus'") + labs(y= "Number of Appearances", x = "Words")

When Miley released her first album in 2007, she was in the beginning phase of her Disney acting career. At only 15 years old, she was still very much a young teenager. In this album, it is evident that her most commonly used words are dance, start, and yeah. These words are representative of the young, energetic, and fun persona she plays as a teenage pop star actor.

Album 2

Breakout-2008

miley_word_album2 %>%
  wordcloud2(color='random-light')
miley_word_album2 %>%
  head(10) ->album1top10

album1top10 %>%
  ggplot(aes(reorder(word, -n), n, fill=word)) + geom_col() + scale_fill_tableau() + theme_solarized() + ggtitle("Top 10 Words of 'Breakout'") + labs(y= "Number of Appearances", x = "Words")

A year after her first, Cyrus produced her second album in 2008. This album is similar to her first in the way that the lyrics align with her young, innocent, fun-loving teenage style. Some of the top words used in her lyrics include wanna, gonna, girls, and fun. At this time, Cyrus was still fresh on the scene as a popular actor in the show Hannah Montana.

Album 3

Can’t Be Tamed-2010

miley_word_album3 %>%
  wordcloud2(color='random-light')
miley_word_album3 %>%
  head(10) ->album1top10

album1top10 %>%
  ggplot(aes(reorder(word, -n), n, fill=word)) + geom_col() + scale_fill_tableau() + theme_solarized() + ggtitle("Top 10 Words of 'Can't Be Tamed'") + labs(y= "Number of Appearances", x = "Words")

In 2010, when Cyrus released this album, Cyrus was still under the age of 18 (she was 17). Some of the top words she used in her lyrics from the album include walk, love, heart, liberty, stop, and baby. Words representative of her innocence, such as dance, wanna, girls, and fun have become less popular in this specific album.

Album 4

Bangerz-2013

miley_word_album4 %>%
  wordcloud2(color='random-light')
miley_word_album4 %>%
  head(10) ->album1top10

album1top10 %>%
  ggplot(aes(reorder(word, -n), n, fill=word)) + geom_col() + scale_fill_tableau() + theme_solarized() + ggtitle("Top 10 Words of 'Bangerz'") + labs(y= "Number of Appearances", x = "Words")

Bangerz was the first album that Cyrus released as an adult over the age of 18. Her older age is evident in the popular words she uses in her lyrics, such as party, stuff, money, and thang. These words relate more closely to the lifestlye of a young adult who is beginning to care more about parties and money.

Album 5

Miley Cyrus & Her Dead Petz-2015

miley_word_album5 %>%
  wordcloud2(color='random-light')
miley_word_album5 %>%
  head(10) ->album1top10

album1top10 %>%
  ggplot(aes(reorder(word, -n), n, fill=word)) + geom_col() + scale_fill_tableau() + theme_solarized() + ggtitle("Top 10 Words of 'Miley Cyrus & Her Dead Petz'") + labs(y= "Number of Appearances", x = "Words")

In Cyrus’ fifth album she was 22 years old. This album was her first introduction to using ‘explicit’ lyrics, as all the albums prior did not use this type of language. Google searches of Cyrus in 2015 produce pictures of her performing shows in extremely revealing outfits. At this point in her career, she appeared to be rebelling from her previous innocent, Disney pop star phase. This is reflected in the words she uses in her lyrics, such as na, fuck, and space.

Album 6

Younger Now-2017

miley_word_album6 %>%
  wordcloud2(color='random-light')
miley_word_album6 %>%
  head(10) ->album1top10

album1top10 %>%
  ggplot(aes(reorder(word, -n), n, fill=word)) + geom_col() + scale_fill_tableau() + theme_solarized() + ggtitle("Top 10 Words of 'Younger Now'") + labs(y= "Number of Appearances", x = "Words")

In this album, Cyrus appears to ease off from using the vulgar language that she used in her previous album ‘Miley Cyrus & Her Dead Petz.’ Some of the most commonly used words in this album include yeah, thinkin, miss, mood, phone, and wake. All of which are relatively neutral

Album 7

Plastic Hearts-2020

miley_word_album7 %>%
  wordcloud2(color='random-light')
miley_word_album7 %>%
  head(10) ->album1top10

album1top10 %>%
  ggplot(aes(reorder(word, -n), n, fill=word)) + geom_col() + scale_fill_tableau() + theme_solarized() + ggtitle("Top 10 Words of 'Plastic Hearts'") + labs(y= "Number of Appearances", x = "Words")

In her most recent album, Cyrus begins her ‘rock era.’ Straying from her former pop style, she makes it clear that her music has a new sound in this album. Some of the popular words in this album that coincide with the rock style include night, loved, fire, and zombie.

Source: https://pitchfork.com/reviews/albums/miley-cyrus-plastic-hearts/

Sentiment Analysis

In order to understand which albums are more positive, it is necessary to run Afinn sentiment analyses. The Afinn scale goes from -5 (most negative rating) to 5 (most positive rating). Below, the afinn produces which words used in her respective albums were most common and their positive/negative sentiment score.

Meet Miley Cyrus-2007

Positive sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Meet Miley Cyrus") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word          n value
##    <chr>     <int> <dbl>
##  1 win           3     4
##  2 fun           2     4
##  3 fantastic     1     4
##  4 loved         1     3
##  5 perfect       1     3
##  6 smile         6     2
##  7 chance        5     2
##  8 care          2     2
##  9 fine          2     2
## 10 strong        2     2

Negative sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Meet Miley Cyrus") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(-value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word        n value
##    <chr>   <int> <dbl>
##  1 worse       4    -3
##  2 fake        3    -3
##  3 loose       1    -3
##  4 lost        1    -3
##  5 warning     1    -3
##  6 worry       1    -3
##  7 miss       16    -2
##  8 fire        8    -2
##  9 crazy       4    -2
## 10 wrong       4    -2

In this album, the postive words that she uses are more evenly spread out, as there are not one or two positive words she uses many times. Interestingly enough, she uses the negative word ‘miss’ 16 times in the album. In the positive score, the most popular word is ‘smile’ and it is only used 6 times. However, no words in the negative category that she uses score above a 3 on the negative sentiment scale. On positive sentiment, there are 3 words that score a 4.

Breakout-2008

Positive sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Breakout") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word          n value
##    <chr>     <int> <dbl>
##  1 fun          23     4
##  2 awesome       1     4
##  3 love         12     3
##  4 happy         5     3
##  5 beautiful     1     3
##  6 scoop         1     3
##  7 care          5     2
##  8 dear          3     2
##  9 kiss          2     2
## 10 fortunate     1     2

Negative sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Breakout") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(-value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word         n value
##    <chr>    <int> <dbl>
##  1 hate         5    -3
##  2 losing       2    -3
##  3 lost         1    -3
##  4 madness      1    -3
##  5 hurts        4    -2
##  6 crazy        3    -2
##  7 wrong        3    -2
##  8 insecure     2    -2
##  9 pain         2    -2
## 10 swear        2    -2

This album appears to be overwhelmingly positive, as the positive word fun is used 23 times and love is used 12 times. Two words in positive sentiment score a 4. In negative sentiment, there is not one word used more than 5 times or one that scores higher than a 3.

Can’t Be Tamed-2010

Positive sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Can't Be Tamed") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word            n value
##    <chr>       <int> <dbl>
##  1 masterpiece     3     4
##  2 wins            3     4
##  3 love           50     3
##  4 amused          1     3
##  5 sexy            1     3
##  6 hope            2     2
##  7 worth           2     2
##  8 amaze           1     2
##  9 favorite        1     2
## 10 fine            1     2

Negative sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Can't Be Tamed") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(-value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word       n value
##    <chr>  <int> <dbl>
##  1 hell       2    -4
##  2 bad        3    -3
##  3 lost       3    -3
##  4 fake       2    -3
##  5 mad        2    -3
##  6 abuse      1    -3
##  7 dead       1    -3
##  8 hate       1    -3
##  9 kill       1    -3
## 10 lonely    14    -2

In this album, a word used in her lyrics scores a negative 4 for the first time in her career. The word hell is used twice. She also uses the word lonely 14 times in this album. In terms of positive sentiment, Cyrus uses the word love 50 times.

Bangerz-2013

Positive sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Bangerz") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word        n value
##    <chr>   <int> <dbl>
##  1 win         2     4
##  2 awesome     1     4
##  3 fun         1     4
##  4 love      108     3
##  5 woo        12     3
##  6 adore       8     3
##  7 sexy        4     3
##  8 super       2     3
##  9 happy       1     3
## 10 loved       1     3

Negative sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Bangerz") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(-value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word             n value
##    <chr>        <int> <dbl>
##  1 bitch            7    -5
##  2 motherfucker     1    -5
##  3 shit             7    -4
##  4 hell             6    -4
##  5 fuck             5    -4
##  6 damn             4    -4
##  7 fucking          2    -4
##  8 piss             2    -4
##  9 lost             6    -3
## 10 die              5    -3

In this album Cyrus uses the positive word love 108 times, but also uses explicit, negative words such as bitch, shit, fuck, and die several times. Bitch, which has a negative score of 5 is used 7 times. Motherfucker, with a score of negative 5 as well, is used once.

Miley Cyrus & Her Dead Petz-2015

Positive sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Miley Cyrus & Her Dead Petz") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word          n value
##    <chr>     <int> <dbl>
##  1 win           8     4
##  2 fun           2     4
##  3 love         32     3
##  4 loved         4     3
##  5 beautiful     3     3
##  6 happy         3     3
##  7 glad          2     3
##  8 happiness     2     3
##  9 lucky         1     3
## 10 super         1     3

Negative sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Miley Cyrus & Her Dead Petz") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(-value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word         n value
##    <chr>    <int> <dbl>
##  1 bitch        8    -5
##  2 fuck        30    -4
##  3 fucked      21    -4
##  4 fucking     15    -4
##  5 shit        15    -4
##  6 ass          1    -4
##  7 dick         1    -4
##  8 dickhead     1    -4
##  9 bad          6    -3
## 10 evil         6    -3

Cyrus appears to become more comfortable with explicit words in her second album that is labeled ‘explicit.’ In this album, she uses the word love 32 times, but says bitch 8 times, fuck 30 times, fucked 21 times, fucking 15 times, and shit 15 times.

Plastic Hearts-2020

Positive sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Plastic Hearts") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word          n value
##    <chr>     <int> <dbl>
##  1 loved        21     3
##  2 love         10     3
##  3 faithful      2     3
##  4 happy         2     3
##  5 luck          2     3
##  6 adorable      1     3
##  7 amusement     1     3
##  8 pleasure      1     3
##  9 hope          7     2
## 10 true          7     2

Negative sentiment score ranking

miley_song_lyrics %>%
  filter(title %in% "Plastic Hearts") %>%
  unnest_tokens(word, lyric) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE) %>%
  inner_join(get_sentiments("afinn")) %>%
  arrange(desc(-value)) -> miley_word_album_afinn_pos

miley_word_album_afinn_pos %>%
  head(10)
## # A tibble: 10 x 3
##    word          n value
##    <chr>     <int> <dbl>
##  1 fuck          8    -4
##  2 fucking       2    -4
##  3 torture       2    -4
##  4 ass           1    -4
##  5 bad           9    -3
##  6 die           8    -3
##  7 lost          4    -3
##  8 hate          3    -3
##  9 crime         2    -3
## 10 desperate     2    -3

In her most recent album, which is labeled as being more ‘rock,’ she continues to use the word love and loved a large amount, but also continues with the explicit language. Less often than her past two albums, but Cyrus uses fuck 8 times, fucking 2 times, and die 8 times.

These sources were helpful in my process of coding with the Genius API: http://josiahparry.com/post/2019-05-08-genius-learnr-tutorial/ https://rpubs.com/jgoodman9/vampireweekendlyrics https://rpubs.com/ebunceelon/patda

Spotify API

Setup for Spotify API

In order to run certain functions, I first had to run the necessary packages. Along with running the necessary packages, I had to connect with my Spotify app in the Spotify developer dashboard. After connecting with the github spotifyr package, I then inserted my client ID and client secret in order to connect with the Spotify artist information. I then confirmed this connection by running the access token.

library(devtools)
devtools::install_github('charlie86/spotifyr')
library(spotifyr)
Sys.setenv(SPOTIFY_CLIENT_ID = '03bdeb9feb5d48389da02e4361262e46')
Sys.setenv(SPOTIFY_CLIENT_SECRET = 'eebe64774f18440a95f4a825b59458b4')

access_token <- get_spotify_access_token()

After setting up the connection to Spotify, I created my variable called miley. I then was able to view the entire data set and the information Spotify provides about Cyrus’ albums. This data set includes information such as valence, energy, and danceability.

miley <-get_artist_audio_features('miley cyrus')
view(miley)

Before creating density plots on Cyrus’ albums, I needed to ensure that the package called ggridges was setup.

install.packages("ggridges", repos = 'http://cran.us.r-project.org')
## 
## The downloaded binary packages are in
##  /var/folders/8c/463bgx397r53mf61c5plkvp00000gn/T//Rtmpdaq9eC/downloaded_packages
library(ggridges)

I then wanted to compare the danceability, energy, and valence of each album. I chose these 3 features from all the possible features specifically because I thought they were good indicators of a song’s identity.

Danceability: Describes how suitable a track is for dancing based on a combination of musical elements including tempo, rhythm stability, beat strength, and overall regularity.

Energy: Represents a perceptual measure of intensity and activity. Typically, energetic tracks feel fast, loud, and noisy. For example, death metal has high energy, while a Bach prelude scores low on the scale.

Valence: Describes the musical positiveness conveyed by a track. Tracks with high valence sound more positive (e.g. happy, cheerful, euphoric), while tracks with low valence sound more negative (e.g. sad, depressed, angry). Source: https://towardsdatascience.com/what-makes-a-song-likeable-dbfdb7abe404

Danceablity for all albums

miley %>%
  ggplot(aes(x=danceability, y=album_name)) +
  geom_density_ridges()

Energy for all albums

miley %>%
  group_by(album_name) %>%
  ggplot(aes(energy, album_name )) +
  geom_density_ridges()

Energy for all albums

ggplot(miley, aes(valence, album_name)) +
  geom_density_ridges()

These density plots are valuable to see the comparison of all the albums. However, I wanted to illustrate the scores of danceablity, energy, and valence for each individual album and compare them chronologically.

Meet Miley Cyrus-2007

Danceablity

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Hannah Montana 2 · Meet Miley Cyrus") %>%
  ggplot(aes(x = danceability, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Energy

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Hannah Montana 2 · Meet Miley Cyrus") %>%
  ggplot(aes(x = energy, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Valence

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Hannah Montana 2 · Meet Miley Cyrus") %>%
  ggplot(aes(x = valence, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

If you total up the danceability scores for all the songs in the album, the average score is 0.561

If you total up the energy scores for all the songs in the album, the average score is 0.856

If you total up the valence scores for all the songs in the album, the average score is 0.595

Breakout-2008

Danceablity

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Breakout") %>%
  ggplot(aes(x = danceability, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Energy

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Breakout") %>%
  ggplot(aes(x = energy, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Valence

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Breakout") %>%
  ggplot(aes(x = valence, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

If you total up the danceability scores for all the songs in the album, the average score is 0.508

If you total up the energy scores for all the songs in the album, the average score is 0.832

If you total up the valence scores for all the songs in the album, the average score is 0.498

Can’t Be Tamed-2010

Danceablity

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Can't Be Tamed") %>%
  ggplot(aes(x = danceability, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Energy

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Can't Be Tamed") %>%
  ggplot(aes(x = energy, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Valence

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Can't Be Tamed") %>%
  ggplot(aes(x = valence, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

If you total up the danceability scores for all the songs in the album, the average score is 0.532

If you total up the energy scores for all the songs in the album, the average score is 0.809

If you total up the valence scores for all the songs in the album, the average score is 0.426

Miley Cyrus & Her Dead Petz-2015

Danceablity

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Miley Cyrus & Her Dead Petz") %>%
  ggplot(aes(x = danceability, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Energy

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Miley Cyrus & Her Dead Petz") %>%
  ggplot(aes(x = energy, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Valence

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Miley Cyrus & Her Dead Petz") %>%
  ggplot(aes(x = valence, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

If you total up the danceability scores for all the songs in the album, the average score is 0.553

If you total up the energy scores for all the songs in the album, the average score is 0.510

If you total up the valence scores for all the songs in the album, the average score is 0.346

Younger Now-2017

Danceablity

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Younger Now") %>%
  ggplot(aes(x = danceability, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Energy

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Younger Now") %>%
  ggplot(aes(x = energy, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Valence

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Younger Now") %>%
  ggplot(aes(x = valence, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

If you total up the danceability scores for all the songs in the album, the average score is 0.572

If you total up the energy scores for all the songs in the album, the average score is 0.628

If you total up the valence scores for all the songs in the album, the average score is 0.474

Plastic Hearts-2020

Danceablity

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Plastic Hearts") %>%
  ggplot(aes(x = danceability, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Energy

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Plastic Hearts") %>%
  ggplot(aes(x = energy, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

Valence

miley %>%
  group_by(album_name) %>%
  filter(album_name %in% "Plastic Hearts") %>%
  ggplot(aes(x = valence, y = album_name, fill = ..x..)) +
  geom_density_ridges_gradient()

If you total up the danceability scores for all the songs in the album, the average score is 0.612

If you total up the energy scores for all the songs in the album, the average score is 0.713

If you total up the valence scores for all the songs in the album, the average score is 0.399

Conclusion

Cyrus’ music is innocent, uses positive words, and is clean during the time when she starred on the show Hannah Montana. Her music appears to change once Hannah Monta ends in 2011 and she goes on to produce the album Bangerz in 2013. In 2013, Cyrus’ lyrics change drastically. In the Bangerz album, she makes use of heavily explicit words. As a 21 year old rebelling after her Disney acting phase, there appears to be a correlation between this stage in her life and her lyrics. After Bangerz, Cyrus appears to become more comfortable using explicit language and uses it more often. There appears to be a correlation between her age and the negative sentiment score of her albums. Early in her career, Cyrus’ lyrics did not use negative sentiment words that reached 4 or above. In her most recent album, Cyrus used negative sentiment words that scored 5, and positive sentiment words that did not reach over 3.

Analyzing the danceability, energy, and valence of Cyrus’ albums, there appears to be a correlation between her age and each album’s average score for these features.

Meet Miley Cyrus: Danceablity average=0.561 Energy average=0.856 Valence average=0.595

Breakout: Danceablity average:0.508 Energy average:0.832 Valence average:0.498

Can’t Be Tamed: Danceablity average:0.532 Energy average:0.809 Valence average:0.426

Miley Cyrus & Her Dead Petz: Danceablity average:0.553 Energy average:0.510 Valence average:0.346

Younger Now: Danceablity average:0.572 Energy average:0.628 Valence average:0.474

Plastic Hearts: Danceablity average:0.612 Energy average:0.713 Valence average:0.399

With these average scores from each of her albums, it is evident that valence, or the positiveness of her music, slowly declined in her first four albums, rose back up in Younger Now, and then decreased again in her final album. The energy of her music declined after her first album, rose back up in Younger Now, and then rose again in her latest album. The danceability of her music seems to remain at a similar leve all throughout her albums, but does increase by a significant amount in her most recent album. There appears to be a correlation with the scores in her newest album and the new direction she is taking her music. Cyrus is beginning her ‘rock’ phases with her most recent album, and this is evident in the increase in danceability and recent uptick in energy.

My hypothesis, that Cyrus’ music has become more explicit and her lyrics have become more negative in sentiment and that positiveness and intensity of her music has changed over time, appears to be proven in some aspects. Her lyrics definitely became more explicit as she aged out of her Hannah Montana days. There is not a perfect linear correlation between the intensity and positiveness of her music over time, but it is evident that positiveness has declined since her first album, except for the outlier of Younger Now.