【COTOHA API】NTTグループの40年にわたる研究成果を使って、西野カナさんの年齢を予測する【Python】

<img width="50"　alt="" src="https://qiita-image-store.s3.amazonaws.com/0/133230/profile-images/1537887365">こんにちは。この記事は[国産Web API Advent Calendar 2018](https://qiita.com/advent-calendar/2018/apijp)の１０日目の記事です。

#1.やりたいこと
NTTコミュニケーションズが提供するCOTOHA　APIの中から**ユーザ属性推定API（ベータ版）**を利用して、西野カナさんの歌詞から年齢を予測します。
ユーザ属性推定API（ベータ版）は入力として日本語で記述された複数の文からなるテキストを受け取り、年代、性別、趣味、職業などの人物に関する属性を推定・出力するそうです。
https://api.ce-cotoha.com/contents/reference.html

![image.png](https://qiita-image-store.s3.amazonaws.com/0/133230/282987a8-e4a2-1f59-3938-c07316299198.png)

#2. なぜ西野カナさんなのか
[【マーケティング】なぜ西野カナはヒットする曲が作れるのか](https://www.educwork.com/2018/10/25/%E3%80%90%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%80%91%E3%81%AA%E3%81%9C%E8%A5%BF%E9%87%8E%E3%82%AB%E3%83%8A%E3%81%AF%E3%83%92%E3%83%83%E3%83%88%E3%81%99%E3%82%8B%E6%9B%B2/)の記事でも紹介されたように、西野カナさんは徹底的にマーケティングを研究されています。

以下の記事でも色々実験されているように、自然言語処理の素材として非常に興味深いです。

 - [西野カナの歌詞を分析して頻出単語を見てみた](http://www.iruca21.com/entry/2016/01/03/220804)
 - [西野カナに「恋」とは何か聞いてみた](https://blog.aidemy.net/entry/2018/06/15/174827)


#３. APIの利用準備
公式の記事を参考にさせていただきました。

- [初心者の私が、ブラウザで自然言語処理API(COTOHA API)を試せるようになるまで【基本ガイド】](https://qiita.com/nach0chos557/items/28970528b7f07d3a3c2f)
- [自然言語処理を簡単に扱えると噂のCOTOHA APIをPythonで使ってみた](https://qiita.com/gossy5454/items/83072418fb0c5f3e269f)



#4.実行コード
```main.py
import requests
import json

#TOKEN(トークン)をゲットする
headers = {
    'Content-Type': 'application/json',
    'charset': 'UTF-8',
}
data = {
"grantType":"client_credentials",
"clientId":"自分で取得してね",
"clientSecret":"自分で取得してね"
}
data = json.dumps(data).encode()
response = requests.post('https://api.ce-cotoha.com/v1/oauth/accesstokens', headers=headers, data=data)
access_token = response.json()['access_token']

#年齢を分析する
URL = "https://api.ce-cotoha.com/api/dev/nlp/beta/user_attribute"
headers = {
    'Content-Type': 'application/json',
    'charset': 'UTF-8',
    'Authorization': 'Bearer ' + access_token
}
data = {
"document":"""会いたくて 会いたくて 震える君想うほど遠く感じてもう一度聞かせて嘘でもあの日のように"好きだよ"って… 今日は記念日 本当だったら二人過ごしていたかなきっと君は全部忘れてあの子と笑いあってるの? ずっと私だけにくれてた言葉も優しさも大好きだった""",
"type": "default"
}

data = json.dumps(data).encode()
r = requests.post(URL, headers=headers, data=data)
data = r.json()
print(data)
```

※改行を含む文字列はトリプルクォート ''' または """　を使って囲んであげましょう。　

参考　[Pythonで改行を含む文字列の出力、連結、分割、削除、置換](www.kasi-time.com/item-47947.html　)



#5.実行結果
まずは「会いたくて 会いたくて」を分析した結果から。

```result.json
{'result': {
'age': '30-39歳',
'civilstatus': '未婚', 
'earnings': '-1M',
'gender': '女性',
'hobby': ['GOURMET', 'INTERNET', 'MOVIE', 'MUSIC', 'SHOPPING'],
'location': '関東',
'moving': ['WALKING'],
'occupation': '会社員'
}, 'status': 0, 'message': 'OK'}
```

<img width="50"　alt="" src="https://qiita-image-store.s3.amazonaws.com/0/133230/profile-images/1537887365">　**関東に住む未婚女性、30-39歳**なようです。
所属レコード会社はソニー・ミュージックレーベルズなので、**会社員**というのも正しいのだと思います。笑 まあまあWikipediaの情報と近いですね。

[西野カナ 出典: フリー百科事典『ウィキペディア（Wikipedia）』](https://ja.wikipedia.org/wiki/%E8%A5%BF%E9%87%8E%E3%82%AB%E3%83%8A)

続けて「トリセツ」を用いて分析してみます。

```data.json
{
"document":"""この度はこんな私を選んでくれて
どうもありがとう
ご使用の前にこの取り扱い説明書をよく読んで
ずっと正しく扱ってね
一点物につき返品交換は受け付けません
ご了承ください

急に不機嫌になることがあります
わけを聞いても答えないくせにほっとくと怒ります
いつもごめんね
でもそんな時は懲りずにとことん付き合ってあげましょう

定期的に褒めると長持ちします
爪が綺麗とか 小さな変化にも気づいてあげましょう
ちゃんと見ていて
でも 太ったとか余計なことは気づかなくていいからね""",
"type": "default"
}
```

実行結果を見てみましょう。

```result.json
{'result': {
'age': '20-29歳', 
'civilstatus': '既婚', 
'earnings': '-1M', 
'gender': '女性', 
'hobby': ['COOKING', 'GOURMET', 'STUDY'], 'location': '近畿'}, 
'status': 0, 
'message': 'OK'
}
```
今度は、**20-29歳**に変わりました。
この曲は「会いたくて会いたくて」よりも若い世代をターゲットとしているので、
より若い世代に使用される頻度の高い表現が多いのかも知れません。

ベータ版ということもあり、今後のアップデートに期待ですね！

#おまけ
人に教えること、勉強することが好きです。色々と学んだことを記事で共有していきたいと思います！

-[【COTOHA API】NTTグループの40年にわたる研究成果を使って、西野カナさんの年齢を予測する【Python】](https://qiita.com/sai-san/items/c60e90c1e56d78449c6b)
-[【Pythonたったの12行】リクルート人工知能APIに肉のインスタ映え診断をしてもらう](https://qiita.com/drafts/c2bdd676f4c7c96934c3/edit)