Beyond the Bars: A Lyrical Analysis of Country Music

Author

Holly Stiltner

Introduction

“I’ll listen to anything…except country” is a phrase said time and time again.  When people think about country music, their minds typically go to the mainstream country radio or Nashville sound.  This is stereotypically about trucks, beer, and girls.  This is what is referred to as “bro country.” Bro country also includes more surface level writing with a catchy tune, portraying the care-free, “good ol’ boy” lifestyle.  Country music did not initially start out this way.  Traditionally, country music was used to encapsulate simplicity, hardship, and resilience through the use of storytelling.  What is often missed is that there are many sub genres under the umbrella of country music.  

One sub genre that is very different from bro country is called “americana.”  Americana is closer to the traditional country music style but incorporates influences from folk, rock, and blues music.  This gives americana a feeling of authenticity and nostalgia because of the connection to country music’s original roots.  

In this analysis, I decided to look at 10 different country artists, five who are bro country and five who are americana, and see how their lyrics compare and contrast.  I chose artists who released music within similar years and who have around six to eight albums.  For bro country, I chose Jason Aldean, Luke Bryan, Florida Georgia Line, Blake Shelton, and Thomas Rhett.  For americana, I chose Tyler Childers, Jason Isbell, Ryan Bingham, Colter Wall, and Cody Jinks.  

I hypothesize that bro country will align with what country music is stereotyped to be and that americana will have results that show more emotion and depth within the writing.  The purpose of this lyrical analysis is to find the differences in writing between the two sub genres to show that not all country music is the same. 

To retrieve the lyrics, I worked with my instructor to convert the Genius API Python files into CSV files.

Data Acquisition

First, I loaded my packages:

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.0     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidytext)
library(jsonlite)

Attaching package: 'jsonlite'

The following object is masked from 'package:purrr':

    flatten
library(ggthemes)
library(wordcloud2)

Next, I created variables and merged the artists into their perspective groups (bro country or Americana).

bryan <- read_csv("bryan.csv", col_types = cols(release_date = col_character()))

aldean <- read_csv('aldean.csv', col_types = cols(release_date = col_character()))
FGL <- read.csv('FGL.csv')

shelton <- read.csv('shelton.csv') 

rhett <- read.csv('rhett.csv')

bryan %>% 
 full_join(FGL) %>% 
  full_join(shelton) %>% 
  full_join(rhett) %>% 
  full_join(aldean) -> merged_bros
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, title, title_with_featured,
url, featured_artists, apple_music_id, apple_music_player_url, embed_content,
release_date, custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.pageviews, primary_artist.api_path,
primary_artist.id, primary_artist.image_url, primary_artist.name,
primary_artist.url, description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, title, title_with_featured,
url, featured_artists, apple_music_id, apple_music_player_url, embed_content,
featured_video, language, lyrics_placeholder_reason, recording_location,
release_date, custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id, X, X.1, X.2, primary_artist.iq,
album.artist.iq)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, title, title_with_featured,
url, featured_artists, apple_music_id, apple_music_player_url, embed_content,
featured_video, language, lyrics_placeholder_reason, recording_location,
release_date, custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url, X, X.1, X.2, primary_artist.iq,
album.artist.iq)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
lyrics_state, path, pyongs_count, relationships_index_url,
release_date_for_display, release_date_with_abbreviated_month_for_display,
song_art_image_thumbnail_url, song_art_image_url, title, title_with_featured,
url, featured_artists, apple_music_id, apple_music_player_url, embed_content,
featured_video, language, lyrics_placeholder_reason, recording_location,
release_date, custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title,
description_annotation.annotatable.title,
description_annotation.annotatable.type,
description_annotation.annotatable.url,
description_annotation.annotatable.client_timestamps.updated_by_human_at,
description_annotation.annotatable.client_timestamps.lyrics_updated_at,
lyrics_marked_complete_by.api_path, lyrics_marked_complete_by.header_image_url,
lyrics_marked_complete_by.human_readable_role_for_display,
lyrics_marked_complete_by.id, lyrics_marked_complete_by.iq,
lyrics_marked_complete_by.login, lyrics_marked_complete_by.name,
lyrics_marked_complete_by.role_for_display, lyrics_marked_complete_by.url,
lyrics_marked_complete_by.avatar.tiny.url,
lyrics_marked_complete_by.avatar.tiny.bounding_box.width,
lyrics_marked_complete_by.avatar.tiny.bounding_box.height,
lyrics_marked_complete_by.avatar.thumb.url,
lyrics_marked_complete_by.avatar.thumb.bounding_box.width,
lyrics_marked_complete_by.avatar.thumb.bounding_box.height,
lyrics_marked_complete_by.avatar.small.url,
lyrics_marked_complete_by.avatar.small.bounding_box.width,
lyrics_marked_complete_by.avatar.small.bounding_box.height,
lyrics_marked_complete_by.avatar.medium.url,
lyrics_marked_complete_by.avatar.medium.bounding_box.width,
lyrics_marked_complete_by.avatar.medium.bounding_box.height,
lyrics_marked_complete_by.current_user_metadata.permissions,
lyrics_marked_complete_by.current_user_metadata.excluded_permissions,
lyrics_marked_complete_by.current_user_metadata.interactions.following,
lyrics_marked_staff_approved_by.api_path,
lyrics_marked_staff_approved_by.header_image_url,
lyrics_marked_staff_approved_by.human_readable_role_for_display,
lyrics_marked_staff_approved_by.id, lyrics_marked_staff_approved_by.iq,
lyrics_marked_staff_approved_by.login, lyrics_marked_staff_approved_by.name,
lyrics_marked_staff_approved_by.role_for_display,
lyrics_marked_staff_approved_by.url,
lyrics_marked_staff_approved_by.avatar.tiny.url,
lyrics_marked_staff_approved_by.avatar.tiny.bounding_box.width,
lyrics_marked_staff_approved_by.avatar.tiny.bounding_box.height,
lyrics_marked_staff_approved_by.avatar.thumb.url,
lyrics_marked_staff_approved_by.avatar.thumb.bounding_box.width,
lyrics_marked_staff_approved_by.avatar.thumb.bounding_box.height,
lyrics_marked_staff_approved_by.avatar.small.url,
lyrics_marked_staff_approved_by.avatar.small.bounding_box.width,
lyrics_marked_staff_approved_by.avatar.small.bounding_box.height,
lyrics_marked_staff_approved_by.avatar.medium.url,
lyrics_marked_staff_approved_by.avatar.medium.bounding_box.width,
lyrics_marked_staff_approved_by.avatar.medium.bounding_box.height,
lyrics_marked_staff_approved_by.current_user_metadata.permissions,
lyrics_marked_staff_approved_by.current_user_metadata.excluded_permissions,
lyrics_marked_staff_approved_by.current_user_metadata.interactions.following,
stats.concurrents)`
  merged_bros %>% 
    unnest_tokens(word, lyrics) |> 
    mutate( style = "Bro Country") -> merged_bros

  merged_bros %>% 
  count(artist, sort = TRUE)
# A tibble: 5 × 2
  artist                   n
  <chr>                <int>
1 Blake Shelton        53833
2 Jason Aldean         49735
3 Luke Bryan           49274
4 Florida Georgia Line 40664
5 Thomas Rhett         37301
  aldean |> 
    unnest_tokens(word, lyrics) |> 
    mutate(Artist = "Jason Aldean") |> 
    mutate(style = "Bro Country")-> aldean_words1
  
  bryan |> 
    unnest_tokens(word, lyrics) |> 
    mutate(Artist = "Luke Bryan") |> 
    mutate(style = "Bro Country")-> bryan_words1 
  
  FGL |> 
    unnest_tokens(word, lyrics) |> 
    mutate(Artist = "Florida Georgia Line") |> 
    mutate(style = "Bro Country")-> FGL_words1
  
  shelton |> 
    unnest_tokens(word, lyrics) |> 
    mutate(Artist = "Blake Shelton") |> 
    mutate(style = "Bro Country")-> shelton_words1
  
  rhett |> 
    unnest_tokens(word, lyrics) |> 
    mutate(Artist = "Thomas Rhett") |> 
    mutate(style = "Bro Country")-> rhett_words1
  
childers <- read.csv('childers.csv')
bingham <- read.csv('bingham.csv')
isbell <- read.csv('isbell.csv')
jinks <- read.csv('jinks.csv')
wall <- read.csv('wall.csv')

childers %>%
  full_join(bingham) %>%
  full_join(isbell) %>%
  full_join(jinks) %>%
  full_join(wall) -> merged_americana
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
X, path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, X.1, X.2, title,
title_with_featured, url, featured_artists, apple_music_id,
apple_music_player_url, embed_content, featured_video, language,
lyrics_placeholder_reason, recording_location, release_date,
custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title,
description_annotation.annotatable.title)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
X, path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, X.1, X.2, title,
title_with_featured, url, featured_artists, apple_music_id,
apple_music_player_url, embed_content, featured_video, language,
lyrics_placeholder_reason, recording_location, release_date,
custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title,
description_annotation.annotatable.title)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
X, path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, X.1, X.2, title,
title_with_featured, url, featured_artists, apple_music_id,
apple_music_player_url, embed_content, featured_video, language,
lyrics_placeholder_reason, recording_location, release_date,
custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
X, path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, X.1, X.2, title,
title_with_featured, url, featured_artists, apple_music_id,
apple_music_player_url, embed_content, featured_video, language,
lyrics_placeholder_reason, recording_location, release_date,
custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title)`
merged_americana %>% 
  unnest_tokens(word, lyrics) |> 
  mutate( style = "Americana") -> merged_americana

childers |> 
  unnest_tokens(word, lyrics) |> 
  mutate(Artist = "Tyler Childers") |> 
  mutate(style = "Americana")-> childers_words1

bingham |> 
  unnest_tokens(word, lyrics) |> 
  mutate(Artist = "Ryan Bingham") |> 
  mutate(style = "Americana")-> bingham_words1

isbell |> 
  unnest_tokens(word, lyrics) |> 
  mutate(Artist = "Jason Isbell") |> 
  mutate(style = "Americana")-> isbell_words1  

jinks |> 
  unnest_tokens(word, lyrics) |> 
  mutate(Artist = "Cody Jinks") |> 
  mutate(style = "Americana")-> jinks_words1
  
wall |> 
  unnest_tokens(word, lyrics) |> 
  mutate(Artist = "Colter Wall") |> 
  mutate(style = "Americana")-> wall_words1

Word Clouds

The next visualization that I made is a word cloud for each sub genre.

merged_americana %>% 
  anti_join(stop_words) %>% 
  filter(!word %in% c('chorus', 'verse', '10', 'tickets', 'outro', '4', '5', 'yeah', '1', '2', '3', 'lyrics', '173you', 'liveget', 'tickets', 'low', 'ooh', 'ryan', 'bingham', 'cody', 'jinks', 'colter', 'wall', 'tyler', 'childers', 'jason', 'isbell', '90you', '38you', '51you')) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>% 
  head(400) %>% 
  wordcloud2(shape = 'circle')
Joining with `by = join_by(word)`
Joining with `by = join_by(word)`
merged_bros %>% 
  anti_join(stop_words) %>% 
  filter(!word %in% c('chorus', 'verse', '10', 'tickets', 'outro', '4', '5', 'yeah', '1', '2', '3', 'lyrics', '173you', 'liveget', 'tickets', 'low', 'ooh', 'luke', 'bryan', 'jason', 'aldean', 'florida', 'georgia', 'line', 'blake', 'shelton', 'thomas', 'rhett')) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>% 
  head(400) %>% 
  wordcloud2(shape = 'circle')
Joining with `by = join_by(word)`
Joining with `by = join_by(word)`

These word clouds do a great job of visualizing the different topics written about in both subgenres.  Words that stand out to me in the bro country word cloud include, “baby”, “girl”, “party”, “truck”, and “beer.”  This continues to push that narrative of bro country writing about a carefree lifestyle filled with drinking and women.  Words that stand out to me in the Americana word cloud include, “time”, “home”, “hard”, “road”, and “heart.”  Looking at these words together, it can be seen that this writing has an emphasis in storytelling.  My mind goes to hard times, going down hard roads, heartbreaks, reflecting on home etc…  

Most Negative Words

Once seeing the word clouds, I broke the lyrics down into the top 20 most negative words used in each sub genre.

merged_bros %>% 
  # unnest_tokens(word, lyrics) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>% 
  inner_join(get_sentiments("afinn")) %>% 
  arrange(desc(-value)) %>% 
  head(20)
Joining with `by = join_by(word)`
Joining with `by = join_by(word)`
# A tibble: 20 × 3
   word        n value
   <chr>   <int> <dbl>
 1 bitch       4    -5
 2 prick       2    -5
 3 bitches     1    -5
 4 hell      223    -4
 5 damn      119    -4
 6 ass        54    -4
 7 shit       11    -4
 8 damned      6    -4
 9 pissed      2    -4
10 bad       129    -3
11 lost      123    -3
12 die        67    -3
13 worry      60    -3
14 worried    38    -3
15 hate       37    -3
16 dead       31    -3
17 loose      31    -3
18 kill       30    -3
19 killing    24    -3
20 losing     17    -3
merged_americana %>% 
  # unnest_tokens(word, lyrics) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>% 
  inner_join(get_sentiments("afinn")) %>% 
  arrange(desc(-value)) %>% 
  head(20)
Joining with `by = join_by(word)`
Joining with `by = join_by(word)`
           word   n value
1         bitch   7    -5
2  motherfucker   6    -5
3       bastard   2    -5
4      bastards   2    -5
5          hell 114    -4
6          damn  72    -4
7           ass  23    -4
8          shit   8    -4
9        fucked   6    -4
10         piss   5    -4
11       pissed   5    -4
12       damned   3    -4
13      fucking   3    -4
14     bullshit   2    -4
15         dick   1    -4
16     tortured   1    -4
17     tortures   1    -4
18          die  94    -3
19         lost  83    -3
20          bad  50    -3

I found these negative words interesting because I saw immediately that Americana used more words that packed a punch.  These words resulted in a higher level of “bad”.  Examples that stood out to me are “motherfucker”, “bastard”, and “tortured.”  Bro country uses more basic bad words like, “hell”, “damn”, “ass”, and “shit.”  They did use “prick” which Americana did not.  

Most Positive Words

I then did this with the top 20 most positive words in each sub genre.

merged_bros %>% 
  # unnest_tokens(word, lyrics) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>% 
  inner_join(get_sentiments("afinn")) %>% 
  arrange(desc(+value)) %>% 
  head(20)
Joining with `by = join_by(word)`
Joining with `by = join_by(word)`
# A tibble: 20 × 3
   word            n value
   <chr>       <int> <dbl>
 1 fun            36     4
 2 funny          32     4
 3 win            23     4
 4 winning         8     4
 5 winner          7     4
 6 amazing         6     4
 7 heavenly        4     4
 8 masterpiece     3     4
 9 miracle         3     4
10 rejoices        1     4
11 love          997     3
12 happy          59     3
13 beautiful      56     3
14 lucky          54     3
15 perfect        54     3
16 loved          47     3
17 luck           22     3
18 paradise       19     3
19 glad           16     3
20 merry          14     3
merged_americana %>% 
  # unnest_tokens(word, lyrics) %>% 
  anti_join(stop_words) %>% 
  count(word, sort = TRUE) %>% 
  inner_join(get_sentiments("afinn")) %>% 
  arrange(desc(+value)) %>% 
  head(20)
Joining with `by = join_by(word)`
Joining with `by = join_by(word)`
        word   n value
1   thrilled   2     5
2        win  18     4
3  wonderful  11     4
4        fun  10     4
5      funny   8     4
6    amazing   4     4
7    miracle   2     4
8    triumph   2     4
9       love 275     3
10       joy  23     3
11 beautiful  21     3
12     loved  17     3
13      glad  12     3
14     happy  12     3
15    lovely  11     3
16     lucky  11     3
17      nice  10     3
18      luck   6     3
19  pleasure   6     3
20     super   6     3

The positive words for each subgenre are pretty similar.  The one point that is important to note is that in Americana, there was one word given a sentiment score of 5 (thrilled), whereas for bro country the highest score was 4.

Flesch Kincaid Grade Level

Once seeing a trend of the types of words used, I wanted to find out what the Flesch Kincaid grade level for each artist is.

merged_bros %>% 
  group_by(artist_names) %>%
  select(word) %>% 
  summarize(
    average_word_count = mean(str_count(word)),
    average_syllables_per_word = mean(str_count(word, "[aeiouy]")) / mean(str_count(word, "\\S+"))
  ) %>% 
  mutate(
    flesch_kincaid_grade_level = (0.39 * average_word_count) + (11.8 * average_syllables_per_word) - 15.59
  ) -> grade_levels
Adding missing grouping variables: `artist_names`
merged_americana %>% 
  group_by(artist_names) %>%
  select(word) %>% 
  summarize(
    average_word_count = mean(str_count(word)),
    average_syllables_per_word = mean(str_count(word, "[aeiouy]")) / mean(str_count(word, "\\S+"))
  ) %>% 
  mutate(
    flesch_kincaid_grade_level = (0.39 * average_word_count) + (11.8 * average_syllables_per_word) - 15.59
  ) -> grade_levels2
Adding missing grouping variables: `artist_names`

The results of this test are closer for each sub genre than I had anticipated.  I hypothesized that Americana would have a much higher score than bro country.  What I found instead was that they are very similar.  Bro country has a mean of 4.946 and Americana has a mean of 5.064.  Scores of 3-6 is considered “basic” and elementary reading level according to the Flesch Kincaid breakdown.  It is also important to note that most music falls in this category so that it is easy to listen to. 

Lexicons

I next used lexicons to look at 20 stereotypical bro country words and see how often they show up in each sub genre.

bro_lexicon <- c('truck', 'beer', 'girl', 'girls', 'woman', 'women', 'whiskey', 'dirt', 'road', 'drink', 'drunk', 'town', 'boys', 'family', 'mama', 'home', 'rain', 'god', 'country', 'bar')

merged_bros |>
  filter(word %in% bro_lexicon) |>
  count(word, sort = TRUE) 
# A tibble: 20 × 2
   word        n
   <chr>   <int>
 1 girl     1010
 2 country   463
 3 town      442
 4 home      354
 5 road      266
 6 drink     256
 7 beer      227
 8 truck     195
 9 whiskey   180
10 god       179
11 dirt      159
12 boys      149
13 bar       140
14 rain      117
15 drunk     108
16 girls     103
17 mama       98
18 family     26
19 women      24
20 woman      21
americana_lexicon <- c('truck', 'beer', 'girl', 'girls', 'woman', 'women', 'whiskey', 'dirt', 'road', 'drink', 'drunk', 'town', 'boys', 'family', 'mama', 'home', 'rain', 'god', 'country', 'bar')

merged_americana |>
  filter(word %in% bro_lexicon) |>
  count(word, sort = TRUE)
      word   n
1     home 227
2     road 148
3     town 115
4     girl 103
5      god 101
6     rain  85
7  country  75
8  whiskey  58
9    drink  52
10    boys  51
11   woman  48
12     bar  41
13    mama  39
14   drunk  31
15   truck  18
16   girls  17
17  family  16
18    dirt  15
19   women  15
20    beer   9

These charts push the point that not all country music is “beer”, “trucks”, and “girls.” It does, however, make this stereotype of country music loud and clear. Looking at bro country, “girl” is used 1010 times. The next word, “country”, is only used 463 times. “Beer” and “truck” come in at 7th and 8th most used in this list with 227 and 195 mentions. An interesting point in the bro country chart is that although “girl” is first with over twice the mentions as anything else, “women” and “woman” are ranked 19th and 20th. This shows that bro country mainly refers to females as girls.

These same 20 words show up in a completely different order for Americana. “Home”, “road”, and “town” are the top three words. This places an emphasis on that nostalgic feeling when hearing this type of music. “Girl” is ranked 4th, but only is used 103 times compared to bro country’s 1010 times. It is also clear that when talking about drinking, Americana references whiskey rather than beer. “Whiskey” is ranked 8th with 58 times and “beer” is ranked 20th with only 9 times.

Bi-Grams

Lastly, I looked at bi-grams. I chose a few words to look at that have been prominent throughout the analysis. I looked at “road”, “girl”, and “time” for both sub genres to see the differences in how they are used. I also looked at “beer” for bro country.

bryan %>% 
  full_join(FGL) %>% 
  full_join(shelton) %>% 
  full_join(rhett) %>% 
  full_join(aldean) -> merged_bros_bigrams
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, title, title_with_featured,
url, featured_artists, apple_music_id, apple_music_player_url, embed_content,
release_date, custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.pageviews, primary_artist.api_path,
primary_artist.id, primary_artist.image_url, primary_artist.name,
primary_artist.url, description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, title, title_with_featured,
url, featured_artists, apple_music_id, apple_music_player_url, embed_content,
featured_video, language, lyrics_placeholder_reason, recording_location,
release_date, custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id, X, X.1, X.2, primary_artist.iq,
album.artist.iq)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, title, title_with_featured,
url, featured_artists, apple_music_id, apple_music_player_url, embed_content,
featured_video, language, lyrics_placeholder_reason, recording_location,
release_date, custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url, X, X.1, X.2, primary_artist.iq,
album.artist.iq)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
lyrics_state, path, pyongs_count, relationships_index_url,
release_date_for_display, release_date_with_abbreviated_month_for_display,
song_art_image_thumbnail_url, song_art_image_url, title, title_with_featured,
url, featured_artists, apple_music_id, apple_music_player_url, embed_content,
featured_video, language, lyrics_placeholder_reason, recording_location,
release_date, custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title,
description_annotation.annotatable.title,
description_annotation.annotatable.type,
description_annotation.annotatable.url,
description_annotation.annotatable.client_timestamps.updated_by_human_at,
description_annotation.annotatable.client_timestamps.lyrics_updated_at,
lyrics_marked_complete_by.api_path, lyrics_marked_complete_by.header_image_url,
lyrics_marked_complete_by.human_readable_role_for_display,
lyrics_marked_complete_by.id, lyrics_marked_complete_by.iq,
lyrics_marked_complete_by.login, lyrics_marked_complete_by.name,
lyrics_marked_complete_by.role_for_display, lyrics_marked_complete_by.url,
lyrics_marked_complete_by.avatar.tiny.url,
lyrics_marked_complete_by.avatar.tiny.bounding_box.width,
lyrics_marked_complete_by.avatar.tiny.bounding_box.height,
lyrics_marked_complete_by.avatar.thumb.url,
lyrics_marked_complete_by.avatar.thumb.bounding_box.width,
lyrics_marked_complete_by.avatar.thumb.bounding_box.height,
lyrics_marked_complete_by.avatar.small.url,
lyrics_marked_complete_by.avatar.small.bounding_box.width,
lyrics_marked_complete_by.avatar.small.bounding_box.height,
lyrics_marked_complete_by.avatar.medium.url,
lyrics_marked_complete_by.avatar.medium.bounding_box.width,
lyrics_marked_complete_by.avatar.medium.bounding_box.height,
lyrics_marked_complete_by.current_user_metadata.permissions,
lyrics_marked_complete_by.current_user_metadata.excluded_permissions,
lyrics_marked_complete_by.current_user_metadata.interactions.following,
lyrics_marked_staff_approved_by.api_path,
lyrics_marked_staff_approved_by.header_image_url,
lyrics_marked_staff_approved_by.human_readable_role_for_display,
lyrics_marked_staff_approved_by.id, lyrics_marked_staff_approved_by.iq,
lyrics_marked_staff_approved_by.login, lyrics_marked_staff_approved_by.name,
lyrics_marked_staff_approved_by.role_for_display,
lyrics_marked_staff_approved_by.url,
lyrics_marked_staff_approved_by.avatar.tiny.url,
lyrics_marked_staff_approved_by.avatar.tiny.bounding_box.width,
lyrics_marked_staff_approved_by.avatar.tiny.bounding_box.height,
lyrics_marked_staff_approved_by.avatar.thumb.url,
lyrics_marked_staff_approved_by.avatar.thumb.bounding_box.width,
lyrics_marked_staff_approved_by.avatar.thumb.bounding_box.height,
lyrics_marked_staff_approved_by.avatar.small.url,
lyrics_marked_staff_approved_by.avatar.small.bounding_box.width,
lyrics_marked_staff_approved_by.avatar.small.bounding_box.height,
lyrics_marked_staff_approved_by.avatar.medium.url,
lyrics_marked_staff_approved_by.avatar.medium.bounding_box.width,
lyrics_marked_staff_approved_by.avatar.medium.bounding_box.height,
lyrics_marked_staff_approved_by.current_user_metadata.permissions,
lyrics_marked_staff_approved_by.current_user_metadata.excluded_permissions,
lyrics_marked_staff_approved_by.current_user_metadata.interactions.following,
stats.concurrents)`
merged_bros_bigrams %>% 
  unnest_tokens(bigram, lyrics, token="ngrams", n=2) -> brograms

brogram_separated <- brograms %>%
  separate(bigram, c("word1", "word2"), sep = " ")

brogram_filtered <- brogram_separated %>%
  filter(!word1 %in% stop_words$word) %>%
  filter(!word2 %in% stop_words$word)

brogram_filtered %>%
  filter(word2 == "road") %>%
  count(word1, word2, sort = TRUE)
# A tibble: 30 × 3
   word1    word2     n
   <chr>    <chr> <int>
 1 dirt     road     33
 2 gravel   road     12
 3 moonlit  road      9
 4 county   road      6
 5 harrison road      4
 6 lonesome road      4
 7 lane     road      3
 8 mill     road      3
 9 oak      road      3
10 brick    road      2
# ℹ 20 more rows
brogram_filtered %>%
  filter(word2 == "beer") %>%
  count(word1, word2, sort = TRUE)
# A tibble: 19 × 3
   word1               word2     n
   <chr>               <chr> <int>
 1 cold                beer     63
 2 drinkin             beer      7
 3 drink               beer      3
 4 pour                beer      3
 5 sip                 beer      3
 6 ass                 beer      2
 7 drinking            beer      2
 8 bout                beer      1
 9 buy                 beer      1
10 cheap               beer      1
11 contributorscold    beer      1
12 contributorsdrinkin beer      1
13 crankin             beer      1
14 draft               beer      1
15 drank               beer      1
16 drunk               beer      1
17 past                beer      1
18 spilling            beer      1
19 weird               beer      1
brogram_filtered %>%
  filter(word2 == "girl") %>%
  count(word1, word2, sort = TRUE)
# A tibble: 166 × 3
   word1    word2     n
   <chr>    <chr> <int>
 1 hey      girl     27
 2 yeah     girl     26
 3 lyrics   girl     16
 4 country  girl     14
 5 redneck  girl     14
 6 wage     girl     14
 7 pretty   girl     12
 8 sorority girl     12
 9 single   girl     11
10 baby     girl     10
# ℹ 156 more rows
brogram_filtered %>%
  filter(word2 == "time") %>%
  count(word1, word2, sort = TRUE)
# A tibble: 51 × 3
   word1    word2     n
   <chr>    <chr> <int>
 1 neon     time      9
 2 summer   time      7
 3 harvest  time      6
 4 it’s     time      6
 5 damn     time      5
 6 killing  time      5
 7 picking  time      5
 8 closin   time      4
 9 stepping time      4
10 sweet    time      4
# ℹ 41 more rows
childers %>%
  full_join(bingham) %>%
  full_join(isbell) %>%
  full_join(jinks) %>%
  full_join(wall) -> merged_americana_bigrams
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
X, path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, X.1, X.2, title,
title_with_featured, url, featured_artists, apple_music_id,
apple_music_player_url, embed_content, featured_video, language,
lyrics_placeholder_reason, recording_location, release_date,
custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title,
description_annotation.annotatable.title)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
X, path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, X.1, X.2, title,
title_with_featured, url, featured_artists, apple_music_id,
apple_music_player_url, embed_content, featured_video, language,
lyrics_placeholder_reason, recording_location, release_date,
custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title,
description_annotation.annotatable.title)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
X, path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, X.1, X.2, title,
title_with_featured, url, featured_artists, apple_music_id,
apple_music_player_url, embed_content, featured_video, language,
lyrics_placeholder_reason, recording_location, release_date,
custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title)`
Joining with `by = join_by(annotation_count, api_path, artist_names,
full_title, header_image_thumbnail_url, header_image_url, id, lyrics_owner_id,
X, path, pyongs_count, relationships_index_url, release_date_for_display,
release_date_with_abbreviated_month_for_display, X.1, X.2, title,
title_with_featured, url, featured_artists, apple_music_id,
apple_music_player_url, embed_content, featured_video, language,
lyrics_placeholder_reason, recording_location, release_date,
custom_performances, media, producer_artists, song_relationships,
translation_songs, verified_annotations_by, verified_contributors,
verified_lyrics_by, writer_artists, artist, lyrics,
release_date_components.year, release_date_components.month,
release_date_components.day, stats.accepted_annotations, stats.contributors,
stats.iq_earners, stats.transcribers, stats.unreviewed_annotations,
stats.verified_annotations, stats.hot, stats.pageviews,
primary_artist.api_path, primary_artist.header_image_url, primary_artist.id,
primary_artist.image_url, primary_artist.is_meme_verified,
primary_artist.is_verified, primary_artist.name, primary_artist.url,
description.plain, current_user_metadata.permissions,
current_user_metadata.excluded_permissions,
current_user_metadata.interactions.pyong,
current_user_metadata.interactions.following, album.api_path,
album.cover_art_url, album.full_title, album.id, album.name,
album.release_date_for_display, album.url, album.artist.api_path,
album.artist.header_image_url, album.artist.id, album.artist.image_url,
album.artist.is_meme_verified, album.artist.is_verified, album.artist.name,
album.artist.url, description_annotation._type,
description_annotation.annotator_id, description_annotation.annotator_login,
description_annotation.api_path, description_annotation.classification,
description_annotation.fragment, description_annotation.id,
description_annotation.is_description, description_annotation.path,
description_annotation.song_id, description_annotation.url,
description_annotation.verified_annotator_ids,
description_annotation.annotations, description_annotation.range.content,
description_annotation.annotatable.api_path,
description_annotation.annotatable.context,
description_annotation.annotatable.id,
description_annotation.annotatable.image_url,
description_annotation.annotatable.link_title)`
merged_americana_bigrams %>% 
  unnest_tokens(bigram, lyrics, token="ngrams", n=2) -> americanagrams

americanagram_separated <- americanagrams %>%
  separate(bigram, c("word1", "word2"), sep = " ")

americanagram_filtered <- americanagram_separated %>%
  filter(!word1 %in% stop_words$word) %>%
  filter(!word2 %in% stop_words$word)

americanagram_filtered %>%
  filter(word2 == "road") %>%
  count(word1, word2, sort = TRUE)
                    word1 word2 n
1                    hard  road 4
2                  circle  road 3
3                  harlan  road 3
4                  lonely  road 3
5                  narrow  road 3
6               coverdale  road 2
7                 endless  road 2
8                  windin  road 2
9      contributorsharlan  road 1
10        contributorsthe  road 1
11 contributorswhitehouse  road 1
12                 county  road 1
13                   dirt  road 1
14                 gravel  road 1
15                hateful  road 1
16                   home  road 1
17                  house  road 1
18                likethe  road 1
19               lonesome  road 1
20                  rocky  road 1
21                 uphill  road 1
americanagram_filtered %>%
  filter(word2 == "girl") %>%
  count(word1, word2, sort = TRUE)
                    word1 word2  n
1                   lover  girl 15
2                catholic  girl 12
3                   lovin  girl  4
4                   sweet  girl  4
5                  pieces  girl  3
6                   drunk  girl  2
7                    eyed  girl  2
8              charleston  girl  1
9  contributorscharleston  girl  1
10      contributorslover  girl  1
11                 darlin  girl  1
12                 haired  girl  1
13                 harlan  girl  1
14       lyricscharleston  girl  1
15                  mamma  girl  1
16               mountain  girl  1
17              prettiest  girl  1
18            renaissance  girl  1
19                 single  girl  1
20               solitary  girl  1
21                  stone  girl  1
22                  texas  girl  1
23                 throat  girl  1
24                  wrong  girl  1
americanagram_filtered %>%
  filter(word2 == "time") %>%
  count(word1, word2, sort = TRUE)
            word1 word2 n
1          supper  time 6
2          winter  time 6
3           sweet  time 3
4          wasted  time 3
5       borrowing  time 2
6         closing  time 2
7            hard  time 2
8            it’s  time 2
9        memories  time 2
10           past  time 2
11       vacation  time 2
12           yeah  time 2
13      christmas  time 1
14         closin  time 1
15 contributorsno  time 1
16        dingess  time 1
17            due  time 1
18        explodе  time 1
19           idle  time 1
20        killing  time 1
21           lost  time 1
22    lyricsevery  time 1
23       mountain  time 1
24             ol  time 1
25         plenty  time 1
26       remember  time 1
27           wise  time 1

These charts continue to show the difference between the sub genres, even when using the same words. These graphs show what word comes in front of the words I have chosen to look at. Starting with “road”, bro country mainly uses phrases such as, “dirt road”, “gravel road”, “moonlit road”, and “country road.” “Road” is used in a literal sense, whereas in Americana, the use is more metaphorical. These phrases include, “hard road”, “lonely road”, and “endless road.” This makes sense as hardship is a large theme used in Americana music. Bro country’s use of “road” in the literal sense also makes sense because dirt roads are associated with the stereotypical country way of living.

Seeing how each sub genre uses the word “girl” shows not only how they speak to girls in songs, but also how they speak about them. Bro country mainly addresses women in their songs by using phrases such as, “hey girl” and “yeah girl.” They speak about them as “country girl”, “redneck girl”, “pretty girl”, and “sorority girl.” Americana does not address girls in their songs explicitly like bro country does. They do, however, refer to women as, “lover girl”, “catholic girl”, “sweet girl”, and “darlin’ girl”. Bro country is more aggressive when it comes to speaking to/about women, and Americana speaks about women rather than to women.

“Time” is drastically different between the two sub genres. In bro country, the most popular phrases are, “neon time”, “summer time”, and “harvest time.” This creates vibrant imagery of neon bar signs, bright summer nights, that would sound like music that one would listen to with their windows down, driving through back-roads. Americana uses “time” for phrases such as, “supper time”, “winter time”, “sweet time”, and “wasted time.” These phrases offer a different imagery of family dinners on cold winter nights. Although these can be “sweet times,” some people associate the winter season with darkness and loneliness which could be interpreted as wasted time.

Lastly, I looked at how “beer” is used in bro country. I included this in the report because it continues to show how bro country falls into the stereotypes. “Cold beer” is ranked 1st, being used 63 times. The second phrase is “drinkin’ beer” with 7 times. I would not have expected anything else.

Conclusion

In conclusion, I would argue that this lyrical analysis not only showed the differences between bro country and Americana, but also pushed the idea of bro country creating the country music stereotype that most people think of. Although a lot of the same words are used in both sub genres, the bi-gram section of this analysis made it clear that how each sub genre uses these words is different to create their own separate narratives. After this analysis, I would also argue that Americana does have more depth and emotion used in its lyrical writing than bro country. Americana uses more metaphors, and writes about difficult times. This places emphasis on Americana being similar to traditional country music. Bro country does have a more upbeat, simple man, party vibe, falling into the “beer”, “trucks”, and “girls” stereotype.

Metaphorically speaking, if bro country was a person, they would drink beer, and if Americana was a person, they would drink whiskey. Beer is often drank at parties, sporting events, and in other casual settings. It is cheap and easy to find. Beer goes down quick, with a low alcohol percentage. Whiskey is more complex. It has layers of different flavors, and should be sipped slowly to appreciate it. Whiskey is more expensive, with a much higher alcohol percentage. Whiskey is a dark liquor and can be harsh if you are not expecting it.