在工作中,我们偶尔会遇到一些跟地理位置相关的数据。这种数据有时候分析起来会比较麻烦,例如将客户地址信息归纳到省,市,县等,又或者对APP用户的经纬度信息转为可识别的地理信息等。
问题场景:需要对地址信息归纳整合,例如电商客户收货地址信息等
解决办法:通过python的调用百度地图API接口解析数据
步骤1:准备数据
下面是我的数据格式,在我的数据中,地址字段是address,如果你希望简单一些,你可以将你的地址字段改为address,这样你就不用改任何代码了
步骤2:复制代码
你可以直接复制我的代码,在这个代码中,有一个关键key是百度地图的AK值,每日可调用30万次,可以直接用。
代码思路如下:
利用pandas读取excel或者csv数据
定义两个函数(getlnglat,transform),分别是将地址转为经纬度和将经纬度转为区域数据(国家/省份/城市/区县)
将函数返回的值插入到数据中,最好导出成excel或者csv文件
修改代码,第48行和59行是你的文件信息,一定要改成你要处理的文件信息和文件保存信息
import pandasas pd
import json
import requests
from urllib.requestimport urlopen, quote
#定义变量
url ='http://api.map.baidu.com/geocoder/v2/'
output ='json'
ak ='2nak0s2E6Dn1yXwocutHf3DuWhWsVDLQ'
def transform(i,j):#传入经纬度参数
lat=str(i)
log=str(j)
x=lat+','+log#组合经纬度
r = requests.get(url=url, params={'location':x,'ak':ak,'output':output})#请求
result = r.json()
try:
country= result['result']['addressComponent']['country']
province=result['result']['addressComponent']['province']
city = result['result']['addressComponent']['city']
district=result['result']['addressComponent']['district']
except:
country='null'
province ='null'
city ='null'
district ='null'
return country,province,city,district
def getlnglat(address):
adduser_value=address[:49]#百度地图最大地址为50位
address = quote(adduser_value)# 由于本文地址变量为中文,为防止乱码,先用quote进行编码
uri = url +'?' +'address=' + address +'&output=' + output +'&ak=' + ak#组合请求
req = urlopen(uri)
res = req.read().decode()
temp = json.loads(res)
#报错处理
try:
lat = temp['result']['location']['lat']
lng = temp['result']['location']['lng']
level=temp['result']['level']
except:
lat ='null'
lng ='null'
level='null'
country, province, city, district = transform(lat,lng)
return lat, lng,level,country, province, city, district
file="C:\\data\\in\\原始地址.xlsx" #这里是的你的原始文件信息,一定要记得改
data=pd.read_excel(file)
for i,rin data.iterrows():
lat,lng,level,country, province, city, district=getlnglat(r['address'])
data.loc[i, "lat"] = lat
data.loc[i, "lng"] = lng
data.loc[i, "level"] = level
data.loc[i,"country"]=country
data.loc[i, "province"] = province
data.loc[i, "city"] = city
data.loc[i, "district"] = district
out_file="C:\\data\\out\\处理地址信息.xlsx" #这里是的你的输出文件信息,一定要记得改
data.to_excel(out_file,index=None)
步骤3:执行代码
改完代码就可以直接执行,建议通过Anaconda+Pycharm(最好是anaconda,里面内置了众多包,如果没有的话,可以用pip install pandas 来安装包)
结果如下
通过这个代码你可以看到你的客户所处位置,以及客户的分布情况,还可以了解到客户群体的属性。
下面做了两个简单的可视化分析
客户在上海市的密度分布情况
客户群体情况












网友评论