PandasでiTunesライブラリ分析 2

[前回](https://qiita.com/moco_chan/items/cbe2543d06fd3971fd88)、ライブラリ内のエンコード別の性能の相関について調べました。
今回は自分がどういう音楽を好み、どういうふうに聴いているのか調べます。

# 大体1曲あたり何回聴いているのか？

3万曲ある中で、前回1回以上聴いている曲は約14％であるということが判明しました。
今回は、曲ひとつあたりに対して聴いた回数ごとのヒストグラムで把握したいと思います。

```python
ax = sns.distplot(df[['再生回数']], hist=True, kde=False, rug=True, norm_hist=False)
d = ax.set(xlabel='曲数', ylabel='再生回数')
```
![再生回数sns_distplot.png](https://qiita-image-store.s3.amazonaws.com/0/302092/4e6c8a66-08fe-8f10-704a-f6f9ed5c9097.png)


グラフからは1曲5回以下くらいしか聴いてないけど、好きな曲はとことん聴くタイプだということがわかります。私はシングルではなく必ずアルバムで買っていたのでそれも影響しているのかもしれません。ヒストグラムと一緒に出した`rugplot`を見ると、120回以上再生している曲もあることがわかります。ここです。[^1]
[^1]: この吹き出し画像はseabornで書き出したグラフをillustratorで編集しました。seabornにはこの機能はありません。

![再生回数sns_distplot.png](https://qiita-image-store.s3.amazonaws.com/0/302092/690fdbb2-d1a9-c666-5cdc-d117155a3692.png)

実際には120回以上再生している曲は何曲あるのでしょう？調べてみます。

```python
playtimes = 120
print(F"{len(df):,}曲中{playtimes:,}回以上再生している曲数は{len(df[(df['再生回数'] >= playtimes)]):,}曲あります")

'''
30,415曲中120回以上再生している曲数は2曲あります
'''
```

2曲ありました。さてこの曲はなんでしょう？調べてみましょう。

```python
print(df[['名前', '再生回数']][(df['再生回数'] >= playtimes)])
'''
                      名前  再生回数
9747    Chega de Saudade   122
9901  Aquarela Do Brasil   125
'''
```

僕の大好きなBossaNovaの法王、Joao Gilbertoの2曲でした。
逆に、スキップ数が多いものはどれでしょう？

```python
#  スキップが0以下のものは除外したデータから昇順ソート
skipdf = df[(df['スキップ回数'] > 0)].sort_values('スキップ回数', ascending=False)

# スキップ回数が多い上位5曲を表示
print(skipdf[['名前', 'スキップ回数']][:5])
'''
                                                名前  スキップ回数
1243                            Fly Me to the Moon      25
16508                                   Cigarettes      24
10498          California Gurls (feat. Snoop Dogg)      22
9747                              Chega de Saudade      22
1280   Fade Into Darkness (Instrumental Radio Mix)      22
'''
```

結構意外な結果でした。でもよく考えてみると確かにスキップが多い曲でした。データは嘘をつきませんね。[^2]
[^2]: `Fly Me to the Moon`や`Cigarettes`はプレイリストから面倒で消していなかったもの。`Chega de Saudade`はヘビーローテーションですが曲の終わりにスタンディングオベーションが長くて飛ばしてしまう曲でした。その証拠に再生回数も多いです。
# スキップ回数と再生回数の相関を見る
好きな曲は最後まで聴くし、そうでない曲は飛ばすのでスキップ回数と再生回数は関係がないと考えたので散布図にしました。
iTunesの再生数管理は曲が末端まで行き、はじめてカウントされる仕組みなので、スキップとは関係無いように見えますが、再生をしないとスキップもできない、誤った操作によるスキップやアルバム前後曲によるスキップ飛ばしは再生回数の関数を持つのであまり意味のない比較かもしれません。

```python
skipsrs = skipdf['スキップ回数']
lengsrs = skipdf['時間'] / 60
print(type(lengsrs))

plt.figure(figsize=(20, 12))
plt.xlabel("時間(分)")
plt.ylabel("スキップ数")
plt.scatter(lengsrs, skipsrs, c="g", alpha=0.5, marker='o', )
```
![スキップ回数と再生回数の関係性plt_scatter.png](https://qiita-image-store.s3.amazonaws.com/0/302092/192acbab-99b0-eb23-6740-09e32848f436.png)
回帰曲線を足します。

```python
plt.plot(lengsrs, np.poly1d(np.polyfit(lengsrs, skipsrs, 1))(lengsrs), color="r", label='')
```
![スキップ回数と再生回数の関係性回帰曲線を足すplt_scatter.png](https://qiita-image-store.s3.amazonaws.com/0/302092/a0cd32e2-6428-0f00-4eb9-b6a15b2fcb13.png)

どうやら正の相関があるようです。しかし、前述の通りあまり意味がない調査でした。

# スキップ回数と時間の相関を見る
スキップ回数と時間の相関も見ました。これも前段と同じく相関はないと考えます。
![スキップ回数と曲の長さの関係性plt_scatter.png](https://qiita-image-store.s3.amazonaws.com/0/302092/07d9a5ca-cbfd-afc4-9aaf-4d1ef91ef038.png)
回帰曲線を足します。

```python
plt.plot(playsrs, np.poly1d(np.polyfit(playsrs, skipsrs, 1))(playsrs), color="r", label='')
```
![スキップ回数と曲の長さの関係性回帰曲線を足すplt_scatter.png](https://qiita-image-store.s3.amazonaws.com/0/302092/5aa2812f-fb5f-112c-3826-c1e87f01642b.png)
相関はないようです。

#まとめ
今回は再生回数から好きな曲やその他のデータとの関連性を見ていきました。次こそは自分の趣味嗜好を分析していきたいと思います。また今回ラブのデータも取得できていれば、スキップ数や再生回数との関連がもっと面白いものになっていたでしょう。このデータはやはり大切なのでしょうね。

###詰まったこと
グラフの記述方法がわかっても統計の知識が希薄だとどのようにグラフの選択をすればいいのか詰まってしまう場面が多かった。統計検定取得を目指し頑張っていきたい。