見出し画像

【データ分析】Yahoo API(形態素解析)でaikoとBUMP OF CHICKENを比較してみる

4月に入っても僕の生活に変化はなく,天候は冷たい雨が降り続いている.

一応,こちらの続き.
【データ分析】スプレッドシートからYahoo API(形態素解析)を使う

aikoとBUMP OF CHICKENの歌詞を取得する

昨日,Yahoo APIで形態素解析をできるようにした.そうなるとやはり,実際のデータを使ってみたくなる.なので,あの手この手を使って,aikoとBUMP OF CHICKENの歌詞をWEB上から取得する.
※僕が調べた感じ,データ解析のためにデータを収集・分析するのはOKみたい
(具体的な取得方法は省略するが,IMPORTXML関数を使用すればしれっと簡単に取得できちゃう"かも"しれない)

データ取得結果のサマリーは以下になる.

サマリー(※厳密性は求めていない)

また,取得したRawDataは以下になる(抜粋).

歌詞のRawData

実際に形態素解析してみる

昨日はスプレッドシート関数のIMPORTXML関数を使用して,形態素解析を行ったが,約400曲近く形態素解析をしなくては行けないので,流石にGAS(Google Apps Script)で行った.気をつけた点は大体以下の3点になる.
1.不適切な文字の削除 or 置換
2.連想配列を使用してのデータの集計
3.処理の高速化のために配列で形式でスプレッドシートに貼りつけ
(そういえばレスポンスのXMLがきれいに取得できなかったので,正規表現での文字列抽出もやった)

1.に関して
解析する文章をURLに含んでリクエストをするので,?や&などのURLに含んでいると不適切な文字は削除 or 置換(半角から全角に)をした.

2.に関して
アーティストごとに単語の頻度の集計が必要なので,以下のような連想配列形式で一時集計を行った.

{
    潰れる=[動詞,{BUMP OF CHICKEN=0.0}, {aiko=2.0}],
     一言=[名詞,{BUMP OF CHICKEN=3.0}, {aiko=5.0}],
     ぶらさがる=[動詞,{BUMP OF CHICKEN=0.0}, {aiko=9.0}]
}

3.に関して
GASは無料版だと実行時間に制限がある.2.で集計したデータをループ処理でスプレッドシートに書き出そうすると実行時間をオーバーしてしまう.そこで連想配列を二次元配列に置き換え,一括でスプレッドシートに書き込むようにした.(爆速になる)

作成したデータ.

[
  [私, 名詞, 2.0, 15.0], 
  [たとえ, 副詞, 3.0, 3.0], 
  [耳, 名詞, 42.0, 20.0]
]

(参考)二次元配列をそのままスプレッドシートに書き込む処理.

対象のシート.getRange(データの貼り付け範囲の指定).setValues(作成した配列データ);
// exp)
ss.getRange(11array.length, 4).setValues(array);

出来上がったデータは以下になる(抜粋).

形態素解析の結果

データを少し眺めてみる

これが思いのほか楽しい.
例えば,単純に"1"と"2"という数字に関しても,恋愛の歌が多いイメージのaikoでは"2"の方が頻度が多いがBUMP OF CHICKENでは"1"の頻度の方が多い.(aikoは曲に"相手"がいることが多いのかなと思う)
また,相手を指す言葉に関しても,以下のように差が出る.
----------
・"あなた"の場合
aiko:1,022
BUMP OF CHICKEN:94
・"君"の場合
aiko:127
BUMP OF CHICKEN:366
---------
それぞれがどのように使い分けているのかを深掘りをしても面白いのかもしれない.

最終的には簡単な機械学習みたいなことして,歌詞からaikoの歌詞かBUMP OF CHICKENの歌詞のなのかの分類をしてみようかと思っているが,そんなことしなくてわかってしまうくらい特徴がある.

自分が好きである,曲数があること,差がでやすそう,という観点で上記2名(グループ)を選んだがもう少し考えた方が良かったかもしれない.

終わりに

地震が起きる時,揺れる直前に聞こえてくる地響きの音がとても怖い.
ただ,音楽は楽しい感情も切ない感情もいろいろな感情を味わせてくれるので素晴らしい.

人は幸せだから歌うのではない。歌うから幸せなのだ。
ウィリアム・ジェームズ

そろそろ晴れてくれないかな.
(僕にも春が来ないかな)

PCとスマホ,wifiだけを持って全国をのんびり旅したい.