空間連接

在 Python 視覺化地理空間資料

Mary van Valkenburg

Data Science Program Manager, Nashville Software School

市議會選區與學區

35 個市議會選區的圖

9 個學區的圖

在 Python 視覺化地理空間資料

.sjoin() 的 predicate 參數

import geopandas as gpd

gpd.sjoin(blue_region_gdf, black_point_gdf, predicate = <how to build>)

predicate 可為 intersectscontainswithin

在 Python 視覺化地理空間資料

使用 .sjoin()

藍色區域與黑色點的圖

在 Python 視覺化地理空間資料

predicate = 'intersects'

gpd.sjoin(blue_region_gdf, black_point_gdf, predicate = 'intersects')

淺藍多邊形與黑色點

在 Python 視覺化地理空間資料

predicate = 'contains'

gpd.sjoin(blue_region_gdf, black_point_gdf, predicate = 'contains')

淺藍多邊形與黑色點

在 Python 視覺化地理空間資料

predicate = 'within'

gpd.sjoin(black_point_gdf, blue_region_gdf, predicate = 'within')

淺藍多邊形與黑色點

在 Python 視覺化地理空間資料

.sjoin() 的 predicate 參數-within

# 找出位於學區內的市議會選區

within_gdf = gpd.sjoin(council_districts, school_districts, predicate = 'within')

print('council districts within school districts: ', within_gdf.shape[0])
council districts within school districts:  11
在 Python 視覺化地理空間資料

.sjoin() 的 predicate 參數-contains

# 找出包含市議會選區的學區

contains_gdf = pd.sjoin(school_districts, council_districts, predicate = 'contains')

print('school districts contain council districts: ', contains_gdf.shape[0])
school districts contain council districts:  11
在 Python 視覺化地理空間資料

.sjoin() 的 predicate 參數-intersects

# 找出與學區相交的市議會選區

intersect_gdf = gpd.sjoin(council_districts, school_districts, predicate = 'intersects')

print('council districts intersect school districts: ', intersect.shape[0])
council districts intersect school districts:  100
在 Python 視覺化地理空間資料

空間連接後的 GeoDataFrame 欄位

within_gdf = gpd.sjoin(council_districts, school_districts, predicate = 'within')
within_gdf.head()
  first_name_left  last_name_left district_left  index_right    
0 Nick             Leonardo            1              0              
1 DeCosta          Hastings            2              0 
2 Nancy            VanReece            8              1    
3 Bill             Pridemore           9              1    
9 Doug             Pardue             10              1    
在 Python 視覺化地理空間資料
# 依學區彙總市議會選區-將 district_left 與 district_right 重新命名
within_gdf.district_left = council_district
within_gdf.district_right = school_district
within_gdf[['council_district', 'school_district']
          ].groupby('school_district'
                   ).agg('count'
                        ).sort_values('council_district', ascending = False)
                   council_district 
school_district    
       3                   3
       1                   2
       9                   2
       2                   1
       5                   1
       6                   1
       8                   1
在 Python 視覺化地理空間資料

一起來練習吧!

在 Python 視覺化地理空間資料

Preparing Video For Download...