Help us understand the problem. What is going on with this article?

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

きっかけ

嵐の活動休止まで残り一年ですね。スケスケ衣装の登場からなんともう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の使い方を楽しく学びました。長くなりましたが、ここまで読んでくださりありがとうございます。誤っている箇所がございましたら、コメントでご指摘頂けると大変嬉しいです。

Why not register and get more from Qiita?
  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
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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