From 808ad5614d519076ee3b2afeb06dd0def8a940b0 Mon Sep 17 00:00:00 2001 From: Anna Brazdova <131773776+Kryndlea@users.noreply.github.com> Date: Wed, 10 Apr 2024 17:20:05 +0200 Subject: [PATCH 1/5] added examples to from_dicts and build_knn --- libpysal/graph/base.py | 100 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/libpysal/graph/base.py b/libpysal/graph/base.py index abbd0033d..6298d54a7 100644 --- a/libpysal/graph/base.py +++ b/libpysal/graph/base.py @@ -336,6 +336,59 @@ def from_dicts(cls, neighbors, weights=None): ------- Graph libpysal.graph.Graph based on dictionaries + + Examples + -------- + >>> neighbors = { + ... 'Africa': ['Asia'], + ... 'Asia': ['Africa', 'Europe'], + ... 'Australia': [], + ... 'Europe': ['Asia'], + ... 'North America': ['South America'], + ... 'South America': ['North America'], + ... } + >>> connectivity = graph.Graph.from_dicts(neighbors) + >>> connectivity.adjacency + focal neighbor + Africa Asia 1 + Asia Africa 1 + Europe 1 + Australia Australia 0 + Europe Asia 1 + North America South America 1 + South America North America 1 + Name: weight, dtype: float64 + + You can also specify weights (for example based + on the length of the shared border): + + >>> neighbors = { + ... 'Africa': ['Asia'], + ... 'Asia': ['Africa', 'Europe'], + ... 'Australia': [], + ... 'Europe': ['Asia'], + ... 'North America': ['South America'], + ... 'South America': ['North America'], + ... } + >>> weights = { + ... 'Africa': [1], + ... 'Asia': [0.2, 0.8], + ... 'Australia': [], + ... 'Europe': [1], + ... 'North America': [1], + ... 'South America': [1], + ... } + >>> connectivity = graph.Graph.from_dicts(neighbors, weights) + >>> connectivity.adjacency + focal neighbor + Africa Asia 1.0 + Asia Africa 0.2 + Europe 0.8 + Australia Australia 0.0 + Europe Asia 1.0 + North America South America 1.0 + South America North America 1.0 + Name: weight, dtype: float64 """ head, tail, weight = _neighbor_dict_to_edges(neighbors, weights=weights) return cls.from_arrays(head, tail, weight) @@ -685,6 +738,53 @@ def build_knn(cls, data, k, metric="euclidean", p=2, coincident="raise"): ------- Graph libpysal.graph.Graph encoding KNN weights + + Examples + -------- + >>> import geopandas as gpd + >>> from geodatasets import get_path + >>> nybb = gpd.read_file(get_path('nybb')).set_index('BoroName') + >>> nybb + BoroCode ... geometry + BoroName ... + + Staten Island 5 ... MULTIPOLYGON (((970217.022 145643.332, 970227.... + Queens 4 ... MULTIPOLYGON (((1029606.077 156073.814, 102957... + Brooklyn 3 ... MULTIPOLYGON (((1021176.479 151374.797, 102100... + Manhattan 1 ... MULTIPOLYGON (((981219.056 188655.316, 980940.... + Bronx 2 ... MULTIPOLYGON (((1012821.806 229228.265, 101278... + + >>> knn1 = graph.Graph.build_knn(nybb.centroid, k=1) + >>> knn1.adjacency + focal neighbor + Staten Island Brooklyn 1 + Queens Brooklyn 1 + Brooklyn Queens 1 + Manhattan Bronx 1 + Bronx Manhattan 1 + Name: weight, dtype: int32 + + Example with different number of neighbors. + + >>> knn3 = graph.Graph.build_knn(nybb.centroid, k=3) + >>> knn3.adjacency + focal neighbor + Staten Island Queens 1 + Brooklyn 1 + Manhattan 1 + Queens Brooklyn 1 + Manhattan 1 + Bronx 1 + Brooklyn Staten Island 1 + Queens 1 + Manhattan 1 + Manhattan Queens 1 + Brooklyn 1 + Bronx 1 + Bronx Queens 1 + Brooklyn 1 + Manhattan 1 + Name: weight, dtype: int32 """ ids = _evaluate_index(data) From 743251e49138eaa010f19ed183b78c0e3333bcb7 Mon Sep 17 00:00:00 2001 From: Anna Brazdova <131773776+Kryndlea@users.noreply.github.com> Date: Thu, 11 Apr 2024 12:54:42 +0200 Subject: [PATCH 2/5] Update libpysal/graph/base.py Co-authored-by: Martin Fleischmann --- libpysal/graph/base.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/libpysal/graph/base.py b/libpysal/graph/base.py index 6298d54a7..4511bfb99 100644 --- a/libpysal/graph/base.py +++ b/libpysal/graph/base.py @@ -362,14 +362,6 @@ def from_dicts(cls, neighbors, weights=None): You can also specify weights (for example based on the length of the shared border): - >>> neighbors = { - ... 'Africa': ['Asia'], - ... 'Asia': ['Africa', 'Europe'], - ... 'Australia': [], - ... 'Europe': ['Asia'], - ... 'North America': ['South America'], - ... 'South America': ['North America'], - ... } >>> weights = { ... 'Africa': [1], ... 'Asia': [0.2, 0.8], From c452d261d2d9e428c0ef26a92401410c43127dc7 Mon Sep 17 00:00:00 2001 From: Anna Brazdova <131773776+Kryndlea@users.noreply.github.com> Date: Thu, 11 Apr 2024 12:54:50 +0200 Subject: [PATCH 3/5] Update libpysal/graph/base.py Co-authored-by: Martin Fleischmann --- libpysal/graph/base.py | 1 - 1 file changed, 1 deletion(-) diff --git a/libpysal/graph/base.py b/libpysal/graph/base.py index 4511bfb99..7fea8e3a6 100644 --- a/libpysal/graph/base.py +++ b/libpysal/graph/base.py @@ -739,7 +739,6 @@ def build_knn(cls, data, k, metric="euclidean", p=2, coincident="raise"): >>> nybb BoroCode ... geometry BoroName ... - Staten Island 5 ... MULTIPOLYGON (((970217.022 145643.332, 970227.... Queens 4 ... MULTIPOLYGON (((1029606.077 156073.814, 102957... Brooklyn 3 ... MULTIPOLYGON (((1021176.479 151374.797, 102100... From 4de2d52bec40a26eb11fc4e239f8e9c892f3a84c Mon Sep 17 00:00:00 2001 From: Anna Brazdova <131773776+Kryndlea@users.noreply.github.com> Date: Tue, 16 Apr 2024 13:36:14 +0200 Subject: [PATCH 4/5] changed knn1 and order --- libpysal/graph/base.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/libpysal/graph/base.py b/libpysal/graph/base.py index 7fea8e3a6..1727ffcd7 100644 --- a/libpysal/graph/base.py +++ b/libpysal/graph/base.py @@ -745,18 +745,6 @@ def build_knn(cls, data, k, metric="euclidean", p=2, coincident="raise"): Manhattan 1 ... MULTIPOLYGON (((981219.056 188655.316, 980940.... Bronx 2 ... MULTIPOLYGON (((1012821.806 229228.265, 101278... - >>> knn1 = graph.Graph.build_knn(nybb.centroid, k=1) - >>> knn1.adjacency - focal neighbor - Staten Island Brooklyn 1 - Queens Brooklyn 1 - Brooklyn Queens 1 - Manhattan Bronx 1 - Bronx Manhattan 1 - Name: weight, dtype: int32 - - Example with different number of neighbors. - >>> knn3 = graph.Graph.build_knn(nybb.centroid, k=3) >>> knn3.adjacency focal neighbor @@ -776,6 +764,19 @@ def build_knn(cls, data, k, metric="euclidean", p=2, coincident="raise"): Brooklyn 1 Manhattan 1 Name: weight, dtype: int32 + + Specifying k=1 identifies the nearest neighbor + (note that this can be asymmetrical): + + >>> knn1 = graph.Graph.build_knn(nybb.centroid, k=1) + >>> knn1.adjacency + focal neighbor + Staten Island Brooklyn 1 + Queens Brooklyn 1 + Brooklyn Queens 1 + Manhattan Bronx 1 + Bronx Manhattan 1 + Name: weight, dtype: int32 """ ids = _evaluate_index(data) From 517b242f7c09a09a9c89fd723a5802e273c360f0 Mon Sep 17 00:00:00 2001 From: Anna Brazdova <131773776+Kryndlea@users.noreply.github.com> Date: Tue, 16 Apr 2024 13:37:35 +0200 Subject: [PATCH 5/5] deleted a space --- libpysal/graph/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libpysal/graph/base.py b/libpysal/graph/base.py index 1727ffcd7..bfdc070ed 100644 --- a/libpysal/graph/base.py +++ b/libpysal/graph/base.py @@ -765,7 +765,7 @@ def build_knn(cls, data, k, metric="euclidean", p=2, coincident="raise"): Manhattan 1 Name: weight, dtype: int32 - Specifying k=1 identifies the nearest neighbor + Specifying k=1 identifies the nearest neighbor (note that this can be asymmetrical): >>> knn1 = graph.Graph.build_knn(nybb.centroid, k=1)