Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PEC3
Instrucciones
Para poder realizar la práctica, el alumno debe usar la máquina virtual proporcionada que se
encuentra en el área de recursos y consultar el manual de usuario proporcionado:
● Máquina virtual Linux Mint suministrada.
● Documento “Máquina virtual Linux Mint (Manual)”
Considera el documento que se encuentra en los materiales del curso “Diseño de una base
de datos para analizar la actividad de usuarios en Twitter” que describe la implementación de
una base de datos en Neo4j. También se necesitará la máquina virtual de LinuxMint (que
encontraréis en los recursos del aula) que contiene una instalación de Neo4j que tiene
cargada la base de datos descrita anteriormente. El manual para utilizar e instalar la
máquina virtual también está en los recursos del aula.
Se pide proporcionar las siguientes consultas en Cypher y una captura de pantalla con los
resultados que se obtienen para las siguientes operaciones:
Consulta 1 (10%)
Obtén el número de nodos etiquetados con cada etiqueta de nodo y el número de nodos
relacionados mediante la etiqueta “HAS_WRITEN”. Utiliza una sentencia en Cypher para
cada etiqueta/nodo.
Consulta 2 (20%)
Identifica las localizaciones desde las que se han escrito más tweets (relación
IS_WRITEN_FROM). Para cada una de ellas hay que mostrar su nombre y el número de
tweets escritos desde allí. Nos interesa sólo mostrar las localizaciones con más de 150
tweets.
Consulta 4 (20%)
Ahora que sabemos que el usuario relevante más popular es “Ismael Pe”, nos interesa
conocer los 20 primeros caracteres del texto de su tweet más retwiteado y el número de tuits
que lo han retwitteado.
Consulta 5 (25%)
Obtener el número total de seguidores, ya sean de segundo o tercer nivel, de los usuarios
relevantes que tienen un perfil de inglés. Mostrar únicamente los 5 usuarios relevantes con
más seguidores. Se desea visualizar de éstos el nombre del usuario relevante y el número
de seguidores.
Consulta 6 (15%)
Calculad el número medio de relaciones de salida que tienen los nodos de tipo TwitterUser
de la base de datos, es decir, el número medio de orden de salida de sus nodos. Nota: esta
consulta puede tardar un poco.
La versión community de Neo4j, que estamos utilizando, tiene algunas limitaciones. Una de
ellas es no poder crear más de una base de datos, por lo tanto, tendrán que convivir en el
mismo espacio los nodos de esta base de datos con los de Twitter.
CREAR NODOS
Create orders
LOAD CSV WITH HEADERS FROM
'https://gist.githubusercontent.com/jexp/054bc6baf36604061bf407aa8c
d08608/raw/8bdd36dfc88381995e6823ff3f419b5a0cb8ac4f/orders.csv' AS
row
MERGE (order:Order {orderID: row.OrderID})
ON CREATE SET order.shipName = row.ShipName;
Que retornará:
0 rows available after 1781 ms, consumed after another 0 ms
Added 830 nodes, Set 1660 properties, Added 830 labels
Create products
LOAD CSV WITH HEADERS FROM
Que retornará:
0 rows available after 332 ms, consumed after another 0 ms
Added 77 nodes, Set 231 properties, Added 77 labels
Create suppliers
LOAD CSV WITH HEADERS FROM
'https://gist.githubusercontent.com/jexp/054bc6baf36604061bf407aa8c
d08608/raw/8bdd36dfc88381995e6823ff3f419b5a0cb8ac4f/suppliers.csv'
AS row
MERGE (supplier:Supplier {supplierID: row.SupplierID})
ON CREATE SET supplier.companyName = row.CompanyName;
Que retornará:
0 rows available after 258 ms, consumed after another 0 ms
Added 29 nodes, Set 58 properties, Added 29 labels
Create employees
LOAD CSV WITH HEADERS FROM
'https://gist.githubusercontent.com/jexp/054bc6baf36604061bf407aa8c
d08608/raw/8bdd36dfc88381995e6823ff3f419b5a0cb8ac4f/employees.csv'
AS row
MERGE (e:Employee {employeeID:row.EmployeeID})
ON CREATE SET e.firstName = row.FirstName, e.lastName =
row.LastName, e.title = row.Title;
Que retornará:
0 rows available after 244 ms, consumed after another 0 ms
Added 9 nodes, Set 36 properties, Added 9 labels
Create categories
LOAD CSV WITH HEADERS FROM
'https://gist.githubusercontent.com/jexp/054bc6baf36604061bf407aa8c
d08608/raw/8bdd36dfc88381995e6823ff3f419b5a0cb8ac4f/categories.csv'
AS row
MERGE (c:Category {categoryID: row.CategoryID})
ON CREATE SET c.categoryName = row.CategoryName, c.description =
row.Description;
Que retornará:
CREAR RELACIONES
Que retornará:
0 rows available after 1832 ms, consumed after another 0 ms
Created 2155 relationships, Set 4310 properties
Que retornará:
0 rows available after 1285 ms, consumed after another 0 ms
Created 830 relationships
Que retornará:
0 rows available after 131 ms, consumed after another 0 ms
Created 77 relationships
Que retornará:
0 rows available after 264 ms, consumed after another 0 ms
Created 77 relationships
Que retornará:
0 rows available after 86 ms, consumed after another 0 ms
Created 8 relationships
Consulta 1 (20%)
Encontrar los empleados que han vendido más de 120 pedidos. Listar nombre, apellido de
los empleados y número de pedidos vendidos. Ordenar los empleados listando en primer
lugar los que han vendido más.
Consulta 2 (20%)
Listar, en una misma consulta, el número de productos de la categoría ‘Seafood’, el número
de productos de la categoría ‘Beverage’ y el número total de productos en las dos
categorías.
Consulta 3 (30%)
Obtener el tercer y cuarto mejores vendedores de productos de la compañía “Leka Trading”.
Los mejores vendedores son aquellos que han vendido más productos de “Leka Trading”.
Listar sólo el nombre y apellido de los vendedores y el número de unidades vendidas por
vendedor.
Consulta 4 (30%)
Fijémonos en los Suppliers "Pavlova, Ltd." y "Tokyo Traders". ¿Cuál de los dos han
vendido más pedidos con productos de las categorías "Seafood" o "Meat/Poultry"?
La consulta debe retornar una frase del tipo 'X are the best seller', donde X es el proveedor
(supplier) que vende más.
Considera la base de datos descrita en el material titulado “Diseño de una base de datos
para una app de mensajería instantánea” que se encuentra en los materiales del curso.
Inicia el servicio de MongoDB y accede a los datos. Para realizar esta tarea, lee el manual
de la máquina virtual que encontrarás en los recursos de la asignatura.
Inicia el servicio de MongoDB y accede a los datos con los siguientes comandos:
Deja pasar unos segundos para que el servicio arranque y después ejecuta:
mongo
use mensajeria
Para más información, lee el manual de la máquina virtual que encontrarás en los recursos
de la asignatura.
Se pide proporcionar las sentencias (texto) para el shell de MongoDB y los resultados que se
obtienen (haciendo una captura de pantalla) para las siguientes operaciones:
Consulta 1 (20%)
A partir de la información almacenada en la colección “Usuarios_grupos” se quiere conocer el
nombre del usuario y sus apellidos de aquellos usuarios de más de 40 años que pertenecen
exactamente a 4 grupos.
Consulta 3 (25%)
Encontrar todos los grupos que tengan miembros de Barcelona y que además no tengan
ninguno de Madrid. Mostrar el nombre del grupo.
Consulta 4 (30%)
Eliminar todos los contactos del usuario “Susana Lacasa Hacha” de Barcelona (colección
“Contactos_usuarios”). Mostrar primero la existencia del usuario y sus contactos y luego el
resultado final después de eliminarlos.
Dentro de la carpeta creada (sakila) copiar y pegar los archivos sin comprimir
proporcionados junto con el enunciado (los podéis descargar directamente desde el campus
en la máquina virtual para facilitar el proceso):
● Sakila_actors.bson
● Sakila_actors.metadata.json
● Sakila_customers.bson
● Sakila_customers.metadata.json
● Sakila_films.bson
● Sakila_films.metadata.json
Una vez hecho, ya nos podemos conectar a mongoDB y comprobar que los datos se han
cargado correctamente. Desde un terminal de comandos (o desde Robo3T) podemos
ejecutar:
mongo
Finalmente, recordad que no es necesario repetir los pasos para cargar la base de
datos de nuevo porque los datos ya se encuentran cargados y al volver a realizar la
carga perderéis los cambios realizados. En otras palabras, si volvéis a ejecutar el
comando mongorestore la base de datos volverá a restaurarse y perderéis todos los
cambios realizados.
Consulta 1 (20%)
Obtén todos los actores que se apelliden DAVIS (recordad que MongoDB es sensible a
mayúsculas y minúsculas, por lo que Davis no es lo mismo que DAVIS). El formato del JSON
debe facilitar la lectura.
Consulta 3 (25%)
Para esta consulta recordad que MongoDB es sensible a mayúsculas y minúsculas, y los
campos pueden estar descritos de diferentes maneras en las distintas colecciones y
documentos.
De la colección Sakila_films, muestra solamente el título de todas las películas en las que
ha participado la actriz JENNIFER DAVIS.
Consulta 4 (35%)
Obtén el título y el recuento de actores de la película en la que participan más actores. La
consulta debe retornar un solo documento con solamente los campos detallados.
Propiedad intelectual
Al presentar una práctica o PEC que haga uso de recursos ajenos, se tiene que presentar junto
con ella un documento en que se detallen todos ellos, especificando el nombre de cada recurso,
su autor, el lugar donde se obtuvo y su estatus legal: si la obra está protegida por el copyright o
se acoge a alguna otra licencia de uso (Creative Commons, licencia GNU, GPL etc.). El
estudiante tendrá que asegurarse que la licencia que sea no impide específicamente su uso en el
marco de la práctica o PEC. En caso de no encontrar la información correspondiente tendrá que
asumir que la obra está protegida por el copyright. Será necesario, además, adjuntar los ficheros
originales cuando las obras utilizadas sean digitales, y su código fuente, si así corresponde.