Introducción a Neo4j. Ejemplos de consultas en grafos
Se quiere diseñar una base de datos en Neo4j con los datos proporcionados en las siguientes tablas, de manera que se pueda extraer información sobre la actividad de los estudiantes.
Estudiantes matriculados.
IdE
IdC
Título
Créditos
Profesor
Nombre estudiante
201
101
Filología románica
7
Sara Martínez
Maria Mestre
201
102
Griego moderno
7
Daniel Pérez
Maria Mestre
202
106
Teorías literarias
3
Juan García
Rodrigo Calvo
203
103
Literatura moderna
10
Amalia Sierra
Oriol Menezes
203
105
Fonética y morfología
5
Miguel Hernández
Oriol Menezes
203
108
Español moderno
10
Isabel Sanz
Oriol Menezes
204
101
Filología románica
7
Sara Martínez
Carlo Berruzo
205
103
Literatura hispano-americana
5
Paloma Sánchez
Sofia Canyadell
205
104
Literatura hispano-americana
5
Paloma Sánchez
Sofia Canyadell
205
108
Español moderno
10
Isabel Sanz
Sofia Canyadell
206
106
Teorías literarias
3
Juan García
Marina Perez
206
107
Lingüística general
3
Samuel López
Marina Perez
207
107
Lingüística general
3
Samuel López
Arianna Ruiz
208
104
Literatura hispano-americana
5
Paloma Sánchez
Naiara Zapico
Nota de los estudiantes examinados.
Créditos
Nota Exam
IdE
Título
Profesor
7
B
201
Filología románica
Sara Martínez
7
B
201
Griego moderno
Daniel Pérez
3
C
202
Teorías literarias
Juan García
10
A
203
Literatura moderna
Amalia Sierra
5
B
203
Fonética y morfología
Miguel Hernández
10
A
203
Español moderno
Isabel Sanz
7
B
204
Filología románica
Sara Martínez
10
C
205
Literatura moderna
Paloma Sánchez
5
B
205
Literatura hispano-americana
Paloma Sánchez
10
A
205
Español moderno
Isabel Sanz
3
B
206
Teorías literarias
Juan García
3
B
206
Lingüística general
Samuel López
3
A
207
Lingüística general
Samuel López
5
C
208
Literatura hispano-americana
Paloma Sánchez
1. Argumentar cuál es la mejor forma de estructurar la información proporcionada para la segunda tabla, es decir, presentar las notas de los estudiantes examinados.
En las condiciones expuestas, deberemos implementar un árbol multinivel de forma que cada nivel sirva para filtrar por la información que interesa. En el nivel más alto de la jerarquía aparecerán nodos de tipo “Curso” que representan a los diferentes cursos ofertados. En el siguiente nivel aparecerán nodos de tipo “Estudiante” representando a los estudiados que han sido evaluados en los cursos relacionándose mediante la relación “EXAMINADO”. Por último, se consideran nodos de tipo “Profesor” que representan a los profesores que han impartido los cursos relacionándose mediante la relación “FUE_IMPARTIDA”. Un ejemplo de esta estructura es la siguiente imagen:
2. Creamos la base de datos mediante sentencias en Cypher, siguiendo la propuesta planteada en el apartado 1 . Se deberán mostrar las queries y el resultado obtenido.
El resultado es:
3.Resolver las siguientes consultas:
Para todos los estudiantes que obtuvieron una nota ‘C’ en algún curso de 5 créditos, listar el nombre del estudiante, el título del curso y el nombre del profesor del curso En este caso tenemos que buscar todos los estudiantes que han sido examinados en algún curso y han obtenido una 'C'. Una vez obtenida esta información, obtenemos el profesor que ha impartido el curso.
Visualizar los nodos y relaciones de los estudiantes que cursaron “Griego moderno” o “Español moderno” en 2019 En este apartado tenemos que buscar todos los estudiantes que han sido examinados en un curso. En la relación, únicamente debemos escoger los usuarios examinados en el año 2019 para los cursos “Griego moderno” o “Español moderno”.
Obtener el usuario relevante que ha escrito el geolocated tweet con el mayor número de replies. Listar el userName y el número de replies. Básicamente voy ha buscar todas las respuestas de los tweets geolocalizados. Una vez obtenido, he buscado aquellos tweets escritos por usuarios relevantes. Por último, devuelvo su nombre de usuario junto con la cantidad de tweets creados. Al estar los tweets ordenados, el primer valor será aquel que tenga el mayor número de replies y, por lo tanto, el valor que necesito devolver.
El resultado obtenido al ejecutar la consulta es:
Obtener el número de Geolocated tweets escritos desde barcelona y con la palabra “Buenafuente” en el texto. En esta consulta hemos utilizado los tweets geolocalizados y su relación con Location. Únicamente utilizaremos todos aquellos localizados desde Barcelona y que en la variable text contenga 'Buenafuente'.
El resultado obtenido al ejecutar la consulta es:
Obtener la lista de usuarios relevantes de Barcelona con followers de Madrid. Ordenar la lista por número de followers y listar sólo el segundo. Lo más importante de esta consulta es utilizar skip y limit para poder obtener el segundo resultado más elevado. Por lo demás, únicamente he buscado usuarios relevantes de Barcelona que tengan una relación de FOLLOWS con un usuario relevante de Madrid.
Calcular el ratio entre el número de twitterUsers en castellano y ingles
Para conseguir mi objetivo he contado la cantidad de usuarios que tienen el perfil en ingles (numin) y castellano (numes). Posteriormente he obtenido la proporción que es 2 a 1 a favor del ingles.