HiphopLE Analysis 1편
HiphopLE Analysis
- HiphopLE에 올라온 17만 개의 글을 분석하여 이런저런 분석을 수행해 봤습니다.
- HiphopLE Analysis에서 자세한 내용을 볼 수 있습니다.
- 이 글에서는 좀 더 세부적인 내용들을 정리합니다.
Intro
- 과거에는 다음 분석 자료를 공유한 적이 있습니다. 어느새 1년이 넘었네요.
- 이번에는 hiphopLE 국내 게시판의 글 17만개(+코멘트)를 수집하여 이런저런 분석들을 진행해 봤습니다.
- 어쩌면 분석 결과만 정리하는 것이 더 읽기 편했을지 모르지만, 분석 결과가 어떠한 방식으로 도출되었는지 설명하는 것도 중요하다고 생각하여, (비교적 세세한) 분석 과정도 모두 포함하여 설명하였습니다.
Data Collection
- 당연한 이야기지만, HiphopLE의 글들을 분석하려면, HiphopLE로부터 글에 관한 정보들(제목, 글쓴이, 날짜, 글내용, 코멘트)들을 제 컴퓨터로 가져와야 합니다.
- 글 1개씩을 클릭해서 일일이 엑셀에 붙여 넣는 것도 하나의 방법이겠지만, 글은 총 17만개죠.
- 즉, 글 1개를 복붙 하는데 1분이 걸린다고 해도 (170000 / 60) = 2833시간, 매일 10시간씩 한다고 해도 283일이 소요됩니다. 불가능하다는 얘기죠.
- 저는 python과 Selenium을 사용하여 “웹브라우저를 통해 HiphopLE에 글의 URL에 접속하여 글의 html 소스를 가져오고, 이 소스에서 필요한 정보(제목, 내용 등)를 추출하는 프로그램”을 개발하여 해당 과정을 자동화하였습니다.
- 그러나, 이 경우에도 (3 * 170000) / 3600 = 146.1시간 = 5.90일이 소요됩니다. 여전히 길죠.
- 프로그램을 N개 동시에 돌리면 빨리 끝낼 수 있지 않을까? 싶지만, 그게 DDoS 공격의 기본 방식이죠. 이 방식으로는 매우 당연하지만 서버에 과부하를 주게 됩니다. 만약 그로 인해 서비스에 문제가 발생하거나, 데이터가 유실된다면, 피해금액을 배상해야겠죠. 따라서 1개씩 매우 천천히 긁어왔습니다.
- 또한, “웹사이트에서 데이터를 긁어오는 것(데이터 크롤링)”은 아직 불법과 합법의 중간에 있습니다. 약 이 행위로 사적 이익을 취하거나, 사이트에 피해를 줄 경우에는 불법이 되죠. 최대한 조심해야 합니다.
Data Analysis
Data Analysis - 기본 통계
- 총 게시글 수: 175,222
- 총 댓글 수: 1,603,910
- 글 작성일: 2014.08.13 ~ 2021.4.14(2436일)
- 게시글 별 기본 통계
- 조회 수: 1768.6(Mean), 1121(Median), 19(Min), 304,456(Max)
- 추천 수: 1.18(Mean), 0(Median), 0(Min), 207(Max)
- 댓글 수: 9.18(Mean), 6(Median), 0(Min), 1,111(Max)
- 글자 길이(outlier제외): 205.5(Mean), 85(Median), 1(Min), 55,634(Max)
- 전체 User 수(글이나 댓글을 1번이라도 쓴 사람): 26,984명
Data Analysis - 기본 통계 - 게시글
- User 별 글 수: 6.49(Mean), 0(Median), 0(Min), 0(Mode), 3819(Max)
- 글을 0번 쓴 사람이 14011명(51.92%), 1번 쓴 사람이 4694명(17.40%)입니다. 글은 0번 쓴 사람(댓글만 쓰는 사람)이 전체 User 수의 반을 차지한다는 것이 좀 놀랍네요.
- 게시글 수 기준으로 보았을 때, 다음과 같은 분포를 가집니다.
- 상위 100명의 User( 0.37%)가 전체 글의 25.01%를 작성했고
- 상위 500명의 User( 1.85%)가 전체 글의 50.92%를 작성했고,
- 상위 2300명의 User( 8.52%)가 전체 글의 80.57%를 작성했습니다.
- 상위 4400명의 User(16.31%)가 전체 글의 90.79%를 작성했습니다.
- 상위 11300명의 User(41.88%)가 전체 글의 99.05%를 작성했습니다.
- 전체 User 중 적은 비율의 User가 전체 글의 상당 비율을 차지하고 있습니다.
Data Analysis - 기본 통계 - 댓글
- User 별 댓글 수: 59.4(Mean), 4(Median), 1(Mode), 0(Min), 12949(Max)
- 댓글은 0번 쓴 사람이 3136명(11.6%)입니다. 즉, “글은 쓰지만, 댓글은 단 적 없는 사람”이 전체의 11%를 차지한다는 것인데, 제 예상보다는 꽤 높네요.
- 댓글 수 기준으로 보면 다음과 같은 분포를 가집니다.
- 상위 100명의 User( 0.37%)가 전체 댓글의 21.75%를 작성했고,
- 상위 600명의 User( 2.22%)가 전체 댓글의 51.98%를 작성했고,
- 상위 2400명의 User( 8.89%)가 전체 댓글의 80.06%를 작성했고,
- 상위 4600명의 User(17.05%)가 전체 댓글의 90.08%를 작성했고,
- 상위 14400명의 User(53.36%)가 전체 댓글의 99.01%를 작성했습니다.
- 글과 비슷하게, 전체 User 중 적은 비율의 User가 댓글의 상당 비율을 차지하고 있습니다.
Data Analysis - 기본 통계 - (연도, 월)별 게시글 수 변화
- (연도, 월) 중에서 게시글 수가 뚜렷하게 높은 (연도, 월)은 다음과 같습니다.
- 2015.07: 2555편: 쇼미더머니와 블랙넛(feat. 죽부인)
- 2015.08: 3588편: 에넥도트 발매
- 2015.11: 2625편: 심바자와디 - 하이라이트 at 머니플렉스
- 2018.10: 2203편: 비프리와 팔로알토 인스타라이브
- 2018.11: 2707편: 산이-제리케이 디스전(feat. 페미니즘), 마이크로닷 가족 사건
- 2019.07: 4534편: 언에듀vs올티, 이방인 발매
- 2020.05: 3816편: 비프리 킹치메인 폭행
- 2021.01: 4796편: 아웃사이더 - LBNC - 디핀칼즈 디스전
- 그림으로 보시려면, Data Analysis - 기본 통계 - (연도, 월)별 게시글 수 변화를 확인해주시면 좋습니다.
Data Analysis - 기본 통계 - (연도, 월)별 활성 사용자수 변화
- 활성 사용자: 해당 (연도, 월)에 글 or 댓글을 1개 이상 작성한 사용자
- 변동폭은 더 좁지만, 게시글 수의 변화와 거의 같기 때문에 코멘트를 작성하지 않습니다.
Data Analysis - 주요 명사 빈도 분석
- 이제 글들에서 빈번하게 등장하는 고유명사를 분석해보겠습니다.
- 고유명사: 아티스트, 레이블(or 크루), 앨범명 등
- ex) 이센스, 팔로알토, VMC, 에넥도트 등
- “힙합”, “앨범”과 같은 단어들은 지나치게 일반적인 단어들이라고 판단하고 제외하였습니다.
- 그냥 몇 개의 단어들을 정하고 그 단어들이 전체 게시글 들 에서 몇 번이나 등장하는지 세면 되는 것 아닐까요?
- ex) “딥플로우”라는 단어는 전체 게시글에서 몇 번이나 등장하는가?
- 사실 이렇게 간단한 문제가 아닙니다.
- 문제점1) 주관적인 취향이 반영될 가능성이 커짐.
- 직접 제가 대상 단어들을 정의하고 그 대상단어들의 빈도를 세는 방식으로 진행할 경우, 저의 주관적인 취향(ex: 제가 좋아하는 랩퍼들을 중심으로 선정)이 반영되는 문제점이 발생할 수 있습니다.
- 이렇게 진행할 경우 “HiphopLE에서 자주 언급되는 랩퍼들”을 분석하는 것이 아니라, 그냥 “제가 관심있는 랩퍼들의 HiphopLE 내 등장 빈도 분석”이 되는 것이죠. 비슷해 보이지만 엄연히 다른 분석이 되어 버립니다.
- 문제점2) 별칭(Alias)를 제외하게 되어 결과가 부정확해질 수 있음.
- 의미적으로 같은 대상을 지칭하는 별칭(Alias)들을 제외하게 된다는 문제가 발생하여 결과의 정확도가 떨어질 수 있습니다.
- ex1) “Paloalto”, “팔로형”, “팔로알토”는 모두 같은 대상을 지칭합니다.
- ex2) “젓딧”, “저스디스”, “승이”, “허승”도 마찬가지죠.
- 문제점1) 주관적인 취향이 반영될 가능성이 커짐.
- 저는 앞서 말한 두 가지 문제점을 해결하기 위해서, 우선은 전체 문장들에서 “명사”를 추출하는 작업을 시작했습니다. 제가 “명사”를 직접 정의하는 것이 아니라, 문장들로부터 “명사”를 뽑아내면 어느 정도의 객관성을 확보할 수 있기 때문이죠.
- 문장에서 자동으로 명사를 추출해주는 Tool들이 몇 개 있지만, 기존의 많은 Tool들은 HiphopLE의 게시글에 나타나는 명사들을 잘 인식하지 못합니다. 기존의 많은 Tool들은 일반적인 문장들을 활용해서 개발되었기 때문에, 한국힙합에 특화된 단어들(ex: 딥플로우, 오왼 등)에 대해서는 거의 인식하지 못합니다.
- 가령 기존 Tool들은 “이센스”를 “이”, “센스”로 분류해 버립니다.
- 따라서, HiphopLE Vocabulary에 맞춰 학습된 명사 추출 방법이 필요합니다.
우리는 명사를 어떻게 인식하는가?
- “X는 요즘 뭐함?”, “X가 이번에 낸 앨범 존나 별로임”
- 위 두 문장이 있을 때, 우리는 X가 조사인 “는”과 “가”앞에 존재하기 때문에 명사일 것이라고 유추합니다. 즉, “조사 앞에 등장하는 빈도가 높다면, 이 단어는 명사일 확률이 높다”라는 것이죠.
- 이와 같은 방식으로, 문장들로부터 명사 - 조사 Graph를 구축합니다.
- 이를 통해 “명사일 가능성이 높은 단어들”을 효율적으로 추출할 수 있죠.
- 물론 이는 개념적인 설명이고, 실제로는 조금 더 복잡합니다.
추출된 고유 명사들
- 해당 방법을 사용하여 다음과 같이 명사를 추출합니다. 아래 단어들은 빈도 높은 순으로 정렬되어 있습니다.
- 그 중에서 한국힙합과 관련된 고유명사들을 선별합니다.
생각,앨범,음악,힙합,많이,가사,좋아,느낌,사람들,정말,감사,그리고,노래,하고,하나,비트,기대,댓글,하지,스윙스,자기,사실,개인적,본인,그렇게,엄청,이번,빈지노,쇼미,처음,솔직,추천,얘기,ㄹㅇ,물론,이센스,때문,뭔가,부분,계속,분들,한번,제일,저스디스,기억,이해,이상,래퍼들,같이,가장,아티스트,아니고,한국,도끼,공연,궁금,비프리,트랙,씨잼,확실,엘이,인정,있고,시작,디스,올해,조금,우리,아이돌,소리,블랙넛,표현,인스타,이름,시간,라이브,비슷,스타일,그럼,당연,공감,ㄷㄷ,보니,되게,잘못,실력,필요,있지,마음,영상,최근,피쳐링,언급,벌스,랩을,이유,관심,목소리,말씀,사랑,의미,산이,국힙,1집,수준,제대,곡들,모두,취향,모습,이후,발매,자체,플로우,오케이션,오왼,마지막,뮤비,이야기,완전,자신,혹시,비와이,그걸,수도,미국,충분,다음,싱글,싫어,해도,의견,당시,내용,듣기,애들,활동,자체가,라고,좋아요,작업,기분,굉장,없고,애초에,사운드,넉살,여자,싶어,입장,인터뷰,방송,말고,유튜브,창모,평가,쌈디,전에,버벌진트,그것,사진,중요,약간,ㅇㅈ,장르,프로듀서,대부분,이번에,예전,박재범,반응,타블로,팔로알토,이미지,해야,무대,딥플로우,화지,예전에,가능,참여,사이,죄송,차이,상황,옛날,음원,기리보이,작업물,앞으로,아닌가요,재미,더콰,얼마나,쇼미더머니,문화,진심,명반,함께,현재,세상,말을,등등,자신의,서로,랩은,관련,인생,밖에,분명,라임,열심히,단어,기준,대단,대해서,레이블,성공,나플라,팬들,상관,무조건,유명,회사,아예,얼굴,제목,사용,스웩,더콰이엇,머리,실제,여기서,비교,트랩,언에듀,태도,영화,프로듀싱,단순,남자,영향,설명,나름,오랜만,논란,그들,싶네요,나이,어느정,대체,피처링,국내,군대,믹테,사건,보기,크루,이것,2집,개인,갠적,친구들,라인,리드머,외힙,아주,보컬,존재,영어,작년,노창,한국힙합,응원,문제가,지코,퀄리티,다양,랩퍼들,과거,그저,에픽하이,저렇게,정확,이걸,나중,정신,것들,비판,앨범들,슈퍼비,영비,그만,행동,테이크원,현실,이젠,공개,김심야,매력,병신,젓딧,
동의어 처리 + 유형 구분
- 결과의 정확도를 높이기 위하여, 의미적으로 같은 단어들을 정리해줍니다.
- 대상: 등장 빈도가 200번 이상 등장한 단어들(6245개)
- ex: (더콰, 더콰이엇, 더큐), (이센스, 센스, 강민호), (하일라잇, 하이라이트)
- 예외: (매드클라운 ⇒ 마미손), (바스코 ⇒ 빌스택스), (제이켠 ⇒ 콕스빌리) 와 같이 음악적 정체성을 변경한 경우에는 동의어로 처리하지 않았습니다.
- 유형별로 단어의 빈도 변화를 분석하기 위하여 단어의 유형을 구분해줍니다.
- Artist: 스윙스, 빈지노, 팔로알토, 딥플로우 등
- Album: 에넥도트, XXX, 누명, 이방인 등
- Track: 신기루, 작두, 거북선 등
- Media: 쇼미, 힙합엘이, 딩고, 킬링벌스, 침착맨, 김봉현 등
- 약간 애매하지만“김봉현”을 Artist로 넣을 수 없어 Media로 분류하였습니다.
- Label(or Crew): 하이라이트, 저스트뮤직, 리짓군즈 등
- Label, Crew를 구분하지 않고 합쳐서 분류하였습니다.