https://glennprays.com/blog/k-means-clustering