使用Python+Folium实现地理空间可视化效果

Posted ai52learn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python+Folium实现地理空间可视化效果相关的知识,希望对你有一定的参考价值。

概述

  • 如今,有多个数据科学项目需要使用交互式地图。可以通过各种工具制作这种交互式绘图,其中一种工具是 Python 的 Folium 库

  • 本文重点介绍使用 Folium 库创建令人印象深刻的地理可视化效果。

介绍

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

解释地图一直是地理空间分析的重要组成部分。研究地图的最佳方法之一是通过交互式可视化。这种可视化帮助我们获得解决复杂数据科学用例的重要见解。

多种工具可用于地理空间可视化,我们将重点关注的工具是Folium。

图片

Folium是一个强大的 Python 库,专门用于创建多种类型的 Leaflet 地图。它是最常用的工具之一,用于解释和从地图中获取见解。

使用 Folium,只需使用纬度和经度值即可创建任何位置的地图。它既可以将数据绑定到地图以进行等值线可视化,也可以将丰富的矢量/栅格/html 可视化作为地图上的标记传递。

Folium 提供了多种令人兴奋的功能,我们将在整个项目中探索这些功能!!

学习目标

  • 了解地理可视化

  • 探索 Folium 以进行地图绘制

  • 构建Stamen Toner图和Stamen Terrain图

  • 定位和可视化世界各地的各个城市

  • 现实生活中的应用

安装

通过以下命令在你的 jupyter notebook 中安装最新版本的 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

图片

现在我们可以通过预先调整缩放级别来制作特定国家的绘图。要绘制特定位置,我们必须输入区域的纬度和经度。

我们可以通过提供纬度为 20.5937 和经度为 78.9629 来绘制印度的地图。相应地设置缩放级别。

 

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

图片

为了定位更清晰的区域,我们可以简单地增加缩放级别。这将提供更深入的地图前景。我们可以通过选择“+”或“-”号在图周围移动并增加或减少缩放。我们也可以双击地图进一步放大地图。

 

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

图片

Folium 为我们提供了通过自定义缩放、标记和滑动以及其他与地图交互的功能。

Stamen Toner图

Stamen Toner图可以快速轻松地可视化,它们可以生成美丽的高对比度黑白图。它们主要用于数据混搭、探索河流曲折和沿海地区。

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

 

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

图片

Stamen Terrain图

Stamen Terrain图非常适合可视化所有类型的地形。它们提供山体阴影、自然植被颜色并展示双车道道路的高级标记和概括。

现在让我们通过将图块指定为“Stamen Terrain”来尝试一下。

 

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

图片

现在我们已经了解了使用 Folium 库绘制不同地图的基础知识。所以,为什么不根据我们的项目要求,通过可视化的方式来进行更多的实验呢!

在这里,我通过选择纬度和经度来可视化美丽的德拉敦市。

 

latitude = 30.3165
longitude = 78.0322
# create map and display it
dehradun_map = folium.Map(location=[latitude, longitude], zoom_start=10)
# display the map 
dehradun_map

图片

实际应用

要了解绘制和可视化地图的重要性,我们必须探索地理可视化的现实应用。

数据导入

让我们从导入数据集开始,对于这个项目,我们将使用 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)
sanmap

图片

添加标记

为了使地图更具交互性,我们可以将犯罪地点整合到地图上。

这可以通过使用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, 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
))
latitudes = list(df.Y)
longitudes = list(df.X)
labels = list(df.Category)
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

 

图片

尾注

我们已经讨论了地理空间可视化的用例和实际应用。探索 Folium 库以绘制各种类型的地图。使用Folium进行进一步的实验,以创建功能强大的交互式可视化!!

以上是关于使用Python+Folium实现地理空间可视化效果的主要内容,如果未能解决你的问题,请参考以下文章

Python实现地图可视化 folium

Python实现地图可视化 folium

使用 Leaflet、folium 和 pandas 使用 python 绘制地理编码数据(来自 CSV)时出错

新型冠状病毒数据可视化分析

在 folium 中使用地理数据框绘制彩色多边形

【可视化】python地图可视化_Folium