From e44818a6fcab62ae9741f844e26463f84a5581d9 Mon Sep 17 00:00:00 2001 From: JP Swinski Date: Fri, 23 Dec 2022 16:03:14 +0000 Subject: [PATCH] placed sklearn import in a try block --- examples/arcticdem.ipynb | 2 +- sliderule/icesat2.py | 42 +++++++++++++++++++++++++--------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/examples/arcticdem.ipynb b/examples/arcticdem.ipynb index d0f6a4c..a5c1aed 100644 --- a/examples/arcticdem.ipynb +++ b/examples/arcticdem.ipynb @@ -20,7 +20,7 @@ "metadata": {}, "outputs": [], "source": [ - "icesat2.init(\"localhost\", verbose=True, organization=None)" + "icesat2.init(\"slideruleearth.io\", verbose=True)" ] }, { diff --git a/sliderule/icesat2.py b/sliderule/icesat2.py index 3b0cd84..4dcf17d 100644 --- a/sliderule/icesat2.py +++ b/sliderule/icesat2.py @@ -41,7 +41,6 @@ import geopandas from shapely.geometry.multipolygon import MultiPolygon from shapely.geometry import Polygon -from sklearn.cluster import KMeans import sliderule ############################################################################### @@ -51,6 +50,14 @@ # create logger logger = logging.getLogger(__name__) +# import cluster support +clustering_enabled = False +try: + from sklearn.cluster import KMeans + clustering_enabled = True +except: + logger.warning("Unable to import sklearn... clustering support disabled") + # profiling times for each major function profiles = {} @@ -1327,22 +1334,25 @@ def toregion(source, tolerance=0.0, cellsize=0.01, n_clusters=1): # generate clusters clusters = [] if n_clusters > 1: - # pull out centroids of each geometry object - if "CenLon" in gdf and "CenLat" in gdf: - X = numpy.column_stack((gdf["CenLon"], gdf["CenLat"])) + if clustering_enabled: + # pull out centroids of each geometry object + if "CenLon" in gdf and "CenLat" in gdf: + X = numpy.column_stack((gdf["CenLon"], gdf["CenLat"])) + else: + s = gdf.centroid + X = numpy.column_stack((s.x, s.y)) + # run k means clustering algorithm against polygons in gdf + kmeans = KMeans(n_clusters=n_clusters, init='k-means++', random_state=5, max_iter=400) + y_kmeans = kmeans.fit_predict(X) + k = geopandas.pd.DataFrame(y_kmeans, columns=['cluster']) + gdf = gdf.join(k) + # build polygon for each cluster + for n in range(n_clusters): + c_gdf = gdf[gdf["cluster"] == n] + c_poly = __gdf2poly(c_gdf) + clusters.append(c_poly) else: - s = gdf.centroid - X = numpy.column_stack((s.x, s.y)) - # run k means clustering algorithm against polygons in gdf - kmeans = KMeans(n_clusters=n_clusters, init='k-means++', random_state=5, max_iter=400) - y_kmeans = kmeans.fit_predict(X) - k = geopandas.pd.DataFrame(y_kmeans, columns=['cluster']) - gdf = gdf.join(k) - # build polygon for each cluster - for n in range(n_clusters): - c_gdf = gdf[gdf["cluster"] == n] - c_poly = __gdf2poly(c_gdf) - clusters.append(c_poly) + raise sliderule.FatalError("Clustering support not enabled; unable to import sklearn package") # update timing profiles profiles[toregion.__name__] = time.perf_counter() - tstart