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

きっかけ

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

環境

・Python 3.7.3
・windows10

参考資料

・Uta-Net
・米津玄師の歌詞をWordCloudで可視化してみた。

大まかな流れ

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

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

scraping.py
import requests
from bs4 import BeautifulSoup
import pandas as pd

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','')

        tmp_se = pd.DataFrame([song_lyric], index=list_df.columns).T
        list_df = list_df.append(tmp_se)

print(list_df)

list_df.to_csv('list.csv', mode = 'a', encoding='cp932')

出力結果
キャプチャ1.PNG

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

morphological_analysis.py
from janome.tokenizer import Tokenizer
import pandas as pd
import re

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))

出力結果
キャプチャ2.PNG

3. 可視化(WordCloud)

wordcloud.py
from wordcloud import WordCloud

text_file = open('wakati_list.txt', encoding='utf-8')
f = 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(f)

wordcloud.to_file('./wordcloud.png')

↓↓結果はどうだ↓↓

実行結果

いい感じーーーー!
wordcloud_sample.png

まとめ

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

嵐からのメッセージ

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

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

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

おわりに

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
問題のあるコメントを報告する

実現可能かを知りたいのですが、「!」や「?」などの特殊文字はwordcloudの中に含めることはできないのでしょうか?

問題のあるコメントを報告する

二ノ結婚おめでとう!

Sign up for free and join this conversation.
If you already have a Qiita account