%reload_ext pretty_jupyter
%%jinja markdown
<style>
    div.main-container {width:98%;max-width:100%;}   
    .btn {display:none;}    
    .col-md-3 {width:20%;}   
    .col-md-9 {width:80%;}
    h2 {margin-top:30px;}
    .tocify-extend-page {height: 50px !important;}
</style>
%%html
<head>
   <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
from mpl_toolkits.axes_grid1 import ImageGrid
from itables import init_notebook_mode, show
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
import datetime
import warnings
import os

warnings.simplefilter(action='ignore', category=FutureWarning)
init_notebook_mode(all_interactive=False)
pd.set_option('display.max_columns', 50)
files = sorted(["covers/"+str(file) for file in os.listdir("covers") if ".webp" in file])
images = [plt.imread(images) for images in files]
fig = plt.figure(figsize=(16,8))
grid = ImageGrid(fig, 111,nrows_ncols=(5,9),axes_pad=0.1)
for ax, im in zip(grid, images):
    ax.imshow(im)
plt.show()

The Schedule

order = ['RL','WS','MT','TL','JP','RW','MJ','SF','RS']
album_count = len(images)
current_turn = (album_count % 9) - 2
order = order[current_turn:] + order[:current_turn]
started = datetime.datetime(2024, 2, 5).date()
time_elapsed = datetime.timedelta(weeks=album_count+3)
one_week = datetime.timedelta(weeks=1)
current_week = started + time_elapsed

schedule = pd.DataFrame({'From':[order[0],order[1],order[2],order[3]],
                         'Album #':[album_count,"N/A",album_count+1,album_count+2],
                         'Week Of':[current_week,current_week+one_week,current_week+(2*one_week),current_week+(3*one_week)]},
                         index=['This Week','Next Week','Coming Up','Next Month'])
schedule['Week Of'] = schedule['Week Of'].apply(lambda date: date.strftime('%d/%m'))

show(schedule)
From Album # Week Of
Loading... (need help?)
albums = pd.read_csv('albums.csv')
scores = pd.read_csv('scores.csv')
# Retrospective score changes
scores.at[5,'MT'] = 8
scores.at[(1,9),'MT'] = 3
scores.at[2,'JP'] = 8
scores.at[13,'MJ'] = 5.75
scores.at[25,'TL'] = 7.5
albums[['EDA','POC','Group']] = albums[['EDA','POC','Group']].astype(bool)
albums[['From','Genre','Decade','Origin','Gender']] = albums[['From','Genre','Decade','Origin','Gender']].astype('category')

scores.iloc[:,1:] = scores.iloc[:,1:].astype(float)
scores['AVG'] = scores.iloc[:,1:10].mean(axis=1).round(decimals=2)
scores['MED'] = scores.iloc[:,1:10].median(axis=1).round(decimals=2)
scores['MAX'] = scores.iloc[:,1:10].max(axis=1).round(decimals=2)
scores['MIN'] = scores.iloc[:,1:10].min(axis=1).round(decimals=2)
scores['SUM'] = scores.iloc[:,1:10].sum(axis=1).round(decimals=2)
scores['STD'] = scores.iloc[:,1:10].std(axis=1).round(decimals=2)
players = list(scores.columns[1:10])
aggs = list(scores.columns[10:])

scores_players = scores.loc[:,(["#"]+players)]
scores_aggs = scores.loc[:,(["#"]+aggs)]

master = pd.merge(left=albums,right=scores,how='inner')

Get the Tables!

Album Details

albums.index+=1
show(albums.iloc[:,1:])
# From Artist Album Genre Year Decade Mins Group EDA Origin Gender POC
Loading... (need help?)

Individual Scores

combined = pd.merge(left=albums.iloc[:,1:5],right=scores_players,how='inner')
combined.index+=1
combined = combined.iloc[:,:].style \
                   .background_gradient(subset=players, cmap='Blues') \
                   .format(precision=2)

show(combined.map(lambda x: 'color: transparent; background-color: transparent' if pd.isnull(x) else ''))
# From Artist Album JP MJ MT RL RS RW SF TL WS
44 MJ Run the Jewels Run the Jewels nan nan nan nan nan 7.00 nan 6.50 nan
43 RW Highly Suspect Mister Asylum nan 7.25 nan nan nan nan nan 7.25 nan
42 JP Raleigh Ritchie You're A Man Now, Boy nan nan nan nan nan 7.00 nan 6.75 nan
41 TL Jack's Mannequin Everything in Transit nan 6.75 5.75 9.00 nan 7.00 8.25 nan 7.00
40 MT SBTRKT SBTRKT nan 6.50 nan 6.50 nan 6.25 5.50 5.25 5.25
39 WS Benjamin Clementine At Least For Now nan 7.25 6.00 5.00 nan 5.50 6.25 6.00 nan
38 RL Porter Robinson Worlds nan 6.75 7.75 nan nan 7.25 6.50 7.50 7.25
37 SF Suburban Legends Dance Like Nobody's Watching nan 6.00 5.00 6.25 nan 6.75 nan 5.00 5.75
36 MJ House of Protection GALORE nan nan 7.75 6.50 nan 7.50 7.25 6.50 7.00
35 RW Dolly Parton Jolene nan 6.75 5.75 7.00 nan nan 7.00 7.25 6.75
34 JP The Backseat Lovers Elevator Days nan 6.25 6.25 6.25 nan 6.25 6.50 6.00 6.75
33 TL Funeral for a Friend Seven Ways to Scream Your Name nan 6.75 6.50 6.00 nan 6.75 7.25 nan 7.75
32 RS Fightstar They Liked You Better When You Were Dead nan 6.50 5.75 7.25 nan 6.00 6.25 6.50 6.00
31 MT Parcels Hideout nan 6.50 nan 6.25 nan 5.75 6.50 5.75 6.25
30 WS Devil Sold His Soul Belong ╪ Betray nan 6.75 6.25 7.75 nan 6.25 7.00 8.00 nan
29 RL Bad Rabbits Stick Up Kids nan 6.50 5.75 nan nan 6.75 6.75 5.50 5.50
28 SF Foo Fighters Foo Fighters nan 7.50 4.50 5.50 nan 6.00 nan 7.00 6.50
27 RS Alien Ant Farm truANT nan 6.50 7.00 6.00 nan 5.75 6.00 5.50 4.50
26 MJ Talking Heads Remain in Light 7.00 nan 7.00 6.25 nan 6.00 6.50 7.50 7.25
25 RW Griff Vertigo 6.50 6.50 5.50 7.50 nan nan 6.25 6.50 6.00
24 JP Childish Gambino Bando Stone & The New World nan 6.75 6.00 4.50 nan 6.25 6.00 7.75 7.75
23 TL Chicane Giants 7.00 6.00 5.50 8.00 nan 6.50 5.50 nan 7.75
22 MT Tom Misch Geography 6.75 6.50 nan 6.75 nan 6.00 6.75 6.00 7.25
21 WS Sleep Token Take Me Back to Eden nan 7.00 5.25 5.50 nan 6.00 5.25 4.50 nan
20 RL Joe Satriani Surfing with the Alien nan 6.00 7.00 nan nan 5.25 5.75 4.75 5.00
19 RS The Wildhearts Earth vs the Wildhearts 6.00 6.25 5.75 4.50 nan 4.50 6.00 4.00 4.00
18 RS Beartooth The Surface 6.75 7.50 6.50 7.50 nan 8.00 7.50 7.00 7.50
17 SF As December Falls As December Falls nan 6.25 3.75 6.50 nan 6.00 nan 5.75 6.00
16 MJ MisterWives Our Own House 6.50 nan 5.75 8.25 nan 8.00 6.25 6.75 7.50
15 RW Live Throwing Copper 5.75 6.25 5.75 4.75 nan nan 6.50 6.00 5.00
14 JP Post Malone Hollywood's Bleeding nan 5.75 4.25 5.25 nan 6.00 4.75 5.25 4.50
13 TL Grimes Art Angels 6.00 7.25 6.00 8.50 nan 7.50 4.75 nan 7.50
12 MT IDLES Joy as an Act of Resistance 7.00 6.75 nan 5.25 nan 5.75 6.75 6.50 6.50
11 WS Every Time I Die Radical 6.25 7.00 6.75 3.00 nan 5.75 6.50 7.50 nan
10 RL Sigur Rós ( ) nan 5.75 3.00 nan nan 5.25 6.50 7.50 6.50
9 SF Newton Faulkner Hand Built by Robots 5.50 6.00 3.50 6.50 nan 5.75 nan 3.75 4.50
8 RS Linkin Park The Hunting Party 5.00 6.75 3.00 6.25 nan 6.75 6.75 6.75 3.00
7 MJ Electric Six Fire 6.75 nan 8.50 4.75 nan 7.75 7.25 6.50 7.00
6 RW Tracy Chapman Tracy Chapman 7.50 7.50 8.00 7.50 nan nan 7.25 7.25 7.50
5 JP Kendrick Lamar Mr. Morale & the Big Steppers nan 7.00 4.75 5.00 nan 4.75 4.25 6.75 6.00
4 TL Talk Talk The Colour of Spring 6.75 6.50 5.50 7.25 nan 6.00 7.00 nan 6.75
3 MT Jungle Volcano 8.00 6.00 nan 7.00 nan 5.75 5.75 5.75 6.75
2 WS The Black Queen Fever Daydream 4.75 6.75 3.00 4.25 nan 6.00 5.50 5.25 nan
1 RL M83 Before the Dawn Heals Us 5.75 6.00 5.00 nan 5.00 6.50 6.00 6.25 6.00

Summary Scores

combined_aggs = pd.merge(left=albums.iloc[:,1:7],right=scores_aggs,how='inner')
combined_aggs.index+=1
combined_aggs = combined_aggs.iloc[:,:].style \
                             .background_gradient(subset=['AVG','MAX'], cmap='Greens') \
                             .format(precision=2)

show(combined_aggs.map(lambda x: 'color: transparent; background-color: transparent' if pd.isnull(x) else ''))
# From Artist Album Genre Year AVG MED MAX MIN SUM STD
44 MJ Run the Jewels Run the Jewels Hip Hop 2013 6.75 6.75 7.00 6.50 13.50 0.35
43 RW Highly Suspect Mister Asylum Rock 2015 7.25 7.25 7.25 7.25 14.50 0.00
42 JP Raleigh Ritchie You're A Man Now, Boy R&B 2016 6.88 6.88 7.00 6.75 13.75 0.18
41 TL Jack's Mannequin Everything in Transit Pop Rock 2005 7.29 7.00 9.00 5.75 43.75 1.16
40 MT SBTRKT SBTRKT Electronic 2011 5.88 5.88 6.50 5.25 35.25 0.61
39 WS Benjamin Clementine At Least For Now Alternative 2015 6.00 6.00 7.25 5.00 36.00 0.76
38 RL Porter Robinson Worlds Electronic 2014 7.17 7.25 7.75 6.50 43.00 0.47
37 SF Suburban Legends Dance Like Nobody's Watching Pop Rock 2006 5.79 5.88 6.75 5.00 34.75 0.70
36 MJ House of Protection GALORE Rock 2024 7.08 7.12 7.75 6.50 42.50 0.52
35 RW Dolly Parton Jolene Country 1974 6.75 6.88 7.25 5.75 40.50 0.52
34 JP The Backseat Lovers Elevator Days Rock 2018 6.32 6.25 6.75 6.00 44.25 0.24
33 TL Funeral for a Friend Seven Ways to Scream Your Name Post-hardcore 2003 6.83 6.75 7.75 6.00 41.00 0.61
32 RS Fightstar They Liked You Better When You Were Dead Rock 2005 6.32 6.25 7.25 5.75 44.25 0.49
31 MT Parcels Hideout Pop 2017 6.17 6.25 6.50 5.75 37.00 0.34
30 WS Devil Sold His Soul Belong ╪ Betray Metalcore 2014 7.00 6.88 8.00 6.25 42.00 0.74
29 RL Bad Rabbits Stick Up Kids Pop 2009 6.12 6.12 6.75 5.50 36.75 0.61
28 SF Foo Fighters Foo Fighters Rock 1995 6.17 6.25 7.50 4.50 37.00 1.08
27 RS Alien Ant Farm truANT Rock 2003 5.89 6.00 7.00 4.50 41.25 0.79
26 MJ Talking Heads Remain in Light New Wave 1980 6.79 7.00 7.50 6.00 47.50 0.55
25 RW Griff Vertigo Pop 2024 6.39 6.50 7.50 5.50 44.75 0.61
24 JP Childish Gambino Bando Stone & The New World Hip Hop 2024 6.43 6.25 7.75 4.50 45.00 1.13
23 TL Chicane Giants Dance 2010 6.61 6.50 8.00 5.50 46.25 1.02
22 MT Tom Misch Geography Alternative 2018 6.57 6.75 7.25 6.00 46.00 0.45
21 WS Sleep Token Take Me Back to Eden Metal 2023 5.58 5.38 7.00 4.50 33.50 0.85
20 RL Joe Satriani Surfing with the Alien Rock 1987 5.62 5.50 7.00 4.75 33.75 0.82
19 RS The Wildhearts Earth vs the Wildhearts Rock 1993 5.12 5.12 6.25 4.00 41.00 0.96
18 RS Beartooth The Surface Metalcore 2023 7.28 7.50 8.00 6.50 58.25 0.49
17 SF As December Falls As December Falls Rock 2019 5.71 6.00 6.50 3.75 34.25 0.99
16 MJ MisterWives Our Own House Pop Rock 2015 7.00 6.75 8.25 5.75 49.00 0.94
15 RW Live Throwing Copper Rock 1994 5.71 5.75 6.50 4.75 40.00 0.64
14 JP Post Malone Hollywood's Bleeding Hip Hop 2019 5.11 5.25 6.00 4.25 35.75 0.64
13 TL Grimes Art Angels Pop 2015 6.79 7.25 8.50 4.75 47.50 1.26
12 MT IDLES Joy as an Act of Resistance Punk 2018 6.36 6.50 7.00 5.25 44.50 0.63
11 WS Every Time I Die Radical Metalcore 2021 6.11 6.50 7.50 3.00 42.75 1.48
10 RL Sigur Rós ( ) Post Rock 2002 5.75 6.12 7.50 3.00 34.50 1.55
9 SF Newton Faulkner Hand Built by Robots Pop Rock 2007 5.07 5.50 6.50 3.50 35.50 1.16
8 RS Linkin Park The Hunting Party Rock 2014 5.53 6.50 6.75 3.00 44.25 1.67
7 MJ Electric Six Fire Rock 2003 6.93 7.00 8.50 4.75 48.50 1.17
6 RW Tracy Chapman Tracy Chapman Roots Rock 1988 7.50 7.50 8.00 7.25 52.50 0.25
5 JP Kendrick Lamar Mr. Morale & the Big Steppers Hip Hop 2022 5.50 5.00 7.00 4.25 38.50 1.08
4 TL Talk Talk The Colour of Spring New Wave 1986 6.54 6.75 7.25 5.50 45.75 0.60
3 MT Jungle Volcano Electronic 2023 6.43 6.00 8.00 5.75 45.00 0.86
2 WS The Black Queen Fever Daydream Electronic 2016 5.07 5.25 6.75 3.00 35.50 1.22
1 RL M83 Before the Dawn Heals Us Electronic 2005 5.81 6.00 6.50 5.00 46.50 0.55

Aggregations

Average Scores by Advocate

advocates_counts = master.groupby('From')['#'].agg('count').reset_index()
advocates_averages = pd.pivot_table(master, values=['AVG','MAX','MED','MIN','SUM'], index="From",columns=None).reset_index()
advocates_combined = pd.merge(advocates_counts,advocates_averages,how="inner").rename(columns={'#':'Albums'})

show(advocates_combined.style
                       .background_gradient(subset=['AVG','MAX','MIN'], cmap='Blues') \
                       .format(precision=2))
From Albums AVG MAX MED MIN SUM
JP 5 6.05 6.90 5.93 5.15 35.45
MJ 5 6.91 7.80 6.92 5.90 40.20
MT 5 6.28 7.05 6.28 5.60 41.55
RL 5 6.09 7.10 6.20 4.95 38.90
RS 5 6.03 7.05 6.27 4.75 45.80
RW 5 6.72 7.30 6.78 6.10 38.45
SF 4 5.69 6.81 5.91 4.19 35.38
TL 5 6.81 8.10 6.85 5.50 44.85
WS 5 5.95 7.30 6.00 4.35 37.95

Average Scores by Decade

album_counts_by_decade = master.groupby('Decade',observed=True)['#'].agg('count').reset_index()
scores_by_decade = master.groupby(['Decade'], observed=True)[players+aggs].agg('mean').fillna('').reset_index()
combined_by_decade = pd.merge(album_counts_by_decade,scores_by_decade,how="inner").rename(columns={'Year':'Decade','#':'Albums'})

show(combined_by_decade.style \
                       .background_gradient(subset=['Albums','AVG','MAX','MIN'], cmap='Greens') \
                       .format(precision=2))
Decade Albums JP MJ MT RL RS RW SF TL WS AVG MED MAX MIN SUM STD
1970s 1 6.75 5.75 7.00 7.00 7.25 6.75 6.75 6.88 7.25 5.75 40.50 0.52
1980s 4 7.08 6.67 6.88 7.00 5.75 6.62 6.50 6.62 6.61 6.69 7.44 5.88 44.88 0.55
1990s 3 5.88 6.67 5.33 4.92 5.25 6.25 5.67 5.17 5.67 5.71 6.75 4.42 39.33 0.89
2000s 10 6.00 6.31 5.58 6.54 5.00 6.42 6.78 5.81 6.05 6.18 6.26 7.35 4.88 40.67 0.88
2010s 18 6.14 6.62 5.23 6.48 6.46 6.09 6.33 6.29 6.34 6.45 7.17 5.36 36.79 0.69
2020s 8 6.88 6.82 6.07 5.81 6.29 6.09 6.53 6.83 6.35 6.28 7.56 5.06 43.78 0.88

Average Proximities

dists_from_avg = pd.merge(left=scores_aggs.iloc[:,:2],right=scores_players,how='inner')
for player in order:
    dists_from_avg[player] = dists_from_avg[player] - dists_from_avg['AVG']

avg_calcs = []
for player in order:
    avg_calcs.append([player,len(dists_from_avg.query(f'{player} > 0')),len(dists_from_avg.query(f'{player} == 0')),len(dists_from_avg.query(f'{player} < 0'))])
avg_calcs = pd.DataFrame(avg_calcs,columns=["Player","Above Average","Exactly Average","Below Average"])

melt_for_avg_calcs = dists_from_avg.melt(id_vars=['#'],value_vars=players,var_name='Judge', value_name='Score')
melt_for_avg_calcs['Score'] = melt_for_avg_calcs['Score'].abs()

closest_to_avg_counts = []
for player in players:
    count = 0
    for album_num in range(1,album_count+1):
        album_scores = melt_for_avg_calcs[melt_for_avg_calcs['#'] == album_num]
        min_scores = album_scores[album_scores.Score == album_scores.Score.min()]
        try:
            count += min_scores['Judge'].value_counts()[player]
        except:
            pass
    closest_to_avg_counts.append((player,str(count)))
    
closest_to_avg_counts = pd.DataFrame(closest_to_avg_counts,columns=["Player","Closest to Average"])
combined_avg_calcs = pd.merge(avg_calcs,closest_to_avg_counts,how="inner").sort_values('Player').set_index("Player")
combined_avg_calcs = combined_avg_calcs.iloc[:,:].style \
                     .background_gradient(subset=["Above Average","Exactly Average","Below Average","Closest to Average"],cmap='Blues') \
                     .format(precision=2)

show(combined_avg_calcs)
  Above Average Exactly Average Below Average Closest to Average
Player        
JP 11 1 7 8
MJ 25 4 9 11
MT 10 1 25 5
RL 20 1 15 9
RS 0 0 1 0
RW 18 0 21 11
SF 22 1 14 5
TL 18 2 19 9
WS 20 2 14 12

Relationship Matrix

relationship_matrix = pd.merge(left=albums.iloc[:,:4],right=scores_players,how='inner')
columns = ["Judge"] + players

matrix_list = []
for judge in players:
    avg_for_each_player = [judge]   
    for advocate in players:
        submatrix = relationship_matrix[relationship_matrix["From"] == advocate]
        avg_for_each_player.append(submatrix[judge].mean())
    matrix_list.append(avg_for_each_player)
    
relationship_matrix = pd.DataFrame(matrix_list,columns=columns).set_index("Judge").style \
                     .background_gradient(cmap='Greens') \
                     .format(precision=2)
show(relationship_matrix.map(lambda x: 'color: transparent; background-color: transparent' if pd.isnull(x) else ''))
  JP MJ MT RL RS RW SF TL WS
Judge                  
JP nan 6.75 7.25 5.75 5.92 6.58 5.50 6.58 5.50
MJ 6.44 nan 6.45 6.20 6.70 6.85 6.44 6.65 6.95
MT 5.31 7.25 nan 5.70 5.60 6.25 4.19 5.85 5.45
RL 5.25 6.44 6.35 nan 6.30 6.69 6.19 7.75 5.10
RS nan nan nan 5.00 nan nan nan nan nan
RW 6.05 7.25 5.90 6.20 6.20 nan 6.12 6.75 5.90
SF 5.38 6.81 6.25 6.30 6.50 6.75 nan 6.55 6.10
TL 6.50 6.75 5.85 6.30 5.95 6.85 5.38 nan 6.25
WS 6.25 7.19 6.40 6.05 5.00 6.31 5.69 7.35 nan

Scores by Round

Aggs

scores_by_round = master.groupby(['Round'], observed=True)[aggs].agg(['mean','max','min']).fillna('') #.reset_index()

show(scores_by_round.style \
                       .background_gradient(cmap='Blues') \
                       .format(precision=2),classes="compact")
  AVG MED MAX MIN SUM STD
  mean max min mean max min mean max min mean max min mean max min mean max min
Round                                    
1 6.04 7.50 5.07 6.17 7.50 5.00 7.25 8.50 6.50 4.67 7.25 3.00 43.56 52.50 35.50 0.95 1.67 0.25
2 6.09 7.28 5.11 6.27 7.50 5.12 7.20 8.50 6.00 4.50 6.50 3.00 42.75 58.25 34.25 0.96 1.55 0.49
3 6.23 6.79 5.58 6.24 7.00 5.38 7.39 8.00 7.00 5.08 6.00 4.50 41.67 47.50 33.50 0.81 1.13 0.45
4 6.49 7.08 5.79 6.49 7.12 5.88 7.19 8.00 6.50 5.83 6.50 5.00 40.33 44.25 34.75 0.53 0.74 0.24
5 6.75 7.29 5.88 6.72 7.25 5.88 7.39 9.00 6.50 6.14 7.25 5.00 28.54 43.75 13.50 0.50 1.16 0.00

Players

scores_by_round = master.groupby(['Round'], observed=True)[players[:4]].agg(['mean','max','min']).fillna('')

show(scores_by_round.style \
                       .background_gradient(cmap='Greens') \
                       .format(precision=2),classes="compact")
  JP MJ MT RL
  mean max min mean max min mean max min mean max min
Round                        
1 6.25 8.00 4.75 6.56 7.50 6.00 5.16 8.50 3.00 6.06 7.50 4.25
2 6.32 7.00 5.75 6.53 7.50 5.75 5.28 6.75 3.00 5.94 8.50 3.00
3 6.81 7.00 6.50 6.59 7.50 6.00 5.97 7.00 4.50 6.25 8.00 4.50
4 6.50 6.75 6.00 6.12 7.75 5.00 6.66 7.75 6.00
5 6.90 7.25 6.50 6.50 7.75 5.75 6.83 9.00 5.00
scores_by_round = master.groupby(['Round'], observed=True)[players[5:]].agg(['mean','max','min']).fillna('')

show(scores_by_round.style \
                       .background_gradient(cmap='Greens') \
                       .format(precision=2),classes="compact")
  RW SF TL WS
  mean max min mean max min mean max min mean max min
Round                        
1 6.16 7.75 4.75 6.22 7.25 4.25 6.03 7.25 3.75 5.94 7.50 3.00
2 6.31 8.00 4.50 6.17 7.50 4.75 6.25 7.50 4.00 6.11 7.50 4.00
3 5.97 6.50 5.25 6.00 6.75 5.25 6.19 7.75 4.50 6.50 7.75 4.50
4 6.50 7.50 5.75 6.81 7.25 6.25 6.31 8.00 5.00 6.47 7.75 5.50
5 6.67 7.25 5.50 6.62 8.25 5.50 6.54 7.50 5.25 6.50 7.25 5.25

Visualisations

melted = scores.melt(id_vars=['#'],value_vars=players,var_name='Judge', value_name='Score')

params = {"AVG" : ["mean",melted.groupby(["Judge"])["Score"].mean()],
          "MED" : ["median",melted.groupby(["Judge"])["Score"].median()],
          "SUM" : ["sum",melted.groupby(["Judge"])["Score"].sum()],
          "MAX" : ["max",melted.groupby(["Judge"])["Score"].max()],
          "MIN" : ["min",melted.groupby(["Judge"])["Score"].min()],
          "STD" : ["std",melted.groupby(["Judge"])["Score"].std()]}

Scores by Judge

plt.figure(figsize=(16,8))
for i, agg in enumerate(aggs):
    plt.subplot(2,3,i+1)
    ax = sns.barplot(data=melted,x='Judge',y='Score',
                     estimator=params[agg][0],order=params[agg][1].sort_values(ascending=False).index,
                     alpha=0.65,errorbar=None)
    ax.margins(y=0.10)
    plt.title(agg),plt.xlabel(''),plt.ylabel('')
    for p in ax.patches:
        ax.annotate(format(p.get_height(), '.2f'), 
                   (p.get_x() + p.get_width() / 2., p.get_height()), 
                    ha = 'center', va = 'center', 
                    size=8,xytext = (0, 5), 
                    textcoords = 'offset points')
plt.subplots_adjust(left=0.1,bottom=0.1,right=1,top=0.75,wspace=0.1,hspace=0.3)
plt.show()

Scores by Years and Mins

plt.figure(figsize=(16,5))
for i, param in enumerate(["Year","Mins"]):
    plt.subplot(1,2,i+1)
    sns.scatterplot(data=master,x='AVG',y=param,hue='From',s=200)
    plt.xlabel(''),plt.ylabel(''),plt.title(f'{param} / Avg. Score'),plt.grid(True,axis="y")
plt.subplots_adjust(left=0.1,bottom=0.1,right=1,top=0.75,wspace=0.1,hspace=0.3)
plt.show()

Scores by Album

plt.figure(figsize=(16,4))
ax = sns.lineplot(data=melted,x="#", y="Score",linewidth=2.5,marker='o',errorbar=('pi', 100))
plt.xlabel(''),plt.ylabel(''),plt.grid(True),plt.title('Average Score / Album')
plt.show()
plt.figure(figsize=(16,5))
sns.lineplot(data=melted,x="#", y="Score", hue='Judge',linewidth=1.5,marker='o')
plt.xlabel(''),plt.ylabel(''),plt.grid(True),plt.title('Judge\'s Scores / Album')
plt.show()

Scores by Genre

plt.figure(figsize=(16,3))
ax = sns.barplot(data=master,x="Genre", y="AVG",alpha=0.65,errorbar=None)
for p in ax.patches:
    ax.annotate(format(p.get_height(), '.2f'), 
               (p.get_x() + p.get_width() / 2., p.get_height()), 
                ha = 'center', va = 'center', 
                size=10,xytext = (0, -10), 
                textcoords = 'offset points')
plt.xlabel(''),plt.ylabel('')
plt.show()

Scores by Categories

plt.figure(figsize=(16,8))
for i, cat in enumerate(["Origin","Gender","Group","POC"]):
    plt.subplot(2,2,i+1)
    ax = sns.barplot(data=master,x=cat, y="AVG",alpha=0.65,errorbar=None)
    plt.title("Score / " + cat),plt.xlabel(''),plt.ylabel('')
    for p in ax.patches:
        ax.annotate(format(p.get_height(), '.2f'), 
                   (p.get_x() + p.get_width() / 2., p.get_height()), 
                    ha = 'center', va = 'center', 
                    size=10,xytext = (0, -10), 
                    textcoords = 'offset points')   
plt.subplots_adjust(left=0.1,bottom=0.1,right=1,top=0.75,wspace=0.1,hspace=0.3)
plt.show()