Nicki the Harujuku Barbie. Roman. Nicki the Ninja. The Queen. These are all nicknames of the great Onika Tanya Maraj, or better known as Nicki Minaj. Nicki is “noted for her versatility as an artist, her lyricism and animated flow in her rapping and usage of alter egos and accents.” In fact, as crazed of a fan I am, I learned that Nicki Minaj grew up wanting to be an actress, but unfortunately nothing was going for her in that direction. After coming to that realization she decided to focus her attention to rap, after being discovered by Lil Wayne, and implement her acting skills within her rapping skills. This particular tactic would refer back to her usage of alter egos and accents. Despite me being a huge fan, I learn things everyday about the Queen. For example, in an interview on Youtube with retired rapper Joe Budden, Nicki Minaj mentioned that when she first started her rap career she felt out of place. Specifically because of the fact that she didn’t have a big butt. She said that Lil Wayne would come to the studio with different women everyday who had big butts and he called them their “muses.” She even goes on to say that to be taken seriously she felt like that she had to rap about big butts and other explicit, vulgar concepts to be taken seriously during that time. Nicki Minaj is the greatest female rapper of all time, I grew up with her although her songs and I love every single one of them. Although to some she may seem “explicit,” childish,” or “vulgar.” I believe that she’s definitely grown to be more mature, use more of her wit and clever word play: in general words to love not only herself more but empower everyone, as well as use more uplifting words to whoever listens through her lyrics.
library(readr)
library(jsonlite)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5 ✓ dplyr 1.0.7
## ✓ tibble 3.1.6 ✓ stringr 1.4.0
## ✓ tidyr 1.2.0 ✓ forcats 0.5.1
## ✓ purrr 0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x purrr::flatten() masks jsonlite::flatten()
## x dplyr::lag() masks stats::lag()
library(tidytext)
library(knitr)
# install.packages('textdata')
library(textdata)
# install.packages('devtools')
library(devtools)
## Loading required package: usethis
library(ggthemes)
library(ggplot2)
# devtools::install_github("lchiffon/wordcloud2")
library(wordcloud2)
Nicki Minaj has 6 albums, plus 1 collaboration album, and 4 mix-tapes. I’ll be specifically looking through her 5 studio albums that were produced with her label, “Cash Money.”
Before we take a look, there are a couple of things I would like to cover. First, I will not be looking at the “n-word.” As an African American, I feel like that particular word is just used within our dialect for several reasons depending on who you talk to within our culture. Secondly I would like to mention that because she is Trinidadian as well as raised in Queens, New York, there could be potentially different lingo or sayings or just shortened words in general to represent vulgar like words. With this, I will also acknowledge those words as well, from what I have filtered for you to see.
The first album is the Pink Friday album, which was released on November 22, 2010.
Lyrics_PinkFriday <-fromJSON("Lyrics_PinkFriday.json")
as.data.frame(Lyrics_PinkFriday) -> pinkfriday_df
pinkfriday_df$tracks.song -> lyrics2
lyrics2 %>%
unnest_tokens(word,lyrics) -> pinkfriday_words
pinkfriday_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
head(30) %>%
knitr::kable()
## Joining, by = "word"
| word | n |
|---|---|
| nicki | 99 |
| mun | 96 |
| boom | 92 |
| blazin | 80 |
| yeah | 78 |
| minaj | 77 |
| chorus | 76 |
| em | 75 |
| girls | 75 |
| love | 59 |
| fly | 48 |
| bitch | 47 |
| bass | 46 |
| muny | 46 |
| verse | 46 |
| yo | 45 |
| check | 41 |
| dominoes | 40 |
| ready | 40 |
| dungeon | 39 |
| dragon | 38 |
| rah | 38 |
| catch | 37 |
| badoom | 34 |
| life | 33 |
| time | 33 |
| material | 32 |
| shoot | 31 |
| ya | 31 |
| fuck | 30 |
pinkfriday_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
#head(30) %>%
wordcloud2()
## Joining, by = "word"
pinkfriday_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
head(30) %>%
ggplot(aes(reorder(word, n), n, fill=word)) + geom_col() +
ggtitle("Top 20 Words From the Pink Friday Album") +
theme( title = element_text(hjust =0.5)) +
labs (y="Number of Times Mentioned in the Album", x="Word") +
coord_flip()
## Joining, by = "word"
Note, I will put in parenthesis other variations of the same word that she uses throughout.
Warning: Explicit Content!
From what we can see off the bat within both the knit chart/word cloud from her first album her top 30, most commonly used vulgar words we know include: fuck(in), fu(which means fuck u) ass, ho, bitch(es), shit(tted), and motherfucker(fuckin). With that being said there are words used in Trinidad/slang that she uses to represent, for example, badoom and bass; these are all the words that are filtered for us to see. Adding up everything she uses a total of 13 different words to represent vulgar language.
Now let’s take a look at her second studio album, which is Pink Friday: Roman Reloaded. This album was released April 2, 2012.
Lyrics_PinkFridayRomanReloaded <-fromJSON("Lyrics_PinkFridayRomanReloaded.json")
as.data.frame(Lyrics_PinkFridayRomanReloaded) -> PinkFridayRomanReloaded_df
PinkFridayRomanReloaded_df$tracks.song -> lyrics3
lyrics3 %>%
unnest_tokens(word,lyrics) -> PinkFridayRomanReloaded_words
PinkFridayRomanReloaded_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
head(30) %>%
knitr::kable()
## Joining, by = "word"
| word | n |
|---|---|
| nicki | 121 |
| chorus | 102 |
| na | 100 |
| minaj | 94 |
| bang | 83 |
| stupid | 73 |
| yeah | 64 |
| verse | 61 |
| ho | 50 |
| bitches | 48 |
| dem | 44 |
| bitch | 43 |
| fuck | 40 |
| shit | 37 |
| trap | 34 |
| beez | 33 |
| roman | 33 |
| life | 31 |
| time | 31 |
| 2 | 29 |
| girl | 28 |
| ooh | 27 |
| 1 | 26 |
| lane | 26 |
| baby | 25 |
| hov | 25 |
| pre | 25 |
| lyrics | 24 |
| livin | 23 |
| bad | 22 |
PinkFridayRomanReloaded_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
#head(30) %>%
wordcloud2()
## Joining, by = "word"
Here within the second album her most used explicit words include: ho, bitch(es), and fuck. As for slang, the only word used the most is “bang,” which is another way of saying sex. Already we can see a decrease in the variations of words used, but now it’s more so the usage of each word. In total for this album, there are only 5 vulgar/explicit words within her top 30.
We will now look at her third studio album, “Roman Reloaded The Re-Up,” which was released November 19, 2012.
Lyrics_PinkFridayRomanReloadedTheReUp <-fromJSON("Lyrics_PinkFridayRomanReloadedTheReUp.json")
as.data.frame(Lyrics_PinkFridayRomanReloadedTheReUp) -> PinkFridayRomanReloadedTheReUp_df
PinkFridayRomanReloadedTheReUp_df$tracks.song -> lyrics4
lyrics4 %>%
unnest_tokens(word,lyrics) -> PinkFridayRomanReloadedTheReUp_words
PinkFridayRomanReloadedTheReUp_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
head(30) %>%
knitr::kable()
## Joining, by = "word"
| word | n |
|---|---|
| nicki | 45 |
| endorse | 37 |
| minaj | 37 |
| yeah | 36 |
| i’m | 33 |
| strippers | 27 |
| bitches | 25 |
| chorus | 25 |
| message | 24 |
| crazy | 23 |
| shit | 21 |
| money | 20 |
| verse | 20 |
| feel | 19 |
| support | 18 |
| va | 18 |
| wanna | 18 |
| niggas | 17 |
| flames | 16 |
| voom | 16 |
| boom | 15 |
| girls | 15 |
| boy | 14 |
| burn | 14 |
| fuck | 14 |
| hell | 14 |
| night | 14 |
| em | 13 |
| baby | 11 |
| dollar | 11 |
PinkFridayRomanReloadedTheReUp_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
#head(20) %>%
wordcloud2()
## Joining, by = "word"
From what we can see here in this album, within both the knit chart/word cloud her top 30, most commonly used vulgar words we know include: bitches, shit, and fuck. Depending on your opinions, you can include “hell” as well, since some don’t consider “hell” to be a bad word, but regardless the variety of explicit words have declined. To go off of this, there are no slang terms that represents a vulgar word either. Therefore, there are only 4 different types of explicit words used here.
Next up, we will look at her Pinkprint album which is her fourth studio album; this album was released on December 15, 2014.
Lyrics_ThePinkprint <-fromJSON("Lyrics_ThePinkprint.json")
as.data.frame(Lyrics_ThePinkprint) -> pinkprint_df
pinkprint_df$tracks.song -> lyrics
lyrics %>%
unnest_tokens(word,lyrics) -> pinkprint_words
pinkprint_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
head(30) %>%
knitr::kable()
## Joining, by = "word"
| word | n |
|---|---|
| love | 124 |
| chorus | 97 |
| dem | 76 |
| nicki | 70 |
| pum | 64 |
| wanna | 64 |
| minaj | 61 |
| niggas | 61 |
| bitches | 60 |
| nigga | 54 |
| real | 52 |
| verse | 51 |
| bitch | 49 |
| fuck | 47 |
| yeah | 45 |
| feelin | 42 |
| daddy | 34 |
| pat | 34 |
| uh | 32 |
| gotta | 31 |
| night | 31 |
| heart | 29 |
| i’ma | 29 |
| play | 29 |
| rider | 29 |
| em | 26 |
| girls | 26 |
| pretty | 26 |
| boy | 24 |
| bout | 23 |
pinkprint_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
#head(20) %>%
wordcloud2()
## Joining, by = "word"
In this album, we can see that the most commonly used explicit words include: bitch(es) and fuck. In terms of slang terms, the only word she uses the most is “pum,” which is a reference to lady parts.” Otherwise her usage of explicit words have gone down again, even further than the last album we just looked at. With that being said, this album only has 3 different types of words, allowing the variety to decline again.
The last album we will take a look at, is her Queen album, which is the fifth studio album. This album was released on August 10, 2018.
Lyrics_Queen <-fromJSON("Lyrics_Queen.json")
as.data.frame(Lyrics_Queen) -> Queen_df
Queen_df$tracks.song -> lyrics5
lyrics5 %>%
unnest_tokens(word,lyrics) -> Queen_words
Queen_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
head(30) %>%
knitr::kable()
## Joining, by = "word"
| word | n |
|---|---|
| sir | 86 |
| yeah | 79 |
| chorus | 58 |
| nicki | 58 |
| na | 53 |
| fuck | 51 |
| em | 48 |
| bitch | 44 |
| verse | 44 |
| uh | 42 |
| ah | 38 |
| barbie | 37 |
| minaj | 36 |
| rich | 35 |
| love | 34 |
| shit | 33 |
| nigga | 31 |
| niggas | 31 |
| yo | 30 |
| ayy | 29 |
| bitches | 26 |
| burn | 26 |
| i’ma | 26 |
| real | 26 |
| fuckin | 25 |
| ganja | 25 |
| wit | 25 |
| dreams | 24 |
| sex | 23 |
| time | 23 |
Queen_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
#head(20) %>%
wordcloud2()
## Joining, by = "word"
Queen_words %>%
anti_join(stop_words) %>%
count(word, sort = TRUE) %>%
head(30) %>%
ggplot(aes(reorder(word, n), n, fill=word)) + geom_col() +
ggtitle("Top 20 Words From the Queen Album") +
theme( title = element_text(hjust =0.5)) +
labs (y="Number of Times Mentioned in the Album", x="Word") +
coord_flip()
## Joining, by = "word"
Lastly, as we can see going through her albums, from the very first to her most recent, she has definitely changed the way she raps and sings. Just from being a fan I can tell in her lyrics that she’s changed from being this hard rapper from the Bronx and having a one-sided fan base, to opening up to a more wide range audience and being open-minded to the music she produces (for example, from rap to pop). With that being said, you can tell she still mixes in her roots by having some of those explicit words wiggled into her lyrics, but that’s not really what she’s about now hence her change over time.
To go along with this within her last album, we can see that she uses the words: fuck(in), bitches and shit. Despite the fact that she did increase her explicit word count from the last album, the wording isn’t too crazy and two of the four words are the same word just a different variation.
The last thing I would like to do is just emphasize how much her explicit word count has gone down. What I will illustrate here, are specific words and the frequency of that word throughout the albums, though a merged, color coded, bar chart with all of the albums.
First, we will look at all the common English explicit words.
pinkfriday <- fromJSON("Lyrics_PinkFriday.json")
as.data.frame(pinkfriday) -> pinkfriday
pinkfriday$tracks.song -> lyrics_pinkfriday
lyrics_pinkfriday %>%
mutate(album = "Pink Friday") -> lyrics_pinkfriday
roman <- fromJSON("Lyrics_PinkFridayRomanReloaded.json")
as.data.frame(roman) -> roman
roman$tracks.song -> lyrics_roman
lyrics_roman %>%
mutate(album = "Roman Reloaded") -> lyrics_roman
romanre <- fromJSON("Lyrics_PinkFridayRomanReloadedTheReUp.json")
as.data.frame(romanre) -> romanre
romanre$tracks.song -> lyrics_romanre
lyrics_romanre %>%
mutate(album = "Roman Reloaded The ReUp") -> lyrics_romanre
print <- fromJSON("Lyrics_ThePinkprint.json")
as.data.frame(print) -> print
print$tracks.song -> lyrics_print
lyrics_print %>%
mutate(album = "ThePinkprint") -> lyrics_print
queen <- fromJSON("Lyrics_Queen.json")
as.data.frame(queen) -> queen
queen$tracks.song -> lyrics_queen
lyrics_queen %>%
mutate(album = "Queen") -> lyrics_queen
lyrics_pinkfriday %>%
full_join(lyrics_roman) %>%
full_join(lyrics_romanre) %>%
full_join(lyrics_queen) %>%
full_join(lyrics_print) -> nm_lyrics
## Joining, by = c("_type", "annotation_count", "api_path", "artist_names", "full_title", "header_image_thumbnail_url", "header_image_url", "id", "instrumental", "lyrics_owner_id", "lyrics_state", "lyrics_updated_at", "path", "pyongs_count", "song_art_image_thumbnail_url", "song_art_image_url", "stats", "title", "title_with_featured", "updated_by_human_at", "url", "primary_artist", "artist", "lyrics", "album")
## Joining, by = c("_type", "annotation_count", "api_path", "artist_names", "full_title", "header_image_thumbnail_url", "header_image_url", "id", "instrumental", "lyrics_owner_id", "lyrics_state", "lyrics_updated_at", "path", "pyongs_count", "song_art_image_thumbnail_url", "song_art_image_url", "stats", "title", "title_with_featured", "updated_by_human_at", "url", "primary_artist", "artist", "lyrics", "album")
## Joining, by = c("_type", "annotation_count", "api_path", "artist_names", "full_title", "header_image_thumbnail_url", "header_image_url", "id", "instrumental", "lyrics_owner_id", "lyrics_state", "lyrics_updated_at", "path", "pyongs_count", "song_art_image_thumbnail_url", "song_art_image_url", "stats", "title", "title_with_featured", "updated_by_human_at", "url", "primary_artist", "artist", "lyrics", "album")
## Joining, by = c("_type", "annotation_count", "api_path", "artist_names", "full_title", "header_image_thumbnail_url", "header_image_url", "id", "instrumental", "lyrics_owner_id", "lyrics_state", "lyrics_updated_at", "path", "pyongs_count", "song_art_image_thumbnail_url", "song_art_image_url", "stats", "title", "title_with_featured", "updated_by_human_at", "url", "primary_artist", "artist", "lyrics", "album")
nm_lyrics %>%
unnest_tokens(word, lyrics) -> nm_words
nm_words %>%
filter(word %in% c("fuck", "bitch", "ho", "shit", "motherfucker", "ass")) %>%
count(word, album, sort = TRUE) %>%
ggplot(aes(word, n, fill = album)) + geom_col()
The order of the albums on the side are a little off, so just in case you forgot the order of her album, they are: Pink Friday, Roman Reloaded, Roman Reloaded The Re-Up, The Pink print and Queen. When comparing the words, we can already see that starting with her third album the most common explicit words are almost non-existent with the third album. For the last two albums, we can see that it increased but stil not as much as her first two albums; on top of that each word isn’t prevalent within each album.
I will now be doing the same concept, but having the focus obe on Trinidadian vulgar/explicit words.
pinkfriday <- fromJSON("Lyrics_PinkFriday.json")
as.data.frame(pinkfriday) -> pinkfriday
pinkfriday$tracks.song -> lyrics_pinkfriday
lyrics_pinkfriday %>%
mutate(album = "Pink Friday") -> lyrics_pinkfriday
roman <- fromJSON("Lyrics_PinkFridayRomanReloaded.json")
as.data.frame(roman) -> roman
roman$tracks.song -> lyrics_roman
lyrics_roman %>%
mutate(album = "Roman Reloaded") -> lyrics_roman
romanre <- fromJSON("Lyrics_PinkFridayRomanReloadedTheReUp.json")
as.data.frame(romanre) -> romanre
romanre$tracks.song -> lyrics_romanre
lyrics_romanre %>%
mutate(album = "Roman Reloaded The ReUp") -> lyrics_romanre
queen <- fromJSON("Lyrics_Queen.json")
as.data.frame(queen) -> queen
queen$tracks.song -> lyrics_queen
lyrics_queen %>%
mutate(album = "Queen") -> lyrics_queen
print <- fromJSON("Lyrics_ThePinkprint.json")
as.data.frame(print) -> print
print$tracks.song -> lyrics_print
lyrics_print %>%
mutate(album = "ThePinkprint") -> lyrics_print
lyrics_pinkfriday %>%
full_join(lyrics_roman) %>%
full_join(lyrics_romanre) %>%
full_join(lyrics_queen) %>%
full_join(lyrics_print) -> nm_lyrics
## Joining, by = c("_type", "annotation_count", "api_path", "artist_names", "full_title", "header_image_thumbnail_url", "header_image_url", "id", "instrumental", "lyrics_owner_id", "lyrics_state", "lyrics_updated_at", "path", "pyongs_count", "song_art_image_thumbnail_url", "song_art_image_url", "stats", "title", "title_with_featured", "updated_by_human_at", "url", "primary_artist", "artist", "lyrics", "album")
## Joining, by = c("_type", "annotation_count", "api_path", "artist_names", "full_title", "header_image_thumbnail_url", "header_image_url", "id", "instrumental", "lyrics_owner_id", "lyrics_state", "lyrics_updated_at", "path", "pyongs_count", "song_art_image_thumbnail_url", "song_art_image_url", "stats", "title", "title_with_featured", "updated_by_human_at", "url", "primary_artist", "artist", "lyrics", "album")
## Joining, by = c("_type", "annotation_count", "api_path", "artist_names", "full_title", "header_image_thumbnail_url", "header_image_url", "id", "instrumental", "lyrics_owner_id", "lyrics_state", "lyrics_updated_at", "path", "pyongs_count", "song_art_image_thumbnail_url", "song_art_image_url", "stats", "title", "title_with_featured", "updated_by_human_at", "url", "primary_artist", "artist", "lyrics", "album")
## Joining, by = c("_type", "annotation_count", "api_path", "artist_names", "full_title", "header_image_thumbnail_url", "header_image_url", "id", "instrumental", "lyrics_owner_id", "lyrics_state", "lyrics_updated_at", "path", "pyongs_count", "song_art_image_thumbnail_url", "song_art_image_url", "stats", "title", "title_with_featured", "updated_by_human_at", "url", "primary_artist", "artist", "lyrics", "album")
nm_lyrics %>%
unnest_tokens(word, lyrics) -> nm_words
nm_words %>%
filter(word %in% c("badoom", "bass", "pum", "bang")) %>%
count(word, album, sort = TRUE) %>%
ggplot(aes(word, n, fill = album)) + geom_col()
As we can see here, the words aren’t as consistent as the explicit, English words. She probably did this of course because she’s trying to connect with her American fan base more as well as we wouldn’t know these words in her lyrics. Nicki more than likely threw in these words to try and keep the rhyming going throughout her verse. This could also have happened depending on what type of song she produced, for example if it’s more of a Trinidad/Jamaican song compared to flat out pop and rap.
All in all, even though I’m a huge Barb (which is what she calls her fan base) I was still shocked with the overall results of the collected data. I always wondered what made her shift, and how her shift was so effective; it’s definitely through her lyrics. Although she’s still the same girl from Queens, you can tell in her music that she’s turned from this hard rapper to a fun, bubbly artist. Through the music she’s produced, her illustrations through album covers, and the overall decline in explicit words I believe Nicki has definitely matured and grown into a more respectable artist no matter who the audience is.