嵐の歌詞を分析して可視化してみる。

最近嵐にハマってるので、嵐の歌詞を収集して歌詞に良く出てくる単語を可視化してみようと思った。
嵐が歌詞で伝えようとしてる事とは?

環境

  • Python 3.7.5

方法

  1. スクレイピング(歌詞の収集)
  2. 形態素解析
  3. 可視化

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

結果

嵐の歌詞に良く出てくる単語を可視化した画像

温かみのある歌詞だなーって分かった!

活動休止は寂しい…。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。
search previous next tag category expand menu location phone mail time cart zoom edit close