LoginSignup
387
255

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-11

きっかけ

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

環境

・Python 3.7.3
・windows10

参考資料

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

大まかな流れ

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

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

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. 歌詞を単語にする(形態素解析)

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)

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

まとめ

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

嵐からのメッセージ

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

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

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

おわりに

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

387
255
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
387
255