目录

  1. 摘要 3
  2. 引言 3
  3. 研究方法 3
    3.1 数据获取 4
    3.1.1 获取当下最热门的400首音乐 4
    3.2 音频处理 5
    3.2.1 音乐格式转换与时长处理 6
    3.2.2 midi生成 7
    3.3 音频特征 7
    3.3.1 基础音频信息 8
    3.3.2 统计特征提取 12
    3.4 数据降维及归一化 17
    3.4.1 PCA主成分分析 17
    3.4.2 数据归一化 17
    3.5 聚类算法 18
    3.5.1 K-Means聚类 18
    3.5.2 MiniBatch k-Means 20
    3.5.3 评价聚类模型 20
    3.6 分类算法 22
    3.6.1 HMM算法(隐马尔可夫模型) 22
  4. 案例实践 25
    4.1 数据爬取以及处理 26
    4.2 波形分析 28
    4.2.1 音乐波形图 28
    4.2.2 音乐语谱图 31
    4.2.3 音乐音调变化图 34
    4.2.4 音乐自相似矩阵图 37
    4.2.5 光谱过零率以及质心变化 39
    4.3 音乐特征分析聚类 41
    4.3.1 统计特征处理 41
    4.3.2 特征筛选 42
    4.3.3 归一化和降维处理 44
    4.3.4 K-Means聚类 45
    4.4 音乐风格分类 50
    4.4.1 HMM模型训练 51
    4.4.2 音乐分类预测 53
    4.5 midi文件生成 55
  5. 结论 56
  6. 反思与不足 57
  7. 参考文献 57

本次毕业设计选取了当下最热门的400首音乐,通过一系列方法提取每首歌的波形特征,再经过降维以及机器学习等手段,进行无监督学习对音乐数据进行聚类的同时训练并使用监督学习分类器进行音乐流派分类,并通过可视化方法呈现分类聚类效果。
由于数据量要求过大,仅仅通过人工获取数据明显是一个不现实的手段,我们选择利用爬虫工具对数据进行大批量的获取。但由于抖音短视频官网做了相当严密的反爬虫机制,很难从抖音官网获取视频信息,以及得到其背景音乐,所以我们选择使用第三方抖音数据分析网站来获取我们需要的热门音乐数据。
我们调查研究了新榜、抖查查、66榜、飞瓜数据、卡思数据、蝉妈妈等近十个分析网站,最终选取了蝉妈妈作为音乐数据来源。
经过前面所述的数据分析方法,我们得出以下结论:

1.通过4.2 波形分析,我们可以发现,BGM旨在用最低的时间成本,让听众迅速地记住这首歌,大部分视频的BGM都是直接采用副歌片段,在开头吸引人的注意力,之后采用重复,稍加变化的音调组合继续抓住人们的注意力,并通过歌曲的抑扬顿挫对应视频的内容,通过抖音自带的滑动机制,让人们沉迷于每十多秒就能带来的新鲜感之中。
2.通过提取近400首的抖音热门BGM的众多特征,通过一系列降维的方法,我们可以发现这些歌曲从某方面来看是具有共通性的,在某种衡量水平上来看,呈现聚集的趋势,详见4.3 音乐特征分析聚类。从而进一步我们选取音乐风格为他们的分类标准,试图探究抖音热门BGM的音乐风格差异,详见4.4 音乐风格分类,我们可以很明显的看出,blues风格以及hippop风格的歌曲占有很大的比重,即这两种风格的音乐在抖音中更容易得到关注。
3.通过对最热门的音乐共同特征提取和聚类效果,我们主观地给出一些对于热门音乐共通点的看法。随着信息技术的发展,短视频走上了时代的风口浪尖,对于一首歌来说,决定它是否好听很大程度就看他的副歌部分的“流行性”,这里的流行性指的是旋律有记忆点、易传唱,特别是副歌部分突出的特点。抖音中热曲也符合这个特点,它们中的大多数都有10s左右特别洗脑,特别抓耳的旋律,我们在听这些“快餐式音乐”的时候基本记不住主歌部分,歌名也不是用户的关注对象,这些音乐能够做到用最快的时间,以最洗脑的旋律在人耳朵中留下记忆点,这一现象也值得我们给予更多地关注和思考。
4.通过wav文件读取特征值分析音高变化,学习抖音热门音乐音调变化,并通过midi文件融合生成音乐,通过类似的方法我们可以做到某种程度上批量产出抖音热门音乐,即使这些音乐在质量上参差不齐,不一定比得上音乐人制作的音乐,但是它胜在批量生产,简单便捷,可以以低效的成本达到高回报的产出。据我们所知,目前抖音内部还在使用人工推流的方式来筛选热门音乐,我们的工作可以从一些角度对他们有启发和帮助。
注册会员后,通过点击音乐榜单,在f12控制台的network窗口监听到浏览器发出的http请求以及服务器返回的数据,本文转载自http://www.biyezuopin.vip/onews.asp?id=14766经过筛选得到获取音乐榜单的请求:

search?keyword=&page=1&size=50&orderby=user_count&incr_type=7d&order=desc

通过分析header信息,利用python的request库模拟header对服务器发出请求,并且筛选得到音乐的名称,播放量等信息,写入csv:

try:response = requests.get(url, headers=headers)if response.status_code == 200:list = response.json().get('data').get('list')for item in list:del item['cover_image']del item['use_trend']del item['hot_awemes']del item['is_fav']return list
except requests.ConnectionError as e:print('Error', e.args)
...
with open(csvPath, "w") as csvfile:writer = csv.writer(csvfile)writer.writerow(["音乐ID", "音乐名", "创作者", "歌曲时间", "使用人数", "使用人数增量"])for item in music_info:writer.writerow([item.get('music_id'), item.get('title'), item.get('author'), item.get('audition_duration'),item.get('user_count'), item.get('user_incr')])print("csv写入成功!")在得到音乐信息后,通过音乐的id,再次向服务器请求,获取音乐的mp3地址,下载后存储在本地:try:response = requests.get(url, headers=headers)if response.status_code == 200:src = response.json().get('data')print(name, end=": ")if src != '' and src != 'None':music = requests.get(src)# 下面填写本地存储的路径,记得后缀添加mp3open(downLoadPath + name + '.mp3', 'wb').write(music.content)print("成功")else:print("歌曲不存在")except requests.ConnectionError as e:print('Error', e.args)  # 输出异常信息



























































基于Python的热门音乐特征数据分析相关推荐

  1. 基于Python实现的微信好友数据分析——抓取好友性别、位置、头像签名

    最近微信迎来了一次重要的更新,允许用户对"发现"页面进行定制.不知道从什么时候开始,微信朋友圈变得越来越复杂,当越来越多的人选择"仅展示最近三天的朋友圈",大概 ...

  2. 【基于Python+tkinter的音乐播放器开发-哔哩哔哩】 https://b23.tv/eG2TwOL

    [基于Python+tkinter的音乐播放器开发-哔哩哔哩] https://b23.tv/eG2TwOL https://b23.tv/eG2TwOL

  3. 【大数据分析毕设之基于python爬虫的旅游大数据分析可视化系统】

    [大数据分析毕设之基于python爬虫的旅游大数据分析可视化系统-哔哩哔哩] https://b23.tv/z2OUTkp flask web框架,数据使用selenium模块爬取携程网获取数据,使用 ...

  4. 【大数据分析专业毕设之基于python的手机销售大数据分析可视化系统】

    [大数据分析专业毕设之基于python的手机销售大数据分析可视化系统] https://b23.tv/FKuPbsv flask web框架,数据使用requests模块爬取https://www.j ...

  5. 基于Python的在线音乐推荐系统的设计与实现

     源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 基于Python的在线音乐推荐系统是一个基于Internet,采用PYTHON技术开发的服务于音乐 ...

  6. 基于python的在线音乐系统设计与实现

    摘 要 本音乐系统借助了当前互联网的发展趋势,近几年,随着网络的快速发展,网络已经融入人们的生活中.互联网给人们的生活带来了许多便利,基本上可以达到足不出户就能完成许多事情.互联网的使用基本实现全覆盖 ...

  7. python爬虫可视化web展示_基于Python爬虫的职位信息数据分析和可视化系统实现

    1. 引言 在这个新时代,人们根据现有的职位信息数据分析系统得到的职位信息越来越碎片化,面对收集到的大量的职位信息数据难以迅速地筛选出对自己最有帮助的职位信息,又或者筛选出信息后不能直观地看到数据的特 ...

  8. 超市销售数据分析python_基于Python的超市O2O营销数据分析

    第 35 卷第 4 期 哈尔滨商业大学学报(自然科学版) Vol. 35 No. 4 2019 年 8 月 Journal of Harbin University of Commerce ( Nat ...

  9. 基于python家庭用电量数据的数据分析可视化 完整数据可直接运行

    项目演示:基于python的家庭用电量数据的数据分析可视化 完整数据评论区自取_哔哩哔哩_bilibili 本博客附完整的数据代码: from numpy import nan from pandas ...

最新文章

  1. swift 错误集合 ------持续更新中
  2. GitHub 13.1k | 所有的编程知识,都在这100 张思维导图里了
  3. linux mysql 系统时间函数吗_linux下获取系统时间的方法
  4. 打印更无缝:微软改善Win11中通用打印体验
  5. properties文件 , properties类, 的作用
  6. PostgreSQL在Linux上的RPM和源码安装
  7. Visual Studio 2013旗舰版KEY
  8. 从开锁到中年危机的杂谈
  9. Python 绘制属于你的世界地图
  10. python 有道翻译,python 简单的调用有道翻译
  11. S3C2440 蜂鸣器 汇编语言,S3C2440的基础功能模块实现过程
  12. Xmarks Hosts
  13. minio服务报403错误
  14. 【风马一族_xml】xml语法
  15. 九宫格拼图游戏初版(练练手)
  16. http劫持软件、怎么应对这样的 HTTP 劫持
  17. 计算机大数据的前景方向_未来计算机大数据的发展方向
  18. 快递100快递java_快递100 java 示例API 返回结果乱码 之替代方案
  19. oracle instr函数(oracle 用instr 来代替 like)
  20. 吊打面试官之一面项目介绍

热门文章

  1. 如何隐藏、显示Excel工作表中的公式
  2. PubWin不知道密码情况下卸载
  3. abs、fabs 用法
  4. Java—mysql缓存导致查询结果与数据库不一致
  5. amcharts属性
  6. Mac 升级Python 有python2.7到python3.9
  7. 【GEEK】win10下cmd美化
  8. Spring框架汇总(大学生的天堂 码农的圣殿)
  9. 余弦距离的应用 -- cosine distance
  10. Android自定义系列——10.PathMeasure