Esta práctica consiste en dos partes. En la primera se trabaja con 3 modelos de crecimiento de redes en NetLogo y en la segunda se explora con un script de python desarrollado por José Gerardo López (DMMSS-IIMAS) para hacer una visualización sencilla de una red .
PARTE 1
El objetivo de esta sección es explorar los patrones que pueden surgir en redes bajo los tres diferentes modelos de crecimiento que revisamos en clase: el modelo de crecimiento aleatorio de Erdös-Renyi, el modelo de vínculos preferenciales de Barabási-Albert y el modelo de mundo pequeño de Watts-Strogatz.
Para ello, abre Netlogo y busca los siguientes modelos en la librería de modelos, en el folder “Networks”:
a) Giant component
b) Preferential attachment
c) Small worlds
Una vez que te hayas familiarizado con las tres pestañas en la interfase de Netlogo, utiliza la pestaña de Información para conocer más acerca del modelo, cómo funciona y qué aspectos son importantes de cada uno.
Considera los siguientes puntos de cada modelo para incluir en tu reporte:
a) Componente gigante: el gráfico que se muestra en la ventana de netlogo muestra la fracción del total de nodos que forman parte del componente gigante (eje y), en función del número de conexiones promedio por nodo (eje x). ¿Qué indica la línea vertical que se muestra en el gráfico? ¿Qué le ocurre a la tasa de crecimiento del componente gigante después de este punto?
b) Vínculos preferenciales: ¿qué indican los dos gráficos que se muestran? ¿Qué patrones se aprecian cuando aumenta el número de nodos? ¿Cómo se relaciona ese patrón con la estructura de la red?
c) Mundo pequeño: ¿cómo es el coeficiente de acumulación (cc) y el camino promedio más corto (l) cuando surge la propiedad de pequeño mundo? Visualiza los gráficos para distintas probabilidades de reconexión (rewiring probabilities) y observa los patrones para cc y l. ¿Cuál es la relación entre la probabilidad de reconexión y la fracción de nodos reconectados? Es decir, ¿cuál es la relación entre los dos gráficos (rewire-one y rewire-all)? ¿Los patrones que se observan dependen del número de nodos en la red?
-------------------
PARTE 2
Esta sección consiste en revisar un análisis de datos de facebook (información aquí) en python desarrollado por José López (DMMSS-IIMAS) y, con base en el mismo, generar una visualización y un análisis básico de datos de twitter. La información proviene del Stanford Large Network Dataset Collection como parte del Stanford Network Analysis Project.
Revisa (ejecutando) el script para el análisis de datos de facebook. Puedes descargar el script y los datos y correrlos por tu parte o puedes hacerlo desde un Colab Notebook aquí: https://colab.research.google.com/drive/1ddaA3qwM0M5Sg4LdhcGbOc2XxS1T3o3v?usp=sharing. En caso de usar esta última opción, es necesario colocar los datos en la carpeta "content" del espacio de ejecución. Para ello, una vez que los descargues y abras el link de Colab Notebook , dirígete a la barra lateral del lado izquierdo y busca la opción "ARCHIVOS" (icono de un folder). Al picarlo, se desplegará la barra de archivos. En la parte superior de este pánel, busca la opción para cargar datos (flechita hacia arriba) y selecciona el archivo comprimido que descargaste (extensión .gz). Una vez hecho esto, sigue el script.
Apóyate en el script revisado para analizar en python los datos que puedes descargar aquí. Se trata de datos de twitter (información aquí). Esta red es muy grande y su tamaño puede causar dificultades computacionales por lo que recomendamos analizar un fragmento parcial de la misma (al menos usa 50000 filas de los datos), indicando claramente cuántos nodos y vínculos se mantuvieron en la sección analizada. En caso de que el fragmento de red que analices tenga más de un componente, haz el análisis sólo para el componente gigante.
Presenta en tu reporte un análisis breve de la red, incluyendo lo siguiente:
Descriptores básicos incluyendo el tipo de red, número de nodos y vínculos, tipo de vínculos.
Una visualización de la red de twitter donde el tamaño de los nodos sea indicativo de alguna medida de centralidad y el color de los nodos represente la pertenencia a módulos (indicando qué algoritmo de modularidad/detección de comunidades utilizaste).
Gráfico mostrando la distribución de grado de la red
Gráfico mostrando la distribución de caminos más cortos de la red
Gráfico mostrando la distribución del coeficiente de acumulación.
PARA LAS PERSONAS QUE NO HAN TRABAJADO CON PYTHON: Considera que puedes modificar el script en el colab para analizar los nuevos datos en lugar de los datos de facebook. En caso de que trabajes sobre el mismo script, deberás guardarlo como copia o con otro nombre. Revisa con cuidado la demostración con los datos de facebook para entender cómo modificar los comandos para el caso de la red de twitter. En su mayoría podrás usar los comandos con modificaciones mínimas salvo para la visualización de los módulos porque en los datos de twitter, los nodos están etiquetados de la misma forma que en los datos de facebook. Consultar a compañer@s que sí usan python o recurrir a herramientas como ChatGPT que pueden orientarte para adecuar el código.
--------------------
REPORTE (entregarse 19 de marzo por correo electrónico)
El reporte de esta práctica debe incluir:
Portada que incluya nombre y número de la práctica
Una breve introducción del tema de la práctica
Una breve descripción de la actividad que se desarrolló
Una discusión de cada uno de los modelos de crecimiento de redes, con énfasis particular en las propiedades emergentes que surgen de las reglas simples en las que consiste cada uno. Incluye los puntos a-c mencionados en la PARTE 1.
Un breve análisis de la red de twitter analizada con python, incluyendo los elementos señalados en la PARTE 2.
Una breve conclusión.