Documentos de Académico
Documentos de Profesional
Documentos de Cultura
No He Hecho Nada
No He Hecho Nada
ASIGNATURA:
ADMINISTRACION DE DATOS MASIVOS
TEMA:
“ACTIVIDAD 3.1 PROYECTO ALMACEN DE DATOS”
ALUMNOS:
NICOLAS CASTILLO ANA PAOLA
RIVERA ORTAÑEZ VICTOR
HERNANDEZ TRUJILLO JUAN CARLOS
CARRERA:
ING. SISTEMAS COMPUTACIONES
7mo. SEMESTRE
DOCENTE:
PROF. EDUARDO VAZQUEZ ZAYAS
NOVIEMBRE 2023
DETECCION DE COMUNIDADES EN GRAFOS Y
REDES
La identificación de comunidades y la partición de grafos son técnicas de análisis
de redes que permiten dividir un grafo en grupos o comunidades de nodos que
están altamente conectados entre sí, y que tienen una conexión más débil con el
resto de los nodos del grafo.
La identificación de comunidades se basa en la detección de estructuras
modulares en grafos, lo que puede ser útil para clasificar redes de distintos tipos,
como redes sociales, financieras, de transporte, biológicas, etc. Una comunidad
puede ser considerada como un subconjunto importante de nodos que
representan un grupo de individuos o entidades que están estrechamente
relacionados en la red. Una partición puede dividir el grafo en varios módulos o
comunidades, donde cada nodo pertenece a uno y sólo uno de ellos.
Uno de los algoritmos más populares para lograr esta tarea es el algoritmo de
Louvain, que se usa para maximizar el coeficiente de modularidad (modularity
coefficient) que mide la medida en que una red se divide en comunidades. Este
algoritmo se basa en dos pasos: (1) asignar todos los nodos a su propia
comunidad, y (2) en cada iteración, mover nodos a otras comunidades si eso
aumenta la modularidad. El algoritmo se detiene cuando se alcanza un máximo
local, es decir, cuando no se pueden realizar más cambios que mejoren la
modularidad, y se devuelve el conjunto de comunidades resultantes.
Python cuenta con varios paquetes que implementan este tipo de análisis de
comunidades y particiones, como NetworkX, igraph, Louvain, etc. Con NetworkX,
por ejemplo, podemos usar la función community.modularity() para obtener la
modularidad de una partición de comunidades, y la
función community.greedy_modularity_communities() para aplicar el algoritmo de
Louvain y obtener las comunidades en un grafo.
..
Practica
Procedimiento:
Una red de grafos es una estructura matemática que consiste en nodos (también
llamados vértices) y conexiones entre esos nodos (también llamadas aristas). Los
grafos son utilizados para representar y modelar relaciones entre entidades. Cada
nodo en un grafo puede representar una entidad (como una persona, una ciudad,
una página web, etc.), y cada arista representa una relación o conexión entre esas
entidades.
Grafo No Dirigido: Las aristas no tienen dirección. La conexión entre dos nodos
es bidireccional.
Grafo Dirigido: Las aristas tienen dirección. La conexión entre dos nodos puede
ser unidireccional.
Aplicaciones y Usos de las Redes de Grafos:
# Mostrar el gráfico
plt.show()
# Agregar nodos
G.add_nodes_from(range(1, 6))
# Dibujar el grafo
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=800, node_color='lightblue',
font_weight='bold', font_size=10, font_color='black', edge_color='gray')
# Resaltar el coordinador
nx.draw_networkx_nodes(G, pos, nodelist=[coordinator], node_color='red',
node_size=800)
# Mostrar el gráfico
plt.show()
Red de Gatekeeper:
import networkx as nx
import matplotlib.pyplot as plt
# Dibujar el grafo
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=800, node_color='lightblue',
font_weight='bold', font_size=10, font_color='black', edge_color='gray')
# Resaltar el gatekeeper
nx.draw_networkx_nodes(G, pos, nodelist=[gatekeeper], node_color='red',
node_size=800)
# Mostrar el gráfico
plt.show()
Definición: Estructura en la que todos los nodos están conectados entre sí,
promoviendo la colaboración y la interconexión.
Ejemplo Práctico: Una red social en la que todos los usuarios pueden interactuar
directamente entre sí, fomentando la colaboración y el intercambio de información.
import networkx as nx
import matplotlib.pyplot as plt
# Definir nodos
nodes = range(1, 6)
# Dibujar el grafo
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=800, node_color='lightblue',
font_weight='bold', font_size=10, font_color='black', edge_color='gray')
# Mostrar el gráfico
plt.show()
Red de Dual Group Member:
Definición: Estructura en la que los nodos están divididos en dos grupos y cada
nodo pertenece a ambos grupos.
Ejemplo Práctico: En una red de investigación, donde algunos científicos trabajan
tanto en la teoría (Group_A) como en la aplicación práctica (Group_B) de un
proyecto.
import networkx as nx
import matplotlib.pyplot as plt
# Dibujar el grafo
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=800, font_weight='bold',
font_size=10, font_color='black', edge_color='gray')
# Mostrar el gráfico
plt.show()
Red de Superconector:
import networkx as nx
import matplotlib.pyplot as plt
# Definir nodos
nodes = range(1, 11)
# Dibujar el grafo
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=800, font_weight='bold',
font_size=10, font_color='black', edge_color='gray')
# Mostrar el gráfico
plt.show()
CONCLUSIÓN
N.C.A.P.
R.O.V.
H.T.J.C
En conclusión, la detección de comunidades en redes y grafos es una disciplina
valiosa que proporciona herramientas para analizar la estructura interna de redes
complejas. Al identificar grupos densamente interconectados de nodos, esta área
de estudio permite revelar patrones organizativos y relaciones específicas dentro
de una red.
En resumen, la detección de comunidades no solo brinda una comprensión
profunda de la topología de las redes, sino que también tiene aplicaciones
prácticas en diversos campos, contribuyendo significativamente a la toma de
decisiones informada y la optimización de recursos.