数据分析入门:用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_list

url = '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 BeautifulSoup

def 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_list

url = '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对音乐流行趋势进行了基本的数据分析。从数据预处理到数据探索,再到数据可视化和趋势分析,我们不仅了解了如何操作数据,还学会了如何通过图表来直观地展示分析结果。

相关推荐

  1. 快速入门PandasNumPy数据分析

    2024-07-20 10:40:02       31 阅读
  2. python数据分析numpy基础之std示例

    2024-07-20 10:40:02       46 阅读
  3. python_数据分析_numpy

    2024-07-20 10:40:02       45 阅读
  4. Python数据处理库(如NumPy、Pandas)

    2024-07-20 10:40:02       32 阅读
  5. [Python进阶] 数据处理:Numpy入门

    2024-07-20 10:40:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 10:40:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 10:40:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 10:40:02       45 阅读
  4. Python语言-面向对象

    2024-07-20 10:40:02       55 阅读

热门阅读

  1. Android Studio关于Gradle及JDK问题解决

    2024-07-20 10:40:02       15 阅读
  2. Oracle(12)什么是主键(Primary Key)?

    2024-07-20 10:40:02       15 阅读
  3. 目标检测算法

    2024-07-20 10:40:02       15 阅读
  4. 使用python调用dll库

    2024-07-20 10:40:02       18 阅读
  5. 数据结构之栈、队列和数组的基本概念

    2024-07-20 10:40:02       15 阅读
  6. RoCE(RDMA over Converged Ethernet)网络速率测试工具

    2024-07-20 10:40:02       15 阅读
  7. 读取 Excel 文件

    2024-07-20 10:40:02       14 阅读
  8. 实战:springboot用LocalDateTime快速替换Date

    2024-07-20 10:40:02       15 阅读