📌 GeoPandas
: 지리 데이터를 읽을 때 필요한 라이브러리
import geopandas as gpd
pgd.read_file()
countries = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
cities = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))
countries.tail(3)
# Read in the data
full_data = gpd.read_file("../input/geospatial-learn-course-data/DEC_lands/DEC_lands/DEC_lands.shp")
# View the first five rows of the data
full_data.head()
Geo 데이터를 가공 및 처리하기 위해서는 pandas 사용에 대해 알아야 한다.
데이터 타입
type(full_data)
# geopandas.geodataframe.GeoDataFrame
data = full_data.loc[:, ["CLASS", "COUNTY", "geometry"]].copy()
# How many lands of each type are there?
data.CLASS.value_counts()
WILD FOREST 965
INTENSIVE USE 108
PRIMITIVE 60
WILDERNESS 52
ADMINISTRATIVE 17
UNCLASSIFIED 7
HISTORIC 5
PRIMITIVE BICYCLE CORRIDOR 4
CANOE AREA 1
Name: CLASS, dtype: int64
wild_lands = data.loc[data.CLASS.isin(['WILD FOREST', 'WILDERNESS'])].copy()
wild_lands.head()
wild_lands.plot()
📌 Geometry
: 모든 geoDataFrame(지리정보를 표현하는 다각형, 선, 점)이 포함되어 있는 데이터이다.
# View the first five entries in the "geometry" column
wild_lands.geometry.head()
# Campsites in New York state (Point)
POI_data = gpd.read_file("../input/geospatial-learn-course-data/DEC_pointsinterest/DEC_pointsinterest/Decptsofinterest.shp")
campsites = POI_data.loc[POI_data.ASSET=='PRIMITIVE CAMPSITE'].copy()
# Foot trails in New York state (LineString)
roads_trails = gpd.read_file("../input/geospatial-learn-course-data/DEC_roadstrails/DEC_roadstrails/Decroadstrails.shp")
trails = roads_trails.loc[roads_trails.ASSET=='FOOT TRAIL'].copy()
# County boundaries in New York state (Polygon)
counties = gpd.read_file("../input/geospatial-learn-course-data/NY_county_boundaries/NY_county_boundaries/NY_county_boundaries.shp")
# Define a base map with county boundaries
ax = counties.plot(figsize=(10,10), color='none', edgecolor='gainsboro', zorder=3)
# Add wild lands, campsites, and foot trails to the base map
wild_lands.plot(color='lightgreen', ax=ax)
campsites.plot(color='maroon', markersize=2, ax=ax)
trails.plot(color='black', markersize=1, ax=ax)
지리정보의 속성 ( 아래의 속성값은 Point 데이터에서는 모두 0이다. )
area : 넓이
boundary : 테두리
centroid : 중앙지점
두 Geometry 간의 거리를 계산 해주는 함수 또한 유용하게 사용된다.
from shapely.geometry import Point, Polygon, LineString
northern_asia = countries.loc[countries['name'].isin(['Korea', 'China', 'Japan'])]
base = northern_asia.plot(figsize=(15, 15), color="w", edgecolor="m")
seoul = cities.loc[cities.name == "Seoul", "geometry"].squeeze()
beijing = cities.loc[cities.name == "Beijing", "geometry"].squeeze()
tokyo = cities.loc[cities.name == "Tokyo", "geometry"].squeeze()
line = LineString([beijing, seoul, tokyo])
ax = gpd.GeoSeries([seoul, beijing, tokyo, line]).plot(ax=base, color="k", edgecolor='k', lw=1)
ax.set_title("동북아시아 지도")
ax.set_axis_off()
plt.show()
기본적인 관계연산함수 (출력은 boolean 값)
seoul.within(korea)
contains : 지리적으로 포함하고 있는지 여부
korea.contains(seoul)
intersects : 지리적으로 교차하는지 여부, 두 지리가 경계선만 닿아있어도, True를 반환
china.intersects(korea)
crosses : 지리적으로 교차하는지 여부, intersects와 차이점은 crosses는 내부를 지나가야만 True를 반환한다는 것이다.
line.crosses(korea)
데이터 검색에 사용하기도 한다
countries[countries.crosses(line)]
seoul.distance(beijing)
countries[countries.geometry.distance(seoul) <= seoul.distance(beijing)]
kaggle
geo pandas
지리정보 데이터 처리 - 데이터 사이언스 스쿨