检测数据中的关系:Spotify Wrapped,第 4 部分
2025年4月7日 | by mebius
作者:来自 ElasticPhilipp Kahr
图表是检测数据关系的强大工具。在这篇博客中,我们将探讨艺术家与你的音乐品味之间的关系。
在第一部分,我们讨论了如何获取你的 Spotify Wrapped 数据以及如何对其进行可视化。在第二部分,我们讲解了如何处理数据并进行可视化。在第三部分,我们探讨了异常检测,以及它如何帮助我们发现有趣的听歌行为。在这一部分,我们将讨论如何在你的音乐中找到关系。
什么是关系?
在音乐的背景下,关系可以是很多东西。它可以是艺术家之间的关系、流派之间的关系、歌曲之间的关系,甚至是一天中的时间与你所听音乐之间的关系。在这篇博客文章中,我们将专注于艺术家之间的关系。
我们如何探索关系?
有一个简单的解决方案,那就是 Kibana Graph。请确保你已经按照第二篇博客文章中的数据导入步骤进行操作,否则这个方法将无法使用。那么,Kibana Graph 在底层实际上是如何工作的呢?
假设我们有以下文档,每一行代表一个新的文档。
artist: ["Jamie XX"]
artist: ["Jamie XX", "Romy"]
artist: ["The XX", "Romy"]
artist: ["Jamie XX", "Fred again.."]
artist: ["Fred again..", "Romy"tgcode]
这是一个非常简单的示例,但它展示了 Kibana Graph 的基本工作原理。它会读取所有文档并从中创建一个图。在这个过程中涉及一些术语:
-
代表艺术家的 圆圈 被称为 节点(nodes)或顶点(vertices)。
-
连接这些圆圈的 线 被称为 边(edges)。
此外,还有一些可以调整的参数:
1. Significant links(重要链接)
这个功能有助于清除数据集中噪声较大的术语。当数据集包含大量术语时,这个功能非常有用。然而,它的计算代价较高,因为 Kibana Graph 需要在 Elasticsearch 端执行频率检查,以计算术语的得分。因此,如果没有必要,建议关闭此选项。
2. Certainty(置信度)
默认情况下,该值设置为 3,这意味着 两个艺术家之间的连接至少需要在数据集中出现 3 次 才会被视为有效连接。
-
我通常在其他用例中会把这个值降低到 0,但在音乐数据分析中,默认值 3 可能比较合适,因为我不希望图中充满单次出现的偶然连接。
-
例如,如果我只听了一次 Jamie xx 和 Fred Again.. 合作的歌曲,在 certainty = 0 的情况下,这次出现就足够建立关系。但如果 certainty = 3,那么至少需要听 3-4 次,才能在图中看到它们的连接。
3. Sample Size(样本大小)
Kibana Graph 不会读取索引中的所有文档,而是基于 抽样 来构建图。这是为了保持高性能。
-
我们可以调整样本大小,使其更具代表性。
-
但需要注意:如果增加样本大小,也要相应调整超时时间(timeout),否则可能会导致查询失败。
4. Timeout(超时时间)
这个参数很好理解,它决定了 Elasticsearch 有多少时间来返回结果。如果查询超时,可能需要增大超时时间,尤其是在处理大数据集时。
使用 Kibana Graph
在了解了基本概念之后,接下来就可以进入 Kibana 并打开 Graph 应用。按照以下步骤进行操作:
-
选择数据视图(Data View)
-
选择 Spotify History 作为数据视图。
-
-
选择字段(Field)
-
当系统提示选择一个字段时,选择 artist 字段。
-
默认情况下,该字段会显示为 紫色(violet),并带有一个 音乐 16 分音符 图标。
-
-
调整样本大小(Sample Size)
-
我将样本大小调整为 5000,以获得一个清晰且有意义的初始图表。
-
我们可以看到,有多个艺术家彼此关联。这使我们能够选择其中一位艺术家并点击 + 按钮。目前已经形成了一些聚类,这一点很重要。而那些独立的艺术家对我们来说并不重要。
在右侧面板中,有一个 全部(All) 按钮。选择它并再次点击 +。这样,你的图表将扩展,并引入更多的艺术家。
如果我们继续这个过程,增加样本量并不断扩展图表。根据你的听歌风格,你应该看到很多小岛屿或少数几个大聚类。在下一张图中,我们看到中间有一个大聚类,连接了 Rudimental、Fred again.. 和 Jamie XX。这是有道理的,因为它们都属于相同的音乐流派,且这些流派中有很多共同的艺术家。同时,我们周围还有一些较小的岛屿。Kraftklub 是一支德国乐队,它与我听的大部分德国音乐相关联,比如 Casper 和 Blond。还有一些孤立的节点,比如 Harry Styles。
让我们深入了解为什么 Harry Styles 是孤立的。他难道没有和其他人合作吗?当我听的所有其他音乐都或多或少是基于艺术家合作而连接时,他是如何融入我的听歌行为的呢?
前往 Discover 并执行以下操作:
-
在搜索框中输入 artist: “Harry Styles”。这样可以筛选出所有包含 Harry Styles 名字的文档。
-
我们可以简单地点击左侧字段选择器中的 artist 字段,看到只有 1 个值。
-
尽管我听了 Harry Styles 2535 次,但他从未与其他艺术家合作(至少根据 Spotify 数据,未列出这种合作)。与 Jamie XX 等艺术家进行比较,我们可以看到明显的差异。
结论
在这篇博客中,我们探索了关系以及如何轻松利用 Kibana Graph 和 Elasticsearch 的图形功能。敬请关注本博客系列的更多内容!
想获得 Elastic 认证吗?查看下一期 Elasticsearch 工程师培训的时间!tgcode
Elasticsearch 拥有众多新功能,帮助你为特定用例构建最佳搜索解决方案。深入了解我们的示例笔记本,开始免费的云tgcode试用,或立即在本地机器上尝试 Elastic。
更多有关 Graph 的阅读,请参阅 “X-Pack:Elastic Graph 介绍”。
原文:Detecting relationships in data: Spotify Wrapped, part 4 – Elasticsearch Labs
文章来源于互联网:检测数据中的关系:Spotify Wrapped,第 4 部分
相关推荐: Elasticsearch:在 Elastic 中玩转 DeepSeek R1 来实现 RAG 应用
在这个春节,如一声春雷,DeepSeek R1 横空出世。现在人人都在谈论 DeepSeek R1。这个大语言模型无疑在中国及世界的人工智能发展史上留下了重要的里程碑。那么我们改如何结合 DeepSeek R1 及 Elasticsearch 来实现 RAG …