Clusters à partir de données GPS

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

July Elsa
Messages : 4
Enregistré le : 20 Juin 2023, 18:34

Clusters à partir de données GPS

Messagepar July Elsa » 21 Juin 2023, 09:03

Bonjour,

J'aurai besoin d'un coup de main pour analyser des données pour un projet de recherche, mais je débute un peu en R...
J'ai un fichier csv de 2 colonnes : 'latitude' et 'longitude', et 121 lignes. Ces coordonnées sont des relevés GPS d'une balise posée sur le dos d'un oiseau, et j'aimerai déterminer les sites avec le plus de fréquentation. En gros, j'aimerai pouvoir savoir quels sont les 'clusters' de coordonnées, et je définirai qu'un cluster soit plus de 6 points dans un diamètre de 5 mètres.
Dans l'idéal, j'aimerai avoir un numéro d'identification des clusters, le nombre de points GPS au sein de chaque cluster et une coordonnée de référence = le centre de ces cercles de 5m de diamètre.

J'ai arpenté de très nombreux forums, articles et blogs divers, essayé de nombreuses techniques et packages (dbscan, factoextra, rgdal, geosphere, dismo, rgeos...) j'ai abouti à quelques trucs qui marchaient mais ça ne me donnait pas des résultats vraiment logiques ou interprétables...
Il me semble que dbscan est le plus adapté mais je n'arrive pas à lui faire utiliser mes données comme cartographiques et donc que R calcule lui-même le métrage à partir de coordonnées de latitude et de longitude...

Des idées ?

Merci beaucoup !

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Clusters à partir de données GPS

Messagepar Michaël Delorme » 23 Juin 2023, 09:13

Vu tes prérequis, je dirais aussi DBSCAN. À noter aussi cependant pour ce genre d'étude le package {adehabitatHR} qui peut offrir des outils intéressants.

Pour DBSCAN, il faut au préalable convertir les coordonnées dans une projection plane métrique (ex de WGS84 vers Lambert93 si tu es en France).

Code : Tout sélectionner

library(dplyr)
library(sf)
library(dbscan)

set.seed(1234)
df <- data.frame(lon = rnorm(121, 4, 0.0001),
                 lat = rnorm(121, 45, 0.0001)) %>%
  mutate(id = row_number())

carto <- df %>%
  st_as_sf(coords = c("lon", "lat"), crs = "EPSG:4326") %>%
  st_transform("EPSG:2154") %>%
  mutate(x = st_coordinates(.)[, 1],
         y = st_coordinates(.)[, 2])

plot(select(carto, id))

clusters <- carto %>%
  st_drop_geometry() %>%
  select(x, y) %>%
  dbscan(eps = 5, minPts = 6)

df_clusters <- df %>%
  st_as_sf(coords = c("lon", "lat"), crs = "EPSG:4326") %>%
  mutate(cluster = clusters$cluster)

df_clusters %>%
  select(cluster) %>%
  plot()


puis pour avoir les centres et le nombre par cluster :

Code : Tout sélectionner

centres <- df_clusters %>%
  filter(cluster != 0) %>%
  group_by(cluster) %>%
  summarise(nb_points = n()) %>%
  st_centroid()


export pour SIG (QGIS par ex) :

Code : Tout sélectionner

write_sf(df_clusters, "cluster.gpkg", layer = "points")
write_sf(centres, "cluster.gpkg", layer = "centres")


et les enveloppes :

Code : Tout sélectionner

df_clusters %>%
  filter(cluster != 0) %>%
  group_by(cluster) %>%
  summarise() %>%
  st_convex_hull() %>%
  write_sf("cluster.gpkg", layer = "enveloppes")

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Clusters à partir de données GPS

Messagepar Michaël Delorme » 23 Juin 2023, 12:22

Avec {adehabitatHR} pour prendre par exemple 80 % des observations "centrales"

Code : Tout sélectionner

library(adehabitatHR)
library(dplyr)
library(sf)

set.seed(1234)
df <- data.frame(lon = rnorm(121, 4, 0.0001),
                 lat = rnorm(121, 45, 0.0001)) %>%
  mutate(id = row_number(),
         animal_id = "tourterelle_1")

df %>%
  st_as_sf(coords = c("lon", "lat"), crs = "EPSG:4326") %>%
  st_transform("EPSG:2154") %>%
  mutate(x = st_coordinates(.)[, 1],
         y = st_coordinates(.)[, 2]) %>%
  select(animal_id) %>%
  as("Spatial") %>%
  kernelUD() %>%
  getverticeshr(80) %>%
  st_as_sf() %>%
  write_sf("cluster.gpkg", layer = "homerange_80")

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Clusters à partir de données GPS

Messagepar Michaël Delorme » 29 Juin 2023, 08:47

Les gens qui posent une question et ne reviennent jamais, qui sont-ils ? Quels sont leurs réseaux ?
:-/

July Elsa
Messages : 4
Enregistré le : 20 Juin 2023, 18:34

Re: Clusters à partir de données GPS

Messagepar July Elsa » 09 Juil 2023, 13:59

Michaël Delorme a écrit :Les gens qui posent une question et ne reviennent jamais, qui sont-ils ? Quels sont leurs réseaux ?
:-/


Bonjour,

Je m'excuse, je n'ai pas reçu de notification qu'on avait répondu à mon post, j'ai donc cru que je n'avais pas eu de réponses :( je viens seulement de me connecter et d'apercevoir que vous m'avez gentiment proposé une solution.. que je vais essayer de suite ! Merci beaucoup

July Elsa
Messages : 4
Enregistré le : 20 Juin 2023, 18:34

Re: Clusters à partir de données GPS

Messagepar July Elsa » 09 Juil 2023, 15:21

Michaël Delorme a écrit :Vu tes prérequis, je dirais aussi DBSCAN. À noter aussi cependant pour ce genre d'étude le package {adehabitatHR} qui peut offrir des outils intéressants.


Ça marche nickel, merci infiniment ! Et encore désolée pour le délai de réponse...

Je n'ai pas encore essayé avec le package 'adehabitatHR' (petite anecdote : j'étude bien des tourterelles, comme indiqué dans votre script! jolie coïncidence...)

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Clusters à partir de données GPS

Messagepar Michaël Delorme » 10 Juil 2023, 05:37

Merci pour ce retour. Content que ça ait pu aider...
Cordialement


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité