「Perfume FES!! 」だし、コマンドラインでぬるっと歌詞分析してみた


## tl;dr
- 「Perfume FES!! 2017」ということで、歌詞分析してみました（先に断っておきますが、精度は低いのであしからず）
- 分析対象総曲数: 91曲
- 総単語数: 11854単語
- 結果: 

| 部門 | 単語|回数 | 
| --- | --- | --- | 
| 総合部門1位 | ない| 402回 | 
| 名詞部門1位 | キミ | 227回 |
| 動詞部門1位 | 好き | 66回 |

## 調査に関して

### 1. ツール

◆MeCab
http://taku910.github.io/mecab/
mecabコマンド: 日本語の形態素解析するために使用。

◆Data Scinece at the Command Line
https://github.com/jeroenjanssens/data-science-at-the-command-line
headerコマンド: csvにheader行を加えるために使用（無くてもよい）。

◆CSVKit
http://csvkit.readthedocs.io/en/1.0.2/
csvlookコマンド: カンマ区切りのデータをコマンドラインから確認するために使用（無くてもよい）。

### 2. データ獲得
歌詞の取得はrubyのnokogiriで行いました。今回は割愛。
※複製権侵害の防止のためか、歌詞掲載サイトによってはソースコードがuglifyされていたり、403ステータスを返したりします。


### 3. 総単語数

- 11854単語

```bash
< all_lyrics.txt mecab -Owakati | tr '[:upper:]' '[:lower:]' | 
grep -oE '\S{2,}' | wc -w
```

#### ◆mecabコマンド

日本語を形態素解析したり、漢字の読みがなを取得したりする。

- -Owakati

分かち書き。単語を半角スペースに区切った形での出力。

#### ◆trコマンド

文字の一括置換を行う。translateの略。
今回は集計のために、アルファベットの大文字を小文字に統一するために使用。

#### ◆grepコマンド

文字列の検索を行う。Global Regular Expression Printの略。
今回のケースだと、`egrep`(Extended GREP)のoオプションでも同じ結果が得られる。

- -E, --extended-regexp

拡張正規表現。半角スペースやタブ以外の2回以上(2語以上の単語)を一致させるために使用。

- -o, --only-matching

マッチング部分のみ抽出するオプション。

#### ◆wcコマンド

指定したファイルの行数・単語数・バイト数を表示する。

- -w

単語数のみ表示。

### 4. ランキング結果出力

```bash
< all_lyrics.txt mecab -Owakati | tr '[:upper:]' '[:lower:]' | 
grep -oE '\S{2,}' | sort | uniq -c | sort -nr |
awk '{print $2","$1}' | header -a word,count > perfume.csv
```

#### ◆sortコマンド

行を並び替える。

- -n, --numeric-sor

先頭の数字や記号("+" , "-" , "." など)を数値とみなして，ソートする。先頭の空白は無視する。

- -r, --reverse

逆順にソートする。

#### ◆uniqコマンド

ソート済みのファイルから重複した行を削除する。

- -c, --count	

行表示の際，それぞれの行の数も表示する

※`sort | uniq -c | sort -nr`はランキング表示によく用いるので、もはやイディオム。


#### ◆awkコマンド

空白などで区切られたテキストを処理する。
※今回は、集計数と単語の順を入れ替え、またカンマを挿入するために使用。

#### ◆headerコマンド

ヘッダー行を追加、置換、削除する。

- -a

ヘッダー行の追加。

#### ◆csvlookコマンド

カンマ区切りのデータをコマンドラインから確認する。

※リダイレクトで結果をcsvファイルに格納していますが、csvlookコマンドでターミナル上で以下のように整形された形で確認可能です。


| word | count |
| ---- | ----- |
| ない   |   402 |
| キミ   |   227 |
| たい   |   104 |
| you  |   102 |
| この   |    96 |
| てる   |    94 |
| なる   |    81 |
| から   |    80 |
| ah   |    74 |
| こと   |    73 |
| けど   |    69 |
| きっと  |    68 |
| me   |    67 |
| 好き   |    66 |
| よう   |    64 |
| そう   |    64 |
| wah  |    60 |
| だけ   |    59 |
| でも   |    56 |


## その他: 調査対象に関して等

### 総曲数
- 91曲

### 調査対象: 歌詞一覧
- 1mm
- 23:30
- 575
- Baby cruising Love
- Butterfly
- Baby Face
- Clockwork
- Cling Cling
- Cosmic Explorer
- Dream Fighter
- Dream Land
- DISPLAY
- edge
- edge(⊿-mix)
- Enter the Sphere
- FAKE IT
- FLASH
- FLASH (Album-mix)
- GAME
- GLITTER
- GLITTER(Album-mix)
- Have a Stroll
- Hurly Burly
- Handy Man
- Hold Your Hand
- I still love U
- Kiss and Music
- love the world
- MY COLOR
- Magic of Love
- Miracle Worker
- NIGHT FLIGHT
- Next Stage with YOU
- Perfume
- Puppy love
- plastic smile
- Party Maker
- Pick Me Up
- Relax In The City
- SEVENTH HEAVEN
- Speed of Sound
- Spring of Life
- Spending all my time
- Sleeping Beauty
- Sweet Refrain
- STORY
- TwinkleSnow Powdery Snow
- Take me Take me
- The best thing
- TOKYO GIRL
- VOICE
- wonder2
- Zero Gravity
- 引力
- いじわるなハロー
- エレクトロ・ワールド
- エレベーター
- おいしいレシピ
- 微かなカオリ
- コンピュータードライビング
- コンピューターシティ
- 心のスポーツ
- コミュニケーション
- 恋は前傾姿勢
- シークレットメッセージ
- シークレットシークレット
- ジェニーはご機嫌ななめ
- スウィートドーナッツ
- スパイス
- セラミックガール
- だいじょばない
- チョコレイト・ディスコ
- 時の針
- 透明人間
- ナチュラルに恋して
- 願い
- 願い(Album-mix)
- ねぇ
- パーフェクトスター・パーフェクトスタイル
- ビタミンドロップ
- ファンデーション
- 不自然なガール
- ふりかえるといるよ
- 宝石の雨
- ポリリズム
- ポイント
- マカロニ
- 未来のミュージアム
- モノクロームエフェクト
- ワンルーム・ディスコ
- リニアモーターガール
- レーザービーム

### 参考資料

- 「コマンドラインではじめるデータサイエンス」(https://goo.gl/WBGm1s)
- ITPro (http://itpro.nikkeibp.co.jp/)
- Linux Man Pages (https://linux.die.net/man/)

※manコマンドで参照