<?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/fr/search-labs/author/philipp-kahr</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/author/philipp-kahr</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/author/philipp-kahr.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Mon, 21 Sep 2026 16:59:45 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Spotify Wrapped partie 2 : Analyse et visualisation des données]]></title>
    <description><![CDATA[Nous allons plonger plus profondément que jamais dans vos données Spotify et explorer des connexions dont vous ne soupçonniez même pas l'existence.]]></description>
    <content:encoded><![CDATA[<p>Dans la <a href="https://www.elastic.co/search-labs/blog/spotify-wrapped-create-in-kibana">première partie</a> de cette série, écrite par Iulia Feroli, nous avons expliqué comment obtenir vos données Spotify Wrapped et les visualiser dans Kibana. Dans la deuxième partie, nous approfondirons les données pour voir ce que nous pouvons découvrir d'autre. Pour ce faire, nous allons utiliser une approche un peu différente et utiliser <a href="https://github.com/elastic/elasticsearch-labs/tree/main/supporting-blog-content/spotify-to-elasticsearch">Spotify to Elasticsearch</a> pour indexer les données dans Elasticsearch. Cet outil est un peu plus avancé et nécessite un peu plus d'installation, mais il en vaut la peine. Les données sont plus structurées et nous pouvons poser des questions plus complexes.</p><h2>Différences par rapport à la première analyse Spotify Wrapped</h2><p>Dans le premier blog, nous avons utilisé l'export Spotify directement et n'avons effectué aucune tâche de normalisation ni aucun autre traitement de données. Cette fois-ci, nous utiliserons les mêmes données, mais nous les traiterons pour les rendre plus utilisables. Cela nous permettra de répondre à des questions beaucoup plus complexes, comme par exemple :</p><ul><li><p>Quelle est la durée moyenne d'une chanson dans mon top 100 ?</p></li><li><p>Quelle est la popularité moyenne d'une chanson dans mon top 100 ?</p></li><li><p>Quelle est la durée médiane d'écoute d'une chanson ?</p></li><li><p>Quelle est la piste que je saute le plus souvent ?</p></li><li><p>Quand est-ce que j'aime sauter des pistes ?</p></li><li><p>Suis-je plus attentif à une heure particulière de la journée qu'à d'autres ?</p></li><li><p>Est-ce que j'écoute plus un jour de la semaine que les autres ?</p></li><li><p>S'agit-il d'un mois particulièrement intéressant ?</p></li><li><p>Quel est l'artiste dont la durée d'écoute est la plus longue ?</p></li></ul><p>Spotify Wrapped est une expérience amusante chaque année, vous montrant ce que vous avez écouté cette année. Il n'indique pas les changements d'une année sur l'autre, et il se peut donc que vous passiez à côté d'artistes qui figuraient autrefois dans votre top 10, mais qui ont maintenant disparu.</p><h2>Traitement des données Spotify Wrapped pour analyse</h2><p>Il y a une grande différence dans la façon dont nous traitons les données dans le premier et le second message. Si vous souhaitez continuer à travailler avec les données du premier message, vous devrez tenir compte de certains changements de noms de champs et revenir à ES|QL pour effectuer certaines extractions comme <code>hour of day</code> à la volée.</p><p>Néanmoins, vous devriez tous être en mesure de suivre ce message. Le traitement des données est effectué dans le référentiel <a href="https://github.com/elastic/elasticsearch-labs/tree/main/supporting-blog-content/spotify-to-elasticsearch">Spotify to Elasticsearch</a> et consiste à demander à l'API Spotify la durée de la chanson, la popularité, ainsi qu'à renommer et à enrichir certains champs. Par exemple, le champ <code>artist</code> dans l'export Spotify n'est qu'une chaîne de caractères et ne représente pas les fonctionnalités ou les titres multi-artistes.</p><h2>Visualiser les données de Spotify Wrapped avec des tableaux de bord</h2><p>J'ai créé un tableau de bord dans Kibana pour visualiser les données. Le tableau de bord est disponible <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/spotify-to-elasticsearch/kibana/dashboard.ndjson">ici</a> et vous pouvez l'importer dans votre instance Kibana. Le tableau de bord est très complet et répond à de nombreuses questions.</p><p>Examinons quelques-unes de ces questions et la manière d'y répondre ensemble !</p><h3>Quelle est la durée moyenne d'une chanson dans mon top 100 ?</h3><p>Pour répondre à cette question, nous pouvons utiliser Lens ou ES|QL. Explorons ces trois options. Formulons cette question correctement à la manière d'Elasticsearch. Nous voulons trouver les 100 chansons les plus populaires et calculer la durée moyenne de toutes ces chansons combinées. En termes d'Elasticsearch, il s'agit de deux agrégations :</p><ol><li><p>Déterminer les 100 chansons les plus populaires</p></li><li><p>Calculez la durée moyenne de ces 100 chansons.</p></li></ol><p><strong>Lens</strong></p><p>Dans Lens, c'est assez simple : créez un nouveau Lens, passez à une table et glissez-déposez le champ <code>title</code> dans la table. Cliquez ensuite sur le champ <code>title</code> et fixez la taille à 100, ainsi que le mode <code>accuracy</code>. Faites ensuite glisser le champ <code>duration</code> dans la table et utilisez <code>last value</code>, car nous n'avons besoin que de la dernière valeur de la durée de chaque chanson. Une même chanson n'aura qu'une seule durée. Au bas de cette agrégation <code>last value</code> se trouve un menu déroulant permettant d'obtenir une ligne de résumé. Sélectionnez <code>average</code> et vous obtiendrez le résumé.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5df1d7f36de5e2ae/6a17e5df0b0beddd57dd355c/a56f6e48e6b53af3ca3d38d67ce0916d0621ef16-2910x1058.png" alt="Utilisation de Lens pour les données enveloppées de Spotify" /><p><strong>ES|QL</strong></p><p>ES|QL est un langage assez récent par rapport aux agrégations DSL &amp;, mais il est très puissant et facile à utiliser. Pour répondre à la même question en ES|QL, vous devez écrire la requête suivante :</p><p>Laissez-moi vous guider pas à pas dans cette requête ES|QL :</p><ol><li><p><code>from spotify-history</code> - C'est le modèle d'index que nous utilisons.</p></li><li><p><code>stats duration=max(duration), count=count() by title</code> - Il s'agit de la première agrégation, nous calculons la durée maximale de chaque chanson et le nombre de chansons. Nous utilisons <code>max</code> au lieu de <code>last value</code> comme dans la lentille, parce que ES|QL n'a pas de prénom ni de nom de famille.</p></li><li><p><code>sort count desc</code> - Nous trions les chansons en fonction du nombre d'écoutes, de sorte que la chanson la plus écoutée se trouve en haut de la liste.</p></li><li><p><code>limit 100</code> - Nous limitons le résultat aux 100 premières chansons.</p></li><li><p><code>stats Average duration of the songs=avg(duration)</code> - Nous calculons la durée moyenne des chansons.</p></li></ol><h3>Un mois présente-t-il un intérêt particulier pour moi ?</h3><p>Pour répondre à cette question, nous pouvons utiliser Lens avec l'aide du champ d'exécution et ES|QL. Nous remarquons tout de suite qu'il n'y a pas de champ dans les données qui indique directement <code>month</code>, mais que nous devons le calculer à partir du champ <code>@timestamp</code>. Il y a plusieurs façons de procéder :</p><ol><li><p>Utiliser un champ d'exécution pour alimenter la lentille</p></li><li><p>ES|QL</p></li></ol><p>Je pense personnellement que ES|QL est la solution la plus propre et la plus rapide.</p><p>C'est tout, il n'y a rien d'extraordinaire à faire, nous pouvons utiliser la fonction <code>DATE_EXTRACT</code> pour extraire le mois du champ <code>@timestamp</code> et ensuite l'agréger. En utilisant la visualisation ES|QL, nous pouvons l'intégrer au tableau de bord.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2c221ad4446cfb09/6a17e5e03e9e45076eba144c/7f942cf38fbe0fecec1d741e7df922196f4e9483-1878x722.png" alt="Visualisation de la répartition mensuelle de Spotify Wrapped" /><h3>Quelle est ma durée d'écoute par artiste et par an ?</h3><p>L'idée sous-jacente est de voir si un artiste n'est qu'un phénomène ponctuel ou s'il est récurrent. Si je me souviens bien, Spotify n'affiche que les 5 premiers artistes de l'année. Peut-être que votre artiste numéro 6 reste le même tout le temps, ou qu'il change fortement après la 10e position ?</p><p>L'une des représentations les plus simples est le diagramme à barres en pourcentage. Nous pouvons utiliser Lens à cette fin. Suivez les étapes :</p><p>Faites glisser et déposez le champ <code>listened_to_ms</code>. Ce champ représente la durée d'écoute d'une chanson en millisecondes. Par défaut, Lens crée une agrégation <code>median</code>, ce que nous ne voulons pas, mais plutôt <code>sum</code>. Dans la partie supérieure, sélectionnez <code>percentage</code> au lieu de <code>stacked</code> pour le type de diagramme à barres. Pour la répartition, sélectionnez <code>artist</code> et dites top 10. Dans la liste déroulante <code>Advanced</code>, n'oubliez pas de sélectionner <code>accuracy mode</code>. Désormais, chaque bloc de couleur représente le nombre de fois où vous avez écouté cet artiste. En fonction de votre marqueur temporel, les barres peuvent représenter des valeurs de jours, de semaines, de mois ou d'années. Si vous souhaitez un décompte hebdomadaire, sélectionnez le site <code>@timestamp</code> et réglez le site <code>mininum interval</code> sur <code>year</code>. Dans mon cas, on peut dire que <code>Fred Again..</code> est l'artiste que j'ai le plus écouté, près de 12% de mon temps d'écoute total ayant été consommé par <code>Fred Again..</code>. Nous constatons également que <code>Fred Again..</code> a légèrement diminué en 2024, mais que <code>Jamie XX</code> a largement progressé. Si l'on compare uniquement la taille des barres. Nous pouvons également constater que pendant que <code>Billie Eilish</code> est constamment joué dans 2024, le bar s'élargit. Cela signifie que j'ai écouté <code>Billie Eilish</code> plus en 2024 qu'en 2023.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blteb0c11b909be859f/6a17e5e2e8fbce239a3a18ee/61a5bcc6b7385ed0a11b67c9c6bab32d27f4a49b-2942x1354.png" alt="Visualisation de l'historique de Spotify Wrapped avec Kibana" /><h3>Qu'en est-il des meilleurs titres par artiste et par durée d'écoute par rapport à la durée d'écoute totale ?</h3><p>C'est une question qui a de la gueule. Permettez-moi d'essayer d'expliquer ce que je veux dire par là. Spotify vous informe sur la meilleure chanson d'un artiste, ou sur vos 5 meilleures chansons. C'est très intéressant, mais qu'en est-il de la décomposition d'un artiste ? Est-ce que tout mon temps est consommé par une seule chanson que je joue encore et encore, ou est-ce que ce temps est réparti de manière égale ?</p><p>Créez un nouvel objectif et sélectionnez <code>Treemap</code> comme type. Pour <code>metric</code>, même chose que précédemment : sélectionnez <code>sum</code> et utilisez <code>listened_to_ms</code> comme champ. Pour le site <code>group by</code>, nous avons besoin de deux valeurs. Le premier est <code>artist</code> et le second est <code>title</code>. Le résultat intermédiaire est le suivant :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9aa0e4877472123f/6a17e5e44b055d6dcf43218e/2dea389664a0d3d13fff03c6337bff3ce740f9b1-2922x1430.png" alt="Visualisation de l'historique de Spotify Wrapped avec Kibana" /><p>Changeons cela pour le top 100 des artistes et désélectionnons le <code>other</code> dans le menu déroulant avancé, ainsi que l'activation du mode précision. Pour le titre, modifiez-le en top 10 et activez le mode précision. Le résultat final est le suivant :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt070bf745be1d3f92/6a17e5e66864a43a0fb6875b/7e99a15c69801e58302af4c12b500242a7e8bc9d-2640x1622.png" alt="Visualisation de Spotify Wrapped avec Kibana" /><p>Qu'est-ce que cela nous apprend exactement ? Sans tenir compte de la durée, on peut dire que sur l'ensemble de mon historique d'écoute avec Spotify, j'ai passé 5,67% à écouter <code>Fred Again..</code>. En particulier, j'ai passé 1,21% de ce temps à écouter <code>Delilah (pull me out of this)</code>. Il est intéressant de voir s'il y a une seule chanson qui occupe un artiste, ou s'il y a aussi d'autres chansons. La carte arborescente elle-même est une forme agréable pour représenter de telles distributions de données.</p><h3>Est-ce que j'écoute à une heure et à un jour précis ?</h3><p>Nous pouvons répondre à cette question de manière très simple grâce à une visualisation de la lentille qui exploite le site <code>Heat Map</code>. Créez un nouvel objectif, sélectionnez <code>Heat Map</code>. Pour le champ <code>Horizontal Axis</code> select <code>dayOfWeek</code>, définissez <code>Top 7</code> au lieu de Top 3. Pour le <code>Vertical Axis</code>, sélectionnez le <code>hourOfDay</code> et pour le <code>Cell Value</code>, un simple <code>Count of records</code>. Cette opération permet d'obtenir ce panneau :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2d08e4f4d0a90550/6a17e5e7e8fbce1af43a18f2/c83ec13a3c7d1b71b8a6b110ed2b74e691d868e6-3538x1720.png" alt="Visualisation des habitudes d'écoute de Spotify Wrapped à l'aide de tableaux de bord" /><p>Il y a deux ou trois choses ennuyeuses autour de cette lentille, qui me dérangent lors de l'interprétation. Essayons d'y mettre un peu d'ordre. Tout d'abord, je ne me soucie pas trop de la légende, utilisez le symbole en haut avec le triangle, le carré, le cercle et désactivez-le.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltce46c47addd91c61/6a17e5e94b055d15d5432192/84f51d6c885b929bf47ac05edd32ca149ad2e651-1040x298.png" alt="Spotify visualisation enveloppée " /><p>La deuxième partie qui est gênante est le tri des jours. C'est lundi, mercredi, jeudi, ou autre chose, selon les valeurs que vous avez. Le site <code>hourOfDay</code> est correctement trié. La façon de trier les jours est une astuce amusante qui consiste à utiliser <code>Filters</code> au lieu de <code>Top Values</code>. Cliquez sur <code>dayOfWeek</code> et sélectionnez <code>Filters</code>, cela devrait ressembler à ceci :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0e9c6005a917d4de/6a17e5eb4b055d6e10432196/2498a66098d40a1ba44d3f88464a9888dca204af-3574x1294.png" alt="Visualisation de l'historique de Spotify Wrapped avec Kibana Dashboards" /><p>Il ne vous reste plus qu'à taper les jours. Un filtre par jour. <code>"dayOfWeek" : Monday</code> et lui attribuer le label <code>Monday</code>, puis rincer et répéter.</p><p>Un bémol cependant : Spotify fournit les données en UTC+0 sans aucune information sur le fuseau horaire. Bien sûr, ils fournissent également l'adresse IP et le pays où vous avez écouté et nous pourrions en déduire les informations relatives au fuseau horaire, mais cela peut s'avérer bancal et pour des pays comme les États-Unis qui ont plusieurs fuseaux horaires, cela peut s'avérer trop fastidieux. C'est important car Elasticsearch et Kibana prennent en charge les fuseaux horaires et en fournissant le bon fuseau horaire dans le champ <code>@timestamp</code>, Kibana ajustera automatiquement l'heure à celle de votre navigateur.</p><p>Il devrait ressembler à ceci lorsqu'il sera finalisé, et on peut dire que je suis un auditeur très actif pendant les heures de travail et moins le samedi et le dimanche.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd8eaab83c8c9c7f2/6a17e5ed6df7315e250a0ec5/c664c90ff8e852e1766e8101afc20c58e110f09c-3582x2030.png" alt="Visualisation de Spotify Wrapped avec Kibana Dashboards" /><h2>Conclusion</h2><p>Dans ce blog, nous avons approfondi les subtilités des données de Spotify. Nous avons montré quelques moyens simples et rapides de mettre en place des visualisations. Il est tout simplement incroyable d'avoir autant de contrôle sur son propre historique d'écoute. Consultez les autres parties de la série :</p><ul><li><p><a href="https://www.elastic.co/search-labs/blog/spotify-wrapped-create-in-kibana">Partie 1 : Comment créer son propre Spotify Wrapped dans Kibana</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/elasticsearch-anomaly-detection-jobs">Partie 3 : Emplois de la population pour la détection des anomalies</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/find-relationships-in-data">Partie 4 : Détecter les relations dans les données</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/vectors-spotify-wrapped-part-05">Partie 5 : Trouver son meilleur ami musical avec les vecteurs</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[analytique]]></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>