社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python热力密度地图

EasyCharts • 6 年前 • 807 次点击  

最近探索出来一个在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



如需联系EasyCharts团队

请加微信:EasyCharts


【书籍推荐】《Excel 数据之美--科学图表与商业图表的绘制》

【手册获取】  国内首款-数据可视化参考手册:专业绘图必备

【必备插件】  EasyCharts -- Excel图表插件

【网易云课堂】  Excel 商业图表修炼秘笈之基础篇



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37498
 
807 次点击