数据分析入门:用Python和Numpy探索音乐流行趋势

00321.png

一、引言

音乐是文化的重要组成部分,而音乐流行趋势则反映了社会文化的变迁和人们审美的变化。通过分析音乐榜单,我们可以了解哪些歌曲或歌手正在受到大众的欢迎,甚至预测未来的流行趋势。Python作为一种强大的编程语言,结合其丰富的库,如Numpy,使得数据分析变得更加简单和高效。

Python与Numpy简介

Python是一种广泛使用的高级编程语言,以其清晰的语法和代码可读性而闻名。Numpy是一个开源的Python科学计算库,提供了强大的多维数组对象和相应的操作,是进行数据分析和科学计算的基础工具。

数据收集

在开始数据分析之前,我们需要收集相关的数据。音乐流行趋势的数据可以从多个来源获取,例如音乐流媒体服务的API、公开的音乐排行榜数据等。为了简化示例,我们将使用一个假设的音乐排行榜数据集。

数据获取

首先,我们需要从网易云音乐获取新歌榜的数据。这里我们使用Python的requests库来发送HTTP请求,并使用beautifulsoup4来解析返回的HTML页面。

import requests
from bs4 import BeautifulSoup# 代理服务器配置
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"# 构建代理字典
proxies = {'http': f'http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}','https': f'https://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}'
}def fetch_music_data(url):# 使用代理发送请求response = requests.get(url, proxies=proxies)soup = BeautifulSoup(response.text, 'html.parser')music_list = []for item in soup.find_all('li', class_='song-item'):song = {'title': item.find('span', class_='song-name').text.strip(),'artist': item.find('span', class_='singer-name').text.strip(),'rank': int(item.find('span', class_='index').text.strip())}music_list.append(song)return music_listurl = 'https://music.163.com/discover/rank/#/discover/toplist' 
music_data = fetch_music_data(url)# 打印获取的数据
for song in music_data:print(f"Title: {song['title']}, Artist: {song['artist']}, Rank: {song['rank']}")

数据预处理

数据预处理是数据分析中的重要步骤,包括清洗数据、处理缺失值、数据类型转换等。以下是一个简单的数据预处理示例:

python
import numpy as np# 假设的数据集,包含歌曲名、排名和播放次数
data = np.array([["Song A", 1, 1000],["Song B", 2, 950],["Song C", 3, 900],# 更多数据...
])# 将排名转换为整数类型
data[:, 1] = data[:, 1].astype(int)
# 将播放次数转换为浮点数类型
data[:, 2] = data[:, 2].astype(float)

数据探索

在数据预处理之后,我们可以进行数据探索,以了解数据的基本特征和趋势。例如,我们可以计算平均播放次数,或者找出排名最高的歌曲。

import requests
from bs4 import BeautifulSoupdef fetch_music_data(url):response = requests.get(url)soup = BeautifulSoup(response.text, 'html.parser')music_list = []for item in soup.find_all('li', class_='song-item'):song = {'title': item.find('span', class_='song-name').text.strip(),'artist': item.find('span', class_='singer-name').text.strip(),'rank': int(item.find('span', class_='index').text.strip())}music_list.append(song)return music_listurl = 'https://music.163.com/discover/rank/#/discover/toplist'
music_data = fetch_music_data(url)

数据可视化

数据可视化是理解数据和传达分析结果的重要手段。我们可以使用matplotlib库来创建图表。

python
import matplotlib.pyplot as plt# 绘制排名与播放次数的关系图
plt.figure(figsize=(10, 6))
plt.scatter(data[:, 1], data[:, 2], color='blue')
plt.title('Song Ranking vs Plays')
plt.xlabel('Ranking')
plt.ylabel('Plays')
plt.grid(True)
plt.show()

趋势分析

趋势分析可以帮助我们了解音乐流行趋势随时间的变化。假设我们有一段时间内的音乐数据,我们可以使用以下方法来分析趋势:

python
# 假设有一段时间序列的数据
time_series_data = np.array([["2024-01", "Song A", 1000],["2024-02", "Song A", 1100],# 更多时间序列数据...
])# 提取时间序列并排序
time_series_data = time_series_data[np.argsort(time_series_data[:, 0])]# 计算每月的播放次数变化
plays_change = time_series_data[:, 2] - time_series_data[:, 2][::-1]# 绘制时间序列图
plt.figure(figsize=(12, 6))
plt.plot(time_series_data[:, 0], plays_change, marker='o', linestyle='-')
plt.title('Plays Change Over Time')
plt.xlabel('Time')
plt.ylabel('Change in Plays')
plt.grid(True)
plt.show()

结论

通过上述步骤,我们使用Python和Numpy对音乐流行趋势进行了基本的数据分析。从数据预处理到数据探索,再到数据可视化和趋势分析,我们不仅了解了如何操作数据,还学会了如何通过图表来直观地展示分析结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[数据集][目标检测]导盲犬拐杖检测数据集VOC+YOLO格式4635张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4635 标注数量(xml文件个数):4635 标注数量(txt文件个数):4635 标注…

【ubuntu】没有声音??连不上网络???

一. ubuntu 突然之后没有声音??? 卸载并重新加载 ALSA 驱动: 使用 alsa force-reload 命令来卸载并重新加载 ALSA 驱动: sudo alsa reload还不行?那就强制 reload sudo alsa force-reload二. ubuntu 突…

深入剖析CommonJS modules和ECMAScript modules

目录 前言CommonJS:服务器端模块化的先驱背景与起源语法与机制 ECMAScript Modules:现代前端的基石背景与起源语法与机制 比较与权衡语法差异加载机制编译时与运行时运行时行为构建第三方库现代开发环境 结论 前言 在 JavaScript 生态系统中&#xff0c…

RabbitMQ学习实践一:MQ的安装

文章是本人在学习springboot实现消息队列功能时所经历的过程的记录,仅供参考,如有侵权请随时指出。 参考文章地址: RabbitMQ安装与入门_rabbitmq win11配置-CSDN博客 RabbitMQ入门到实战一篇文章就够了-CSDN博客 RabbitMQ系列&#xff08…

【LeetCode】十五、回溯法:括号生成 + 子集

文章目录 1、回溯法2、leetcode22:括号生成3、leetcode78:子集 1、回溯法 使用场景,如找[1,2,3]的所有子集: 2、leetcode22:括号生成 以n2为例,即两个左括号、两个右括号&#xff0c…

汇编实验5

本实验在32位Linux虚拟机中完成(点击查看安装教程) 实验内容 二进制炸弹实际是由C语言源程序生成的可执行目标代码,主程序可参考bomb.c。运行时,会按次序提示用户输入3个不同的字符串。如果输入的字符串有误,炸弹就会…

随手记:vsCode修改主题色为自定义颜色

因为工作需要长时间面对vscode,视力不好,想要把工具改成护眼色,于是就把vscode改成了自定义的护眼色 效果图: 操作步骤: 快捷键打开设置页面: 按住ctrlshiftp 选择Open setting 按回车键 打开setting页面编…

FlagEval 7月榜丨新增29个模型评测结果,智源发布评估技术报告《AI大模型能力全景扫描》

智源研究院FlagEval 7月榜单新增29个语言、多模态和文生图开源与闭源模型评测结果,包括阿里巴巴、OpenAI、快手、智谱等厂商近期发布的新模型。 本次评测发现,大语言模型,国产模型主观能力整体有所提升;视觉语言新模型的能力有所…

ArduPilot开源代码之AP_DAL_RangeFinder

ArduPilot开源代码之AP_DAL_RangeFinder 1. 源由2. 框架设计2.1 枚举 Status2.2 公有方法2.3 私有成员变量 3. 重要例程3.1 应用函数3.1.1 ground_clearance_cm_orient3.1.2 max_distance_cm_orient3.1.3 has_orientation3.1.4 get_backend 3.2 其他函数3.2.1 AP_DAL_RangeFind…

git config

文章目录 1.简介2.格式3.选项4.示例参考文献 1.简介 安装完 Git 后,需要对 Git 环境进行一次配置,且只需要配置一次。程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。 Git 自带一个 git config 的工具来设置控制 Git 外观和…

AI(Adobe lliustrator)教程+软件包

简介: 软件主要应用于印刷出版、海报书籍排版、专业插画、多媒体图像处理和互联网页面的制作等,也可以为线稿提供较高的精度和控制,适合生产任何小型设计到大型的复杂项目。 通常用于创建LOGO(商标或徽标),图标,插图…

【数据结构】线性结构——数组、链表、栈和队列

目录 前言 一、数组(Array) 1.1优点 1.2缺点 1.3适用场景 二、链表(Linked List) 2.1优点 2.2缺点 2.3适用场景 三、栈(Stack) 3.1优点 3.2缺点 3.3适用场景 四、队列(Queue) 4.1优点…

根目录满迁移docker文件

在 Ubuntu 下,迁移 Docker 的数据存储位置到另一个挂载点需要按照以下步骤进行操作。确保在操作之前备份重要数据,以防止意外情况发生。 步骤概述 停止 Docker 服务: bash sudo systemctl stop docker创建新的存储位置: 假设你有…

递归式函数

在java中&#xff0c;函数递归是会报编译错误的。比如我定义一个斐波那契函数&#xff1a; public class RecursiveFunction {public static void main(String[] args) {fibonacci x -> x < 3 ? 1 : fibonacci.apply(x - 1) fibonacci.apply(x - 2);} }它就报了这个错…

设计模式-三大分类

软件七大设计原则 1、单一职责 定义&#xff1a;每个类应该只有一个引起它变化的原因。 解释&#xff1a;一个类只负责一个功能&#xff0c;这样可以减少类之间的耦合&#xff0c;提高系统的可维护性和可扩展性。 2、开闭原则 定义&#xff1a;软件实体&#xff08;类、模块…

使用Dockerfile构建镜像

通过基础镜像 centos:7&#xff0c;在该镜像中安装 jdk 和 tomcat 以后将其制作为一个新的镜像 mscentos:7 创建目录 mkdir -p /kong/docker/dockerfile编写 Dockerfile 文件 vim DockerfileDockerfile 文件内容如下&#xff1a; # 指明构建的新镜像是来自于 centos:7 基础…

广义可加模型和光滑曲线拟合的R代码

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

jvm-并发-java基础-数据结构小测

这篇文章是一些练习题&#xff0c;答案后续更新。 请简述银行家算法 请简述死锁产生的条件 解决死锁的几种方式 简述synchronized锁的膨胀 什么是cas cas 的问题如何解决 jmm 简单理解 volatile 单例模式 线程安全的两种代码 懒汉&恶汉 线程池的7个参数分别是什么…

ABAQUS细观混凝土周期性边界(PBC)表征体元(REV)界面层(ITZ)及砂浆塑性损伤(CDP)模拟

混凝土的细观结构决定着其宏观破坏行为&#xff0c;对混凝土在结构尺度上采用细观模型将导致巨大的计算量而难以实现&#xff0c;表征体元&#xff08;‌REV&#xff09;‌方法可选取一定的平均范围来描述混凝土的性质和行为&#xff0c;这对于理解和模拟混凝土的损伤机理至关重…

构建高可用应用的设计模式与实践

高可用性&#xff08;High Availability, HA&#xff09;是现代分布式系统中必不可少的特性之一。高可用应用能够在面对系统故障、网络分区或资源压力等多种情况下&#xff0c;依然保证服务的连续性和稳定性。本文将介绍构建高可用应用的常见设计模式与实践&#xff0c;并提供J…