# 乐队的夏天大结局！用Python分析投票数据，选出真正的乐队TOP 5

```import pandas as pd
import numpy as np
import matplotlib.pyplot as plt```

```# 配置乐队的夏天主题色
purple = (0.22,0.09,0.59) # 紫色yellow = (0.99,0.89,0.27) # 黄色green = (0.36,0.94,0.55) # 绿色blue = (0.06,0.24,0.78) # 蓝色red = (0.98,0.31,0.36) # 红色```

```# 读取数据
```

```# 观察数据

```# 可以看到有四只乐队是没有得分和排名的，把他们列出来

data1[data1['总得分'].isnull()]```

`data1 = data1.dropna(axis = 0)`

• Z_score 标准分
• 0-1 normalization 归一分

Z_score标准分的计算方法是用“（该乐队当场得分-当场所有乐队得分的平均数）/ 当场所有乐队得分的标准差”计算得到：

```# 标准分函数定义
def z_score_normalize(series):  mean = series.mean()  std_dv = series.std()  return series.apply(lambda x:(x - mean) / std_dv)  # 用循环的方式批量对每场比赛的得分做处理
competition = [data1,data2,data3,data4,data5,data6]
for period in competition:    period['超级乐迷得分_标准分'] =  z_score_normalize(period['超级乐迷得分'])    period['专业乐迷得分_标准分'] =  z_score_normalize(period['专业乐迷得分'])    period['大众乐迷得分_标准分'] =  z_score_normalize(period['大众乐迷得分'])    period['总得分_标准分'] =  z_score_normalize(period['总得分'])
```

0-1 normalization 归一分的计算方法是用“乐队得票数/总票数”计算得到，也等于常说的得票率：

```# 定义归一化的函数
def normalize(series,x_max):
return series.apply(lambda x: x/x_max)# 对不同总分不同类别的得分应用归一化函数
for data in [data1,data2,data5,data6]:    data['超级乐迷_归一分'] = normalize(data['超级乐迷得分'],50)
data3['超级乐迷_归一分'] = normalize(data3['超级乐迷得分'],60)data4['超级乐迷_归一分'] = normalize(data4['超级乐迷得分'],40)
for data in [data1,data2,data3,data4,data5,data6]:    data['专业乐迷_归一分'] = normalize(data['专业乐迷得分'],40)    for data in [data1,data2]:    data['大众乐迷_归一分'] = normalize(data['大众乐迷得分'],100)for data in [data3,data4,data5,data6]:    data['大众乐迷_归一分'] = normalize(data['大众乐迷得分'],360)```

`total_score`

PART I ：这些宝藏乐队你不应该错过！

```# 按照乐队这个标签分类计算，计算方式是平均值，计算字段是总得分_标准分，然后按照总得分_标准分排列
total_score_mean = total_score.groupby(['乐队'])[['总得分_标准分']].mean().sort_values(    by = '总得分_标准分',ascending = False)
total_score_mean```

```# 对乐队总得分_标准分做可视化
y = np.arange(len(total_score_mean.index))
x = np.array(list(total_score_mean['总得分_标准分']))fig,ax = plt.subplots(figsize = (12,12))
total_score_mean.plot.barh(ax=ax,alpha=0.7,title='27只乐队场均表现',color = 'g')
for a,b in zip(x,y):
plt.text(a, b, '%.2f' % a, ha='center', va= 'center',fontsize=12)ax.grid(False)
```

```# 把痛仰的成绩拉出来看一下
total_score[total_score['乐队'] == '痛仰乐队']```

“再见杰克”和“西湖”都在当轮比赛中取得非常突出的表现，但“我愿意”真的可惜了。

`total_score[total_score['乐队'] == '面孔乐队']`

```# 代码逻辑和前面选总得分作为计算字段的逻辑一样，只不过这次选取单个群体得分作为指标
super_score_mean = total_score.groupby(['乐队'])[['超级乐迷得分_标准分']].mean().sort_values(    by = '超级乐迷得分_标准分')pro_score_mean = total_score.groupby(['乐队'])[['专业乐迷得分_标准分']].mean().sort_values(    by = '专业乐迷得分_标准分')public_score_mean = total_score.groupby(['乐队'])[['大众乐迷得分_标准分']].mean().sort_values(    by = '大众乐迷得分_标准分')```

```fig,ax = plt.subplots(1,3,figsize = (16,6))
super_score_mean.tail(5).plot.barh(ax=ax[0],color = '#dc2624',alpha=0.7,title='超级乐迷心中TOP5',grid=False)pro_score_mean.tail(5).plot.barh(ax=ax[1],color = '#2b4750',alpha=0.7,title='专业乐迷心中TOP5',grid=False)public_score_mean.tail(5).plot.barh(ax=ax[2],color = '#649E7D',alpha=0.7,title='大众乐迷心中TOP5',grid=False)```

PART II ：乐队的排名就像人生，它会起起落落落落落

PART III ：如果你只有十首歌的时间，我建议你听这些歌

```# 看看数据整体的描述total_nor_score.describe()
# 运用箱型图可以看到各组给分的分布，其中蓝线是平均分，圆圈是最小值fig,
ax = plt.subplots(1,1,figsize = (8,4))total_nor_score.boxplot(ax = ax,grid=False)```

```top10_songs = total_nor_score.sort_values(by = '总得分_归一分').tail(10)top10_songs.plot.barh(x='歌曲',y='总得分_归一分',color=purple)
print('截止第六期，最受欢迎的10首歌分别是:\n',list(top10_songs['歌曲']))```

• 夏日终曲
• 凡人歌
• How come u leave me like this
• 生命因你而火热
• 椑面派对
• 西湖
• 花火
• Bye Bye
• 公路之歌
• 没有理想的人不伤心

```total_nor_score.sort_values(by = '超级乐迷_归一分').tail(10).plot.barh(x='歌曲',y='超级乐迷_归一分',color=red)
total_nor_score.sort_values(by = '专业乐迷_归一分').tail(10).plot.barh(x='歌曲',y='专业乐迷_归一分',color=yellow)
total_nor_score.sort_values(by = '大众乐迷_归一分').tail(10).plot.barh(x='歌曲',y='大众乐迷_归一分',color=green)```

PART IIII：灵魂拷问：“我愿意”为什么跳水？谁在不喜欢海龟先生？

`total_nor_score[total_nor_score['歌曲'] == '我愿意']`

```total_nor_score_t = pd.merge(total_nor_score, total_score[['乐队','歌曲']], on='歌曲')
total_nor_score_t[total_nor_score_t['乐队'] == '海龟先生']```

“咿呀呀”这首歌拖累了海龟的整体平均分，而在这首歌中，专业乐迷给票的比例是最低的。

`total_nor_score_t[total_nor_score_t['乐队'] == '海龟先生'].mean()超级乐迷_归一分    0.836000`
• 专业乐迷_归一分 0.690000
• 大众乐迷_归一分 0.779444
• 总得分_归一分 0.778734

PART IV：不要情感，拒绝同情票，我只想告诉你真相

`data6.iloc[:,:-9]`

```# 选中7只队伍final_7 = ['新裤子','痛仰乐队','九连真人','Click#15','刺猬','盘尼西林','旅行团乐队']
# 分别计算标准分
final_7_total_score = total_score_mean.loc[final_7,].sort_values(by='总得分_标准分')
# 可视化
fig,ax = plt.subplots(1,1,figsize = (10,20))
final_7_total_score.plot.barh(ax=ax,color = yellow,alpha=0.7,title='我心中Hot5',grid=False)```

‍ 从这个结果来看，其实盘尼西林是排在最后一位的，但因为增加了投票而被捞了回来。赛制的改变，使得结果有人欢喜有人愁。

0 条评论

• ### 收集了7000个地震回波后，机器学习发现了地下上千公里处的热岩床

借助无人监督的学习算法，地球物理学家发现了大片热的致密岩石，这些岩石位于地球表面以下将近3,000公里，隐藏在太平洋下方。

• ### 冠状病毒疫情严重破坏苹果供应链，16年来首次下调其营收预期

本周一，苹果公司宣布下调本季度的销售预期，成为首批揭示冠状病毒如何影响其业务的公司之一。

• ### 用Python分析投票数据，选出真正的乐队TOP 5

网络上没有公开的详细得票、排名数据，只好自己整理了。首先购买爱奇艺会员，不然很长时间都消耗在广告上了。然后用2倍速播放（这么听歌还挺带感的），然后看到这一幕，按...

• ### 用Python告诉你，谁是这个夏天的最强乐队？

虽然现在大众的兴趣非常的分散，乐队的夏天是否是今天最火的综艺节目，每个人心中的答案都是不一样的。但在我看来，我很感谢有这么一个节目，可以让我接触到不同类型的音乐...

• ### SQL学习笔记之SQL查询练习1

–1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Co...

• ### Hive SQL50道练习题

– 4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩: – (包括有成绩的和无成绩的)

• ### docker数据卷备份恢复以及配置桥接网络

如果数据卷容器的共享目录已经挂载到了本地宿主机的磁盘上，那么就无需进行数据卷备份。没有进行挂载到本地，而是作为共享目录的数据卷容器，就得定期将数据卷进行一个备份...

• ### Hive快速入门系列(10) | Hive的查询语法

注： 1、order by 会对输入做全局排序，因此只有一个reducer，会导致当输入规模较大时，需要较长的计算时间。 2、sort by不是全局排序，其...

• ### 服务器-Nginx-一个简单的例子

直接贴一个几经磨难的简单的例子吧，虽然简单，但是有些不理解的地方，就出了很多错，但是因为这些错误，在对nginx理解稍微深刻了那么一点点的同时，对Linux的操...