使用Python中的folium包创建热力密度图

最近探索出来一个在Python中创建热力图非常高效的方法,使用folium包来创建热力图,实际效果非常赞,过程简单,代码量少。

folium包基于leaflet在线地图库封装,在R语言中leaflet的接口已经非常完善,如果你对R语言中的leaflet包api接口感兴趣,可以参考这几篇文章。

leaflet地图:

动态地理信息可视化——leaflet在线地图简介

动态地理信息可视化——散点地图系列

动态地理信息可视化——leaflet构造路径图

动态地理信息可视化——leaflet填充地图

Leaflet在线地图进阶宝典——json素材操纵与图层面板控制

leaflet在线地图进阶宝典之——高级辅助特性

leaflet在线地图进阶宝典——高级交互特性

leaflet的小搭档leaflet.minicharts来了,从此动态地图又多了一些乐趣~~~

folium包支持多种类型的空间可视化形式,今天这一篇仅就其中的热力密度图进行分享。

首先通过一个小脚本抓取以下几个城市的经纬度

import folium
import  time
import requests
from urllib.request import quote
import numpy as np
import pandas as pd
import seaborn as sns
import webbrowser
from folium.plugins import HeatMap
address = ['北京','天津','石家庄','太原','呼和浩特','沈阳','大连','长春','哈尔滨','上海','南京','杭州','宁波','合肥','福州','厦门','南昌','济南','青岛','郑州','武汉','长沙','广州','深圳','南宁','海口','重庆','成都','贵阳','昆明','拉萨','西安','兰州','西宁','银川','乌鲁木齐']

这段小脚本用于获取各个城市的经纬度地址:

def getid(dizhi):
    url = "http://api.map.baidu.com/geocoder/v2/"
    header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'}
    payload = {
        'output':'json',
        'ak':'X8zlxPUdSe2weshrZ1WqnWxb43cfBI2N'
        }
    addinfo = []
    for i in dizhi:
        payload['address'] = i
        try:
            content =  requests.get(url,params=payload,headers=header).json()
            addinfo.append(content['result']['location'])
            print("正在获取{}的地址!".format(i))        
        except:
            print("地址{}获取失败,请稍后重试!".format(i))    
            pass
        time.sleep(.5)
    print("所有地址均已获取完毕!!!")
    return(addinfo)
    
if __name__ == "__main__":    
    #计时开始:
    t0 = time.time()
    myaddress = getid(address)
    t1 = time.time()
    total = t1 - t0
    print("消耗时间:{}".format(total))

创建基于folium热力图数据结构的数据对象:

lon = np.array([i["lng"] for i in myaddress],dtype=float)
lat = np.array([i["lat"] for i in myaddress],dtype=float)
scale = np.random.randint(100,500,len(address))
data1 = [[lat[i],lon[i],scale[i]] for i in range(len(address))]

输入热力图数据源,并可视化输出

map_osm = folium.Map(location=[35,110],zoom_start=5)
HeatMap(data1).add_to(map_osm) 
file_path = r"D:/Python/Image/People.html"map_osm.save(file_path)
webbrowser.open(file_path)

以上数据是虚构的,整体效果也没有任何意义,接下来尝试着对全球城市发展报告中中国各个城市的gdp数据进行热力图展示。

posi = pd.read_excel("D:/Python/File/Cities2015.xlsx")
posi = posi.dropna()
lat = np.array(posi["lat"][0:len(posi)])
lon = np.array(posi["lon"][0:len(posi)])
pop = np.array(posi["pop"][0:len(posi)],dtype=float)
gdp = np.array(posi["GDP"][0:len(posi)],dtype=float)
data1 = [[lat[i],lon[i],pop[i]] for i in range(len(posi))]
map_osm = folium.Map(location=[35,110],zoom_start=5)
HeatMap(data1).add_to(map_osm) 
file_path = r"D:/Python/Image/People.html"map_osm.save(file_path)   #保存本地
webbrowser.open(file_path) #在本地浏览器打开

是不是效果看起来很良心呀,而且整体的代码量和过程都无比简单,快学起来吧!

数据源:https://github.com/ljtyduyu/DataWarehouse/tree/master/File

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2018-06-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java学习

逻辑思维训练第1题

做我们这一行少不了的就是逻辑思维!为了锻炼大家的逻辑思维!我会定期出逻辑训练题让大家做,来提高大家的逻辑思维!希望大家踊跃参加! 1,魔方(初级) 下图是一个魔...

31360
来自专栏Java帮帮-微信公众号-技术文章全总结

Java案例-俄罗斯方块/蜘蛛纸牌

《俄罗斯方块》(Tetris, 俄文:Тетрис)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。 该游戏曾经被多家公司代理过。经过多轮诉...

45270
来自专栏Jerry的SAP技术分享

我用ABAP做过的那些无聊的事情

Jerry的成都同事李贝宁(Li Ben), 《SAP成都研究院李三郎:SCP Application Router简介》的作者,有一次11月份的时候和Jerr...

17220
来自专栏即时通讯技术

调皮的程序员:Linux之父雕刻在Linux内核中的故事

因为LINUX操作系统的流行,Linus 已经成为地球人都知道的名人。虽然大家可能都听过钱钟书先生的名言:“假如你吃个鸡蛋觉得味道不错,又何必认识那个下蛋的母鸡...

17940
来自专栏FreeBuf

极客DIY:教你做一个简单的“太阳能”移动电源

在这篇分享中,我将向大家一步一步的展示如何手工制作一个简单的太阳能移动电源。同时因为我个人的喜好,漂亮且艺术感十足的木质外在的制作过程也会包含其中。 类似的分享...

21590
来自专栏大数据挖掘DT机器学习

Python爬取链家网数据:新房楼盘价格分析

本文将详细讲解利用python爬虫收集了链家网800多条公开数据并作简单分析。数据真实性有待考查,本文仅作为数据分析入门者参考。 安装环境 Window 10 ...

53550
来自专栏木子昭的博客

Django网页模板的继承include与复用extends

Django使用网页模板的方式分为两种, 一是建立代码块, 在新的页面导入代码块, 关键词为include 二是建立模板,新的页面在模板基础上扩充, 关键词为e...

20910
来自专栏睿哥杂货铺

我的2017年度盘点

https://www.gitbook.com/book/riboseyim/linux-perf-master/details

22480
来自专栏针针小站

【System】Windows 10 RS4 1803 春季创意者镜像分享

21130
来自专栏贾老师の博客

【笔记】读 JeffDean 分布式系统

15930

扫码关注云+社区

领取腾讯云代金券