Joonas' Note

Joonas' Note

한국 노래 가사(1964~2023년) 데이터 분석해보기 본문

개발/python

한국 노래 가사(1964~2023년) 데이터 분석해보기

2024. 1. 26. 00:28 joonas

    배경

    노래를 꽤 다양하게 듣는 편인데 최근 한국 노래들에 이지리스닝류가 많아지기도 했고, 한국어 가사의 비중이 점점 줄어들고 있는 등 한국 노래 가사의 트렌드가 궁금해져서 한번 데이터를 분석해보기로 했다.

    데이터는 멜론 연대별 TOP 100 차트로부터 제목/가수/가사 정도만 수집했고, 기억이 맞다면 약 8시간정도 걸렸다.

    정말 영어가 많아졌는가?

    마침 1964년부터 2023년까지 60년의 데이터가 쌓였고, 결론부터 말하자면 영어 비중은 많아졌다.

    1964~2023년 연도별 한글/영어 가사 비율

    2023년에 들어서는 영어 가사의 비중이 25% 를 넘을 정도로 많아졌고, 최근에 사람들이 이런 사실을 체감하는 이유는 2011년 이후로 10년만에 영어 비율이 더 커지고 있기 때문으로 보인다.

    영어 비중은 2008~2012년 사이에 잠시 상승하고 그 뒤로는 오히려 줄어들더니, 2018년부터 다시 상승한다.
    2018년에는 BTS가 FAKE LOVE로 빌보드 TOP 10에 처음으로 진입한 연도이기도 하다.
    물론 2012년에 싸이도 강남스타일로 빌보드 HOT 100에 오랫동안 있었지만, 영어라고는 "You know what I'm saying?" 말고는 전부 추임새 수준이다.

    무엇이 원인이 되었는지는 노래 트렌드 외에도 외부 요인이 많을 것 같아서, 당시 상황은 참고 정도로만 보면 될것 같다.


    한국어 가사 분석

    형태소 분석기 선택

    한국어 형태소 분석에는 여러 라이브러리가 있는데, 처음에 KoNLPy 로 해봤다가 자바 경로 설정 문제가 있어서 다른 걸 알아보던 중, Kiwi가 형용사나 보조 용언 쪽에서 품사 태그를 더 자세히 분류하고 API도 간단해보여서 중간에 Kiwi로 변경했다.

    (좌) KoNLPy 동사 추출, (우) Kiwi 동사 추출

    여담으로 KIWI 개발자 블로그가 있길래 형태소 분석기가 어떤 원리로 개발되었는지 글이 있어서 읽어봤는데 무척 흥미로웠다.
    관심 있는 사람은 https://bab2min.tistory.com/560 글을 읽어보기를 추천한다.


    시대별 주요 키워드

    시대별로 주요 키워드를 한 눈에 보기 위해서 워드클라우드를 그려보았고 위와 같이 나왔다.

    시대가 지날수록 단어의 수가 많아지는 걸로 보아 노래에 사용되는 어휘가 다양해진 것을 알 수 있다.

    "너", "사랑", 그리고 "잊다", "없다" 와 같은 키워드는 전 시대를 관통하는 듯 모든 시대에서 크게 보인다.
    반면에 "꽃", "가슴", "아가씨" 와 같은 단어는 점점 작아지다가 2020년 이후부터는 보이지 않을 정도로 등장하지 않는다.


    가사 길이 변화

    연도별 토큰(가사) 길이

    띄어쓰기 단위로 구분하는 방법도 있겠지만, 형태소 단위로 분리했을 때 그 길이를 비교하는 것이 더 많은 어휘를 담고 있다고 생각했다.
    그리고 어차피 공백 단위로 구분한 길이 역시 형태소로 분리한 후의 길이와 비례하기 때문에 추세를 보는 데에는 문제가 없을 것이다.

    갑자기 급증하는 구간은 1990~2000년 사이인데 세기말에 분명 무슨 일이 있었던 모양이다.
    높은 확률로 서태지가 아닐까 싶은데.. 


    품사별 빈도 수

    명사로는 나/너/사랑/그/그대/우리/마음/다시/사람 순으로 많았고, '거'는 "그럴거야"와 같은 문장에서 많이 등장한 걸로 보인다.

    명사/동사/형용사/부사 단어 빈도 수

    차트에 '하다', '말', '보다' 항목에 왜 오차가 표시되었는 지 모르겠다. 흠..
    위는 감탄사/조사/접두/접미 등을 제외하고 명사/동사/형용사/부사를 전부 센 결과라서 '말'이 '말다(동사)'인지 '말(명사)' 인지 알기 어렵다. 아마도 후자겠지만 품사별로 분리해서 보면 아래와 같다.

    품사(대분류)별 단어 빈도 수

    품사별로 나누어서 보니 형용사에서 다양한 어휘들이 보인다. '슬픈', '그리운', '괜찮은' 과 같은 가사가 많았나보다.
    빈도만 보는데 감성 발라드 노래 가사가 벌써 자동완성 되는 느낌이다.


    연도별 어휘 분포

    형태소로 쪼개었을 때 가장 많이 등장한 단어 16개만 추려보고, 연도별 등장 횟수를 확인하고 싶었다.

    가장 많이 등장한 단어 16개를 추려보았는데 {이-, 하-, 사랑, 말, 보-, 있-, -거, 없-, 주-, -것, 가-, 않-, 되-, 오-, 알-, 마음} 가 나왔다.

    한번 연도마다 많이 등장한 단어의 등장 횟수를 그래프로 그려봤는데, 전반적으로 시대가 지날수록 가사가 길어져서 단어의 등장 횟수도 많아진다.

    연도별 등장 횟수 그래프

    아무래도 등장 횟수는 가사 길이에 비례한데, 뒤로 갈수록 가사 길이가 길어진 경향을 고려하면 비율로 확인하는 것이 맞아보인다.

    연도별 단어 등장 비율

    1980년까지는 곡이 별로 없었고 가사도 짧다보니 비율이 크게 요동치는 것으로 보인다.

    '거'의 예문으로는 "저 거위도 벽을 넘어 하늘을 날을 라고", "다른 이는 꿈은 없는라 하네" 등이 있고,
    '날'의 예문으로는 "흥겨운 젊은의 콧노래로", "지원이가 여친이랑 헤어진 그" 가 있다.

    연도별 동사 등장 비율

    선 그래프로 그렸는데 너무 보기 어려워서 막대 그래프로 표시해봤다.

    과거에는 고향으로 가는 가사가 많았어서 '가다'가 많이 쓰였지만 지금은 그렇지 않다. '모르다'의 비율은 2016년에 17% 로 가장 높았고, 1990년 이후로 '잊다'의 비율이 가장 높은 해는 2006~2008년으로 13% 이다.

    '보다'의 경우에는 동사와 보조 용언을 함께 세어버린 나머지 비율이 같이 있어서 따로 분석을 더 해야할 것 같다.
    가사 예시로는, 동사로써 "널 바라면"과 보조 용언으로써 "그러다면"이 섞여있다.

    품사 구분이 애매하긴 하지만 가장 많이 쓰인 단어는 역시 '사랑'이고, 그 사용 비중이 가장 높았던 해는 1986년(3.4%) 이다.
    그래서 1986년 노래들을 찾아보았는데, 사랑이 그렇게 많이 쓰인지는 모르겠다.
    알 만한 노래로는 '희야 - 부활 (2회)', '휘파람 - 이문세 (1회)', '크게 라디오를 켜고 - 시나위 (0회)' 정도가 있다.
    아무래도 전체적으로 사용된 어휘 수가 작아서 비율이 커진 것이 아닌가 생각하고 있다.


    국내 가요 내 영단어들

    단수/복수형은 어느정도 처리된 것 같은데, 아무래도 apostrophe(')를 쓰는 단어들(don't/can't/I'm/You're/I'll/something's 등)은 아예 두 형태소로 분리되어 버려서 빈도 수로 봤을 때 의미를 해석하기 어려워졌다.

    그리고 시제도 원형(going -> go)으로 확인해보려 했으나, 영어의 경우에는 의미를 유지하기 위해서 going 과 같은 변형들(동명사, 현재분사 등)은 그대로 두었다. 마찬가지로 wanna/gonna 도 그대로 두었다.

    영어 단어별 빈도수

    아래는 2020년도 Billboard Hot 100 Top 10 노래 가사로 만든 워드 클라우드인데, 국내 가요에서 쓰이는 것과 크게 다르지 않다.

    word cloud by 2020 Billboard Hot 100 Top 10


    가장 긴 가사, 가장 짧은 가사

    가사가 가장 긴 노래와 가장 짧은 노래 상위 15개

    가사의 길이를 단어(공백) 단위로 셀 지 글자 수로 셀 지 고민했는데, 둘 다 확인해도 차트가 크게 다르지는 않아서 글자 수로 정렬했다.

    가장 긴 가사를 가진 노래 1위는 The Time Goes On - BewhY (2679자), 2위는 VVS (Feat. JUSTHIS) (Prod. GroovyRoom) - 미란이 외 3명 (2616자), 3위는 How Gee (하우지) - 빅뱅 (2552자) 이다.

    가장 짧은 가사를 가진 노래 1위는 내 마음의 보석상자 - SG워너비 (95자), 공동 2위로 초우 - 문주란 (96자), 사랑굿 - 길은정 (96자) 이다.


    가사 반복 수준 (후렴구)

    먼저 훅/싸비라고 불리는 후렴구 외에도 중독적인 구절들의 반복이 얼마나 있는 지 수치화를 해보려 했다.
    어떻게 계산했는지는 내용이 생각보다 길어져서 별도의 글로 작성하였다. 

    가사 반복도 TOP 12

    위 그래프에서 등장하는 노래는 반복도가 가장 높게 측정된 12개의 노래이다.
    만약 미스터 - 카라, Tell me - 원더걸스, Dumb Dumb - 레드벨벳 노래를 알고 있다면 어느 정도 납득할 수 있는 결과라고 생각한다.

    연도별 평균 가사 반복도 그래프

    후렴구가 굉장히 많이 반복되는 티아라의 Bo Peep Bo Beep슈퍼주니어의 쏘리 쏘리의 발매일이 2009년이다.
    평균 가사 반복도가 가장 높았던 해는 1973년으로 0.37 이다. 참고로 2009년의 평균 가사 반복도는 0.222 로 16번째로 높다.

    느낌으로는 위 예시처럼 최근 20년 사이에 중독성 높은 노래들이 많았어서 평균값이 더 높을거라고 생각했는데,
    가사가 짧고 문단 전체가 반복되는 케이스가 많았어서인지 1980년 이전이 더 반복도가 높은 걸로 나왔다.

    빌보드 Top 10을 대상으로 한 비슷한 분석이 있었는데, 수식을 어떻게 계산한건지 궁금하다.

    Lyrical Analysis of Every Top 10 Song Ever (~2020)


    감정 분석

    긍정/부정과 같은 감정 분석도 한번 해보고 싶은데, 글이 길어져서 별도의 글로 작성할 예정이다.


    주제 분류

     

     

    한국 가요(1964~2023)를 주제별로 모아보기

    한국 노래 가사(1964~2023년) 데이터 분석해보기 배경 노래를 꽤 다양하게 듣는 편인데 최근 한국 노래들에 이지리스닝류가 많아지기도 했고, 한국어 가사의 비중이 점점 줄어들고 있는 등 한국 노

    blog.joonas.io


    코드

     

    GitHub - joonas-yoon/kpop-lyrics-analytics: 국내 가요 노랫말 분석 (1964~2023)

    국내 가요 노랫말 분석 (1964~2023). Contribute to joonas-yoon/kpop-lyrics-analytics development by creating an account on GitHub.

    github.com

    참고

     

    From the dataisbeautiful community on Reddit: [OC] Word cloud made from the lyrics of every song that has hit the Billboard Hot

    Explore this post and more from the dataisbeautiful community

    www.reddit.com

     

    kiwipiepy API documentation (v0.16.2)

    Package kiwipiepy Kiwipiepy란? Kiwipiepy는 한국어 형태소 분석기인 Kiwi(Korean Intelligent Word Identifier)의 Python 모듈입니다. C++로 작성되었고 다른 패키지에 의존성이 없으므로 C++ 컴파일이 가능한 환경이라

    bab2min.github.io

     

    09-02 워드투벡터(Word2Vec)

    앞서 원-핫 벡터는 단어 벡터 간 유의미한 유사도를 계산할 수 없다는 단점이 있음을 언급한 적이 있습니다. 그래서 단어 벡터 간 유의미한 유사도를 반영할 수 있도록 단어의 의미를…

    wikidocs.net

     

    Comments