<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Philipp Kahr - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Philipp Kahr - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/jp/search-labs/author/philipp-kahr</link>
    </image>
    <link>https://www.elastic.co/jp/search-labs/author/philipp-kahr</link>
    <atom:link href="https://www.elastic.co/jp/search-labs/rss/author/philipp-kahr.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[jp]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 12:48:14 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Spotify Wrapped パート2: データ分析と視覚化]]></title>
    <description><![CDATA[Spotify データをこれまで以上に深く掘り下げて、存在すら知らなかったつながりを探ります。]]></description>
    <content:encoded><![CDATA[<p>Iulia Feroli が執筆したこのシリーズの<a href="https://www.elastic.co/search-labs/blog/spotify-wrapped-create-in-kibana">最初の部分</a>では、Spotify Wrapped データを取得して Kibana で視覚化する方法について説明しました。パート 2 では、データをさらに深く掘り下げて、他に何がわかるかを調べます。これを実現するために、少し異なるアプローチを活用し、 <a href="https://github.com/elastic/elasticsearch-labs/tree/main/supporting-blog-content/spotify-to-elasticsearch">Spotify から Elasticsearch を</a>使用してデータを Elasticsearch にインデックスします。このツールは少し高度で、もう少しセットアップが必要ですが、その価値はあります。データがより構造化され、より複雑な質問をすることができます。</p><h2>最初のSpotify Wrapped分析との違い</h2><p>最初のブログでは、Spotify エクスポートを直接使用し、正規化タスクやその他のデータ処理は実行しませんでした。今回も同じデータを使用しますが、データをより使いやすくするためにデータ処理を行います。これにより、次のようなより複雑な質問に答えることができるようになります。</p><ul><li><p>トップ 100 の曲の平均再生時間はどれくらいですか?</p></li><li><p>トップ 100 の曲の平均的な人気はどれくらいですか?</p></li><li><p>曲の平均視聴時間はどれくらいですか?</p></li><li><p>最もスキップされたトラックは何ですか?</p></li><li><p>いつトラックをスキップしたいですか?</p></li><li><p>一日のうち特定の時間帯に他の時間帯よりも多く音楽を聴いていますか?</p></li><li><p>特定の曜日に他の曜日よりも多く聴いていますか?</p></li><li><p>特に興味のある月ですか？</p></li><li><p>最も長い聴取時間を持つアーティストは誰ですか?</p></li></ul><p>Spotify Wrapped は、今年何を聴いたかを示してくれる、毎年楽しい体験です。前年比の変化は表示されないため、かつてはトップ 10 に入っていたものの、現在は消えてしまったアーティストを見逃してしまう可能性があります。</p><h2>Spotify Wrapped データを分析用に処理する</h2><p>最初の投稿と 2 番目の投稿では、データの処理方法に大きな違いがあります。最初の投稿のデータを使用して作業を継続する場合は、いくつかのフィールド名の変更を考慮する必要があり、また、ES|QL に戻って<code>hour of day</code>などの特定の抽出をオンザフライで実行する必要があります。</p><p>それでも、皆さんはこの投稿を追うことができるはずです。<a href="https://github.com/elastic/elasticsearch-labs/tree/main/supporting-blog-content/spotify-to-elasticsearch">Spotify から Elasticsearch リポジトリへの</a>データ処理では、Spotify API に曲の長さや人気度を問い合わせ、いくつかのフィールドの名前を変更したり、強化したりします。たとえば、Spotify エクスポートの<code>artist</code>フィールド自体は単なる文字列であり、フィーチャーや複数のアーティストのトラックを表すものではありません。</p><h2>ダッシュボードでSpotify Wrappedデータを視覚化する</h2><p>データを視覚化するために Kibana でダッシュボードを作成しました。ダッシュボードは<a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/spotify-to-elasticsearch/kibana/dashboard.ndjson">ここから</a>入手でき、Kibana インスタンスにインポートできます。ダッシュボードは非常に広範囲にわたっており、上記の質問の多くに答えてくれます。</p><p>いくつかの質問とその答え方を一緒に見ていきましょう。</p><h3>トップ 100 の曲の平均再生時間はどれくらいですか?</h3><p>この質問に答えるには、Lens または ES|QL を使用できます。3つのオプションをすべて検討してみましょう。この質問を Elasticsearch のやり方で正しく表現してみましょう。上位 100 曲を見つけて、それらの曲すべてを合わせた平均時間を計算します。Elasticsearch の用語では、これは 2 つの集約になります。</p><ol><li><p>トップ100曲を調べる</p></li><li><p>100 曲の平均再生時間を計算します。</p></li></ol><p><strong>Lens</strong></p><p>Lens では、これはかなり簡単です。新しい Lens を作成し、テーブルに切り替えて、 <code>title</code>フィールドをテーブルにドラッグ アンド ドロップします。次に、 <code>title</code>フィールドをクリックしてサイズを 100 に設定し、 <code>accuracy</code>モードを設定します。次に、 <code>duration</code>フィールドをテーブルにドラッグ アンド ドロップし、 <code>last value</code>を使用します。実際に必要なのは、各曲の長さの最後の値だけだからです。同じ曲の長さは 1 つだけです。この<code>last value</code>集計の下部には要約行のドロップダウンがあり、 <code>average</code>を選択すると要約行が表示されます。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5df1d7f36de5e2ae/6a17e5df0b0beddd57dd355c/a56f6e48e6b53af3ca3d38d67ce0916d0621ef16-2910x1058.png" alt="Spotify WrappedデータにLensを使用する" /><p><strong>ES|QL</strong></p><p>ES|QL は、DSL や集約と比較するとかなり新しい言語ですが、非常に強力で使いやすいです。ES|QL で同じ質問に答えるには、次のクエリを記述します。</p><p>この ES|QL クエリを段階的に説明します。</p><ol><li><p><code>from spotify-history</code> - これは私たちが使用しているインデックス パターンです。</p></li><li><p><code>stats duration=max(duration), count=count() by title</code> - これは最初の集計であり、各曲の最大継続時間と各曲の数を計算しています。Lens で使用されている<code>last value</code>の代わりに<code>max</code>を使用します。これは、ES|QL には現在 first または last がないためです。</p></li><li><p><code>sort count desc</code> - 曲は各曲のカウントで並べ替えられるため、最も多く聴かれた曲が一番上に表示されます。</p></li><li><p><code>limit 100</code> - 結果は上位 100 曲に制限されます。</p></li><li><p><code>stats Average duration of the songs=avg(duration)</code> - 曲の平均再生時間を計算します。</p></li></ol><h3>私にとって特に興味深い月はありますか?</h3><p>この質問に答えるには、ランタイム フィールドと ES|QL の助けを借りて Lens を使用できます。すぐに気づくのは、データ内に<code>month</code>を直接示すフィールドがないため、代わりに<code>@timestamp</code>フィールドから計算する必要があるということです。これを行うには複数の方法があります。</p><ol><li><p>ランタイムフィールドを使用してレンズに電力を供給する</p></li><li><p>ES|QL</p></li></ol><p>個人的には、ES|QL の方がすっきりして素早いソリューションだと思います。</p><p>これで完了です。特別なことは何も必要ありません。 <code>DATE_EXTRACT</code>関数を利用して<code>@timestamp</code>フィールドから月を抽出し、それを集計することができます。ES|QL 視覚化を使用すると、それをダッシュボードにドロップできます。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2c221ad4446cfb09/6a17e5e03e9e45076eba144c/7f942cf38fbe0fecec1d741e7df922196f4e9483-1878x722.png" alt="Spotify Wrapped 月次内訳の視覚化" /><h3>アーティストごとの年間視聴時間はどのくらいですか?</h3><p>その背後にある考え方は、アーティストが単なる一回限りのものなのか、それとも再発するものなのかを確認することです。私の記憶が正しければ、Spotify では年間ラップのトップ 5 アーティストのみが表示されます。おそらく、6 位のアーティストはずっと同じままでしょうか、それとも 10 位以降は大きく変わるのでしょうか?</p><p>これを最も簡単に表現したものの 1 つは、パーセンテージ棒グラフです。これには Lens を使用できます。次の手順に従ってください:</p><p><code>listened_to_ms</code>フィールドをドラッグ アンド ドロップします。このフィールドは、曲を聴いた時間をミリ秒単位で表します。デフォルトでは、Lens は<code>median</code>集約を作成しますが、これは不要なので、 <code>sum</code>に変更します。上部の棒グラフの種類として、 <code>stacked</code>ではなく<code>percentage</code>選択します。内訳については、 <code>artist</code>選択し、トップ 10 を選択してください。<code>Advanced</code>ドロップダウンでは必ず<code>accuracy mode</code>を選択してください。各カラーブロックは、このアーティストをどれだけ聴いたかを表します。タイムピッカーに応じて、バーは日、週、月、年などの値を表す場合があります。週ごとの内訳が必要な場合は、 <code>@timestamp</code>を選択し、 <code>mininum interval</code>を<code>year</code>に設定します。私の場合、最もよく聴いたアーティストは<code>Fred Again..</code>であり、総聴取時間の約 12% が<code>Fred Again..</code>に費やされたことがわかります。また、2024年には<code>Fred Again..</code>若干減少しましたが、 <code>Jamie XX</code>大幅に増加しました。バーの大きさだけを比較してみましょう。また、 <code>Billie Eilish</code>が 2024 年に継続的に再生されている間、バーの幅が広くなっていることもわかります。これは、2023 年よりも 2024 年に<code>Billie Eilish</code>多く聴いたことを意味します。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blteb0c11b909be859f/6a17e5e2e8fbce239a3a18ee/61a5bcc6b7385ed0a11b67c9c6bab32d27f4a49b-2942x1354.png" alt="Kibana を使った Spotify Wrapped 履歴の可視化" /><h3>全体の視聴時間に対するアーティストごとのトップトラックはどうですか?</h3><p>それは長い質問ですね。私が何を言いたいのか、それで説明してみたいと思います。Spotify では、特定のアーティストのトップソング、または全体のトップ 5 曲を教えてくれます。それは確かに興味深いですが、アーティストの内訳はどうですか?私の時間はすべて、何度も繰り返し再生する 1 つの曲に費やされているのでしょうか、それとも均等に分散されているのでしょうか?</p><p>新しいレンズを作成し、タイプとして<code>Treemap</code>を選択します。<code>metric</code>については、前と同じように、 <code>sum</code>を選択し、フィールドとして<code>listened_to_ms</code>を使用します。<code>group by</code>には 2 つの値が必要です。最初は<code>artist</code>で、次に 2 番目に<code>title</code>を追加します。中間結果は次のようになります。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9aa0e4877472123f/6a17e5e44b055d6dcf43218e/2dea389664a0d3d13fff03c6337bff3ce740f9b1-2922x1430.png" alt="Kibana を使った Spotify Wrapped 履歴の可視化" /><p>これをトップ 100 アーティストに変更し、詳細ドロップダウンで<code>other</code>を選択解除し、精度モードを有効にしましょう。タイトルをトップ 10 に変更し、精度モードを有効にします。最終結果は次のようになります。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt070bf745be1d3f92/6a17e5e66864a43a0fb6875b/7e99a15c69801e58302af4c12b500242a7e8bc9d-2640x1622.png" alt="Kibana を使用した Spotify Wrapped の視覚化" /><p>これは具体的に何を意味するのでしょうか?時間要素を見なくても、Spotify での私の全視聴履歴のうち、5.67% を<code>Fred Again..</code>視聴に費やしたことがわかります。特に、その時間のうち 1.21% を<code>Delilah (pull me out of this)</code>視聴に費やしました。アーティストが占める曲が 1 曲だけなのか、それとも他の曲もあるのかどうかを見るのは興味深いです。ツリーマップ自体は、このようなデータ分布を表すのに適した形式です。</p><h3>特定の時間と曜日に聞きますか?</h3><p>そうですね、 <code>Heat Map</code>を活用した Lens 視覚化を使えば、非常に簡単に答えることができます。新しいレンズを作成するには、 <code>Heat Map</code>を選択します。<code>Horizontal Axis</code>では<code>dayOfWeek</code>フィールドを選択し、トップ 3 ではなく<code>Top 7</code>に設定します。<code>Vertical Axis</code>の場合は<code>hourOfDay</code>を選択し、 <code>Cell Value</code>の場合は単純な<code>Count of records</code>選択します。これで次のパネルが生成されます:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2d08e4f4d0a90550/6a17e5e7e8fbce1af43a18f2/c83ec13a3c7d1b71b8a6b110ed2b74e691d868e6-3538x1720.png" alt="Spotify Wrapped のダッシュボードを使った視聴習慣の視覚化" /><p>このレンズには、解釈するときに邪魔になる厄介な点がいくつかあります。少し整理してみましょう。まず、凡例はあまり気にしないので、上部の三角形、四角形、円の記号を使用して無効にします。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltce46c47addd91c61/6a17e5e94b055d15d5432192/84f51d6c885b929bf47ac05edd32ca149ad2e651-1040x298.png" alt="Spotify Wrapped の視覚化 " /><p>さて、2番目に面倒なのは、日付の並べ替えです。指定した値に応じて、月曜日、水曜日、木曜日などになります。<code>hourOfDay</code>は正しくソートされています。日をソートする方法は面白いハックであり、 <code>Top Values</code>の代わりに<code>Filters</code>使用すると言われています。<code>dayOfWeek</code>をクリックして<code>Filters</code>を選択すると、次のようになります。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0e9c6005a917d4de/6a17e5eb4b055d6e10432196/2498a66098d40a1ba44d3f88464a9888dca204af-3574x1294.png" alt="Kibana ダッシュボードで Spotify Wrapped の履歴を視覚化" /><p>さあ、日付を入力し始めましょう。1 日につき 1 つのフィルター。<code>"dayOfWeek" : Monday</code>にしてラベル<code>Monday</code>を付け、これを繰り返します。</p><p>ただし、1 つの注意点は、Spotify がタイムゾーン情報なしで UTC+0 でデータを提供していることです。もちろん、IP アドレスと視聴した国も提供されており、そこからタイムゾーン情報を推測することはできますが、これは不正確になる可能性があり、米国のように複数のタイムゾーンがある国では面倒すぎる可能性があります。これは重要です。Elasticsearch と Kibana はタイムゾーンをサポートしており、 <code>@timestamp</code>フィールドに正しいタイムゾーンを指定すると、Kibana は自動的に時間をブラウザの時間に合わせて調整します。</p><p>完成するとこのようになり、私は勤務時間中は非常に積極的に聞き手であり、土曜日と日曜日はそれほどではないことがわかります。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd8eaab83c8c9c7f2/6a17e5ed6df7315e250a0ec5/c664c90ff8e852e1766e8101afc20c58e110f09c-3582x2030.png" alt="Kibana ダッシュボードを使用した Spotify Wrapped の視覚化" /><h2>まとめ</h2><p>このブログでは、Spotify データが提供する複雑な点について、もう少し詳しく説明します。いくつかの視覚化を実現するためのシンプルで簡単な方法をいくつか紹介しました。自分の視聴履歴をこれほど細かく制御できるのは、本当に素晴らしいことです。シリーズの他の部分もご覧ください:</p><ul><li><p><a href="https://www.elastic.co/search-labs/blog/spotify-wrapped-create-in-kibana">パート1：KibanaでSpotify Wrappedを作成する方法</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/elasticsearch-anomaly-detection-jobs">パート3：異常検出人口ジョブ</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/find-relationships-in-data">パート4: データ内の関係性の検出</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/vectors-spotify-wrapped-part-05">パート5：ベクトルを使って最高の音楽仲間を見つける</a></p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/spotify-wrapped-data-analysis-visualization</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/spotify-wrapped-data-analysis-visualization</guid>
    <category><![CDATA[Kibana]]></category>
    <category><![CDATA[分析]]></category>
    <dc:creator><![CDATA[Philipp Kahr]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7f8cddbca1a54cd5/6a17e5efe9ea87717ba9c585/e04f85e87b5b4e69b6e2df9367840a56985b96a1-1792x1024.png" length="0" type="image/png"/>
    <pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>