import lyricsgenius
genius = lyricsgenius.Genius("epFCxujgBe-Y6WrkZedI8kerKxiCpR6Rh0DAHYNlKDf9B4H1nXTdZIkj7krNUHVV")
song = genius.search_song("Too Many Nights", "Metro Boomin")Searching for "Too Many Nights" by Metro Boomin...
Done.
Using the data gathered from the Spotify API, we now want to extract and process the lyrics for each song. This is accomplished through scraping textual information, namely lyrical data, from the Genius Lyrics website. Following extraction, the lyrics are thoroughly processed and cleaned before undergoing sentiment analysis.
To get started, the script below imports lyricsgenius, a fundamental package libary allowing for web scraping of the Genius Lyrics website to retrieve the lyrics of any given song. Through the initialization of the genius variable, one can access the Genius API and retrieve the lyrics of any given song, such as “Too Many Nights” by Metro Boomin.
import lyricsgenius
genius = lyricsgenius.Genius("epFCxujgBe-Y6WrkZedI8kerKxiCpR6Rh0DAHYNlKDf9B4H1nXTdZIkj7krNUHVV")
song = genius.search_song("Too Many Nights", "Metro Boomin")Searching for "Too Many Nights" by Metro Boomin...
Done.
First, we define a function that retrieves the lyrics for any song and artist from the Genius database. As shown below, it first searches for the track using the provided name and artist and then extracts the lyrics from the search results.
def get_song_lyrics(song_name, song_artist):
song_genius = genius.search_song(song_name, song_artist)
song_lyrics = song_genius.lyrics.partition("Lyrics")[2]
# Remove any numbers followed by 'Embed'
song_lyrics = re.sub(r"[\[].*?[\]]|\d+Embed", "", song_lyrics)
# Remove text between square brackets
song_lyrics = re.sub(r"(\-[A-Za-z]+\-)", "", song_lyrics)
song_lyrics = re.sub(r'\d+', '', song_lyrics)
return song_lyricsUsing the genius package, we define a function to fetch the lyrics of a song given the track name and artist. Once retrieved, the next step is to pre-process the textual data. This involves a cleansing process to eliminate profanity and patterns that may hinder the overall readability. The Python script contains the following steps:
The function detect_and_translate below is designed to identify and translate text into a specified language, specifically English. It first checks the language of the original text and compares it to the target language. If the detected language differs from the target language, the function utilizes GoogleTranslator to translate the input text into the target language (English).
# Function to detect and translate text
def detect_and_translate(track_lyrics, target_lang='en'):
if detect(track_lyrics) == target_lang:
return track_lyrics
translator = GoogleTranslator(source='auto', target=target_lang)
return translator.translate(track_lyrics)We also develop various functions to support the preprocessing of textual data, streamlining the process and improving the accuracy of the final output. Among these functions are a method for removing punctuation from a given string of lyrics and a spell-checker that automatically finds and corrects any spelling errors.
def remove_punctuation(text):
no_punct = ""
for char in text:
if char not in string.punctuation:
no_punct = no_punct + char
return no_punct # return unpunctuated string# Spell Check + Censor
spell = SpellChecker()
def spell_check(word_list_str):
word_corrected_list = []
for word in word_list_str.split():
word_corrected = spell.correction(word)
if word_corrected is not None:
word_corrected_list.append(word_corrected)
else:
word_corrected_list.append(word)
return word_corrected_listThe clean_song_lyrics function is designed to simplify the processing of lyrics for a specific song and artist. The function extracts the lyrics from the Genius database and performs a series of modifications, including expanding contractions, removing repetitive phrases, and converting the text to lowercase. It also ensures that the spelling is correct and eliminates any profanity. The end result is a cleaned set of lyrics, tokenized and encoded as a list of words.
def clean_song_lyrics(song_name, artist_name):
genius_lyrics = get_song_lyrics(song_name, artist_name)
lyrics_en = detect_and_translate(genius_lyrics, "en")
no_contract = [contractions.fix(word) for word in lyrics_en.split()]
no_contract_str = " ".join(no_contract).lower() # lowercase
no_contract_str = re.sub(r"nana|lala", "", no_contract_str)
corrected = spell_check(no_contract_str) # <5> # Spell Check + Censor
censored = profanity.censor(" ".join(corrected), censor_char="")
no_punct = remove_punctuation(censored) # <6> # Remove Punctuation
tokenized = word_tokenize(no_punct) # Tokenize
strencode = [i.encode("ascii", "ignore") for i in tokenized] # Encode() method
return [i.decode() for i in strencode] # Decode() methodWe employ the Natural Language Toolkit (NLTK) library and its WordNetLemmatizer tool to filter out stopwords. By removing frequently used words like “the,” “and,” or “of,” the resulting text becomes more concise, enabling a more thorough examination of the lyrics and their underlying message.
def remove_stopwords_lyrics(clean_lyrics_decode):
stopword = stopwords.words("english")
stopword.extend(["yeah", "nanana", "nana", "oh", "la"])
return [word for word in clean_lyrics_decode if word not in stopword]Next, we define a function to perform lemmatization on a set of words using the WordNetLemmatizer class from the NLTK library. Lemmatization helps to standardize words and reduce their complexity by reducing words to their root or base form. Our function specifically targets verbs and transforms different variations of the same verb into its most basic form.
from nltk.corpus import stopwords, wordnet
def get_wordnet_pos(tag):
if tag.startswith("J"):
return wordnet.ADJ
elif tag.startswith("V"):
return wordnet.VERB
elif tag.startswith("N"):
return wordnet.NOUN
elif tag.startswith("R"):
return wordnet.ADV
else:
return wordnet.NOUNfrom nltk.tag import pos_tag
from nltk import pos_tag
def word_lemmatize(lyrics_cleaned): # clean_lyrics_decode):
pos_tags = pos_tag(lyrics_cleaned)
wordnet_pos = [(word, get_wordnet_pos(pos_tag)) for (word, pos_tag) in pos_tags]
wnl = WordNetLemmatizer() # Lemmatize Lyrics
return [wnl.lemmatize(word, tag) for word, tag in wordnet_pos]In summary, the code above defines a function that makes use of the WordNetLemmatizer class from the NLTK library to conduct lemmatization specifically targeting verbs, thereby converting words to their most basic form.
Subsequently, the process involves the implementation of pipeline classes to carry out predictions using models accessible in the Hub. The code imports and employs multiple transformer models specifically designed for text classification and sentiment analysis. Specifically, the following procedure creates three distinct pipelines, each equipped with different models that facilitate the assessment of emotions and sentiment in textual content.
import transformers
from transformers import pipeline
# Initialize Genius API and sentiment classifiers
classifiers = [
pipeline("text-classification", model='bhadresh-savani/distilbert-base-uncased-emotion', return_all_scores=True),
pipeline("text-classification", model='cardiffnlp/twitter-roberta-base-sentiment', return_all_scores=True),
pipeline("sentiment-analysis", return_all_scores=True)
]No model was supplied, defaulted to distilbert-base-uncased-finetuned-sst-2-english and revision af0f99b (https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english).
Using a pipeline without specifying a model name and revision in production is not recommended.
The get_lyric_sentiment function takes in pre-processed lyrics as input and produces a dictionary of sentiment scores. It leverages three distinct classifiers to calculate the scores and aggregates them into a final result. For instance, one of these classifiers is the distilbert-base-uncased-emotion model, specifically trained to detect “emotions in texts such as sadness, joy, love, anger, fear, and surprise”.
# Function to perform sentiment analysis
def get_lyric_sentiment(lyrics, classifiers):
text = ' '.join(lyrics)
scores = {}
for classifier in classifiers:
try:
predictions = classifier(text, truncation=True)
for prediction in predictions[0]:
scores[prediction['label']] = prediction['score']
except Exception as e:
print(f"Error during sentiment analysis: {e}")
return scoresIf the lyric sequence contains more than 512 tokens, it will trigger an error message indicating an exception encountered in the ‘embeddings’ layer. However, we have implemented measures to properly manage lyric sequences that exceed 512 words in the function mentioned above.
To summarize, the code efficiently collects data and performs text analysis on every song in a playlist. Specifically, it systematically processes a list of tracks and corresponding artists while simultaneously conducting a thorough cleaning procedure on the lyrics. The cleaning process involves removing all nonessential characters, resulting in a more precise depiction of the song’s content. The outcome is a comprehensive frequency analysis of each word in a song’s lyrics, providing deeper insights into the overall conveyed message.
Additionally, the program computes a sentiment score for each song based on the lyrics, indicating whether the lyrics are positive, negative, or neutral. It also collects information about the song and artist, such as the release date, length, popularity, and genre. Finally, the program compiles all this information into a dataframe for further analysis.
track_data = []
for i, track in all_tracks.iterrows():
song_name = track["name"] #.partition(" (")[0]
song_name = track['name'].partition(" (with")[0]
song_name = song_name.partition(" - From")[0]
artist_name = track["artist"]
try:
track_lyrics = clean_song_lyrics(song_name, artist_name)
stopwords_removed = remove_stopwords_lyrics(track_lyrics)
lemmatized = word_lemmatize(stopwords_removed)
sentiment_scores = get_lyric_sentiment(stopwords_removed, classifiers)
track_info = track.to_dict()
track_info.update(sentiment_scores)
track_info["lyrics"] = track_lyrics
track_info["stopwords_removed"] = stopwords_removed
track_info["lemmatized"] = lemmatized
track_data.append(track_info)
except Exception as e:
print(f"Error processing track {track['name']} by {track['artist']}: {e}")
df_tracks = pd.DataFrame(track_data)Searching for "Please Please Please" by Sabrina Carpenter...
Done.
Searching for "Si Antes Te Hubiera Conocido" by KAROL G...
Done.
Searching for "BIRDS OF A FEATHER" by Billie Eilish...
Done.
Searching for "Good Luck, Babe!" by Chappell Roan...
Done.
Searching for "A Bar Song (Tipsy)" by Shaboozey...
Done.
Searching for "Not Like Us" by Kendrick Lamar...
Done.
Error during sentiment analysis: The expanded size of the tensor (519) must match the existing size (514) at non-singleton dimension 1. Target sizes: [1, 519]. Tensor sizes: [1, 514]
Searching for "MILLION DOLLAR BABY" by Tommy Richman...
Done.
Searching for "Too Sweet" by Hozier...
Done.
Searching for "Beautiful Things" by Benson Boone...
Done.
Searching for "I Had Some Help (Feat. Morgan Wallen)" by Post Malone...
Done.
Searching for "Espresso" by Sabrina Carpenter...
Done.
Searching for "i like the way you kiss me" by Artemas...
Done.
Searching for "Stargazing" by Myles Smith...
Done.
Searching for "LUNCH" by Billie Eilish...
Done.
Searching for "End of Beginning" by Djo...
Done.
Searching for "we can't be friends (wait for your love)" by Ariana Grande...
Done.
Searching for "Lose Control" by Teddy Swims...
Done.
Searching for "Tough" by Quavo...
Done.
Searching for "Austin" by Dasha...
Done.
Searching for "I Can Do It With a Broken Heart" by Taylor Swift...
Done.
Searching for "Houdini" by Eminem...
Done.
Searching for "Nasty" by Tinashe...
Done.
Searching for "Belong Together" by Mark Ambor...
Done.
Searching for "Slow It Down" by Benson Boone...
Done.
Searching for "HOT TO GO!" by Chappell Roan...
Done.
Searching for "GIRLS" by The Kid LAROI...
Done.
Searching for "greedy" by Tate McRae...
Done.
Searching for "Move" by Adam Port...
Done.
Searching for "Fortnight (feat. Post Malone)" by Taylor Swift...
Done.
Searching for "Saturn" by SZA...
Done.
Searching for "28" by Zach Bryan...
Done.
Searching for "Close To You" by Gracie Abrams...
Done.
Searching for "the boy is mine" by Ariana Grande...
Done.
Searching for "Stick Season" by Noah Kahan...
Done.
Searching for "I Don't Wanna Wait" by David Guetta...
Done.
Searching for "Smeraldo Garden Marching Band (feat. Loco)" by Jimin...
Done.
Searching for "Stumblin' In" by CYRIL...
Done.
Searching for "360" by Charli xcx...
Done.
Searching for "Rockstar" by LISA...
Done.
Searching for "One Of The Girls" by The Weeknd...
Done.
Searching for "Scared To Start" by Michael Marcagi...
Done.
Searching for "Lies Lies Lies" by Morgan Wallen...
Done.
Searching for "feelslikeimfallinginlove" by Coldplay...
Done.
Searching for "Parking Lot" by Mustard...
Done.
Searching for "Gata Only" by FloyyMenor...
Done.
Searching for "BAND4BAND (feat. Lil Baby)" by Central Cee...
Done.
Searching for "Santa" by Rvssian...
Done.
Searching for "Magnetic" by ILLIT...
Done.
Searching for "Water" by Tyla...
Done.
Searching for "Illusion" by Dua Lipa...
Done.
Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation.
#df_tracks = pd.DataFrame(track_data)
df_tracks.to_csv("../assets/data/all_tracks+lyrics.csv", index=False)df_tracks| name | track_id | album | artist | artist_id | release_date | length | popularity | artist_pop | artist_genres | ... | fear | surprise | LABEL_0 | LABEL_1 | LABEL_2 | NEGATIVE | POSITIVE | lyrics | stopwords_removed | lemmatized | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Please Please Please | 5N3hjp1WNayUPZrA8kJmJP | Please Please Please | Sabrina Carpenter | 74KM79TiuVKeVCqs8QtB0B | 2024-06-06 | 186365 | 98 | 91 | ['pop'] | ... | 0.000637 | 0.000841 | 0.251058 | 0.542962 | 0.205980 | 0.857851 | 0.142149 | [i, know, i, have, good, judgment, i, know, i,... | [know, good, judgment, know, good, taste, funn... | [know, good, judgment, know, good, taste, funn... |
| 1 | Si Antes Te Hubiera Conocido | 6WatFBLVB0x077xWeoVc2k | Si Antes Te Hubiera Conocido | KAROL G | 790FomKkXshlbRYZFtlgla | 2024-06-21 | 195824 | 91 | 89 | ['reggaeton', 'reggaeton colombiano', 'trap la... | ... | 0.001239 | 0.000147 | 0.030611 | 0.523545 | 0.445844 | 0.966250 | 0.033750 | [what, what, we, are, ready, to, rule, summer,... | [ready, rule, summer, started, fire, would, me... | [ready, rule, summer, start, fire, would, meet... |
| 2 | BIRDS OF A FEATHER | 6dOtVTDdiauQNBQEDOtlAB | HIT ME HARD AND SOFT | Billie Eilish | 6qqNVTkY8uBg9cP3Jd7DAH | 2024-05-17 | 210373 | 98 | 94 | ['art pop', 'pop'] | ... | 0.434426 | 0.034063 | 0.122799 | 0.504202 | 0.372999 | 0.959893 | 0.040107 | [i, want, you, to, stay, til, i, am, in, the, ... | [want, stay, til, grave, til, rot, away, dead,... | [want, stay, til, grave, til, rot, away, dead,... |
| 3 | Good Luck, Babe! | 0WbMK4wrZ1wFSty9F7FCgu | Good Luck, Babe! | Chappell Roan | 7GlBOeep6PqTfFi59PTUUN | 2024-04-05 | 218423 | 94 | 86 | ['indie pop', 'pov: indie'] | ... | 0.000427 | 0.000471 | 0.343443 | 0.554660 | 0.101897 | 0.981645 | 0.018355 | [it, is, fine, it, is, cool, you, can, say, th... | [fine, cool, say, nothing, know, truth, guess,... | [fine, cool, say, nothing, know, truth, guess,... |
| 4 | A Bar Song (Tipsy) | 2FQrifJ1N335Ljm3TjTVVf | A Bar Song (Tipsy) | Shaboozey | 3y2cIKLjiOlp1Np37WiUdH | 2024-04-12 | 171291 | 93 | 81 | ['pop rap'] | ... | 0.009928 | 0.003751 | 0.057218 | 0.763994 | 0.178788 | 0.994249 | 0.005751 | [my, baby, want, a, barking, she, is, been, te... | [baby, want, barking, telling, night, long, ga... | [baby, want, bark, tell, night, long, gasoline... |
| 5 | Not Like Us | 6AI3ezQ4o3HUoP6Dhudph3 | Not Like Us | Kendrick Lamar | 2YZyLoL8N0Wb9xBt1NhZWg | 2024-05-04 | 274192 | 96 | 92 | ['conscious hip hop', 'hip hop', 'rap', 'west ... | ... | 0.007257 | 0.004582 | NaN | NaN | NaN | 0.997331 | 0.002669 | [psst, i, see, dead, people, mustard, on, the,... | [psst, see, dead, people, mustard, beat, musta... | [psst, see, dead, people, mustard, beat, musta... |
| 6 | MILLION DOLLAR BABY | 7fzHQizxTqy8wTXwlrgPQQ | MILLION DOLLAR BABY | Tommy Richman | 1WaFQSHVGZQJTbf0BdxdNo | 2024-04-26 | 155151 | 86 | 83 | ['chill abstract hip hop'] | ... | 0.032734 | 0.004189 | 0.280416 | 0.655696 | 0.063888 | 0.992852 | 0.007148 | [do, it, baby, do, what, i, should, think, do,... | [baby, think, baby, could, think, baby, think,... | [baby, think, baby, could, think, baby, think,... |
| 7 | Too Sweet | 4IadxL6BUymXlh8RCJJu7T | Unheard | Hozier | 2FXC3k01G6Gw61bmprjgqS | 2024-03-22 | 251424 | 83 | 85 | ['irish singer-songwriter', 'modern rock', 'po... | ... | 0.002293 | 0.001093 | 0.120370 | 0.648945 | 0.230685 | 0.984314 | 0.015686 | [it, can, not, be, said, i, am, an, early, bir... | [said, early, bird, clock, say, word, baby, ne... | [say, early, bird, clock, say, word, baby, nev... |
| 8 | Beautiful Things | 6tNQ70jh4OwmPGpYy6R2o9 | Beautiful Things | Benson Boone | 22wbnEMDvgVIAGdFeek6ET | 2024-01-18 | 180304 | 91 | 85 | ['singer-songwriter pop'] | ... | 0.996488 | 0.000843 | 0.033857 | 0.318134 | 0.648009 | 0.012351 | 0.987649 | [for, a, while, there, it, was, rough, but, la... | [rough, lately, better, last, four, cold, reme... | [rough, lately, well, last, four, cold, rememb... |
| 9 | I Had Some Help (Feat. Morgan Wallen) | 7221xIgOnuakPdLqT0F3nP | I Had Some Help | Post Malone | 246dkjvS1zLTtiykXe5h60 | 2024-05-10 | 178205 | 95 | 90 | ['dfw rap', 'melodic rap', 'pop', 'rap'] | ... | 0.000706 | 0.000557 | 0.210037 | 0.717910 | 0.072052 | 0.998456 | 0.001544 | [you, got, a, got, ta, nerve, do, not, you, ba... | [got, got, ta, nerve, baby, hit, curb, made, t... | [get, get, ta, nerve, baby, hit, curb, make, t... |
| 10 | Espresso | 2qSkIjg1o9h3YT9RAgYN75 | Espresso | Sabrina Carpenter | 74KM79TiuVKeVCqs8QtB0B | 2024-04-12 | 175459 | 99 | 91 | ['pop'] | ... | 0.027107 | 0.004054 | 0.070886 | 0.800304 | 0.128810 | 0.992557 | 0.007443 | [now, he, is, thinking, about, me, every, nigh... | [thinking, every, night, sweet, guess, say, sl... | [think, every, night, sweet, guess, say, sleep... |
| 11 | i like the way you kiss me | 2GxrNKugF82CnoRFbQfzPf | i like the way you kiss me | Artemas | 0PCCGZ0wGLizHt2KZ7hhA2 | 2024-03-19 | 142514 | 95 | 81 | [] | ... | 0.001377 | 0.001145 | 0.034661 | 0.521730 | 0.443609 | 0.984495 | 0.015505 | [i, like, the, way, you, kiss, me, i, like, th... | [like, way, kiss, like, way, uh, like, way, ki... | [like, way, kiss, like, way, uh, like, way, ki... |
| 12 | Stargazing | 3Vr3zh0r7ALn8VLqCiRR10 | Stargazing | Myles Smith | 3bO19AOone0ubCsfDXDtYt | 2024-05-10 | 172533 | 92 | 78 | ['singer-songwriter pop'] | ... | 0.000203 | 0.000153 | 0.479969 | 0.450779 | 0.069251 | 0.994339 | 0.005661 | [oohooh, oohooh, oohooh, time, stood, still, j... | [oohooh, oohooh, oohooh, time, stood, still, l... | [oohooh, oohooh, oohooh, time, stand, still, l... |
| 13 | LUNCH | 629DixmZGHc7ILtEntuiWE | HIT ME HARD AND SOFT | Billie Eilish | 6qqNVTkY8uBg9cP3Jd7DAH | 2024-05-17 | 179586 | 94 | 94 | ['art pop', 'pop'] | ... | 0.004807 | 0.005700 | 0.226971 | 0.703515 | 0.069515 | 0.995480 | 0.004520 | [oh, mmmm, i, could, eat, that, girl, for, lun... | [mmmm, could, eat, girl, lunch, dances, tongue... | [mmmm, could, eat, girl, lunch, dance, tongue,... |
| 14 | End of Beginning | 3qhlB30KknSejmIvZZLjOD | DECIDE | Djo | 5p9HO3XC5P3BLxJs5Mtrhm | 2022-09-16 | 159245 | 93 | 77 | ['pov: indie', 'psychedelic pop'] | ... | 0.018631 | 0.004027 | 0.159378 | 0.691760 | 0.148862 | 0.964887 | 0.035113 | [just, one, more, tear, to, cry, one, teardrop... | [one, tear, cry, one, teardrop, eye, better, s... | [one, tear, cry, one, teardrop, eye, well, sav... |
| 15 | we can't be friends (wait for your love) | 46kspZSY3aKmwQe7O77fCC | eternal sunshine | Ariana Grande | 66CXWjxzNUsdJxJ2JdwvnR | 2024-03-08 | 228639 | 86 | 91 | ['pop'] | ... | 0.000605 | 0.000460 | 0.063339 | 0.507926 | 0.428735 | 0.996296 | 0.003704 | [i, did, not, think, you, would, understand, m... | [think, would, understand, could, ever, even, ... | [think, would, understand, could, ever, even, ... |
| 16 | Lose Control | 17phhZDn6oGtzMe56NuWvj | I've Tried Everything But Therapy (Part 1) | Teddy Swims | 33qOK5uJ8AR2xuQQAhHump | 2023-09-15 | 210688 | 90 | 82 | [] | ... | 0.000485 | 0.000120 | 0.557471 | 0.412347 | 0.030183 | 0.998184 | 0.001816 | [something, is, got, a, hold, of, me, lately, ... | [something, got, hold, lately, know, anymore, ... | [something, get, hold, lately, know, anymore, ... |
| 17 | Tough | 22DH8NChecsgPxDjA4pqer | Tough | Quavo | 0VRj0yCOv2FXJNP47XQnx5 | 2024-07-03 | 188828 | 85 | 79 | ['atl hip hop', 'melodic rap', 'rap', 'trap'] | ... | 0.041581 | 0.004940 | 0.152115 | 0.734467 | 0.113419 | 0.977612 | 0.022388 | [tough, like, the, scuff, on, a, pair, of, old... | [tough, like, scuff, pair, old, leather, boots... | [tough, like, scuff, pair, old, leather, boot,... |
| 18 | Austin | 4NJqhmkGN042BrvHoMKUrJ | Austin | Dasha | 7Ez6lTtSMjMf2YSYpukP1I | 2023-11-17 | 171782 | 41 | 75 | [] | ... | 0.002042 | 0.000548 | 0.332335 | 0.619888 | 0.047777 | 0.997655 | 0.002345 | [we, had, a, plan, move, out, of, this, town, ... | [plan, move, town, baby, west, sand, talked, l... | [plan, move, town, baby, west, sand, talk, lat... |
| 19 | I Can Do It With a Broken Heart | 4q5YezDOIPcoLr8R81x9qy | THE TORTURED POETS DEPARTMENT | Taylor Swift | 06HL4z0CvFAxyc27GXpf02 | 2024-04-18 | 218004 | 87 | 100 | ['pop'] | ... | 0.001501 | 0.000734 | 0.268903 | 0.570628 | 0.160469 | 0.992031 | 0.007969 | [i, can, read, your, mind, she, is, having, th... | [read, mind, time, life, glittering, prime, li... | [read, mind, time, life, glitter, prime, light... |
| 20 | Houdini | 2HYFX63wP3otVIvopRS99Z | Houdini | Eminem | 7dGJo4pcD2V6oG8kP0tJRR | 2024-05-31 | 227239 | 94 | 91 | ['detroit hip hop', 'hip hop', 'rap'] | ... | 0.059232 | 0.007880 | 0.143081 | 0.793169 | 0.063750 | 0.994274 | 0.005726 | [hey, them, it, is, pal, uh, i, was, listening... | [hey, pal, uh, listening, album, good, lucky, ... | [hey, pal, uh, listen, album, good, lucky, gue... |
| 21 | Nasty | 6NjWCIYu1W8xa3HIvcIhd4 | Nasty | Tinashe | 0NIIxcxNHmOoyBx03SfTCD | 2024-04-12 | 176027 | 86 | 73 | ['alternative r&b', 'dance pop', 'metropopolis... | ... | 0.003332 | 0.002755 | 0.546907 | 0.416473 | 0.036621 | 0.997654 | 0.002346 | [because, it, feels, like, heaven, when, it, h... | [feels, like, heaven, hurts, bad, baby, put, l... | [feel, like, heaven, hurt, bad, baby, put, lik... |
| 22 | Belong Together | 5uQ7de4EWjb3rkcFxyEOpu | Belong Together | Mark Ambor | 11p2E654TTU8e0nZWBR4AL | 2024-02-16 | 148317 | 91 | 76 | ['singer-songwriter pop'] | ... | 0.005112 | 0.002070 | 0.018785 | 0.284418 | 0.696797 | 0.206854 | 0.793146 | [i, know, sleep, is, friends, with, death, but... | [know, sleep, friends, death, maybe, get, rest... | [know, sleep, friend, death, maybe, get, rest,... |
| 23 | Slow It Down | 51eSHglvG1RJXtL3qI5trr | Fireworks & Rollerblades | Benson Boone | 22wbnEMDvgVIAGdFeek6ET | 2024-04-05 | 161831 | 89 | 85 | ['singer-songwriter pop'] | ... | 0.669380 | 0.007431 | 0.709808 | 0.263808 | 0.026384 | 0.983390 | 0.016610 | [i, would, never, met, you, but, i, wanted, to... | [would, never, met, wanted, invite, party, wal... | [would, never, meet, want, invite, party, walk... |
| 24 | HOT TO GO! | 4xdBrk0nFZaP54vvZj0yx7 | The Rise and Fall of a Midwest Princess | Chappell Roan | 7GlBOeep6PqTfFi59PTUUN | 2023-09-22 | 184841 | 88 | 86 | ['indie pop', 'pov: indie'] | ... | 0.001401 | 0.002167 | 0.105176 | 0.805817 | 0.089007 | 0.988687 | 0.011313 | [five, six, five, six, seven, eight, i, could,... | [five, six, five, six, seven, eight, could, on... | [five, six, five, six, seven, eight, could, on... |
| 25 | GIRLS | 7z3PblAN3dH1JMewiRydkZ | GIRLS | The Kid LAROI | 2tIP7SsRs7vjIcLrU85W8J | 2024-06-28 | 152979 | 82 | 81 | ['australian hip hop'] | ... | 0.004544 | 0.001163 | 0.171786 | 0.707467 | 0.120747 | 0.994324 | 0.005676 | [fall, in, love, for, no, reason, fallin, uh, ... | [fall, love, reason, fallin, uh, turned, said,... | [fall, love, reason, fallin, uh, turn, say, gi... |
| 26 | greedy | 3rUGC1vUpkDG9CZFHMur1t | greedy | Tate McRae | 45dkTj5sMRSjrmBSBeiHym | 2023-09-15 | 131872 | 89 | 82 | ['pop'] | ... | 0.001383 | 0.000401 | 0.257882 | 0.650690 | 0.091428 | 0.970451 | 0.029549 | [wood, he, said, are, you, serious, i, have, t... | [wood, said, serious, tried, figure, next, nig... | [wood, say, serious, tried, figure, next, nigh... |
| 27 | Move | 1BJJbSX6muJVF2AK7uH1x4 | Move | Adam Port | 2loEsOijJ6XiGzWYFXMIRk | 2024-06-07 | 177598 | 86 | 72 | ['melodic house'] | ... | 0.001471 | 0.001813 | 0.125568 | 0.807287 | 0.067145 | 0.155766 | 0.844234 | [fire, burning, style, gunning, any, i, am, fe... | [fire, burning, style, gunning, feenin, want, ... | [fire, burning, style, gun, feenin, want, tast... |
| 28 | Fortnight (feat. Post Malone) | 2OzhQlSqBEmt7hmkYxfT6m | THE TORTURED POETS DEPARTMENT | Taylor Swift | 06HL4z0CvFAxyc27GXpf02 | 2024-04-18 | 228965 | 91 | 100 | ['pop'] | ... | 0.097827 | 0.012489 | 0.494738 | 0.437140 | 0.068122 | 0.984428 | 0.015572 | [i, should, have, been, taken, away, but, peop... | [taken, away, people, forgot, come, pick, alco... | [take, away, people, forget, come, pick, alcoh... |
| 29 | Saturn | 1bjeWoagtHmUKputLVyDxQ | Saturn | SZA | 7tYKF4w9nC0nq9CsPZTHyP | 2024-02-22 | 186191 | 90 | 89 | ['pop', 'r&b', 'rap'] | ... | 0.077055 | 0.002667 | 0.401661 | 0.494084 | 0.104256 | 0.998026 | 0.001974 | [if, there, is, another, universe, please, mak... | [another, universe, please, make, noise, noise... | [another, universe, please, make, noise, noise... |
| 30 | 28 | 5iJKGpnFfvbjZJeAtwXfCj | The Great American Bar Scene | Zach Bryan | 40ZNYROS4zLfyyBSs2PGe2 | 2024-07-04 | 233333 | 81 | 91 | ['classic oklahoma country'] | ... | 0.000493 | 0.000980 | 0.127071 | 0.535515 | 0.337414 | 0.918328 | 0.081672 | [you, took, a, train, to, the, south, side, of... | [took, train, south, side, boson, showed, old,... | [take, train, south, side, boson, show, old, m... |
| 31 | Close To You | 5MPi9e7z46wopyad10R6qx | Close To You | Gracie Abrams | 4tuJ0bMpJh08umKkEXKUI5 | 2024-06-07 | 225973 | 77 | 82 | ['alt z'] | ... | 0.080101 | 0.008835 | 0.207858 | 0.741581 | 0.050560 | 0.963049 | 0.036952 | [close, to, you, close, to, you, i, do, not, g... | [close, close, got, single, problem, provocati... | [close, close, get, single, problem, provocati... |
| 32 | the boy is mine | 0Lmbke3KNVFXtoH2mMSHCw | eternal sunshine | Ariana Grande | 66CXWjxzNUsdJxJ2JdwvnR | 2024-03-08 | 173639 | 86 | 91 | ['pop'] | ... | 0.009534 | 0.002129 | 0.181925 | 0.762790 | 0.055285 | 0.988922 | 0.011078 | [how, can, it, be, you, and, me, might, be, me... | [might, meant, unseen, want, scene, usually, u... | [might, mean, unseen, want, scene, usually, un... |
| 33 | Stick Season | 0mflMxspEfB0VbI1kyLiAv | Stick Season | Noah Kahan | 2RQXRUsr4IW1f3mKyKsy4B | 2022-10-14 | 182346 | 90 | 84 | ['pov: indie'] | ... | 0.104740 | 0.003200 | 0.516024 | 0.447031 | 0.036945 | 0.998780 | 0.001220 | [as, you, promised, me, that, i, was, more, th... | [promised, miles, combined, must, change, hear... | [promise, mile, combine, must, change, heart, ... |
| 34 | I Don't Wanna Wait | 331l3xABO0HMr1Kkyh2LZq | I Don't Wanna Wait | David Guetta | 1Cs0zKBU1kc0i8ypK3B9ai | 2024-04-05 | 149667 | 90 | 89 | ['big room', 'dance pop', 'edm', 'pop', 'pop d... | ... | 0.000750 | 0.001233 | 0.186699 | 0.667073 | 0.146227 | 0.926766 | 0.073234 | [let, us, make, tonight, the, weekend, i, do, ... | [let, us, make, tonight, weekend, want, waiait... | [let, u, make, tonight, weekend, want, waiait,... |
| 35 | Smeraldo Garden Marching Band (feat. Loco) | 1kPhV0KQui1phEpjnWIqUN | Smeraldo Garden Marching Band (feat. Loco) | Jimin | 1oSPZhvZMIrWW5I41kPkkY | 2024-06-28 | 182840 | 91 | 84 | ['k-pop'] | ... | 0.002519 | 0.001851 | 0.053019 | 0.700006 | 0.246975 | 0.068059 | 0.931941 | [say, oh, this, harmonys, just, for, you, oh, ... | [say, harmonys, say, love, introducing, began,... | [say, harmony, say, love, introduce, begin, tu... |
| 36 | Stumblin' In | 0h3Xy4V4apMraB5NuM8U7Z | Stumblin' In | CYRIL | 11kt6ggsdxvI8MhyeSMKom | 2023-11-10 | 213363 | 89 | 79 | [] | ... | 0.327841 | 0.003080 | 0.325368 | 0.583619 | 0.091013 | 0.995401 | 0.004599 | [our, love, is, alive, and, so, we, begin, foo... | [love, alive, begin, foolishly, laying, hearts... | [love, alive, begin, foolishly, lay, heart, ta... |
| 37 | 360 | 4w2GLmK2wnioVnb5CPQeex | BRAT | Charli xcx | 25uiPmTg16RbhZWAqwLBy5 | 2024-06-07 | 133805 | 84 | 85 | ['art pop', 'candy pop', 'metropopolis', 'pop'... | ... | 0.012352 | 0.004491 | 0.165593 | 0.730096 | 0.104311 | 0.991431 | 0.008569 | [i, went, my, own, way, and, i, made, it, i, a... | [went, way, made, favorite, reference, baby, c... | [go, way, make, favorite, reference, baby, cal... |
| 38 | Rockstar | 6vvPecFTmWxDfEJ6cYT1wa | Rockstar | LISA | 5L1lO4eRHmJ7a0Q6csE5cT | 2024-06-27 | 138213 | 90 | 79 | ['k-pop'] | ... | 0.036838 | 0.012582 | 0.055340 | 0.774254 | 0.170406 | 0.981867 | 0.018133 | [gold, teeth, sitting, on, the, dash, she, a, ... | [gold, teeth, sitting, dash, rockstar, make, f... | [gold, teeth, sit, dash, rockstar, make, favor... |
| 39 | One Of The Girls (with JENNIE, Lily Rose Depp) | 7CyPwkp0oE8Ro9Dd5CUDjW | The Idol Episode 4 (Music from the HBO Origina... | The Weeknd | 1Xyo4u8uXC1ZmMpatF05PJ | 2023-06-23 | 244684 | 91 | 93 | ['canadian contemporary r&b', 'canadian pop', ... | ... | 0.018034 | 0.003468 | 0.178038 | 0.707149 | 0.114813 | 0.885132 | 0.114868 | [lock, me, up, and, throw, away, the, key, he,... | [lock, throw, away, key, knows, get, best, for... | [lock, throw, away, key, know, get, best, forc... |
| 40 | Scared To Start | 3Pbp7cUCx4d3OAkZSCoNvn | Scared To Start | Michael Marcagi | 4j96cMcT8GRi11qbvo1cLQ | 2024-01-12 | 159636 | 88 | 73 | [] | ... | 0.993651 | 0.000680 | 0.467322 | 0.498693 | 0.033985 | 0.993110 | 0.006890 | [she, is, wearing, an, old, dress, walking, it... | [wearing, old, dress, walking, waiting, someon... | [wear, old, dress, walk, wait, someone, turn, ... |
| 41 | Lies Lies Lies | 7Fzl7QaTu47WyP9R5S5mh5 | Lies Lies Lies | Morgan Wallen | 4oUHIQIBe0LHzYfvXNW4QM | 2024-07-05 | 198068 | 80 | 90 | ['contemporary country'] | ... | 0.005516 | 0.000481 | 0.621788 | 0.354477 | 0.023735 | 0.990984 | 0.009016 | [i, do, not, come, down, with, the, sun, i, wi... | [come, sun, hate, morning, comes, thoughts, bo... | [come, sun, hate, morning, come, thought, body... |
| 42 | feelslikeimfallinginlove | 1YsU8rW2u8z4F0pwOBQ4Ea | feelslikeimfallinginlove | Coldplay | 4gzpq5DPGxSnKTe4SA8HAU | 2024-06-21 | 237803 | 83 | 88 | ['permanent wave', 'pop'] | ... | 0.001050 | 0.000178 | 0.352217 | 0.564125 | 0.083659 | 0.954148 | 0.045852 | [i, know, that, this, could, hurt, me, bad, i,... | [know, could, hurt, bad, know, could, feel, li... | [know, could, hurt, bad, know, could, feel, li... |
| 43 | Parking Lot | 4IFd7EVCyJsUHesBMXI8ju | Parking Lot | Mustard | 0YinUQ50QDB7ZxSCLyQ40k | 2024-06-21 | 172794 | 83 | 73 | ['cali rap', 'pop rap', 'rap', 'southern hip h... | ... | 0.091244 | 0.010612 | 0.097719 | 0.778541 | 0.123740 | 0.991387 | 0.008613 | [away, away, away, away, away, away, away, awa... | [away, away, away, away, away, away, away, awa... | [away, away, away, away, away, away, away, awa... |
| 44 | Gata Only | 6XjDF6nds4DE2BBbagZol6 | Gata Only | FloyyMenor | 7CvTknweLr9feJtRGrpDBy | 2024-02-02 | 222000 | 96 | 82 | ['reggaeton chileno'] | ... | 0.884537 | 0.003583 | 0.210103 | 0.690181 | 0.099717 | 0.996415 | 0.003585 | [hey, mommy, i, feel, you, far, away, tell, me... | [hey, mommy, feel, far, away, tell, want, goin... | [hey, mommy, feel, far, away, tell, want, go, ... |
| 45 | BAND4BAND (feat. Lil Baby) | 7iabz12vAuVQYyekFIWJxD | BAND4BAND (feat. Lil Baby) | Central Cee | 5H4yInM5zmHqpKIoMNAx4r | 2024-05-23 | 140733 | 91 | 82 | ['melodic drill', 'r&drill'] | ... | 0.031337 | 0.003643 | 0.158056 | 0.726879 | 0.115065 | 0.995000 | 0.005000 | [i, am, not, in, the, mood, because, my, fligh... | [mood, flight, delayed, jumped, private, jet, ... | [mood, flight, delay, jump, private, jet, ask,... |
| 46 | Santa | 5bi0gh89wRuH2OgjdAKFsb | Santa | Rvssian | 1fctva4kpRbg2k3v7kwRuS | 2024-04-04 | 193038 | 88 | 76 | ['reggaeton', 'reggaeton flow', 'trap latino',... | ... | 0.221692 | 0.006951 | 0.261035 | 0.679751 | 0.059214 | 0.986848 | 0.013152 | [they, rvssian, i, can, not, deny, this, desir... | [rvssian, deny, desire, stop, looking, lips, r... | [rvssian, deny, desire, stop, look, lip, rejec... |
| 47 | Magnetic | 1aKvZDoLGkNMxoRYgkckZG | SUPER REAL ME | ILLIT | 36cgvBn0aadzOijnjjwqMN | 2024-03-25 | 160688 | 89 | 74 | ['5th gen k-pop'] | ... | 0.069957 | 0.007273 | 0.092965 | 0.713226 | 0.193809 | 0.986112 | 0.013888 | [baby, i, am, just, trying, to, play, it, cool... | [baby, trying, play, cool, hide, want, wait, m... | [baby, try, play, cool, hide, want, wait, minu... |
| 48 | Water | 5aIVCx5tnk0ntmdiinnYvw | Water | Tyla | 3SozjO3Lat463tQICI9LcE | 2023-07-28 | 200255 | 86 | 77 | [] | ... | 0.006878 | 0.002168 | 0.210546 | 0.642083 | 0.147372 | 0.992614 | 0.007386 | [make, me, sweat, make, me, hotter, make, me, ... | [make, sweat, make, hotter, make, lose, breath... | [make, sweat, make, hotter, make, lose, breath... |
| 49 | Illusion | 59xD5osEFsaNt5PXfIKUnX | Illusion | Dua Lipa | 6M2wZ9GZgrQXHCFfjv46we | 2024-04-11 | 188143 | 79 | 88 | ['dance pop', 'pop', 'uk pop'] | ... | 0.292987 | 0.295016 | 0.178378 | 0.761315 | 0.060307 | 0.980528 | 0.019472 | [i, been, known, to, miss, a, red, flag, i, be... | [known, miss, red, flag, known, put, lover, pe... | [know, miss, red, flag, know, put, lover, pede... |
50 rows × 39 columns