【最新版】从百度api获取经纬度,用pyecharts v1 Geo 在地图上根据经纬度和量值,画出散点图
程序员文章站
2022-07-03 19:50:07
...
纪念三天探索之旅,踩过无数坑,遇上了百度api更新和pyecharts更新,网上大部分案例已无法使用,特此将完整过程文档献上,希望能帮助到挣扎的你。致敬找到我这篇文章还未放弃的你
第一步:从文档中导入数据,通过百度api获取经纬度并存入原文档
百度地图申请** http://lbsyun.baidu.com/apiconsole/key
登录百度账号后——创建应用——浏览器端——按最下方指引填写好,记住生产成的AK
【不要去网上搜索api入口】,看这里—————————————————————————————————————————————
import requests
import json
import openpyxl
import time
def getlnglat(addr):
url = 'http://api.map.baidu.com/geocoding/v3/?city=广州市&address=%s&output=json&ak=您的ak&callback=showLocation'%(addr)
#print(url)
res = requests.get(url)
#print(res.status_code)
r=res.text
r = r.strip('showLocation&&showLocation(')
r = r.strip(')')
try :
jsonData = json.loads(r)
lng = jsonData['result']['location']['lng']
lat = jsonData['result']['location']['lat']
#time.sleep(0.2)
return(lng,lat)
except :
jsonData = json.loads(r)
return(jsonData['status'],jsonData['message'])
wb = openpyxl.load_workbook('1.xlsx')
ws = wb.get_sheet_by_name('Sheet1')
#从表格里取片段值
lng_sum = []
lat_sum = []
for addr in ws.iter_rows(min_row=2,min_col=2, max_col=2, values_only=True):
lng,lat = getlnglat(addr)
#time.sleep(0.2)
lng_sum.append(lng)
lat_sum.append(lat)
print(addr,lng,lat)
#写入源文件
for i in range(len(lng_sum)):
ws.cell(i+2, 14).value=lng_sum[i]
for i in range(len(lat_sum)):
ws.cell(i+2, 15).value=lat_sum[i]
wb.save('5.xlsx')
这个时候转战 jupyter notebook
写完结果如下:
第二步:用pyecharts画图
pyecharts 安装不多说 pip install pyecharts
安装pyecharts会有两个坑,我爬了4个小时才出来。
第一个pyecharts 要下载v1,一般默认都是v1的,有些网络版本说0.5版本,不要用了,下了0.5会有一个报错还需要安装另一个东东,然后死活下载不下来
第二个坑:V1 版本 from pyecharts.charts import Geo,千万注意,网络上老版本都是from pyecharts import Geo,就这个我来来回回下载删除pyecharts包5遍!!!!不注意呀!!!
from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import GeoType
def geo_base():
g = Geo()
g.add_schema(maptype='广州')
for i in range(len(df2)): #找了八百遍才找到一篇文章关于循环取点的
g.add_coordinate(df2.iloc[i]['garden'],df2.iloc[i]['lng'],df2.iloc[i]['lat'])
data_pair=[list(z) for z in zip(df2.garden, df2.year)] #新版的数值
g.add('geo', data_pair,symbol_size=8)
g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
pieces = [
{'max': 1999, 'label': '2000以下', 'color': '#50A3BA'},
{'min': 1999, 'max': 2004, 'label': '2000-2005', 'color': '#E2C568'},
{'min': 2004, 'max': 2009, 'label': '2005-2010', 'color': '#D94E5D'},
{'min': 2009, 'max': 2014, 'label': '2010-2015', 'color': '#3700A4'},
{'min': 2014, 'max': 2020, 'label': '2015-2020', 'color': '#81AE9F'},
#{'min': 50, 'max': 100, 'label': '50-100', 'color': '#DD0200'},
#{'min': 100, 'max': 200, 'label': '100-200', 'color': '#DD675E'},
#{'min': null, 'label': '200以上', 'color': '#D94E5D'} # 有下限无上限
]
g.set_global_opts(
visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=pieces),
title_opts=opts.TitleOpts(title="广州房龄分布")
)
return g
g = geo_base()
g.render_notebook() #jupyter notebook直接显示
结尾:虽然加起来不过50行代码,但是写的每一行都会遇到大大小小的问题,网络经验帖无法一篇概全,可是编程的魅力也在此。
从7月纯小白入门学习python,最最重要的学习的是解决问题的思维和解决问题的乐趣。另这个案例是我真真实实在做的数据分析案例,为了帮助我买房用的,不是test。今天先分享其中一小步,这些点都是有意义的。待我整个案例做完,给大家分享买房决策怎么靠数据分析来辅助【数据分析——最好的房屋中介】