I am new to the world of Geospatial Analysis!
I am interested in learning about Clustering Algorithms that can be used for Geospatial Data.
For instance, suppose I have:
- A shapefile for all ZIP Codes in California (this contains information on which ZIP codes share borders with other ZIP codes)
- A data frame that contains information on which ZIP Code a person lives in and how many COVID vaccines this person has taken (e.g. John lives in ZIP Code 90211 and has 2 vaccines, Sally also lives in 90211 and has 4 vaccines, James lives in ZIP Code 90212 and has 0 vaccines, etc.).
I would like to run a Clustering Algorithm on this data to find out which groups of ZIP Codes have similar vaccination rates.
In the past, I would have just created variables with Longitude and Latitude belonging to the centroid of each ZIP code, and then run a clustering algorithm like K-Means (https://en.wikipedia.org/wiki/K-means_clustering) on this data ( 3 columns : longitude, latitude, number of vaccine - "n" rows ).
However, I was wondering if there might be a "better" way to go about this task. For example, suppose I want the resulting clusters to physically "touch" each other (left) and not to be "disjoint" (right) and use the "border" information within the shapefile (e.g. treating the shapefile as a network graph):
Are there some specific types of clustering algorithms that are well suited for this kind of problem? The approach that I described can infer these boundaries using long/lat ... but is there some clustering algorithm that can make use of the common boundaries?
Note: Example of Data
names | zip | long | lat | number_of_vaccines |
---|---|---|---|---|
1 alex | 90211 | 118.3842 | 34.0661 | 5 |
2 tim | 90211 | 118.3842 | 34.0661 | 0 |
3 paul | 90212 | 118.4017 | 34.0617 | 1 |
Desired Output:
names | zip | long | lat | number_of_vaccines | cluster |
---|---|---|---|---|---|
1 | alex | 90211 | 118.3842 | 34.0661 | 5 |
2 | tim | 90211 | 118.3842 | 34.0661 | 0 |
3 | paul | 90212 | 118.4017 | 34.0617 | 1 |