每年年底,很多同学都会在各种社交平台上晒出自己的年度报告,听了多少首歌,什么时候听的……在大数据面前,每个人都变成了透明人。这很可怕,但我已经习惯了。大多数歌曲爱好者都在Spotify上听歌,Spotify是最流行的歌曲流媒体平台之一。如果你是程序员,你知道如何建立代码和歌曲之间的关系吗?今天小编给大家介绍一下。对于编码和分析,导入以下工具包:#formathematicalcomputationimportnumpyasnpiimportpandasaspdimportscipy.statsasstats#fordatavisualizationimportseabornassnsimportmatplotlib.pyplotaspltfrommatplotlib.pyplotimportfigureimportplotlyimportplotly.expresslibaspx%matplot让我们载入数据看看。下载数据集并将其添加到路径中,然后读取数据集的前5条数据:df=pd.read_csv("/content/spotify_dataset.csv",encoding='latin-1')df.head()现在运行这段代码,你会在屏幕上看到类似这样的东西:Readdataformoreinformation:#datainfodf.info()#Checkmissingvaluesdf.isnull().sum()查看每一列的空值。我们很幸运,我们的数据集中没有空值。之后,使用每个列属性的类型来获取有关我们数据集的更多信息:#numberoftimeschartedbyartistdf_numbercharted=df.groupby('Artist').sum().sort_values('NumberoftimesCharted',ascending=False)df_numbercharted=df_numbercharted.reset_index()df_numbercharted为此,我们取一位艺术家,对他们的图表数量求和,然后按降序对每个人进行排序:px.bar(x='Artist',y='NumberofTimesCharted',data_frame=df_numbercharted.head(7),title="上榜次数??最高的Top7Artists")当您运行代码时,您会看到如上图所示的内容。BillieElish在最具特色的名单中名列前茅。上面的直方图只有前7位艺术家,您可以查看前10位或更多艺术家,只需尝试使用代码。最近花了几天时间整理了一个Python入门理论+实践进阶教程。这可能是您见过的最好的学习材料之一。独家打造,完全免费,有需要的同学可以关注gzh【Python编程学习圈】,发“学习资料”获取~栏目之间的相关性让我们看看各个栏目之间的相关性,看看能不能找到任何有趣的事情。为此,让我们首先清理我们拥有的数据。之后,将所有列转换为数字。#先清理数据df=df.fillna('')df=df.replace('','')df['Streams']=df['Streams'].str.replace(',','')#将所有数字列转换为numericdf[['最高图表位置','上榜次数','Streams','人气','Danceability','Energy','Loudness','Speechiness','Acousticness','Liveness','Tempo','Duration(ms)','Valence',]]=df[['HighestChartingPosition','NumberofTimesCharted','Streams','Popularity','Danceability','Energy','Loudness','Speechiness','Acousticness','Liveness','Tempo','Duration(ms)','Valence',]].apply(pd.to_numeric)让我们也把年份从“发布日期”列,以便能够分析其相关性:df['ReleaseYear']=pd.DatetimeIndex(df['ReleaseDate']).year现在,绘制热图:%matplotlibinlinef,ax=plt.subplots(figsize=(14,10))sns.heatmap(df.corr(),annot=True,fmt=".1f",ax=ax)plt.show()我们都知道原声带往往很安静,需要仔细聆听。这就是为什么它与能量和响度呈负相关,这是有道理的。现在,在代码中,“annot”用于显示立方体中的数字。“fmt”用于数字,如果您设置fmt="0.2%",则数字将以百分比形式出现在立方体中,小数点后两位。显然我们不希望这样,因为它模糊了可读性。danceabilitypx.line(x='ReleaseYear',y='Danceability',data_frame=df,title="DanceabilityoverthecourseoftheYear")现在,看看舞蹈能力这些年来发生了怎样的变化。当你执行上面的代码时,你会在图中看到类似这样的东西。20位最受欢迎的歌手artistbypop=df.groupby('Artist').sum().sort_values('Popularity',ascending=False)[:20]artistbypop=artistbypop.reset_index()#plotthegraphpx.bar(x='Artist',y='Popularity',data_frame=artistbypop)这里我按流行度对艺术家进行排序。TaylorSwift位居榜首,其次是JuiceWRLD等。最流行的流派df['Genre']=df['Genre'].astype(str)df["Genre"][df["Genre"]=="[]"]=np.nandf["Genre"]=df["Genre"].fillna(0)#这里我们去掉无用的符号以便能够分隔流派df.Genre=df.Genre.str.replace("[","")df.Genre=df.Genre.str.replace("]","")df.Genre=df.Genre.str.replace("'","")#现在我们通过commadf["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("Top30mostpopulargenres")plt.show()好了,就这些了。到目前为止,已经分析了Spotify数据集。可以多挖掘一些自己感兴趣或者对自己有价值的信息。
