Conteo de archivos RDF distintos en una consulta de Python.
Tengo este ejemplo de archivo .ttl RDF:
@prefix ns1: http://schema.org/ .
@prefix xsd: http://www.w3.org/2001/XMLSchema# .
<http://example.org/crime/100010117.0> ns1:beat "308" ;
ns1:crime "AUTO_THEFT" ;
ns1:date "1/1/2010" ;
ns1:lat 3.369307e+01 ;
ns1:location "960 CONSTITUTION RD SE" ;
ns1:long -8.435805e+01 ;
ns1:neighborhood "Norwood Manor" ;
ns1:npu "Z" ;
ns1:number 1.000101e+08 .
<http://example.org/crime/100010121.0> ns1:beat "309" ;
ns1:crime "LARCENY-FROM_VEHICLE" ;
ns1:date "1/1/2010" ;
ns1:lat 3.368274e+01 ;
ns1:location "2685 METROPOLITAN PKWY SW" ;
ns1:long -8.440902e+01 ;
ns1:neighborhood "Perkerson" ;
ns1:npu "X" ;
ns1:number 1.000101e+08 .
<http://example.org/crime/100010127.0> ns1:beat "208" ;
ns1:crime "LARCENY-FROM_VEHICLE" ;
ns1:date "1/1/2010" ;
ns1:lat 3.385211e+01 ;
ns1:location "3600 PIEDMONT RD NE" ;
ns1:long -8.438044e+01 ;
ns1:neighborhood "Buckhead Forest" ;
ns1:npu "B" ;
ns1:number 1.000101e+08 .
<http://example.org/crime/100010147.0> ns1:beat "512" ;
ns1:crime "ROBBERY-PEDESTRIAN" ;
ns1:date "1/1/2010" ;
ns1:lat 3.375104e+01 ;
ns1:location "FORSYTH ST SW / NELSON ST SW" ;
ns1:long -8.439479e+01 ;
ns1:neighborhood "Downtown" ;
ns1:npu "M" ;
ns1:number 1.000101e+08 .
<http://example.org/crime/100010149.0> ns1:beat "311" ;
ns1:crime "BURGLARY-RESIDENCE" ;
ns1:date "1/1/2010" ;
ns1:lat 3.367399e+01 ;
ns1:location "2950 SPRINGDALE RD SW" ;
ns1:long -8.441557e+01 ;
ns1:neighborhood "Hammond Park" ;
ns1:npu "X" ;
ns1:number 1.000101e+08 .
<http://example.org/crime/100010186.0> ns1:beat "501" ;
ns1:crime "BURGLARY-RESIDENCE" ;
ns1:date "1/1/2010" ;
ns1:lat 3.378988e+01 ;
ns1:location "288 16TH ST NW" ;
ns1:long -8.439713e+01 ;
ns1:neighborhood "Home Park" ;
ns1:npu "E" ;
ns1:number 1.000102e+08 .
Estoy intentando contar los diferentes tipos de crímenes (ns1:crime)
Quiero el resultado como ese, por ejemplo:
[
{
"crime": "AUTO_THEFT",
"count": 1
},
{
"crime": "LARCENY-FROM_VEHICLE",
"count": 2
},
{
"crime": "ROBBERY-PEDESTRIAN",
"count": 1
},
{
"crime": "BURGLARY-RESIDENCE",
"count": 2
}
]
Así que los diferentes tipos de crímenes (distintos) y su valor de conteo.
He intentado esto:
def countTypes (g):
crimes = []
q = g.query (
"""
PREFIX ns1: <http://schema.org/>
SELECT ?crime (count(distinct ?crime) as ?crimeCount) WHERE {
?s ns1:crime ?crime .
}""")
for row in q:
crimes.append (fila)
return crimes
Pero no funciona correctamente.
¿Alguna idea de cómo hacerlo?
Gracias
davy.ai
Para obtener la salida deseada, es necesario modificar su consulta SPARQL para agrupar los resultados por tipo de crimen y contar las ocurrencias usando la función de agregación COUNT. Aquí está una versión actualizada de su función:
Esta consulta agrupa los resultados por ?crime, cuenta las ocurrencias de cada crimen usando COUNT y devuelve los resultados como una lista de diccionarios de Python en el formato que especificó.