利用百度地图API绘制微信好友分布热力图

利用百度地图API绘制微信好友分布热力图

本文是使用Python获取微信好友信息并保存的续篇,上次我们已经使用Python的itchat库获取到了微信好友信息,这次介绍如何利用百度地图API绘制微信好友分布热力图。希望能通过这种有趣的实战案例引起大家学习Python的兴趣,更多的应用在日常的工作中,提高工作效率。

今天的知识点主要涉及两方面:

  • Python
    • requests库
    • csv库
  • 百度地图开放平台
    • 地理编码API
    • JavaScript API——热力图

0、编程思路

(1)安装Python库

(2)使用Excel的透视表功能统计微信好友信息的Excel文件中好友的城市分布及人数,保存到csv文件中

(3)注册/登录百度地图开放平台账号

(4)在百度地图开放平台创建服务端应用

(5)使用Python的csv库读取csv文件,循环每一个城市,利用百度地图的地理编码API获取每个城市的对应坐标点(经纬度),保存为json文件

(6)在百度地图开放平台创建浏览器端应用

(7)将json文件中的城市坐标及人数信息添加入JavaScript API中,在线逐步调试显示参数

(8)保存为html文件,热力图完成

1、安装Python库

csv库是Python标准库,在安装Python的时候都是已经默认安装好的,所以我们只需要额外安装requests库即可。requests是一个Python第三方库,在处理URL资源的时候特别方便。

如果安装了Anaconda,requests就已经可用了。否则,需要在cmd命令行下通过pip安装:

C:\Users\F_numen> pip install requests

2、整理微信好友信息的城市分布及人数

(1)全选Excel文件中好友信息,点击“插入>数据透视表”,点击“确定”,跳转至新建的数据透视表sheet页签。

(2)根据透视表字段中的“城市”,进行统计。

(3)将上图中城市统计信息去掉国外及空白,保存至csv文件中。

文件名为“微信好友city-20200319.csv”,内容如下:

3、注册百度地图开放平台账号

如果已经有百度账号,则直接打开百度地图开放平台网站,使用百度账号即可登录。如果没有百度账号,则需要根据提示信息注册账号后登录。

4、在百度地图开放平台创建服务端应用

我们先查看下地理编码API的服务说明文档

从下图的文档说明中我们可以看到请求参数中必选参数有2个,地址和AK,地址我们已经在上一步中整理好了,AK参数的话就需要我们自己创建应用来获取了。

点击右上角的“控制台”,进入控制台面板,如下图。

依次点击“应用管理>我的应用>创建应用”,进入创建应用界面,如下图。

设置应用名称、选择应用类型为“服务端”,IP白名单设置为“0.0.0.0/0”,其余保持默认即可,点击下方“提交”,如下图。

取得访问应用AK,如下图:

5、每个城市的对应坐标点(经纬度)

获取坐标的方法在上一步查看对应服务说明文档的时候已经知道了,但是获取之后需要保存成什么格式的呢?接下来我们查看下百度地图开放平台的另外一个服务——“JavaScript API”,在这个服务中包含了热力图生成方式的Demo示例。

首先进入“JavaScript API”的开发文档页面,如下图:

进入文档后,可查看到“示例DEMO”,点击进入,如下图:

在左侧点击“覆盖物示例>添加热力图”,进入热力图编辑页面,如下图,主要包含“源代码编辑器”和对应生成的热力图。

在上图官方示例中,我们可以看到所需的数据格式如下:

    {"lng":116.416244,"lat":39.920215,"count":91},
    {"lng":116.41929,"lat":39.915908,"count":54},
    {"lng":116.422116,"lat":39.919658,"count":21},
    {"lng":116.4183,"lat":39.925015,"count":15},
    {"lng":116.421969,"lat":39.913527,"count":3},
    {"lng":116.422936,"lat":39.921854,"count":24},
    {"lng":116.41905,"lat":39.929217,"count":12},
    {"lng":116.424579,"lat":39.914987,"count":57},
    {"lng":116.42076,"lat":39.915251,"count":70},
    {"lng":116.425867,"lat":39.918989,"count":8}

确定格式后,使用Python获取信息并格式化保存,代码如下:

import csv
import requests


# 创建获取地址对应坐标的函数
def getlnglat(address):

    # 根据百度地图应用中的ak参数填写
    ak = '你申请的ak秘钥'

    """
    根据服务说明文档生成对应的url,这里将文档中的“&callback=showLocation”参数删掉了,
    加上会导致返回的json参数类型不正确,导致无法正确读取
    """
    url = 'http://api.map.baidu.com/geocoding/v3/?address={0}&output=json&ak={1}'.format(address, ak)

    # 使用GET请求获取对应坐标
    req = requests.get(url)

    # 返回地址json格式的对应坐标
    return req.json()

# 创建'point.json'文件,用于保存热力图所需的数据信息
with open('point.json','w') as file:

    # 只读形式读取微信好友城市信息的csv文件
    with open('微信好友city-20200319.csv','r', encoding='UTF-8-sig') as csvfile:
        # 创建csv对象
        reader = csv.reader(csvfile)

        # 循环读取csv文件中的每一行,line为列表格式
        for line in reader:
            # 提取城市和数量
            city = line[0]
            num = line[1]

            # 获取城市对应的坐标
            result = getlnglat(city)

            # 提取坐标中的经纬度
            lng = result['result']['location']['lng']
            lat = result['result']['location']['lat']

            # 格式化数据信息
            point = '{"lat":%s,"lng":%s,"count":%s},'%(lat, lng, str(num))

            # 写入'point.txt'文件中
            file.write(point)

这里有个问题,最后生成的point.json文件的最后一个字符是“,”,手动删除即可,最后生成的内容如下图:

6、在百度地图开放平台创建浏览器端应用

在“JavaScript API”的开发文档中,如下图,我们可以看到同样是需要AK秘钥,但是与之前的秘钥类型不同,这里需要的是应用类型为“浏览器端”的应用秘钥。

与前面创建服务端应用类似,这里我们创建浏览器端应用,如下图,设置应用名称、选择应用类型为“浏览器端”,Referer白名单设置为“*”,其余保持默认即可,点击下方“提交”,

取得访问应用AK:

7、调试JavaScript API热力图参数

我们回到JavaScript API的热力图编辑页面,在源代码编辑器中,编辑参数。

(1)将“var points =[];”中括号包含的数据信息替换为txt中生成的信息,注意末尾的“];”不要替换。

(2)由于百度地图JavaScript API热力图默认的是以天安门为中心的北京区域地图,而我们的数据是全国性的,所以这里还需要对热力图中“设置中心点坐标和地图级别”的部分进行修改,如下图,具体设置可以参考百度地图生成器api中:http://api.map.baidu.com/lbsapi/creatmap/,自己可以去调试出合适的中心点与地图级别。

(3)由于我们的大部分数据(也就是point里的count)基本都在个位数(默认最大为100),还需要对热点图代码中的点最大值进行设定(这里设为140)。同时默认辐射范围为20,这里为了明显一些可以将范围调大,如下图:

(4)默认热力图处于关闭状态,需要在web页面点击“显示热力图”按钮才会显示,这里我们可以修改默认状态为显示。

调整参数后,点击源代码编辑器上方的“运行”按钮,可在右侧看到变化,这样基本就达到目的了。

8、保存为html文件,完成热力图

新建.html文件,使用文本打开,将源代码编辑器中的内容复制粘贴过去,修改如下图所示部分后保存。

9、最终效果图


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 xumeng32@126.com

文章标题:利用百度地图API绘制微信好友分布热力图

文章字数:2.2k

本文作者:F_numen

发布时间:2020-04-05, 14:58:20

最后更新:2020-04-05, 21:06:57

原始链接:https://netheroone.cn/archives/ad4b780c.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
/*baidu统计*/