프로그래머스 2021 국민대 여름방학 인공지능 과정 7주차 Day2 TIL
WordCloud를 이용해 시대별 가사의 주요 키워드를 분석해보기
사용할 데이터 불러오기
music_info.csv
col: title, artist, lyric, genre, era
music = pd.read_csv("./music_info.csv")
토크나이저 생성
from konlpy.tag import Okt
tokenizer = Okt()
특정 연대의 가사만 가져옴
lyrics_1990 = music[music['era']==1990]['lyric']
가사를 형태소 기준으로 토크나이징해줌
명사 형용사 부사만 추출
morph_1990 = []
tmp_list = []
for lyric in lyrics_1990:
tmp = tokenizer.pos(lyric)
tmp_list.append(tmp)
for i in tmp_list:
for word, tag in i:
if tag in ['Noun', 'Adjective', 'Adverb'] and ("것" not in word) and ("수" not in word) and ("게" not in word):
morph_1990.append(word)
morph_1990 = ' '.join(morph_1990)
워드 클라우드 생성
wordcloud = WordCloud(max_words=40, font_path='./NanumSquareR.otf', max_font_size=100, background_color='white').generate(morph_1990)
워드 클라우드 출력
plt.figure(figsize=(20, 20))
plt.imshow(wordcloud, interpolation='lanczos')
plt.axis('off')
plt.show()
🔽 1990년대
🔽 2000년대
나나 나나 는,, 뭐냐..
🔽 2010년대
는 시대별이 아니라 장르별을 했어야...하나 뭔 다 똑같음...
아무튼 시대불문하고 대표 키워드는 사랑인 듯 하고요..
오늘의 수확은 없지만..,뭐... 고럼... 가사들 가지고 사랑노래인지 아닌지 분류하는 걸 해봐야지
전체 코드
https://github.com/kueyeon0429/NLP-proj/blob/master/wordcloud.py
데이터
https://github.com/kueyeon0429/NLP-proj/blob/master/music_info.csv
폰트
나눔스퀘어 https://hangeul.naver.com/font
참고
가사를 데이터 분석한다면? https://maily.so/musicdata/posts/7251b9
참고
파이썬 워드클라우드 만들기 https://khann.tistory.com/60
참고
형태소 분석기 https://study-with-yuls.tistory.com/253
참고
워드 클라우드 만들기 https://imworld.tistory.com/59
위의 워드클라우드는 셋이 다 비슷한 결과를 보여준다
정말 아무 수확이 없는 듯 해서 당황했는데ㅎㅎ;;
실시간 세션때 김태영 대표님? 멘토님?이 이런 경우에는 상위 몇개를 제외하고 워드클라우드를 뽑아보는 방법도 있다고 피드백을 해주셨당
그래서 공통적으로 가장 많이 나온 ['사랑', '그대']만 일단 없애보기로!
하려다가 '사람'도 뺐음
단어 필터링 해주고
morph_1990 = list(filter(lambda x: x not in ['사랑', '그대', '사람'], morph_1990))
다시 리스트 -> 문자열로 합쳐주고
morph_1990 = ' '.join(morph_1990)
워드클라우드를 생성!(이번엔 필터링한 거 제외하고 상위 20개만 뽑아봤음)
# word cloud 생성
wordcloud_1990 = WordCloud(max_words=20, font_path='./NanumSquareR.otf', max_font_size=100, background_color='white').generate(morph_1990)
🔽 1990년대
🔽 2000년대
절절하네
(정제 안된거 좀 거슬리네)
🔽 2010년대
필터링을 하니까 특성이 조금 보이는 것 같다!