Nominatim
을 사용하여 geocoder를 인스턴스화(indtantiation)하기 geocode
를 사용하여 이름이나 주소만 파이썬 문자열로 적용### 1. Geocoder 인스턴스화하기 ###
geolocator = Nominatim(user_agent="kaggle_learn")
### 2. 주소 또는 위치 이름을 적용하여 geocoding을 수행하기 ###
location = geolocator.geocode("Pyramid of Khufu")
### 3. 성공시, geopy.location.Location 개체를 반환한다 ###
print(location.point)
print(location.address)
# kaggle에서는 Khufu의 피라미드를 예시 데이터로 사용
29 58m 44.976s N, 31 8m 3.17625s E
هرم خوفو, شارع ابو الهول السياحي, نزلة البطران, الجيزة, 12125, مصر
from geopy.geocoders import Nominatim
### 1. Geocoder 인스턴스화하기 ###
geolocator = Nominatim(user_agent="kaggle_learn")
📌 Nominatim
Nominatim : 위치 생성에 사용되는 지오코딩 소프트웨어를 의미
### 2. 주소 또는 위치 이름을 적용하여 geocoding을 수행하기 ###
location = geolocator.geocode("Pyramid of Khufu")
### 3. 성공시, geopy.location.Location 개체를 반환한다 ###
print(location.point)
print(location.address)
# kaggle에서는 Khufu의 피라미드를 예시 데이터로 사용
29 58m 44.976s N, 31 8m 3.17625s E
هرم خوفو, شارع ابو الهول السياحي, نزلة البطران, الجيزة, 12125
geopy.location.Location 개체는 Point와 address 속성으로 나뉜다.
point = location.point
print("Latitude:", point.latitude)
print("Longitude:", point.longitude)
Latitude: 29.97916
Longitude: 31.134215625236113
universities = pd.read_csv("../input/geospatial-learn-course-data/top_universities.csv")
universities.head()
def my_geocoder(row):
try:
point = geolocator.geocode(row).point
return pd.Series({'Latitude': point.latitude, 'Longitude': point.longitude})
except:
return None
universities[['Latitude', 'Longitude']] = 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=gpd.points_from_xy(universities.Longitude, universities.Latitude))
universities.crs = {'init': 'epsg:4326'}
universities.head()
91.0% of addresses were geocoded!
# Create a map
m = folium.Map(location=[54, 15], tiles='openstreetmap', zoom_start=2)
# Add points to the map
for idx, row in universities.iterrows():
Marker([row['Latitude'], row['Longitude']], popup=row['Name']).add_to(m)
# Display the map
m
📌 테이블 조인(table joins)
: DBMS에서 두개 이상의 테이블을 결합하여 데이터를 조회하는 방법
- 데이터가 여러 테이블에 분산되어 있을 경우, 통합하여 의미있는 정보를 추출한다.
- SQL에서는 inner join, outer join, Right outer join, Full outer join, cross join, natural join 등을 사용한다.
pd.DataFrame.join()
로 Dataframe들의 정보를 결합📌 속성조인(Attributes join)
: 인덱스에서 값이 일치하도록 데이터를 결합하는 것
gpd.GeoDataFrame.merge()
를 사용하여 속성 조인을 사용. 공간적 조인(Spatial join)과 같은 지리공간 데이터에 특화된 기능을 제공.pd.DataFrame.join()은 일반적인 판다스 데이터 프레임의 조인에 사용, gpd.GeoDataFrame.merge()는 지리공간 데이터를 다루는 GeoDataFrame에 더 적합한 조인 방식
europe_boundaries.head()
europe_stats.head()
# Use an attribute join to merge data about countries in Europe
europe = europe_boundaries.merge(europe_stats, on="name")
europe.head()
📌 공간조인
: geometry 칼럼을 가진 객체들강의 공간적 관계(spatial relationship)을 기반으로 GeoDataFrame을 결합
gpd.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())))
european_universities.head()
We located 91 universities.
Only 87 of the universities were located in Europe (in 14 different countries)
pgd.sjoin()
은 how와 op인수(op statment)를 통해 다양한 유형의 조인을 사용자 지정할 수 있다. Nominatim
kaggle