我如何在 SPARQL 中计算统计模式
How do I calculate statistical mode in SPARQL
我正在尝试使用 SPARQL 计算数据集的统计模式(出现频率最高的值)。
我可以像这样生成数据值及其频率的列表:
SELECT (COUNT(?o) AS ?no) ?o
WHERE {?s ?p ?o
FILTER isLiteral(?o)
}
GROUP BY ?o ORDER by DESC(?no)
结果如下:
| 410 | "yes"^^<http://www.w3.org/2001/XMLSchema#string>
| 19 | "true"^^<http://www.w3.org/2001/XMLSchema#string>
| 12 | "Offical"^^<http://www.w3.org/2001/XMLSchema#string> ...
但是,我只想要第一行数据,即数据集中最常见对象值的值和频率。
我试过像这样使用 MAX:
SELECT (MAX(?no) AS ?maxNo)
{
SELECT (COUNT(?o) AS ?no) ?o
WHERE {?s ?p ?o
FILTER isLiteral(?o)
}
GROUP BY ?o ORDER by DESC(?no)
}
并且可以像这样取回计数:
---------
| maxNo |
=========
| 410 |
---------
但我想要返回的是最常出现的数据值的计数以及该数据值的样子:
| 410 | "yes"^^<http://www.w3.org/2001/XMLSchema#string>
我试过在子查询中绑定 ?o 并将 ?o 添加到外部 SELECT 但两者都给我语法错误。
我还能尝试什么?
感谢阅读。
ORDER
-LIMIT
,也称为 "top n",应该能为您提供所需的答案。
SELECT (COUNT(?o) AS ?no) ?o
WHERE {
?s ?p ?o
FILTER isLiteral(?o)
}
GROUP BY ?o
ORDER by DESC(?no)
LIMIT 1
我正在尝试使用 SPARQL 计算数据集的统计模式(出现频率最高的值)。
我可以像这样生成数据值及其频率的列表:
SELECT (COUNT(?o) AS ?no) ?o
WHERE {?s ?p ?o
FILTER isLiteral(?o)
}
GROUP BY ?o ORDER by DESC(?no)
结果如下:
| 410 | "yes"^^<http://www.w3.org/2001/XMLSchema#string>
| 19 | "true"^^<http://www.w3.org/2001/XMLSchema#string>
| 12 | "Offical"^^<http://www.w3.org/2001/XMLSchema#string> ...
但是,我只想要第一行数据,即数据集中最常见对象值的值和频率。
我试过像这样使用 MAX:
SELECT (MAX(?no) AS ?maxNo)
{
SELECT (COUNT(?o) AS ?no) ?o
WHERE {?s ?p ?o
FILTER isLiteral(?o)
}
GROUP BY ?o ORDER by DESC(?no)
}
并且可以像这样取回计数:
---------
| maxNo |
=========
| 410 |
---------
但我想要返回的是最常出现的数据值的计数以及该数据值的样子:
| 410 | "yes"^^<http://www.w3.org/2001/XMLSchema#string>
我试过在子查询中绑定 ?o 并将 ?o 添加到外部 SELECT 但两者都给我语法错误。
我还能尝试什么?
感谢阅读。
ORDER
-LIMIT
,也称为 "top n",应该能为您提供所需的答案。
SELECT (COUNT(?o) AS ?no) ?o
WHERE {
?s ?p ?o
FILTER isLiteral(?o)
}
GROUP BY ?o
ORDER by DESC(?no)
LIMIT 1