🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【数据可视化-34】🌐 全球音乐流媒体趋势与听众洞察可视化分析
- 一、引言
- 二、数据探索
- 2.1 数据集介绍
- 2.2 数据清洗探索
- 三、单维度特征可视化
- 3.1 流媒体平台用户分布
- 3.2 年龄分布
- 3.3 各国用户数量分布
- 3.4 流行音乐类型分布
- 3.5 订阅类型分布
- 四、各个特征与收听行为关系的可视化
- 4.1 不同订阅类型的年龄与每日收听时长的散点图
- 4.2 平台与平均收听时长
- 4.3 订阅类型与收听时长
- 4.4 音乐类型偏好与收听时长
- 4.5 不同订阅类型年龄和订阅类型与收听时长
- 4.6 国家和订阅类型与收听时长
- 4.7 音乐类型与重复播放率关系
- 4.9 年龄组和订阅类型与自动生成播放列表播放率关系
- 五、总结
一、引言
音乐流媒体平台(如 Spotify、Apple Music 等)已成为人们日常音乐消费的主要渠道。本文基于一份全球音乐流媒体数据集,从多个维度深入分析全球音乐流媒体趋势及听众行为特征。以下分析包含完整 Python 代码,可供读者参考复现。
二、数据探索
2.1 数据集介绍
数据集包含以下变量:
- User_ID:用户唯一标识符
- Age:用户年龄
- Country:用户所在国家
- Streaming Platform:使用的流媒体平台
- Top Genre:用户最常收听的音乐类型
- Minutes Streamed Per Day:每日平均收听时长
- Number of Songs Liked:用户点赞歌曲数
- Most Played Artist:用户播放最多的艺术家
- Subscription Type:订阅类型(免费或付费)
- Listening Time:用户收听高峰时段(早晨/下午/晚上)
- Discover Weekly Engagement (%):自动生成播放列表的播放百分比
- Repeat Song Rate (%):频繁重复播放歌曲的百分比
2.2 数据清洗探索
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 加载数据
df = pd.read_csv('music_streaming_data.csv') # 请替换为实际文件路径
# 查看数据维度
df.shape
# 查看数据基本信息
df.info()
# 查看数据缺失值情况
df.isnull().sum()
从上图我们可以发现:
- 数据包含 12 个维度,涵盖用户行为和用户统计信息;
- 平台、流派、国家等为类别型变量,年龄及时长等为数字型变量;
- 数据中不存在缺失值。
三、单维度特征可视化
3.1 流媒体平台用户分布
plt.figure(figsize=(10, 6))
sns.countplot(x='Streaming Platform', data=df)
plt.title('Users Distribution by Streaming Platform')
plt.xlabel('Streaming Platform')
plt.ylabel('User Count')
plt.tight_layout()
plt.show()
3.2 年龄分布
plt.figure(figsize=(8, 5))
sns.histplot(df['Age'], kde=True, color='skyblue', bins=30)
plt.title('Age Distribution of Listeners')
plt.xlabel('Age')
plt.tight_layout()
plt.show()
3.3 各国用户数量分布
plt.figure(figsize=(12, 6))
sns.countplot(x='Country', data=df)
plt.title('Users Distribution by Country')
plt.xlabel('Country')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
3.4 流行音乐类型分布
plt.figure(figsize=(10, 6))
sns.countplot(y='Top Genre', data=df)
plt.title('Top Genre Distribution')
plt.ylabel('Music Genre')
plt.xlabel('Count')
plt.tight_layout()
plt.show()
3.5 订阅类型分布
plt.figure(figsize=(8, 6))
sns.countplot(x='Subscription Type', data=df)
plt.title('Subscription Type Distribution')
plt.xlabel('Subscription Type')
plt.ylabel('Count')
plt.tight_layout()
plt.show()
四、各个特征与收听行为关系的可视化
4.1 不同订阅类型的年龄与每日收听时长的散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='Age', y='Minutes Streamed Per Day', data=df)
plt.title('Age vs Daily Streaming Minutes')
plt.xlabel('Age')
plt.ylabel('Minutes Streamed Per Day')
plt.tight_layout()
plt.show()
4.2 平台与平均收听时长
plt.figure(figsize=(10, 6))
sns.boxplot(x='Streaming Platform', y='Minutes Streamed Per Day', data=df)
plt.title('Average Streaming Time by Platform')
plt.xlabel('Streaming Platform')
plt.ylabel('Minutes Streamed Per Day')
plt.tight_layout()
plt.show()
4.3 订阅类型与收听时长
plt.figure(figsize=(8, 6))
sns.boxplot(x='Subscription Type', y='Minutes Streamed Per Day', data=df)
plt.title('Streaming Time Variation by Subscription Type')
plt.xlabel('Subscription Type')
plt.ylabel('Minutes Streamed Per Day')
plt.tight_layout()
plt.show()
4.4 音乐类型偏好与收听时长
plt.figure(figsize=(12, 6))
sns.boxplot(x='Top Genre', y='Minutes Streamed Per Day', data=df)
plt.title('Streaming Time Variation by Music Genre')
plt.xlabel('Music Genre')
plt.ylabel('Minutes Streamed Per Day')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.5 不同订阅类型年龄和订阅类型与收听时长
plt.figure(figsize=(12, 6))
sns.boxplot(x='Age', y='Minutes Streamed Per Day', hue='Subscription Type', data=df)
plt.title('Streaming Time Variation by Age and Subscription Type')
plt.xlabel('Age')
plt.ylabel('Minutes Streamed Per Day')
plt.tight_layout()
plt.show()
4.6 国家和订阅类型与收听时长
plt.figure(figsize=(12, 6))
sns.boxplot(x='Country', y='Minutes Streamed Per Day', hue='Subscription Type', data=df)
plt.title('Streaming Time Variation by Country and Subscription Type')
plt.xlabel('Country')
plt.ylabel('Minutes Streamed Per Day')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.7 音乐类型与重复播放率关系
plt.figure(figsize=(12, 6))
sns.boxplot(x='Top Genre', y='Repeat Song Rate (%)', data=df)
plt.title('Repeat Song Rate Variation by Music Genre')
plt.xlabel('Music Genre')
plt.ylabel('Repeat Song Rate (%)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
4.9 年龄组和订阅类型与自动生成播放列表播放率关系
# 创建年龄组
df['Age Group'] = pd.cut(df['Age'], bins=[0, 20, 30, 40, 50, 60, np.inf], labels=['0-20', '21-30', '31-40', '41-50', '51-60', '60+'])
plt.figure(figsize=(12, 6))
sns.boxplot(x='Age Group', y='Discover Weekly Engagement (%)', hue='Subscription Type', data=df)
plt.title('Discover Engagement Weekly Variation by Age Group and Subscription Type')
plt.xlabel('Age Group')
plt.ylabel('Discover Weekly Engagement (%)')
plt.tight_layout()
plt.show()
五、总结
从以上可视化结果可以看出:
- 年龄与收听时长:通常存在一定的非线性关系,不同年龄段的收听习惯差异明显。
- 订阅类型:付费用户通常具有更长的收听时长,反映出付费用户的高粘性。
- 平台差异:不同平台的用户收听时长存在显著差异,可能与平台的音乐资源、用户体验有关。
- 音乐类型:某些特定类型(如流行乐、摇滚乐)的用户平均收听时长较长,反映出不同音乐类型的受众活跃度差异。
- 地域差异:不同国家的用户收听行为差异较大,可能与文化背景、音乐偏好有关。
- 自动生成播放列表播放率:与用户的订阅类型、年龄组及所在国家存在显著关联。
以上分析为理解全球音乐流媒体的收听行为提供了多维度视角,并揭示了各变量之间的潜在关系,为进一步优化流媒体平台运营策略、提升用户体验提供了数据支持。