<jupyter_start><jupyter_text>Clone directory<jupyter_code>!git clone https://github.com/pm-lab-polito/pm_networks
import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
from networkx import community
import community as community_louvain<jupyter_output><empty_output><jupyter_text>Importa i networks<jupyter_code>G0 = nx.read_gml('pm_networks/graphml/penthouse_00.gml')
G1 = nx.read_gml('pm_networks/graphml/penthouse_01.gml')
G2 = nx.read_gml('pm_networks/graphml/penthouse_02.gml')
list_net = [G0,G1,G2]<jupyter_output><empty_output><jupyter_text>Creiamo le comunità con l'algoritmo python louvain (massimizza la modularità delle comunità)<jupyter_code>#le communities del louvain funzionano su undirected networks, quindi le trasformiamo in undirected momentaneamente
H0 = G0.to_undirected()
partition0 = community_louvain.best_partition(H0)
H1 = G1.to_undirected()
partition1 = community_louvain.best_partition(H1)
H2 = G2.to_undirected()
partition2 = community_louvain.best_partition(H2)
lista_partizioni =[partition0 ,partition1,partition2]<jupyter_output><empty_output><jupyter_text>Plotta i networks con i colori che corrispondono alla community<jupyter_code>for i in range (len(list_net)):
  nx.draw(list_net[i], node_color = list(lista_partizioni[i].values()), with_labels=True)
  plt.show()<jupyter_output><empty_output><jupyter_text>Calcola le metriche del network<jupyter_code>list_density = []
list_SH_path = []
list_node_conn = []
list_node_trans = []

for i in list_net:
  Den = nx.density(i)
  sh = nx.average_shortest_path_length(i)
  conn = nx.average_node_connectivity(i)
  #trans = nx.transitivity(1) # only for undirected
  list_density.append(Den)
  list_SH_path.append(sh)
  list_node_conn.append(conn)
  #list_node_trans.append(trans)
report = pd.DataFrame(list_density, columns=['Density'])
report['Shortest_path'] = list_SH_path
report['Node_conn']= list_node_conn
report
report_delta = report/report.shift(1)-1
report_delta<jupyter_output><empty_output><jupyter_text>Calcola le metriche relative ai singoli nodi (per ora degree e betweness centrality) Degree<jupyter_code># calcoliamo la degree per ogni nodo
list_metr_nodes_degree = []
A = 0
for i in list_net:
  colonna = ("G"+str(A)+"_Degree")
  nodi = pd.DataFrame()
  nodi = pd.DataFrame((nx.degree(i)), columns = ['Nodes', colonna])
  nodi = nodi.set_index(['Nodes'], drop=True)
  nodi[colonna]=nodi[colonna]/nodi[colonna].sum() #normalizziamo il grado
  
  list_metr_nodes_degree.append(nodi)
  A = A+1<jupyter_output><empty_output><jupyter_text>a<jupyter_code>#plottiamo la degree dei singoli nodi
for i in range (3):
  list_metr_nodes_degree[i].plot(kind='bar',figsize=(20,10))<jupyter_output><empty_output><jupyter_text>Plottiamo la distribuzione normalizzata della degree<jupyter_code>#plottiamo la distribuzione normalizzata con istogrammi

for i in range (3):
  colonna = ("G"+str(i)+"_Degree")
  list_metr_nodes_degree[i][colonna].value_counts(normalize = True, bins = 3).plot(kind='bar')
  plt.show()<jupyter_output><empty_output><jupyter_text>Confrontiamo la degree dei nodi PERMANENTI nelle 3 fasi del progetto<jupyter_code>#uniamo i DF per vedere come cambia la degree del nodo nelle tre fasi
mappa_degree = list_metr_nodes_degree[0]
for i in range (1,3):
  
  mappa_degree = mappa_degree.join(list_metr_nodes_degree[i])

mappa_degree = mappa_degree/mappa_degree.sum()


mappa_degree.plot(kind='bar', figsize=(10,5))
plt.title("confronto degree nodi nella 3 fasi normalizzata (solo nodi costanti")<jupyter_output><empty_output><jupyter_text>Centrality<jupyter_code># calcoliamo la centraility per ogni nodo
list_metr_nodes_centrality = []
A = 0
for i in list_net:
  
  colonna = ("G"+str(A)+"_B_centrality")
  nodi = pd.DataFrame(nx.betweenness_centrality(i).values(), index= nx.betweenness_centrality(i).keys(), columns=[colonna])
  list_metr_nodes_centrality.append(nodi)
  A = A+1

#plottiamo la centrality dei singoli nodi
for i in range (3):
  list_metr_nodes_centrality[i].plot(kind='bar',figsize=(20,10))<jupyter_output><empty_output><jupyter_text>Plottiamo la distribuzione normalizzata della Centrality<jupyter_code>#plottiamo la distribuzione normalizzata con istogrammi
for i in range (3):
  colonna = ("G"+str(i)+"_B_centrality")
  list_metr_nodes_centrality[i][colonna].value_counts(normalize = True, bins = 3).plot(kind='bar')
  plt.show()<jupyter_output><empty_output><jupyter_text>Confrontiamo la centrality dei nodi PERMANENTI nelle 3 fasi del progetto<jupyter_code>#uniamo i DF per vedere come cambia la centralità del nodo nelle tre fasi
mappa_centrality = list_metr_nodes_centrality[0]
for i in range (1,3):
  mappa_centrality = mappa_centrality.join(list_metr_nodes_centrality[i])

mappa_centrality = mappa_centrality/mappa_centrality.sum()

mappa_centrality.plot(kind='bar', figsize = (10,5))
mappa_degree.plot(kind='bar', figsize=(10,5))<jupyter_output><empty_output><jupyter_text>disegna più grande per leggibilità<jupyter_code>plt.figure(figsize=(10,10))
nx.draw(G2, node_color = list(lista_partizioni[2].values()), with_labels=True, font_size=10, node_size=400)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11496492595479345, 'fraction_numerical': 0.015003897116134061, 'mean_word_length': 8.052910052910052, 'pattern_counts': {'":': 0, '<': 53, '<?xml version=': 0, '>': 53, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '13', 'dir': 'jupyter-structured-clean-dedup', 'id': '590551', 'license': 'MIT', 'n_tokens_mistral': 2023, 'n_tokens_neox': 1979, 'n_words': 357, 'path': 'notebooks/test1_versione2.ipynb', 'repo_name': 'pm-lab-polito/pm_networks', 'size': '5132'}