Está en la página 1de 77

UNIVERSITAT JAUME I

II31
SISTEMAS INFORMTICOS
INGENIERA INFORMTICA CURSO
2011 - 2012

Memoria Tcnica del Proyecto

Desarrollo de herramientas
para el anlisis de redes
sociales

Proyecto presentado por el Alumno:

Miguel ngel Martnez Gregorio

Dirigido por Ral Montoliu Cols

Resumen

Resumen
Este documento presenta la memoria del proyecto para la asignatura Sistemas
Informticos (II31).
El objetivo del proyecto consiste en la creacin y utilizacin de una serie de
herramientas para realizar el estudio de una red social. La red social sometida a
estudio estar formada por cualquier grupo de personas relacionadas entre s por una
lista de referencias (bibliografa) almacenada en un fichero BibTex.
Se ha desarrollado una aplicacin que obtiene una serie de ficheros de salida a partir
de un fichero BibTex. Los ficheros de salida obtenidos estn formados por una serie de
informes y distintos documentos de entrada del programa Pajek. Para la obtencin de
diagramas y su posterior anlisis se utilizan los programas Pajek y Inkscape. Para la
mejor visualizacin de los resultados, stos han sido alojados en un sitio web.
Para la obtencin de resultados, se ha utilizado principalmente la red formada por el
instituto de investigacin INIT (Institute of New Imaging Technologies) de la Universtiat
Jaume I.

Palabras clave
Red social, estructuras de datos, teora de grafos, sociologa

ndice general

II

ndice general

ndice general
1.

Introduccin .................................................................................................... 1
1.1. Motivacin ........................................................................................................ 1
1.2. Conceptos ......................................................................................................... 2
1.2.1. Red social .................................................................................................. 2
1.2.2. Teora de grafos ........................................................................................ 2
1.2.3. BibTex ....................................................................................................... 2
1.2.4. Pajek ......................................................................................................... 3
1.3. Objetivos ........................................................................................................... 3
1.3.1. Herramientas utilizadas ............................................................................ 3
1.4. Organizacin del documento ........................................................................... 4

2.

Planificacin .................................................................................................... 5
2.1.
2.2.
2.3.

3.

Identificacin de las tareas. .............................................................................. 5


Planificacin inicial ........................................................................................... 6
Planificacin real............................................................................................... 7

Desarrollo del proyecto ................................................................................... 9


3.1. Anlisis .............................................................................................................. 9
3.1.1. Anlisis BibTex .......................................................................................... 9
3.1.2. Anlisis estructuras de datos .................................................................. 10
3.1.3. Anlisis aplicacin ................................................................................... 11
3.2. Diseo ............................................................................................................. 11
3.2.1. Diseo Estructuras de Datos .................................................................. 11
3.2.2. Diseo funciones .................................................................................... 12
3.3. Implementacin.............................................................................................. 14
3.4. Funcionamiento .............................................................................................. 15

4.

Tutorial Pajek ................................................................................................ 17


4.1. Anlisis ............................................................................................................ 17
4.2. Aspectos generales ......................................................................................... 17
4.3. Estructura del fichero de entrada .................................................................. 19
4.3.1. Fichero .net ............................................................................................. 19
4.3.2. Fichero .vec ............................................................................................. 20
4.4. Obtencin de diagramas ................................................................................ 21
4.4.1. Reduccin de la red ................................................................................ 21
4.4.2. Mtodo Louvain...................................................................................... 21
4.4.3. Centralidad ............................................................................................. 22
4.4.4. Distancia de un nodo .............................................................................. 23
4.4.5. Series Temporales .................................................................................. 23
4.4.6. Ventana Draw ......................................................................................... 24
4.5. Edicin de diagramas con Inkscape ................................................................ 26
4.5.1. Modificar elementos .............................................................................. 26

5.

Pruebas y Resultados ..................................................................................... 29


III

ndice general
5.1. Objetivo .......................................................................................................... 29
5.2. Mtodo ........................................................................................................... 29
5.3. Resultado ........................................................................................................ 30
5.3.1. Miembros INIT ........................................................................................ 30
5.4. Total relaciones INIT ....................................................................................... 42
5.5. Idiap ................................................................................................................ 46
6.

Conclusiones ................................................................................................. 49
6.1.
6.2.
6.3.

A.

Conclusiones objetivas ................................................................................... 49


Conclusiones personales ................................................................................ 49
Posibles ampliaciones ..................................................................................... 50

Cdigo fuente ................................................................................................ 52

IV

ndice de figuras

ndice de figuras
Figura 3-1: Ejemplo fichero BibTex................................................................................... 9
Figura 3-2: TPublicacin ................................................................................................. 11
Figura 3-3: TPublicaciones .............................................................................................. 12
Figura 3-4: TMiembros ................................................................................................... 12
Figura 3-5: TSecciones .................................................................................................... 12
Figura 3-6: TRelacion ...................................................................................................... 12
Figura 3-7: TRelaciones................................................................................................... 12
Figura 3-8: Funcionamiento AnalisisRS.cpp ................................................................... 15
Figura 3-10: Men aplicacin ......................................................................................... 16
Figura 3-9: Ejemplo miembros.txt .................................................................................. 16
Figura 4-1: Pajek pgina principal .................................................................................. 18
Figura 4-2: Pantalla reporte Pajek .................................................................................. 18
Figura 4-3: Ventana visualizacin Pajek ......................................................................... 19
Figura 4-4: Ejemplo fichero .net ..................................................................................... 20
Figura 4-5: Ejemplo fichero .vec ..................................................................................... 20
Figura 4-6: Obtener reduccin ....................................................................................... 21
Figura 4-7: Obtener Louvain ........................................................................................... 22
Figura 4-8: Obtener centralidad ..................................................................................... 22
Figura 4-9: Obtener distancia ......................................................................................... 23
Figura 4-10: Ejemplo fichero .net temporal ................................................................... 24
Figura 4-11: Obtener red temporal ................................................................................ 24
Figura 4-12: Ventana draw ............................................................................................. 25
Figura 4-13: Pantalla principal Inkscape ......................................................................... 26
Figura 5-1: Detalle Mtodo Louvain .............................................................................. 32
Figura 5-2: Detalle secciones INIT .................................................................................. 32
Figura 5-3: grado nodal .................................................................................................. 33
Figura 5-4: Trabajos publicados...................................................................................... 34
Figura 5-5: Detalle artculos publicados ......................................................................... 35
Figura 5-6: Detalle distancia Raul Montoliu ................................................................... 36
Figura 5-7: Grfica evolucin temporal .......................................................................... 37
Figura 5-8: INIT ao 2000 ............................................................................................... 37
Figura 5-9:INIT ao 2006 ................................................................................................ 38
Figura 5-10: INIT ao 2012 ............................................................................................. 38
Figura 5-11: Publicaciones por seccin .......................................................................... 40
Figura 5-12: Artculos por seccin .................................................................................. 41
Figura 5-13: Detalle miembros/no miembros ................................................................ 42
Figura 5-14: Artculos de miembros/no miembros ........................................................ 43
Figura 5-15: Diagrama Wikipedia ................................................................................... 43
Figura 5-16: Detalle Idiap ............................................................................................... 46
Figura 5-17: Idiap artculos publicados........................................................................... 47

ndice de tablas

VI

ndice de tablas

ndice de tablas
Tabla 2-1: Planificacin inicial .......................................................................................... 6
Tabla 2-2: Planificacin real.............................................................................................. 7
Tabla 5-1: Ranking centralidad ....................................................................................... 33
Tabla 5-2: Ranking trabajos publicados .......................................................................... 34
Tabla 5-3: Ranking artculos publicados ......................................................................... 35
Tabla 5-4: Evolucin temporal miembros del INIT ......................................................... 37
Tabla 5-5: Informe miembros del INIT ........................................................................... 39
Tabla 5-6: Informe secciones .......................................................................................... 40
Tabla 5-7: Datos Pajek solo miembros ........................................................................... 41
Tabla 5-8: Datos Pajek total ............................................................................................ 44
Tabla 5-9: Ranking miembros/no miembros .................................................................. 45
Tabla 5-10: Datos Pajek Idiap ......................................................................................... 47
Tabla 5-11: Ranking trabajos publicados Idiap ............................................................... 48

VII

ndice de tablas

VIII

1.1 Motivacin

1. Introduccin
Este captulo sirve como aproximacin a algunos conceptos sobre la temtica del
proyecto. Tambin se explican las motivaciones que nos han llevado a afrontar este
trabajo y como se ha abordado su realizacin.

1.1. Motivacin
Una red social est formada por cualquier grupo de personas que tengan alguna
relacin entre s. El grupo de personas que forman una empresa, un instituto de
investigacin o un equipo de baloncesto forman una red social. El anlisis de estas
redes, utilizando los mtodos apropiados, nos puede revelar la importancia que tiene
cada miembro dentro de ella. Tambin nos permite obtener valores relativos a la red
en conjunto, como su fortaleza o su cohesin.
La automatizacin que proporcionan los ordenadores y el aumento del poder de
computacin han facilitado el estudio de problemas en los que se parte de una gran
cantidad de valores. El estudio de redes sociales se encuentra dentro de este grupo, ya
que el aumento en la complejidad de una red crece exponencialmente con el nmero
de nodos que posee.
Por otro lado, la mayora de grupos de investigacin almacenan las publicaciones que
realizan todos sus miembros en documentos que tienen una estructura fija, esta
estructura viene dada por la herramienta BibTex. Se utilizarn estos documentos para
obtener los datos que formen nuestra red social. Las redes sociales que se generen
para la realizacin del proyecto estarn constituidas por miembros de un grupo de
investigacin. La relacin que une a dos miembros, ser el hecho de si han realizado
alguna publicacin juntos.
Aprovechando la gran cantidad de documentacin y de herramientas sobre el estudio
de redes sociales y las publicaciones en BibTex, se pretende crear un mtodo
semiautomtico para crear y analizar una red social a partir de una lista de
publicaciones. Se pretende crear un programa que obtenga una serie de datos a partir
de un fichero .bib, los almacene en una estructura de datos y genere una serie de
estudios y de ficheros de datos que puedan ser interpretados por el programa Pajek.
Utilizando los programas Pajek e Inkscape se obtendrn una serie de diagramas para
visualizar la red social que se estudia.
Para obtener resultados y probar la aplicacin, se estudia principalmente la red social
que forman los integrantes del instituto de investigacin INIT de la Universitat Jaume I.
Los grupos de investigacin obtienen subvenciones, por lo que deben demostrar que
producen resultados tangibles. El proyecto desarrollado puede ser de gran ayuda al
proporcionar una visin diferente del trabajo que cada miembro aporta.
1

1.2 Conceptos

1.2. Conceptos
A continuacin se explican diversos conceptos que pueden ser tiles para la mejor
comprensin del trabajo realizado.

1.2.1.

Red social

Una red social es una estructura social formada por personas que estn relacionadas
entre s, las relaciones que unen a cada individuo con otro pueden ser de cualquier
ndole.
El anlisis de redes sociales estudia estas estructuras sociales. Identifica cada individuo
como un nodo y cada relacin como una arista para aplicar la teora de grafos en su
estudio.
No hay que confundir las redes sociales con los medios sociales (social media):
facebook, twitter, etc. Ya que estos facilitan la relacin entre usuarios, por tanto,
facilitan la creacin de redes sociales, pero no son redes sociales en s mismas. (1)

1.2.2.

Teora de grafos

La teora de grafos juega un papel importante en las Ciencias de la Computacin. Es


una disciplina de las matemticas que se ocupa del estudio de las propiedades de los
grafos.
Un grafo es un conjunto de objetos llamados nodos que pueden estar unidos por una
serie de aristas. Los grafos permiten estudiar las relaciones entre unidades que se
encuentran en interaccin, forman diagramas de los que se puede obtener mucha
informacin.
La teora de grafos aporta los elementos para la operatividad del modelo de red social
al representar a los individuos y sus vnculos mediante un grafo, ya que posee
poderosas herramientas para realizar el anlisis a un grafo.

1.2.3.

BibTex

Es una herramienta que se utiliza para almacenar listas de referencia. Utiliza un


formato de archivo de tipo texto (.bib) que almacena una lista de elementos
bibliogrficos siguiendo un patrn establecido.
La mayora de grupos de personas que almacenan las publicaciones que realizan
utilizan este formato, por lo que lo utilizaremos como fichero de entrada para obtener
los datos que formen nuestra red social.
2

1.3 Objetivos

1.2.4.

Pajek

Pajek es un programa para visualizar y analizar redes sociales. Fue desarrollado por la
universidad de Ljubljana. Se empez a desarrollar en noviembre 1996 y se implement
en Delphi (Pascal). (2)

1.3. Objetivos
Los objetivos que se pretenden conseguir con la realizacin de este proyecto son los
siguientes:
Crear una aplicacin que dados unos parmetros de entrada y una bibliografa
guardada en un fichero BibTex, almacene los datos de la bibliografa y obtenga
una serie de documentos informativos y varios ficheros que puedan ser
interpretados por el programa Pajek.
Realizar un pequeo manual de Pajek y de Inkscape, en el que se explicar la
obtencin de algunos diagramas interesantes y su posterior manipulacin.
Realizar un estudio de distintas redes sociales, principalmente la formada por
los miembros del INIT, en el que obtendremos una serie de resultados y
conclusiones.
Crear una web en la que se mostrarn algunos de los resultados obtenidos.

1.3.1.

Herramientas utilizadas

Notepad++ 5.8: Se ha utilizado para abrir y editar los distintos ficheros de texto
que se han utilizado, tanto los de entrada de datos, como los de resultados
obtenidos.
Dev C++ 7.3: Ha sido utilizado para realizar la aplicacin que forma la red social
y obtiene una serie de resultados a partir de una lista de publicaciones.
Pajek64 3.02: Se utiliza para la obtencin de diagramas.
Inkscape 0.48: Se ha utilizado para editar los diagramas obtenidos utilizando
Pajek, mejorando de esta forma su visualizacin
Google sites: Ha sido empleada para crear el sitio web en el que pueden verse
algunos de los resultados obtenidos.

1.4 Organizacin del documento

1.4. Organizacin del documento


La memoria del proyecto est dividida en los siguientes captulos.
Captulo 1 Introduccin
Tiene como objetivo realizar un acercamiento progresivo al trabajo realizado. Est
compuesto de una pequea introduccin, una serie de conceptos importantes para la
comprensin del proyecto y la motivacin para el desarrollo del proyecto.
Captulo 2 Planificacin
En este captulo se procede en primer lugar a la identificacin de tareas a realizar y su
posterior ejecucin. Comparando de esta manera la planificacin terica con la real.
Captulo 3 Desarrollo del cdigo
En este captulo se explica el anlisis, diseo e implementacin de la aplicacin
encargada de obtener la informacin de la red social.
Captulo 4 Tutorial Pajek
Aqu podemos consultar un breve manual que nos sirva para obtener algunos de los
principales diagramas para estudiar la red social que nos proporcionan las
herramientas Pajek y Inkscape.
Captulo 5 Pruebas y resultados
Este captulo muestra algunos informes y resultados obtenidos utilizando las
herramientas desarrolladas en el proyecto.
Captulo 6 Conclusiones
El ltimo captulo muestra las conclusiones que se han obtenido derivadas de la
realizacin del proyecto.
Anexo A: Cdigo fuente
En este anexo podremos encontrar el cdigo fuente de la aplicacin.

2.1 Identificacin de las tareas.

2. Planificacin
El primer paso para la planificacin del proyecto consisti en la identificacin de las
distintas tareas a realizar. A cada una de estas tareas se les asign un tiempo estimado
de realizacin, de esta manera se consigui programar el orden y la duracin del
proyecto.
A continuacin, durante la realizacin del proyecto, a travs del seguimiento y control
de las distintas tareas, se obtiene la planificacin real.

2.1. Identificacin de las tareas.


La ejecucin del proyecto se divide en una serie de tareas que se explican a
continuacin.
Planificacin
Definicin de los objetivos: que debe hacer la aplicacin.
Determinacin de las herramientas que se van a utilizar.
Definicin de las tareas a realizar.
Anlisis y diseo

Anlisis de requisitos.
Diseo de las estructuras de datos.
Definicin de las funciones.
Implementacin de la aplicacin para obtener datos.
Creacin de la web para visualizar resultados.

Experimentacin
Preparacin de las pruebas.
Obtencin de las pruebas.
Conclusiones.
Documentacin
Realizacin de la memoria.
Presentacin

2.2 Planificacin inicial

2.2. Planificacin inicial


En la Tabla 2-1: Planificacin inicial, se presenta una estimacin temporal inicial de las
diferentes tareas que forman el proyecto. La planificacin inicial consideraba una
duracin total del proyecto de 300 horas. La estimacin de cada tarea era aproximada
y estaba sujeta a posibles modificaciones.
Para realizar un mejor seguimiento de la realizacin del proyecto, se acord con el
tutor realizar una reunin semanal, cada jueves, para evaluar los progresos que se
estaban llevando a cabo.

Tabla 2-1: Planificacin inicial

1
2
3
4
5
6
7

Planificacin
Anlisis
Diseo
Implementacin
Pruebas
Documentacin
Presentacin
Total

10
20
50
80
70
50
20
300

2.3 Planificacin real

2.3. Planificacin real


La temporizacin real de la realizacin del proyecto ha sufrido pequeas discrepancias
respecto a la planificacin inicial en la mayora de las tareas, no obstante, si se tiene en
consideracin el cmputo global de las horas, la planificacin inicial estaba bastante
bien ajustada.
Las tareas de planificacin y anlisis son las que ms se han dilatado respecto a la
planificacin inicial.

Tabla 2-2: Planificacin real

1
1.1
1.2
1.3
2
2.1
2.2
2.3
3
3.1
3.2
4
4.1
4.2
4.3
4.4
5
5.1
5.2
5.3
6
6.1
7
7.1
7.2

Planificacin
Comprensin del problema
Definicin y planificacin de tareas
Bsqueda e instalacin de SW
Anlisis
Anlisis de los datos del BibTex
Anlisis de las estructuras de datos
Anlisis de SW para visualizacin de redes
Diseo
Diseo de estructuras de datos
Diseo de los algoritmos necesarios
Implementacin
Estructuras de datos
Obtencin de datos
Creacin ficheros de salida
Creacin de la web
Pruebas
Seleccin y preparacin de pruebas
Obtencin y documentacin de pruebas
Conclusiones
Documentacin
Realizacin de la memoria
Presentacin
Preparacin de la presentacin
Presentacin
Total

26
8
10
8
32
3
15
14
44
20
24
87
18
35
24
10
64
18
36
10
56
56
17
16
1
322

2.3 Planificacin real

3.1 Anlisis

3. Desarrollo del proyecto


En este captulo se incluye la descripcin del desarrollo que se ha seguido para obtener
la aplicacin mediante la cual obtenemos una serie de informes y diversos ficheros de
entrada para el programa Pajek, todo ello a partir de una bibliografa almacenada en
un fichero BibTex.

3.1. Anlisis
El anlisis previo a la realizacin del cdigo se divide en tres partes. Por una parte se
analiza el formato en el que estn almacenados los datos en un fichero BibTex. Por
otro lado se analizan las estructuras de datos que mejor se adaptan a nuestras
necesidades. Por ltimo se analiza de qu forma se va a afrontar el desarrollo de la
aplicacin.
Para tener una base de conocimientos sobre redes sociales, se estudi el curso
gratuito impartido por la Universidad de Michigan Networks: Theory and Application
(3). Este curso realiza una aproximacin al estudio de las redes sociales empleando
diversas herramientas.

3.1.1.

Anlisis BibTex

El primer objetivo de la aplicacin consiste en almacenar una serie de datos


bibliogrficos derivados de un fichero de texto, este fichero est estructurado en un
formato dado por la herramienta BibTex, por lo que se ha tenido que estudiar esta
estructura.
BibTex almacena listas de publicaciones en un archivo .bib, este archivo puede tener la
siguiente entrada:
@Book{abramowitz+stegun,
author =
"Milton Abramowitz and Irene A.
Stegun",
title =
"Handbook of Mathematical
Functions with Formulas,
Graphs, and Mathematical Tables",
publisher =
"Dover",
year =
1964,
address =
"New York",
edition =
"ninth Dover printing, tenth GPO
printing",
isbn =
"0-486-61272-4"
}
Figura 3-1: Ejemplo fichero BibTex

3.1 Anlisis
Los datos que se almacenan para obtener la red social son el tipo de publicacin, los
autores y el ao de publicacin.
El comienzo de cada publicacin viene dado por el smbolo @ seguido del tipo de
publicacin del que se trata, hay 14 tipos diferentes de publicaciones:
article: Un artculo de un peridico o revista.
book: Un libro con una editorial que se indica en forma explcita.
booklet: Una obra que est impresa y encuadernada, pero sin una editorial o
institucin patrocinadora.
conference: Lo mismo que inproceedings, incluido para compatibilidad con el
lenguaje de marcacin Scribe.
inbook: Una parte de un libro, que puede ser un captulo (o seccin) o un rango
de pginas.
incollection: Una parte de un libro que tiene su propio ttulo.
inproceedings: Un artculo en las actas de sesiones de una conferencia.
manual: Documentacin tcnica.
mastersthesis: Una tesis de maestra o proyecto fin de carrera.
misc: Para uso cuando los dems tipos no corresponden.
phdthesis: Una tesis de doctorado.
proceedings: Las actas de sesiones de una conferencia.
techreport: Un reporte publicado por una escuela u otra institucin,
usualmente numerado dentro de una serie.
unpublished: Un documento que tiene un autor y ttulo, pero que no fue
formalmente publicado.
Los nombres de los autores vienen precedidos de la cadena author = y estn
separados uno de otro por la cadena and. Se pueden almacenar siguiendo el formato
nombre apellido o apellido, nombre.
Por ltimo, el ao de publicacin viene introducido por la cadena year =.

3.1.2.

Anlisis estructuras de datos

Las listas de publicaciones contienen habitualmente una gran cantidad de entradas,


por lo que almacenan miles de datos. Las estructuras de datos elegidas deben estar
preparadas para almacenar grandes volmenes de datos. Para ello se intentar
codificar los nombres en nmeros y utilizar listas en lugar de matrices para aprovechar
mejor el espacio.
Muchos institutos de investigacin separan a sus miembros en distintas secciones o
categoras. Estas divisiones no aparecen reflejadas en las listas de publicaciones, pero
resultan muy interesantes para el estudio de la red social. En el diseo del proyecto se
tendr que dejar la opcin de introducir y almacenar estas caractersticas utilizando un
fichero de texto de entrada.

10

3.2 Diseo

3.1.3.

Anlisis aplicacin

Se ha decidido implementar la aplicacin utilizando el lenguaje de programacin C++


debido a su manejo de estructuras de datos y a su robustez. Al desarrollar la aplicacin
se consideraron necesarias una serie de funcionalidades que deba poseer y que se
definen a continuacin:
La aplicacin desarrollada obtiene una serie de datos a partir de una serie de
ficheros de entrada, principalmente un fichero de texto BibTex en el que est
almacenada una bibliografa.
Se almacenan los datos, organizndolos en una serie de estructuras de datos
para facilitar su manipulacin.
Se crean una serie de ficheros de salida, algunos ficheros de texto con
informacin acerca de la red social y otros ficheros con una estructura
reconocida por el programa Pajek.

3.2. Diseo
El diseo de la aplicacin se separa en dos partes diferenciadas. Por un lado se disean
las estructuras de datos donde se va a almacenar toda la informacin y por otro se
disean las funciones que forman la aplicacin
.

3.2.1.

Diseo Estructuras de Datos

A continuacin se procede a explicar cada una de las estructuras de datos utilizadas


para almacenar los valores que forman la red social. Han tenido que ser rediseadas
varias veces para adaptarlas mejor a la informacin que se quera almacenar para
despus ser mostrada.
En la estructura TPublicacin se almacena cada una de las publicaciones que se
obtienen a travs del BibTex. Para cada publicacin almacenamos una lista de hasta 20
miembros, el ao en que se ha publicado, el tipo de publicacin de que se trata y el
nmero de miembros que aparecen en la publicacin.
Int miemb[20]

Int anyo

Int tipo

Int nMiemb

Figura 3-2: TPublicacin

En la estructura TPublicaciones se almacenan todas las publicaciones de una


bibliografa. Se compone de una lista de publicaciones, el ao en el que se empieza a
publicar y el nmero de publicaciones que hay.

11

3.2 Diseo
TPublicacin
publicaciones[2000]

Int nPublicaciones

Int anyoInicio

Figura 3-3: TPublicaciones

La estructura TMiembros almacena una lista con los miembros. De cada uno de ellos
almacena su nombre, un valor booleano para diferenciar entre 2 tipos de miembros y
un valor entero para separarlos por grupos. Tambin se almacena el nmero de
miembros que hay en la red social.
String miembros[750]

Bool esMiembro[750]

Int seccin[750]

Int
nMiembros

Figura 3-4: TMiembros

En TSecciones se almacena una lista con los diferentes grupos a los que puede
pertenecer un miembro, tambin se almacena el nmero de grupos.
String nomSeccion[20]

Int nSecciones

Figura 3-5: TSecciones

En la estructura TRelacion se almacena cada relacin entre dos miembros que forman
la red social. Se guarda cada individuo, el nmero de relaciones entre ellos y el nmero
de publicaciones de tipo artculo que tienen en comn.
Int miemb1

Int miemb2

Int suma

Int articulos

Figura 3-6: TRelacion

La estructura TRelaciones almacena la red social en s, ya que guarda todas las


relaciones y el nmero que hay de ellas.
Trelacion relaciones[4500]

Int nRelaciones

Figura 3-7: TRelaciones

3.2.2.

Diseo funciones

La aplicacin de obtencin y tratamiento de los datos est estructurada en una serie


de funciones que realizan tareas menores. Se pueden dividir estas funciones en dos
grupos, las funciones de obtencin de datos y las que manipulan esos datos y obtienen
los ficheros de salida.

Obtencin de datos
Los datos para la creacin de la red social se obtienen a partir de dos tipos diferentes
de ficheros de texto, por un lado una bibliografa con formato BibTex y por otro una
12

3.2 Diseo
lista con los nombres de los miembros, a travs de esta lista, adems, se pueden
obtener dos atributos para cada miembro, uno de tipo booleano y otro de tipo entero.
Estos atributos aportan ms opciones a la hora de crear la red al permitirnos separar a
los miembros en diferentes grupos.
Las funciones que se han diseado son las siguientes:
CreaLista: A partir un fichero de publicaciones, extrae todos los nombres de
personas que han publicado y los almacena en la estructura de datos
TMiembros.
RellenaLista: A partir de un fichero con una lista de nombres, los almacena en
una estructura de datos TMiembros junto con los atributos que opcionalmente
se pueden aadir a cada miembro.
GuardaFichero: A partir de una bibliografa, extrae todos los datos relevantes
para crear la red social de las publicaciones, y los almacena en una estructura
de datos TPublicaciones. Extrae nicamente las publicaciones en las que
aparecen los miembros que se encuentran en TMiembros.

Manipulacin de datos y obtencin de ficheros de salida


Una vez se han almacenados los datos, se manipulan mediante las siguiente funciones
para obtener una serie de ficheros de salida:
ImprimeLista: Se obtiene un fichero de texto con una lista ordenada de los
nombres de los miembros de la red social.
EstudioRS: Crea un fichero de texto con el estudio de algunos parmetros de
los miembros que forman la red social.
OrdenaEstudio: Ordena el informe creado anteriormente en base a la
caracterstica que mande el usuario. Crea un nuevo fichero con el informe
ordenado.
EstudioSeccin: Obtiene un fichero de texto con el estudio de algunos
parmetros de los grupos que forman la red social .
ImprimeMatriz: Se crea un fichero de texto con la matriz de adyacencia que
forma la red social.
CreaPajek: Obtiene un fichero de texto con una estructura que es reconocida
como fichero de entrada por el programa Pajek con la red social almacenada.
CreaPajekSeccin: Similar al anterior, pero cada miembro de la red social es
una de las secciones de la red anterior.
CreaPajekAnyo: Similar a CreaPajek, pero las relaciones entre miembros estn
separadas por el ao en el que se realizaron, de esta forma obtenemos
informacin de la evolucin temporal de la red.

13

3.3 Implementacin

3.3. Implementacin
Se ha implementado el programa AnalisisRS.cpp para obtener automticamente los
ficheros que se utilizarn para realizar el anlisis de la red social.
En primer lugar, el programa obtiene la lista de los miembros que forman la red social,
as como de sus caractersticas. Para ello utiliza el fichero Bibtex.bib o el Miembros.txt
y los recorre buscando la informacin relevante y almacenndola en las estructuras de
datos definidas.
A continuacin, se almacenan todas las publicaciones que realizan los miembros que
previamente han sido guardados. Se recorre el fichero Bibtex.bib y se almacenan los
datos relevantes de todas las publicaciones en las que aparecen los miembros que
forman la red social que queremos analizar.
El siguiente paso consiste en buscar y almacenar las relaciones que tiene cada
miembro de la lista con cualquier otro. Se recorren todas las publicaciones que hay
almacenadas buscando en ellas relaciones de miembros de la red social. De esta forma
se almacena la matriz de adyacencia, que es la que forma la red social propiamente
dicha. As tendremos toda la informacin necesaria almacenada para obtener los
ficheros de salida.
Despus se obtienen los informes sobre la red social, se trata de una serie de ficheros
de texto que contienen informacin estructurada. Uno de ellos es la lista de los
miembros que forman la red social ordenados alfabticamente. Otro se trata de la
matriz de adyacencia en la que podemos ver la cantidad de trabajos que ha publicado
cada miembro con el resto. Tambin se obtiene una lista de los miembros con una
serie caractersticas, como la cantidad total de publicaciones que ha realizado o con
cuantas personas diferentes ha publicado. Esta lista se puede ordenar por cualquier
caracterstica pudiendo establecer distintos rankings. Por ltimo, si hemos separado la
red social en distintos grupos (secciones), obtenemos un informe parecido al anterior
en el que cada miembro de la red viene determinado por cada una de las distintas
secciones.
Los ltimos ficheros que obtenemos son los que introduciremos en el programa Pajek
para realizar los diagramas. Se trata de cinco ficheros de texto con formato reconocido
por Pajek:
PajekAnyo.net: Las relaciones vienen separadas en aos, dependiendo de en
que ao se ha realizado la publicacin, de esta forma se pueden obtener
diagramas de evolucin temporal.
Pajek.net: Todas las relaciones que forman la red social de los miembros a
estudio.
PajekVec.vec: El nmero de publicaciones que tiene cada miembro de la red
social.
PajekSecc.net: Todas las relaciones de la red, en la que cada miembro es una
de las secciones de la red que se ha definido.
14

3.4 Funcionamiento
PajekSeccVec.vec: El nmero de publicaciones que tiene cada seccin de la red
social.

lista.txt

matriz.txt
InformeSecc.txt
InformeRS.txt

bibtex.bib
InformeRSOrd.txt
AnalisisRS.cpp
PajekAnyo.net
miembros.txt
Pajek.net
PajekVec.vec
PajekSeccVec.vec

PajekSecc.net

Figura 3-8: Funcionamiento AnalisisRS.cpp

3.4. Funcionamiento
Se ha creado un fichero ejecutable AnalisisRS.exe. A travs de un sencillo men por
consola permite modificar los distintos parmetros para obtener los resultados
deseados.
Los ficheros de entrada deben estar en la misma carpeta en la que se ubica el
programa y tener un nombre determinado cada uno:
miembros.txt: Fichero con los miembros de la red social.
bibtex.bib: Fichero con la bibliografa.
Ambos archivos deben seguir una estructura determinada para el correcto
funcionamiento de la aplicacin. Cada lnea del documento miembros.txt debe tener a
un actor de la red social por lnea definido por su nombre, opcionalmente se puede
colocar el nombre del grupo al que pertenece precedido por el smbolo /. Los actores
se separan entre miembros o no miembros, para que uno de ellos sea considerado
15

3.4 Funcionamiento
miembro debe pertenecer a un grupo. Los nombres deben aparecer escritos tal como
estn escritos en el fichero bibtex.bib, es preferible quitar de ambos documentos los
acentos para evitar confusiones.
Si se obtienen los nombres a travs del fichero bibtex.bib, es conveniente revisar que
no existan duplicidades al estar algn nombre mal escrito Garcia/Gracia, o al estar en
distinto idioma Luis/Lluis.
Alain Tamayo Fong /Geographical Information
Oscar Ripolles
Andres Marzal Varo /Text Processing and Scanning
Figura 3-9: Ejemplo miembros.txt

El documento bibtex.bib debe tener el formato definido por el estndar, si algn


nombre no sigue el estndar, la aplicacin avisar al usuario mediante un mensaje de
error con la lnea que contiene el fallo para que sea resuelto.
Una vez ejecutado el programa, aparece una consola en la que tenemos un dilogo con
el programa para establecer los parmetros. Primero debemos sealar si se obtienen
los actores de la red a partir del fichero bibtex.bib o del miembros.txt. A continuacin
se nos pide que indiquemos si los ficheros para Pajek contendrn la red formada por
todas las publicaciones realizadas o solamente las de tipo artculo. Lo siguiente que
debemos indicar es el parmetro por el que ordenaremos el informe obtenido, esto es
til para realizar rankings. Para terminar debemos indicar el ao de comienzo para el
estudio temporal, que se realizar desde el ao indicado hasta el ao actual.
Cuando se finalice la ejecucin del programa, los ficheros resultantes aparecern en la
misma carpeta en la que se encuentra alojado.

Figura 3-10: Men aplicacin

16

4.1 Anlisis

4. Tutorial Pajek
En el siguiente captulo se pretende realizar un acercamiento al uso de la aplicacin
Pajek con el objetivo de obtener una serie de visualizaciones de la red social que nos
aporten datos interesantes para su estudio. La mayor parte del tutorial se ha hecho a
partir del manual oficial. (4)

4.1. Anlisis
Se ha elegido la versin 3 de Pajek para proceder a la visualizacin y anlisis de la red
social por encima de otras aplicaciones similares como Ucinet o SocNetV por los
siguientes motivos:
Su potencia y su sencillez de uso.
Est orientado principalmente a la visualizacin de redes sociales.
Existe amplia documentacin en la web.
Los datos de entrada para Pajek pueden estar formados por un fichero de texto con
un formato determinado, este fichero es obtenido a travs de la aplicacin creada.
Los diagramas que son creados por Pajek, pueden exportarse como una imagen .jpg o
como una imagen vectorial. Es preferible esta ltima ya que se puede escalar sin
perder resolucin y se pueden modificar fcilmente todos los elementos con un
programa de edicin de imgenes vectoriales como Inkscape.

4.2. Aspectos generales


Pajek es un programa para el anlisis y visualizacin de redes sociales, posee licencia
para uso no comercial y existe en versiones para Linux, Mac y OS X. Puede ser
descargado desde el sitio web http://pajek.imfm.si/doku.php?id=start, en esta web
existe documentacin sobre el programa y un manual que resulta muy til.
Este programa posee una interfaz grfica que facilita su uso, en la pantalla principal
(Figura 4-1: Pajek pgina principal ) se observa un men en el que se encuentran todas
las funcionalidades.
Pajek maneja varios tipos de objetos (Networks, Partitions, Vectors, Permutations,
Cluster y Hierarchy), ya sea que se carguen mediante un archivo o que se generen
como resultado de algn procedimiento. El objeto que aparece en la primera casilla de
cada tipo ser el objeto al que se le aplicarn los procedimientos que se realicen y se
considerar como el primero cuando se trate de procedimientos que requieran ms de
un objeto. Para cargar, guardar o editar alguno de los objetos se usan los iconos
correspondientes a cada uno de ellos.
17

4.2 Aspectos generales

Figura 4-1: Pajek pgina principal

Para leer un archivo, se selecciona del men File > Network > Read o se hace uso del
icono correspondiente. El tipo de archivo es Pajek networks (*.net). A continuacin
aparece una ventana que muestra el archivo de reporte, en este archivo Pajek guarda
el resultado de los procesos que lleva a cabo, si encuentra algn error, aqu lo indica.

Figura 4-2: Pantalla reporte Pajek

Si se desea visualizar el grafo que forma la red que hemos obtenido, se selecciona del
men Draw > Draw, de esta forma se abre la ventana de visualizacin (Figura 4-3:
Ventana visualizacin Pajek).

18

4.3 Estructura del fichero de entrada

Figura 4-3: Ventana visualizacin Pajek

4.3. Estructura del fichero de entrada


4.3.1.

Fichero .net

Pajek trabaja con un fichero de entrada .net. Este fichero de texto utiliza una
estructura determinada que permite definir los nodos y las relaciones entre ellos.
En primer lugar se definen los nodos, vienen introducidos por la lnea:
*Vertices [numero de nodos]
A continuacin, en cada lnea se define un nodo con su nmero y su nombre. En las
opciones se puede poner el color o la forma con la que se quiere que aparezca
dibujado en el grafo:
[numero de nodo] [nombre] [opciones]
Si las aristas son dirigidas, vienen introducidas por la palabra *Arcs, si no, es la palabra
*Edges la que las introduce. Podemos definir tantos tipos de relaciones diferentes
como queramos, para ello debemos numerar cada *Arcs o *Edges que aparezcan de la
siguiente manera:
*Edges :1
*Arcs :2
.
.

19

4.3 Estructura del fichero de entrada


Seguidamente se definen las aristas, para ello se utiliza el nmero de ambos nodos y el
nmero de relaciones entre ellos, tambin se pueden aadir opciones como en el caso
de la definicin de los nodos.
[nodo 1] [nodo 2] [nmero de relaciones] [opciones]
Un fichero de entrada .net para Pajek puede tener la siguiente forma:
*Vertices 4
1 Pedro ic Blue
2 Marta triangle ic Pink
3 Carla triangle ic Pink
4 Juan ic Blue
*Edges :1
246
111
*Arcs :2
312
212
Figura 4-4: Ejemplo fichero .net

Cuando se obtiene un diagrama utilizando Pajek, ste memoriza la posicin de los


nodos aadiendo al fichero .net las coordenadas donde est situado cada nodo detrs
de su descripcin. De esta forma, si se guarda el fichero .net, tambin se guarda la
posicin de los miembros en el diagrama.

4.3.2.

Fichero .vec

Cuando se estudia una red social, es importante visualizar el tamao de cada nodo. En
el caso de un instituto de investigacin, la cantidad de publicaciones que ha realizado
cada miembro nos puede indicar su tamao.
Pajek utiliza un fichero de entrada de texto .vec para dar un valor numrico a cada
nodo de los que aparecen en el fichero .net. Al igual que el archivo .net el archivo
comienza definiendo el nmero de actores. A continuacin aparecen los valores
siguiendo el orden de los nodos establecido en el fichero .net, uno en cada rengln.
*Vertices 4
4
0
1
12
Figura 4-5: Ejemplo fichero .vec

20

4.4 Obtencin de diagramas

4.4. Obtencin de diagramas


Pajek es una potente herramienta para visualizar redes utilizando grafos. A
continuacin se procede a explicar cmo obtener una serie de diagramas que faciliten
el estudio de la red social.

4.4.1.

Reduccin de la red

En algunas ocasiones no interesa visualizar todos los nodos que componen la red. Esto
ocurre, sobre todo, cuando tenemos nodos que no estn relacionados con ningn otro,
por lo que no aportan informacin relevante en algunos diagramas.
Para eliminar estos nodos debemos entrar en el men principal en Network > Create
New Network > Transform > Reduction > Degree > All. Se abrir una ventana en la que
se debe seleccionar el grado mnimo que se quiera que tengan los nodo de la red, esto
crear una nueva red que aparecer en la ventana Networks.

Figura 4-6: Obtener reduccin

4.4.2.

Mtodo Louvain

El mtodo Louvain se utiliza para detectar comunidades en grandes redes. Este


mtodo funciona iterativamente en dos fases; primero localiza pequeas comunidades
y despus aade nodos a estas comunidades y construye una nueva red cuyos nodos
son las comunidades. (5)
Para el estudio de redes sociales resulta interesante poder obtener las asociaciones
que se forman en la red y compararlas con las asociaciones que formamos
artificialmente en forma de departamentos, grupos de trabajo, etc.
21

4.4 Obtencin de diagramas


Si se desea realizar el mtodo Louvain, debemos seleccionar en el men principal
Network > Create Partition > Louvain Communities > Run. Se obtendr una particin
nueva.

Figura 4-7: Obtener Louvain

4.4.3.

Centralidad

La centralidad de cada nodo la determina su grado, es decir, el numero de aristas que


inciden en l, es un atributo que nos indica la importancia relativa de un nodo en el
grafo. En el diagrama de centralidad, el tamao de cada nodo depende de su grado.
Para obtenerlo se debe entrar en el men principal en Network > Create Vector >
Centrality > Degree > All. Como resultado se obtendr un objeto de tipo Vector.

Figura 4-8: Obtener centralidad

22

4.4 Obtencin de diagramas

4.4.4.

Distancia de un nodo

Al analizar una red social puede resultar interesante calcular la distancia entre un nodo
y el resto de nodos de la red, de esta forma se puede saber cuntos vrtices hay que
recorrer hasta alcanzar el nodo elegido.
Para obtener las distancias se debe seleccionar en el men principal Network > Create
Partition > k-Neighbours > All. Aparecer una ventana en la que se debe poner el
nmero que identifica el nodo a estudiar.

Figura 4-9: Obtener distancia

4.4.5.

Series Temporales

Para obtener una serie temporal en la que un grafo evolucione en el tiempo, se debe
aadir en el fichero .net los periodos en que estn activos tanto los actores como las
relaciones. En el ejemplo de la figura 15, el nodo 1 est activo en el periodo 1, para el
nodo 2 se aplica la misma definicin que para el nodo 1, para el nodo 3 se est
indicando que est activo del periodo 1 al 2 y el para el nodo 4 que est activo el
periodo 1 y del 3 hasta el periodo final. Las aristas estn definidas de la misma forma.
El archivo lo creamos de la misma manera que un archivo .net y se carga de la misma
forma.
*Vertices 4
1 Pedro [1]
2 Marta
3 Carla [1-2]
4 Juan [1,3-*]
23

4.4 Obtencin de diagramas


*Edges
2 4 6 [2-*]
1 1 1 [1-5]
3 1 2 [1-*]
2 1 2 [1-*]
Figura 4-10: Ejemplo fichero .net temporal

Una vez se ha creado el fichero .net con los periodos definidos, se genera la red
correspondiente a cada periodo con la opcin Network > Temporal Network >
Generate in Time > All. Aparecer una ventana en la que se debe poner el periodo de
inicio y el de fin, esto crear una red por cada periodo que hayamos definido en la
ventana Networks.

Figura 4-11: Obtener red temporal

4.4.6.

Ventana Draw

La ventana Draw se utiliza para visualizar las diferentes redes que se van obteniendo
en la ventana principal. Se pueden seleccionar diferentes combinaciones de objetos
para visualizar las operaciones que hemos realizado.
Si se intentan seleccionar dos objetos distintos para combinar sus resultados, ambos
objetos deben tener el mismo nmero de nodos.

24

4.4 Obtencin de diagramas

Figura 4-12: Ventana draw

Tipos de visualizacin
Pajek posee diferentes tipos de disposiciones para los elementos de un diagrama.
Circular: Posiciona los vrtices en crculo.
Energy: Genera una disposicin automtica utilizando un algoritmo. Existen dos
algoritmos, el Kamada-kawai y el Fruchterman Reingold, cada uno obtiene una
disposicin diferente para los vrtices del diagrama.
Tile Components: Separa los distintos grupos.
Opciones
Utilizando el men Options, se pueden realizar algunas operaciones interesantes
Obtener diferentes tamaos para nodos definidos en fichero de entrada .vec:
Options > Size > Of vrtices Defined in Input File.
Obtener diferentes tamaos para aristas definidos en fichero de entrada .net:
Options > Lines > Diferent Widths.
Tambin se pueden modificar otros aspectos de la visualizacin, como escalar el
tamao de la imagen o poner diferentes etiquetas a los elementos de la red.
Exportar imagen
Pajek permite exportar las imgenes que hemos obtenido en diferentes formatos en
dos o tres dimensiones. Los formatos ms utilizados son:
SVG: exporta a formato SVG (Scalable Vector Graphics), por lo que obtenemos
una imagen vectorial. Este formato tiene la ventaja de que ocupa lo mismo
25

4.5 Edicin de diagramas con Inkscape


independientemente del tamao de la imagen y de que se pueden modificar
sus elementos utilizando un editor.
JPEG: Se obtiene una imagen JPEG/JPG. Su peso depende del tamao y
resolucin, pudiendo llegar a ocupar varios megas.

4.5. Edicin de diagramas con Inkscape


Inkscape es un editor de grficos vectoriales de cdigo abierto que nos permite la
edicin de ficheros SVG. Puede ser descargado desde la web inskape.org. Si se quiere
modificar un diagrama obtenido con Pajek en formato SVG, Inkscape nos proporciona
mltiples posibilidades.
Para que se nos permita la manipulacin de los nodos, etiquetas y aristas por separado,
se debe exportar la imagen desde Pajek utilizando la opcin Export > 2D > SVG >
Labels/Arcs/Edges. Esta accin crear un fichero .html asociado a uno SVG que
podremos abrir con Inkscape.

Figura 4-13: Pantalla principal Inkscape

4.5.1.

Modificar elementos

Un diagrama est compuesto por tres tipos de elementos; nodos, aristas y etiquetas.
Para mejorar la visualizacin de la red, puede ser necesaria la modificacin de alguno
de estos elementos.

26

4.5 Edicin de diagramas con Inkscape


Nodos: Para seleccionarlos todos es til la herramienta Edicin > Buscar y en
el apartado ID buscar ellipse. Una vez seleccionados podemos modificarlos
utilizando las herramientas Relleno y Borde y Transformar del men Objeto.
Aristas: Se seleccionan todas juntas al pulsar sobre cualquier arista de la
imagen. Se modifica su grosor utilizando la herramienta Objeto > Relleno y
Borde.
Etiquetas: Para modificarlos como texto y no como una imagen, debemos
seleccionarlos todos de la misma manera que en el caso de las aristas, y a
continuacin, utilizar la herramienta Edicin > Desagrupar. Una vez
desagrupados, se modifican utilizando la herramienta Texto > Texto y
Tipografa

27

4.5 Edicin de diagramas con Inkscape

28

5.1 Objetivo

5. Pruebas y Resultados
Para comprobar el funcionamiento de la aplicacin se han obtenido una serie de
resultados con distintas redes sociales. En el siguiente captulo se explicar cual ha sido
el procedimiento seguido para obtener estos resultados y se mostrarn algunos de
ellos.

5.1. Objetivo
Durante todo el desarrollo del proyecto han ido realizndose pruebas para comprobar
el buen funcionamiento de la aplicacin y depurar los posibles fallos. Una vez se han
tenido todas las herramientas disponibles, se ha procedido al estudio de diversas redes
sociales. En primer lugar se ha realizado un estudio de las principales caractersticas de
la red social formada por los miembros de INIT. A continuacin se han estudiado las
distintas secciones que forman este instituto. Para probar la funcionalidad de la
aplicacin, tambin se ha obtenido una serie de resultados procedentes del instituto
Idiap.
El principal objetivo de los resultados que se han obtenido utilizando la aplicacin,
consiste en obtener una visin real de la forma en la que estn relacionados los
distintos miembros de la red social. Se intentar un acercamiento a cual es la
aportacin real de cada miembro a la red.
Debido a la dificultad de visionar imgenes grandes en papel, se ha realizado un sitio
web en la direccin https://sites.google.com/a/uji.es/resultados-proyecto/. En esta
web ha sido creada con google sites y en ella se encuentran alojados algunos de los
diagramas obtenidos.

5.2. Mtodo
Existen una serie de parmetros en cualquier red social que tienen una gran
importancia. Se han intentado medir y observar grficamente esas propiedades, se ha
utilizado como gua la abundante informacin que existe en internet acerca del anlisis
de redes sociales as como el libro Introduccin a los mtodos del anlisis de redes
sociales. (6)
Para la realizacin de los informes, se ha intentado reflejar la relacin que tienen cada
nodo con el resto de nodos de la red, tambin se ha intentado que aparezca reflejada
la cantidad de trabajo que aporta a la red. Se ha aprovechado la ordenacin de los
informes para realizar algunos rankings. Para cada miembro se obtienen las siguientes
caractersticas:
NP= Nmero total de trabajos que ha publicado (se contabilizan todos los tipos
de publicaciones)
29

5.3 Resultado
NA= Nmero total de artculo que ha publicado (se contabilizan nicamente los
artculos)
PR= Nmero de personas distintas de la red con las que se relaciona
RT= Nmero total de relaciones en la red (con cada persona puede tener ms
de una relacin)
PI= Nmero de personas distintas con las que se relaciona consideradas
miembros del instituto
RI= Nmero total de relaciones con personas consideradas miembros del
instituto (con cada persona puede tener ms de una relacin)
PS= Nmero de personas distintas con las que se relaciona miembros de su
seccin
RS= Nmero total de relaciones con miembros de su seccion (con cada persona
puede tener ms de una relacin)
%I= Porcentaje de publicaciones con personas consideradas miembros del
instituto sobre el total
%E= Porcentaje de publicaciones con personas consideradas externos al
instituto sobre el total
%S= Porcentaje de publicaciones con miembros de su propia seccion sobre el
total
Los diagramas se han obtenido de forma que puedan darnos una imagen del estado
actual de la red social. Observndolos, tambin se obtienen algunos parmetros que
nos hacen reflexionar acerca de la importancia de cada nodo y de la adecuacin de la
distribucin que hacemos de la red cuando la separamos en secciones. La forma de
una red social ayuda a determinar la utilidad de la red para sus individuos.

5.3. Resultado
En primer lugar se han obtenido una serie de resultados utilizando la red social que
forman los miembros del INIT. A continuacin, para obtener otros resultados, se han
aadido a esta red los colaboradores externos que han publicado con el instituto.
Tambin se ha relizado el estudio de las diferentes secciones que forman el INIT. Para
finalizar, se ha analizado otra lista de publicaciones, la del Idiap, y se han obtenido las
conclusiones finales.

5.3.1.

Miembros INIT

El INIT (Institute of New Imaging Technologies) es un grupo de investigacin que


desarrolla su trabajo en la Universitat Jaume I. Est formado por 67 miembros
divididos en 10 secciones. (7)
En algunos de los diagramas se ha establecido un cdigo de colores para identificar las
distintas secciones que forman el INIT. Dependiendo de a qu seccin pertenezca, el
nodo que identifica a un miembro tendr un color determinado.
30

5.3 Resultado
Automated Learning and Pattern Recognition
Geographical Information
Interactive Visualization
Mathematical Modelling and Imaging
Optics
Sketch-based Modelling
Text Processing and Scanning
Video and Multimedia
Virtual and Augmented Reality
Visual Engineering

Distribucin de las secciones


Para saber si la distribucin de los miembros entre las distintas secciones se
corresponde a las relaciones que se establecen en las publicaciones, se ha utilizado un
mtodo automtico de Pajek que nos proporciona las diferentes comunidades que se
forman en la red. A continuacin se han comparado esas comunidades (Figura 5-1:
Detalle Mtodo Louvain) con las secciones que componen el INIT (Figura 5-2: Detalle
secciones INIT).
Cada color de nodo representa una comunidad diferente dentro de la red. Para
obtener las diferentes comunidades, Pajek utiliza el mtodo heurstico Louvain. Si se
compara el resultado obtenido utilizando este mtodo con las secciones que
componen el INIT, se obtienen una serie de conclusiones:
El mtodo Louvain obtiene seis comunidades, el INIT posee diez secciones.
Se establece una equivalencia entre las tres secciones Mathematical Modelling
and Imaging, Text Processing and Scanning y Optics y tres de las comunidades
obtenidas.
El resto de secciones se dividen en tres comunidades, por un lado est la
seccin Geographical Information, por otro Automated Learning and Pattern
Recognition y Video and Multimedia, la ltima comunidad la forman las
secciones Interactive Visualization y Virtual and Augmented Reality.
Los miembros de la seccin Visual Engineering se encuentran divididos entre
dos de las comunidades que ha obtenido el mtodo Louvain.
Para obtener una mayor equivalencia entre las comundidades obtenidas y las
secciones existentes, cuatro miembros deberan cambiar de seccin. Por un
lado Francisco Ramos y Oscar Belmonte, que deberan pasar de Geographical
Information a Interactive Visualization. Por otro Herbert Perez y Alejandro
Garcs pasaran de Visual Engineering a Virtual and Augmented Reality.

31

5.3 Resultado

Figura 5-1: Detalle Mtodo Louvain

Figura 5-2: Detalle secciones INIT

32

5.3 Resultado

Ranking por grado nodal o centralidad

Tabla 5-1: Ranking centralidad

1
2
3
3
5
6
7
7
7
10
10

Pedro Garcia Sevilla:


Filiberto Pla Banon:
Joaquin Huerta Guijarro:
Ricardo Quiros Bauset:
Jose Martinez Sotoca:
Miguel Chover Selles:
Carlos Gonzalez Ballester:
Jose Salvador Sanchez Garreta:
Oscar Belmonte Fernandez:
Carlos Granell Canut:
Jose Ribelles Miguel:

23
21
20
20
16
15
13
13
13
12
12

El grado de un nodo es un ndice de exposicin a lo que circula por la red, indica las
aristas que inciden en un nodo. Es til para evaluar lo importante que es un actor en la
red, por ejemplo los actores alto grado se consideran influyentes ya que enlazan a
muchas personas con muchas otras y a su alrededor se forman ncleos en la red.
En el siguiente diagrama el tamao del nodo indica su grado, es decir, el nmero de
aristas incidentes a l, a mayor tamao, mayor es el grado del nodo. El color diferencia
la seccin a la que pertenece dentro del instituto.

Figura 5-3: grado nodal

33

5.3 Resultado

Ranking por trabajos publicados

Tabla 5-2: Ranking trabajos publicados

1
2
3
4
5
6
7
8
9
10
10
10

Filiberto Pla Banon:


Jose Salvador Sanchez Garreta:
Miguel Chover Selles:
Jose Martinez Sotoca:
Carlos Granell Canut:
Joaquin Huerta Guijarro:
Jesus Lancis Saez:
Ramon A. Mollineda Cardenas:
Pedro Garcia Sevilla:
Jose Miguel Sanchiz Marti:
Laura Diaz Sanchez:
Vicente Javier Traver Roig:

209
140
104
75
61
58
54
44
43
42
42
42

El tamao del nodo indica la cuanta de su trabajo, a mayor tamao, mayor es el


nmero de trabajos publicados. En la Figura 5-4 el grosor de las aristas indica el
nmero de relaciones entre los dos miembros unidos. El color diferencia la seccin a la
que pertenece dentro del instituto.
Si se compara este diagrama con el de grado nodal, se aprecian algunas similitudes,
esto es debido a que usualmente, los miembros que publican mucho, poseen gran
cantidad de relaciones. En este diagrama tambin se aprecia la aparicin de algunos
actores que han realizado publicaciones, pero que no aparecen en los otros diagramas
porque no han publicado con otros miembros del instituto.

Figura 5-4: Trabajos publicados

34

5.3 Resultado

Ranking por artculos publicados

Tabla 5-3: Ranking artculos publicados

1
2
3
4
5
6
7
7
9
9

Filiberto Pla Banon:


Jose Salvador Sanchez Garreta:
Miguel Chover Selles:
Vicente Palmer Andreu:
Jesus Lancis Saez:
Carlos Granell Canut:
Joaquin Huerta Guijarro:
Laura Diaz Sanchez:
Jose Martinez Sotoca:
Jose Miguel Sanchiz Marti:

48
33
26
23
22
15
13
13
11
11

El nmero de artculos publicados representa con mayor fidelidad que el nmero total
de publicaciones el trabajo realizado dentro del instituto, esto es debido a que las
publicaciones totales pueden verse sobredimensionadas si el miembro ha participado
en muchas conferencias. El siguiente diagrama se ha realizado teniendo en cuenta
solamente el nmero de artculos publicados, el tamao del nodo indica el nmero de
publicaciones de este tipo y el tamao de las aristas viene determinada por el nmero
de relaciones que existe entre dos nodos.
Si se compara el diagrama con el nmero total de publicaciones y el que solo tiene en
cuenta los artculos, se aprecia una disminucin en el numero de nodos y en la
cantidad de relaciones. El grupo ms grande que formaba la red social se divide en dos
grupos compuestos por miembros de tres secciones del INIT cada uno.

Figura 5-5: Detalle artculos publicados

35

5.3 Resultado

Distancia de un nodo
Muestra la distancia que existe entre un nodo seleccionado (Raul Montoliu) con el
resto del grafo. El color del nodo indica el nmero de vrtices que hay que recorrer
para conectar con el nodo elegido.
Nodo actual
Distancia=1
Distancia=2
Distancia=3
Distancia=4
Distancia =
Los nodos mejor conectados necesitan un menor nmero de pasos para llegar a
cualquier otro nodo. Para ello deben tener mucha centralidad (nmero de aristas
incidentes) o estar cerca de alguien que la tiene.

Figura 5-6: Detalle distancia Raul Montoliu

Evolucin temporal
Un tema de inters en el anlisis de redes es el relacionado con la ocurrencia de
cambios en una red en el transcurso del tiempo. En el caso de la red social formada
por los miembros el INIT, se ha establecido el rango de tiempo a estudiar desde el ao
2000 hasta el 2012. En la Tabla 5.4 se puede observar el crecimiento del nmero de
actores y las relaciones de la red.
En el ao 2000 la red solamente contaba con doce actores de siete reas diferentes
que establecan un total de 99 relaciones entre ellos. En el ao 2006 entran dos
miembros de una nueva rea y son ya 27 actores. En el 2009 y 2010 se suman las dos
ltimas reas que forman la composicin actual del instituto.
36

5.3 Resultado

Tabla 5-4: Evolucin temporal miembros del INIT

Ao
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012

Actores
12
16
16
18
20
23
27
32
37
46
58
61
62

Relaciones
99
154
208
244
296
324
405
532
676
802
1098
1296
1400

Figura 5-7: Grfica evolucin temporal

Figura 5-8: INIT ao 2000

37

5.3 Resultado

Figura 5-9:INIT ao 2006

Figura 5-10: INIT ao 2012

Situacin actual Miembros INIT


Utilizando la aplicacin realizada tambin se ha obtenido un informe con algunos
parmetros de todos los miembros del INIT, est ordenada por el nmero de artculos
publicados.
En el informe se pueden observar que la mayora de miembros guarda una relacin
entre el trabajo publicado y las relaciones que tienen dentro del instituto. Pero se
observan algunos actores que son especialistas, con muchos trabajos y pocas
relaciones, o otros con muchas relaciones en menos trabajos. Tambin se observan
algunas personas que solo han realizado publicaciones con miembros de su seccin.
38

5.3 Resultado
NP= Nmero de publicaciones.
NA= Nmero de artculos publicados
PR= Personas con las que se relaciona.
RT= Relaciones totales.
PS= Personas con las que se relaciona miembros de su seccion.
RS= Relaciones totales con miembros de su seccion.
%S= Porcentaje de publicaciones con miembros de su seccion sobre el total.

Filiberto Pla Banon:


Jose Salvador Sanchez Garreta:
Miguel Chover Selles:
Vicente Palmer Andreu:
Jesus Lancis Saez:
Carlos Granell Canut:
Joaquin Huerta Guijarro:
Laura Diaz Sanchez:
Jose Martinez Sotoca:
Jose Miguel Sanchiz Marti:
Francisco Ramos Romero:
Omel Mendoza Yero:
Jesus Gumbau Portales:
Ramon A. Mollineda Cardenas:
Vicente Javier Traver Roig:
Inmaculada Remolar Quintana:
Enrique Tajahuerce Romera:
Jose Ribelles Miguel:
Oscar Belmonte Fernandez:
Pedro Garcia Sevilla:
Raul Martinez Cuenca:
Ricardo Quiros Bauset:
Vicent Climent Jorda:
Vicente Garcia Jimenez:
Pedro Latorre Carmona:
Vicente Duran Bosch:
Cristina Rebollo Santamaria:
Jorge Badenas Carpio:
Carlos Gonzalez Ballester:
Jose Joaquin Gual Arnau:
Luis Martinez Leon:
Manuela Nunez Redo:
Michael Gould:
Pedro Company Calleja:
Raul Montoliu Colas:
Adolfo Martinez Uso:
Jose Antonio Gil Altaba:
Monica Millan Giraldo:
Pere Xavier Clemente Pesudo:
Alain Tamayo Fong:
Alejandro Garces Calvelo:
Andres Marzal Varo:
Arturo Beltran Fonollosa:
Henry Anaya Sanchez:
Isabel Gracia Luengo:
Juan Miguel Vilar Torres:
Maria Angeles Lopez Malo:
Mercedes Fernandez Alonso:
Olga Rajadell Rojas:
Ruben Maso Carcases:
Sergio Trilles Oliver:
Arturo Quintana Torres:
Carlos Serra Toro:
Cristian Martin Reinhold:
David Llorens Pinana:
Eva Salvador Balaguer:
Herbert Perez Roses:
Ianisse Quinzan Suarez:
Javier Ortells Lorenzo:
Juan Carlos Amengual Argudo:
Juan Pablo Aibar Ausina:
Laura Cleofas:
Pau Agusti Ballester:
Raul Martin Felez:
Tomas J. Arnau Porcar:
Vicente Palazon Gonzalez:

NP
209
140
104
24
54
61
58
42
75
42
30
29
33
44
42
30
22
33
23
43
17
27
21
31
23
14
19
16
20
3
11
9
6
12
24
22
6
8
8
17
13
16
16
3
6
12
1
5
9
1
3
6
4
2
7
1
1
5
1
1
1
1
3
6
2
7

NA
48
33
26
23
22
15
13
13
11
11
9
9
8
8
8
7
6
6
6
6
6
6
6
6
5
5
4
4
3
3
3
3
3
3
3
2
2
2
2
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

PR
21
13
15
0
8
12
20
9
16
6
11
7
10
7
8
11
8
12
13
23
7
20
7
10
7
7
10
5
13
1
7
11
6
0
8
5
7
3
7
7
4
4
6
3
5
4
1
6
2
1
3
4
4
3
4
3
2
8
3
4
0
1
3
4
2
4

RT
238
152
204
0
113
113
145
77
104
46
66
51
86
72
46
101
75
68
63
81
46
84
60
59
21
46
71
27
43
1
36
23
18
0
35
52
14
12
31
36
29
23
30
8
7
19
1
18
12
1
6
10
10
3
17
3
2
11
3
4
0
1
8
11
2
13

Tabla 5-5: Informe miembros del INIT

39

PS
7
6
4
0
7
10
11
8
5
1
3
6
4
6
3
4
7
4
5
5
6
2
6
6
3
6
4
1
1
1
0
6
4
0
3
2
7
2
6
6
1
4
6
2
2
4
0
6
2
1
3
1
2
3
4
1
0
4
3
4
0
1
2
4
1
4

RS
48
85
95
0
103
107
108
76
57
10
8
48
54
70
15
73
67
40
6
40
40
9
56
55
14
44
54
10
3
1
0
15
16
0
13
15
14
9
28
35
3
23
30
6
4
19
0
18
12
1
6
6
7
3
17
1
0
7
3
4
0
1
5
11
1
13

%S
0.2
0.6
0.5
0
0.9
0.9
0.7
1
0.5
0.2
0.1
0.9
0.6
1
0.3
0.7
0.9
0.6
0.1
0.5
0.9
0.1
0.9
0.9
0.7
1
0.8
0.4
0.1
1
0
0.7
0.9
0
0.4
0.3
1
0.8
0.9
1
0.1
1
1
0.8
0.6
1
0
1
1
1
1
0.6
0.7
1
1
0.3
0
0.6
1
1
0
1
0.6
1
0.5
1

5.3 Resultado
Estudio Secciones INIT
Tambin se ha realizado un estudio de las diferentes grupos en los que est dividida la
red social, en el caso del INIT son las distintas secciones. En primer lugar se obtiene
una tabla con diferentes datos que nos proporcionan informacin relevante. A
continuacin se han obtenido dos diagramas en los que cada actor de la red social
viene determinado por una de las secciones, las relaciones entre ellas estn
determinadas por las publicaciones en comn en el primer caso y por las publicaciones
de tipo artculo en el segundo caso. El tamao de los nodos viene determinado por la
cantidad de publicaciones realizadas y el grosor de la arista por el nmero de
relaciones entre dos nodos.

Tabla 5-6: Informe secciones


TP= Numero total de publicaciones.
TA= Nmero de publicaciones de tipo articulo
%A= Porcentaje de articulos respecto de las publicaciones totales
TS= Relaciones totales con miembros de la misma seccion.
TO= Relaciones totales con miembros de otra seccion.
%R= Porcentaje de las relaciones de la misma seccion sobre el total.
TP
Ingenieria visual:
312
Aprendizaje automatico y Reconocimiento de patrones:335
Informacion Geografica:
273
Digitalizacion y Procesamiento de textos:
44
Realidad Virtual y Aumentada:
53
Video y Multimedia:
132
Visualizacion interactiva:
219
Optica:
181
Imagen y Modelado Matematico:
28
Modelado basado en Bocetos:
12

TA
62
63
67
2
9
27
51
60
27
3

Figura 5-11: Publicaciones por seccin

40

%A
0.2
0.2
0.2
0.1
0.2
0.2
0.2
0.3
0.9
0.2

TS
65
158
212
38
9
30
158
238
1
0

TO
276
164
170
0
119
113
214
0
0
0

%R
0.2
0.5
0.6
1
0.1
0.2
0.4
1
1
0

5.3 Resultado

Figura 5-12: Artculos por seccin

Datos Pajek
El programa Pajek tambin nos proporciona una serie de propiedades de la red social
que estamos estudiando, como el nmero de nodos y aristas,
La densidad nos indica la proporcin de vnculos en una red en relacin con el total de
vnculos posibles, en este caso es 7.6%, es una densidad baja por lo que se esperan
fallos estructurales, as es, ya que todos los miembros no estn conectados entre s. El
dimetro de la red nos indica la distancia mxima que hay entre dos nodos de la red,
en este caso es cuatro.
Tabla 5-7: Datos Pajek solo miembros

Number of vertices (n): 67


---------------------------------------------------------Arcs
Edges
---------------------------------------------------------Number of lines with value=1
0
175
Number of lines with value#1
0
51
---------------------------------------------------------Total number of lines
0
226
---------------------------------------------------------Number of loops
0
0
Number of multiple lines
0
0
---------------------------------------------------------Density1 [loops allowed]
= 0.07623545
Density2 [no loops allowed] = 0.07723855
Average Degree = 5.87012987
The longest shortest path from Alain Tamayo Fong (2) to
Laura Cleofas (35). Diameter is 4.

41

5.4 Total relaciones INIT

5.4. Total relaciones INIT


Muchos de los trabajos que publican los miembros del INIT estn realizados con
personas externas al instituto. Se han obtenido algunos datos de la red social que
forman todos los individuos que aparecen en las publicaciones, sean miembros o no.
Diagrama con miembros y no miembros del instituto
Se ha obtenido un diagrama con todos los individuos que aparecen en las
publicaciones. Para diferenciar a los miembros del instituto de los no miembros se
utiliza un color diferente de nodo.
Miembro del INIT
No miembro
En la nueva red se encuentran conectados 515 actores, en el diagrama se observa
como algunas secciones que estaban separadas si tenamos en cuenta solo a los
miembros del instituto, se unen por personas externas que han publicado con distintas
secciones. Los miembros del instituto forman los ncleos de la red y a su alrededor
aparecen multitud de colaboradores que expanden la red.

Figura 5-13: Detalle miembros/no miembros

Solo artculos
Si se tienen en cuenta solamente las publicaciones de tipo artculos para obtener el
diagrama, los actores relacionados se reducen a 250 y la cantidad de relaciones
tambin disminuye considerablemente.

42

5.4 Total relaciones INIT

Figura 5-14: Artculos de miembros/no miembros

Si se observa la forma de los anteriores diagramas y de los siguientes que se van a


obtener y se comparan con otros en los que se represente una red social se puede ver
alguna similitud, por ejemplo la Figura 5-15, obtenida de la wikipedia.
Estas coincidencias son debidas a que la mayora de redes sociales estn formadas a
partir de una bola de nieve, esto se refiere a que se forman pequeos ncleos que van
creciendo, y stos se unen entre s por algn miembro. Puede haber un ncleo
principal alrededor del cual se sitan los dems. Si obtenemos el diagrama mediante la
utilizacin de algn algoritmo que acerque los nodos ms prximos entre s, se
observan mejor las similitudes.

Figura 5-15: Diagrama Wikipedia

43

5.4 Total relaciones INIT


Datos Pajek
Los datos que obtenemos utilizando Pajek con la red social representada en la Figura
5-13 indican que tenemos 515 actores con 2051 relaciones. La densidad ha disminuido
comparada con la red social formada por los miembros del INIT, esto es consecuencia
del aumento de actores con pocas relaciones. Entre los no miembros aadidos,
muchos realizan colaboraciones espordicas con una o dos personas y no forman
ncleos con muchas relaciones. Tambin ha aumentado el dimetro a 10.
Tabla 5-8: Datos Pajek total

Number of vertices (n): 515


---------------------------------------------------------Arcs
Edges
---------------------------------------------------------Number of lines with value=1
0
1973
Number of lines with value#1
0
78
---------------------------------------------------------Total number of lines
0
2051
---------------------------------------------------------Number of loops
0
0
Number of multiple lines
0
0
---------------------------------------------------------Density1 [loops allowed]
= 0.01546611
Density2 [no loops allowed] = 0.01549620
Average Degree = 7.96504854
The longest shortest path from Daniel E. Leaird (81) to
Juan Pablo Aibar Ausina (251). Diameter is 10.

Ranking relaciones
Se han obtenido una serie de datos de los miembros de la red social ordenados por el
nmero de personas diferentes con las que se relaciona cada miembro, en la Tabla 5-9:
Ranking miembros/no miembros aparecen los 30 actores con ms relaciones.
La mayora de los actores que aparecen son miembros del instituto y aparecan en los
rankings anteriores, solamente se aaden algunos colaboradores externos que realizan
muchas publicaciones con el instituto.

44

5.4 Total relaciones INIT


Tabla 5-9: Ranking miembros/no miembros
NP= Nmero de publicaciones.
NA= Nmero de artculos publicados
PR= Personas con las que se relaciona.
RT= Relaciones totales.
PI= Personas con las que se relaciona miembros del instituto.
RI= Relaciones totales con miembros del instituto.
PS= Personas con las que se relaciona miembros de su seccion.
RS= Relaciones totales con miembros de su seccion.
%I= Porcentaje de publicaciones con miembros del instituto sobre el total.
%E= Porcentaje de publicaciones con externos al instituto sobre el total.
%S= Porcentaje de publicaciones con miembros de su seccion sobre el total.
NP

RS

%I

%E

%S

209

48

99

429

23

239

85

239

0.6

0.4

0.6

Jesus Lancis Saez:

54

22

61

275

132

103

0.5

0.5

0.4

Jose Martinez Sotoca:

75

11

58

217

16

104

57

0.5

0.5

0.3

Jose Salvador Sanchez Garreta:140

33

56

298

13

152

85

0.5

0.5

0.3

Filiberto Pla Banon:

NA

PR

RT

PI

RI

PS

Omel Mendoza Yero:

29

55

163

11

82

48

0.5

0.5

0.3

Carlos Granell Canut:

61

15

49

175

15

125

10

107

0.7

0.3

0.6

Gladis Minguez Vega:

27

49

153

11

79

42

80

0.5

0.5

0.5

Laura Diaz Sanchez:

42

13

47

133

12

84

76

0.6

0.4

0.6

Miguel Chover Selles:

104

26

44

319

18

222

95

0.7

0.3

0.3

Pedro Garcia Sevilla:

43

40

106

27

85

22

65

0.8

0.2

0.6

Joaquin Huerta Guijarro:

58

13

39

185

24

160

11

108

0.9

0.1

0.6

Ricardo Quiros Bauset:

27

39

115

21

88

0.8

0.2

0.1

Juan Miguel Vilar Torres:

12

36

60

19

19

0.3

0.7

0.3

Pedro Latorre Carmona:

23

34

79

21

30

72

0.3

0.7

0.9

Vicent Climent Jorda:

21

33

142

72

56

0.5

0.5

0.4

P. Andres:

19

32

128

10

78

24

65

0.6

0.4

0.5

Manuela Nunez Redo:

31

44

13

25

15

0.6

0.4

0.3

Raul Martinez Cuenca:

17

31

98

50

40

0.5

0.5

0.4

Oscar Belmonte Fernandez:

23

30

84

15

65

0.8

0.2

0.1

Enrique Tajahuerce Romera:

22

29

130

10

82

67

0.6

0.4

0.5

Andres Marzal Varo:

16

28

64

23

23

0.4

0.6

0.4

Jose Miguel Sanchiz Marti:

42

11

28

99

46

10

0.5

0.5

0.1

Luis Martinez Leon:

11

28

71

38

21

35

0.5

0.5

0.5

Vicente Javier Traver Roig:

42

26

75

46

15

0.6

0.4

0.2

24

45

17

17

0.4

0.6

0.4

Vicente Garcia Jimenez:

31

24

85

58

55

0.7

0.3

0.6

Jose Ribelles Miguel:

33

23

84

14

70

40

0.8

0.2

0.5

Francesc J. Ferri:

37

12

21

83

59

17

50

0.7

0.3

0.6

Francisco Ramos Romero:

30

21

97

13

71

0.7

0.3

0.1

Vicente Duran Bosch:

14

21

81

46

44

0.6

0.4

0.5

Carlos Gonzalez Ballester:

20

20

59

15

51

0.9

0.1

0.1

David Llorens Pinana:

45

5.5 Idiap

5.5. Idiap
El Idiap Research Institute es una fundacin autnoma, independiente y sin nimo de
lucro que se dedica a la investigacin. Tiene su sede en Martigny (Suiza) y est
especializada en informacin multimedia y en comunicacin multimodal. (8)
Visin general
Se ha obtenido un diagrama en el que se pueden ver todas las relaciones entre
miembros del Idiap. Cada nodo representa a un miembro del Instituto y cada arista,
establece una relacin entre dos nodos indicando que han realizado alguna publicacin
juntos.
La red social que forman las personas que han realizado alguna publicacin con el Init
la forman 714 actores. Si tenemos en cuenta todos los trabajos publicados obtenemos
la cantidad de 2960 relaciones entre ellos, en cambio, si los relacionamos por el
nmero de artculos nicamente, se obtienen 714 relaciones.

Figura 5-16: Detalle Idiap

Artculos publicados
El siguiente diagrama se ha obtenido teniendo en cuenta nicamente las publicaciones
de tipo artculo y despus utilizando la opcin que nos proporciona Pajek para
identificar comunidades dentro de una red social. Cada color de nodo identifica a una
comunidad diferente. Tanto en el diagrama anterior (Figura 5-16: Detalle Idiap), como
en el siguiente (Figura 5-17: Idiap artculos publicados), los actores que no estn
relacionados con otro han sido omitidos, siendo uno el grado mnimo para aparecer en
los diagramas.

46

5.5 Idiap

Figura 5-17: Idiap artculos publicados

Datos Pajek
El programa Pajek nos proporciona los siguientes datos respecto a la red de la Figura
5-16: Detalle Idiap en la que se tienen en cuenta todos los trabajos publicados.
Tabla 5-10: Datos Pajek Idiap

Number of vertices (n): 714


---------------------------------------------------------Arcs
Edges
---------------------------------------------------------Number of lines with value=1
0
2847
Number of lines with value#1
0
113
---------------------------------------------------------Total number of lines
0
2960
---------------------------------------------------------Number of loops
0
0
Number of multiple lines
0
0
---------------------------------------------------------Density1 [loops allowed]
= 0.01161249
Density2 [no loops allowed] = 0.01162877
Average Degree = 8.29131653
The longest shortest path from Agnes Guillot (13) to Mehdi
Rashidinejad (458). Diameter is 7.

47

5.5 Idiap
Ranking Idiap
A continuacin aparece el ranking de las 30 personas que ms trabajos han publicado
en el Idiap, tambin se observan otros tres atributos que nos dan una idea de la
importancia que tiene cada miembro.
Tabla 5-11: Ranking trabajos publicados Idiap

NP= Nmero de trabajos publicados.


NA= Nmero de trabajos de tipo artculo publicados
PR= Nmero de personas distintas con las que se relaciona.
RT= Nmero total de relaciones.
NP
Herve Bourlard:
Samy Bengio:
Daniel Gatica-Perez:
Jean-Marc Odobez:
Hynek Hermansky:
Sebastien Marcel:
Alessandro Vinciarelli:
Mathew Magimai.-Doss:
Jose del R. Millan:
Iain A. McCowan:
Barbara Caputo:
Johnny Mariethoz:
Guillaume Lathoud:
Petr Motlicek:
Emile Fiesler:
Juergen Luettin:
John Dines:
Norman Poh:
Fabio Valente:
Sileye O. Ba:
Sriram Ganapathy:
Andrew Morris:
Philip N. Garner:
Pierre W. Ferrez:
David Barber:
Eddy Mayoraz:
Jithendra Vepa:
Dong Zhang:
Georg Thimm:
Conrad Sanderson:

NA
303
277
179
128
116
86
85
83
75
67
60
56
52
52
51
50
46
44
43
43
38
37
36
32
31
31
31
30
30
29

48

PR
17
23
19
15
5
6
17
3
19
5
11
4
4
2
8
5
1
3
5
4
4
1
1
6
4
4
1
1
6
5

RT
112
79
71
49
48
42
30
35
91
34
45
41
31
30
22
28
47
6
13
15
5
16
39
36
15
21
19
13
9
11

665
540
445
261
276
152
102
201
273
212
170
155
162
138
81
91
165
54
73
89
91
58
137
130
36
44
76
88
35
49

6.1 Conclusiones objetivas

6. Conclusiones
En este tema se expresan las conclusiones obtenidas respecto a la realizacin del
proyecto, as como una explicacin de las posibles ampliaciones que se podran llevar a
cabo.

6.1. Conclusiones objetivas


En este proyecto se ha obtenido un mtodo semiautomtico que nos ayude a realizar
el anlisis de redes sociales. Viendo los resultados obtenidos, se puede considerar que
se ha logrado el objetivo buscado.
Los objetivos iniciales se han cubierto en su totalidad, adems de las diversas
modificaciones que han ido surgiendo en el transcurso del desarrollo. Se ha acertado
tambin en la eleccin de las tecnologas utilizadas, que han facilitado el progreso del
proyecto.
Se ha creado una aplicacin que crea una red social, nos proporciona una serie de
informes y nos facilita su visualizacin a travs del programa Pajek. Tambin se ha
creado un pequeo manual del funcionamiento de la aplicacin y de los programas
Pajek y Inkscape, as como una web en la que se han alojado algunos de los resultados
obtenidos.

6.2. Conclusiones personales


La realizacin de este proyecto ha sido muy satisfactoria ya que he podido realizar por
primera vez un proyecto informtico desde el principio hasta su finalizacin.
El tema seleccionado me ha parecido muy interesante. He observado de primera mano
cmo podemos utilizar la informtica para desarrollar herramientas que nos permiten
obtener resultados en una rama tan actual como el estudio de las redes sociales.
He utilizado muchos de los conocimientos adquiridos durante el estudio de la carrera,
sobre todo los de programacin y estructuras de datos a la hora de realizar la
aplicacin. Tambin algunos aspectos estudiados de matemticas y redes me han
ayudado a enfrentarme al anlisis de los grafos obtenidos.
Por ltimo, ha sido muy gratificante poder acercarme al campo de la sociologa, en
concreto las redes sociales y la importancia que tiene su estudio en el mundo actual.
Tambin he podido aprender el funcionamiento de programas como Pajek que puede
ser utilizado en multitud de situaciones. La edicin de imgenes vectoriales o la
utilizacin de google sites han sido otras de las mltiples enseanzas que me deja la
realizacin de este proyecto.
49

6.3 Posibles ampliaciones

6.3. Posibles ampliaciones


Se puede ampliar el trabajo realizado utilizando diversas vas de desarrollo, el objetivo
final del trabajo podra ser una completa automatizacin en la manera de obtener
resultados. Para ello se tendra que crear un programa en el que introduciendo una
bibliografa proporcionase directamente todos los informes y diagramas solicitados.
Se tendra que modificar el cdigo fuente de Pajek para que proporcionase los
diagramas que el usuario pidiese, ms complicada sera la tarea de editar y mejorar la
visualizacin del diagrama.
Si se creara una web en la que alojar el programa para obtener los informes y
diagramas on-line, cualquier persona podra obtener informacin importante de una
red social a travs de una bibliografa, teniendo en cuenta que la mayora de listas de
publicaciones estn almacenadas en BibTex, sera una herramienta muy potente.
Una ampliacin ms sencilla puede ser mejorar los diagramas. Utilizando Pajek e
instalando los applets de Java correspondientes, podramos obtener imgenes en 3D
de las redes sociales obtenidas. Tambin podramos transformar las imgenes de cada
ao para formar un video donde se viera la evolucin de la red.

50

Bibliografa

Bibliografa
1. Wikipedia. Red Social. [En lnea] [Citado el: 18 de Junio de 2012.]
http://es.wikipedia.org/wiki/Red_social.
2. Pajek. Pajek Wiki. [En lnea]
http://pajek.imfm.si/doku.php?id=start.

[Citado

el:

15

de

Mayo

de

2012.]

3. open.michigan. Networks: Theory and Application. [En lnea] [Citado el: 16 de


Marzo de 2012.] http://open.umich.edu/education/si/si508/fall2008.
4. Mrvar, Vladimir Batagelj and Andrej. Pajek 3.01 Reference Manual. Ljubljana : s.n.,
2012.
5. method, Louvain. Louvain method. [En lnea] 13 de Julio de 2012.
https://sites.google.com/site/findcommunities/.
6. Hanneman, Robert A. Introduccin a los mtodos del anlisis de redes sociales. 2000.
7. UJI. INIT. [En lnea] 15 de Agosto de 2012. http://www.init.uji.es/.
8. Wikipedia. Idiap Research Institute. [En lnea] 20 de Agosto de 2012.
http://en.wikipedia.org/wiki/Idiap_Research_Institute.

51

Cdigo fuente

A. Cdigo fuente
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

#include
#include
#include
#include

<iostream>
<string>
<fstream>
<iomanip>

#define NTIPOS 14
using namespace std;
class rs{
private:
typedef struct {
//Almacena cada publicacion
int miemb[22];
int anyo;
int tipo;
//0=article, 1=book, 2=booklet, 3=conference, 4=inbook,
5=incollection, 6=inproceedings, 7=manual, 8=masterthesis, 9=misc, 10=phdthesis,
11=proceedings, 12=techreport, 13=unpublished
int nMiemb;
} TPublicacion;
typedef struct{
TPublicacion publicaciones[2000];
int nPublicaciones, anyoInicio;
} TPublicaciones;

//Almacena todas las publicaciones

typedef struct{
string miembros[750];
bool esMiembro[750];
int seccion[750];
int nMiembros;
} TMiembros;

//Almacena una lista con los miembros

typedef struct{
string nomSeccion[20];
int nSecciones;
} TSecciones;

//Almacena las distintas secciones

typedef struct{
//Almacena una relaciones entre dos miembros,
con el nmero de publicaciones y de artculos en comn
int miemb1;
int miemb2;
int suma;
int articulos;
} TRelacion;
typedef struct{
TRelacion relaciones[4500];
int nRelaciones;
} TRelaciones;
typedef struct{
TRelaciones relacionesAnyos[25];
int nAnyos;
} TAnyos;

//Almacena todas las relaciones

//Almacena las matrices de cada ao

TSecciones secc;
TMiembros miemb;
TPublicaciones publ;
TAnyos anyos;
TRelaciones rel;
bool SeRepite(string nombre);
int QueNumeroEs (string nombre);
la lista de nombres
void InicializaMatrizXAnyo (void);

//Comprueba si un numero se repite


//Devuelve el numero que es cada miembro en
//Pone todas las matrices de cada ao a 0

Cdigo fuente
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143

void GuardaRelacion(int miemb1,int miemb2);


//Almacena una relacin en
la matriz
void RellenaMatrizXAnyo (void);
//Rellena una matriz por cada ao
void OrdenaLista(void);
//Coloca una lista de nombres en orden
alfabetico
public:
rs();
//Constructor
void CreaLista(void);
//Coje un fichero de publicaciones y extrae
todos los nombres en la ed TMiembros
bool RellenaLista(void);
//Coje un fichero con nombres y los almacena
en una estructura de datos TMiembros
void ImprimeLista(void);
//Imprime una lista de nombres en un fichero
void GuardaFichero (void);
//Almacena en una ed Tpublicaciones todas
las publicaciones de un fichero
void RellenaMatriz (void);
//Rellena una matriz con los datos de todos
los aos
void EstudioRS (void);
//Realiza un informe de la red social
void EstudioSeccion(void);
//Realiza un informe de las distintas
secciones de la red social
void ImprimeMatriz(void);
//Imprime una matriz de adyacencia
void CopiaFichero(fstream &fOrigen, fstream &Destino); //Copia un fichero de texto
void OrdenaEstudio(int valor);
//Ordena un informe
void CreaPajek(int opcion);
//Crea un fichero .net de la red social para
Pajek
void CreaPajekVec(int opcion);
//Crea un fichero .vec de la red social para
Pajek
void CreaPajekSeccion(int opcion);
//Crea un fichero .net de las secciones para
Pajek
void CreaPajekSeccionVec(int opcion);
//Crea un fichero .vec de las secciones para
Pajek
void CreaPajekAnyo(int anyoInicio);
//Crea un fichero .net de la red social por
ao para Pajek
};
rs::rs(){miemb.nMiembros=0;publ.nPublicaciones=0;publ.anyoInicio=2010;rel.nRelaciones=0;
secc.nSecciones=0;
for (int i=0; i<4500;
i++){rel.relaciones[i].suma=0;rel.relaciones[i].articulos=0;}
}
void rs::CreaLista(){
string linea;
fstream fich;
fich.open("bibtex.bib", ios::in);
getline(fich,linea);
while (!fich.eof()){
getline(fich,linea);
if (linea.find("author = ",0)<20){
int posFin, posComa, posAnd, posIni;
busqueda con find, empieza desde el primer "
posIni=linea.find('"',0)+1;
posFin=linea.find('"',posIni)+1;
delimita la bsqueda de nombres
string nombre, apellido, nCompleto;
bool final=false;
quedan nombres en la linea
while (!final){
autores
posComa=linea.find(", ",posIni)+2;
and que encuentre
posAnd=linea.find(" and ",posIni);

//Se recorre el fichero


//Esta linea contiene los autores
//posIni marca el Inicio de la
//posicion del primer "
//posicion del ultimo ", se
//Booleano para saber si ya no
//Se recorre la linea que tiene los
//busco la primera coma y el primer

if(((posIni<posAnd)&&(posAnd<posComa)&&(posComa<posFin))||((posIni<posAnd)&&(posAnd<posF
in)&&(posFin<posComa))||((posComa<posIni)&&(posIni<posAnd)&&(posAnd<posFin))){
//Nomb
res en los que no esta separado el nombre del apellido por coma y no estan en ultima
posicion
nCompleto= linea.substr (posIni,posAnd-posIni);
if(!SeRepite(nCompleto)){
miemb.miembros[miemb.nMiembros]=nCompleto;
miemb.esMiembro[miemb.nMiembros]=false; //no es miembro
miemb.nMiembros++;
}
posIni=posAnd+5;
//Espacio que ocupa el and
}
else{

Cdigo fuente
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220

if ((posAnd<posComa)&&(posComa<posIni)&&(posIni)<(posFin)){
//Nombres que no
estan separados por coma y estan en ultima posicion
nCompleto=linea.substr(posIni,posFin-posIni-1);
//Como esta en
ultima posicion, hay se quitan las comillas con el -1
if(!SeRepite(nCompleto)){
miemb.miembros[miemb.nMiembros]=nCompleto;
miemb.esMiembro[miemb.nMiembros]=false;
miemb.nMiembros++;
}
final=true;
//Est en ultima posicion por lo
que se cambia de linea
}
else{
if ((posIni<posComa)&&(posComa<posAnd)&&(posAnd<posFin)){
//Nombres
separados por coma y que no estan en ultima posicion
nombre= linea.substr (posComa,posAnd-posComa);
apellido=linea.substr (posIni,posComa-posIni-2);
nCompleto=nombre+" "+apellido;
// Se almacena
nombre y apellido en nCompleto
if(!SeRepite(nCompleto)){
miemb.miembros[miemb.nMiembros]=nCompleto;
miemb.esMiembro[miemb.nMiembros]=true;
miemb.nMiembros++;
}
posIni=posAnd+5;
//5 es el tamao de and y se empieza a
buscar desde el and
}
else{
if ((posAnd<posIni)&&(posIni<posComa)&&(posComa<posFin)){
//Est en
posicion final y separado por coma
nombre= linea.substr (posComa,posFin-posComa-1);
apellido=linea.substr (posIni,posComa-posIni-2);
nCompleto=nombre+" "+apellido;
//Se almacena
nombre y apellido en nCompleto
if(!SeRepite(nCompleto)){
miemb.miembros[miemb.nMiembros]=nCompleto;
miemb.esMiembro[miemb.nMiembros]=true;
miemb.nMiembros++;
}
final=true;
}
else{
cerr<<"error en linea: \""<<linea<<"\"";
exit (1);
}
}
}
}
}
}
}
fich.close();
OrdenaLista();
//Se ordena alfabeticamente la lista
resultante
}
void rs::OrdenaLista(void){
//Ordena una lista de nombres
alfabeticamente utilizando el metodo de la burbuja
string nomAux;
int secAux;
bool miemAux;
for (int i=miemb.nMiembros;i>0;i--){
for (int j=0;j<i-1;j++){
if (miemb.miembros[j]>miemb.miembros[j+1]) {
nomAux=miemb.miembros[j]; secAux=miemb.seccion[j]; miemAux=miemb.esMiembro[j];
miemb.miembros[j]=miemb.miembros[j+1]; miemb.seccion[j]=miemb.seccion[j+1];
miemb.esMiembro[j]=miemb.esMiembro[j+1];
miemb.miembros[j+1]=nomAux; miemb.seccion[j+1]=secAux;
miemb.esMiembro[j+1]=miemAux;
}
}
}
}
bool rs::SeRepite(string nombre){
lista de nombres

//Mira si se repite un nombre en la

Cdigo fuente
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297

for (int i=0;i<miemb.nMiembros;i++){


if ((miemb.miembros[i]).find(nombre,0)==0){return true;}
}
return false;
}
bool rs::RellenaLista(){
//Coje un fichero con los nombres de los miembros
y los mete en la ed miemb ordenados alfabeticamente
string linea,nombre, seccion;
fstream fich;
fich.open("miembros.txt", ios::in);
int i=0, pos;
bool esta;
while (!fich.eof()){
getline(fich,linea);
pos=linea.find(" /",0);
//Comprueba si es miembro de alguna
seccion
if (pos>0){
//Si es miembro se aade la seccion
nombre=linea.substr (0,pos);
seccion=linea.substr (pos+2);
esta=false;
pos=0;
for (int j=1;j<secc.nSecciones+1;j++){
//La seccion 0 es ausencia de
seccion
if (secc.nomSeccion[j]==seccion){
esta=true;
pos=j;
}
}
if (!esta) {
//Si la seccion no est se aade
secc.nSecciones++;
secc.nomSeccion[secc.nSecciones]=seccion;
pos=secc.nSecciones;
}
miemb.miembros[i]=nombre;
miemb.seccion[i]=pos;
miemb.esMiembro[i]=true;
}
else{
miemb.miembros[i]=linea;
miemb.esMiembro[i]=false;
}
miemb.nMiembros++;
i++;
}
OrdenaLista();
fich.close();
if (secc.nSecciones>0){return true;}
return false;
}
void rs::ImprimeLista(void){
//Imprime la lista de miembros en un fichero
fstream fich;
fich.open("lista.txt", ios::out|ios::trunc);
for (int i=0;i<miemb.nMiembros;i++){
if(miemb.esMiembro[i]){
fich<<miemb.miembros[i]<<" "<<secc.nomSeccion[ miemb.seccion[i]]<<endl;
}
else {
fich<<miemb.miembros[i]<<endl;
}
}
fich.close();
}
int rs::QueNumeroEs(string nombre){
//Devuelve el numero que es cada miembro
en la lista de nombres
for (int i=0; i<miemb.nMiembros; i++){
if ( miemb.miembros[i].find(nombre,0)==0){
return i;
}
}return 1000;
//No lo encuentra: 1000 porque el numero
mximo de miembros es 750
}

Cdigo fuente
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374

void rs::GuardaFichero(void){
//Almacena todas las publicaciones con los miembros
que la han realizado y el ao
string linea,a;
fstream fPub;
int i=0,j=0,num,n=0;
fPub.open("bibtex.bib", ios::in);
fPub.clear();
fPub.seekg(0,ios::beg);
//Lleva el cursor otra vez al comienzo del
fichero
while (!fPub.eof()){
//recorre el fichero
getline(fPub,linea);
if
((linea.find("@article",0)==0)||(linea.find("@Article",0)==0)||(linea.find("@ARTICLE",0)
==0)){publ.publicaciones[i].tipo=0;};
if
((linea.find("@book",0)==0)||(linea.find("@Book",0)==0)||(linea.find("@BOOK",0)==0)){pub
l.publicaciones[i].tipo=1;};
if
((linea.find("@booklet",0)==0)||(linea.find("@Booklet",0)==0)||(linea.find("@BOOKLET",0)
==0)){publ.publicaciones[i].tipo=2;};
if
((linea.find("@conference",0)==0)||(linea.find("@Conference",0)==0)||(linea.find("@CONFE
RENCE",0)==0)){publ.publicaciones[i].tipo=3;};
if
((linea.find("@inbook",0)==0)||(linea.find("@Inbook",0)==0)){publ.publicaciones[i].tipo=
4;};
if
((linea.find("@incollection",0)==0)||(linea.find("@Incollection",0)==0)||(linea.find("@I
NCOLLECTION",0)==0)){publ.publicaciones[i].tipo=5;};
if
((linea.find("@inproceedings",0)==0)||(linea.find("@Inproceedings",0)==0)||(linea.find("
@INPROCEEDINGS",0)==0)){publ.publicaciones[i].tipo=6;};
if
((linea.find("@manual",0)==0)||(linea.find("@Manual",0)==0)||(linea.find("@MANUAL",0)==0
)){publ.publicaciones[i].tipo=7;};
if
((linea.find("@masterthesis",0)==0)||(linea.find("@Masterthesis",0)==0)||(linea.find("@M
ASTERTHESIS",0)==0)){publ.publicaciones[i].tipo=8;};
if
((linea.find("@misc",0)==0)||(linea.find("@Misc",0)==0)||(linea.find("@MISC",0)==0)){pub
l.publicaciones[i].tipo=9;};
if
((linea.find("@phdthesis",0)==0)||(linea.find("@Phdthesis",0)==0)||(linea.find("@PHDTHES
IS",0)==0)){publ.publicaciones[i].tipo=10;};
if
((linea.find("@proceedings",0)==0)||(linea.find("@Proceedings",0)==0)||(linea.find("@PRO
CEEDINGS",0)==0)){publ.publicaciones[i].tipo=11;};
if
((linea.find("@techreport",0)==0)||(linea.find("@Techreport",0)==0)||(linea.find("@TECHR
EPORT",0)==0)){publ.publicaciones[i].tipo=12;};
if
((linea.find("@unpublished",0)==0)||(linea.find("@Unpublished",0)==0)||(linea.find("@UNP
UBLISHED",0)==0)){publ.publicaciones[i].tipo=13;};
if (linea.find("author = ",0)<20){
int posFin, posComa, posAnd, posIni;
busqueda con find, empieza desde el primer "
posIni=linea.find('"',0)+1;
posFin=linea.find('"',posIni)+1;
string nombre, apellido, nCompleto;
bool final=false;
publ.publicaciones[i].nMiemb=0; j=0;
en esa publicacion
while (!final){
autores
posComa=linea.find(", ",posIni)+2;
posAnd=linea.find(" and ",posIni);

//Esta linea contiene los autores


//posIni marca el posInicio de la
//posicion del ultimo "
//Inicializa el numero de miembros
//Recorre la linea que tiene los

if(((posIni<posAnd)&&(posAnd<posComa)&&(posComa<posFin))||((posIni<posAnd)&&(posAnd<posF
in)&&(posFin<posComa))||((posComa<posIni)&&(posIni<posAnd)&&(posAnd<posFin))){
//Nomb
res en los que no esta separado el nombre del apellido por, y no estan en ultima
posicion
nCompleto= linea.substr (posIni,posAnd-posIni);
num=QueNumeroEs(nCompleto);
//Devuelve el numero de miembro
if(num<miemb.nMiembros){

Cdigo fuente
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450

publ.publicaciones[i].miemb[j]=num;
publ.publicaciones[i].nMiemb++;
j++;
}
posIni=posAnd+5;
}
else{
if ((posAnd<posComa)&&(posComa<posIni)&&(posIni)<(posFin)){
nCompleto=linea.substr(posIni,posFin-posIni-1);
ultima posicion se quitan las comillas con el -1
num=QueNumeroEs(nCompleto);
if(num<miemb.nMiembros){
publ.publicaciones[i].miemb[j]=num;
publ.publicaciones[i].nMiemb++;
}
final=true;
}
else{
if ((posIni<posComa)&&(posComa<posAnd)&&(posAnd<posFin)){
nombre= linea.substr (posComa,posAnd-posComa);
apellido=linea.substr (posIni,posComa-posIni-2);
nCompleto=nombre+" "+apellido;
num=QueNumeroEs(nCompleto);
if (num <= miemb.nMiembros){
esta bien escrito pero no aparece en la lista no se almacena
publ.publicaciones[i].miemb[j]=num;
publ.publicaciones[i].nMiemb++;
j++;
}
posIni=posAnd+5;
de and y empezamos a buscar desde el and
}

//Como esta en

//Si el nombre

//5 es el tamao

else{
if ((posAnd<posIni)&&(posIni<posComa)&&(posComa<posFin)){ //Esta en
posicion final escrito con coma
nombre= linea.substr (posComa,posFin-posComa-1);
apellido=linea.substr (posIni,posComa-posIni-2);
nCompleto=nombre+" "+apellido;
num=QueNumeroEs(nCompleto);
if (num <= miemb.nMiembros){
publ.publicaciones[i].miemb[j]=num;
publ.publicaciones[i].nMiemb++;
}
final=true;
}
else{
cerr<<"error en linea: \""<<linea<<"\"";
exit (1);
}
}
}
}
}
}
else {
if (linea.find("year = ",0)<20){
//En esta linea esta el
ao
num=linea.find('"',0)+1;
string anyo=linea.substr(num,4);
publ.publicaciones[i].anyo=atoi(anyo.c_str());
//Pasa el ao a int
if(publ.publicaciones[i].anyo<publ.anyoInicio){ publ.anyoInicio=
publ.publicaciones[i].anyo;}
publ.nPublicaciones++;
//Aade una publicacion
i++;
}
}
}
fPub.close();
}
void rs::RellenaMatriz(void){
los datos de todos los aos
bool esta;
for (int i=0;i<publ.nPublicaciones;i++){
publicaciones

//Rellena una matriz con


//Recorre todas las

Cdigo fuente
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527

for (int n=0; n<publ.publicaciones[i].nMiemb; n++){


//Recorre los miembros de
cada publicacion
for (int m=n; m<publ.publicaciones[i].nMiemb; m++){
esta=false;
for (int j=0;j<rel.nRelaciones;j++){
//Busca si ya est
almacenada esta relacion
if
(((rel.relaciones[j].miemb1==publ.publicaciones[i].miemb[n])&&(rel.relaciones[j].miemb2=
=publ.publicaciones[i].miemb[m]))
||
((rel.relaciones[j].miemb1==publ.publicaciones[i].miemb[m])&&(rel.relaciones[j].miemb2==
publ.publicaciones[i].miemb[n]))){
rel.relaciones[j].suma++;
//Suma una nueva
publicacin
if(publ.publicaciones[i].tipo==0){
rel.relaciones[j].articulos++;
}
esta=true;
}
}
if (!esta){
//Es una relacion nueva,
por lo que almacena los dos nombres
rel.relaciones[rel.nRelaciones].miemb1=publ.publicaciones[i].miemb[n];
rel.relaciones[rel.nRelaciones].miemb2=publ.publicaciones[i].miemb[m];
rel.relaciones[rel.nRelaciones].suma++;
if(publ.publicaciones[i].tipo==0){
rel.relaciones[rel.nRelaciones].articulos++;
}
rel.nRelaciones++;
}
}
}
}
}
void rs::EstudioRS(void){
float aux,pub,art, pers,total,colInt,totColInt, colSec, totColSec, porInt, porExt,
porSec;
fstream f;
f.open("InformeRS.txt", ios::in|ios::out|ios::trunc);
if(!f){
cout<<"error de apertura"<<endl;
}
f<<"NP= Nmero de trabajos publicados."<<endl;
f<<"NA= Nmero de trabajos de tipo artculo publicados"<<endl;
f<<"PR= Nmero de personas distintas con las que se relaciona."<<endl;
f<<"RT= Nmero total de relaciones."<<endl;
f<<"PI= Personas con las que se relaciona miembros del instituto."<<endl;
f<<"RI= Relaciones totales con miembros del instituto." <<endl;
f<<"PS= Personas con las que se relaciona miembros de su seccion."<<endl;
f<<"RS= Relaciones totales con miembros de su seccion."<<endl;
f<<"%I= Porcentaje de publicaciones con miembros del instituto sobre el total."<<endl;
f<<"%E= Porcentaje de publicaciones con externos al instituto sobre el total."<<endl;
f<<"%S= Porcentaje de publicaciones con miembros de su seccion sobre el
total."<<endl<<endl;
for (int m=0;m<33;m++) f<<" ";
f<<"NP\t\t NA\t\t PR\t\t RT\t\t PI\t\t RI\t\t PS\t\t RS\t\t %I\t\t %E\t\t %S"<<endl;
for (int i=0; i<miemb.nMiembros; i++)
{
//Mira el numero de
publicaciones por persona
pub=0;pers=0;total=0;colInt=0,totColInt=0,colSec=0, totColSec=0;
aux=miemb.miembros[i].size();
//Mira el tamao del
nombre (aux) para que empiecen todos los datos en la linea 32
f<<miemb.miembros[i]<<":";
for (int m=0;m<(31-aux);m++) f<<" ";
for (int j=0;j<rel.nRelaciones;j++){
if((rel.relaciones[j].miemb1==i)&&(rel.relaciones[j].miemb2==i)){pub=rel.relaciones[j].s
uma; art=rel.relaciones[j].articulos;} //El nmero de publicaciones son las veces que se
relaciona consigo mismo
else{
if((rel.relaciones[j].miemb1==i)||(rel.relaciones[j].miemb2==i)){
pers++;
total=total+rel.relaciones[j].suma;
//Suma cada relacion para saber las
personas con las que se ha relacionado y el total de relaciones
if (rel.relaciones[j].miemb1==i){
//Miembros del instituto con los que
se relaciona

Cdigo fuente
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604

if (miemb.esMiembro[rel.relaciones[j].miemb2]){colInt++;
totColInt=totColInt+rel.relaciones[j].suma;}
}
else {if (miemb.esMiembro[rel.relaciones[j].miemb1]){colInt++;
totColInt=totColInt+rel.relaciones[j].suma;}
}
if((miemb.seccion[i]>0)&&(miemb.seccion[rel.relaciones[j].miemb1]==miemb.seccion[rel.rel
aciones[j].miemb2])){ //Si son miembros de la misma seccion
colSec++; totColSec=totColSec+rel.relaciones[j].suma;
}
}
}
}
if (total>0){porInt=totColInt/total; porExt=(total-totColInt)/total;
porSec=(totColSec/total);}
//Para no dividir entre 0
else porInt=porExt=porSec=0;
if ((porInt<0.1)&&(porInt>0))porInt=0.1;
//si el valor esta entre 0 y 0.1 redondea a 0.1
if ((porExt<0.1)&&(porExt>0))porExt=0.1;
if ((porSec<0.1)&&(porSec>0))porSec=0.1;
if ((porInt<1)&&(porInt>0.9))porInt=0.9;
//si el valor esta entre 0.9 y 1 redondea a 0.9
if ((porExt<1)&&(porExt>0.9))porExt=0.9;
if ((porSec<1)&&(porSec>0.9))porSec=0.9;
f<<setprecision(3);
if (pub<10){f<<" "<<pub<<"\t\t";}
else if(pub<100){f<<" "<<pub<<"\t\t";}
else {f<<pub<<"\t\t";}
if (art<10){f<<" "<<art<<"\t\t";}
else if(art<100){f<<" "<<art<<"\t\t";}
else {f<<art<<"\t\t";}
if (pers<10){f<<" "<<pers<<"\t\t";}
else if(pers<100){f<<" "<<pers<<"\t\t";}
else {f<<pers<<"\t\t";}
if (total<10){f<<" "<<total<<"\t\t";}
else if(total<100){f<<" "<<total<<"\t\t";}
else {f<<total<<"\t\t";}
if (colInt<10){f<<" "<<colInt<<"\t\t";}
else if(colInt<100){f<<" "<<colInt<<"\t\t";}
else {f<<colInt<<"\t\t";}
if (totColInt<10){f<<" "<<totColInt<<"\t\t";}
else if(totColInt<100){f<<" "<<totColInt<<"\t\t";}
else {f<<totColInt<<"\t\t";}
if (colSec<10){f<<" "<<colSec<<"\t\t";}
else if(colSec<100){f<<" "<<colSec<<"\t\t";}
else {f<<colSec<<"\t\t";}
if (totColSec<10){f<<" "<<totColSec<<"\t\t";}
else if(totColSec<100){f<<" "<<totColSec<<"\t\t";}
else {f<<totColSec<<"\t\t";}
f<<setprecision(1);
decimal
if (porInt==0 || porInt==1){f<<"
else {f<<porInt<<"\t\t";}

//Muestra solamente un
"<<porInt<<"\t\t";}

if (porExt==0 || porExt==1){f<<"
else {f<<porExt<<"\t\t";}

"<<porExt<<"\t\t";}

if (porSec==0 || porSec==1){f<<"
else {f<<porSec<<endl;}

"<<porSec<<endl;}

}
f.close();
}
void rs::CopiaFichero(fstream &fOrigen, fstream &fDestino){
string linea;

Cdigo fuente
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681

while (!fOrigen.eof()){getline(fOrigen,linea);fDestino<<linea<<endl;}
fichero desordenado en uno nuevo que vamos a ordenar
}

//Copia el

void rs::OrdenaEstudio(int valor){


fstream fEstudio, fOrd;
int top=1000, max, aux, v=32+(5*valor),a;
string linea="", lineaMax, lineaTop;
bool empate, primerCero=false;
fEstudio.open("InformeRS.txt", ios::in|ios::out);
fOrd.open("InformeRSOrd.txt", ios::in|ios::out|ios::trunc);
fEstudio.seekg(0, ios::beg);
//Posiciona el cursor al inicio
del fichero
for (int i=0;i<13;i++){
//Hasta la linea 12 son iguales
los 2 ficheros
getline(fEstudio,linea);
fOrd<<linea<<endl;
}
for (int i=0;i<miemb.nMiembros;i++){
fEstudio.seekg(0, ios::beg);
for (int j=0;j<13;j++){getline(fEstudio,linea);} //Se Posiciona el cursor en la
linea 12
empate=false,max=-1;
//Se inicializa los valores
maximo y el chivato por si hay empate
for (int j=0;j<miemb.nMiembros;j++){
getline(fEstudio,linea);
if(linea.size()>0){
//El tamao de la ultima lnea
es 0
aux=atoi(linea.substr (v,3).c_str());
//Se pasa a entero el valor por
el que se esta ordenando
if ((aux==top)&&(lineaTop<linea)&&(!empate)){
//Si hay empate se coje el
siguiente nombre por orden alfabetico
lineaMax=linea;
empate=true;
max=aux;
}
if ((aux<top)&&(aux>max)){
max=aux;
lineaMax=linea;
empate=false;
}
}
}
if(empate){
fOrd<<lineaMax<<endl;;
lineaTop=lineaMax;
top=max;
}
else{
fOrd<<lineaMax<<endl;
top=max;
lineaTop=lineaMax;
}
}
fEstudio.close();
fOrd.close();
}
void rs::EstudioSeccion(void){
fstream f;
int aux;
bool esta;
float pubTot, artTot, artPor, seccMis, seccMisTot, seccDis, seccDisTot,seccPor;
char nombre[20]="EstudioSeccion.txt";
f.open(nombre,ios::out);
if(!f){
cout<<"error de apertura"<<endl;
}
f<<"TP= Numero total de publicaciones."<<endl;
f<<"TA= Nmero de publicaciones de tipo articulo"<<endl;
f<<"%A= Porcentaje de articulos respecto de las publicaciones totales"<<endl;
f<<"TS= Relaciones totales con miembros de la misma seccion."<<endl;
f<<"TO= Relaciones totales con miembros de otra seccion."<<endl;
f<<"%R= Porcentaje de las relaciones de la misma seccion sobre el total."<<endl<<endl;
for (int m=0;m<58;m++) f<<" ";
f<<" TP\t\t TA\t\t %A\t\t TS\t\t TO\t\t %R"<<endl;

Cdigo fuente
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758

for (int i=1; i<secc.nSecciones+1; i++){


pubTot=artTot=seccMis=seccMisTot=seccDis=seccDisTot=0; //Se inicializan los valores
a 0
for (int j=0; j<rel.nRelaciones;j++){
if
(((miemb.seccion[rel.relaciones[j].miemb1])==i)&&((miemb.seccion[rel.relaciones[j].miemb
2])==i)&&((rel.relaciones[j].miemb2)==(rel.relaciones[j].miemb1))){
pubTot=pubTot+rel.relaciones[j].suma;
//Publicaciones totales
artTot=artTot+rel.relaciones[j].articulos;
//Publicaciones de tipo
artculo
}
else if
(((miemb.seccion[rel.relaciones[j].miemb1])==i)&&((miemb.seccion[rel.relaciones[j].miemb
2])==i)){
//Comprueba las relaciones entre miembros de la misma seccion
seccMis++;
seccMisTot=seccMisTot+rel.relaciones[j].suma;
}
else if
((miemb.seccion[rel.relaciones[j].miemb1]==i)||(miemb.seccion[rel.relaciones[j].miemb2]=
=i)){
seccDis++;
seccDisTot=seccDisTot+rel.relaciones[j].suma;
}
}
artPor=artTot/pubTot;
seccPor=seccMisTot/(seccMisTot+seccDisTot);
aux=secc.nomSeccion[i].size();
//Obtiene el tamao del
nombre (aux) para que empiecen todos los datos en la misma linea
f<<secc.nomSeccion[i]<<":";
for (int m=0;m<(56-aux);m++) f<<" ";
f<<setprecision(4);
if (pubTot<10){f<<"
"<<pubTot<<"\t\t";}
else if(pubTot<100){f<<" "<<pubTot<<"\t\t";}
else if(pubTot<1000){f<<" "<<pubTot<<"\t\t";}
else {f<<pubTot<<"\t\t";}
if (artTot<10){f<<"
"<<artTot<<"\t\t";}
else if(artTot<100){f<<" "<<artTot<<"\t\t";}
else if(artTot<1000){f<<" "<<artTot<<"\t\t";}
else {f<<artTot<<"\t\t";}
f<<setprecision(1);
if((artPor>0)&&(artPor<0.1)){f<<" 0.1\t\t";}
else if ((artPor>0.9)&&(artPor<1)){f<<" 0.9\t\t";}
else if (artPor==1) {f<<"
"<<artPor<<"\t\t";}
else {f<<" "<<artPor<<"\t\t";}
f<<setprecision(4);
if (seccMisTot<10){f<<"
"<<seccMisTot<<"\t\t";}
else if(seccMisTot<100){f<<" "<<seccMisTot<<"\t\t";}
else if(seccMisTot<1000){f<<" "<<seccMisTot<<"\t\t";}
else {f<<seccMisTot<<"\t\t";}
if (seccDisTot<10){f<<"
"<<seccDisTot<<"\t\t";}
else if(seccDisTot<100){f<<" "<<seccDisTot<<"\t\t";}
else if(seccDisTot<1000){f<<" "<<seccDisTot<<"\t\t";}
else {f<<seccDisTot<<"\t\t";}
f<<setprecision(1);
if((seccPor>0)&&(seccPor<0.1)){f<<" 0.1\t\t"<<endl;}
else if ((seccPor>0.9)&&(seccPor<1)){f<<" 0.9\t\t"<<endl;}
else if (seccPor==1) {f<<"
"<<seccPor<<"\t\t"<<endl;}
else {f<<" "<<seccPor<<"\t\t"<<endl;}
}
}
void rs::ImprimeMatriz(void){
//Imprime una matriz de adyacencia en un fichero
de texto
bool esta;
int n;
fstream f;
f.open("matriz.txt", ios::out|ios::trunc);
f<<"
";

10

Cdigo fuente
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834

for(int i=0; i<miemb.nMiembros; i++){


if (i>99) f<<" "<<i;
else if (i>9) f<<" "<<i;
else f<<"
"<<i;
}
f<<endl;
for(int i=0; i<miemb.nMiembros; i++){
if(i>9)
f<<"("<<i<<")";
else
f<<"("<<i<<") ";
for(int j=0;j<miemb.nMiembros; j++){
//Recorre todos los miembros
esta=false;
n=0;
for (int n=0;n<rel.nRelaciones;n++){
if
(((rel.relaciones[n].miemb1==i)&&(rel.relaciones[n].miemb2==j)||(rel.relaciones[n].miemb
2==i)&&(rel.relaciones[n].miemb1==j))){
esta=true;
if (rel.relaciones[n].suma>99){f<<" "<<rel.relaciones[n].suma;}
else if (rel.relaciones[n].suma>9){ f<<" "<<rel.relaciones[n].suma;}
else f<<"
"<<rel.relaciones[n].suma;
}
}
if (esta==false){f<<"
0";}
}
f<<endl;
}
f.close();
}
void rs::CreaPajek(int opcion){
fstream f;
f.open("Pajek.net", ios::out|ios::trunc);
f<<"*Vertices "<<miemb.nMiembros<<endl;
//La primera linea indica los
miembros que hay
for (int i=0;i<miemb.nMiembros;i++){
f<<i+1<<" \""<<miemb.miembros[i]<<"\"";
//El nombre de los miembros va entre
comillas
if(secc.nSecciones>0){
//Cada seccin aparecer de un
color diferente
if(miemb.seccion[i]==0)f<<" ic Black"<<endl;
if(miemb.seccion[i]==1)f<<" ic Red"<<endl;
if(miemb.seccion[i]==2)f<<" ic Blue"<<endl;
if(miemb.seccion[i]==3)f<<" ic Pink"<<endl;
if(miemb.seccion[i]==4)f<<" ic Yellow"<<endl;
if(miemb.seccion[i]==5)f<<" ic Orange"<<endl;
if(miemb.seccion[i]==6)f<<" ic Green"<<endl;
if(miemb.seccion[i]==7)f<<" ic Magenta"<<endl;
if(miemb.seccion[i]==8)f<<" ic Brown"<<endl;
if(miemb.seccion[i]==9)f<<" ic Gray"<<endl;
if(miemb.seccion[i]==10)f<<" ic Cyan"<<endl;
}
else{
if (miemb.esMiembro[i]){f<<" ic Red"<<endl;}
else {f<<" ic Green"<<endl;}
}
}
f<<"*Edges"<<endl;
for (int i=0;i<rel.nRelaciones;i++){
if
((rel.relaciones[i].miemb1!=rel.relaciones[i].miemb2)&&(rel.relaciones[i].miemb1<=miemb.
nMiembros)&&(rel.relaciones[i].miemb2<=miemb.nMiembros)){
if (opcion==1){
//Muestra publicaciones
totales
f<<rel.relaciones[i].miemb1+1<<" "<<rel.relaciones[i].miemb2+1<<" ";
if (rel.relaciones[i].suma<5)f<<1<<endl;
else if (rel.relaciones[i].suma<10)f<<1<<endl;
else if (rel.relaciones[i].suma<20)f<<2<<endl;
else if (rel.relaciones[i].suma<30)f<<3<<endl;
else if (rel.relaciones[i].suma<40)f<<4<<endl;
else if (rel.relaciones[i].suma<50)f<<5<<endl;
else if (rel.relaciones[i].suma<60)f<<6<<endl;
else f<<7<<endl;
}

11

Cdigo fuente
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910

if (opcion==2){
//Muestra las
publicaciones de tipo artculo
if (rel.relaciones[i].articulos>0){
f<<rel.relaciones[i].miemb1+1<<" "<<rel.relaciones[i].miemb2+1<<" ";
if (rel.relaciones[i].articulos<5)f<<1<<endl;
else if (rel.relaciones[i].articulos<10)f<<1<<endl;
else if (rel.relaciones[i].articulos<20)f<<2<<endl;
else if (rel.relaciones[i].articulos<30)f<<3<<endl;
else if (rel.relaciones[i].articulos<40)f<<4<<endl;
else if (rel.relaciones[i].articulos<50)f<<5<<endl;
else if (rel.relaciones[i].articulos<60)f<<6<<endl;
else f<<7<<endl;
}
}
}
}
f.close();
}
void rs::CreaPajekSeccion(int opcion){
int suma;
fstream f;
f.open("PajekSecc.net", ios::out|ios::trunc);
f<<"*Vertices "<<secc.nSecciones<<endl;
for (int i=0;i<secc.nSecciones;i++){
f<<i+1<<" \""<<secc.nomSeccion[i]<<"\"";
if(i==1)f<<" ic Red"<<endl;
if(i==2)f<<" ic Blue"<<endl;
if(i==3)f<<" ic Pink"<<endl;
if(i==4)f<<" ic Yellow"<<endl;
if(i==5)f<<" ic Orange"<<endl;
if(i==6)f<<" ic Green"<<endl;
if(i==7)f<<" ic Magenta"<<endl;
if(i==8)f<<" ic Brown"<<endl;
if(i==9)f<<" ic Gray"<<endl;
if(i==10)f<<" ic Cyan"<<endl;
}
f<<"*Edges"<<endl;
for (int i=0; i<secc.nSecciones-1; i++){
for (int j=i+1; j<secc.nSecciones; j++){
suma=0;
for (int k=0; k<rel.nRelaciones;k++){
if
((((miemb.seccion[rel.relaciones[k].miemb1])==i+1)&&((miemb.seccion[rel.relaciones[k].mi
emb2])==j+1))||
(((miemb.seccion[rel.relaciones[k].miemb2])==i+1)&&((miemb.seccion[rel.relaciones[k].mie
mb1])==j+1))){
if (opcion==1){ suma=suma+rel.relaciones[k].suma;}
else{ suma=suma+rel.relaciones[k].articulos;}
}
}
if (suma>0){
f<<i+1<<" "<<j+1<<" ";
if (suma<10)f<<1<<endl;
else if (suma<20)f<<1<<endl;
else if (suma<40)f<<2<<endl;
else if (suma<60)f<<3<<endl;
else if (suma<80)f<<4<<endl;
else if (suma<100)f<<5<<endl;
else if (suma<120)f<<6<<endl;
else f<<7<<endl;
}
}
}
f.close();
}
void rs::CreaPajekSeccionVec(int opcion){
int suma;
fstream f;
f.open("PajekSeccVec.vec", ios::out|ios::trunc);
for (int i=0; i<secc.nSecciones; i++){
suma=0;
f<<i+1;
for (int j=0; j<rel.nRelaciones; j++){

12

Cdigo fuente
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987

if
(((miemb.seccion[rel.relaciones[j].miemb1])==i+1)&&(rel.relaciones[j].miemb1==rel.relaci
ones[j].miemb2)){
if (opcion==1){suma=suma+rel.relaciones[j].suma;}
else {suma=suma+rel.relaciones[j].articulos;}
}
}
f<<" "<<suma<<endl;
}
f.close();
}
void rs::CreaPajekAnyo(int anyoInicio){
int ini=0,fin=anyoInicio,aux=1;
fstream f;
f.open("PajekAnyo.net", ios::out|ios::trunc);
f<<"*Vertices "<<miemb.nMiembros<<endl; //14 es el tipo de documento diferente que
puede ser una publicacion
for (int i=0;i<miemb.nMiembros;i++){
f<<i+1<<" \""<<miemb.miembros[i]<<"\""<<" [1-13]";
if(secc.nSecciones>0){
//Cada seccin aparecer de un
color diferente
if(miemb.seccion[i]==0)f<<" ic Black"<<endl;
if(miemb.seccion[i]==1)f<<" ic Red"<<endl;
if(miemb.seccion[i]==2)f<<" ic Blue"<<endl;
if(miemb.seccion[i]==3)f<<" ic Pink"<<endl;
if(miemb.seccion[i]==4)f<<" ic Yellow"<<endl;
if(miemb.seccion[i]==5)f<<" ic Orange"<<endl;
if(miemb.seccion[i]==6)f<<" ic Green"<<endl;
if(miemb.seccion[i]==7)f<<" ic Magenta"<<endl;
if(miemb.seccion[i]==8)f<<" ic Brown"<<endl;
if(miemb.seccion[i]==9)f<<" ic Gray"<<endl;
if(miemb.seccion[i]==10)f<<" ic Cyan"<<endl;
}
else{
if (miemb.esMiembro[i]){f<<" ic Red"<<endl;}
else {f<<" ic Green"<<endl;}
}
}
f<<"*Edges"<<endl;
for (int i=fin;i<2013;i++){
for (int j=0; j<publ.nPublicaciones;j++){
if((publ.publicaciones[j].anyo<=i)&&(publ.publicaciones[j].anyo>ini)){
for(int n=0;n<publ.publicaciones[j].nMiemb;n++){
for(int m=n;m<publ.publicaciones[j].nMiemb;m++){
if(publ.publicaciones[j].miemb[n]!=publ.publicaciones[j].miemb[m]){
f<<publ.publicaciones[j].miemb[n]+1<<"
"<<publ.publicaciones[j].miemb[m]+1<<" 1 "<<"["<<aux<<"-13]"<<endl;
}
}
}
}
}
aux++;
ini=i;
}
f.close();
}
void rs::CreaPajekVec(int opcion){
bool esta;
fstream f;
f.open("PajekVec.vec", ios::out|ios::trunc);
f<<"*Vertices "<<miemb.nMiembros<<endl;
for (int i=0;i<miemb.nMiembros;i++){
esta=false;
for (int j=0;j<rel.nRelaciones;j++){
if
((rel.relaciones[j].miemb1==i)&&(rel.relaciones[j].miemb1==rel.relaciones[j].miemb2)){
if (opcion==1) { f<<rel.relaciones[j].suma<<endl;}
else {f<<rel.relaciones[j].articulos<<endl;}
esta=true;
}
}
if (!esta)f<<0<<endl;
}

13

Cdigo fuente
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064

f.close();
}
int main(){
int opcion;
bool secciones;
rs RedSocial=rs();
cout<<"**********************************************************************"<<endl;
cout<<"*
*"<<endl;
cout<<"*
DESARROLLO DE HERRAMIENTAS
*"<<endl;
cout<<"*
PARA EL ANALISIS DE REDES SOCIALES
*"<<endl;
cout<<"*
*"<<endl;
cout<<"**********************************************************************"<<endl<<en
dl;
opcion=0;
while ((opcion!=1)&&(opcion!=2)){
cout<<"Selecciona la fuente de la que obtener los miembros de la red Social"<<endl;
cout<<"1) De una lista (miembros.txt)"<<endl;
cout<<"2) De un fichero BibTex (bibtex.bib)"<<endl;
cin>>opcion;
}
if (opcion==1){
secciones=RedSocial.RellenaLista();
RedSocial.EstudioSeccion();
}
if (opcion==2) {
RedSocial.CreaLista();
}
RedSocial.GuardaFichero();
RedSocial.RellenaMatriz();
RedSocial.ImprimeLista();
RedSocial.EstudioRS();
RedSocial.ImprimeMatriz();
opcion=0;
while ((opcion!=1)&&(opcion!=2)){
cout<<endl<<"Selecciona el tipo de publicacion que contendra el fichero para
Pajek"<<endl;
cout<<"1) Todas las publicaciones realizadas"<<endl;
cout<<"2) Solamente los articulos"<<endl;
cin>>opcion;
}
if (secciones){
RedSocial.EstudioSeccion();
RedSocial.CreaPajekSeccion(opcion);
RedSocial.CreaPajekSeccionVec(opcion);
}
RedSocial.CreaPajek(opcion);
RedSocial.CreaPajekVec( opcion);
opcion=0;
while ((opcion<1)||(opcion>8)){
cout<<endl<<"Selecciona el valor por el que ordenar los datos del informe"<<endl;
cout<<"1) Numero de trabajos publicados"<<endl;
cout<<"2) Numero de trabajos de tipo artculo publicados"<<endl;
cout<<"3) Numero de personas distintas con las que se relaciona"<<endl;
cout<<"4) Numero total de relaciones"<<endl;
if (secciones){
cout<<"5) Numero de relaciones con miembros del instituto"<<endl;
cout<<"6) Numero de relaciones con miembros de su seccin"<<endl;
cout<<"7) % de publicaciones con miembros de su seccion sobre el total"<<endl;
}
cin>>opcion;
}
if (opcion==1){RedSocial.OrdenaEstudio(0);}
if (opcion==2){RedSocial.OrdenaEstudio(1);}
if (opcion==3){RedSocial.OrdenaEstudio(2);}
if (opcion==4){RedSocial.OrdenaEstudio(3);}
if (opcion==5){RedSocial.OrdenaEstudio(5);}
if (opcion==6){RedSocial.OrdenaEstudio(7);}
if (opcion==7){RedSocial.OrdenaEstudio(10);}
opcion=2013;

14

Cdigo fuente
1065
1066
1067
1068
1069
1070
1071

while ((opcion>2012)||(opcion<0)){
cout<<endl<<"Seclecciona el anyo de inicio para el estudio temporal: ";
cin>>opcion;
}
RedSocial.CreaPajekAnyo(opcion);
}

15