Python获取地理数据 匹配中文城市所属省份

获取地理数据

Fetching geodata with geopy

在Feature Engineering的环节中经常会遇到地理数据的处理。地理数据通常包括地市\省份\经纬度等信息,这些不同level的特征可以被利用在模型训练中。

但是通常我们能拿到的数据只是部分信息,如果想要增加特征维度,Python的geopy是一个获取geographic data很好的package。它内含地区的完整地址和经度纬度,并且支持包括中英文在内的多语言输入。

以下是geopy的基本查询方式:

!pip install geopy
from geopy.geocoders import Nominatim
# initiate nominatim
geolocator = Nominatim(user_agent="aaa515")
# search for location
location = geolocator.geocode("广州市")
print(location.address)
print((location.latitude, location.longitude))
print(location.raw)

>>>广州市, 广东省, China 中国
>>>(23.1301964, 113.2592945)
>>>{'place_id': 235779999, 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright', 'osm_type': 'relation', 'osm_id': 3287346, 'boundingbox': ['22.5176916', '23.9360754', '112.9529252', '114.0500833'], 'lat': '23.1301964', 'lon': '113.2592945', 'display_name': '广州市, 广东省, China 中国', 'class': 'boundary', 'type': 'administrative', 'importance': 0.6885781941264866, 'icon': 'https://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png'}

获取中国城市所属省份

mapping provinces for Chinese cities

当只有城市信息时,我们想得到对应的省份信息,需要用regrex expression将address中包含‘省’的字段提取出来。PS.因为re不能直接匹配中文,所以我们需要利用encode-decode将中文的utf-8编码进行decode后,再与中文地址进行匹配。

'省'.encode('utf-8')
>>>b'\xe7\x9c\x81'

import re
re.findall(b'\w+\xe7\x9c\x81'.decode('utf-8'), '广州市, 广东省, China 中国')
>>>['广东省']

总结

Python geopy能获取完整的地理信息,包括地名,省份,lat, long。
使用Regrex expression匹配中文时需要做一些转换,点击链接可查看现成def function:
中文城市省份匹配 - CityToProvince mapping

感谢阅读!

你可能感兴趣的:(Python获取地理数据 匹配中文城市所属省份)