我是靠谱客的博主 执着柠檬,最近开发中收集的这篇文章主要介绍[论文阅读] [动手实践] Geoplotlib论文阅读和动手实践操作0. 论文导读1. 整体介绍2. 研究工作3. Geoplotlib架构图4. 设计原理5. 高级功能数据访问6. 性能7. 结论,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

0. 论文导读

《Geoplotlib: a Python Toolbox for Visualizing Geographical Data》

项目地址:

https://github.com/andrea-cuttone/geoplotlib

1. 整体介绍

在本文作者引入了一个用于可视化地理数据的开源python工具箱geoplotlib。 geoplotlib支持在纯python中开发硬件加速的交互式可视化,并提供点映射,核密度估计,空间图,Voronoi镶嵌,形状文件以及更多常见空间可视化的实现。 其中描述了geoplotlib的设计,功能和用例。

地理数据可视化是交流有关地理空间分析结果的基本工具,并在探索性数据分析过程中产生假设。而且,来自社交媒体,移动设备和空间数据库的地理定位数据的不断增加的可用性意味着需要新的工具来探索,挖掘和可视化大型空间数据集。

由于其语法的清晰和简单,并且由于大量的第三方库(例如数据库)的存在,Python编程语言作为科学界的数据分析工具一直备受关注。其中包括科学计算,机器学习,贝叶斯模型,神经科学和生物信息学等多个学科。然而,目前对地理可视化的支持有限。

本文中作者介绍一个用于可视化地理数据的python工具箱geoplotlib。 geoplotlib提供了一个简单而强大的API来在OpenStreetMap tiles上生成地理可视化。以开源软件的形式发布geoplotlib,并附有丰富的示例和文档。

在本文的其余部分,讨论了现有的地理可视化工具,详细记录geoplotlib的功能,最后作者在文中评估大规模数据集的计算性能。

2. 研究工作

在本文中,作者比较使用python可视化地理数据的现有工具。 文中将相关工作分为三类:纯Python包,基于HTML的包和地理信息系统插件。

2.1 纯python包

matplotlib库已经成为python数据可视化的事实标准,并提供了大量的可视化工具,包括散点图和线图,表面视图,3D图,条形图和箱形图,但是它没有提默认情况下对地理地图上的任何可视化支持。

底图和Cartopy软件包支持多个地理投影,并提供了几个可视化,包括点图,热点图,等高线图和形状文件。 PySAL是一个用Python编写的空间分析函数的开源库,提供了许多基本的绘图工具,主要用于shapefile。 但是,这些库不允许用户在地图上绘图,并且对自定义的可视化,交互性和动画的支持有限。

2.2 基于HTML的包

Web上有一个非常丰富的数据可视化生态系统。一些框架允许用户生成图表和图表:其中Protoviz,d3,Google Charts,sigmajs最受欢迎,还有大量的库显示在线tile地图,包括谷歌地图,Bing地图,Leaflet,OpenLayers,ModestMaps,PolyMaps。

为了从python代码生成HTML可视化,需要生成将数据映射到图形元素的HTML和JavaScript代码。一些libraries试图自动化转换,如Folium,Vincent和mplleaflet。然而,这个过程往往是复杂的,容易出错和耗时的。如果需要对动画或交互的支持,复杂性可能会更大。最后,JavaScript绘制性能可能不足以绘制非常大的数据集。

2.3 地理信息系统插件

QGIS,GrassGIS,AR-CGIS,MapInfo等地理信息系统(GIS)为空间数据分析和可视化提供了非常强大的工具。 GIS工具通常为python脚本提供一些支持,尽管可用性因人而异。 GIS产品的主要限制是它们的复杂性,需要大量的投入训练才能有效地使用,正如前面所讨论的那样,需要从python中导出数据。

3. Geoplotlib架构图

geoplotlib体系结构的概述如图3.1所示。geoplotlib建立在numpy和scipy之上用于数值计算,OpenGL / pylet [35]用于图形渲染。 geoplotlib实现了地图渲染,地理投影,用户界面交互和一些常见的地理可视化。

[外链图片转存失败(img-BML6i57g-1562486520731)(/Users/zhangyifei/Desktop/屏幕快照 2019-07-07 下午12.41.11.png)]

4. 设计原理

geoplotlib是根据三个关键原则设计的:

  • 简单性:geoplotlib试图通过为最常见的任务(如密度可视化,空间图形和shapefile)提供一组内置工具来尽量减少设计可视化的复杂性。 gelotlib API受matplotlib编程模型和语法的启发,它是python中事实上的数据可视化标准;这使得matplotlib用户更容易上手。

  • 整合:geoplotlib可视化是标准的python脚本,可能包含任何python代码并使用任何其他软件包。无需导出为其他格式(例如shapefile,HTML)或使用外部程序。这支持与丰富的Python数据分析生态系统完全集成,如科学计算,机器学习和数值分析软件包。可视化甚至可以在IPython [36]会话中运行,支持交互式数据分析并促进可视化的迭代设计。

  • 性能:在底层,geoplotlib使用numpy / scipy进行快速数字计算,pyglet / OpenGL用于硬件加速图形渲染。 这使可视化实时扩展到数百万个数据点。

4.1 脚本示例

一个简单的geoplotlib脚本如下所示:

data = read csv(’data/bus.csv’)
geoplotlib.dot(data)
geoplotlib.show()

这个脚本启动geoplotlib窗口,并显示数据点的点阵图,在这个例子中是丹麦巴士站的位置(图4.1)。 gelotlib自动确定地图边界框,下载地图图块,执行地理投影,绘制底图和可视化图层(本例中的点)。该地图是交互式的,并允许用户使用鼠标和键盘进行缩放和平移。

[外链图片转存失败(img-6HLbvyhO-1562486520756)(/Users/zhangyifei/Desktop/屏幕快照 2019-07-07 下午2.29.27.png)]
如上所述,geoplotlib API的使用与mat-plotlib非常相似。可视化画布最初是空的,每个命令添加一个新的图形层。当调用show()时会显示geoplotlib窗口。并且,可以使用savefig(‘filename’)将地图渲染为图像文件,或使用inline()将其内嵌显示在IPython笔记本中。

4.2 图层

geoplotlib软件包以层的形式提供几个常见的地理可视化。 API提供了快速添加新可视化图层的便捷方法。

4.3 点映射

地理可视化的基本操作是显示“什么是地方”,即在地图上为每个对象放置一个图形元素。这提供了对象的绝对和相对位置的直接概念。此外,点的密度直接映射到地理表面上的物体的密度,从而识别更高和更低密度的区域。点图的例子如图2所示。点图显示了丹麦公交站点的空间分布情况。更高密度的地区 - 相当于哥本哈根大都市区和其他主要城市,立即可以辨认。点方法允许用户配置点的大小,颜色和透明度,并可选地将动态工具提示附加到每个点。

4.4 二维直方图

点阵图的一个局限性在于难以区分高密度的区域,因为点数太高以至于均匀覆盖可视化画布。 密度的更直接的可视化是计算点坐标的二维直方图。 在地图上放置均匀间隔的网格,并计数每个单元内的样本数量。 该值是密度的近似值,可以使用色标进行可视化。 在geoplotlib中,可以使用hist生成数据的二维直方图:

data = read csv(’data/opencellid dk.csv’) 
geoplotlib.hist(data, colorscale=’sqrt’, binsize=8) 
geoplotlib.show()

这里的binsize指的是直方图的像素大小。上面的例子加载了一些与Den标记中的细胞塔位置相关的数据,然后生成一个具有特定颜色和bin大小的直方图(图3)。 与点图实例相比,直方图更清晰描述密度分布。

[外链图片转存失败(img-KS9F4aWJ-1562486520767)(/Users/zhangyifei/Desktop/屏幕快照 2019-07-07 下午2.59.02.png)]

4.5 热图

直方图可视化的主要缺陷是它们是(有效连续的)密度函数的离散近似。 这创建了对bin大小和偏移量的依赖,使得直方图对噪声和异常值敏感。为了生成更平滑的近似值,核密度估计器近似于在每个点周围的窗口中应用核函数的真密度函数。这个窗口的大小取决于带宽参数:一个较小的带宽将产生更多的细节,但也是更噪声的估计,而较大的带宽将产生较不详细但较平滑的估计。 然后可以通过颜色编码密度值(该可视化通常称为“热图”)的表面来可视化核估计函数。 在geoplotlib中,kde方法生成一个核密度估计可视化:

data = read csv(’data/opencellid dk.csv’)
geoplotlib.kde(data, bw=[5,5])
geoplotlib.show()

图4显示了应用于蜂窝塔数据的核密度估计。 比较图3中的直方图和图4中的核密度估计值,可以明显看出后者如何产生一个更平滑和更明确的密度随机化。 可以配置内核带宽(屏幕坐标)来调节平滑度。 可以将密度上限设置为在阈值上剪切密度值。 密度下限也可以设置,以避免渲染非常低密度的区域:

# lowering clip above changes
# the max value in the color scale
geoplotlib.kde(data, bw=[5,5], cut below=1e6, clip above=1)
# different bandwidths
geoplotlib.kde(data, bw=[20,20], cmap=’coolwarm’, cut below=1e6)geoplotlib.kde(data, bw=[2,2], cmap=’coolwarm’, cut below=1e6)
# linear colorscale
geoplotlib.kde(data, bw=[5,5], cmap=’jet’,cut below=1e6, scaling=’lin ’)

在这里插入图片描述

4.6 标记

在某些情况下,使用具有特定含义的自定义符号来表示地图上的对象是非常有用的。 标记方法允许用户在地图上放置海关标记:

metro = read_csv (./ data/metro . csv ’ ) 
s_tog = read_csv(./data/s−tog.csv’)
geoplotlib.markers(metro, ’data/m.png’,
f tooltip=lambda r: r[’name’])
geoplotlib.markers(s tog , ’data/s−tog.png’, f tooltip=lambda r: r[’name’])
geoplotlib .show()

图5显示了哥本哈根地铁站和火车站的自定义标记示例。 标记图形可以是任何常见的栅格格式(png,jpeg,tiff),并可以重新调整为自定义大小。 可选地,可以将动态工具提示附加到每个标记。

在这里插入图片描述

4.7 空间图

空间图是一种特殊类型的图,其中节点具有定义明确的空间配置。 例子包括运输网络(巴士路线,火车轨道,飞行路径),供应链网络,电话网络和通勤网络。 在geoplotlib图中呈现一个空间图:

data = read_csv(./data/flights.csv’)
geoplotlib.graph(data ,
				 src_lat='lat departure',
                 src lon='lon departure',
                 dest lat='lat arrival',
                 dest lon='lon arrival',
                 color='hot_r',
                 alpha=16,
                 linewidth=2)

在这里插入图片描述
更多的详见论文部分

4.8 GeoJSON

GeoJson是用于编码地理数据的可读格式,例如多边形和线。 geoplotlib可以从GeoJSON格式渲染形状,并且可以动态地改变形状颜色和工具提示以编码数据。 例如,可以使用GeoJSON形状来生成每个地理单元被着色以编码连续变量的等值线(choropleth)。

def get color(properties ):
  key = str ( int ( properties [ 'STATE' ])) key += properties['COUNTY']
  if key in unemployment :
  	return cmap.to color(unemployment.get(key),
  												.15, ’lin’)
  else :
  	return [0, 0, 0, 0]
with open('data/unemployment. json') as fin : unemployment = 		json.load(fin)
cmap = ColorMap( 'Blues' , alpha=255, levels=10) geoplotlib.geojson('data/gz 2010 us 050 00 20m.json',
fill=True, color=get_color ,f_tooltip=lambda properties : properties [ 'NAME' ]) 
geoplotlib.geojson('data/gz 2010 us 050 00 20m.json',fill=False , color=[255, 255, 255, 64]) 
geoplotlib .show()

在这里插入图片描述

5. 高级功能数据访问

DataAccessObject类是原始数据和所有geoplotlib可视化之间的基本接口。 DataAccessObject在概念上类似于一个表,每个字段有一列,每个样本有一行。 这个范例在数据分析术语中是非常常见的,相当于nndar中的ndarrays和pandas和R中的dataframe。DataAccessObject可以通过使用内置的read_csv方法读取逗号分隔值(CSV)文件来初始化,或者 可以从python字典或者pandas dataframe中构建:

示例:

dao1 = DataAccessObject ({'fields' : somevalues , 'field2 ': othervalues})
dao2 = DataAccessObject ( mydataframe )
dao3 = read csv('somefile.csv')

唯一需要的两个字段是lat和lon,分别代表地理坐标。 大多数内置可视化都隐含地引用这两个字段来定位空间中的实体。 DataAccessObject还提供了一些基本的数据处理方法,例如过滤,分组,重命名和删除行和列。

6. 性能

文中使用默认的可视化参数,通过对包含一百万个样本的数据集生成一些描述性的视图来测试geoplotlib的性能。所有测试仅考虑实际渲染可视化所需的时间,不包括加载数据的时间。对于每种可视化类型,测量重复10次。这个实验是在配备Intel 2.3 GHz i7 CPU,8 GB RAM和nVidia GeForce GT 650M GPU的MacBook Pro 2012上进行的。表6-1显示,在所有情况下,可视化仅需要几秒钟,因此证明了即使对于大规模数据集,geoplotlib也是适用的。

表1:100万个样本的执行时间

visualization typemean time [s]SD [s]
dot1.570.08
graph1.990.09
hist8.120.55
kde5.370.37
voronoi3.080.66

7. 结论

作者提供了一个用于生成地理可视化的python工具箱geoplotlib。 演示了geoplotlib如何提供一个简单而强大的API来可视化地理数据,极大地促进了地理信息的探索性数据分析。geoplotlib有希望可以成为数据分析工具箱中的一个强大的工具,既可以分析复杂的空间模式,也可以用地理可视化的形式交流结果。 未来的工作包括增加更多的可视化工具,以及空间分析方法的整合。

最后

以上就是执着柠檬为你收集整理的[论文阅读] [动手实践] Geoplotlib论文阅读和动手实践操作0. 论文导读1. 整体介绍2. 研究工作3. Geoplotlib架构图4. 设计原理5. 高级功能数据访问6. 性能7. 结论的全部内容,希望文章能够帮你解决[论文阅读] [动手实践] Geoplotlib论文阅读和动手实践操作0. 论文导读1. 整体介绍2. 研究工作3. Geoplotlib架构图4. 设计原理5. 高级功能数据访问6. 性能7. 结论所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部