日々精進

aikoと旅行とプログラミング

JXAとpandasで音楽再生履歴を集計してみたらだいたいaikoだった話

普段,WindowsでもMacでも基本的にiTunes or Musicアプリを使用して音楽を聞いている.使用している携帯もiPhoneだったりiPadも使っていたりと基本的にAppleのサービスを使用している.以前

muttan1203.hatenablog.com

みたいなことをしたのだが,今回は自分の再生履歴なんかを見てみたいと思ったので,JXAを使って集計を行ってみた.

qiita.com

実行環境

  • macOS Catalina 10.15.1
  • pyenv 1.2.15
  • pipenv, version 2018.11.26

ちなみに今回のネタは,以下のQiitaの内容を大いに参考にさせていただきました.もはや参考というよりそのまま使用しています.大変参考になりました🙇‍♂️ qiita.com

Musicアプリから楽曲情報を取得する

先程の記事中ではiTunesとなっていましたが,iTunesの音楽再生機能はCatalinaからMusicというアプリケーションに変更となりました.

support.apple.com

そこで,1行目のApplication('iTunes')の箇所はApplication('Music')となります.

function run(){
    const musicApp = Application('Music');
    const music    = musicApp.playlists[1];
    const tracks   = music.tracks.properties();
    return JSON.stringify(tracks);
}

それ以外は全部一緒.このスクリプトgetTracks.jsとして保存し,

$ sascript -l JavaScript getTracks.js > tracks.json

とすると,全ての情報がtracks.jsonに吐き出されます.

集計してみる

再生回数上位10曲

すべての楽曲を対象として,再生回数が上位10曲を抽出.

df.groupby('name') \
    .apply(lambda df: pd.Series([df.albumArtist.iloc[0], sum(df.playedCount)], index=['artist', 'playedCount'])) \
    .sort_values('playedCount', ascending=False) \
    .head(10) \
    .reset_index()

これはaikoランキングかな?

f:id:bath_poo:20191219010821p:plain

aiko以外も入ってるんですが,aikoが圧倒的すぎて他が入ってこなかった.

アーティストごとの再生回数

今度はアーティスト別に再生回数を集計し,上位10人を抽出.

df.groupby('artist')['playedCount'].sum() \
    .drop('') \
    .drop('VARIOUS ARTISTS') \
    .sort_values(ascending=True) \
    .tail(10) \
    .to_frame() \
    .plot(kind='barh')

やっぱaikoなんだよな.2位のSHISHAMOと桁が2つ違っている. f:id:bath_poo:20191219011246p:plain SHISHAMOそんなに聞いてたのか…となったし,伊藤美来さんに関しては今年聞いたばっかりなんだよな.不思議.

最近髭男すごい人気ですよね.YouTuberでのMV再生数もすごいことになってる.髭男を知ったきっかけはaikoがラジオでおすすめしていたからなのだけど,実際すごく良くて今でもたまに聞いている.好きな楽曲は「ラブとピースは君の中」というアルバムに入っているSWEET TWEETなので聞いてみて欲しい.

2019年にアツかった楽曲

2019年に追加された曲に絞って,よく聞いたもの上位10曲を抽出.

df[df.dateAdded > '2019'] \
    .groupby('albumArtist')['playedCount'].sum() \
    .sort_values(ascending=False) \
    .head(10) \
    .to_frame() \
    .plot(kind='bar')

もはや何も驚かなくなった.あ,伊藤美来さんの最新アルバムPopSkipはおすすめです.

f:id:bath_poo:20191219011421p:plain

aikoのアルバムランキング

ここまで来るとaikoのアルバムの内訳が気になってくるので集計.

df[df.albumArtist == "aiko"] \
    .groupby('album')['playedCount'].sum() \
    .sort_values(ascending=True) \
    .tail(10) \
    .plot(kind='barh')

なんとまとめを抑えて時のシルエットが1位になっていた.

f:id:bath_poo:20191219013536p:plain

普段から時のシルエット激推しの私ですが,

その通りの結果になりましたね.

music.apple.com

May Dreamは初めて発売日にかったaikoのアルバムで結構きいたなーと思っていたんですが,時のシルエットのほうが聞いていたのか…

まとめ

こいついつもaiko聞いてんな.試してみたい方は以下からどうぞ.

github.com