Python分析盤點2019全球流行音樂:是哪些歌曲榜單佔領了我們?

寫在前面:聖誕剛過,彌留者節日氣息的大家是否還在繼續學習吶~在匆忙之際也不忘給自己找幾首好聽的歌曲放鬆一下,纏繞着音樂一起來看看關於2019年流行音樂趨勢是如何用Python分析的吧!

昨天下午沒事兒,隨便聽了下音樂,結果搜到了一份數據比較好玩,所以拿了來做個數據分享案例。

這份數據是由國外比較火的音樂軟件spotify提供的,很有代表意義。

不過涉及到的指標都比較專業,我不是太懂,只能根據自己的理解去做分析,有懂音樂的朋友可以提出專業的看法。

這次的數據分析工具是Python,當然如果你Python不是很熟,用tableau也是可以的,做出的圖還會更好看。

一、數據準備

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上有很多。這個網站真的很神奇,不僅有數據源,還可以案例分析,還有源代碼,有些你只要複製下來就可以直接用,非常方便。

好了,今天的分享就到這裏,下次我們繼續。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章