专栏名称: EasyCharts
EasyCharts,易图表,我们将定期推送各种数据可视化与分析教程,包括Excel(Power BI)、Origin、Sigmaplot、GraphPad、R、Python、Matlab、Tableau、D3.js等。
目录
相关文章推荐
前端早读课  ·  【第3454期】如何用语音学习编程的 ·  20 小时前  
前端大全  ·  真的建议所有前端立即拿下软考(红利期) ·  4 天前  
前端大全  ·  Create React ... ·  5 天前  
前端大全  ·  React+AI 技术栈(2025 版) ·  3 天前  
商务河北  ·  经开区“美•强•优”三重奏 ·  3 天前  
51好读  ›  专栏  ›  EasyCharts

Python热力密度地图

EasyCharts  · 公众号  · 前端  · 2019-08-12 00:31

正文

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

folium包基于leaflet在线地图库封装,在R语言中leaflet的接口已经非常完善,

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

https://edu.hellobi.com/course/264

大家都在看

配图版:标准中国地图的绘制

R语言ggplot2地理信息可视化 (上)

R语言ggplot2地理信息可视化 (下)

R 地理空间数据可视化:二维插值处理(1)

R 地理空间数据可视化:二维插值处理(2)

geofacet: 按地理位置分面的数据可视化

优雅的操纵json数据地图素材——打破地理信息可视化的孤岛


书籍推荐


《R数据可视化之美:专业图表绘制指南》以 R 语言为背景,通俗易懂地讲述了大量数据可视化领域的专业知识,从图形语法、色彩原理、视觉通道到各类图表的应用实践。

书籍配套开源R代码地址

https://github.com/EasyChart/Beautiful-Visualization-with-R








请到「今天看啥」查看全文