【Python】嵐の歌詞をWordCloudで可視化して、結成20年でファンに伝えたかったことを紐解いてみた

#きっかけ
嵐の活動休止まで残り一年ですね。スケスケ衣装の登場からなんともう20年。マルチで活躍する国民的アイドルは結成20年でファンに何を伝えたかったのか？直接お会いして伺いたいとこだが、そんな訳には。ですので、「歌詞を可視化」して、ファンに伝えたいメッセージを~~6人目のメンバーである~~私が嵐ファンに伝えることにしました。

#環境
・Python 3.7.3
・windows10

#参考資料
[・Uta-Net](https://www.uta-net.com)
[・米津玄師の歌詞をWordCloudで可視化してみた。](https://qiita.com/Senple/items/1ad08b1a7ac9560bef62)

#大まかな流れ
1. 歌詞の収集(スクレイピング)
2. 歌詞を単語にする(形態素解析)
3. 可視化(WordCloud)

#1. 歌詞の収集(スクレイピング)

```python:scraping_arashi.py
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

#スクレイピングしたデータを入れる表を作成
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:
		a = base_url + (link.a.get('href'))

		#歌詞詳細ページ
		response = requests.get(a)
		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)

print(list_df)

#csv保存
list_df.to_csv('list.csv', mode = 'a', encoding='cp932')
```

#2. 歌詞を単語にする(形態素解析)

```python:morphological_analysis_arashi.py
from janome.tokenizer import Tokenizer
import pandas as pd
import re

#list.csvファイルを読み込み
df_file = pd.read_csv('list.csv', encoding='cp932')

song_lyrics = df_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

		hinshi = ps.split(',')[0]

		if hinshi in ['名詞', '形容詞', '動詞', '副詞']:
			r.append(word)

	rl = (' '.join(r)).strip()
	results.append(rl)
	#余計な文字コードの置き換え
	result = [i.replace('\u3000','') for i in results]
	print(result)

text_file = 'wakati_list.txt'
with open(text_file, 'w', encoding='utf-8') as fp:
	fp.write("\n".join(result))
```

#3. 可視化(WordCloud)

```python:wordcloud_arashi.py
from wordcloud import WordCloud

text_file = open('wakati_list.txt', encoding='utf-8')
text = text_file.read()

#日本語のフォントパス
fpath = 'C:/Windows/Fonts/YuGothM.ttc'

#無意味そうな単語除去
stop_words = ['そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる']

wordcloud = WordCloud(background_color='white',
	font_path=fpath, width=800, height=600, stopwords=set(stop_words)).generate(text)

#画像はwordcloud.pyファイルと同じディレクトリにpng保存
wordcloud.to_file('./wordcloud.png')
```
↓↓結果はどうだ↓↓

#実行結果
いい感じーーーー！
![wordcloud_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474739/e734ac06-c15f-0263-68e7-548704cbf279.png)


#まとめ
歌詞を可視化して、「未来」「僕ら」「ここ」「見る」など嵐の温かみを感じる単語が頻出していることが分かりました(*´▽｀*)

#嵐からのメッセージ
僕たちと共に未来に向かって歩んで行こう。そして、ずっと君の傍にいるよ。
活動休止まで残り一年、まだまだ日本中にA・RA・SHI旋風を巻き起こします（~~6人目のメンバーである私からのメッセージ。~~）

ファンの方は私が言わなくても嵐の想い伝わってるよね？

「僕ら」嵐ファンは最後まで嵐を全力で応援します。
頑張れARASHI。そして、はじけりゃYea！

#おわりに
嵐の曲を題材にスクレイピング、形態素解析、WordCloudの使い方を楽しく学びました。長くなりましたが、ここまで読んでくださりありがとうございます。誤っている箇所がございましたら、コメントでご指摘頂けると大変嬉しいです。