前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python中的folium包创建热力密度图

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

作者头像
数据小磨坊
发布2018-07-25 11:50:36
4.7K0
发布2018-07-25 11:50:36
举报
文章被收录于专栏:数据小魔方数据小魔方

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

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

leaflet地图:

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

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

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

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

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

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

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

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

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

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

代码语言:javascript
复制
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 = ['北京','天津','石家庄','太原','呼和浩特','沈阳','大连','长春','哈尔滨','上海','南京','杭州','宁波','合肥','福州','厦门','南昌','济南','青岛','郑州','武汉','长沙','广州','深圳','南宁','海口','重庆','成都','贵阳','昆明','拉萨','西安','兰州','西宁','银川','乌鲁木齐']

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

代码语言:javascript
复制
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热力图数据结构的数据对象:

代码语言:javascript
复制
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))]

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

代码语言:javascript
复制
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数据进行热力图展示。

代码语言:javascript
复制
posi = pd.read_excel("D:/Python/File/Cities2015.xlsx")
posi = posi.dropna()
代码语言:javascript
复制
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))]
代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档