地理空间可视化与Folium库的使用

数据科学项目中,交互式地理图表的使用变得越来越重要。通过各种工具,例如Python的Folium库,可以创建这样的交互式图表。本文将聚焦于如何利用Folium库来制作令人印象深刻的地理可视化图表。

地理空间可视化是利用地理空间可视化工具和技术对地理空间数据进行分析的过程。地理空间数据可视化旨在将交互式可视化添加到传统地图中,这有助于探索地图的不同层面,并在分析地理区域和位置的不同因素时尝试地图的外观。

解读地图一直是地理空间分析的关键部分。通过交互式可视化来研究地图是最佳方式之一。这种可视化帮助得出解决复杂数据科学用例的重要见解。

有多种工具可用于地理空间可视化,本文将重点关注Folium。Folium是一个强大的Python库,专门用于创建多种Leaflet地图。它是解释和从地图中提取见解的最常用工具之一。

使用Folium,只需使用纬度和经度值就可以创建任何位置的地图。它不仅支持将数据绑定到地图上进行地理可视化,还可以在地图上传递丰富的矢量/光栅/HTML可视化作为标记。

Folium提供了许多激动人心的功能,将在本项目中探索这些功能!

学习目标

理解地理可视化

探索Folium地图绘制

构建Stamen Toner和Stamen Terrain地图

定位并可视化全球各个城市

现实生活中的应用

安装

在Jupyter笔记本中安装最新版本的Folium,通过以下命令开始!

pip install folium

导入所需的库,将使用NumPy库,该库在Python中用于科学计算。Pandas库是主要的数据结构库。同时使用Folium库进行地理可视化。

import numpy as np import pandas as pd import folium

探索基础地图

让从绘制基础地图开始。可以使用folium.map()函数创建世界地图。通过这个简单的命令,可以看到世界地图被绘制出来。

world_map = folium.Map()

现在可以通过预设缩放级别来制作特定国家的地图。对于特定位置的绘制,需要输入该地区的纬度和经度。

world_map = folium.Map(location=[20.5937, 78.9629], zoom_start=4)

要针对更具体的区域,可以简单地增加缩放级别。这将提供对地图的更深入的视角。可以通过选择“+”或“-”符号在图表上移动,增加或减少缩放。还可以通过双击地图来进一步放大地图。

world_map = folium.Map(location=[28.7041, 77.1025], zoom_start=6)

Folium提供了与地图交互的能力,包括自定义缩放、标记和滑动以及其他功能。

Stamen Toner地图

Stamen Toner地图易于可视化,它们产生美观的高对比度黑白地图。它们主要用于数据混搭,探索河流蜿蜒和沿海地区。

可以使用“Stamen Toner”瓦片来创建相同的地图,只需将此瓦片添加到之前创建的Map函数中并绘制地图。

world_map = folium.Map(location=[28.7041, 77.1025], zoom_start=4, tiles="Stamen Toner")

Stamen Terrain地图

Stamen地形地图非常适合可视化各种地形。它们提供丘陵阴影、自然植被颜色,并展示高级标签和双车道道路的概括。

现在让尝试指定瓦片为“Stamen Terrain”。

world_map = folium.Map(location=[28.7041, 77.1025], zoom_start=4, tiles="Stamen Terrain")

要理解绘制和可视化地图的重要性,必须探索地理可视化在现实生活中的应用。

让从导入数据集开始,对于本项目,将使用Pandas库来使用警察部门事件数据集。

df = pd.read_csv('https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DV0101EN/labs/Data_Files/Police_Department_Incidents_-_Previous_Year__2016_.csv')

使用df.head()函数显示前五条记录,并研究手头的数据。

df.head()

使用shape函数,可以看到数据集包含150500行和13列。这些是2016年发生的事件数量。这是一个庞大的数据集,需要大量的计算能力,因此只处理前100个值。

df.shape limit = 100 df = df.iloc[0:limit, :]

可视化2016年发生的事件。对于绘制地图,让从默认样式开始,并指定旧金山的纬度和经度,然后初始化缩放级别为12。

latitude = 37.77 longitude = -122.42 sanmap = folium.Map(location=[latitude, longitude], zoom_start=12)

要使地图更具交互性,可以将犯罪地点整合到地图上。这可以通过使用Folium库的FeatureGroup()函数来完成。为此,可以为数据框中的事件创建一个具有自己特征和样式的特征组,并将其添加到地图上。

首先,为数据框中的事件实例化一个特征组。

incidents = folium.map.FeatureGroup()

遍历犯罪并将其添加到事件特征组中。可以选择任何所需的颜色作为标记,并指定标记的大小。

for lat, lng, in zip(df.Y, df.X): incidents.add_child( folium.CircleMarker( [lat, lng], radius=5, color='yellow', fill=True, fill_color='blue', fill_opacity=0.6 ) )

还可以添加一些弹出文本,当将鼠标悬停在标记上时会显示。这些弹出窗口可以显示想要的任何内容。在这里,每个标记应该显示犯罪的类别。

for lat, lng, label in zip(latitudes, longitudes, labels): folium.Marker([lat,lng], popup=label).add_to(sanmap) sanmap.add_child(incidents) sanfmap = folium.Map(location=[latitude, longitude], zoom_start=12) for lat, lng, label in zip(df.Y, df.X, df.Category): folium.CircleMarker( [lat, lng], radius=5, color='yellow', fill=True, popup=label, fill_color='blue', fill_opacity=0.6 ).add_to(sanfmap) sanfmap
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485