# install.packages(c("readxl","ggplot2","dplyr"))

library(readxl)

library(ggplot2)

library(dplyr)

##자료를 모은 곳 빌보드에서 정리한 70-00년대의 인기곡 10곡들을 excel파일에 정리하였다 가사는 구글 검색을 통해 나오는 글을 모아 txt 파일로 만들었다 또한 function words가 정리된 파일을 찾지 못해서 일단 내가 만들어서 사용하였다.

##1. 가수

read_excel("자료.xlsx") -> songs
library(dplyr)
library(ggplot2)
frequency_singer <- table(songs$singer)
as.data.frame(frequency_singer) ->freq_singer
freq_singer <- freq_singer %>% rename(singer = Var1, freq= Freq)
ggplot(data = freq_singer, aes(x=singer, y= freq)) +geom_col()

그래프로 그리면 X축이 너무 많아서 보기 어려우니 정렬해서 보겠다다

freq_singer %>% arrange(desc(freq)) %>%  head(5)
##          singer freq
## 1         ac/dc    2
## 2        eminem    2
## 3 fleetwood mac    2
## 4       50 cent    1
## 5          a-ha    1

ac/dc, eminem, fleetwood mac이 2번씩 등장한 것을 볼 수 있었다.

read_excel("nationality.xlsx") -> nation

지도에서 각 나라별 가수의 수를 알아보고자 국적을 추가한 엑셀파일을 만들었다.

nation$nationality -> freq_contries
table(freq_contries) ->freq_na
freq_na
## freq_contries
## australia    canada   Ireland    norway        UK       USA 
##         3         1         1         1         7        27
as.data.frame(freq_na)->freq_countries
freq_countries
##   freq_contries Freq
## 1     australia    3
## 2        canada    1
## 3       Ireland    1
## 4        norway    1
## 5            UK    7
## 6           USA   27
library(dplyr)
freq_countries <-freq_countries %>%  rename(country= freq_contries, freq= Freq) 
ggplot(data = freq_countries, aes(x= country, y= freq)) +geom_col()

nation의 빈도를 보기위해 table을 만든 후 dataframe으로 변경하여 그래프를 그리었다.

usa가 가장 많음을 볼 수 있었다.

##장르별 비교

read_excel("genre.xlsx") ->genre
genre$genre ->genres
df_genres<- as.data.frame(table(genres))
df_genres
##            genres Freq
## 1     alternative    6
## 2  classical rock    2
## 3    country rock    2
## 4           disco    3
## 5       hard rock    5
## 6        new wave    2
## 7             pop    4
## 8        pop rock    3
## 9             r&b    2
## 10            rap    4
## 11           rock    7
ggplot(data = df_genres, aes(x=genres, y=Freq)) +geom_col()

2.70s에서 인기있던 가사의 단어 알아보기

library(readxl)
read_excel("자료.xlsx") ->songs

readLines("70s_song.txt",encoding = "UTF-8") ->lyrics_70s_raw
## Warning in readLines("70s_song.txt", encoding = "UTF-8"): '70s_song.txt'에서
## 불완전한 마지막 행이 발견되었습니다
lyrics_70s <- lyrics_70s_raw

우선 가사가 정리된 파일은 복사본을 만들었다

readLines("extr.txt") -> extr
#지울 단어들이 들어있는 파일 불러오기
clean_lyrics_70s <- gsub("[[:punct:]]", "", lyrics_70s)
clean_lyrics_70s <- tolower(clean_lyrics_70s)
words_70 <- strsplit(clean_lyrics_70s, "\\s+")
filtered_words_70 <- words_70[!words_70 %in% extr]
wordcount <- table(unlist(filtered_words_70))
df_words_70s <- as.data.frame(wordcount, stringsAsFactors =  F)
df_words_70s <- rename(df_words_70s, word = Var1, freq = Freq)

단어 정리 및 불러오기 까지 하였다다

library(wordcloud)
## Warning: 패키지 'wordcloud'는 R 버전 4.4.2에서 작성되었습니다
## 필요한 패키지를 로딩중입니다: RColorBrewer
wordcloud(words = df_words_70s$word,
          freq = df_words_70s$freq,
          min.freq = 2,
          max.words = 200,
          random.order = F,
          rot.per = .1,
          scale = c(4, 0.3))

70년대의 워드 클라우드 왜인지 txt 파일에 적어둔 단어들이 삭제가 되지 않아서 you and the 와 같은 기능어들이 많이 보이는 것을 알 수 있다.

하지만 빼고 봤을 때 love가 크게 보이는 것을 알 수 있다.

come and get your love란 노래에 워낙 많이 나오는 단어 이므로 come and get your love를 제외하고 찾아보기로 하였다.

readLines("70s_song_wo_come_.txt") ->wo_70s
## Warning in readLines("70s_song_wo_come_.txt"): '70s_song_wo_come_.txt'에서
## 불완전한 마지막 행이 발견되었습니다
clean_lyrics_70s_wo <- gsub("[[:punct:]]", "", wo_70s)
clean_lyrics_70s_wo <- tolower(wo_70s)
words_70_wo <- strsplit(clean_lyrics_70s_wo, "\\s+")
filtered_words_70_wo <- words_70_wo[!words_70_wo %in% extr]
wordcount_wo <- table(unlist(filtered_words_70_wo))
df_words_70s_wo<- as.data.frame(wordcount_wo, stringsAsFactors =  F)
df_words_70s_wo <- rename(df_words_70s_wo, word = Var1, freq = Freq)
wordcloud(words = df_words_70s_wo$word,
          freq = df_words_70s_wo$freq,
          min.freq = 2,
          max.words = 200,
          random.order = F,
          rot.per = .1,
          scale = c(4, 0.3))

그래도 love가 꽤나 큰 부분을 차지 하는 것을 알 수 있었다.

##80,90년대 각년대의 가사 분위기 비교를위해 위의 과정을 반복하였다

readLines("80s_song.txt") ->lyrics_80s
## Warning in readLines("80s_song.txt"): '80s_song.txt'에서 불완전한 마지막 행이
## 발견되었습니다
readLines("90s_song.txt") ->lyrics_90s
## Warning in readLines("90s_song.txt"): '90s_song.txt'에서 불완전한 마지막 행이
## 발견되었습니다
clean_lyrics_80s <- gsub("[[:punct:]]", "", lyrics_80s)
clean_lyrics_80s <- tolower(clean_lyrics_80s)
words_80 <- strsplit(clean_lyrics_80s, "\\s+")

clean_lyrics_90s <- gsub("[[:punct:]]", "", lyrics_90s)
clean_lyrics_90s <- tolower(clean_lyrics_90s)
words_90 <- strsplit(clean_lyrics_90s, "\\s+")

이 과정까지는 동일하게 하였고 na가 들어가는 가사가 많았기 때문에 제거하기 위하여 extr 파일에 na나 do를 추가한 extr2 파일을 만들었다 또한 stop_words 묶음도 만들어 안 될 경우를 대비하였다

readLines("extract2.txt") -> extr2
## Warning in readLines("extract2.txt"): 'extract2.txt'에서 불완전한 마지막 행이
## 발견되었습니다
stop_words <-c("a","an","the","you","i","they", "them", "their", "for", "in", "an","a", "as","na","yes", "am", "are", "were","was")
filtered_words_80 <- words_80[!words_80 %in% stop_words]


filtered_words_90 <- words_90[!words_90 %in% extr2]
wordcount <- table(unlist(filtered_words_80))
df_words_80s <- as.data.frame(wordcount, stringsAsFactors =  F)
df_words_80s <- rename(df_words_80s, word = Var1, freq = Freq)
wordcloud(words = df_words_80s$word,
          freq = df_words_80s$freq,
          min.freq = 2,
          max.words = 200,
          random.order = F,
          rot.per = .1,
          scale = c(4, 0.3))

wordcount <- table(unlist(filtered_words_90))
df_words_90s <- as.data.frame(wordcount, stringsAsFactors =  F)
df_words_90s <- rename(df_words_90s, word = Var1, freq = Freq)

wordcloud(words = df_words_90s$word,
          freq = df_words_90s$freq,
          min.freq = 2,
          max.words = 200,
          random.order = F,
          rot.per = .1,
          scale = c(4, 0.3))

#00년대

readLines("00s.txt") ->lyrics_00s
## Warning in readLines("00s.txt"): '00s.txt'에서 불완전한 마지막 행이
## 발견되었습니다
clean_lyric_00s <- gsub("[[:punct:]]", "", lyrics_00s)
clean_lyric_00s <- tolower(clean_lyric_00s)
words_00 <- strsplit(clean_lyric_00s, "\\s+")

708090년대와 동일한 방법으로 진행하였다.

stop_words2 <-c("a","an","the","you","i","they", "them", "their", "for", "in", "an","a", "as","na","yes", "am", "are", "were","was", "yeah", "yes", "without")
filtered_words_00 <- words_00[!words_00 %in% stop_words2]

00년대 음악은 어셔의 노래와 같이 yeah가 계속 반복되기 때문에 결과값을 방해하지 않도록 stop words에 포함시켜 제거하였다.

wordcount <- table(unlist(filtered_words_00))
df_words_00s <- as.data.frame(wordcount, stringsAsFactors =  F)
df_words_00s <- rename(df_words_00s, word = Var1, freq = Freq)
wordcloud(words = df_words_00s$word,
          freq = df_words_00s$freq,
          min.freq = 2,
          max.words = 200,
          random.order = F,
          rot.per = .1,
          scale = c(4, 0.3))

달라진 점은 708090년대의 노래의 중심이 되었던 love라는 단어가 보이지 않는다는 점에 있다 이렇게 당대의 유행곡을 분석해봄으로서 시대에 따라서 음악의의 주제가 점점 변한다는 점을 알 수 있었다