77
UNIVERSITAT JAUME I II31 SISTEMAS INFORMÁTICOS INGENIERÍA INFORMÁTICA CURSO 2011 - 2012 Memoria Técnica del Proyecto Proyecto presentado por el Alumno: Dirigido por Raúl Montoliu Colás Desarrollo de herramientas para el análisis de redes sociales Miguel Ángel Martínez Gregorio

II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

UNIVERSITAT JAUME I

II31 SISTEMAS INFORMÁTICOS

INGENIERÍA INFORMÁTICA CURSO 2011 - 2012

Memoria Técnica del Proyecto

Proyecto presentado por el Alumno:

Dirigido por Raúl Montoliu Colás

Desarrollo de herramientas

para el análisis de redes sociales

Miguel Ángel Martínez Gregorio

Page 2: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios
Page 3: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Resumen

I

Resumen

Este documento presenta la memoria del proyecto para la asignatura Sistemas Informáticos (II31). El objetivo del proyecto consiste en la creación y utilización 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 (bibliografía) almacenada en un fichero BibTex. Se ha desarrollado una aplicación que obtiene una serie de ficheros de salida a partir de un fichero BibTex. Los ficheros de salida obtenidos están formados por una serie de informes y distintos documentos de entrada del programa Pajek. Para la obtención de diagramas y su posterior análisis se utilizan los programas Pajek y Inkscape. Para la mejor visualización de los resultados, éstos han sido alojados en un sitio web. Para la obtención de resultados, se ha utilizado principalmente la red formada por el instituto de investigación INIT (Institute of New Imaging Technologies) de la Universtiat Jaume I.

Palabras clave

Red social, estructuras de datos, teoría de grafos, sociología

Page 4: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Índice general

II

Page 5: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Índice general

III

Índice general

1. Introducción .................................................................................................... 1

1.1. Motivación ........................................................................................................ 1

1.2. Conceptos ......................................................................................................... 2

1.2.1. Red social .................................................................................................. 2

1.2.2. Teoría 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. Organización del documento ........................................................................... 4

2. Planificación .................................................................................................... 5

2.1. Identificación de las tareas. .............................................................................. 5

2.2. Planificación inicial ........................................................................................... 6

2.3. Planificación real ............................................................................................... 7

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

3.1. Análisis .............................................................................................................. 9

3.1.1. Análisis BibTex .......................................................................................... 9

3.1.2. Análisis estructuras de datos .................................................................. 10

3.1.3. Análisis aplicación ................................................................................... 11

3.2. Diseño ............................................................................................................. 11

3.2.1. Diseño Estructuras de Datos .................................................................. 11

3.2.2. Diseño funciones .................................................................................... 12

3.3. Implementación .............................................................................................. 14

3.4. Funcionamiento .............................................................................................. 15

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

4.1. Análisis ............................................................................................................ 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. Obtención de diagramas ................................................................................ 21

4.4.1. Reducción de la red ................................................................................ 21

4.4.2. Método 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. Edición de diagramas con Inkscape ................................................................ 26

4.5.1. Modificar elementos .............................................................................. 26

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

Page 6: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Índice general

IV

5.1. Objetivo .......................................................................................................... 29

5.2. Método ........................................................................................................... 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. Conclusiones objetivas ................................................................................... 49

6.2. Conclusiones personales ................................................................................ 49

6.3. Posibles ampliaciones ..................................................................................... 50

A. Código fuente ................................................................................................ 52

Page 7: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Índice de figuras

V

Índice de figuras

Figura 3-1: Ejemplo fichero BibTex ................................................................................... 9

Figura 3-2: TPublicación ................................................................................................. 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ú aplicación ......................................................................................... 16

Figura 3-9: Ejemplo miembros.txt .................................................................................. 16

Figura 4-1: Pajek página principal .................................................................................. 18

Figura 4-2: Pantalla reporte Pajek .................................................................................. 18

Figura 4-3: Ventana visualización Pajek ......................................................................... 19

Figura 4-4: Ejemplo fichero .net ..................................................................................... 20

Figura 4-5: Ejemplo fichero .vec ..................................................................................... 20

Figura 4-6: Obtener reducción ....................................................................................... 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 Método 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 artículos publicados ......................................................................... 35

Figura 5-6: Detalle distancia Raul Montoliu ................................................................... 36

Figura 5-7: Gráfica evolución temporal .......................................................................... 37

Figura 5-8: INIT año 2000 ............................................................................................... 37

Figura 5-9:INIT año 2006 ................................................................................................ 38

Figura 5-10: INIT año 2012 ............................................................................................. 38

Figura 5-11: Publicaciones por sección .......................................................................... 40

Figura 5-12: Artículos por sección .................................................................................. 41

Figura 5-13: Detalle miembros/no miembros ................................................................ 42

Figura 5-14: Artículos de miembros/no miembros ........................................................ 43

Figura 5-15: Diagrama Wikipedia ................................................................................... 43

Figura 5-16: Detalle Idiap ............................................................................................... 46

Figura 5-17: Idiap artículos publicados ........................................................................... 47

Page 8: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Índice de tablas

VI

Page 9: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Índice de tablas

VII

Índice de tablas Tabla 2-1: Planificación inicial .......................................................................................... 6

Tabla 2-2: Planificación real .............................................................................................. 7

Tabla 5-1: Ranking centralidad ....................................................................................... 33

Tabla 5-2: Ranking trabajos publicados .......................................................................... 34

Tabla 5-3: Ranking artículos publicados ......................................................................... 35

Tabla 5-4: Evolución 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

Page 10: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Índice de tablas

VIII

Page 11: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

1.1 Motivación

1

1. Introducción

Este capítulo sirve como aproximación a algunos conceptos sobre la temática del proyecto. También se explican las motivaciones que nos han llevado a afrontar este trabajo y como se ha abordado su realización.

1.1. Motivación Una red social está formada por cualquier grupo de personas que tengan alguna relación entre sí. El grupo de personas que forman una empresa, un instituto de investigación o un equipo de baloncesto forman una red social. El análisis de estas redes, utilizando los métodos apropiados, nos puede revelar la importancia que tiene cada miembro dentro de ella. También nos permite obtener valores relativos a la red en conjunto, como su fortaleza o su cohesión. La automatización que proporcionan los ordenadores y el aumento del poder de computación 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 número de nodos que posee. Por otro lado, la mayoría de grupos de investigación almacenan las publicaciones que realizan todos sus miembros en documentos que tienen una estructura fija, esta estructura viene dada por la herramienta BibTex. Se utilizarán estos documentos para obtener los datos que formen nuestra red social. Las redes sociales que se generen para la realización del proyecto estarán constituidas por miembros de un grupo de investigación. La relación que une a dos miembros, será el hecho de si han realizado alguna publicación juntos. Aprovechando la gran cantidad de documentación y de herramientas sobre el estudio de redes sociales y las publicaciones en BibTex, se pretende crear un método semiautomático 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 obtendrán una serie de diagramas para visualizar la red social que se estudia. Para obtener resultados y probar la aplicación, se estudia principalmente la red social que forman los integrantes del instituto de investigación INIT de la Universitat Jaume I. Los grupos de investigación obtienen subvenciones, por lo que deben demostrar que producen resultados tangibles. El proyecto desarrollado puede ser de gran ayuda al proporcionar una visión diferente del trabajo que cada miembro aporta.

Page 12: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

1.2 Conceptos

2

1.2. Conceptos

A continuación se explican diversos conceptos que pueden ser útiles para la mejor comprensión del trabajo realizado.

1.2.1. Red social

Una red social es una estructura social formada por personas que están relacionadas entre sí, las relaciones que unen a cada individuo con otro pueden ser de cualquier índole. El análisis de redes sociales estudia estas estructuras sociales. Identifica cada individuo como un nodo y cada relación como una arista para aplicar la teoría 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 relación entre usuarios, por tanto, facilitan la creación de redes sociales, pero no son redes sociales en sí mismas. (1)

1.2.2. Teoría de grafos

La teoría de grafos juega un papel importante en las Ciencias de la Computación. Es una disciplina de las matemáticas 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 interacción, forman diagramas de los que se puede obtener mucha información. La teoría de grafos aporta los elementos para la operatividad del modelo de red social al representar a los individuos y sus vínculos mediante un grafo, ya que posee poderosas herramientas para realizar el análisis 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 bibliográficos siguiendo un patrón establecido. La mayoría 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.

Page 13: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

1.3 Objetivos

3

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 realización de este proyecto son los siguientes:

Crear una aplicación que dados unos parámetros de entrada y una bibliografía guardada en un fichero BibTex, almacene los datos de la bibliografía y obtenga una serie de documentos informativos y varios ficheros que puedan ser interpretados por el programa Pajek.

Realizar un pequeño manual de Pajek y de Inkscape, en el que se explicará la obtención de algunos diagramas interesantes y su posterior manipulación.

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 mostrarán 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 aplicación 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 obtención de diagramas.

Inkscape 0.48: Se ha utilizado para editar los diagramas obtenidos utilizando Pajek, mejorando de esta forma su visualización

Google sites: Ha sido empleada para crear el sitio web en el que pueden verse algunos de los resultados obtenidos.

Page 14: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

1.4 Organización del documento

4

1.4. Organización del documento La memoria del proyecto está dividida en los siguientes capítulos.

Capítulo 1 Introducción

Tiene como objetivo realizar un acercamiento progresivo al trabajo realizado. Está compuesto de una pequeña introducción, una serie de conceptos importantes para la comprensión del proyecto y la motivación para el desarrollo del proyecto.

Capítulo 2 Planificación

En este capítulo se procede en primer lugar a la identificación de tareas a realizar y su posterior ejecución. Comparando de esta manera la planificación teórica con la real.

Capítulo 3 Desarrollo del código

En este capítulo se explica el análisis, diseño e implementación de la aplicación encargada de obtener la información de la red social.

Capítulo 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.

Capítulo 5 Pruebas y resultados

Este capítulo muestra algunos informes y resultados obtenidos utilizando las herramientas desarrolladas en el proyecto.

Capítulo 6 Conclusiones

El último capítulo muestra las conclusiones que se han obtenido derivadas de la realización del proyecto. Anexo A: Código fuente En este anexo podremos encontrar el código fuente de la aplicación.

Page 15: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

2.1 Identificación de las tareas.

5

2. Planificación El primer paso para la planificación del proyecto consistió en la identificación de las distintas tareas a realizar. A cada una de estas tareas se les asignó un tiempo estimado de realización, de esta manera se consiguió programar el orden y la duración del proyecto. A continuación, durante la realización del proyecto, a través del seguimiento y control de las distintas tareas, se obtiene la planificación real.

2.1. Identificación de las tareas.

La ejecución del proyecto se divide en una serie de tareas que se explican a continuación.

Planificación

Definición de los objetivos: que debe hacer la aplicación.

Determinación de las herramientas que se van a utilizar.

Definición de las tareas a realizar.

Análisis y diseño

Análisis de requisitos.

Diseño de las estructuras de datos.

Definición de las funciones.

Implementación de la aplicación para obtener datos.

Creación de la web para visualizar resultados.

Experimentación

Preparación de las pruebas.

Obtención de las pruebas.

Conclusiones.

Documentación

Realización de la memoria.

Presentación

Page 16: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

2.2 Planificación inicial

6

2.2. Planificación inicial En la Tabla 2-1: Planificación inicial, se presenta una estimación temporal inicial de las diferentes tareas que forman el proyecto. La planificación inicial consideraba una duración total del proyecto de 300 horas. La estimación de cada tarea era aproximada y estaba sujeta a posibles modificaciones.

Para realizar un mejor seguimiento de la realización del proyecto, se acordó con el tutor realizar una reunión semanal, cada jueves, para evaluar los progresos que se estaban llevando a cabo.

Tabla 2-1: Planificación inicial

1 Planificación 10

2 Análisis 20

3 Diseño 50

4 Implementación 80

5 Pruebas 70

6 Documentación 50

7 Presentación 20

Total 300

Page 17: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

2.3 Planificación real

7

2.3. Planificación real

La temporización real de la realización del proyecto ha sufrido pequeñas discrepancias respecto a la planificación inicial en la mayoría de las tareas, no obstante, si se tiene en consideración el cómputo global de las horas, la planificación inicial estaba bastante bien ajustada. Las tareas de planificación y análisis son las que más se han dilatado respecto a la planificación inicial.

Tabla 2-2: Planificación real

1 Planificación 26

1.1 Comprensión del problema 8

1.2 Definición y planificación de tareas 10

1.3 Búsqueda e instalación de SW 8

2 Análisis 32

2.1 Análisis de los datos del BibTex 3

2.2 Análisis de las estructuras de datos 15

2.3 Análisis de SW para visualización de redes 14

3 Diseño 44

3.1 Diseño de estructuras de datos 20

3.2 Diseño de los algoritmos necesarios 24

4 Implementación 87

4.1 Estructuras de datos 18

4.2 Obtención de datos 35

4.3 Creación ficheros de salida 24

4.4 Creación de la web 10

5 Pruebas 64

5.1 Selección y preparación de pruebas 18

5.2 Obtención y documentación de pruebas 36

5.3 Conclusiones 10

6 Documentación 56

6.1 Realización de la memoria 56

7 Presentación 17

7.1 Preparación de la presentación 16

7.2 Presentación 1

Total 322

Page 18: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

2.3 Planificación real

8

Page 19: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

3.1 Análisis

9

3. Desarrollo del proyecto En este capítulo se incluye la descripción del desarrollo que se ha seguido para obtener la aplicación mediante la cual obtenemos una serie de informes y diversos ficheros de entrada para el programa Pajek, todo ello a partir de una bibliografía almacenada en un fichero BibTex.

3.1. Análisis

El análisis previo a la realización del código se divide en tres partes. Por una parte se analiza el formato en el que están 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 aplicación. 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 aproximación al estudio de las redes sociales empleando diversas herramientas.

3.1.1. Análisis BibTex

El primer objetivo de la aplicación consiste en almacenar una serie de datos bibliográficos 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

Page 20: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

3.1 Análisis

10

Los datos que se almacenan para obtener la red social son el tipo de publicación, los autores y el año de publicación.

El comienzo de cada publicación viene dado por el símbolo @ seguido del tipo de publicación del que se trata, hay 14 tipos diferentes de publicaciones:

article: Un artículo de un periódico o revista.

book: Un libro con una editorial que se indica en forma explícita.

booklet: Una obra que está impresa y encuadernada, pero sin una editorial o institución patrocinadora.

conference: Lo mismo que inproceedings, incluido para compatibilidad con el lenguaje de marcación Scribe.

inbook: Una parte de un libro, que puede ser un capítulo (o sección) o un rango de páginas.

incollection: Una parte de un libro que tiene su propio título.

inproceedings: Un artículo en las actas de sesiones de una conferencia.

manual: Documentación técnica.

mastersthesis: Una tesis de maestría o proyecto fin de carrera.

misc: Para uso cuando los demás 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 institución, usualmente numerado dentro de una serie.

unpublished: Un documento que tiene un autor y título, pero que no fue formalmente publicado.

Los nombres de los autores vienen precedidos de la cadena “author =” y están separados uno de otro por la cadena “and”. Se pueden almacenar siguiendo el formato “nombre apellido” o “apellido, nombre”.

Por último, el año de publicación viene introducido por la cadena “year =”.

3.1.2. Análisis 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 volúmenes de datos. Para ello se intentará codificar los nombres en números y utilizar listas en lugar de matrices para aprovechar mejor el espacio.

Muchos institutos de investigación separan a sus miembros en distintas secciones o categorías. Estas divisiones no aparecen reflejadas en las listas de publicaciones, pero resultan muy interesantes para el estudio de la red social. En el diseño del proyecto se tendrá que dejar la opción de introducir y almacenar estas características utilizando un fichero de texto de entrada.

Page 21: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

3.2 Diseño

11

3.1.3. Análisis aplicación

Se ha decidido implementar la aplicación utilizando el lenguaje de programación C++ debido a su manejo de estructuras de datos y a su robustez. Al desarrollar la aplicación se consideraron necesarias una serie de funcionalidades que debía poseer y que se definen a continuación:

La aplicación 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 bibliografía.

Se almacenan los datos, organizándolos en una serie de estructuras de datos para facilitar su manipulación.

Se crean una serie de ficheros de salida, algunos ficheros de texto con información acerca de la red social y otros ficheros con una estructura reconocida por el programa Pajek.

3.2. Diseño El diseño de la aplicación se separa en dos partes diferenciadas. Por un lado se diseñan las estructuras de datos donde se va a almacenar toda la información y por otro se diseñan las funciones que forman la aplicación .

3.2.1. Diseño Estructuras de Datos

A continuación 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 rediseñadas varias veces para adaptarlas mejor a la información que se quería almacenar para después ser mostrada. En la estructura TPublicación se almacena cada una de las publicaciones que se obtienen a través del BibTex. Para cada publicación almacenamos una lista de hasta 20 miembros, el año en que se ha publicado, el tipo de publicación de que se trata y el número de miembros que aparecen en la publicación.

Int miemb[20]

Int anyo Int tipo Int nMiemb

Figura 3-2: TPublicación

En la estructura TPublicaciones se almacenan todas las publicaciones de una bibliografía. Se compone de una lista de publicaciones, el año en el que se empieza a publicar y el número de publicaciones que hay.

Page 22: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

3.2 Diseño

12

TPublicación 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. También se almacena el número de miembros que hay en la red social.

String miembros[750]

Bool esMiembro[750]

Int sección[750]

Int nMiembros

Figura 3-4: TMiembros

En TSecciones se almacena una lista con los diferentes grupos a los que puede pertenecer un miembro, también se almacena el número de grupos.

String nomSeccion[20]

Int nSecciones

Figura 3-5: TSecciones

En la estructura TRelacion se almacena cada relación entre dos miembros que forman la red social. Se guarda cada individuo, el número de relaciones entre ellos y el número de publicaciones de tipo artículo que tienen en común.

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 número que hay de ellas.

Trelacion relaciones[4500]

Int nRelaciones

Figura 3-7: TRelaciones

3.2.2. Diseño funciones

La aplicación de obtención 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 obtención de datos y las que manipulan esos datos y obtienen los ficheros de salida. Obtención de datos Los datos para la creación de la red social se obtienen a partir de dos tipos diferentes de ficheros de texto, por un lado una bibliografía con formato BibTex y por otro una

Page 23: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

3.2 Diseño

13

lista con los nombres de los miembros, a través de esta lista, además, se pueden obtener dos atributos para cada miembro, uno de tipo booleano y otro de tipo entero. Estos atributos aportan más opciones a la hora de crear la red al permitirnos separar a los miembros en diferentes grupos. Las funciones que se han diseñado 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 añadir a cada miembro.

GuardaFichero: A partir de una bibliografía, 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.

Manipulación de datos y obtención 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 parámetros de los miembros que forman la red social.

OrdenaEstudio: Ordena el informe creado anteriormente en base a la característica que mande el usuario. Crea un nuevo fichero con el informe ordenado.

EstudioSección: Obtiene un fichero de texto con el estudio de algunos parámetros 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.

CreaPajekSección: 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 están separadas por el año en el que se realizaron, de esta forma obtenemos información de la evolución temporal de la red.

Page 24: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

3.3 Implementación

14

3.3. Implementación Se ha implementado el programa AnalisisRS.cpp para obtener automáticamente los ficheros que se utilizarán para realizar el análisis de la red social. En primer lugar, el programa obtiene la lista de los miembros que forman la red social, así como de sus características. Para ello utiliza el fichero Bibtex.bib o el Miembros.txt y los recorre buscando la información relevante y almacenándola en las estructuras de datos definidas. A continuación, 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 información necesaria almacenada para obtener los ficheros de salida. Después se obtienen los informes sobre la red social, se trata de una serie de ficheros de texto que contienen información estructurada. Uno de ellos es la lista de los miembros que forman la red social ordenados alfabéticamente. 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. También se obtiene una lista de los miembros con una serie características, como la cantidad total de publicaciones que ha realizado o con cuantas personas diferentes ha publicado. Esta lista se puede ordenar por cualquier característica 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 años, dependiendo de en que año se ha realizado la publicación, de esta forma se pueden obtener diagramas de evolución temporal.

Pajek.net: Todas las relaciones que forman la red social de los miembros a estudio.

PajekVec.vec: El número 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.

Page 25: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

3.4 Funcionamiento

15

PajekSeccVec.vec: El número de publicaciones que tiene cada sección de la red social.

3.4. Funcionamiento Se ha creado un fichero ejecutable AnalisisRS.exe. A través de un sencillo menú por consola permite modificar los distintos parámetros 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 bibliografía. Ambos archivos deben seguir una estructura determinada para el correcto funcionamiento de la aplicación. Cada línea del documento miembros.txt debe tener a un actor de la red social por línea definido por su nombre, opcionalmente se puede colocar el nombre del grupo al que pertenece precedido por el símbolo /. Los actores se separan entre miembros o no miembros, para que uno de ellos sea considerado

bibtex.bib

miembros.txt

AnalisisRS.cpp

InformeRS.txt

InformeRSOrd.txt

PajekAnyo.net

Pajek.net

PajekVec.vec

matriz.txt

PajekSecc.net PajekSeccVec.vec

lista.txt

InformeSecc.txt

Figura 3-8: Funcionamiento AnalisisRS.cpp

Page 26: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

3.4 Funcionamiento

16

miembro debe pertenecer a un grupo. Los nombres deben aparecer escritos tal como están escritos en el fichero bibtex.bib, es preferible quitar de ambos documentos los acentos para evitar confusiones. Si se obtienen los nombres a través del fichero bibtex.bib, es conveniente revisar que no existan duplicidades al estar algún nombre mal escrito Garcia/Gracia, o al estar en distinto idioma Luis/Lluis. El documento bibtex.bib debe tener el formato definido por el estándar, si algún nombre no sigue el estándar, la aplicación avisará al usuario mediante un mensaje de error con la línea que contiene el fallo para que sea resuelto. Una vez ejecutado el programa, aparece una consola en la que tenemos un diálogo con el programa para establecer los parámetros. Primero debemos señalar si se obtienen los actores de la red a partir del fichero bibtex.bib o del miembros.txt. A continuación se nos pide que indiquemos si los ficheros para Pajek contendrán la red formada por todas las publicaciones realizadas o solamente las de tipo artículo. Lo siguiente que debemos indicar es el parámetro por el que ordenaremos el informe obtenido, esto es útil para realizar rankings. Para terminar debemos indicar el año de comienzo para el estudio temporal, que se realizará desde el año indicado hasta el año actual. Cuando se finalice la ejecución del programa, los ficheros resultantes aparecerán en la misma carpeta en la que se encuentra alojado.

Figura 3-10: Menú aplicación

Alain Tamayo Fong /Geographical Information Oscar Ripolles Andres Marzal Varo /Text Processing and Scanning

Figura 3-9: Ejemplo miembros.txt

Page 27: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.1 Análisis

17

4. Tutorial Pajek En el siguiente capítulo se pretende realizar un acercamiento al uso de la aplicación 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. Análisis Se ha elegido la versión 3 de Pajek para proceder a la visualización y análisis 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 visualización de redes sociales.

Existe amplia documentación 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 través de la aplicación 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 resolución y se pueden modificar fácilmente todos los elementos con un programa de edición de imágenes vectoriales como Inkscape.

4.2. Aspectos generales Pajek es un programa para el análisis y visualización 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 documentación sobre el programa y un manual que resulta muy útil. Este programa posee una interfaz gráfica que facilita su uso, en la pantalla principal (Figura 4-1: Pajek página 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 algún procedimiento. El objeto que aparece en la primera casilla de cada tipo será el objeto al que se le aplicarán los procedimientos que se realicen y se considerará como el primero cuando se trate de procedimientos que requieran más de un objeto. Para cargar, guardar o editar alguno de los objetos se usan los iconos correspondientes a cada uno de ellos.

Page 28: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.2 Aspectos generales

18

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 continuación 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 algún 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 visualización (Figura 4-3: Ventana visualización Pajek).

Figura 4-1: Pajek página principal

Page 29: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.3 Estructura del fichero de entrada

19

Figura 4-3: Ventana visualización 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 línea:

*Vertices [numero de nodos]

A continuación, en cada línea se define un nodo con su número 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

.

.

Page 30: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.3 Estructura del fichero de entrada

20

Seguidamente se definen las aristas, para ello se utiliza el número de ambos nodos y el número de relaciones entre ellos, también se pueden añadir opciones como en el caso de la definición de los nodos.

[nodo 1] [nodo 2] [número 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 2 4 6 1 1 1 *Arcs :2 3 1 2 2 1 2

Figura 4-4: Ejemplo fichero .net

Cuando se obtiene un diagrama utilizando Pajek, éste memoriza la posición de los nodos añadiendo al fichero .net las coordenadas donde está situado cada nodo detrás de su descripción. De esta forma, si se guarda el fichero .net, también se guarda la posición de los miembros en el diagrama.

4.3.2. Fichero .vec

Cuando se estudia una red social, es importante visualizar el tamaño de cada nodo. En el caso de un instituto de investigación, la cantidad de publicaciones que ha realizado cada miembro nos puede indicar su tamaño. Pajek utiliza un fichero de entrada de texto .vec para dar un valor numérico a cada nodo de los que aparecen en el fichero .net. Al igual que el archivo .net el archivo comienza definiendo el número de actores. A continuación aparecen los valores siguiendo el orden de los nodos establecido en el fichero .net, uno en cada renglón.

*Vertices 4 4 0 1 12

Figura 4-5: Ejemplo fichero .vec

Page 31: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.4 Obtención de diagramas

21

4.4. Obtención de diagramas Pajek es una potente herramienta para visualizar redes utilizando grafos. A continuación se procede a explicar cómo obtener una serie de diagramas que faciliten el estudio de la red social.

4.4.1. Reducción 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 están relacionados con ningún otro, por lo que no aportan información 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 mínimo 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 reducción

4.4.2. Método Louvain

El método Louvain se utiliza para detectar comunidades en grandes redes. Este método funciona iterativamente en dos fases; primero localiza pequeñas comunidades y después añade 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.

Page 32: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.4 Obtención de diagramas

22

Si se desea realizar el método Louvain, debemos seleccionar en el menú principal Network > Create Partition > Louvain Communities > Run. Se obtendrá una partición 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 tamaño 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

Page 33: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.4 Obtención de diagramas

23

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 cuántos vértices 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 número 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 añadir en el fichero .net los periodos en que están 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 definición 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 están 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-*]

Page 34: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.4 Obtención de diagramas

24

*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 opción 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 número de nodos.

Page 35: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.4 Obtención de diagramas

25

Figura 4-12: Ventana draw

Tipos de visualización Pajek posee diferentes tipos de disposiciones para los elementos de un diagrama.

Circular: Posiciona los vértices en círculo.

Energy: Genera una disposición automática utilizando un algoritmo. Existen dos algoritmos, el Kamada-kawai y el Fruchterman Reingold, cada uno obtiene una disposición diferente para los vértices del diagrama.

Tile Components: Separa los distintos grupos. Opciones Utilizando el menú Options, se pueden realizar algunas operaciones interesantes

Obtener diferentes tamaños para nodos definidos en fichero de entrada .vec: Options > Size > Of vértices Defined in Input File.

Obtener diferentes tamaños para aristas definidos en fichero de entrada .net: Options > Lines > Diferent Widths.

También se pueden modificar otros aspectos de la visualización, como escalar el tamaño de la imagen o poner diferentes etiquetas a los elementos de la red. Exportar imagen Pajek permite exportar las imágenes que hemos obtenido en diferentes formatos en dos o tres dimensiones. Los formatos más 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

Page 36: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.5 Edición de diagramas con Inkscape

26

independientemente del tamaño 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 tamaño y resolución, pudiendo llegar a ocupar varios megas.

4.5. Edición de diagramas con Inkscape Inkscape es un editor de gráficos vectoriales de código abierto que nos permite la edición 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 múltiples posibilidades. Para que se nos permita la manipulación de los nodos, etiquetas y aristas por separado, se debe exportar la imagen desde Pajek utilizando la opción Export > 2D > SVG > Labels/Arcs/Edges. Esta acción 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 visualización de la red, puede ser necesaria la modificación de alguno de estos elementos.

Page 37: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.5 Edición de diagramas con Inkscape

27

Nodos: Para seleccionarlos todos es útil la herramienta Edición > 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 continuación, utilizar la herramienta Edición > Desagrupar. Una vez desagrupados, se modifican utilizando la herramienta Texto > Texto y Tipografía…

Page 38: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

4.5 Edición de diagramas con Inkscape

28

Page 39: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.1 Objetivo

29

5. Pruebas y Resultados Para comprobar el funcionamiento de la aplicación se han obtenido una serie de resultados con distintas redes sociales. En el siguiente capítulo se explicará cual ha sido el procedimiento seguido para obtener estos resultados y se mostrarán algunos de ellos.

5.1. Objetivo Durante todo el desarrollo del proyecto han ido realizándose pruebas para comprobar el buen funcionamiento de la aplicación 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 características de la red social formada por los miembros de INIT. A continuación se han estudiado las distintas secciones que forman este instituto. Para probar la funcionalidad de la aplicación, también se ha obtenido una serie de resultados procedentes del instituto Idiap. El principal objetivo de los resultados que se han obtenido utilizando la aplicación, consiste en obtener una visión real de la forma en la que están relacionados los distintos miembros de la red social. Se intentará un acercamiento a cual es la aportación real de cada miembro a la red. Debido a la dificultad de visionar imágenes grandes en papel, se ha realizado un sitio web en la dirección 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. Método Existen una serie de parámetros en cualquier red social que tienen una gran importancia. Se han intentado medir y observar gráficamente esas propiedades, se ha utilizado como guía la abundante información que existe en internet acerca del análisis de redes sociales así como el libro Introducción a los métodos del análisis de redes sociales. (6) Para la realización de los informes, se ha intentado reflejar la relación que tienen cada nodo con el resto de nodos de la red, también se ha intentado que aparezca reflejada la cantidad de trabajo que aporta a la red. Se ha aprovechado la ordenación de los informes para realizar algunos rankings. Para cada miembro se obtienen las siguientes características:

NP= Número total de trabajos que ha publicado (se contabilizan todos los tipos de publicaciones)

Page 40: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

30

NA= Número total de artículo que ha publicado (se contabilizan únicamente los artículos)

PR= Número de personas distintas de la red con las que se relaciona

RT= Número total de relaciones en la red (con cada persona puede tener más de una relación)

PI= Número de personas distintas con las que se relaciona consideradas miembros del instituto

RI= Número total de relaciones con personas consideradas miembros del instituto (con cada persona puede tener más de una relación)

PS= Número de personas distintas con las que se relaciona miembros de su sección

RS= Número total de relaciones con miembros de su seccion (con cada persona puede tener más de una relación)

%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. Observándolos, también se obtienen algunos parámetros que nos hacen reflexionar acerca de la importancia de cada nodo y de la adecuación de la distribución 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 continuación, para obtener otros resultados, se han añadido a esta red los colaboradores externos que han publicado con el instituto. También 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 investigación 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 código de colores para identificar las distintas secciones que forman el INIT. Dependiendo de a qué sección pertenezca, el nodo que identifica a un miembro tendrá un color determinado.

Page 41: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

31

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

Distribución de las secciones Para saber si la distribución de los miembros entre las distintas secciones se corresponde a las relaciones que se establecen en las publicaciones, se ha utilizado un método automático de Pajek que nos proporciona las diferentes comunidades que se forman en la red. A continuación se han comparado esas comunidades (Figura 5-1: Detalle Método 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 método heurístico Louvain. Si se compara el resultado obtenido utilizando este método con las secciones que componen el INIT, se obtienen una serie de conclusiones:

El método 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 sección 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 sección Visual Engineering se encuentran divididos entre dos de las comunidades que ha obtenido el método Louvain.

Para obtener una mayor equivalencia entre las comundidades obtenidas y las secciones existentes, cuatro miembros deberían cambiar de sección. Por un lado Francisco Ramos y Oscar Belmonte, que deberían pasar de Geographical Information a Interactive Visualization. Por otro Herbert Perez y Alejandro Garcés pasarían de Visual Engineering a Virtual and Augmented Reality.

Page 43: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

33

Ranking por grado nodal o centralidad

Tabla 5-1: Ranking centralidad

1 Pedro Garcia Sevilla: 23

2 Filiberto Pla Banon: 21

3 Joaquin Huerta Guijarro: 20

3 Ricardo Quiros Bauset: 20

5 Jose Martinez Sotoca: 16

6 Miguel Chover Selles: 15

7 Carlos Gonzalez Ballester: 13

7 Jose Salvador Sanchez Garreta: 13

7 Oscar Belmonte Fernandez: 13

10 Carlos Granell Canut: 12

10 Jose Ribelles Miguel: 12 El grado de un nodo es un índice de exposición 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 núcleos en la red. En el siguiente diagrama el tamaño del nodo indica su grado, es decir, el número de aristas incidentes a él, a mayor tamaño, mayor es el grado del nodo. El color diferencia la sección a la que pertenece dentro del instituto.

Figura 5-3: grado nodal

Page 44: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

34

Ranking por trabajos publicados

Tabla 5-2: Ranking trabajos publicados

1 Filiberto Pla Banon: 209

2 Jose Salvador Sanchez Garreta: 140

3 Miguel Chover Selles: 104

4 Jose Martinez Sotoca: 75

5 Carlos Granell Canut: 61

6 Joaquin Huerta Guijarro: 58

7 Jesus Lancis Saez: 54

8 Ramon A. Mollineda Cardenas: 44

9 Pedro Garcia Sevilla: 43

10 Jose Miguel Sanchiz Marti: 42

10 Laura Diaz Sanchez: 42

10 Vicente Javier Traver Roig: 42 El tamaño del nodo indica la cuantía de su trabajo, a mayor tamaño, mayor es el número de trabajos publicados. En la Figura 5-4 el grosor de las aristas indica el número de relaciones entre los dos miembros unidos. El color diferencia la sección 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 también se aprecia la aparición 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

Page 45: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

35

Ranking por artículos publicados

Tabla 5-3: Ranking artículos publicados

1 Filiberto Pla Banon: 48

2 Jose Salvador Sanchez Garreta: 33

3 Miguel Chover Selles: 26

4 Vicente Palmer Andreu: 23

5 Jesus Lancis Saez: 22

6 Carlos Granell Canut: 15

7 Joaquin Huerta Guijarro: 13

7 Laura Diaz Sanchez: 13

9 Jose Martinez Sotoca: 11

9 Jose Miguel Sanchiz Marti: 11 El número de artículos publicados representa con mayor fidelidad que el número 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 número de artículos publicados, el tamaño del nodo indica el número de publicaciones de este tipo y el tamaño de las aristas viene determinada por el número de relaciones que existe entre dos nodos. Si se compara el diagrama con el número total de publicaciones y el que solo tiene en cuenta los artículos, se aprecia una disminución en el numero de nodos y en la cantidad de relaciones. El grupo más 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 artículos publicados

Page 46: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

36

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 número de vértices 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 número de pasos para llegar a cualquier otro nodo. Para ello deben tener mucha centralidad (número de aristas incidentes) o estar cerca de alguien que la tiene.

Figura 5-6: Detalle distancia Raul Montoliu

Evolución temporal Un tema de interés en el análisis 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 año 2000 hasta el 2012. En la Tabla 5.4 se puede observar el crecimiento del número de actores y las relaciones de la red. En el año 2000 la red solamente contaba con doce actores de siete áreas diferentes que establecían un total de 99 relaciones entre ellos. En el año 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 composición actual del instituto.

Page 47: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

37

Tabla 5-4: Evolución temporal miembros del INIT

Año Actores Relaciones

2000 12 99

2001 16 154

2002 16 208

2003 18 244

2004 20 296

2005 23 324

2006 27 405

2007 32 532

2008 37 676

2009 46 802

2010 58 1098

2011 61 1296

2012 62 1400

Figura 5-7: Gráfica evolución temporal

Figura 5-8: INIT año 2000

Page 48: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

38

Figura 5-9:INIT año 2006

Figura 5-10: INIT año 2012

Situación actual Miembros INIT Utilizando la aplicación realizada también se ha obtenido un informe con algunos parámetros de todos los miembros del INIT, está ordenada por el número de artículos publicados. En el informe se pueden observar que la mayoría de miembros guarda una relación 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. También se observan algunas personas que solo han realizado publicaciones con miembros de su sección.

Page 49: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

39

NP NA PR RT PS RS %S

Filiberto Pla Banon: 209 48 21 238 7 48 0.2

Jose Salvador Sanchez Garreta: 140 33 13 152 6 85 0.6

Miguel Chover Selles: 104 26 15 204 4 95 0.5

Vicente Palmer Andreu: 24 23 0 0 0 0 0

Jesus Lancis Saez: 54 22 8 113 7 103 0.9

Carlos Granell Canut: 61 15 12 113 10 107 0.9

Joaquin Huerta Guijarro: 58 13 20 145 11 108 0.7

Laura Diaz Sanchez: 42 13 9 77 8 76 1

Jose Martinez Sotoca: 75 11 16 104 5 57 0.5

Jose Miguel Sanchiz Marti: 42 11 6 46 1 10 0.2

Francisco Ramos Romero: 30 9 11 66 3 8 0.1

Omel Mendoza Yero: 29 9 7 51 6 48 0.9

Jesus Gumbau Portales: 33 8 10 86 4 54 0.6

Ramon A. Mollineda Cardenas: 44 8 7 72 6 70 1

Vicente Javier Traver Roig: 42 8 8 46 3 15 0.3

Inmaculada Remolar Quintana: 30 7 11 101 4 73 0.7

Enrique Tajahuerce Romera: 22 6 8 75 7 67 0.9

Jose Ribelles Miguel: 33 6 12 68 4 40 0.6

Oscar Belmonte Fernandez: 23 6 13 63 5 6 0.1

Pedro Garcia Sevilla: 43 6 23 81 5 40 0.5

Raul Martinez Cuenca: 17 6 7 46 6 40 0.9

Ricardo Quiros Bauset: 27 6 20 84 2 9 0.1

Vicent Climent Jorda: 21 6 7 60 6 56 0.9

Vicente Garcia Jimenez: 31 6 10 59 6 55 0.9

Pedro Latorre Carmona: 23 5 7 21 3 14 0.7

Vicente Duran Bosch: 14 5 7 46 6 44 1

Cristina Rebollo Santamaria: 19 4 10 71 4 54 0.8

Jorge Badenas Carpio: 16 4 5 27 1 10 0.4

Carlos Gonzalez Ballester: 20 3 13 43 1 3 0.1

Jose Joaquin Gual Arnau: 3 3 1 1 1 1 1

Luis Martinez Leon: 11 3 7 36 0 0 0

Manuela Nunez Redo: 9 3 11 23 6 15 0.7

Michael Gould: 6 3 6 18 4 16 0.9

Pedro Company Calleja: 12 3 0 0 0 0 0

Raul Montoliu Colas: 24 3 8 35 3 13 0.4

Adolfo Martinez Uso: 22 2 5 52 2 15 0.3

Jose Antonio Gil Altaba: 6 2 7 14 7 14 1

Monica Millan Giraldo: 8 2 3 12 2 9 0.8

Pere Xavier Clemente Pesudo: 8 2 7 31 6 28 0.9

Alain Tamayo Fong: 17 1 7 36 6 35 1

Alejandro Garces Calvelo: 13 1 4 29 1 3 0.1

Andres Marzal Varo: 16 1 4 23 4 23 1

Arturo Beltran Fonollosa: 16 1 6 30 6 30 1

Henry Anaya Sanchez: 3 1 3 8 2 6 0.8

Isabel Gracia Luengo: 6 1 5 7 2 4 0.6

Juan Miguel Vilar Torres: 12 1 4 19 4 19 1

Maria Angeles Lopez Malo: 1 1 1 1 0 0 0

Mercedes Fernandez Alonso: 5 1 6 18 6 18 1

Olga Rajadell Rojas: 9 1 2 12 2 12 1

Ruben Maso Carcases: 1 1 1 1 1 1 1

Sergio Tril les Oliver: 3 1 3 6 3 6 1

Arturo Quintana Torres: 6 0 4 10 1 6 0.6

Carlos Serra Toro: 4 0 4 10 2 7 0.7

Cristian Martin Reinhold: 2 0 3 3 3 3 1

David Llorens Pinana: 7 0 4 17 4 17 1

Eva Salvador Balaguer: 1 0 3 3 1 1 0.3

Herbert Perez Roses: 1 0 2 2 0 0 0

Ianisse Quinzan Suarez: 5 0 8 11 4 7 0.6

Javier Ortells Lorenzo: 1 0 3 3 3 3 1

Juan Carlos Amengual Argudo: 1 0 4 4 4 4 1

Juan Pablo Aibar Ausina: 1 0 0 0 0 0 0

Laura Cleofas: 1 0 1 1 1 1 1

Pau Agusti Ballester: 3 0 3 8 2 5 0.6

Raul Martin Felez: 6 0 4 11 4 11 1

Tomas J. Arnau Porcar: 2 0 2 2 1 1 0.5

Vicente Palazon Gonzalez: 7 0 4 13 4 13 1

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.

NP= Número de publicaciones.

NA= Número de artículos publicados

PR= Personas con las que se relaciona.

RT= Relaciones totales.

Tabla 5-5: Informe miembros del INIT

Page 50: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

40

Estudio Secciones INIT También 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 información relevante. A continuación 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 están determinadas por las publicaciones en común en el primer caso y por las publicaciones de tipo artículo en el segundo caso. El tamaño de los nodos viene determinado por la cantidad de publicaciones realizadas y el grosor de la arista por el número de relaciones entre dos nodos.

Tabla 5-6: Informe secciones

TP TA %A TS TO %R

Ingenieria visual: 312 62 0.2 65 276 0.2

Aprendizaje automatico y Reconocimiento de patrones: 335 63 0.2 158 164 0.5

Informacion Geografica: 273 67 0.2 212 170 0.6

Digitalizacion y Procesamiento de textos: 44 2 0.1 38 0 1

Realidad Virtual y Aumentada: 53 9 0.2 9 119 0.1

Video y Multimedia: 132 27 0.2 30 113 0.2

Visualizacion interactiva: 219 51 0.2 158 214 0.4

Optica: 181 60 0.3 238 0 1

Imagen y Modelado Matematico: 28 27 0.9 1 0 1

Modelado basado en Bocetos: 12 3 0.2 0 0 0

TP= Numero total de publicaciones.

%R= Porcentaje de las relaciones de la misma seccion sobre el total.

TO= Relaciones totales con miembros de otra seccion.

TS= Relaciones totales con miembros de la misma seccion.

%A= Porcentaje de articulos respecto de las publicaciones totales

TA= Número de publicaciones de tipo articulo

Figura 5-11: Publicaciones por sección

Page 51: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.3 Resultado

41

Figura 5-12: Artículos por sección

Datos Pajek El programa Pajek también nos proporciona una serie de propiedades de la red social que estamos estudiando, como el número de nodos y aristas, La densidad nos indica la proporción de vínculos en una red en relación con el total de vínculos 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 están conectados entre sí. El diámetro de la red nos indica la distancia máxima 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.

Page 52: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.4 Total relaciones INIT

42

5.4. Total relaciones INIT Muchos de los trabajos que publican los miembros del INIT están 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 teníamos 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 núcleos de la red y a su alrededor aparecen multitud de colaboradores que expanden la red.

Figura 5-13: Detalle miembros/no miembros

Solo artículos Si se tienen en cuenta solamente las publicaciones de tipo artículos para obtener el diagrama, los actores relacionados se reducen a 250 y la cantidad de relaciones también disminuye considerablemente.

Page 53: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.4 Total relaciones INIT

43

Figura 5-14: Artículos 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 mayoría de redes sociales están formadas a partir de una bola de nieve, esto se refiere a que se forman pequeños núcleos que van creciendo, y éstos se unen entre sí por algún miembro. Puede haber un núcleo principal alrededor del cual se sitúan los demás. Si obtenemos el diagrama mediante la utilización de algún algoritmo que acerque los nodos más próximos entre sí, se observan mejor las similitudes.

Figura 5-15: Diagrama Wikipedia

Page 54: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.4 Total relaciones INIT

44

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 añadidos, muchos realizan colaboraciones esporádicas con una o dos personas y no forman núcleos con muchas relaciones. También ha aumentado el diámetro 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 número de personas diferentes con las que se relaciona cada miembro, en la Tabla 5-9: Ranking miembros/no miembros aparecen los 30 actores con más relaciones. La mayoría de los actores que aparecen son miembros del instituto y aparecían en los rankings anteriores, solamente se añaden algunos colaboradores externos que realizan muchas publicaciones con el instituto.

Page 55: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.4 Total relaciones INIT

45

Tabla 5-9: Ranking miembros/no miembros

NP NA PR RT PI RI PS RS %I %E %S

Filiberto Pla Banon: 209 48 99 429 23 239 85 239 0.6 0.4 0.6

Jesus Lancis Saez: 54 22 61 275 9 132 7 103 0.5 0.5 0.4

Jose Martinez Sotoca: 75 11 58 217 16 104 5 57 0.5 0.5 0.3

Jose Salvador Sanchez Garreta: 140 33 56 298 13 152 6 85 0.5 0.5 0.3

Omel Mendoza Yero: 29 9 55 163 11 82 6 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 8 49 153 11 79 42 80 0.5 0.5 0.5

Laura Diaz Sanchez: 42 13 47 133 12 84 8 76 0.6 0.4 0.6

Miguel Chover Selles: 104 26 44 319 18 222 4 95 0.7 0.3 0.3

Pedro Garcia Sevilla: 43 6 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 6 39 115 21 88 2 9 0.8 0.2 0.1

Juan Miguel Vilar Torres: 12 1 36 60 4 19 4 19 0.3 0.7 0.3

Pedro Latorre Carmona: 23 5 34 79 7 21 30 72 0.3 0.7 0.9

Vicent Climent Jorda: 21 6 33 142 8 72 6 56 0.5 0.5 0.4

P. Andres: 19 5 32 128 10 78 24 65 0.6 0.4 0.5

Manuela Nunez Redo: 9 3 31 44 13 25 6 15 0.6 0.4 0.3

Raul Martinez Cuenca: 17 6 31 98 8 50 6 40 0.5 0.5 0.4

Oscar Belmonte Fernandez: 23 6 30 84 15 65 5 6 0.8 0.2 0.1

Enrique Tajahuerce Romera: 22 6 29 130 10 82 7 67 0.6 0.4 0.5

Andres Marzal Varo: 16 1 28 64 4 23 4 23 0.4 0.6 0.4

Jose Miguel Sanchiz Marti: 42 11 28 99 6 46 1 10 0.5 0.5 0.1

Luis Martinez Leon: 11 3 28 71 8 38 21 35 0.5 0.5 0.5

Vicente Javier Traver Roig: 42 8 26 75 8 46 3 15 0.6 0.4 0.2

David Llorens Pinana: 7 0 24 45 4 17 4 17 0.4 0.6 0.4

Vicente Garcia Jimenez: 31 6 24 85 9 58 6 55 0.7 0.3 0.6

Jose Ribelles Miguel: 33 6 23 84 14 70 4 40 0.8 0.2 0.5

Francesc J. Ferri: 37 12 21 83 6 59 17 50 0.7 0.3 0.6

Francisco Ramos Romero: 30 9 21 97 13 71 3 8 0.7 0.3 0.1

Vicente Duran Bosch: 14 5 21 81 7 46 6 44 0.6 0.4 0.5

Carlos Gonzalez Ballester: 20 3 20 59 15 51 1 3 0.9 0.1 0.1

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= Número de publicaciones.

NA= Número de artículos 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.

Page 56: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.5 Idiap

46

5.5. Idiap El Idiap Research Institute es una fundación autónoma, independiente y sin ánimo de lucro que se dedica a la investigación. Tiene su sede en Martigny (Suiza) y está especializada en información multimedia y en comunicación multimodal. (8) Visión 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 relación entre dos nodos indicando que han realizado alguna publicación juntos. La red social que forman las personas que han realizado alguna publicación 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 número de artículos únicamente, se obtienen 714 relaciones.

Figura 5-16: Detalle Idiap

Artículos publicados El siguiente diagrama se ha obtenido teniendo en cuenta únicamente las publicaciones de tipo artículo y después utilizando la opción 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 artículos publicados), los actores que no están relacionados con otro han sido omitidos, siendo uno el grado mínimo para aparecer en los diagramas.

Page 57: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.5 Idiap

47

Figura 5-17: Idiap artículos 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.

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.

Tabla 5-10: Datos Pajek Idiap

Page 58: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

5.5 Idiap

48

Ranking Idiap A continuación aparece el ranking de las 30 personas que más trabajos han publicado en el Idiap, también 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 NA PR RT

Herve Bourlard: 303 17 112 665

Samy Bengio: 277 23 79 540

Daniel Gatica-Perez: 179 19 71 445

Jean-Marc Odobez: 128 15 49 261

Hynek Hermansky: 116 5 48 276

Sebastien Marcel: 86 6 42 152

Alessandro Vinciarelli: 85 17 30 102

Mathew Magimai.-Doss: 83 3 35 201

Jose del R. Millan: 75 19 91 273

Iain A. McCowan: 67 5 34 212

Barbara Caputo: 60 11 45 170

Johnny Mariethoz: 56 4 41 155

Guillaume Lathoud: 52 4 31 162

Petr Motlicek: 52 2 30 138

Emile Fiesler: 51 8 22 81

Juergen Luettin: 50 5 28 91

John Dines: 46 1 47 165

Norman Poh: 44 3 6 54

Fabio Valente: 43 5 13 73

Sileye O. Ba: 43 4 15 89

Sriram Ganapathy: 38 4 5 91

Andrew Morris: 37 1 16 58

Philip N. Garner: 36 1 39 137

Pierre W. Ferrez: 32 6 36 130

David Barber: 31 4 15 36

Eddy Mayoraz: 31 4 21 44

Jithendra Vepa: 31 1 19 76

Dong Zhang: 30 1 13 88

Georg Thimm: 30 6 9 35

Conrad Sanderson: 29 5 11 49

NP= Número de trabajos publicados.

NA= Número de trabajos de tipo artículo publicados

PR= Número de personas distintas con las que se relaciona.

RT= Número total de relaciones.

Page 59: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

6.1 Conclusiones objetivas

49

6. Conclusiones En este tema se expresan las conclusiones obtenidas respecto a la realización del proyecto, así como una explicación de las posibles ampliaciones que se podrían llevar a cabo.

6.1. Conclusiones objetivas En este proyecto se ha obtenido un método semiautomático que nos ayude a realizar el análisis 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, además de las diversas modificaciones que han ido surgiendo en el transcurso del desarrollo. Se ha acertado también en la elección de las tecnologías utilizadas, que han facilitado el progreso del proyecto. Se ha creado una aplicación que crea una red social, nos proporciona una serie de informes y nos facilita su visualización a través del programa Pajek. También se ha creado un pequeño manual del funcionamiento de la aplicación 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 realización de este proyecto ha sido muy satisfactoria ya que he podido realizar por primera vez un proyecto informático desde el principio hasta su finalización. El tema seleccionado me ha parecido muy interesante. He observado de primera mano cómo podemos utilizar la informática 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 programación y estructuras de datos a la hora de realizar la aplicación. También algunos aspectos estudiados de matemáticas y redes me han ayudado a enfrentarme al análisis de los grafos obtenidos. Por último, ha sido muy gratificante poder acercarme al campo de la sociología, en concreto las redes sociales y la importancia que tiene su estudio en el mundo actual. También he podido aprender el funcionamiento de programas como Pajek que puede ser utilizado en multitud de situaciones. La edición de imágenes vectoriales o la utilización de google sites han sido otras de las múltiples enseñanzas que me deja la realización de este proyecto.

Page 60: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

6.3 Posibles ampliaciones

50

6.3. Posibles ampliaciones Se puede ampliar el trabajo realizado utilizando diversas vías de desarrollo, el objetivo final del trabajo podría ser una completa automatización en la manera de obtener resultados. Para ello se tendría que crear un programa en el que introduciendo una bibliografía proporcionase directamente todos los informes y diagramas solicitados. Se tendría que modificar el código fuente de Pajek para que proporcionase los diagramas que el usuario pidiese, más complicada sería la tarea de editar y mejorar la visualización del diagrama. Si se creara una web en la que alojar el programa para obtener los informes y diagramas on-line, cualquier persona podría obtener información importante de una red social a través de una bibliografía, teniendo en cuenta que la mayoría de listas de publicaciones están almacenadas en BibTex, sería una herramienta muy potente. Una ampliación más sencilla puede ser mejorar los diagramas. Utilizando Pajek e instalando los applets de Java correspondientes, podríamos obtener imágenes en 3D de las redes sociales obtenidas. También podríamos transformar las imágenes de cada año para formar un video donde se viera la evolución de la red.

Page 61: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Bibliografía

51

Bibliografía 1. Wikipedia. Red Social. [En línea] [Citado el: 18 de Junio de 2012.] http://es.wikipedia.org/wiki/Red_social. 2. Pajek. Pajek Wiki. [En línea] [Citado el: 15 de Mayo de 2012.] http://pajek.imfm.si/doku.php?id=start. 3. open.michigan. Networks: Theory and Application. [En línea] [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 línea] 13 de Julio de 2012. https://sites.google.com/site/findcommunities/. 6. Hanneman, Robert A. Introducción a los métodos del análisis de redes sociales. 2000. 7. UJI. INIT. [En línea] 15 de Agosto de 2012. http://www.init.uji.es/. 8. Wikipedia. Idiap Research Institute. [En línea] 20 de Agosto de 2012. http://en.wikipedia.org/wiki/Idiap_Research_Institute.

Page 62: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

1

A. Código fuente #include <iostream> 1 #include <string> 2 #include <fstream> 3 #include <iomanip> 4 5 #define NTIPOS 14 6 7 using namespace std; 8 9 class rs{ 10 private: 11 typedef struct { //Almacena cada publicacion 12 int miemb[22]; 13 int anyo; 14 int tipo; //0=article, 1=book, 2=booklet, 3=conference, 4=inbook, 15 5=incollection, 6=inproceedings, 7=manual, 8=masterthesis, 9=misc, 10=phdthesis, 16 11=proceedings, 12=techreport, 13=unpublished 17 int nMiemb; 18 } TPublicacion; 19 20 typedef struct{ //Almacena todas las publicaciones 21 TPublicacion publicaciones[2000]; 22 int nPublicaciones, anyoInicio; 23 } TPublicaciones; 24 25 typedef struct{ //Almacena una lista con los miembros 26 string miembros[750]; 27 bool esMiembro[750]; 28 int seccion[750]; 29 int nMiembros; 30 } TMiembros; 31 32 typedef struct{ //Almacena las distintas secciones 33 string nomSeccion[20]; 34 int nSecciones; 35 } TSecciones; 36 37 typedef struct{ //Almacena una relaciones entre dos miembros, 38 con el número de publicaciones y de artículos en común 39 int miemb1; 40 int miemb2; 41 int suma; 42 int articulos; 43 } TRelacion; 44 45 typedef struct{ 46 TRelacion relaciones[4500]; //Almacena todas las relaciones 47 int nRelaciones; 48 } TRelaciones; 49 50 typedef struct{ //Almacena las matrices de cada año 51 TRelaciones relacionesAnyos[25]; 52 int nAnyos; 53 } TAnyos; 54 55 TSecciones secc; 56 TMiembros miemb; 57 TPublicaciones publ; 58 TAnyos anyos; 59 TRelaciones rel; 60 61 bool SeRepite(string nombre); //Comprueba si un numero se repite 62 int QueNumeroEs (string nombre); //Devuelve el numero que es cada miembro en 63 la lista de nombres 64 void InicializaMatrizXAnyo (void); //Pone todas las matrices de cada año a 0 65

66

Page 63: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

2

void GuardaRelacion(int miemb1,int miemb2); //Almacena una relación en 67 la matriz 68 void RellenaMatrizXAnyo (void); //Rellena una matriz por cada año 69 void OrdenaLista(void); //Coloca una lista de nombres en orden 70 alfabetico 71 72 public: 73 rs(); //Constructor 74 void CreaLista(void); //Coje un fichero de publicaciones y extrae 75 todos los nombres en la ed TMiembros 76 bool RellenaLista(void); //Coje un fichero con nombres y los almacena 77 en una estructura de datos TMiembros 78 void ImprimeLista(void); //Imprime una lista de nombres en un fichero 79 void GuardaFichero (void); //Almacena en una ed Tpublicaciones todas 80 las publicaciones de un fichero 81 void RellenaMatriz (void); //Rellena una matriz con los datos de todos 82 los años 83 void EstudioRS (void); //Realiza un informe de la red social 84 void EstudioSeccion(void); //Realiza un informe de las distintas 85 secciones de la red social 86 void ImprimeMatriz(void); //Imprime una matriz de adyacencia 87 void CopiaFichero(fstream &fOrigen, fstream &Destino); //Copia un fichero de texto 88 void OrdenaEstudio(int valor); //Ordena un informe 89 void CreaPajek(int opcion); //Crea un fichero .net de la red social para 90 Pajek 91 void CreaPajekVec(int opcion); //Crea un fichero .vec de la red social para 92 Pajek 93 void CreaPajekSeccion(int opcion); //Crea un fichero .net de las secciones para 94 Pajek 95 void CreaPajekSeccionVec(int opcion); //Crea un fichero .vec de las secciones para 96 Pajek 97 void CreaPajekAnyo(int anyoInicio); //Crea un fichero .net de la red social por 98 año para Pajek 99 }; 100 101 rs::rs(){miemb.nMiembros=0;publ.nPublicaciones=0;publ.anyoInicio=2010;rel.nRelaciones=0;102 secc.nSecciones=0; 103 for (int i=0; i<4500; 104 i++){rel.relaciones[i].suma=0;rel.relaciones[i].articulos=0;} 105 } 106 107 void rs::CreaLista(){ 108 string linea; 109 fstream fich; 110 fich.open("bibtex.bib", ios::in); 111 getline(fich,linea); 112 while (!fich.eof()){ //Se recorre el fichero 113 getline(fich,linea); 114 if (linea.find("author = ",0)<20){ //Esta linea contiene los autores 115 int posFin, posComa, posAnd, posIni; //posIni marca el Inicio de la 116 busqueda con find, empieza desde el primer " 117 posIni=linea.find('"',0)+1; //posicion del primer " 118 posFin=linea.find('"',posIni)+1; //posicion del ultimo ", se 119 delimita la búsqueda de nombres 120 string nombre, apellido, nCompleto; 121 bool final=false; //Booleano para saber si ya no 122 quedan nombres en la linea 123 124 while (!final){ //Se recorre la linea que tiene los 125 autores 126 posComa=linea.find(", ",posIni)+2; //busco la primera coma y el primer 127 and que encuentre 128 posAnd=linea.find(" and ",posIni); 129 130 if(((posIni<posAnd)&&(posAnd<posComa)&&(posComa<posFin))||((posIni<posAnd)&&(posAnd<posF131 in)&&(posFin<posComa))||((posComa<posIni)&&(posIni<posAnd)&&(posAnd<posFin))){ //Nomb132 res en los que no esta separado el nombre del apellido por coma y no estan en ultima 133 posicion 134 nCompleto= linea.substr (posIni,posAnd-posIni); 135 if(!SeRepite(nCompleto)){ 136 miemb.miembros[miemb.nMiembros]=nCompleto; 137 miemb.esMiembro[miemb.nMiembros]=false; //no es miembro 138 miemb.nMiembros++; 139 } 140 posIni=posAnd+5; //Espacio que ocupa el and 141 } 142 else{ 143

Page 64: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

3

if ((posAnd<posComa)&&(posComa<posIni)&&(posIni)<(posFin)){ //Nombres que no 144 estan separados por coma y estan en ultima posicion 145 nCompleto=linea.substr(posIni,posFin-posIni-1); //Como esta en 146 ultima posicion, hay se quitan las comillas con el -1 147 if(!SeRepite(nCompleto)){ 148 miemb.miembros[miemb.nMiembros]=nCompleto; 149 miemb.esMiembro[miemb.nMiembros]=false; 150 miemb.nMiembros++; 151 } 152 final=true; //Está en ultima posicion por lo 153 que se cambia de linea 154 } 155 else{ 156 if ((posIni<posComa)&&(posComa<posAnd)&&(posAnd<posFin)){ //Nombres 157 separados por coma y que no estan en ultima posicion 158 nombre= linea.substr (posComa,posAnd-posComa); 159 apellido=linea.substr (posIni,posComa-posIni-2); 160 nCompleto=nombre+" "+apellido; // Se almacena 161 nombre y apellido en nCompleto 162 if(!SeRepite(nCompleto)){ 163 miemb.miembros[miemb.nMiembros]=nCompleto; 164 miemb.esMiembro[miemb.nMiembros]=true; 165 miemb.nMiembros++; 166 } 167 posIni=posAnd+5; //5 es el tamaño de and y se empieza a 168 buscar desde el and 169 } 170 else{ 171 if ((posAnd<posIni)&&(posIni<posComa)&&(posComa<posFin)){ //Está en 172 posicion final y separado por coma 173 nombre= linea.substr (posComa,posFin-posComa-1); 174 apellido=linea.substr (posIni,posComa-posIni-2); 175 nCompleto=nombre+" "+apellido; //Se almacena 176 nombre y apellido en nCompleto 177 if(!SeRepite(nCompleto)){ 178 miemb.miembros[miemb.nMiembros]=nCompleto; 179 miemb.esMiembro[miemb.nMiembros]=true; 180 miemb.nMiembros++; 181 } 182 final=true; 183 } 184 else{ 185 cerr<<"error en linea: \""<<linea<<"\""; 186 exit (1); 187 } 188 } 189 } 190 } 191 } 192 } 193 } 194 fich.close(); 195 OrdenaLista(); //Se ordena alfabeticamente la lista 196 resultante 197 } 198 199 void rs::OrdenaLista(void){ //Ordena una lista de nombres 200 alfabeticamente utilizando el metodo de la burbuja 201 string nomAux; 202 int secAux; 203 bool miemAux; 204 for (int i=miemb.nMiembros;i>0;i--){ 205 for (int j=0;j<i-1;j++){ 206 if (miemb.miembros[j]>miemb.miembros[j+1]) { 207 nomAux=miemb.miembros[j]; secAux=miemb.seccion[j]; miemAux=miemb.esMiembro[j]; 208 miemb.miembros[j]=miemb.miembros[j+1]; miemb.seccion[j]=miemb.seccion[j+1]; 209 miemb.esMiembro[j]=miemb.esMiembro[j+1]; 210 miemb.miembros[j+1]=nomAux; miemb.seccion[j+1]=secAux; 211 miemb.esMiembro[j+1]=miemAux; 212 } 213 } 214 } 215 } 216 217 218 bool rs::SeRepite(string nombre){ //Mira si se repite un nombre en la 219 lista de nombres 220

Page 65: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

4

for (int i=0;i<miemb.nMiembros;i++){ 221 if ((miemb.miembros[i]).find(nombre,0)==0){return true;} 222 } 223 return false; 224 } 225 226 227 bool rs::RellenaLista(){ //Coje un fichero con los nombres de los miembros 228 y los mete en la ed miemb ordenados alfabeticamente 229 string linea,nombre, seccion; 230 fstream fich; 231 fich.open("miembros.txt", ios::in); 232 int i=0, pos; 233 bool esta; 234 while (!fich.eof()){ 235 getline(fich,linea); 236 pos=linea.find(" /",0); //Comprueba si es miembro de alguna 237 seccion 238 if (pos>0){ //Si es miembro se añade la seccion 239 nombre=linea.substr (0,pos); 240 seccion=linea.substr (pos+2); 241 esta=false; 242 pos=0; 243 for (int j=1;j<secc.nSecciones+1;j++){ //La seccion 0 es ausencia de 244 seccion 245 if (secc.nomSeccion[j]==seccion){ 246 esta=true; 247 pos=j; 248 } 249 } 250 if (!esta) { //Si la seccion no está se añade 251 secc.nSecciones++; 252 secc.nomSeccion[secc.nSecciones]=seccion; 253 pos=secc.nSecciones; 254 } 255 miemb.miembros[i]=nombre; 256 miemb.seccion[i]=pos; 257 miemb.esMiembro[i]=true; 258 } 259 else{ 260 miemb.miembros[i]=linea; 261 miemb.esMiembro[i]=false; 262 } 263 miemb.nMiembros++; 264 i++; 265 } 266 OrdenaLista(); 267 fich.close(); 268 if (secc.nSecciones>0){return true;} 269 return false; 270 } 271 272 273 void rs::ImprimeLista(void){ //Imprime la lista de miembros en un fichero 274 fstream fich; 275 fich.open("lista.txt", ios::out|ios::trunc); 276 for (int i=0;i<miemb.nMiembros;i++){ 277 if(miemb.esMiembro[i]){ 278 fich<<miemb.miembros[i]<<" "<<secc.nomSeccion[ miemb.seccion[i]]<<endl; 279 } 280 else { 281 fich<<miemb.miembros[i]<<endl; 282 } 283 } 284 fich.close(); 285 } 286 287 288 int rs::QueNumeroEs(string nombre){ //Devuelve el numero que es cada miembro 289 en la lista de nombres 290 for (int i=0; i<miemb.nMiembros; i++){ 291 if ( miemb.miembros[i].find(nombre,0)==0){ 292 return i; 293 } 294 }return 1000; //No lo encuentra: 1000 porque el numero 295 máximo de miembros es 750 296 } 297

Page 66: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

5

298 299 void rs::GuardaFichero(void){ //Almacena todas las publicaciones con los miembros 300 que la han realizado y el año 301 string linea,a; 302 fstream fPub; 303 int i=0,j=0,num,n=0; 304 fPub.open("bibtex.bib", ios::in); 305 fPub.clear(); 306 fPub.seekg(0,ios::beg); //Lleva el cursor otra vez al comienzo del 307 fichero 308 while (!fPub.eof()){ //recorre el fichero 309 getline(fPub,linea); 310 if 311 ((linea.find("@article",0)==0)||(linea.find("@Article",0)==0)||(linea.find("@ARTICLE",0)312 ==0)){publ.publicaciones[i].tipo=0;}; 313 if 314 ((linea.find("@book",0)==0)||(linea.find("@Book",0)==0)||(linea.find("@BOOK",0)==0)){pub315 l.publicaciones[i].tipo=1;}; 316 if 317 ((linea.find("@booklet",0)==0)||(linea.find("@Booklet",0)==0)||(linea.find("@BOOKLET",0)318 ==0)){publ.publicaciones[i].tipo=2;}; 319 if 320 ((linea.find("@conference",0)==0)||(linea.find("@Conference",0)==0)||(linea.find("@CONFE321 RENCE",0)==0)){publ.publicaciones[i].tipo=3;}; 322 if 323 ((linea.find("@inbook",0)==0)||(linea.find("@Inbook",0)==0)){publ.publicaciones[i].tipo=324 4;}; 325 if 326 ((linea.find("@incollection",0)==0)||(linea.find("@Incollection",0)==0)||(linea.find("@I327 NCOLLECTION",0)==0)){publ.publicaciones[i].tipo=5;}; 328 if 329 ((linea.find("@inproceedings",0)==0)||(linea.find("@Inproceedings",0)==0)||(linea.find("330 @INPROCEEDINGS",0)==0)){publ.publicaciones[i].tipo=6;}; 331 if 332 ((linea.find("@manual",0)==0)||(linea.find("@Manual",0)==0)||(linea.find("@MANUAL",0)==0333 )){publ.publicaciones[i].tipo=7;}; 334 if 335 ((linea.find("@masterthesis",0)==0)||(linea.find("@Masterthesis",0)==0)||(linea.find("@M336 ASTERTHESIS",0)==0)){publ.publicaciones[i].tipo=8;}; 337 if 338 ((linea.find("@misc",0)==0)||(linea.find("@Misc",0)==0)||(linea.find("@MISC",0)==0)){pub339 l.publicaciones[i].tipo=9;}; 340 if 341 ((linea.find("@phdthesis",0)==0)||(linea.find("@Phdthesis",0)==0)||(linea.find("@PHDTHES342 IS",0)==0)){publ.publicaciones[i].tipo=10;}; 343 if 344 ((linea.find("@proceedings",0)==0)||(linea.find("@Proceedings",0)==0)||(linea.find("@PRO345 CEEDINGS",0)==0)){publ.publicaciones[i].tipo=11;}; 346 if 347 ((linea.find("@techreport",0)==0)||(linea.find("@Techreport",0)==0)||(linea.find("@TECHR348 EPORT",0)==0)){publ.publicaciones[i].tipo=12;}; 349 if 350 ((linea.find("@unpublished",0)==0)||(linea.find("@Unpublished",0)==0)||(linea.find("@UNP351 UBLISHED",0)==0)){publ.publicaciones[i].tipo=13;}; 352 353 if (linea.find("author = ",0)<20){ //Esta linea contiene los autores 354 int posFin, posComa, posAnd, posIni; //posIni marca el posInicio de la 355 busqueda con find, empieza desde el primer " 356 posIni=linea.find('"',0)+1; 357 posFin=linea.find('"',posIni)+1; //posicion del ultimo " 358 string nombre, apellido, nCompleto; 359 bool final=false; 360 publ.publicaciones[i].nMiemb=0; j=0; //Inicializa el numero de miembros 361 en esa publicacion 362 while (!final){ //Recorre la linea que tiene los 363 autores 364 posComa=linea.find(", ",posIni)+2; 365 posAnd=linea.find(" and ",posIni); 366 367 if(((posIni<posAnd)&&(posAnd<posComa)&&(posComa<posFin))||((posIni<posAnd)&&(posAnd<posF368 in)&&(posFin<posComa))||((posComa<posIni)&&(posIni<posAnd)&&(posAnd<posFin))){ //Nomb369 res en los que no esta separado el nombre del apellido por, y no estan en ultima 370 posicion 371 nCompleto= linea.substr (posIni,posAnd-posIni); 372 num=QueNumeroEs(nCompleto); //Devuelve el numero de miembro 373 if(num<miemb.nMiembros){ 374

Page 67: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

6

publ.publicaciones[i].miemb[j]=num; 375 publ.publicaciones[i].nMiemb++; 376 j++; 377 } 378 posIni=posAnd+5; 379 } 380 else{ 381 if ((posAnd<posComa)&&(posComa<posIni)&&(posIni)<(posFin)){ 382 nCompleto=linea.substr(posIni,posFin-posIni-1); //Como esta en 383 ultima posicion se quitan las comillas con el -1 384 num=QueNumeroEs(nCompleto); 385 if(num<miemb.nMiembros){ 386 publ.publicaciones[i].miemb[j]=num; 387 publ.publicaciones[i].nMiemb++; 388 } 389 final=true; 390 } 391 else{ 392 if ((posIni<posComa)&&(posComa<posAnd)&&(posAnd<posFin)){ 393 nombre= linea.substr (posComa,posAnd-posComa); 394 apellido=linea.substr (posIni,posComa-posIni-2); 395 nCompleto=nombre+" "+apellido; 396 num=QueNumeroEs(nCompleto); 397 if (num <= miemb.nMiembros){ //Si el nombre 398 esta bien escrito pero no aparece en la lista no se almacena 399 publ.publicaciones[i].miemb[j]=num; 400 publ.publicaciones[i].nMiemb++; 401 j++; 402 } 403 posIni=posAnd+5; //5 es el tamaño 404 de and y empezamos a buscar desde el and 405 } 406 407 else{ 408 if ((posAnd<posIni)&&(posIni<posComa)&&(posComa<posFin)){ //Esta en 409 posicion final escrito con coma 410 nombre= linea.substr (posComa,posFin-posComa-1); 411 apellido=linea.substr (posIni,posComa-posIni-2); 412 nCompleto=nombre+" "+apellido; 413 num=QueNumeroEs(nCompleto); 414 if (num <= miemb.nMiembros){ 415 publ.publicaciones[i].miemb[j]=num; 416 publ.publicaciones[i].nMiemb++; 417 } 418 final=true; 419 } 420 else{ 421 cerr<<"error en linea: \""<<linea<<"\""; 422 exit (1); 423 } 424 } 425 } 426 } 427 } 428 } 429 else { 430 if (linea.find("year = ",0)<20){ //En esta linea esta el 431 año 432 num=linea.find('"',0)+1; 433 string anyo=linea.substr(num,4); 434 publ.publicaciones[i].anyo=atoi(anyo.c_str()); //Pasa el año a int 435 if(publ.publicaciones[i].anyo<publ.anyoInicio){ publ.anyoInicio= 436 publ.publicaciones[i].anyo;} 437 publ.nPublicaciones++; //Añade una publicacion 438 i++; 439 } 440 } 441 } 442 fPub.close(); 443 } 444 445 void rs::RellenaMatriz(void){ //Rellena una matriz con 446 los datos de todos los años 447 bool esta; 448 for (int i=0;i<publ.nPublicaciones;i++){ //Recorre todas las 449 publicaciones 450

Page 68: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

7

for (int n=0; n<publ.publicaciones[i].nMiemb; n++){ //Recorre los miembros de 451 cada publicacion 452 for (int m=n; m<publ.publicaciones[i].nMiemb; m++){ 453 esta=false; 454 for (int j=0;j<rel.nRelaciones;j++){ //Busca si ya está 455 almacenada esta relacion 456 if 457 (((rel.relaciones[j].miemb1==publ.publicaciones[i].miemb[n])&&(rel.relaciones[j].miemb2=458 =publ.publicaciones[i].miemb[m])) 459 || 460 ((rel.relaciones[j].miemb1==publ.publicaciones[i].miemb[m])&&(rel.relaciones[j].miemb2==461 publ.publicaciones[i].miemb[n]))){ 462 rel.relaciones[j].suma++; //Suma una nueva 463 publicación 464 if(publ.publicaciones[i].tipo==0){ 465 rel.relaciones[j].articulos++; 466 } 467 esta=true; 468 } 469 } 470 if (!esta){ //Es una relacion nueva, 471 por lo que almacena los dos nombres 472 rel.relaciones[rel.nRelaciones].miemb1=publ.publicaciones[i].miemb[n]; 473 rel.relaciones[rel.nRelaciones].miemb2=publ.publicaciones[i].miemb[m]; 474 rel.relaciones[rel.nRelaciones].suma++; 475 if(publ.publicaciones[i].tipo==0){ 476 rel.relaciones[rel.nRelaciones].articulos++; 477 } 478 rel.nRelaciones++; 479 } 480 } 481 } 482 } 483 } 484 485 486 void rs::EstudioRS(void){ 487 float aux,pub,art, pers,total,colInt,totColInt, colSec, totColSec, porInt, porExt, 488 porSec; 489 fstream f; 490 f.open("InformeRS.txt", ios::in|ios::out|ios::trunc); 491 if(!f){ 492 cout<<"error de apertura"<<endl; 493 } 494 f<<"NP= Número de trabajos publicados."<<endl; 495 f<<"NA= Número de trabajos de tipo artículo publicados"<<endl; 496 f<<"PR= Número de personas distintas con las que se relaciona."<<endl; 497 f<<"RT= Número total de relaciones."<<endl; 498 f<<"PI= Personas con las que se relaciona miembros del instituto."<<endl; 499 f<<"RI= Relaciones totales con miembros del instituto." <<endl; 500 f<<"PS= Personas con las que se relaciona miembros de su seccion."<<endl; 501 f<<"RS= Relaciones totales con miembros de su seccion."<<endl; 502 f<<"%I= Porcentaje de publicaciones con miembros del instituto sobre el total."<<endl; 503 f<<"%E= Porcentaje de publicaciones con externos al instituto sobre el total."<<endl; 504 f<<"%S= Porcentaje de publicaciones con miembros de su seccion sobre el 505 total."<<endl<<endl; 506 for (int m=0;m<33;m++) f<<" "; 507 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; 508 for (int i=0; i<miemb.nMiembros; i++) { //Mira el numero de 509 publicaciones por persona 510 pub=0;pers=0;total=0;colInt=0,totColInt=0,colSec=0, totColSec=0; 511 aux=miemb.miembros[i].size(); //Mira el tamaño del 512 nombre (aux) para que empiecen todos los datos en la linea 32 513 f<<miemb.miembros[i]<<":"; 514 for (int m=0;m<(31-aux);m++) f<<" "; 515 for (int j=0;j<rel.nRelaciones;j++){ 516 517 if((rel.relaciones[j].miemb1==i)&&(rel.relaciones[j].miemb2==i)){pub=rel.relaciones[j].s518 uma; art=rel.relaciones[j].articulos;} //El número de publicaciones son las veces que se 519 relaciona consigo mismo 520 else{ 521 if((rel.relaciones[j].miemb1==i)||(rel.relaciones[j].miemb2==i)){ 522 pers++; 523 total=total+rel.relaciones[j].suma; //Suma cada relacion para saber las 524 personas con las que se ha relacionado y el total de relaciones 525 if (rel.relaciones[j].miemb1==i){ //Miembros del instituto con los que 526 se relaciona 527

Page 69: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

8

if (miemb.esMiembro[rel.relaciones[j].miemb2]){colInt++; 528 totColInt=totColInt+rel.relaciones[j].suma;} 529 } 530 else {if (miemb.esMiembro[rel.relaciones[j].miemb1]){colInt++; 531 totColInt=totColInt+rel.relaciones[j].suma;} 532 } 533 534 if((miemb.seccion[i]>0)&&(miemb.seccion[rel.relaciones[j].miemb1]==miemb.seccion[rel.rel535 aciones[j].miemb2])){ //Si son miembros de la misma seccion 536 colSec++; totColSec=totColSec+rel.relaciones[j].suma; 537 } 538 } 539 } 540 } 541 if (total>0){porInt=totColInt/total; porExt=(total-totColInt)/total; 542 porSec=(totColSec/total);} //Para no dividir entre 0 543 else porInt=porExt=porSec=0; 544 if ((porInt<0.1)&&(porInt>0))porInt=0.1; 545 //si el valor esta entre 0 y 0.1 redondea a 0.1 546 if ((porExt<0.1)&&(porExt>0))porExt=0.1; 547 if ((porSec<0.1)&&(porSec>0))porSec=0.1; 548 549 if ((porInt<1)&&(porInt>0.9))porInt=0.9; 550 //si el valor esta entre 0.9 y 1 redondea a 0.9 551 if ((porExt<1)&&(porExt>0.9))porExt=0.9; 552 if ((porSec<1)&&(porSec>0.9))porSec=0.9; 553 554 f<<setprecision(3); 555 if (pub<10){f<<" "<<pub<<"\t\t";} 556 else if(pub<100){f<<" "<<pub<<"\t\t";} 557 else {f<<pub<<"\t\t";} 558 559 if (art<10){f<<" "<<art<<"\t\t";} 560 else if(art<100){f<<" "<<art<<"\t\t";} 561 else {f<<art<<"\t\t";} 562 563 if (pers<10){f<<" "<<pers<<"\t\t";} 564 else if(pers<100){f<<" "<<pers<<"\t\t";} 565 else {f<<pers<<"\t\t";} 566 567 if (total<10){f<<" "<<total<<"\t\t";} 568 else if(total<100){f<<" "<<total<<"\t\t";} 569 else {f<<total<<"\t\t";} 570 571 if (colInt<10){f<<" "<<colInt<<"\t\t";} 572 else if(colInt<100){f<<" "<<colInt<<"\t\t";} 573 else {f<<colInt<<"\t\t";} 574 575 if (totColInt<10){f<<" "<<totColInt<<"\t\t";} 576 else if(totColInt<100){f<<" "<<totColInt<<"\t\t";} 577 else {f<<totColInt<<"\t\t";} 578 579 if (colSec<10){f<<" "<<colSec<<"\t\t";} 580 else if(colSec<100){f<<" "<<colSec<<"\t\t";} 581 else {f<<colSec<<"\t\t";} 582 583 if (totColSec<10){f<<" "<<totColSec<<"\t\t";} 584 else if(totColSec<100){f<<" "<<totColSec<<"\t\t";} 585 else {f<<totColSec<<"\t\t";} 586 587 f<<setprecision(1); //Muestra solamente un 588 decimal 589 if (porInt==0 || porInt==1){f<<" "<<porInt<<"\t\t";} 590 else {f<<porInt<<"\t\t";} 591 592 if (porExt==0 || porExt==1){f<<" "<<porExt<<"\t\t";} 593 else {f<<porExt<<"\t\t";} 594 595 if (porSec==0 || porSec==1){f<<" "<<porSec<<endl;} 596 else {f<<porSec<<endl;} 597 } 598 f.close(); 599 } 600 601 602 void rs::CopiaFichero(fstream &fOrigen, fstream &fDestino){ 603 string linea; 604

Page 70: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

9

while (!fOrigen.eof()){getline(fOrigen,linea);fDestino<<linea<<endl;} //Copia el 605 fichero desordenado en uno nuevo que vamos a ordenar 606 } 607 608 void rs::OrdenaEstudio(int valor){ 609 fstream fEstudio, fOrd; 610 int top=1000, max, aux, v=32+(5*valor),a; 611 string linea="", lineaMax, lineaTop; 612 bool empate, primerCero=false; 613 fEstudio.open("InformeRS.txt", ios::in|ios::out); 614 fOrd.open("InformeRSOrd.txt", ios::in|ios::out|ios::trunc); 615 fEstudio.seekg(0, ios::beg); //Posiciona el cursor al inicio 616 del fichero 617 for (int i=0;i<13;i++){ //Hasta la linea 12 son iguales 618 los 2 ficheros 619 getline(fEstudio,linea); 620 fOrd<<linea<<endl; 621 } 622 for (int i=0;i<miemb.nMiembros;i++){ 623 fEstudio.seekg(0, ios::beg); 624 for (int j=0;j<13;j++){getline(fEstudio,linea);} //Se Posiciona el cursor en la 625 linea 12 626 empate=false,max=-1; //Se inicializa los valores 627 maximo y el chivato por si hay empate 628 for (int j=0;j<miemb.nMiembros;j++){ 629 getline(fEstudio,linea); 630 if(linea.size()>0){ //El tamaño de la ultima línea 631 es 0 632 aux=atoi(linea.substr (v,3).c_str()); //Se pasa a entero el valor por 633 el que se esta ordenando 634 if ((aux==top)&&(lineaTop<linea)&&(!empate)){ //Si hay empate se coje el 635 siguiente nombre por orden alfabetico 636 lineaMax=linea; 637 empate=true; 638 max=aux; 639 } 640 if ((aux<top)&&(aux>max)){ 641 max=aux; 642 lineaMax=linea; 643 empate=false; 644 } 645 } 646 } 647 if(empate){ 648 fOrd<<lineaMax<<endl;; 649 lineaTop=lineaMax; 650 top=max; 651 } 652 else{ 653 fOrd<<lineaMax<<endl; 654 top=max; 655 lineaTop=lineaMax; 656 } 657 } 658 fEstudio.close(); 659 fOrd.close(); 660 } 661 662 663 void rs::EstudioSeccion(void){ 664 fstream f; 665 int aux; 666 bool esta; 667 float pubTot, artTot, artPor, seccMis, seccMisTot, seccDis, seccDisTot,seccPor; 668 char nombre[20]="EstudioSeccion.txt"; 669 f.open(nombre,ios::out); 670 if(!f){ 671 cout<<"error de apertura"<<endl; 672 } 673 f<<"TP= Numero total de publicaciones."<<endl; 674 f<<"TA= Número de publicaciones de tipo articulo"<<endl; 675 f<<"%A= Porcentaje de articulos respecto de las publicaciones totales"<<endl; 676 f<<"TS= Relaciones totales con miembros de la misma seccion."<<endl; 677 f<<"TO= Relaciones totales con miembros de otra seccion."<<endl; 678 f<<"%R= Porcentaje de las relaciones de la misma seccion sobre el total."<<endl<<endl; 679 for (int m=0;m<58;m++) f<<" "; 680 f<<" TP\t\t TA\t\t %A\t\t TS\t\t TO\t\t %R"<<endl; 681

Page 71: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

10

for (int i=1; i<secc.nSecciones+1; i++){ 682 pubTot=artTot=seccMis=seccMisTot=seccDis=seccDisTot=0; //Se inicializan los valores 683 a 0 684 for (int j=0; j<rel.nRelaciones;j++){ 685 if 686 (((miemb.seccion[rel.relaciones[j].miemb1])==i)&&((miemb.seccion[rel.relaciones[j].miemb687 2])==i)&&((rel.relaciones[j].miemb2)==(rel.relaciones[j].miemb1))){ 688 pubTot=pubTot+rel.relaciones[j].suma; //Publicaciones totales 689 artTot=artTot+rel.relaciones[j].articulos; //Publicaciones de tipo 690 artículo 691 } 692 693 else if 694 (((miemb.seccion[rel.relaciones[j].miemb1])==i)&&((miemb.seccion[rel.relaciones[j].miemb695 2])==i)){ //Comprueba las relaciones entre miembros de la misma seccion 696 seccMis++; 697 seccMisTot=seccMisTot+rel.relaciones[j].suma; 698 } 699 else if 700 ((miemb.seccion[rel.relaciones[j].miemb1]==i)||(miemb.seccion[rel.relaciones[j].miemb2]=701 =i)){ 702 seccDis++; 703 seccDisTot=seccDisTot+rel.relaciones[j].suma; 704 } 705 } 706 artPor=artTot/pubTot; 707 seccPor=seccMisTot/(seccMisTot+seccDisTot); 708 aux=secc.nomSeccion[i].size(); //Obtiene el tamaño del 709 nombre (aux) para que empiecen todos los datos en la misma linea 710 f<<secc.nomSeccion[i]<<":"; 711 for (int m=0;m<(56-aux);m++) f<<" "; 712 f<<setprecision(4); 713 714 if (pubTot<10){f<<" "<<pubTot<<"\t\t";} 715 else if(pubTot<100){f<<" "<<pubTot<<"\t\t";} 716 else if(pubTot<1000){f<<" "<<pubTot<<"\t\t";} 717 else {f<<pubTot<<"\t\t";} 718 719 if (artTot<10){f<<" "<<artTot<<"\t\t";} 720 else if(artTot<100){f<<" "<<artTot<<"\t\t";} 721 else if(artTot<1000){f<<" "<<artTot<<"\t\t";} 722 else {f<<artTot<<"\t\t";} 723 724 f<<setprecision(1); 725 if((artPor>0)&&(artPor<0.1)){f<<" 0.1\t\t";} 726 else if ((artPor>0.9)&&(artPor<1)){f<<" 0.9\t\t";} 727 else if (artPor==1) {f<<" "<<artPor<<"\t\t";} 728 else {f<<" "<<artPor<<"\t\t";} 729 f<<setprecision(4); 730 731 if (seccMisTot<10){f<<" "<<seccMisTot<<"\t\t";} 732 else if(seccMisTot<100){f<<" "<<seccMisTot<<"\t\t";} 733 else if(seccMisTot<1000){f<<" "<<seccMisTot<<"\t\t";} 734 else {f<<seccMisTot<<"\t\t";} 735 736 if (seccDisTot<10){f<<" "<<seccDisTot<<"\t\t";} 737 else if(seccDisTot<100){f<<" "<<seccDisTot<<"\t\t";} 738 else if(seccDisTot<1000){f<<" "<<seccDisTot<<"\t\t";} 739 else {f<<seccDisTot<<"\t\t";} 740 741 f<<setprecision(1); 742 743 if((seccPor>0)&&(seccPor<0.1)){f<<" 0.1\t\t"<<endl;} 744 else if ((seccPor>0.9)&&(seccPor<1)){f<<" 0.9\t\t"<<endl;} 745 else if (seccPor==1) {f<<" "<<seccPor<<"\t\t"<<endl;} 746 else {f<<" "<<seccPor<<"\t\t"<<endl;} 747 } 748 } 749 750 751 void rs::ImprimeMatriz(void){ //Imprime una matriz de adyacencia en un fichero 752 de texto 753 bool esta; 754 int n; 755 fstream f; 756 f.open("matriz.txt", ios::out|ios::trunc); 757 f<<" "; 758

Page 72: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

11

for(int i=0; i<miemb.nMiembros; i++){ 759 if (i>99) f<<" "<<i; 760 else if (i>9) f<<" "<<i; 761 else f<<" "<<i; 762 } 763 f<<endl; 764 for(int i=0; i<miemb.nMiembros; i++){ 765 if(i>9) 766 f<<"("<<i<<")"; 767 else 768 f<<"("<<i<<") "; 769 for(int j=0;j<miemb.nMiembros; j++){ //Recorre todos los miembros 770 esta=false; 771 n=0; 772 for (int n=0;n<rel.nRelaciones;n++){ 773 if 774 (((rel.relaciones[n].miemb1==i)&&(rel.relaciones[n].miemb2==j)||(rel.relaciones[n].miemb775 2==i)&&(rel.relaciones[n].miemb1==j))){ 776 esta=true; 777 if (rel.relaciones[n].suma>99){f<<" "<<rel.relaciones[n].suma;} 778 else if (rel.relaciones[n].suma>9){ f<<" "<<rel.relaciones[n].suma;} 779 else f<<" "<<rel.relaciones[n].suma; 780 } 781 } 782 if (esta==false){f<<" 0";} 783 } 784 f<<endl; 785 } 786 f.close(); 787 } 788 789 void rs::CreaPajek(int opcion){ 790 fstream f; 791 f.open("Pajek.net", ios::out|ios::trunc); 792 f<<"*Vertices "<<miemb.nMiembros<<endl; //La primera linea indica los 793 miembros que hay 794 for (int i=0;i<miemb.nMiembros;i++){ 795 f<<i+1<<" \""<<miemb.miembros[i]<<"\""; //El nombre de los miembros va entre 796 comillas 797 if(secc.nSecciones>0){ //Cada sección aparecerá de un 798 color diferente 799 if(miemb.seccion[i]==0)f<<" ic Black"<<endl; 800 if(miemb.seccion[i]==1)f<<" ic Red"<<endl; 801 if(miemb.seccion[i]==2)f<<" ic Blue"<<endl; 802 if(miemb.seccion[i]==3)f<<" ic Pink"<<endl; 803 if(miemb.seccion[i]==4)f<<" ic Yellow"<<endl; 804 if(miemb.seccion[i]==5)f<<" ic Orange"<<endl; 805 if(miemb.seccion[i]==6)f<<" ic Green"<<endl; 806 if(miemb.seccion[i]==7)f<<" ic Magenta"<<endl; 807 if(miemb.seccion[i]==8)f<<" ic Brown"<<endl; 808 if(miemb.seccion[i]==9)f<<" ic Gray"<<endl; 809 if(miemb.seccion[i]==10)f<<" ic Cyan"<<endl; 810 } 811 else{ 812 if (miemb.esMiembro[i]){f<<" ic Red"<<endl;} 813 else {f<<" ic Green"<<endl;} 814 } 815 } 816 817 f<<"*Edges"<<endl; 818 for (int i=0;i<rel.nRelaciones;i++){ 819 if 820 ((rel.relaciones[i].miemb1!=rel.relaciones[i].miemb2)&&(rel.relaciones[i].miemb1<=miemb.821 nMiembros)&&(rel.relaciones[i].miemb2<=miemb.nMiembros)){ 822 if (opcion==1){ //Muestra publicaciones 823 totales 824 f<<rel.relaciones[i].miemb1+1<<" "<<rel.relaciones[i].miemb2+1<<" "; 825 if (rel.relaciones[i].suma<5)f<<1<<endl; 826 else if (rel.relaciones[i].suma<10)f<<1<<endl; 827 else if (rel.relaciones[i].suma<20)f<<2<<endl; 828 else if (rel.relaciones[i].suma<30)f<<3<<endl; 829 else if (rel.relaciones[i].suma<40)f<<4<<endl; 830 else if (rel.relaciones[i].suma<50)f<<5<<endl; 831 else if (rel.relaciones[i].suma<60)f<<6<<endl; 832 else f<<7<<endl; 833 } 834

Page 73: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

12

if (opcion==2){ //Muestra las 835 publicaciones de tipo artículo 836 if (rel.relaciones[i].articulos>0){ 837 f<<rel.relaciones[i].miemb1+1<<" "<<rel.relaciones[i].miemb2+1<<" "; 838 if (rel.relaciones[i].articulos<5)f<<1<<endl; 839 else if (rel.relaciones[i].articulos<10)f<<1<<endl; 840 else if (rel.relaciones[i].articulos<20)f<<2<<endl; 841 else if (rel.relaciones[i].articulos<30)f<<3<<endl; 842 else if (rel.relaciones[i].articulos<40)f<<4<<endl; 843 else if (rel.relaciones[i].articulos<50)f<<5<<endl; 844 else if (rel.relaciones[i].articulos<60)f<<6<<endl; 845 else f<<7<<endl; 846 } 847 } 848 } 849 } 850 f.close(); 851 } 852 853 void rs::CreaPajekSeccion(int opcion){ 854 int suma; 855 fstream f; 856 f.open("PajekSecc.net", ios::out|ios::trunc); 857 f<<"*Vertices "<<secc.nSecciones<<endl; 858 for (int i=0;i<secc.nSecciones;i++){ 859 f<<i+1<<" \""<<secc.nomSeccion[i]<<"\""; 860 if(i==1)f<<" ic Red"<<endl; 861 if(i==2)f<<" ic Blue"<<endl; 862 if(i==3)f<<" ic Pink"<<endl; 863 if(i==4)f<<" ic Yellow"<<endl; 864 if(i==5)f<<" ic Orange"<<endl; 865 if(i==6)f<<" ic Green"<<endl; 866 if(i==7)f<<" ic Magenta"<<endl; 867 if(i==8)f<<" ic Brown"<<endl; 868 if(i==9)f<<" ic Gray"<<endl; 869 if(i==10)f<<" ic Cyan"<<endl; 870 } 871 f<<"*Edges"<<endl; 872 for (int i=0; i<secc.nSecciones-1; i++){ 873 for (int j=i+1; j<secc.nSecciones; j++){ 874 suma=0; 875 for (int k=0; k<rel.nRelaciones;k++){ 876 if 877 ((((miemb.seccion[rel.relaciones[k].miemb1])==i+1)&&((miemb.seccion[rel.relaciones[k].mi878 emb2])==j+1))|| 879 880 (((miemb.seccion[rel.relaciones[k].miemb2])==i+1)&&((miemb.seccion[rel.relaciones[k].mie881 mb1])==j+1))){ 882 if (opcion==1){ suma=suma+rel.relaciones[k].suma;} 883 else{ suma=suma+rel.relaciones[k].articulos;} 884 } 885 } 886 if (suma>0){ 887 f<<i+1<<" "<<j+1<<" "; 888 if (suma<10)f<<1<<endl; 889 else if (suma<20)f<<1<<endl; 890 else if (suma<40)f<<2<<endl; 891 else if (suma<60)f<<3<<endl; 892 else if (suma<80)f<<4<<endl; 893 else if (suma<100)f<<5<<endl; 894 else if (suma<120)f<<6<<endl; 895 else f<<7<<endl; 896 } 897 } 898 } 899 f.close(); 900 } 901 902 void rs::CreaPajekSeccionVec(int opcion){ 903 int suma; 904 fstream f; 905 f.open("PajekSeccVec.vec", ios::out|ios::trunc); 906 for (int i=0; i<secc.nSecciones; i++){ 907 suma=0; 908 f<<i+1; 909 for (int j=0; j<rel.nRelaciones; j++){ 910

Page 74: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

13

if 911 (((miemb.seccion[rel.relaciones[j].miemb1])==i+1)&&(rel.relaciones[j].miemb1==rel.relaci912 ones[j].miemb2)){ 913 if (opcion==1){suma=suma+rel.relaciones[j].suma;} 914 else {suma=suma+rel.relaciones[j].articulos;} 915 } 916 } 917 f<<" "<<suma<<endl; 918 } 919 f.close(); 920 } 921 922 923 void rs::CreaPajekAnyo(int anyoInicio){ 924 int ini=0,fin=anyoInicio,aux=1; 925 fstream f; 926 f.open("PajekAnyo.net", ios::out|ios::trunc); 927 f<<"*Vertices "<<miemb.nMiembros<<endl; //14 es el tipo de documento diferente que 928 puede ser una publicacion 929 for (int i=0;i<miemb.nMiembros;i++){ 930 f<<i+1<<" \""<<miemb.miembros[i]<<"\""<<" [1-13]"; 931 if(secc.nSecciones>0){ //Cada sección aparecerá de un 932 color diferente 933 if(miemb.seccion[i]==0)f<<" ic Black"<<endl; 934 if(miemb.seccion[i]==1)f<<" ic Red"<<endl; 935 if(miemb.seccion[i]==2)f<<" ic Blue"<<endl; 936 if(miemb.seccion[i]==3)f<<" ic Pink"<<endl; 937 if(miemb.seccion[i]==4)f<<" ic Yellow"<<endl; 938 if(miemb.seccion[i]==5)f<<" ic Orange"<<endl; 939 if(miemb.seccion[i]==6)f<<" ic Green"<<endl; 940 if(miemb.seccion[i]==7)f<<" ic Magenta"<<endl; 941 if(miemb.seccion[i]==8)f<<" ic Brown"<<endl; 942 if(miemb.seccion[i]==9)f<<" ic Gray"<<endl; 943 if(miemb.seccion[i]==10)f<<" ic Cyan"<<endl; 944 } 945 else{ 946 if (miemb.esMiembro[i]){f<<" ic Red"<<endl;} 947 else {f<<" ic Green"<<endl;} 948 } 949 } 950 f<<"*Edges"<<endl; 951 for (int i=fin;i<2013;i++){ 952 for (int j=0; j<publ.nPublicaciones;j++){ 953 if((publ.publicaciones[j].anyo<=i)&&(publ.publicaciones[j].anyo>ini)){ 954 for(int n=0;n<publ.publicaciones[j].nMiemb;n++){ 955 for(int m=n;m<publ.publicaciones[j].nMiemb;m++){ 956 if(publ.publicaciones[j].miemb[n]!=publ.publicaciones[j].miemb[m]){ 957 f<<publ.publicaciones[j].miemb[n]+1<<" 958 "<<publ.publicaciones[j].miemb[m]+1<<" 1 "<<"["<<aux<<"-13]"<<endl; 959 } 960 } 961 } 962 } 963 } 964 aux++; 965 ini=i; 966 } 967 f.close(); 968 } 969 970 void rs::CreaPajekVec(int opcion){ 971 bool esta; 972 fstream f; 973 f.open("PajekVec.vec", ios::out|ios::trunc); 974 f<<"*Vertices "<<miemb.nMiembros<<endl; 975 for (int i=0;i<miemb.nMiembros;i++){ 976 esta=false; 977 for (int j=0;j<rel.nRelaciones;j++){ 978 if 979 ((rel.relaciones[j].miemb1==i)&&(rel.relaciones[j].miemb1==rel.relaciones[j].miemb2)){ 980 if (opcion==1) { f<<rel.relaciones[j].suma<<endl;} 981 else {f<<rel.relaciones[j].articulos<<endl;} 982 esta=true; 983 } 984 } 985 if (!esta)f<<0<<endl; 986 } 987

Page 75: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

14

f.close(); 988 } 989 990 991 int main(){ 992 int opcion; 993 bool secciones; 994 rs RedSocial=rs(); 995 996 cout<<"**********************************************************************"<<endl; 997 cout<<"* *"<<endl; 998 cout<<"* DESARROLLO DE HERRAMIENTAS *"<<endl; 999 cout<<"* PARA EL ANALISIS DE REDES SOCIALES *"<<endl; 1000 cout<<"* *"<<endl; 1001 cout<<"**********************************************************************"<<endl<<en1002 dl; 1003 1004 opcion=0; 1005 while ((opcion!=1)&&(opcion!=2)){ 1006 cout<<"Selecciona la fuente de la que obtener los miembros de la red Social"<<endl; 1007 cout<<"1) De una lista (miembros.txt)"<<endl; 1008 cout<<"2) De un fichero BibTex (bibtex.bib)"<<endl; 1009 cin>>opcion; 1010 } 1011 1012 if (opcion==1){ 1013 secciones=RedSocial.RellenaLista(); 1014 RedSocial.EstudioSeccion(); 1015 } 1016 if (opcion==2) { 1017 RedSocial.CreaLista(); 1018 } 1019 1020 RedSocial.GuardaFichero(); 1021 RedSocial.RellenaMatriz(); 1022 RedSocial.ImprimeLista(); 1023 RedSocial.EstudioRS(); 1024 RedSocial.ImprimeMatriz(); 1025 1026 opcion=0; 1027 while ((opcion!=1)&&(opcion!=2)){ 1028 cout<<endl<<"Selecciona el tipo de publicacion que contendra el fichero para 1029 Pajek"<<endl; 1030 cout<<"1) Todas las publicaciones realizadas"<<endl; 1031 cout<<"2) Solamente los articulos"<<endl; 1032 cin>>opcion; 1033 } 1034 if (secciones){ 1035 RedSocial.EstudioSeccion(); 1036 RedSocial.CreaPajekSeccion(opcion); 1037 RedSocial.CreaPajekSeccionVec(opcion); 1038 } 1039 RedSocial.CreaPajek(opcion); 1040 RedSocial.CreaPajekVec( opcion); 1041 opcion=0; 1042 while ((opcion<1)||(opcion>8)){ 1043 cout<<endl<<"Selecciona el valor por el que ordenar los datos del informe"<<endl; 1044 cout<<"1) Numero de trabajos publicados"<<endl; 1045 cout<<"2) Numero de trabajos de tipo artículo publicados"<<endl; 1046 cout<<"3) Numero de personas distintas con las que se relaciona"<<endl; 1047 cout<<"4) Numero total de relaciones"<<endl; 1048 if (secciones){ 1049 cout<<"5) Numero de relaciones con miembros del instituto"<<endl; 1050 cout<<"6) Numero de relaciones con miembros de su sección"<<endl; 1051 cout<<"7) % de publicaciones con miembros de su seccion sobre el total"<<endl; 1052 } 1053 cin>>opcion; 1054 } 1055 if (opcion==1){RedSocial.OrdenaEstudio(0);} 1056 if (opcion==2){RedSocial.OrdenaEstudio(1);} 1057 if (opcion==3){RedSocial.OrdenaEstudio(2);} 1058 if (opcion==4){RedSocial.OrdenaEstudio(3);} 1059 if (opcion==5){RedSocial.OrdenaEstudio(5);} 1060 if (opcion==6){RedSocial.OrdenaEstudio(7);} 1061 if (opcion==7){RedSocial.OrdenaEstudio(10);} 1062 1063 opcion=2013; 1064

Page 76: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios

Código fuente

15

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

Page 77: II31 SISTEMAS INFORMÁTICOS - GIANTgiant.uji.es/montoliu/docs/pfc/MiguelAMartinez.pdf · de un fichero .bib, los almacene en una estructura de datos y genere una serie de estudios