load(here::here("/data/influence_network.RData"))
disruptions = read_csv(here::here("data/artist-disruptions_summarized.csv"))
## Parsed with column specification:
## cols(
##   id = col_character(),
##   name = col_character(),
##   disruption_mean = col_double(),
##   confidence = col_double()
## )
degrees = read_csv(here::here("data/artist-network-degrees.csv"))
## Parsed with column specification:
## cols(
##   label = col_character(),
##   name = col_character(),
##   earliest_decade = col_double(),
##   genre = col_character(),
##   indegree = col_double(),
##   outdegree = col_double()
## )
disruptions = disruptions %>% 
    left_join(degrees, by = c("id" = "label", "name"))
skimr::skim(disruptions)
## Skim summary statistics
##  n obs: 14287 
##  n variables: 8 
## 
## ── Variable type:character ───
##  variable missing complete     n min max empty n_unique
##     genre     137    14150 14287   3  14     0       20
##        id       0    14287 14287  12  12     0    14287
##      name       0    14287 14287   1  61     0    14129
## 
## ── Variable type:numeric ─────
##         variable missing complete     n    mean    sd      p0       p25
##       confidence       0    14287 14287    0.8   0.12    0.49    0.75  
##  disruption_mean       0    14287 14287    0.17  0.19   -0.33    0.0015
##  earliest_decade    1553    12734 14287 1971.14 22.09 1890    1960     
##         indegree       0    14287 14287    8.4  29.81    1       1     
##        outdegree       0    14287 14287    3.91  5.5     0       0     
##      p50     p75    p100     hist
##     0.75    0.88    1    ▁▁▁▂▇▁▂▃
##     0.24    0.25    0.98 ▁▁▇▇▂▁▁▁
##  1980    1990    2010    ▁▁▁▃▃▇▆▂
##     2       5    1492    ▇▁▁▁▁▁▁▁
##     1       7      36    ▇▂▁▁▁▁▁▁
disruptions %>% 
    filter(outdegree > 0) %>% 
    ggplot(aes(x = confidence, y = disruption_mean)) + 
    geom_point(size = .8, alpha = .4, color = "#F58A07") 

disruptions %>% 
    filter(outdegree > 0) %>% 
    ggplot(aes(x = confidence)) + 
    geom_density(fill = "salmon")

disruptions %>% 
    filter(confidence > .9) %>% 
    ggplot(aes(x = disruption_mean)) +
    stat_ecdf(geom = "line") + 
    labs(
        x = "D", 
        y = "P(x < D)"
    )

disruptions %>% 
    filter(confidence >= .9, outdegree > 0) %>% 
    ggplot(aes(x = disruption_mean)) +
    geom_density(fill = "#F58A07", alpha = .6) + 
    labs(
        x = "D", 
        y = "Density" 
    )

disruptions %>% 
    filter(confidence >= .9, outdegree > 3) %>% 
    summarise(
        cor_d_i = cor(disruption_mean, indegree, method = "kendall"), 
        cor_d_o = cor(disruption_mean, outdegree, method = "kendall")
    )
## # A tibble: 1 x 2
##     cor_d_i cor_d_o
##       <dbl>   <dbl>
## 1 -0.000544  -0.198
disruptions %>% 
    filter(outdegree > 3) %>% 
    ggplot(aes(x = earliest_decade, y = confidence, group = earliest_decade)) + 
    geom_boxplot(coef = 1e3)
## Warning: Removed 25 rows containing missing values (stat_boxplot).

disruptions %>% 
    filter(confidence >= .9, outdegree >= 3) %>% 
    ggplot(aes(x = earliest_decade, y = disruption_mean, group = earliest_decade)) + 
    geom_boxplot(coef = 1e3) + 
    geom_jitter(width = .9, alpha = .4, color = "salmon", size = .7)
## Warning: Removed 12 rows containing missing values (stat_boxplot).
## Warning: Removed 12 rows containing missing values (geom_point).

disruptions %>%
    mutate(abs_disruption = abs(disruption_mean)) %>%
    filter(confidence >= .9,
           indegree >= 3,
           outdegree >= 3,
           abs_disruption > .05,
           earliest_decade >= 1950) %>%
    ggplot(aes(
        x = indegree,
        y = outdegree,
        size = abs_disruption,
        color = disruption_mean
    )) +
    geom_point(alpha = .6) +
    scale_x_log10() +
    scale_y_log10() +
    scale_color_gradient2(
        low = "#122338",
        mid = "#344065",
        high = "#FF96F6",
        midpoint = 0
    )

Most disruptive / destabilizing

With at least 3 in, 3 out connections

disruptions %>% 
    filter(confidence >= .9, outdegree >= 3, earliest_decade >= 1930) %>% 
    arrange(desc(disruption_mean)) %>% 
    slice(1:20) %>% 
    kable()
id name disruption_mean confidence earliest_decade genre indegree outdegree
mn0000150629 Édith Piaf 0.8165166 1.0000 1930 Vocal 53 3
mn0000771297 King Sunny Ade 0.6912309 0.9992 1960 International 9 3
mn0000793821 Frankie Knuckles 0.6520629 1.0000 1970 Electronic 30 3
mn0001053567 Mstislav Rostropovich 0.5909613 0.9999 1950 Classical 13 3
mn0000764636 The Clark Sisters 0.5904231 0.9999 1960 Religious 13 3
mn0000458759 Ofra Haza 0.5735662 0.9688 1960 International 4 6
mn0000183867 John Cage 0.5479167 1.0000 1930 Classical 168 3
mn0001916129 Rob Theakston 0.5016684 0.9401 2000 Electronic 3 3
mn0000806336 Los Tigres del Norte 0.5001526 0.9997 1970 Latin 15 7
mn0000155174 Alfred Brendel 0.4052864 0.9999 1970 Classical 13 4
mn0000591459 Tiësto 0.4012346 0.9991 1990 Electronic 10 4
mn0000760240 Bernard Herrmann 0.3887194 1.0000 1930 Stage & Screen 25 4
mn0000123363 Converge 0.3883421 1.0000 1990 Pop/Rock 33 6
mn0000835749 Scott Asheton 0.3780321 0.9999 1960 Pop/Rock 18 7
mn0000096752 Boyracer 0.3736559 0.9357 1990 Pop/Rock 3 4
mn0000678260 Wolfstone 0.3716683 0.9348 1990 Folk 3 3
mn0001052511 Too $hort 0.3503618 1.0000 1980 Rap 78 5
mn0000296750 K.M.D. 0.3342457 0.9992 1990 Rap 9 4
mn0000678769 Darkthrone 0.3247993 1.0000 1990 Pop/Rock 15 4
mn0000416785 Nino Rota 0.3185582 0.9972 1950 Stage & Screen 7 4

Among those for which All Music has a detailed influence profile

disruptions %>% 
    filter(confidence >= .9, outdegree >= 10, earliest_decade >= 1930) %>% 
    arrange(desc(disruption_mean)) %>% 
    slice(1:20) %>% 
    kable()
id name disruption_mean confidence earliest_decade genre indegree outdegree
mn0000238115 Sam Cooke 0.2902225 1.0000 1950 R&B 196 10
mn0000824022 Little Richard 0.2437560 1.0000 1950 Pop/Rock 118 14
mn0000754032 The Beatles 0.2248293 1.0000 1960 Pop/Rock 1492 27
mn0000924232 Sun Ra 0.1870232 1.0000 1940 Jazz 136 10
mn0000079016 Billie Holiday 0.1563372 1.0000 1930 Vocal 204 13
mn0000502371 Missy Elliott 0.1494450 1.0000 1990 Rap 58 10
mn0000118544 The Drifters 0.1466490 0.9988 1950 R&B 55 10
mn0000071514 Bob Marley 0.1389766 1.0000 1960 Reggae 195 16
mn0000180228 Elvis Presley 0.1384287 1.0000 1950 Pop/Rock 299 25
mn0000482334 The Specials 0.1373906 0.9991 1970 Pop/Rock 63 12
mn0000066915 Bob Dylan 0.1358401 1.0000 1960 Pop/Rock 784 34
mn0000840402 The Velvet Underground 0.1193616 1.0000 1960 Pop/Rock 507 12
mn0000591104 Mongo Santamaria 0.1186894 0.9761 1950 Latin 21 15
mn0000667669 Daft Punk 0.1043893 1.0000 1990 Electronic 130 15
mn0000184502 Ella Fitzgerald 0.1033960 1.0000 1930 Jazz 146 17
mn0000428126 J Dilla 0.0980411 1.0000 1980 Rap 69 12
mn0000753094 Son House 0.0977889 0.9339 1930 Blues 42 10
mn0000081083 Bill Monroe 0.0977678 0.9992 1940 Country 105 10
mn0000642542 Burt Bacharach 0.0966426 1.0000 1950 Pop/Rock 119 10
mn0000622805 Stevie Wonder 0.0965296 1.0000 1960 R&B 292 12

And the influentials:

disruptions %>%
    filter(confidence >= .9,
           outdegree >= 3,
           indegree >= 200,
           earliest_decade >= 1950) %>%
    arrange(desc(disruption_mean)) %>%
    slice(1:20) %>% 
    kable()
id name disruption_mean confidence earliest_decade genre indegree outdegree
mn0000754032 The Beatles 0.2248293 1.0000 1960 Pop/Rock 1492 27
mn0000180228 Elvis Presley 0.1384287 1.0000 1950 Pop/Rock 299 25
mn0000066915 Bob Dylan 0.1358401 1.0000 1960 Pop/Rock 784 34
mn0000840402 The Velvet Underground 0.1193616 1.0000 1960 Pop/Rock 507 12
mn0000622805 Stevie Wonder 0.0965296 1.0000 1960 R&B 292 12
mn0000771438 Black Sabbath 0.0767394 1.0000 1960 Pop/Rock 368 14
mn0000104714 Kraftwerk 0.0732059 1.0000 1970 Electronic 369 10
mn0000316834 Marvin Gaye 0.0723940 1.0000 1950 R&B 240 19
mn0000128099 James Brown 0.0705456 1.0000 1950 R&B 306 19
mn0000120521 Chuck Berry 0.0509062 1.0000 1950 Pop/Rock 235 18
mn0000270491 Joni Mitchell 0.0387401 1.0000 1960 Pop/Rock 297 20
mn0000334193 New Order 0.0386445 1.0000 1980 Pop/Rock 250 17
mn0000894465 The Rolling Stones 0.0332119 0.9997 1960 Pop/Rock 636 27
mn0000816890 Johnny Cash 0.0301674 0.9682 1950 Country 234 21
mn0000617196 Brian Eno 0.0224283 0.9999 1970 Pop/Rock 379 20
mn0000467203 Michael Jackson 0.0212812 1.0000 1960 R&B 218 22
mn0000645612 Can 0.0161475 0.9999 1960 Pop/Rock 237 12
mn0000346336 Pink Floyd 0.0148196 0.9961 1960 Pop/Rock 355 20
mn0000219203 U2 0.0134884 1.0000 1970 Pop/Rock 223 21
mn0000290812 Joy Division 0.0129287 0.9794 1970 Pop/Rock 259 15

Most consolidating

With at least 3 in, 3 out connections.

These don’t seem very relevant to mention.

disruptions %>% 
    filter(confidence >= .9, outdegree >= 3, earliest_decade >= 1950) %>% 
    arrange((disruption_mean)) %>% 
    slice(1:20) %>% 
    kable()
id name disruption_mean confidence earliest_decade genre indegree outdegree
mn0000178654 Pat Metheny Group -0.2484710 0.9679 1970 Jazz 4 5
mn0000519215 Tommy LiPuma -0.1600031 0.9699 1960 Pop/Rock 4 10
mn0000639005 George Carlin -0.1175748 0.9743 1960 Comedy/Spoken 38 14
mn0000077267 Bill Hicks -0.1132359 0.9954 1980 Comedy/Spoken 11 7
mn0000077283 Geto Boys -0.0957698 1.0000 1980 Rap 115 9
mn0000052151 Augustus Pablo -0.0743141 1.0000 1970 Reggae 18 10
mn0000942529 Buddy Guy -0.0741033 1.0000 1950 Blues 62 16
mn0000796661 Edwin Hawkins -0.0735451 0.9795 1960 Religious 11 6
mn0000673114 Marcus Miller -0.0699319 0.9891 1970 Jazz 9 11
mn0000382455 Master P -0.0695896 1.0000 1990 Rap 62 17
mn0000061479 The Five Satins -0.0694257 0.9925 1950 R&B 6 5
mn0000133832 Clark Terry -0.0683559 0.9862 1950 Jazz 17 5
mn0000238245 Denis Leary -0.0659235 0.9655 1990 Comedy/Spoken 4 4
mn0000617844 Albert King -0.0635637 1.0000 1950 Blues 88 11
mn0000210991 Destiny’s Child -0.0569464 0.9991 1990 R&B 34 15
mn0000066395 The Congos -0.0563830 0.9666 1970 Reggae 7 7
mn0000631774 The Byrds -0.0555672 1.0000 1960 Pop/Rock 399 16
mn0000100160 The Kinks -0.0555070 1.0000 1960 Pop/Rock 447 9
mn0000032071 Shirley Caesar -0.0551617 0.9594 1950 Religious 15 15
mn0000640338 The Caravans -0.0543817 0.9887 1950 Religious 9 15

Among those for which All Music has a detailed influence profile

disruptions %>% 
    filter(confidence >= .9, outdegree >= 10, earliest_decade >= 1950) %>% 
    arrange((disruption_mean)) %>% 
    slice(1:20) %>% 
    kable()
id name disruption_mean confidence earliest_decade genre indegree outdegree
mn0000519215 Tommy LiPuma -0.1600031 0.9699 1960 Pop/Rock 4 10
mn0000639005 George Carlin -0.1175748 0.9743 1960 Comedy/Spoken 38 14
mn0000052151 Augustus Pablo -0.0743141 1.0000 1970 Reggae 18 10
mn0000942529 Buddy Guy -0.0741033 1.0000 1950 Blues 62 16
mn0000673114 Marcus Miller -0.0699319 0.9891 1970 Jazz 9 11
mn0000382455 Master P -0.0695896 1.0000 1990 Rap 62 17
mn0000617844 Albert King -0.0635637 1.0000 1950 Blues 88 11
mn0000210991 Destiny’s Child -0.0569464 0.9991 1990 R&B 34 15
mn0000631774 The Byrds -0.0555672 1.0000 1960 Pop/Rock 399 16
mn0000032071 Shirley Caesar -0.0551617 0.9594 1950 Religious 15 15
mn0000640338 The Caravans -0.0543817 0.9887 1950 Religious 9 15
mn0000641994 Burning Spear -0.0511519 0.9999 1970 Reggae 28 15
mn0000577627 The Who -0.0501530 1.0000 1960 Pop/Rock 321 19
mn0000190946 Lefty Frizzell -0.0498810 0.9858 1950 Country 50 15
mn0000328014 Peter Tosh -0.0480335 1.0000 1960 Reggae 43 13
mn0000936206 Alabama -0.0477514 0.9986 1970 Country 36 13
mn0000028166 Slim Harpo -0.0429085 1.0000 1950 Blues 30 15
mn0000019241 Patty Loveless -0.0389642 0.9997 1970 Country 19 14
mn0000410219 Merle Haggard -0.0385216 0.9989 1960 Country 162 17
mn0000085448 The Heptones -0.0377065 0.9983 1960 Reggae 12 17

And the influentials:

disruptions %>%
    filter(confidence >= .9,
           outdegree >= 3,
           indegree >= 100,
           earliest_decade >= 1950) %>%
    arrange(disruption_mean) %>%
    slice(1:20) %>% 
    kable()
id name disruption_mean confidence earliest_decade genre indegree outdegree
mn0000077283 Geto Boys -0.0957698 1.0000 1980 Rap 115 9
mn0000631774 The Byrds -0.0555672 1.0000 1960 Pop/Rock 399 16
mn0000100160 The Kinks -0.0555070 1.0000 1960 Pop/Rock 447 9
mn0000577627 The Who -0.0501530 1.0000 1960 Pop/Rock 321 19
mn0000410219 Merle Haggard -0.0385216 0.9989 1960 Country 162 17
mn0000418740 Sex Pistols -0.0361565 1.0000 1970 Pop/Rock 279 24
mn0000051992 Big Star -0.0357604 1.0000 1970 Pop/Rock 241 21
mn0000022124 Slayer -0.0340211 0.9996 1980 Pop/Rock 204 16
mn0000866786 New York Dolls -0.0335911 1.0000 1970 Pop/Rock 140 19
mn0000852855 Roxy Music -0.0315301 1.0000 1970 Pop/Rock 179 17
mn0000501407 Motörhead -0.0262632 1.0000 1970 Pop/Rock 126 15
mn0000354105 Jimi Hendrix -0.0260625 1.0000 1960 Pop/Rock 422 35
mn0000531986 David Bowie -0.0234814 1.0000 1960 Pop/Rock 535 25
mn0000041874 The Beach Boys -0.0213193 0.9754 1960 Pop/Rock 511 15
mn0000607448 Al Green -0.0208624 0.9690 1960 R&B 114 12
mn0000084209 Kiss -0.0200609 1.0000 1970 Pop/Rock 159 23
mn0000260206 Van Halen -0.0196030 0.9999 1970 Pop/Rock 108 23
mn0000192382 Deep Purple -0.0192621 1.0000 1960 Pop/Rock 146 16
mn0000033161 Sly & the Family Stone -0.0188913 1.0000 1960 R&B 139 14
mn0000582313 The Zombies -0.0183663 1.0000 1960 Pop/Rock 148 20

Examples

visualize_influences = function(allmusic_id, network, node_info) {
    create_focal_network(allmusic_id, network, node_info) %>%
        ggraph(layout = "kk") +
        # geom_node_point(aes(colour = type, shape = order), size = 4) +
        geom_edge_link(aes(
            start_cap = label_rect(node1.name),
            end_cap = label_rect(node2.name)
        ),
        arrow = arrow(length = unit(2, 'mm'))) +
        geom_node_label(aes(label = name, color = type)) +
        # geom_node_label(aes(label = name)) +
        theme_void() +
        NULL

}

# visualize_influences("mn0000022845", influences, nodes)
# create_focal_network("mn0000022845", influences, nodes) %>%
#     activate()
# 
# create_focal_network("mn0000764636", influences, nodes) %>%
#     activate(nodes) %>%
#     as_tibble() %>% View
# 
# create_focal_network("mn0000754032", influences, nodes) %>%
#     activate(nodes) %>%
#     as_tibble() %>% View
# 
# visualize_influences("mn0001052511", influences, nodes)
# 
# create_focal_network("mn0000052151", influences, nodes) %>%
#     activate(nodes) %>%
#     as_tibble() %>% View