news 2026/6/3 15:51:24

导入自己的听歌记录(歌曲名,歌手,播放次数),统计播放次数最多的歌手,推荐该歌手的其他歌曲。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
导入自己的听歌记录(歌曲名,歌手,播放次数),统计播放次数最多的歌手,推荐该歌手的其他歌曲。

1. 实际应用场景描述

场景

某音乐爱好者长期使用音乐平台听歌,并导出自己的听歌记录(歌曲名、歌手、播放次数)。他希望:

- 快速找出播放次数最多的歌手

- 自动推荐该歌手的其他热门歌曲

- 优化歌单,发现更多喜欢的音乐

痛点

- 手动统计播放数据耗时

- 难以快速找到最爱歌手的其他作品

- 缺乏自动化推荐,依赖平台算法

2. 核心逻辑讲解

1. 输入:歌曲名、歌手、播放次数(可从CSV/JSON导入)

2. 统计:按歌手汇总总播放次数,找出最高者

3. 推荐:根据预设的热门歌曲库,推荐该歌手的其他歌曲

4. 输出:打印结果和推荐列表

3. 代码模块化设计

我们将代码分为:

-

"data_loader.py":数据加载模块

-

"analysis.py":统计分析模块

-

"recommendation.py":推荐生成模块

-

"main.py":主程序入口

3.1

"data_loader.py"

# data_loader.py

import json

def load_listening_data(file_path="listening_history.json"):

"""

从JSON文件加载听歌记录

格式: [{"song": "歌名", "artist": "歌手", "play_count": 次数}, ...]

"""

try:

with open(file_path, "r", encoding="utf-8") as f:

data = json.load(f)

return data

except FileNotFoundError:

print(f"文件 {file_path} 未找到,使用示例数据")

return [

{"song": "光年之外", "artist": "G.E.M.", "play_count": 50},

{"song": "泡沫", "artist": "G.E.M.", "play_count": 40},

{"song": "演员", "artist": "薛之谦", "play_count": 60},

{"song": "丑八怪", "artist": "薛之谦", "play_count": 55},

{"song": "平凡之路", "artist": "朴树", "play_count": 30}

]

3.2

"analysis.py"

# analysis.py

from collections import defaultdict

def find_top_artist(data):

"""

找出播放次数最多的歌手

:param data: list of dict

:return: tuple (artist_name, total_play_count)

"""

artist_plays = defaultdict(int)

for record in data:

artist_plays[record["artist"]] += record["play_count"]

if not artist_plays:

return None, 0

top_artist = max(artist_plays.items(), key=lambda x: x[1])

return top_artist

3.3

"recommendation.py"

# recommendation.py

# 预设热门歌曲库(实际可从API获取)

HOT_SONGS_DB = {

"G.E.M.": ["来自天堂的魔鬼", "倒数", "新的心跳"],

"薛之谦": ["刚刚好", "绅士", "动物世界"],

"朴树": ["那些花儿", "白桦林", "生如夏花"]

}

def recommend_songs(artist):

"""

根据歌手推荐其他热门歌曲

"""

return HOT_SONGS_DB.get(artist, ["暂无推荐"])

3.4

"main.py"

# main.py

from data_loader import load_listening_data

from analysis import find_top_artist

from recommendation import recommend_songs

def main():

print("=== 听歌记录分析与推荐系统 ===")

# 加载数据

listening_data = load_listening_data()

# 找出播放最多的歌手

top_artist, total_plays = find_top_artist(listening_data)

if top_artist:

print(f"\n🎵 播放次数最多的歌手是: {top_artist},总播放次数: {total_plays}")

# 推荐该歌手的其他歌曲

recommendations = recommend_songs(top_artist)

print(f"\n💡 推荐 {top_artist} 的其他热门歌曲:")

for song in recommendations:

print(f" - {song}")

else:

print("没有找到任何听歌记录")

# 列出所有歌手播放统计

from collections import defaultdict

artist_plays = defaultdict(int)

for record in listening_data:

artist_plays[record["artist"]] += record["play_count"]

print("\n📊 全部歌手播放统计:")

for artist, plays in sorted(artist_plays.items(), key=lambda x: x[1], reverse=True):

print(f"{artist}: {plays} 次")

if __name__ == "__main__":

main()

4. README.md

# 听歌记录分析与推荐系统

## 项目简介

基于Python的音乐播放记录分析工具,帮助你找出最爱歌手并推荐其热门歌曲。

## 功能

- 导入听歌记录(JSON格式)

- 统计播放次数最多的歌手

- 推荐该歌手的其他热门歌曲

- 按播放次数排序展示所有歌手

## 安装与使用

1. 确保已安装 Python 3.7+

2. 准备 `listening_history.json` 数据文件(或使用内置示例数据)

3. 运行 `python main.py`

## 数据格式示例 (listening_history.json)

json

[

{"song": "光年之外", "artist": "G.E.M.", "play_count": 50},

{"song": "演员", "artist": "薛之谦", "play_count": 60}

]

## 模块说明

- `data_loader.py`: 数据加载

- `analysis.py`: 统计分析

- `recommendation.py`: 推荐生成

- `main.py`: 主程序

5. 使用说明

1. 创建

"listening_history.json" 文件,按示例格式填写歌曲、歌手、播放次数

2. 运行:

python main.py

3. 查看控制台输出的统计结果与推荐歌曲

6. 核心知识点卡片

知识点 说明

JSON数据处理 读写结构化数据

defaultdict 高效分组统计

max()与lambda 查找最大值

字典操作 存储与查询推荐歌曲

模块化设计 便于维护与扩展

条件分支推荐 根据数据生成个性化输出

大数据预处理 真实场景可用Pandas处理千万级播放记录

7. 总结

本项目通过模块化Python编程,解决了听歌记录分析的痛点:

- 自动化:一键统计最爱歌手

- 智能化:自动推荐相关歌曲

- 可扩展:可接入音乐平台API实现实时数据获取

未来可结合协同过滤算法或NLP分析歌词情感,实现更精准的个性化推荐,打造真正的个人音乐智能管家。

如果你愿意,可以把这个系统升级成带GUI的桌面应用(Tkinter/PyQt)或者Web版(Flask + Vue.js),并增加歌词情感分析功能,让推荐更符合你的心情。

利用AI高效解决实际问题,如果你觉得这个工具好用,欢迎关注我。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 1:24:45

豆包降AI能用吗?字节跳动AI工具降论文AI率实测

豆包降AI能用吗?字节跳动AI工具降论文AI率实测 TL;DR:豆包作为字节跳动的AI助手,写论文效率高但生成内容AI率容易达到70%-80%。用豆包自己降AI效果有限,容易改成小红书风格。想真正降到学校要求的15%-20%以下,还是需要…

作者头像 李华
网站建设 2026/5/27 21:27:54

梦笔记20260118

在山洞时团建?山洞很大,有几个石头撑着。门是一个小弹簧。结束后我把一块豆腐带出去了,说万一坏了味道难闻。门口碰到哪个头目?在洗腰带?说户口本上只有一个人?我说都是我的错,穷,今…

作者头像 李华
网站建设 2026/5/21 0:29:54

毕业生必看:论文AI率太高被打回怎么办?5步搞定降AI

毕业生必看:论文AI率太高被打回怎么办?5步搞定降AI TL;DR:论文AI率太高被打回别慌!本文提供5步实操攻略:定位问题段落→手动初步修改→使用专业工具(推荐嘎嘎降AI或比话降AI)→二次检测确认→人…

作者头像 李华
网站建设 2026/6/2 7:50:35

导师推荐!专科生必用TOP9 AI论文网站测评

导师推荐!专科生必用TOP9 AI论文网站测评 2026年专科生必备的AI论文工具测评 随着人工智能技术在学术领域的广泛应用,越来越多的专科生开始借助AI工具提升论文写作效率与质量。然而,面对市场上琳琅满目的AI论文网站,如何选择真正适…

作者头像 李华
网站建设 2026/5/29 3:31:36

7.2 Schema链接策略:消除自然语言与数据库结构的鸿沟

7.2 Schema链接策略:消除自然语言与数据库结构的鸿沟 在上一章节中,我们介绍了NL2SQL的基本概念和核心技术。本章我们将深入探讨NL2SQL系统中一个至关重要的环节——Schema链接(Schema Linking)。Schema链接是连接自然语言和数据库结构之间的桥梁,其质量直接影响到最终生…

作者头像 李华