欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【最新版】从百度api获取经纬度,用pyecharts v1 Geo 在地图上根据经纬度和量值,画出散点图

程序员文章站 2022-07-03 19:50:07
...

纪念三天探索之旅,踩过无数坑,遇上了百度api更新和pyecharts更新,网上大部分案例已无法使用,特此将完整过程文档献上,希望能帮助到挣扎的你。致敬找到我这篇文章还未放弃的你

第一步:从文档中导入数据,通过百度api获取经纬度并存入原文档

百度地图申请** http://lbsyun.baidu.com/apiconsole/key
登录百度账号后——创建应用——浏览器端——按最下方指引填写好,记住生产成的AK
【最新版】从百度api获取经纬度,用pyecharts v1 Geo 在地图上根据经纬度和量值,画出散点图
【不要去网上搜索api入口】,看这里—————————————————————————————————————————————
【最新版】从百度api获取经纬度,用pyecharts v1 Geo 在地图上根据经纬度和量值,画出散点图
【最新版】从百度api获取经纬度,用pyecharts v1 Geo 在地图上根据经纬度和量值,画出散点图

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

写完结果如下:
【最新版】从百度api获取经纬度,用pyecharts v1 Geo 在地图上根据经纬度和量值,画出散点图

第二步:用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直接显示

【最新版】从百度api获取经纬度,用pyecharts v1 Geo 在地图上根据经纬度和量值,画出散点图

结尾:虽然加起来不过50行代码,但是写的每一行都会遇到大大小小的问题,网络经验帖无法一篇概全,可是编程的魅力也在此。

从7月纯小白入门学习python,最最重要的学习的是解决问题的思维和解决问题的乐趣。另这个案例是我真真实实在做的数据分析案例,为了帮助我买房用的,不是test。今天先分享其中一小步,这些点都是有意义的。待我整个案例做完,给大家分享买房决策怎么靠数据分析来辅助【数据分析——最好的房屋中介】