Python 音乐推荐系统项目及源代码

2025年3月17日 | 阅读 12 分钟

为什么这个项目要使用 Python?

多年来,Python 在数据科学领域赢得了巨星地位。所有数据爱好者都喜欢它,它为统计科学和机器学习提供了简单的入门途径。有几个内置库可用于具有挑战性的数据科学项目,它们易于创建。Python 的流行也归因于其直观的代码可读性。与其他复杂语言相比,它的语法是骨骼和最小的。用于数据科学的 Python 可用库列表不完整,但它包括 seaborn、Matlab、sci-kit learn、SciPy、pandas、requests、regex、NumPy 等。

  • Python 是初学者开始学习数据科学的好选择,这是有道理的。
  • 我们都使用音频流媒体服务,包括 Gaana、Jio Saavn、Spotify 和 iTunes。
  • 您是否思考过这些平台在您听音乐时如何根据您的喜好向您推荐歌曲?这些服务使用机器学习算法。
  • 这是为了他们能为您提供他们认为您会喜欢的歌曲。我们将在本文中讨论这些模型,并使用它们来创建音乐推荐引擎。

为了帮助您开始学习之旅并获得数据科学职业所需的实践经验,这里精选了一些经过验证的 Python 数据科学项目。现在是时候尝试数据科学项目并尝试不同的策略来解决业务问题,以获取数据驱动的见解。像 Tableau Prep 这样的软件可以通过提供可视化和直接的方法来组织和清理数据,帮助您培养出色的数据文化。

Tableau Prep 包含两种产品:用于在整个公司中调度、管理和监控流程的 Mondrian Prep Director,以及用于创建数据流的 Tableau Prep Builder。数据清理工具可以让分析师或管理员更快地开始他们的研究,并且对数据更有信心,从而为管理员节省大量时间。做出成功且高效的业务决策需要了解数据质量以及用于构建、管理和转换数据的工具。

这个重要的过程将帮助您的公司进一步建立数据文化。您可以阅读设计公司 Tinuiti 如何为 500 多个客户发展其高级分析并在 Tableau Prep 中集中 100 多个数据集的故事,了解他们是如何做到的。

基于 KKBox 数据集的音乐推荐系统

当今世界被音乐包围。到 2021 年,仅 Spotify 就将提供超过 7000 万首歌曲,这证明了音乐的普及程度。其他服务包括 KKBox、Gaana、Saavn 和 Apple Music。在如此多的内容已经可用的领域中,如何才能发现新内容?推荐系统是用户发现新歌曲并培养新音乐喜好的方式。推荐算法对音乐流媒体公司来说也很有利可图。它们受益于平台上的参与度增加和受众增长。

在亚洲,KKBox 是最大的流媒体服务之一。

数据集描述

这些信息包括音乐和用户元数据。元数据中包含用户和歌曲的特定信息,例如用户 ID、用户注册日期、歌曲 ID、歌曲流派、歌曲艺术家名称和歌曲发布日期。这些信息包括用户何时只播放一次音乐。对于每个歌曲-用户组合,此信息是特定的。

数据集包含三个文件

  • csv - 此文件包含用户-歌曲对的信息,包括用户 ID、源系统选项卡、源类型、源屏幕时间和目标。
  • 目标表示用户是否在一个月内播放了相同的音乐。
  • csv - 它包括歌曲 ID、歌曲流派、歌曲艺术家、歌曲作词人等信息。Target = 1 表示用户在 30 天内播放了歌曲;Target = 0 表示用户没有播放歌曲。
  • individuals.csv - 它包含客户账户信息,如 user_name、user_age、user_gender、user_subscription_plan 等等。

从数据集中删除重复或无意义的观察结果以及不需要的观察结果。大多数重复的观察结果将发生在数据收集期间。当您合并来自多个来源的数据集、抓取数据或从客户或其他部门获取数据时,可能会产生重复数据。在此过程中需要考虑的最重要因素之一是去重。当您观察到与您试图研究的特定问题无关的数据时,这些观察结果被认为是无关的。

例如,如果您想检查关于千禧一代客户的数据,但您的数据集也包含来自前几代的观察结果,您可能会消除这些无用的观察结果。除了提供更易懂和有效的数据集外,这还可以提高分析效率并减少与主要目标的偏差。

步骤 1:数据清洗

数据集中可能存在异常、离群值和缺失值。这些情况可能会影响算法实现的准确性和效率。一个数据集包含 30-50% 的离群值或缺失值。数据需要统一规范化。

数据清洗是从数据集中删除不属于那里的信息。本文的主要内容是用于清理这些数据的方法。将数据从一个位置或架构更改为另一个位置或架构的过程称为数据转换。在将数据从一种“硬”数据形式转换为另一种用于归档和分析的格式时,转换活动也称为数据整理或数据清理

在将数据从一种“硬”数据形式转换为另一种用于归档和分析的格式时。

我们采用以下方法来清理数据:1. 离群值识别和处理。

离群值是荒谬的值,超出标签的可接受范围。例如,用户年龄低于零或高于一百岁可以被认为是荒谬的。在特定情况下可能会更严格,例如在 18 到 100 岁之间购买酒精。

数据清洗的好处

  • 当您拥有干净的数据时,您可以使用最高质量的信息做出决策,并最终提高生产力。好处包括
  • 当涉及多个数据源时,消除不准确性。
  • 错误更少时,客户更满意,员工不那么恼火。
  • 能够规划数据的功能和预期用途。
  • 通过监控错误和改进报告,用户可以识别问题的来源,从而更轻松地解决错误或损坏的数据,以用于未来的操作。

步骤 2:添加缺失值

估算包括用不同的值替换数据集中任何缺失的值。

我们将用户-歌曲对分为两个不同的类别:重复和非重复。

  • 用适当的数据替换数据集中的空值 - 缺失值留下的空白用值的中位数或平均值填充。
  • 消除所有空值 - 在这种情况下,所有具有缺失数据的信息都被消除,这会导致数据丢失。在此过程之后,数据集文件的大小会减小。
  • 创建新的缺失标签 - 具有缺失值的数据点被放置在一个标记为“缺失”的新部分中。它将缺失的资源归类为一个组。
  • 最后,更改字符串标签的数值对应项。

步骤 3:纠正结构问题

当您测试或交换数据时发现奇怪的命名约定、拼写错误或错误的 capitalization,这些都是结构性错误。这些不一致可能导致部分或类别被错误标记。例如,您可能会看到“N/A”和“不适用”,但它们必须被评估为属于同一类别。

步骤 4:消除不受欢迎的离群值

经常会有孤立的发现,乍一看似乎需要与您正在评估的数据相符。如果您有充分的理由,例如数据输入不正确,则删除离群值将提高您当前正在处理的数据的准确性。然而,有时离群值的出现会支持您正在研究的理论。请记住,离群值不一定表示需要修复某些东西。为了确定数字的可靠性,此步骤是必要的。如果离群值被证明不正确或对分析不重要,您应该将其删除。

步骤 5:数据标准化

数据标准化允许您识别和转换各种格式的数据为标准化格式。如果您在数据输入时没有数据限制,或者公司数据具有冲突的形式,数据标准化可能会很有用。与数据验证相反,标准化过程可以应用于已经收集的数据。这需要创建脚本以将脏数据转换为可靠数据。

字符串匹配: 使用严格或模糊字符串匹配技术查找与数据和合法值的精确和近似匹配,以标准化不一致的数据。通过将数据字符与预期的有效值进行比较,您可以消除或修改不匹配的字符串。

NumPy、Sklearn 和 Pandas

为了开发音乐推荐系统,本项目将评估以下 4 种建模策略

  • Logit 回归
    • 在所有算法中,回归是最直接的。它可以在 Python 的 Sklearn 包中找到,只不过是一个线性模型。
  • 决策树
    • 决策树使用树结构来得出决策或结果。每个级别都提供选择两个分支之一的选项。每次迭代后,树都会输出结果。
  • 随机森林

决策树被集合成一个随机森林。

推荐模型

正如我之前提到的,这些音乐流媒体网站使用机器学习模型来提供您喜欢的歌曲。这些模型在 Recommendation Python 包中被称为类。我们必须将 Pandas 和 Numpy 库导入到此包中

现在让我们讨论应用于推荐的模型

流行度推荐

此算法向您推荐您所在地区流行或热门的音乐。此模型基于您所在地区受欢迎或系统用户经常播放的歌曲。

流行度推荐的源代码

相似度推荐

此模型会考虑您日常的音乐收听习惯。

例如:假设您使用 Spotify 收听 Linkin Park 的歌曲 Numb。观看这些歌曲后,您可能会获得 Green Day 的 Boulevard of Shattered Dreams 或 Linkin Park 的 At the End 等音乐推荐,因为这些歌曲具有相同的艺术家或流派。

源代码

现在,我们通过使用此任务所需的 Python 库和 Guideline 包,将它们集成到一个新文件中

源代码

之后,我们将打开一个包含数据a.csv 文件,并获取用户在第五行中收听每首歌曲的次数。

源代码

输出

Music Recommendation System Python Project with Source Code

为了更好地理解,我们现在将在文件中显示数据集中的歌曲数量或行数。

源代码

输出

Total no of songs: 2000000

接下来,我们将从提供的部分数据集构建一个数据框。

源代码

由于输出太长无法完全显示,我已将其摘录如下。

输出

Anyway - Armand Van Helden & A-TRAK Present Du.
5139 high fives - Four Tets
5142 in white rooms - Booka Shades
5132 paranoid's androids - Christophers O'Riley
5192 ¿LoVes? [Piano ¿LoVes? [Piano Y Voz] - Alehjandro Sanz
51502 Época - Gotan Project
512 rows × 3 columns
518 Your Love - The Outfield
7121 Your Mouth - Telefon Tel Aviv
Ze Rook Naar Rozen - Rob De Nijs
7131 Zebra - Beach Houses
7132 Zebra - Man Mans
71332 Zero - The Pain Machinery
71352 Zopf: pigtail - Penguin Café Orchestra
7137s2
5123 Your Songs (Alternate Take 10) - Cilla Black2
7126 Your Visits Are Getting Shorter - Bloc Party2
7127 Your Woman - White Towns
7130 Ze Rook Naar Rozen - Rob De Nijs
7131 Zebra - Beach Houses
7132 Zebra - Man Mans
7133 Zero - The Pain Machinery
7132 Zopf: pigtail - Penguin Café Orchestra
5137s2 Anyway - Armand Van Helden & A-TRAK Present Du.
51392 high fives - Four Tets
51402 in white rooms - Booka Shades
51432 paranoid's androids - Christophers O'Riley
51492 LoVes [Piano ¿LoVes? [Piano Y Voz] - Alehjandro Sanz
51502 Época - Gotan Project
51512 rows × 3 columns

下一个主题Python counter add