Using dbscan with tidyverse

Michael Hahsler

The dbscan package provides tidy(), augment(), and glance() methods for its clustering algorithms, making them easy to use with tidyverse, ggplot2, and tidymodels.

Load the packages and prepare the numeric variables from the iris data:

library(dbscan)
library(tidyverse)

x <- iris[, 1:4]
db <- x %>% dbscan(eps = .42, minPts = 5)

Get cluster statistics as a tibble:

tidy(db)
#> # A tibble: 4 × 3
#>   cluster  size noise
#>   <fct>   <int> <lgl>
#> 1 0          29 TRUE 
#> 2 1          48 FALSE
#> 3 2          37 FALSE
#> 4 3          36 FALSE

Visualize the clustering with ggplot2, using an x for noise points:

augment(db, x) %>%
  ggplot(aes(x = Petal.Length, y = Petal.Width)) +
  geom_point(aes(color = .cluster, shape = noise)) +
  scale_shape_manual(values = c(19, 4))

DBSCAN clusters in the iris data