第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)
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")
僕はボサノヴァやロックやサウンドトラックや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は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,)
優位な差が見て取れるのは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")
ビットレートは外れ値が大きかったので制限をかけています。
パット見で僕は90年代80年代のボサノヴァ4と最近のJ-Popをよく聴くようです。そしてよく聴く音楽はしっかりとLossless
にしていることがわかりますね!またBossa Novaはエンコーダにとって優しい音楽ということもなんとなくつかめます。
次回は更に特定のジャンルを深く分析していきたいと思います!
詰まったところ
relplotが回帰曲線に対応しておらず(x, np.poly1d(np.polyfit(x, y, 1))(x)
でlegendを外したものを重ねてプロットしようとかなり頑張ったができなかったのでlmplotに逃げました。(それはlmで出せよという意味かもしれませんが。笑)
-
ここは本当はseabornのdistplotでもっとスマートに行いたかったのですが、できなかったので苦肉の策を講じました。
bar=
にリストを渡しても不可能でした。こういうやり方があるよ!という方は教えてください笑。 ↩ -
これはパッと見で傾向を見るものであり、本当に比較するためには数値計算が必要です。 ↩
-
Lossless
は可逆圧縮なのでとりあえずこれでエンコしておけば他のものに変えられます。wave
もそうです。反対にMpeg
、AAC
は不可逆圧縮と行って符号化後はデータ自体はCD音質に戻すことはできません。人間の耳というフィルターに合わせ(人間の耳は解像度に限界があるのと、聴こえても必要な情報以外は聞かないようになっています。)情報をふるい落としています。 ↩ -
この年代でブームが始まり終わった音楽なのです。 ↩