Commit e3520ac6 authored by Nicolas Fripp's avatar Nicolas Fripp
Browse files

advances

parent cdc41ee3
......@@ -19,6 +19,7 @@
"eslint-config-airbnb": "^18.2.1",
"history": "^4.10.1",
"husky": "^7.0.2",
"js-levenshtein": "^1.1.6",
"node-sass": "^6.0.1",
"prop-types": "^15.7.2",
"react": "^17.0.2",
......@@ -5764,6 +5765,15 @@
"node": ">=8"
}
},
"node_modules/bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"optional": true,
"dependencies": {
"file-uri-to-path": "1.0.0"
}
},
"node_modules/bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
......@@ -9686,6 +9696,12 @@
"url": "https://opencollective.com/webpack"
}
},
"node_modules/file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"optional": true
},
"node_modules/filesize": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
......@@ -13926,6 +13942,14 @@
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
"integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
},
"node_modules/js-levenshtein": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
"integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
......@@ -20663,6 +20687,7 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
"integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
"deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.",
"dependencies": {
"chalk": "^2.4.1",
"coa": "^2.0.2",
......@@ -27724,6 +27749,15 @@
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"optional": true
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"optional": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
......@@ -30798,6 +30832,12 @@
}
}
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"optional": true
},
"filesize": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
......@@ -33945,6 +33985,11 @@
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
"integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
},
"js-levenshtein": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
"integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g=="
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
......@@ -12,7 +12,7 @@ export function NavBar() {
<AppBar position="static">
<Toolbar>
<Link to="/comparacion">
<Button color="inherit">Comparacion</Button>
<Button color="inherit">Jugadores</Button>
</Link>
<Link to="/clubes">
<Button color="inherit">Clubes</Button>
......
......@@ -7,6 +7,7 @@ const API_ROUTES = {
REGISTER_USER: 'http://localhost:3000/users',
LOGIN_USER: 'http://localhost:3000/users/login',
GET_USERS: 'http://localhost:3000/users/getUsers',
DBPEDIA: 'https://dbpedia.org/sparql',
};
export { API_ROUTES };
/* eslint-disable no-unused-vars */
/* eslint-disable no-var */
import { NavBar } from 'common/navbar/navbar';
import React, { useState } from 'react';
import TextField from '@mui/material/TextField';
import { IconButton } from '@mui/material';
import SearchIcon from '@mui/icons-material/Search';
import { Grafica } from 'pages/grafica/grafica';
import { API_ROUTES } from 'networking/api-routes';
import { ApiService } from 'networking/api-service';
import levenshtein from 'js-levenshtein';
import styles from './clubes.module.scss';
const data = [
{
name: 'Page A',
uv: 4000,
pv: 2400,
amt: 2400,
},
{
name: 'Page B',
uv: 3000,
pv: 1398,
amt: 2210,
},
{
name: 'Page C',
uv: 2000,
pv: 9800,
amt: 2290,
},
{
name: 'Page D',
uv: 2780,
pv: 3908,
amt: 2000,
},
{
name: 'Page E',
uv: 1890,
pv: 4800,
amt: 2181,
},
{
name: 'Page F',
uv: 2390,
pv: 3800,
amt: 2500,
},
{
name: 'Page G',
uv: 3490,
pv: 4300,
amt: 2100,
},
];
const Clubes = () => {
const [nombre, setNombre] = useState('');
const [datosGrafica, setDatosGrafica] = useState([{}]);
const [datosGraficaClubValoracion, setDatosGraficaClubValoracion] = useState([{}]);
const [abstract, setAbstract] = useState('');
const handleChange = (event) => {
setNombre(event.target.value);
};
......@@ -60,25 +24,235 @@ const Clubes = () => {
// llamada a la api
console.log(nombre);
};
const getInfoDbPedia = async () => {
const request = `
select distinct
?s ?name ?abstract
where {
?s rdf:type dbo:SportsClub .
?s dbp:fullname ?name .
?s dbo:abstract ?abstract .
filter(regex(?name,"Bayern München", "i"))
}
`;
const response = await ApiService.get(API_ROUTES.DBPEDIA, {
query: request,
});
var mayor = 0;
var index = 0;
var iter = 0;
response.data.results.bindings?.forEach(async (dato) => {
const lev = levenshtein('Bayern München', dato.name.toString());
if (lev > mayor) {
mayor = lev;
index = iter;
}
iter += 1;
});
setAbstract(response.data.results.bindings[index]?.abstract.value);
};
const getValoracionFifa = async () => {
const request = `
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fo: <http://purl.org/ontology/fo/>
PREFIX foo: <http://filmontology.org/ontology/1.0/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix football: <http://www.football.org/ontologies/2021/football#>
prefix fifa: <http://www.football.org/ontologies/2021/fifa#>
SELECT ?temporada (SUM(?valoracion) as ?total) (COUNT(?jugadorStat) as ?cantJugadores) ((?total / ?cantJugadores) as ?promedio)
WHERE {
?typeStat rdfs:subClassOf football:Estadisticas .
?jugadorStat a ?typeStat.
?jugadorStat fifa:clubTemporada ?club.
?anio rdfs:subPropertyOf football:temporada .
?jugadorStat ?anio ?temporada .
?val rdfs:subPropertyOf football:valoracion .
?jugadorStat ?val ?valoracion .
filter(regex(?club, "FC Barcelona"))
}
GROUP BY ?temporada
ORDER BY DESC(?fecha)
LIMIT 100
`;
const response = await ApiService.get(API_ROUTES.EXAMPLE, {
query: request,
});
const lista = [];
response.data.results.bindings.forEach((elem) => {
const nuevo = {
temporada: elem.temporada.value,
cantJugadores: elem.cantJugadores.value,
promedio: elem.promedio.value,
valoracion: elem.total.value,
};
// eslint-disable-next-line no-empty
if (lista.find((nu) => nu.nombre === nuevo.nombre)) {
} else {
lista.push(nuevo);
}
});
setDatosGraficaClubValoracion(lista);
};
const getClubPartidos = async (fechaInicio, fechaFin, temporada) => {
// llamada a la api
const request = `
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fo: <http://purl.org/ontology/fo/>
PREFIX foo: <http://filmontology.org/ontology/1.0/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix football: <http://www.football.org/ontologies/2021/football#>
prefix fifa: <http://www.football.org/ontologies/2021/fifa#>
SELECT ?golesClub ?golesRival ?fecha ?rival
WHERE {
OPTIONAL {
?localProp rdfs:subPropertyOf football:localPartido.
?partido ?localProp <http://www.football.org/ontologies/2021/transfermarkt/club/fc-bayern-munchen> .
?visitanteProp rdfs:subPropertyOf football:visitantePartido.
?partido ?visitanteProp ?rivalC.
?rivalProp rdfs:subPropertyOf football:nombre .
?rivalC ?rivalProp ?rival .
?golesLocal rdfs:subPropertyOf football:golesLocal.
?partido ?golesLocal ?golesClub.
?golesVisita rdfs:subPropertyOf football:golesVisita.
?partido ?golesVisita ?golesRival.
}
OPTIONAL {
?visitanteProp rdfs:subPropertyOf football:visitantePartido.
?partido ?visitanteProp <http://www.football.org/ontologies/2021/transfermarkt/club/fc-bayern-munchen>.
?localProp rdfs:subPropertyOf football:visitantePartido.
?partido ?localProp ?rivalC.
?rivalProp rdfs:subPropertyOf football:nombre .
?rivalC ?rivalProp ?rival .
?golesLocal rdfs:subPropertyOf football:golesLocal.
?partido ?golesLocal ?golesRival.
?golesVisita rdfs:subPropertyOf football:golesVisita.
?partido ?golesVisita ?golesClub.
}
?fechaPartido rdfs:subPropertyOf football:fecha.
?partido ?fechaPartido ?fecha.
filter(?fecha > "${fechaInicio}"^^xsd:date && ?fecha < "${fechaFin}"^^xsd:date )
}
LIMIT 1000
`;
const response = await ApiService.get(API_ROUTES.EXAMPLE, {
query: request,
});
var cantGolesHechosV = 0;
var cantGolesRecibidosV = 0;
var cantPartidosGanadosV = 0;
var cantPartidosPerdidosV = 0;
var cantPartidosEmpatadosV = 0;
response.data.results.bindings.forEach((elem) => {
// eslint-disable-next-line no-empty
cantGolesHechosV += elem.golesClub.value;
cantGolesRecibidosV += elem.golesRival.value;
if (elem.golesClub.value > elem.golesRival.value) {
cantPartidosGanadosV += 1;
} else if (elem.golesClub.value === elem.golesRival.value) {
cantPartidosEmpatadosV += 1;
} else {
cantPartidosPerdidosV += 1;
}
});
const nuevo = {
golesHechos: parseInt(cantGolesHechosV, 10),
temporada,
golesRecibidos: cantGolesRecibidosV,
partidosGanados: cantPartidosGanadosV,
partidosPerdidos: cantPartidosPerdidosV,
partidosEmpatados: cantPartidosEmpatadosV,
};
// eslint-disable-next-line vars-on-top
return nuevo;
};
const run = async () => {
const c1 = await getClubPartidos('2021-01-01', '2021-12-31', 2021);
const c2 = await getClubPartidos('2020-01-01', '2020-12-31', 2020);
const c3 = await getClubPartidos('2019-01-01', '2019-12-31', 2019);
const c4 = await getClubPartidos('2018-01-01', '2018-12-31', 2018);
const c5 = await getClubPartidos('2017-01-01', '2017-12-31', 2017);
const c6 = await getClubPartidos('2016-01-01', '2016-12-31', 2016);
const lista = [c1, c2, c3, c4, c5, c6].sort((a, b) => a - b);
setDatosGrafica(lista);
getValoracionFifa();
getInfoDbPedia();
};
return (
<>
<NavBar />
<h1>
CLUBES
</h1>
<p> Total de valoracion de un club a lo largo de los años </p>
<center>
<TextField
label="Nombre del club"
onChange={handleChange}
/>
<IconButton type="submit" className={styles.icon} aria-label="search" onClick={handleSearch}>
<SearchIcon />
</IconButton>
<div className={styles.chart}>
<Grafica data={data} />
<p>{abstract}</p>
<div className={styles.content}>
<div className={styles.column}>
<div className={styles.search}>
<TextField
label="Nombre del jugador"
onChange={handleChange}
value={nombre}
/>
<IconButton type="submit" className={styles.icon} aria-label="search" onClick={handleSearch}>
<SearchIcon />
</IconButton>
</div>
<div className={styles.lista}>
{// <ListaJugadores lista={listaJugadores} handleClickLista={handleClickLista} />
}
</div>
</div>
<button type="button" onClick={run}>APRIETA</button>
<div className={styles.row}>
<div className={styles.chart}>
<p>Goles hechos a lo largo de las temporadas</p>
<Grafica data={datosGrafica} dataKey1="temporada" dataKey2="golesHechos" />
</div>
<div className={styles.chart}>
<p>Goles recibidos</p>
<Grafica data={datosGraficaClubValoracion} dataKey1="temporada" dataKey2="golesRecibidos" />
</div>
<div className={styles.chart}>
<p>Partidos ganados </p>
<Grafica data={datosGraficaClubValoracion} dataKey1="temporada" dataKey2="partidosGanados" />
</div>
<div className={styles.chart}>
<p>Partidos perdidos </p>
<Grafica data={datosGraficaClubValoracion} dataKey1="temporada" dataKey2="partidosPerdidos" />
</div>
<div className={styles.chart}>
<p>Partidos empatados </p>
<Grafica data={datosGraficaClubValoracion} dataKey1="temporada" dataKey2="partidosEmpatados" />
</div>
<div className={styles.chart}>
<p>promedio de valoracion de arqueros</p>
<Grafica data={datosGraficaClubValoracion} dataKey1="temporada" dataKey2="valoracion" />
</div>
</div>
</center>
</div>
</>
);
};
......
.icon {
transform: scale(1.5);
margin-left: 10px;
display: flex;
}
.ficha {
width: 400px;
......@@ -16,5 +17,22 @@
display: flex;
}
.chart {
margin-top: 40px;
}
.column {
display: flex;
flex-direction: column;
}
.search {
display: flex;
flex-direction: row;
height: 60px;
margin-left: 20px;
}
.lista {
margin-left: 20px;
}
.row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
import { NavBar } from 'common/navbar/navbar';
import React, { useEffect, useState } from 'react';
import React, { useState } from 'react';
import TextField from '@mui/material/TextField';
import { IconButton } from '@mui/material';
import { IconButton, Typography } from '@mui/material';
import SearchIcon from '@mui/icons-material/Search';
import { Grafica } from 'pages/grafica/grafica';
import { ApiService } from 'networking/api-service';
......@@ -10,57 +10,47 @@ import { ListaJugadores } from 'common/lista/lista';
import raw from '../../consultas/consultas.txt';
import styles from './comparacion.module.scss';
const data = [
{
name: 'Page A',
uv: 4000,
pv: 2400,
amt: 2400,
},
{
name: 'Page B',
uv: 3000,
pv: 1398,
amt: 2210,
},
{
name: 'Page C',
uv: 2000,
pv: 9800,
amt: 2290,
},
{
name: 'Page D',
uv: 2780,
pv: 3908,
amt: 2000,
},
{
name: 'Page E',
uv: 1890,
pv: 4800,
amt: 2181,
},
{
name: 'Page F',
uv: 2390,
pv: 3800,
amt: 2500,
},
{
name: 'Page G',
uv: 3490,
pv: 4300,
amt: 2100,
},
];
const Comparacion = () => {
const [nombre, setNombre] = useState('');
const [listaJugadores, setListaJugadores] = useState([]);
const [listaValoracion, setListaValoracion] = useState([]);
const [abstract, setAbstract] = useState('');
const [datoTrans, setDatoTrans] = useState({
fechaNac: '',
pierna: '',
altura: '',
club: '',
nombreClub: '',
link: '',
nombre: '',
pais: '',
bandera: '',
});
const handleChange = (event) => {
setNombre(event.target.value);
};
const getDBpediaInfo = async (name, fechaNac) => {
const request = `
select ?name ?info
where {
?persona rdf:type dbo:SoccerPlayer.
?persona foaf:name ?name.
?persona dbo:abstract ?info.
?persona dbo:birthDate "${fechaNac}"^^xsd:date .
filter( regex(?name, "${name}","I") && lang(?info) = "en" )
}
LIMIT 1
`;
const response = await ApiService.get(API_ROUTES.DBPEDIA, {
query: request,
});
setDatoTrans((prev) => {
const nuevo = { ...prev };
nuevo.fechaNac = fechaNac;
return nuevo;
});
setAbstract(response.data.results.bindings[0]?.info.value);
};
const handleClickLista = (fechaNac) => {
// query con nombre
setListaJugadores([]);
......@@ -68,39 +58,90 @@ const Comparacion = () => {
.then((r) => r.text())
.then(async (text) => {
const request = `${text}
SELECT ?jugador ?nombre ?foto ?pais ?temporada ?fechaNac ?valoracion
SELECT ?jugador ?nombre ?foto ?pais ?temporada ?valoracion ?altura ?pierna ?club ?nombreClub ?bandera ?linkTransfermarkt
WHERE {
?nombreProp rdfs:subPropertyOf football:nombre .
?jugador ?nombreProp ?nombre .
?tieneNac rdfs:subPropertyOf football:nacionalidad .
?jugador ?tieneNac ?pais .
?tieneFecha rdfs:subPropertyOf football:fechaNac .
?jugador ?tieneFecha "${fechaNac}"^^xsd:date .
?jugador ?tieneFecha "1987-06-24"^^xsd:date .
OPTIONAL {
OPTIONAL {
#Transfermarkt
?tieneAltura rdfs:subPropertyOf football:altura .
?jugador ?tieneAltura ?altura .
?piernaHabil rdfs:subPropertyOf football:pierna .
?jugador ?piernaHabil ?pierna .
?tieneFecha rdfs:subPropertyOf football:fechaNac .
?jugador ?tieneFecha "1987-06-24"^^xsd:date .
?juegaPara rdfs:subPropertyOf football:juegaPara .
?jugador ?juegaPara ?club .
?club ?nombreProp ?nombreClub.
?urlTransf rdfs:subPropertyOf football:transfermarktURL .
?jugador ?urlTransf ?linkTransfermarkt .
}.
OPTIONAL {
#FIFA
?versionJuego rdfs:subPropertyOf football:versionJuego .
?jugador ?versionJuego ?stats .