Grafy dwudzielne

Analiza sieci w Pythonie – poziom średniozaawansowany

Eric Ma

Data Carpentry instructor and author of nxviz package

Grafy dwudzielne

  • Graf podzielony na dwa zbiory
  • Węzły są połączone tylko z węzłami z innych partycji
  • Kontrast: „jednopartycyjny"
Analiza sieci w Pythonie – poziom średniozaawansowany

Grafy dwudzielne: przykład

Przykład grafu dwudzielnego

Analiza sieci w Pythonie – poziom średniozaawansowany

Grafy dwudzielne w NetworkX

import networkx as nx
G = nx.Graph()

numbers = range(3) G.add_nodes_from(numbers, bipartite='customers')
letters = ['a', 'b'] G.add_nodes_from(letters, bipartite='products')
Analiza sieci w Pythonie – poziom średniozaawansowany

Grafy dwudzielne w NetworkX

list(G.nodes(data=True))
[(0, {'bipartite': 'customers'}),
 (1, {'bipartite': 'customers'}),
 (2, {'bipartite': 'customers'}),
 ('b', {'bipartite': 'products'}),
 ('a', {'bipartite': 'products'})]
Analiza sieci w Pythonie – poziom średniozaawansowany

Centralność stopnia

  • Definicja: $$\frac{\text{liczba sąsiadów}}{\text{liczba możliwych sąsiadów}}$$
  • Liczba możliwych sąsiadów zależy od typu grafu
Analiza sieci w Pythonie – poziom średniozaawansowany

Metryki centralności w grafach dwudzielnych

  • Mianownik: liczba węzłów w przeciwnej partycji, a nie wszystkich pozostałych węzłów

Przykład centralności w grafie dwudzielnym

Analiza sieci w Pythonie – poziom średniozaawansowany

Filtrowanie grafów

cust_nodes = [n for n, d in G.nodes(data=True) if  
                  d['bipartite'] == 'customers']
cust_nodes
[(0, {'bipartite': 'customers'}),
 (1, {'bipartite': 'customers'}),
 (2, {'bipartite': 'customers'})]
nx.bipartite.degree_centrality(G, cust_nodes)
{0: 0.5,
 1: 0.5,
 2: 1.0,
 'a': 0.333,
 'b': 1.0}
Analiza sieci w Pythonie – poziom średniozaawansowany

Czas na ćwiczenia!

Analiza sieci w Pythonie – poziom średniozaawansowany

Preparing Video For Download...