Grazie per la risposta.
Il Grafo mi pare sia costruito bene anche perchè il betweenneess_centrality e il closeness_centrality (seguendo le indicazioni per il DiGraph ) tornano correttamente.
Il coeff di clustering NO, almeno utilizzando la libreria nx.clustering(DiGraph())
Ho provato a controllare se ci fosse qualche parametro ma nulla, perchè nel caso del closeness ho dovuto invertire il grafo e attivare un parametro in questo modo:
- Codice:
# Le info del file le ho inserite in un pd.DataFrame
M_D = nx.MultiDiGraph()
[M_D.add_edge(df[0][i], df[2][i], label= df[1][i]) for i in range(len(df)]
D = nx.DiGraph(M_D)
nx.closeness_centrality(D.reverse(), wf_improved=False) # torna correttamente
# (il parametro wf_improved è di Default True per i Grafi Non Orientati = nx.Graph() )
# wf_improved=False per i Grafi Orientati = nx.DiGraph()
nx.clustering(D) # tornano solo alcuni valori
Per questa funzione non ho trovato parametri significativi boh
Ho poi trovato codice sul web :
- Codice:
C = dict()
for node in n:
neighbours=[n_ for n_ in nx.neighbors(D, node)]
n_neighbors=len(neighbours)
n_links=0
if n_neighbors>1:
for node1 in neighbours:
for node2 in neighbours:
if D.has_edge(node1, node2):
n_links+=1
n_links/=2 #because n_links is calculated twice
clustering_coefficient = n_links/(0.5*n_neighbors*(n_neighbors-1))
else:
clustering_coefficient = 0.0
C[node] = (clustering_coefficient)
Mi restituisce valori diversi dal sia da quelli attesi che da quelli calcolati con la funzione di libreria. Boh
Ho trovato anche questo:
- Codice:
clusteringDict = dict()
for node in G.nodes():
neighboursOfNode = []
nodesWithMutualFriends = []
# store all neighbors of the node in an array so we can compare
for neighbour in G.neighbors(node):
neighboursOfNode.append(neighbour)
for neighbour in G.neighbors(node):
for second_layer_neighbour in G.neighbors(neighbour):
# compare if any second degree neighbour is also a first degree neighbour (this makes a triangle)
# if so, append it to the mutual friends list
if second_layer_neighbour in neighboursOfNode:
nodesWithMutualFriends.append(second_layer_neighbour)
# filter duplicates from the mutual friend array
nodesWithMutualFriends = list(nodesWithMutualFriends) #set
clusteringCoefficientOfNode = 0
# apply coefficient formula to calculate
if len(nodesWithMutualFriends):
A = float(len(nodesWithMutualFriends))
B = len(G.neighbors(node))
C = (B - 1)
clusteringCoefficientOfNode = A/(B*C)
clusteringDict[node] = (clusteringCoefficientOfNode)
Valori diversi anche tra questi due codici.
Con la funzione di libreria nc.clustering() il valore come un 0.59..(atteso) viene calcolato dalla funzione come 0.611111. Un 0.051 (corretto) invece come 0.076
Grazie