"""
# Trabajo con Networkx
"""
import pandas as pd
import numpy as np
import networkx as nx
# Configure plotting in Jupyter
from matplotlib import pyplot as plt
%matplotlib inline
plt.rcParams.update({
    'figure.figsize': (15, 15),
    'axes.spines.right': False,
    'axes.spines.left': False,
    'axes.spines.top': False,
    'axes.spines.bottom': False})
# Seed random number generator
import random
from numpy import random as nprand
seed = hash("Trabajo Con Networkx") % 2**32
nprand.seed(seed)
random.seed(seed)
"""
# Funciones a utilizar
"""
### Calculos
def calculos(G):
    betweenness = nx.betweenness_centrality(G, normalized=False)
    print("betweenness:")
    print(sorted(betweenness.items(), key=lambda x:x[1], reverse=True)[0:10])

    eigenvector = nx.eigenvector_centrality(G, max_iter=200)
    print("eigenvector:")
    print(sorted(eigenvector.items(), key=lambda x:x[1], reverse=True)[0:10])

    closeness = nx.closeness_centrality(G)
    print("closeness:")
    print(sorted(closeness.items(), key=lambda x:x[1], reverse=True)[0:10])

    clustering = nx.clustering(G)
    print("clustering:")
    print(sorted(clustering.items(), key=lambda x:x[1], reverse=True)[0:10])

    Avg_clustering = nx.average_clustering(G)
    print("AVG_clustering:")
    print(Avg_clustering)
    
def Funcion_calculo_graph(df):

    # Creamos las Matrices:
    Matriz_I = pd.crosstab(df.Nombre, df.Rut_empresa)
    Matriz_II = Matriz_I.T
    Matriz_adj = Matriz_II.dot(Matriz_I)
    ## Eliminamos la diagonal
    np.fill_diagonal(Matriz_adj.values, 0)
    
    G = nx.from_pandas_adjacency(Matriz_adj)

    # Calculasmos los pesos:
    edge_weights = [G.edges[v, w]["weight"] for v, w in G.edges]

    # Representamos la red:
    pos = nx.spring_layout(G, k=0.3, weight="weight")
    nx.draw_networkx(G, pos, width=4, node_color="#53FF15",
                     edge_color=edge_weights, edge_vmin=0, 
                     edge_vmax=5, edge_cmap=plt.cm.Blues,
                     with_labels=False)
    ## Calculos
    calculos(G)
"""
# 2001, considerar que se esta trbajando con matrices de adyacencia
"""
# Importamos los datos:
df_2001 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2001.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2001)
"""
# 2002
"""
# Importamos los datos:
df_2002 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2002.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2002)
"""
# 2003
"""
# Importamos los datos:
df_2003 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2003.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2003)
"""
# 2004
"""
# Importamos los datos:
df_2004 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2004.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2004)
"""
# 2005
"""
# Importamos los datos:
df_2005 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2005.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2005)
"""
# 2006
"""
# Importamos los datos:
df_2006 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2006.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2006)
"""
# 2007
"""
# Importamos los datos:
df_2007 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2007.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2007)
"""
# 2008
"""
# Importamos los datos:
df_2008 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2008.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2008)
"""
# 2009
"""
# Importamos los datos:
df_2009 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2009.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2009)
"""
# 2010
"""
# Importamos los datos:
df_2010 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2010.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2010)
"""
# 2011
"""
# Importamos los datos:
df_2011 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2011.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2011)
"""
# 2012
"""
# Importamos los datos:
df_2012 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2012.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2012)
"""
# 2013
"""
# Importamos los datos:
df_2013 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2013.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2013)
"""
# 2014
"""
# Importamos los datos:
df_2014 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2014.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2014)
"""
# 2015
"""
# Importamos los datos:
df_2015 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2015.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2015)
"""
# 2016
"""
# Importamos los datos:
df_2016 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2016.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2016)
"""
# 2017
"""
# Importamos los datos:
df_2017 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2017.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2017)
"""
# 2018
"""
# Importamos los datos:
df_2018 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2018.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2018)
"""
# 2019
"""
# Importamos los datos:
df_2019 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2019.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2019)
"""
# 2020
"""
# Importamos los datos:
df_2020 = pd.read_csv(r"C:\Users\sando\Desktop\Investigación\Code\Coding datos Chile\ Matrices & Networkx\Matrices desde limpieza\Matriz_2020.csv")
# Aplicamos las funciones:
Funcion_calculo_graph(df_2020)