发现一些有趣的现象。。。

简介: hello,大家好,我是Jackpop。每到年底,都有很多同学在各种社交平台晒出自己的年度报告,听了多少歌、什么时段听....在大数据面前,每个人都成了透明人一样。虽然可怕,但是也已经习以为常。大多数歌曲爱好者在Spotify上听歌,它是最受欢迎的歌曲流媒体平台之一。如果你是一个程序员,那么你知道如何建立代码和歌曲之间的关系吗?今天,就来给大家介绍一下。

hello,大家好,我是Jackpop。

每到年底,都有很多同学在各种社交平台晒出自己的年度报告,听了多少歌、什么时段听....

在大数据面前,每个人都成了透明人一样。虽然可怕,但是也已经习以为常。

大多数歌曲爱好者在Spotify上听歌,它是最受欢迎的歌曲流媒体平台之一。

如果你是一个程序员,那么你知道如何建立代码和歌曲之间的关系吗?

今天,就来给大家介绍一下。

编码和分析

导入下列工具包:

#for mathematical computation
import numpy as np
import pandas as pd
import scipy.stats as stats
#for data visualization
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
import plotly 
import plotly.express as px
% matplotlib inline

让我们加载数据看一下。

下载数据集并将其添加到路径中,然后,读取数据集的前5个数据:

df = pd.read_csv("/content/spotify_dataset.csv", encoding='latin-1')
df.head()

现在运行这段代码,你会在屏幕上看到类似下图这样:

读取数据更多信息:

#data info
df.info()
#Check missing values
df.isnull().sum()

看看每一列中的空值。我们很幸运,在我们的数据集中没有空值。

之后,用每一列属性的类型来获取我们的数据集的更多信息:

微信图片_20220421222423.png

歌手上榜次数

#number of times charted by artist
df_numbercharted=df.groupby('Artist').sum().sort_values('Number of Times Charted', ascending=False)
df_numbercharted=df_numbercharted.reset_index()
df_numbercharted

对于这一点,我们取一个歌手,将其上榜次数相加,并将每个人按降序排列:

px.bar(x='Artist', y='Number of Times Charted', data_frame=df_numbercharted.head(7), title="Top 7 Artists with Highes Number of Times Charted")

微信图片_20220421222429.png

当你运行代码时,你会看到类似上面的图片。

Billie Elish在上榜次数最多的名单中名列前茅。上面的柱状图只有前7名歌手,你可以查看前10名或更多艺术家的情况,只要试着玩玩代码就可以了。

列之间的相关性

让我们看看各列之间的相关性,并检查我们是否能发现任何有趣的东西。

为此,让我们首先清理我们拥有的数据。之后,将所有的列转换为数字。

#clean data first
df=df.fillna('')
df=df.replace(' ', '')
df['Streams']=df['Streams'].str.replace(',','')
#convet all numeric columns to numeric
df[['Highest Charting Position', 'Number of Times Charted', 'Streams', 'Popularity', 'Danceability', 'Energy', 'Loudness', 'Speechiness',
       'Acousticness', 'Liveness', 'Tempo', 'Duration (ms)', 'Valence',
       ]] = df[['Highest Charting Position', 'Number of Times Charted', 'Streams','Popularity', 'Danceability', 'Energy', 'Loudness', 'Speechiness',
       'Acousticness', 'Liveness', 'Tempo', 'Duration (ms)', 'Valence',
       ]].apply(pd.to_numeric)

让我们也把年份从 "发布日期 "这一栏中分离出来,以便能够分析其相关性:

df['Release Year'] = pd.DatetimeIndex(df['Release Date']).year

现在,绘制热力图:

%matplotlib inline
f,ax = plt.subplots(figsize=(14,10))
sns.heatmap(df.corr(),annot = True,fmt = ".1f",ax = ax)
plt.show()

微信图片_20220421222434.png

我们都知道,原声音乐往往是安静的,需要仔细聆听。

这就是为什么它与能量和响度呈负相关的原因,这很有意义。

现在,在代码中,"annot"被用来显示立方体中的数字。"fmt"用于数字,如果你设置fmt="0.2%",那么在立方体中数字将以百分比的形式出现,并有2位小数。

很明显,我们不希望这样,因为它使可读性变得模糊。

舞蹈性

px.line(x='Release Year', y='Danceability', data_frame=df, title="Danceability over the course of the Year")

现在,看看这些年来舞蹈性是如何变化的。

当你执行上面代码时,你会在图示看到这样的东西。

微信图片_20220421222438.png

20位最受欢迎的歌手

artistbypop = df.groupby('Artist').sum().sort_values('Popularity' ,ascending=False)[:20]
artistbypop=artistbypop.reset_index()
#plot the graph
px.bar(x='Artist', y='Popularity', data_frame=artistbypop)

在这里,我根据受欢迎程度对艺术家进行排序。Taylor Swift位居榜首,其次是Juice WRLD和其他人。

微信图片_20220421222442.png

最受欢迎的流派

df['Genre']=df['Genre'].astype(str)
df["Genre"][df["Genre"] == "[]"] = np.nan
df["Genre"] = df["Genre"].fillna(0)
#here we get rid of useless symbols to be able to separate genres
df.Genre=df.Genre.str.replace("[", "")
df.Genre=df.Genre.str.replace("]", "")
df.Genre=df.Genre.str.replace("'", "")
#now we devide genre strings by comma
df["Genre"] = df["Genre"].str.split(",")
df=df.explode('Genre')
df

首先,我们去掉无用的符号,以便能够分开流派。

之后,用逗号划分流派字符串。

下一个命令是根据流派来分离行,每首有多于一个流派的歌曲将有多行,每行有一个流派。

例如,如果一首歌曲有2个流派,那么同一首歌将有2行,每行有不同的流派。

现在简单地绘制30种最受欢迎的流派的饼图:

fig = plt.figure(figsize = (10, 10))
ax = fig.subplots()
df.Genre.value_counts()[:30].plot(ax=ax, kind = "pie")
ax.set_ylabel("")
ax.set_title("Top 30 most popular genres")
plt.show()

微信图片_20220421222446.png

好了,就这样吧。到这里,已经分析了Spotify的数据集。

你可以自己去挖掘更多自己感兴趣,或者对自己有价值的信息。

相关文章
|
5月前
|
资源调度 算法
深入理解网络中的死锁和活锁现象
【8月更文挑战第24天】
224 0
|
5月前
|
缓存 算法 网络性能优化
解决网络延迟和阻塞,有它,不服都不行!
解决网络延迟和阻塞,有它,不服都不行!
|
8月前
|
测试技术
如何避免测试同化现象?
如何避免测试同化现象?
|
缓存 Java
一例JAVA多线程访问卡死的现象
一例JAVA多线程访问卡死的现象
169 0
|
Web App开发 存储 缓存
一文带你了解如何排查内存泄漏导致的页面卡顿现象(上)
不知道在座的各位有没有被问到过这样一个问题:如果页面卡顿,你觉得可能是什么原因造成的?有什么办法锁定原因并解决吗?
865 0
一文带你了解如何排查内存泄漏导致的页面卡顿现象(上)
|
Java
分析一个常见的java多线程通信问题(假死现象)
一件复杂的事,一个人如果不能做,两个人又做的不好,一群人就可能很好的解决了。对于线程来说也是,通过多个线程就能完成一个更复杂的功能,这就需要多个线程协作,协作就需要交流,但是交流总是会出问题的。在这篇文章中我们分析一下java多线程通信过程中出现的一个假死现象。然后给出一个解决办法
568 0
分析一个常见的java多线程通信问题(假死现象)
刷屏电流过大问题分析
一、问题描述 我们的某款产品在正常工作模式下,开启刷屏功能,刷屏电流最大值为75.33mA,远大于屏正常工作时的功耗要求。 二、测试分析 分析原理图设计,发现刷屏功能开启的时候,GDR开关信号如下,在开关信号的作用下,升压电路开始工作,升压电路原理图如下所示。 测试发现,U3的drain极峰...
刷屏电流过大问题分析
|
Linux 测试技术 Shell
系统诊断小技巧(11):如何解决“问题复现了,但是捕捉数据进程因为CPU打满没有运行”?
引子 曾经搞过一个尴尬的案例。排查过一个CPU打满的问题。因为问题是在凌晨出现,而且非常随机。所以我们就准备了一个脚本,用来捕获占用CPU高的线程。但尴尬的是,问题复现了,我们的脚本偏偏在问题复现的时候,没有记录。
2046 0

热门文章

最新文章

相关实验场景

更多