Compter les valeurs uniques via l'API Explore
Lors d'une analyse de données, vous pourriez vouloir savoir combien de valeurs uniques existent pour un champ particulier—par exemple, combien d'espèces différentes sont enregistrées dans un jeu de données sur les animaux d'un pays.
Vous pouvez le faire en utilisant la fonction count (distinct) dans l'API Explore.
Cet article explique comment utiliser count(distinct ...)
, fournit des exemples, et explique pourquoi le résultat retourné est une approximation.
Qu'est-ce que la fonction count (distinct) ?
La fonction count(distinct ...)
vous permet de calculer le nombre de valeurs uniques (non nulles) pour un champ spécifique dans votre jeu de données. Elle peut être utilisée dans les clauses select
et order_by
de votre requête.
Syntaxe :
count(distinct <champ>)
Ou, si vous souhaitez inclure les valeurs nulles sous une étiquette personnalisée :
count(distinct ifnull(<champ>, <valeur_alternative>))
Exemples
Par exemple, basé sur un jeu de données sur les animaux d'un pays donné :
Cas d'utilisation | Requête | Description |
Compter combien d'espèces uniques existent |
| Retourne le nombre de valeurs distinctes non nulles dans le champ |
Compter les espèces uniques, en considérant null comme "inconnu" |
| Compte les valeurs nulles comme |
Vous pouvez également l'utiliser avec group_by
:
select=count(distinct species)&group_by=region
Cela retourne le nombre d'espèces uniques par région.
Pourquoi le résultat n'est-il qu'une approximation ?
Lorsque vous utilisez count(distinct ...)
, le système estime combien de valeurs différentes existent dans le champ. Mais au lieu de vérifier chaque ligne—ce qui pourrait représenter des milliards d'enregistrements—il utilise un raccourci pour gagner en temps et en ressources.
Comment cela fonctionne
Notre plateforme utilise Elasticsearch. Pour compter les valeurs uniques, elle utilise une méthode d'estimation rapide appelée "agrégation de cardinalité," alimentée par un algorithme connu sous le nom de HyperLogLog++.
Cet algorithme est comme un raccourci statistique :
Imaginez que vous essayez de compter combien de types différents d'oiseaux visitent une immense forêt.
Au lieu d'observer chaque oiseau un par un, vous observez quelques zones et estimez en fonction de ce que vous voyez.
C'est rapide, et généralement très proche du nombre réel—mais ce n'est pas parfait.
Les résultats peuvent ne pas être parfaitement précis
Lorsque le jeu de données contient un très grand nombre de valeurs uniques
Lorsque les valeurs dans le champ sont très aléatoires ou rares
Alors pourquoi utiliser cette méthode ?
Elle fonctionne très rapidement, même avec de grands jeux de données
Elle économise de la mémoire et de la puissance de calcul
Elle donne un résultat qui est presque toujours suffisamment proche pour l'analyse
Exact si le nombre de valeurs distinctes dans le champ est inférieur à 200
Sinon, l'erreur est toujours inférieure à 6%
Il est donc possible que l'estimation produite par la fonction diffère légèrement du nombre réel, mais pour la plupart des utilisations pratiques, cette différence n'est pas un problème.
En conclusion
count(distinct ...)
est utile pour compter les valeurs uniques dans un jeu de donnéesElle fonctionne dans les clauses
select
etorder_by
Vous pouvez utiliser
ifnull(...)
pour inclure les valeurs nullesLes résultats sont une approximation
Mais dans la plupart des cas d'utilisation, le résultat est rapide, efficace et suffisamment précis