Compter les valeurs uniques via l'API Explore

Modifié

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

count(distinct species)

Retourne le nombre de valeurs distinctes non nulles dans le champ species

Compter les espèces uniques, en considérant null comme "inconnu"

count(distinct ifnull(species, "'inconnu'"))

Compte les valeurs nulles comme "inconnu" et les inclut dans le résultat

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ées

  • Elle fonctionne dans les clauses select et order_by

  • Vous pouvez utiliser ifnull(...) pour inclure les valeurs nulles

  • Les résultats sont une approximation

  • Mais dans la plupart des cas d'utilisation, le résultat est rapide, efficace et suffisamment précis