<?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/kr/search-labs/author/philipp-kahr</link>
    </image>
    <link>https://www.elastic.co/kr/search-labs/author/philipp-kahr</link>
    <atom:link href="https://www.elastic.co/kr/search-labs/rss/author/philipp-kahr.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[kr]]></language>
    <lastBuildDate>Tue, 22 Sep 2026 12:39:43 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Spotify Wrapped 2부: 데이터 분석 및 시각화]]></title>
    <description><![CDATA[그 어느 때보다 심층적으로 Spotify 데이터를 분석하여 존재조차 몰랐던 연결고리를 찾아드립니다.]]></description>
    <content:encoded><![CDATA[<p>이 시리즈의 <a href="https://www.elastic.co/search-labs/blog/spotify-wrapped-create-in-kibana">첫 번째 파트에서는</a> Iulia Feroli가 작성한 글에서 Spotify Wrapped 데이터를 가져와서 Kibana에서 시각화하는 방법에 대해 이야기했습니다. 2부에서는 데이터에 대해 더 자세히 살펴보고 그 밖의 어떤 사실을 알아낼 수 있는지 알아보겠습니다. 이를 위해 약간 다른 접근 방식을 활용하여 <a href="https://github.com/elastic/elasticsearch-labs/tree/main/supporting-blog-content/spotify-to-elasticsearch">Spotify에서 El</a> asticsearch로 데이터를 색인하는 데 사용하겠습니다. 이 도구는 조금 더 고급이며 설정이 조금 더 필요하지만 그만한 가치가 있습니다. 데이터가 더 구조화되어 더 복잡한 질문을 할 수 있습니다.</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 래핑 데이터 처리</h2><p>첫 번째 게시물과 두 번째 게시물에서 데이터를 처리하는 방식에는 큰 차이가 있습니다. 첫 번째 게시물의 데이터로 계속 작업하려면 일부 필드 이름 변경을 고려해야 할 뿐만 아니라 <code>hour of day</code> 같은 특정 추출을 즉석에서 수행하려면 ES|QL로 되돌려야 합니다.</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 래핑된 데이터 시각화하기</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을 사용할 수 있습니다. 세 가지 옵션을 모두 살펴 보겠습니다. 이 질문을 Elasticsearch 방식으로 올바르게 표현해 보겠습니다. 상위 100곡을 찾은 다음 모든 곡을 합친 평균 재생 시간을 계산하려고 합니다. Elasticsearch 용어로는 두 개의 집계가 됩니다:</p><ol><li><p>상위 100곡 파악하기</p></li><li><p>100곡의 평균 재생 시간을 계산합니다.</p></li></ol><p><strong>Lens</strong></p><p>Lens에서는 새 렌즈를 만들고 테이블로 전환한 다음 <code>title</code> 필드를 테이블로 끌어다 놓으면 됩니다. 그런 다음 <code>title</code> 필드를 클릭하고 크기를 100으로 설정하고 <code>accuracy</code> 모드를 설정합니다. 그런 다음 <code>duration</code> 필드를 테이블로 끌어다 놓고 <code>last value</code> 을 사용해야 하므로 각 노래의 마지막 지속 시간 값만 필요합니다. 같은 노래의 지속 시간은 한 번만 사용할 수 있습니다. 이 <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 래핑된 데이터에 Lens 사용" /><p><strong>ES|QL</strong></p><p>ES|QL은 DSL &amp; 집계에 비해 매우 새로운 언어이지만 매우 강력하고 사용하기 쉽습니다. 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> - 이것은 첫 번째 집계로, 각 곡의 최대 재생 시간과 각 곡의 개수를 계산하고 있습니다. 렌즈에서 사용하는 <code>last value</code> 대신 <code>max</code> 을 사용하는데, 이는 현재 ES|QL에 이름이나 성이 없기 때문입니다.</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 래핑된 월별 분석 시각화" /><h3>아티스트당 연간 청취 시간은 얼마나 되나요?</h3><p>그 이면에는 아티스트의 문제가 일회성으로 끝나는지, 아니면 재발하는지를 파악하기 위한 목적이 있습니다. 제 기억이 맞다면 Spotify는 연도별 상위 5명의 아티스트만 표시합니다. 6위 아티스트가 항상 같은 순위를 유지하거나 10위 이후에는 순위가 크게 바뀌나요?</p><p>이를 가장 간단하게 표현한 것 중 하나가 백분율 막대 차트입니다. 이를 위해 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> 은 크게 성장한 것을 알 수 있습니다. 막대의 크기만 비교해 보겠습니다. 또한 2024년에도 <code>Billie Eilish</code> 이 지속적으로 재생되는 동안 바가 넓어지는 것을 알 수 있습니다. 즉, 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 래핑된 기록 시각화" /><h3>전체 청취 시간 대비 아티스트별 상위 트랙과 전체 청취 시간은 어떻게 되나요?</h3><p>정말 어려운 질문입니다. 제가 하고 싶은 말이 무엇인지 설명해 보겠습니다. Spotify는 단일 아티스트의 인기 곡 또는 전체 인기 곡 5곡을 알려줍니다. 확실히 흥미롭긴 하지만 아티스트의 고장은 어떤가요? 반복해서 재생하는 한 곡에만 모든 시간이 소비되나요, 아니면 고르게 분배되나요?</p><p>새 렌즈를 만들고 유형으로 <code>Treemap</code> 을 선택합니다. <code>metric</code> 의 경우 이전과 동일하게 <code>sum</code> 을 선택하고 <code>listened_to_ms</code> 을 입력란으로 사용합니다. <code>group by</code> 의 경우 두 개의 값이 필요합니다. 첫 번째는 <code>artist</code> 이고 두 번째는 <code>title</code> 으로 추가합니다. 중간 결과는 다음과 같습니다:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9aa0e4877472123f/6a17e5e44b055d6dcf43218e/2dea389664a0d3d13fff03c6337bff3ce740f9b1-2922x1430.png" alt="Kibana를 사용한 Spotify 래핑된 기록 시각화" /><p>이를 상위 100명의 아티스트로 변경하고 고급 드롭다운에서 <code>other</code> 을 선택 해제하고 정확도 모드를 사용하도록 설정해 보겠습니다. 제목의 경우 상위 10위로 변경하고 정확도 모드를 활성화합니다. 최종 결과는 다음과 같습니다:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt070bf745be1d3f92/6a17e5e66864a43a0fb6875b/7e99a15c69801e58302af4c12b500242a7e8bc9d-2640x1622.png" alt="Kibana를 사용한 스포티파이 래핑 시각화" /><p>이것이 지금 우리에게 정확히 무엇을 말해줄까요? 시간 구성 요소를 살펴보지 않고도 Spotify의 전체 청취 기록에서 5.67% 을 <code>Fred Again..</code> 청취하는 데 사용했음을 알 수 있습니다. 특히 그 시간 중 1.21% 을 들으며 <code>Delilah (pull me out of this)</code> 을 들었습니다. 한 아티스트를 점유하는 곡이 한 곡만 있는지, 아니면 다른 곡도 있는지 살펴보는 것도 흥미롭습니다. 트리맵 자체는 이러한 데이터 분포를 표현하기에 좋은 형태입니다.</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 랩핑된 청취 습관 시각화" /><p>이 렌즈 주변에는 통역할 때 방해가 되는 몇 가지 성가신 것들이 있습니다. 조금 정리해 보겠습니다. 우선 범례에 너무 신경 쓰지 않고 상단의 삼각형, 사각형, 원이있는 기호를 사용하고 비활성화합니다.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltce46c47addd91c61/6a17e5e94b055d15d5432192/84f51d6c885b929bf47ac05edd32ca149ad2e651-1040x298.png" alt="Spotify 래핑 시각화 " /><p>이제 성가신 두 번째 부분은 요일 정렬입니다. 월요일, 수요일, 목요일 등 원하는 날짜로 지정할 수 있습니다. <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 래핑된 기록 시각화" /><p>이제 날짜를 입력하기만 하면 됩니다. 하루에 하나의 필터만 사용하세요. <code>"dayOfWeek" : Monday</code> 를 클릭하고 <code>Monday</code> 레이블을 지정한 다음 헹구고 반복합니다.</p><p>하지만 이 모든 과정에서 한 가지 주의할 점은 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 대시보드를 사용한 스포티파이 래핑 시각화" /><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를 만드는 방법</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>