在很多数据处理任务、机器学习比赛中,数据集常常含有经纬度数据。虽然经纬度是连续变量很好处理,但是经纬度的上升、下降和数据逻辑的关系并不是线性的,很多时候我们转化成城市、省份等类别信息能够进一步探究数据的分布。
mapping to city有很多方法,常用的一种是用google map的API,返回text型的结果(这里说text型不太严谨)。
如果只是查询一次地址,可以在python里,调用urllib包,直接使用google map的url,load json等步骤不再详细描述,因为这是一个大坑。因为直接调用google map url而没有验证(credentials)的话,google map 会查封这个api,开始时候允许几次,如果调用多了就一次也不允许了。
Anyway,重点是要有一个key。步骤如下:
2选择map service,提示建立project名字,然后进入project 页面,左边第三行有个credentials,见下图。点击后,根据提示生成一个key,复制这个key
3在python里import google map所需要的包,然后用你的key建立一个接口,然后输入一系列经纬度数据即可。代码如下
import googlemaps
def getplace(latlist, longlist):#经纬度的list
townlist=[]
dic=dict(zip(latlist,longlist))
gmaps = googlemaps.Client(key='你的key粘贴在这')
for lat,lon in dic.items():
result = gmaps.reverse_geocode((lat, lon))
components = result[0]['address_components']
country = town = None
for c in components:
if "country" in c['types']:
country = c['long_name']
if "locality" in c['types']:
town=c['long_name']
townlist.append(town)
else:
townlist.append(None)
print(town)
return townlist
上边的代码中,国家被注释掉了。可以用一对经纬度生成一个result,然后看一下result的内容,有街道号、区、市等选项,自取所需。