Introduction

  • 이번 튜토리얼에서는 지리 데이터를 조작하는 두가지 방법인 geocoding과 table joins에 대해 배워보도록 하겠다.

Geocoding

  • Geocoding이란 장소의 이름이나 주소를 맵상의 위치로 변경하는 것을 의미한다.
  • 다음의 사진과 같이 location을 설명과 연계 시키는 것을 본 적이 있다면 geocoding을 접해본적 있는 것이다.

사진

  • geocoder를 사용하기 위해서는 다음의 정보만 제공해주면 된다.
  • 이름이나 주소(string), 제공자명
  • 만약 geocoding이 성공적으로 진행되면 2개의 column(geometry, address)을 가진 GeoDataFrame을 제공한다.
result = geocode("The Great Pyramid of Giza", provider="nominatim")
  • 위의 코드와 같이 할 수 있다.
  • 만일 이름의 데이터가 주어진다면 이를 geocode를 이용해서 위치값을 반환해줄 수도 있다.
def my_geocoder(row):
    try:
        point = geocode(row, provider='nominatim').geometry.iloc[0]
        return pd.Series({'Latitude': point.y, 'Longitude': point.x, 'geometry': point})
    except:
        return None

universities[['Latitude', 'Longitude', 'geometry']] = universities.apply(lambda x: my_geocoder(x['Name']), axis=1)

print("{}% of addresses were geocoded!".format(
    (1 - sum(np.isnan(universities["Latitude"])) / len(universities)) * 100))

# Drop universities that were not successfully geocoded
universities = universities.loc[~np.isnan(universities["Latitude"])]
universities = gpd.GeoDataFrame(universities, geometry=universities.geometry)
universities.crs = {'init': 'epsg:4326'}
universities.head()

Table joins

  • 두개의 다른 table을 합치는 방법에 대해서 배워보도록 하겠다.

Attribute join

  • DataFrame에서 사용해봤듯이 pd.DataFrame.join()을 이용해서 데이터를 합칠 수도 있고
  • 하지만 그냥 merge()함수를 사용하는 것도 효과적이다.
  • merge할때 어떤 column을 기준으로 합칠지에 대한 정보를 on에 보내주면 된다.

Spatial join

  • 이 방법은 여러개의 정보중에 원하는 정보와 연관성이 있는 애들만 join하는 방법이다.
  • 예를 들어 둘다 특정 column에 대해서 같은 값을 가지고 있는 애들만 join하는 것이다.
  • 이 방법은 sjoin()을 통해 구현할 수 있다.
# Use spatial join to match universities to countries in Europe
european_universities = gpd.sjoin(universities, europe)

# Investigate the result
print("We located {} universities.".format(len(universities)))
print("Only {} of the universities were located in Europe (in {} different countries).".format(
    len(european_universities), len(european_universities.name.unique())))

We located 90 universities.
Only 84 of the universities were located in Europe (in 15 different countries).