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.