инвентаризационный анализ Python 2019 глобальной поп-музыки: список композиций, что оккупировали нас?

ОТ РЕДАКЦИИ: Сразу после Рождества, умирающих дыхание фестиваля, если мы все еще продолжаем учиться в спешке на ~ также не забудьте дать себе несколько большую песню, чтобы расслабиться, взглянуть обернутую вокруг музыки на популярный 2019 как Python музыкальный анализ тенденций его!

Вчера днем, все в порядке, просто слушать музыку на результатах в данный поиск больше удовольствия, так что потребовалось, чтобы быть случаем совместного использования данных.

Эти данные предоставляются иностранным сравнительным пожарной музыка программного обеспечения Spotify, очень представитель значения.

Но показатели, связанные более профессионально, я не совсем понимаю, можно сделать только анализ, основанный на их собственном понимании, должны понимать музыку, друзья могут сделать профессиональное мнение.

Инструмент анализа данных Python, Python, конечно, если вы не знакомы с таблицей также можно сделать график будет выглядеть лучше.

Во-первых, подготовка данных

1, данные по импорту

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from  pyecharts import Bar,WordCloud,Pie,Line
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
df=pd.read_excel(r'C:\Users\Administrator\Desktop\top50.xlsx')
df.head()

这些代码都是不需要思考的,只要打开Python做数据分析,你首先就写好,或者直接复制就行,我都是把常用代码保存好,要用的时候就调出来用,这样省时间。

列的名称都是英语,我借助了百度做了下翻译:

  • Track.Name-曲目;
  • Artist.Name-歌手;
  • Genre - 类型
  • Beats Per Minute (BPM) - 每分钟节拍,也就是节奏.
  • Energy - 能量 - 分数越高,代表能量就越大;
  • Danceability - 舞蹈性-分数越高,代表你越容易因歌而舞;
  • Loudness (dB) - 分贝-值越大,说明歌曲越响亮,反之则低沉;
  • Liveness -现场性-值越大,歌曲越有可能是现场录音的;
  • Valence - 情绪-值越大,情绪越激昂,反之越消沉;
  • lentgh-时长;
  • Acousticness -音质;.
  • Speechiness -语言-值越大,说明口语化程度越高;
  • Popularity -火热程度。

2、数据列的名称更改

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from  pyecharts import Bar,WordCloud,Pie,Line
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
df=pd.read_excel(r'C:\Users\Administrator\Desktop\top50.xlsx')
df=df.rename(columns={'Track.Name':'曲名', 'Artist.Name':'歌手', 'Genre':'类型', 'Beats.Per.Minute':'节奏', 'Energy':'能量',
'Danceability':'舞蹈性', 'Loudness..dB..':'分贝','Liveness':'现场感', 'Length.':'时长','Speechiness':'语言', 'Popularity':'火热程度'})
df.head(10)

看英语的总是不习惯,所以我们可以把英语的列名改为中文。

二、数据分析

1、2019全球最流行的音乐类型排行

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from  pyecharts import Bar,WordCloud,Pie,Line
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
df=pd.read_excel(r'C:\Users\Administrator\Desktop\top50.xlsx')
df=df.rename(columns={'Track.Name':'曲名', 'Artist.Name':'歌手', 'Genre':'类型', 'Beats.Per.Minute':'音调', 'Energy':'能量',
'Danceability':'舞蹈性', 'Loudness..dB..':'分贝','Liveness':'现场感', 'Length.':'时长','Speechiness':'语言', 'Popularity':'火热程度'})
df=df.groupby('类型')['曲名'].count().reset_index()
df=df.sort_values(by='曲名',ascending=False).reset_index()

cloud=WordCloud(title='2019最流行的音乐类型',width=800,height=420)
cloud.add(name='音乐类型',attr=df['类型'],value=df['曲名'],word_size_range=(12,60))
cloud.render('2019全球最流行的音乐类型.html')
cloud

从词云图可以看到,2019年全球最火的还是流行音乐(pop&dance pop)。鉴于其他类型的音乐我都不认识,所以下面的分析,我会直接对pop&dance pop作为主要对象,把他们归为一类。

2、2019年全球流行音乐排行

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from  pyecharts import Bar,WordCloud,Pie,Line
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
df=pd.read_excel(r'C:\Users\Administrator\Desktop\top50.xlsx')
df=df.rename(columns={'Track.Name':'曲名', 'Artist.Name':'歌手', 'Genre':'类型', 'Beats.Per.Minute':'音调', 'Energy':'能量',
'Danceability':'舞蹈性', 'Loudness..dB..':'分贝','Liveness':'现场感', 'Length.':'时长','Speechiness':'语言', 'Popularity':'火热程度'})

df=df.replace('dance pop','pop')
df=df[df['类型']=='pop'].reset_index().drop('index',axis=1)
df

通过上述代码,我已经把dance pop的类型全部换成pop。

#接上面的代码
df=df.replace('dance pop','pop')
df=df[df['类型']=='pop'].reset_index().drop('index',axis=1)
df.pivot_table(df,index='曲名').sort_values(by='火热程度',ascending=False).reset_index()

How Do You Sleep?


这是全球最流行的15首流行歌曲。


结合前面的图我们可以知道:这些流行歌曲的口语化程度低,歌词普遍比较优美,有意境;同时时长恰当,多在3分钟左右......

3、根据流行程度对歌曲进行分类颁奖

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from  pyecharts import Bar,WordCloud,Pie,Line
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
df=pd.read_excel(r'C:\Users\Administrator\Desktop\top50.xlsx')
df=df.rename(columns={'Track.Name':'曲名', 'Artist.Name':'歌手', 'Genre':'类型', 'Beats.Per.Minute':'音调', 'Energy':'能量',
'Danceability':'舞蹈性', 'Loudness..dB..':'分贝','Liveness':'现场感', 'Length.':'时长','Speechiness':'语言', 'Popularity':'火热程度'})

df=df.replace('dance pop','pop')
df=df[df['类型']=='pop'].reset_index().drop('index',axis=1)
df=df.pivot_table('火热程度',index='曲名').sort_values(by='火热程度',ascending=False).reset_index()

def grade(火热程度):
if(火热程度>=90):
return '年度最热'
if(火热程度>=85):
return '年度火热'
else:
return '年度流行'

df['授予荣誉'] = df.apply(lambda x :grade(x['火热程度']), axis=1)
df

我们知道,很多媒体都喜欢搞排行榜,而且喜欢给歌曲颁奖,这些颁奖一般会根据几个标准进行打分,算出综合排名。不过这个比较复杂,这里只根据流行程度颁奖,大于90分的就是年度最热;85-89的是年度火热;84以下的就是年度流行。这个实现代码很简单,做出分类,再给数据加一列,命名为“授予荣誉”即可。

#接上面的代码
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure(figsize=(8,4))
sns.countplot(x="授予荣誉",data=df, order=['年度最热','年度火热','年度流行'],palette="muted")
plt.title('2019年全球流行音乐荣誉',loc='left',size=15)
plt.xlabel('授予荣誉',size=15)
plt.ylabel('数量',size=15)
plt.grid(False)
sns.despine(left=False )

这是对荣誉情况的统计,适用于数量比较大的情况。

4、2019全球最火流行歌手排行榜

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from  pyecharts import Bar,WordCloud,Pie,Line
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
df=pd.read_excel(r'C:\Users\Administrator\Desktop\top50.xlsx')
df=df.rename(columns={'Track.Name':'曲名', 'Artist.Name':'歌手', 'Genre':'类型', 'Beats.Per.Minute':'音调', 'Energy':'能量',
'Danceability':'舞蹈性', 'Loudness..dB..':'分贝','Liveness':'现场感', 'Length.':'时长','Speechiness':'语言', 'Popularity':'火热程度'})

df=df.replace('dance pop','pop')
df=df[df['类型']=='pop'].reset_index().drop('index',axis=1)

df=df.pivot_table('火热程度',index='歌手',aggfunc='count').sort_values(by='火热程度',ascending=False).reset_index()
df=df.rename(columns={'火热程度':'上榜次数'})
df

这是全球最火的十大流行音乐歌手的排行。当然下面的图更直观:

#Python学习群 592539176
#接上面的代码
plt.rcParams['font.sans-serif']=['SimHei']
x=df['歌手']
y=df['上榜次数']

plt.figure(figsize=(12,4))
plt.bar(x,y,width=0.5,align='center')
plt.title('2019全球最火流行歌手排行榜',loc='left',size=15)

for a,b in zip(x,y):
    plt.text(a,b,b,ha='center',va='bottom',fontsize=12)#显示额度标签

plt.xlabel('歌手',size=15)
plt.ylabel('上榜次数',size=15)
plt.xticks(x,size=12,rotation=30)
plt.yticks(size=15,)
plt.grid(False)
sns.despine(left=False )
plt.show()

 

 从上面的分析可以看到,Ed Sheeran这个人最厉害,15首最流行的歌,他一个人唱了四首,于是我百度了一下,想知道是何方神圣。最后发现就是这个人:

虽然长得确实其貌不扬,但是才华很棒,我听了一下,还蛮好听。


Beautiful People (feat. Khalid)


百度上说,这个人出生于1991年,今年刚结婚,英国的,2012年21岁的时候就在在第32届全英音乐奖中荣获英国最佳男艺人、英国最具突破艺人;2018年,获得第60届格莱美奖最佳流行歌手、最佳流行专辑奖。2019福布斯100名人榜排名第5位。

然而这么有名的人我竟然不认识,我好孤陋寡闻。

三、写在后面

数据分析其实是个很好玩的东西,平时的训练除了可以熟悉技能,其实还可以知道很多其他东西。

因为你每次做个案例,就相当于对某个领域做了一次了解,有时候还可以刷新自己的认知。

然后在做数据案例的时候,建议大家可以多找些自己感兴趣的数据源,悄悄告诉你,GitHub上有很多。这个网站真的很神奇,不仅有数据源,还可以案例分析,还有源代码,有些你只要复制下来就可以直接用,非常方便。

好了,今天的分享就到这里,下次我们继续。

рекомендация

отwww.cnblogs.com/chengxyuan/p/12104849.html