私は Excel でラップされたより優れた Spotify を構築しました。あなたもそれが可能です

in tech

ここ数年、Spotify Wrapped には圧倒されてしまいました。 Spotify が提供する洞察は、決して「洞察力に富んでいる」とは感じられません。これは不思議なことですが、Spotify には私の音楽の聴き方に関する大量のデータが明らかに蓄積されているのです。そこで私は、すべてのデータを手に入れて、独自の Spotify Wrapped を構築することにしました。私は完全なリスニング データを Spotify にリクエストし、それを Excel で自分で処理して、Wrapped では決して得られないような洞察を掘り起こしました。

Spotify データをダウンロードしています

思っているよりも簡単です

まず、データを入手する必要があります。一般的な方法は、Spotify API を使用することです。さて、あなたが開発者または技術に精通していて、その仕組みをすでに知っているのであれば、私が説明する必要はありません。ただし、あまり技術的になりたくない場合は、一般ユーザー向けのより簡単な代替方法を次に示します。

open.spotify.com で Spotify Web プレーヤーを開き、プロフィール アイコンをクリックして、アカウントに移動するだけです。 「アカウント設定」で、「セキュリティとプライバシー」、「アカウントのプライバシー」の順に移動します。下にスクロールすると、データをダウンロードするオプションが表示されます。デフォルトでは「アカウントデータ」のみが選択されています。そのチェックを外して、代わりに「拡張ストリーミング履歴」を選択します。これにより、生涯のストリーミング履歴が得られ、すべての有用な洞察が得られます。

次に、[データをリクエスト]をクリックすると、データのダウンロード リクエストの確認を求める電子メールが届きます。ウェブサイトにはこのプロセスに最大 30 日かかると記載されていますが、私の経験では、それほど長くはありません。 8 月 26 日の午前 4 時 30 分にストリーミング履歴の拡張をリクエストしたところ、翌日の 8 月 27 日の午前 4 時 36 分にダウンロード リンクが受信箱に届きました。

ターンアラウンドは、アカウント内のデータ量に依存する可能性があると思います。私のアカウントは 2019 年 3 月に作成され、133,000 を超える再生が記録されています。これはかなり大きなアカウントだと思いますが、それでも 1 日しかかかりませんでした。おおよそそれが期待できることになります。

Spotify データを Excel にインポートする

Spotify が送信するものは、まだ読みやすいものではありません

ダウンロードの準備が完了すると、Spotify から ZIP ファイルが渡されます。これを解凍すると、ストリーミング履歴を含む大量の JSON ファイルができあがります。 Spotify では既製のスプレッドシートは提供されないため、次の仕事はこれらすべての JSON ファイルを自分で Excel にインポートすることです。

最も簡単な方法は、Power Query を使用することです。すでに慣れている場合は、おそらくここから進んでいただけます。そうでない場合は、段階的なプロセスを次に示します。

  1. Excel を開きます。

  2. 新しいファイルを作成し、最初に保存します。「Spotify Wrapped」など、好きな名前を付けます。

  3. 「データ」タブに移動し、「 データの取得 -> 他のソースから -> 空のクエリ

  4. 開いた Power Query ウィンドウで、 をクリックします。 ホーム -> 高度なエディター、そこにあるものをすべて削除し、以下で共有するコードスニペットを貼り付けます。

便利なように、この記事の下部に詳細エディターに貼り付けるコード スニペットが記載されています。

この部分は重要です。[OK]をクリックする前に、コード内で 2 つの点を変更する必要があります。まず、すべての Spotify JSON ファイルが存在する特定のフォルダーに FolderPath を設定します。 2 番目は TZ_OffsetHours 値で、タイムゾーンが UTC からどのくらい離れているかをクエリに伝えます。この調整を行わないと、すべての視聴時間がずれてしまい、実際にいつストリーミングしていたのかを正確に把握できなくなります。参考までに、米国東部は -5、米国太平洋は -8 です。

コードを調整した後、「完了」をクリックして、次へ進みます。 ホーム -> 閉じてロード -> 閉じてロード、 選ぶ テーブルと新しいワークシート、そしてヒット わかりました。それで終わりです。すべての Spotify データが Excel に正常にインポートされました。

履歴が膨大な場合は数分かかります。私の場合は約 90 秒かかりました。その後、2019 年 3 月まで遡る 133,999 件の再生すべてがスプレッドシートに保存されました。

Excel を使用した Spotify ラップはこれです

あまりきれいではないかもしれませんが、包括的な内容です

すべてのデータが Excel に保存されたら、それを処理して有意義な洞察を引き出します。さて、私はデータ抽出に関しては最もクリエイティブな人間であるとは主張しませんし、決してグラフィック デザイナーではありません。しかし、私には見たいものについて明確なビジョンがあり、それをすべて Excel ピボットテーブルで構築しました。

まず、概要シートには、合計再生時間、合計時間、音楽時間とポッドキャスト時間、スキップ率、およびそれらすべての年ごとの内訳が表示されます。

次に、リスニング時計があり、1 日のどの時間帯に音楽を聴いたかを年ごとにグラフ化しました。たとえば、2022 年では、私のリスニングのほとんどは午後 7 時から 11 時までの間に行われていました。同様に、日ごとの内訳もあります。

また、私のリスニング時計を見ると、基本的に一日中すべての時間で Spotify を聴いていることがわかります。これは実際には真実ではありません。これは集計の副作用です。仕事の関係で、私は睡眠サイクルを変えています。日中に寝て夜に働くこともあれば、その逆のこともあります。何年にもわたってそれを合計すると、私は決して聞くのをやめることはないようです。そこで、時間の経過とともにスケジュールが実際にどのように変動するかを視覚化するために、概日ドリフト シートを作成しました。

これ以外に、どのデバイスで Spotify をどれだけ聴いたかを確認するビューを構築しました。また、トップアーティストのリストを作成しました。いつ、何年に、何回聴いたのかです。

確かに、これは Spotify の公式 Wrapped ほど美しくはありませんが、はるかに洞察力があり、それが私が求めていたものです。とはいえ、グラフィックに興味があるのであれば、いつでも重要な数値を Canva などに取り込んで、そこから見栄えの良いグラフィックをデザインすることができます。

ピボット テーブルに詳しくなくても AI を使用できます

データを処理するために Excel の知識は必要ありません

スプレッドシートのプレビューとともに、構築したサーカディアン ドリフト シートについて説明するクロード。

私のシートを共有しているので、私が作成したピボット テーブルを見て、独自のデータに再利用できます: Spotify Wrapped Excel Sheet with Built-in Pivot Tables。これは、Google ドライブでホストされている XLSX ファイルです。潜在的なエラーや不具合を避けるために、システムにダウンロードして Excel で開いてください。

とはいえ、私が構築していない特定の指標にアクセスしたい場合や、ピボット テーブルを自分で作成する方法がわからない場合は、いつでも AI を使用できます。実際、私のシート内のピボット テーブルの一部は実際にクロードの助けを借りて構築されました。 Claude を Excel に接続して、Excel に構築させることができます。あるいは、先ほどインポートしたマスター データ テーブルをクロードに渡して、それを処理し、知りたいことを計算して、特定の情報の塊を表面化するように依頼することもできます。

約束どおり、Excel の高度なエディターに貼り付ける Power Query コードを次に示します。

let
    // ======== EDIT THESE TWO LINES ========
    FolderPath     = "C:\Users\YOU\Documents\Spotify Extended Streaming History",
    TZ_OffsetHours = 5.5,
    // ======================================

    Source    = Folder.Files(FolderPath),
    OnlyAudio = Table.SelectRows(Source, each Text.Lower((Extension)) = ".json"
                    and Text.StartsWith((Name), "Streaming_History_Audio")),
    Parsed    = Table.AddColumn(OnlyAudio, "Data", each Json.Document((Content))),
    KeepData  = Table.SelectColumns(Parsed, このテーマについてさらに詳しく知りたい方は以下をご覧ください),
    ToRows    = Table.ExpandListColumn(KeepData, "Data"),
    Expanded  = Table.ExpandRecordColumn(ToRows, "Data",
                  公式情報はこちら,
                  このテーマについてさらに詳しく知りたい方は以下をご覧ください),

    UTC       = Table.AddColumn(Expanded, "UTC",
                  each DateTime.FromText(Text.Replace((ts), "Z", "")), type datetime),
    PlayedAt  = Table.AddColumn(UTC, "Played At",
                  each (UTC) + #duration(0, 0, 0, TZ_OffsetHours * 3600), type datetime),

    Mins      = Table.AddColumn(PlayedAt, "Minutes", each (ms_played) / 60000, type number),
    Yr        = Table.AddColumn(Mins, "Year", each Date.Year((Played At)), Int64.Type),
    Mo        = Table.AddColumn(Yr, "Month", each Date.Month((Played At)), Int64.Type),
    Dw        = Table.AddColumn(Mo, "Weekday", each Date.DayOfWeekName((Played At)), type text),
    Hr        = Table.AddColumn(Dw, "Hour", each Time.Hour((Played At)), Int64.Type),

    Kind      = Table.AddColumn(Hr, "Content",
                  each if (Track) <> null then "Music"
                  else if (Episode) <> null then "Podcast"
                  else "Other", type text),

    Device    = Table.AddColumn(Kind, "Device", each
                  let p = Text.Lower((Platform)) in
                  if Text.Contains(p, "android") then "Android"
                  else if Text.Contains(p, "ios") then "iOS"
                  else if Text.Contains(p, "osx") or Text.Contains(p, "mac") then "macOS"
                  else if Text.Contains(p, "windows") then "Windows"
                  else if Text.Contains(p, "linux") then "Linux"
                  else if Text.Contains(p, "web") then "Web Player"
                  else if Text.Contains(p, "cast") or Text.Contains(p, "partner") then "Speaker / TV"
                  else "Other", type text),

    Skip      = Table.AddColumn(Device, "Skipped",
                  each if (Reason End) = "fwdbtn" then 1 else 0, Int64.Type),
    ShortPlay = Table.AddColumn(Skip, "Short Play",
                  each if (ms_played) < 30000 then 1 else 0, Int64.Type),

    Cleaned   = Table.RemoveColumns(ShortPlay, 公式情報はこちら)
in
    Cleaned

関連情報は以下のリンクからご確認いただけます

公式情報はこちら

関連記事

前の投稿
Android スマートフォンをただの電話のように扱うのはやめましょう。USB-C で実際に何ができるのかを次に示します。
次の投稿
「Alexa for Shopping」がスパムメールの発見に役立つようになりました

関連記事