最近嵐にハマってるので、嵐の歌詞を収集して歌詞に良く出てくる単語を可視化してみようと思った。
嵐が歌詞で伝えようとしてる事とは?
環境
- Python 3.7.5
方法
- スクレイピング(歌詞の収集)
- 形態素解析
- 可視化
1.スクレイピング(歌詞の収集)
import requests import pandas as pd import time from bs4 import BeautifulSoup #データを入れるリスト list_df = pd.DataFrame(columns=['歌詞']) for page in range(1, 3): base_url = 'https://www.uta-net.com' #歌詞一覧ページ url = 'https://www.uta-net.com/artist/3891/0/' + str(page) + '/' response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') links = soup.find_all('td', class_='side td1') for link in links: url = base_url + (link.a.get('href')) #歌詞詳細ページ response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') song_lyrics = soup.find('div', itemprop='lyrics') song_lyric = song_lyrics.text song_lyric = song_lyric.replace('\n','') #1秒待機 time.sleep(1) #取得した歌詞を表に追加 tmp_se = pd.DataFrame([song_lyric], index=list_df.columns).T list_df = list_df.append(tmp_se) #保存 list_df.to_csv('list.csv', mode = 'a', encoding='cp932')
2. 形態素解析
import pandas as pd import re from janome.tokenizer import Tokenizer #lファイルを読み込み file = pd.read_csv('list.csv', encoding='cp932') song_lyrics = file['歌詞'].tolist() t = Tokenizer() results = [] for s in song_lyrics: tokens = t.tokenize(s) r = [] for tok in tokens: if tok.base_form == '*': word = tok.surface else: word = tok.base_form ps = tok.part_of_speech parts_of_speech = ps.split(',')[0] if parts_of_speech in ['名詞', '形容詞', '動詞', '副詞']: r.append(word) rl = (' '.join(r)).strip() results.append(rl) #余計な文字コードの置き換え result = [i.replace('\u3000','') for i in results] print(result) text_file = 'list.txt' with open(text_file, 'w', encoding='utf-8') as fp: fp.write("\n".join(result))
3. 可視化
from wordcloud import WordCloud file = open('list.txt', encoding='utf-8') text = file.read() #無意味な単語除去 delete_words = ['そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる'] #日本語のフォントパス font = 'ここにフォントのファイルパスをいれる' wordcloud = WordCloud(background_color='white', width=800, height=600, font_path=font, stopwords=set(delete_words)).generate(text) #画像を保存 wordcloud.to_file('./ARASHI_song_lyrics.png')
結果

温かみのある歌詞だなーって分かった!
活動休止は寂しい…。