分享

【数具】Python 百度API 画出美美哒热力地图

 学习雪雪 2018-01-10

如今,大数据的重要性不言而喻,让数据说话已经渗透到各个行业,我们的数据分析师们也从单一的数据分析转化为更加重视用户的体验,比如通过数据可视化,将一大堆密密麻麻的数字转成图表形式。这样可以更直观地向用户展示数据之间的联系和变化情况,减少用户的阅读和思考时间,以便很好地做出决策。 


作者 | 王大伟

编辑 | 数小妹


如何让数据化繁为简,直观体现?今天就来和大家一起用Python 百度API 画出美美哒热力地图。


数据准备


在国家统计局网站copy到2015年各城市的房地产开发投资额数据:



把数据保存在本地,存成csv格式


百度API免费申请


打开网址:http://lbsyun.baidu.com/


注册好,按照下图操作:


点击  功能与服务----地图



点击创建应用:



然后自己取个名字,选择浏览器端,白名单输入星号:



点击提交


你就有了一个应用了



城市转换为经纬度


我们打开百度地图的开放平台


http://developer.baidu.com/map/jsdemo.htm#c1_15


在左侧找到添加热力图-----点击运行-----点击显示热力图-----就能看到热力图啦~



这是百度API所能提供的热力图类型


我们注意到所给的这段代码:



我们将您的密钥换成刚才我们申请得到的那串数字


也就是:



然后在本地新建一个.html文件(可以通过创建文本文件,然后将后缀改为.html达到,如果你的文本文件不显示后缀,请百度解决~)


我们将加入了自己申请的密钥的网页代码全部复制下,粘贴到本地创建的 .html 文件中



复制的代码中的示例热力图的位置不是我们想要的


我们想要的是我们的数据生成热力图


打开Python


import json

from urllib.request import urlopen, quote 

import requests,csv 

import pandas as pd #导入这些库后边都要用到 


def getlnglat(address):

    url = 'http://api.map.baidu.com/geocoder/v2/'  

    output = 'json'

    ak = '替换成你申请的密钥!!'

    add = quote(address) #由于本文城市变量为中文,为防止乱码,先用quote进行编码

    uri = url '?' 'address=' add   '&output=' output '&ak=' ak

    req = urlopen(uri)

    res = req.read().decode() #将其他编码的字符串解码成unicode

    temp = json.loads(res) #对json数据进行解析       return temp


file = open(r'E:\房地产开发投资额2015.json','w') #建立json数据文件 

with open(r'E:\房地产开发投资额2015.csv', 'r') as csvfile: #打开csv

    reader = csv.reader(csvfile)

    for line in reader: #读取csv里的数据

        # 忽略第一行

        if reader.line_num == 1: #由于第一行为变量名称,故忽略掉

              continue

              # line是个list,取得所有需要的值

        b = line[0].strip() #将第一列city读取出来并清除不需要字符

        c = line[1].strip()#将第二列price读取出来并清除不需要字符

        lng = getlnglat(b)['result']['location']['lng'] #采用构造的函数来获取经度

        lat = getlnglat(b)['result']['location']['lat'] #获取纬度

        str_temp = '{'lat':' str(lat) ','lng':' str(lng) ','count':' str(c) '},'

        #print(str_temp) #也可以通过打印出来,把数据copy到百度热力地图api的相应位置上

        file.write(str_temp) #写入文档

 file.close() #保存


参考文献:

https://www.jianshu.com/p/773ff5f08a2c


运行完成之后,本地会出现一个json文件



打开可以看到:



是一长串json数据,我们全选这些数据,复制替换掉本地的html文件中的var经纬度部分

原本是这样的:



替换完成后是这样的:

(我是用notepad 以编辑的方式打开的本地html文件)



保存之后,以网页浏览的方式打开本地的html


使用鼠标滚轮放大缩小到可以看见全国视野,然后点击左下角显示热力图即可看到~


你出现的图是这样的:



因为原始数据默认为20和100,只要超过100的值显示都一样,而且没有渐变辐射的效果



可以修改热力点辐射半径(辐射范围大小)和最大值


我们数据的price最大是北京的4177,所以我设置为4000,保存



再次打开操作就能看到美美哒热力图啦~



你可以拿这个方法去做其他热力图啦~比如房价热力图,GDP热力图等等~


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多