Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

L'équipe GeoRezo vous présente son bilan de l'année 2019.

Vous y trouverez quelques statistiques, des explications sur les évènements marquants de l'année, et nos projets à court terme.

#1 Mon 29 April 2019 15:23

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 119

Méthode de classification Jenks dans postgres

Bonjour,

J'aimerais savoir si vous connaissez un moyen de réaliser une classification d'après la méthode statistique Jenks ou dite des Seuils naturels dans postgresql.

Merci d'avance pour vos retours.

Hors ligne

 

#2 Mon 29 April 2019 16:55

ppluvinet
Membre
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 554

Re: Méthode de classification Jenks dans postgres

Bonjour,
Il vous faudra je pense regarder à écrire des fonctions de Kmeans avec R ou python. A moins qu'il existe désormais une extension spécifique?
J'avais, il y a au moins 10 ans, implémenté des fonctions de Médiane, et quantiles avec PL/R. Toutefois, je ne pense plus être la bonne ressource !!!
Bon courage,


Pascal PLUVINET

Hors ligne

 

#3 Mon 29 April 2019 17:15

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1003

Re: Méthode de classification Jenks dans postgres

son calcul étant itératif, çà n'est pas faisable en SQL pur,
sauf peut être en utilisant une cte recursive, et encore,
pas sur que cela change quelque chose ou alors, si c'est
possible, je doute que çà soit très efficace.

Donc comme Pascal, plutôt voir du coté pl/R, créer une fonction
qui prends un argument le nom d'une table et renvoie les données
classées. Il y a sans doute déjà des implémentations en R de la classif Jenks.

Hors ligne

 

#4 Mon 29 April 2019 19:12

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1003

Re: Méthode de classification Jenks dans postgres

En fait, on peut peut être ruser :

si j'ai bien compris la classif de jenks est une classif k-mean
qui ne prends en compte qu'une dimension.

Donc, si vous avez postgis >= 2.3 d'installé, vous pouvez tricher :

Code:

SELECT 
    st_clusterkmeans(st_makepoint(_valeur_a_classer_, 0), 
                    _nombre_de_classe_) 
           OVER () 
           AS classe,
    _valeur_a_classer_
FROM 
     ma_table

Dernière modification par tumasgiu (Tue 30 April 2019 22:09)

Hors ligne

 

#5 Thu 09 May 2019 13:17

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 119

Re: Méthode de classification Jenks dans postgres

Merci pour vos réponses!
Je vais essayer la méthode des k-means.

Cordialement.

Hors ligne

 

#6 Thu 09 May 2019 13:48

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 119

Re: Méthode de classification Jenks dans postgres

Merci pour vos réponses!
Je vais essayer la méthode des k-means.

Cordialement.

Hors ligne

 

#7 Thu 09 May 2019 13:54

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 119

Re: Méthode de classification Jenks dans postgres

Bonjour,

J'ai fait un test sur mes données mais la fonction ne me ressort que 7 classes, alors qu'il devrait m'en ressortir 10. Est ce parce que je n'ai pas assez d'individus homogènes dans ma distribution pour former des palliers marquants entre les classes 6 et 9?:


Code:

WITH nb AS
(SELECT 
    st_clusterkmeans(st_makepoint(surf_total, 0), 
                    10) 
           OVER (ORDER BY surf_total DESC)  
           AS classe,
    surf_total
FROM 
     mcd.tm2_espace_activite
     ORDER BY classe)
     select count(classe)as nb_element, classe
     from nb
     group by classe
     order by classe

Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#8 Thu 09 May 2019 13:54

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 119

Re: Méthode de classification Jenks dans postgres

Bonjour,

J'ai fait un test sur mes données mais la fonction ne me ressort que 7 classes, alors qu'il devrait m'en ressortir 10. Est ce parce que je n'ai pas assez d'individus homogènes dans ma distribution pour former des palliers marquants entre les classes 6 et 9?:


Code:

WITH nb AS
(SELECT 
    st_clusterkmeans(st_makepoint(surf_total, 0), 
                    10) 
           OVER (ORDER BY surf_total DESC)  
           AS classe,
    surf_total
FROM 
     mcd.tm2_espace_activite
     ORDER BY classe)
     select count(classe)as nb_element, classe
     from nb
     group by classe
     order by classe

Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#9 Thu 09 May 2019 13:54

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 119

Re: Méthode de classification Jenks dans postgres

Bonjour,

J'ai fait un test sur mes données mais la fonction ne me ressort que 7 classes, alors qu'il devrait m'en ressortir 10. Est ce parce que je n'ai pas assez d'individus homogènes dans ma distribution pour former des palliers marquants entre les classes 6 et 9?:


Code:

WITH nb AS
(SELECT 
    st_clusterkmeans(st_makepoint(surf_total, 0), 
                    10) 
           OVER (ORDER BY surf_total DESC)  
           AS classe,
    surf_total
FROM 
     mcd.tm2_espace_activite
     ORDER BY classe)
     select count(classe)as nb_element, classe
     from nb
     group by classe
     order by classe

Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#10 Thu 16 May 2019 11:56

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1003

Re: Méthode de classification Jenks dans postgres

Salut,

apparemment c'est un bug qui a été corrigé dans les versions 2.3.6 et  2.4.3

Dernière modification par tumasgiu (Thu 16 May 2019 11:58)

Hors ligne

 

#11 Tue 24 March 2020 14:42

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 119

Re: Méthode de classification Jenks dans postgres

Bonjour,

J'aimerais automatiser la répartition de mes données en classes d'après la méthode de jenks pour pouvoir ensuite les styler.
Pour ça je suis repartie de la fonction clusterkmeans :

Code:

SELECT 
    st_clusterkmeans(st_makepoint(confirmed, 0), 
                    6) OVER (ORDER BY confirmed DESC) AS classe, 
                    confirmed
FROM 
     sante.test
ORDER BY classe, confirmed

Mes données sont bien réparties dans les différentes classes, cependant celles ci ne sont pas ordonnées par grandeur.

Exemple :

- la classe 0 comprend les valeurs allant de 0 à 2621 (jusqu'ici pas de problème)
- la classe 1 comprend une seule valeur qui est 81116
- la classe 2 comprend les valeurs 35136, 43667
- la classe 3 comprend les valeurs 19874, 23049, 29056
- la classe 4 comprend une seule valeur qui est 63927
- la classe 5 comprend les valeurs 3743, 4474, 4764, 6711, 8795, 8961

J'aimerais obtenir cet ordre là :
- classe 0 = classe 0
- classe 1 = classe 5
- classe 2 = classe 3
- classe 3 = classe 2
- classe 4 = classe 4
- classe 5 = classe 1

Après vérification, cette fonction créé les groupes mais ne gère pas leur ordre, elle leur attribue un numéro de manière aléatoire.
J'aimerais les renuméroter dans un ordre numérique en les triant selon la colonne confirmed, est ce que vous voyez un moyen de faire ça en sql?

Merci d'avance pour votre retour!


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#12 Tue 24 March 2020 15:28

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1003

Re: Méthode de classification Jenks dans postgres

Salut,

avec des CTE et row_number, une autre window function,
pour renumeroter des lignes :

Code:

WITH jenks AS (
    SELECT 
        st_clusterkmeans(st_makepoint(confirmed, 0), 
                        6) OVER (ORDER BY confirmed DESC) AS classe, 
                        confirmed
    FROM 
         sante.test
    )
    
, classes AS (    
    SELECT 
        classe, 
        row_number() OVER (ORDER BY min) AS n_classe
    FROM --on ordonne les classes par leur valeur min
        ( SELECT 
            classe, min(confirmed) 
          FROM 
            jenks
          GROUP BY 
            classe) AS subreq
      )

SELECT
    confirmed, n_classe
FROM
    jenks
--natural joint fait une jointure sur toutes 
-- les colonnes de A & B ayant les mêmes noms.
-- ici : classe
NATURAL JOIN 
    classes
;

Peut être qu'il y a un moyen plus simple,cela dit.

sante.test, confirmed, c'est en lien avec le virus ?

Dernière modification par tumasgiu (Tue 24 March 2020 15:29)

Hors ligne

 

#13 Wed 25 March 2020 08:05

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 119

Re: Méthode de classification Jenks dans postgres

Je vous remercie pour cette solution toute prête et qui fonctionne, je vais m'empresser de mettre mes tables à jour.

Oui tout à fait, je travaille sur la réalisation de cartes à partir des données en open data du coronavirus. Ici il s'agit des données du politologue (données mondiales) : https://www.data.gouv.fr/fr/datasets/co … tidienne/.

La mise à jour des données étant quotidienne, le calcul des classes dans la table me permettra d'avoir toujours la bonne répartition des individus par classe, pour un style dynamique!

Bonne journée à vous.

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |