LoginSignup
0
0

More than 5 years have passed since last update.

PandasでiTunesライブラリ分析 3

Last updated at Posted at 2019-01-10

第1回 全体の俯瞰とエンコーダの種類の違いをサイズとビットレートから見ました。
第2回 再生回数からその他のデータを見ていきました。
今回は自分がどういう音楽を好んで聴いているのか調べます。

ジャンルでバーチャートランキングを作成。

アーティストで分けても良かったのですが、恐ろしく多くなることが予想できるのでまずはジャンルでまとめてバーチャートで比較していきます。.set_indexでジャンルをindex化し、sumで合計値を出し.sort_values で降順に並べます。それを今度はMatplotlibでの単純出力のために辞書化しkeyとvaluesを抜き取りリストに変換します。1


gp = df.set_index('ジャンル')['再生回数'].sum(level=0).sort_values(ascending=False).to_dict()
dkeys = list(gp.keys())
dvals = list(gp.values())

# xはジャンル、yは再生回数の合計値
plt.figure(figsize=(20, 12))
plt.xticks(rotation=90)
plt.bar(dkeys, dvals)

ジャンルごとの総再生回数plt_plot.png

x軸のジャンルが文字潰れを起こしてしまっていますね。ジャンルの項目が多すぎたので再生回数合計が10以下のジャンルは除くことにします。

#gp = df[(df['再生回数'] > 10)].set_index('ジャンル')['再生回数'].sum(level=0).sort_values(ascending=False).to_dict()
#groupbyを使ってより効率的に記述できることを発見。2019-01-20
gp = df[(df['再生回数'] > 10)].groupby(['ジャンル'])['再生回数'].sum().sort_values(ascending=False)
gp.plot(cmap="bwr")

ジャンルごとの総再生回数_2plt_plot.png

僕はボサノヴァやロックやサウンドトラックやJPopなどをよく聴く事がわかりました。

好きなジャンルではエンコード方法を変えるのか。

ところでお気に入りの音楽であればあるほどエンコードのビットレートを高くする傾向があると思います。
体感としてはそうしていたのですが、本当にそうであるswarmplotでみてみましょう。
*サウンドトラックは英語教材であり、NoGenruはジャンル情報が無いので除外します。


df_g_divi = df.set_index('ジャンル').loc[['J-Pop', 'Bossa Nova', 'Pop', 'Rock']].reset_index()
r = sns.swarmplot(x=df_g_divi["ジャンル"], y=df_g_divi["ビットレート"], hue=df_g_divi["種類"], data=df_g_divi
)

swarmplot_ジャンルごとのビットレート.png
swarmplotはx軸を極端に減らした散布図と言えるもので、名前の通りどのくらいある領域に群がっているのか簡単に視認することができる便利なものです。
お気に入りの4ジャンルの中で特にボサノヴァが高ビットレートでエンコードされている曲が多いことがわかりました。2ところでこれを眺めて気がついたことがあります。
Losslessは可変ビットレートという曲調に合わせてビットレートを変化させる方式なのですが、ジャンルによってビットレートの高さが結構違います。基本的に変調が激しい曲ほどビットレートが高くなるので、ボサノヴァは変調があまり激しくない曲ということでしょう。

エンコードは再生回数に影響するのか。(ジャンルごとに)

Losslessは高音質ですが反対に無圧縮ゆえ領域を取ります。高音質が再生回数に影響がなければあまり使いたくないエンコーダです。3そこでジャンルごとに回帰曲線を使って再生数に関係があるのか見ていきます。

g= sns.lmplot(x="ビットレート", y="再生回数", data=df_g_divi_b_f, hue="種類", col="ジャンル", row=None, palette=None,
           col_wrap=2, height=7, aspect=1, markers="+", sharex=True,)

lmplot_ジャンルごとのビットレート.png

優位な差が見て取れるのはBossa Novaと J-Popのみですね。もうこれからはRockとPopでLosslessは使わないことにします。笑

最後に実用性はあまりないですが2次元で一つのグラフにいろいろな情報を詰め込んでみたものを作って終了とさせていただきます。

df_g_divi = df_g_divi[(df_g_divi['ビットレート'] < 1_500)]

ax = sns.scatterplot(data=df_g_divi, x="年", y="ビットレート", style="種類", hue="ジャンル", size="再生回数", sizes=(15, 200),
                     legend="brief")

test03再生回数関係なし.png

ビットレートは外れ値が大きかったので制限をかけています。
パット見で僕は90年代80年代のボサノヴァ4と最近のJ-Popをよく聴くようです。そしてよく聴く音楽はしっかりとLosslessにしていることがわかりますね!またBossa Novaはエンコーダにとって優しい音楽ということもなんとなくつかめます。
次回は更に特定のジャンルを深く分析していきたいと思います!

詰まったところ

relplotが回帰曲線に対応しておらず(x, np.poly1d(np.polyfit(x, y, 1))(x)でlegendを外したものを重ねてプロットしようとかなり頑張ったができなかったのでlmplotに逃げました。(それはlmで出せよという意味かもしれませんが。笑)


  1. ここは本当はseabornのdistplotでもっとスマートに行いたかったのですが、できなかったので苦肉の策を講じました。bar=にリストを渡しても不可能でした。こういうやり方があるよ!という方は教えてください笑。 

  2. これはパッと見で傾向を見るものであり、本当に比較するためには数値計算が必要です。 

  3. Losslessは可逆圧縮なのでとりあえずこれでエンコしておけば他のものに変えられます。waveもそうです。反対にMpegAACは不可逆圧縮と行って符号化後はデータ自体はCD音質に戻すことはできません。人間の耳というフィルターに合わせ(人間の耳は解像度に限界があるのと、聴こえても必要な情報以外は聞かないようになっています。)情報をふるい落としています。 

  4. この年代でブームが始まり終わった音楽なのです。 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0