Grupy-SP 10 Anos!

Grafos e uma Análise Matemática do Jazz nos anos 60


Bernardo Fontes


São Paulo/SP

13 de Novembro de 2017

Desenvolvimento do Jazz Modal

Miles Davis - Kind of Blue (1959)

Desenvolvimento do Jazz Modal

John Coltrane - A Love Supreme (1965)

Estruturas Enxutas

Duke Ellington, Charles Mingus e Max Roach - Money Jungle (1962)

Brasil, irmão

Stan Getz & João Gilberto - Getz/Gilberto (1964)

Influências externas

Miles Davis - Miles In The Sky (1968)

Jazz Fusion

Herbie Hancock - Fat Albert Rotunda (1969)

## Mas, e aí? - Esses são só uns nomes... E todo o **resto** da galera? - Quem **tocou** com quem? - Quem **gravou** com mais gente? - **Teoria dos Grafos** é uma bom caminho para a resposta!
## jazz_musicians_graph.json ```python { 'nodes': { "2808823": { "name": "Johnny Allen", "roles": ["Bass"], "type": "MUSICIAN" }, "325859": { "name": "Danny Barcelona", "roles": ["Drums"], "type": "MUSICIAN" }, "3942191-Cugat's Golden Goodies": { "year": 1963, "type": "RELEASE", "title": "Cugat's Golden Goodies" }, "5004667-The Shearing Touch": { "year": 1960, "type": "RELEASE", "title": "The Shearing Touch" }, ... }, 'links': [ ["2808823", "325859", {'type': 'PLAYED_WITH', 'release_id': "5004667-The Shearing Touch", 'roles': ['Bass']}, ["2808823", "5004667-The Shearing Touch", {'type': 'RECORDED', 'roles': ['Bass']}, ... ] } ```

Resultado (RECORDED)

Resultado (PLAYED_WITH)

## Três Perguntas - Quem participou de mais discos? - **Centralidade de grau no grafo RECORDED** - Quem são os músicos mais influentes na rede? - **Centralidade de contribuição no grafo PLAYED_WITH** - Quais são os discos mais influentes na rede? - **Centralidade de contribuição no grafo RECORDED**
### Montando o grafo completo ``` import networkx as nx master_graph = nx.MultiDiGraph() with open(GRAPH_JSON_FILE) as fd: graph_data = json.load(fd) master_graph.add_nodes_from(graph_data['nodes'].items()) master_graph.add_edges_from(graph_data['edges']) print(master_graph.number_of_node()) print(master_graph.number_of_edges()) ```
### Grafo `RECORDED` ``` def extract_recorded_graph(master_graph): graph = nx.Graph() graph.add_nodes_from(master_graph.nodes()) flatten = flatten_edges(master_graph) for source, target, rel_data in flatten: if rel_data['type'] != 'RECORDED': continue graph.add_edge(source, target, **rel_data) return graph recorded_graph = extract_recorded_graph(master_graph):) ```
### Grafo `PLAYED_WITH` ``` def extract_played_with_graph(master_graph): graph = nx.Graph() for n, data in master_graph.nodes(data=True): if data['type'] == 'MUSICIAN': graph.add_node(n, **data) flatten = flatten_edges(master_graph) for source, target, data in flatten: if not data['type'] == 'PLAYED_WITH': continue if not graph.has_edge(source, target): graph.add_edge(source, target, weight=0, **data) graph.edges[(source, target)]['weight'] += 1 return graph played_with_graph = extract_played_with_graph(graph) ```
### Métricas ``` def top_10_recorders(recorded_graph, master_graph): centralities = nx.degree_centrality(recorded_graph) is_musician = lambda n: master_graph.node[n]['type'] == 'MUSICIAN' sorted_centralities = sorted( centralities, key=centralities.get, reverse=True ) sorted_nodes = [n for n in sorted_centralities if is_musician(n)] return sorted_nodes[:10], centralities def top_10_musicians_influence(played_with_graph, master_graph): centralities = nx.eigenvector_centrality(played_with_graph, weight='weight') sorted_centralities = sorted( centralities, key=centralities.get, reverse=True ) return sorted_centralities[:10], centralities def top_10_albuns(recorded_graph, master_graph): centralities = nx.eigenvector_centrality(recorded_graph) is_album = lambda n: master_graph.node[n]['type'] == 'RELEASE' sorted_centralities = sorted( centralities, key=centralities.get, reverse=True ) sorted_nodes = [n for n in sorted_centralities if is_album(n)] return sorted_nodes[:10], centralities ```
### Top 10 Recorders ``` 1) Ron Carter - Baixo 2) George Duvivier - Baixo 3) Richard Davis (2) - Baixo 4) Clark Terry - Trompete 5) Grady Tate - Percurssão 6) Kenny Burrell - Guitarra 7) Bob Cranshaw - Baixop 8) Jerome Richardson - Sax 9) Paul Chambers (3) - Baixo 10) Herbie Hancock - Piano ```
### Top 10 Prolific Musicians ``` 1) Ernie Royal - Trompete 2) Jerome Richardson - Sax 3) Grady Tate - Percursão 4) Jimmy Cleveland - Trombone 5) George Duvivier - Baixo 6) Clark Terry - Trompete 7) Urbie Green - Trombone 8) Joe Newman - Tropmete 9) Richard Davis (2) - Baixo 10) Jim Buffington - Trompete ```

5 álbuns mais influentes na rede

## O que dá mais pra fazer? - Base de dados mais completa: allmusic.com - Como chegar de um músico a outro? - Quais são os núcleos? - Alteração da rede ao longo do tempo - Estudar outros estilos

Um indicação

9) Gil Evans - The Individualism of Gil Evans (1964)

Obrigado!


Bernardo Fontes


twitter.com/bbfontes

github.com/berinhard

pessoas.cc

bernardoxhc@gmail.com