如何使用Folium生成交互地图

使用这个Python库创建地图可视化

Tampa, Florida地图。使用Folium和Open Street Map数据创建的图像。

数据可视化是数据科学中最容易被忽视的领域之一。机器学习和统计分析的重要性不言而喻,但能够可视化数据,特别是不同类型的数据,是数据叙事的关键方面。虽然许多入门级数据科学bootcamp和课程将涵盖如何使用matplotlib和seaborn创建基本图形,但其中一些并不涵盖如何在地图上可视化地理数据。

Folium是一个Python库,使用Leaflet.js和Open Street Map数据创建高质量的地图可视化。在本文中,我将演示如何使用Folium生成交互式地图可视化。

安装

我们可以轻松地使用pip安装Folium,如下所示。

pip install folium

导入库

通常情况下,在开始之前,我会导入一些Folium和其他可能需要的库。请记住,您可以在GitHub上找到本教程的所有代码。

import numpy as npimport pandas as pdimport folium

绘制默认世界地图

Folium带有一个Map函数,我们可以不带参数调用它以生成默认世界地图。

folium.Map()
默认的世界地图投影。使用Folium和Open Street Map数据创建的图像。

请注意,默认地图是投影,并且在左上角包含缩放控件,以便我们可以与地图进行交互并在需要时聚焦于特定区域。

通过坐标绘制位置

我们可以通过向Map函数的位置参数添加坐标列表来创建围绕特定位置的地图。使用下面的代码,我们可以生成一个围绕Florida的Tampa的地图。

folium.Map(location=[27.950575, -82.457176])
Tampa, Florida地图。使用Folium和Open Street Map数据创建的图像。

更改地图瓷砖

我们还可以使用“tiles”参数更改地图瓷砖以创建外观不同的地图。我们可以使用此处详细描述的Stamen Toner瓷砖。

folium.Map(location=[27.950575, -82.457176],  tiles="Stamen Toner")
Stamen Toner瓷砖的地图。使用Folium和Open Street Map数据创建的图像。

请注意,相同的Tampa地图现在是黑白的。我们也可以创建地形图,如下所示。

folium.Map(location=[27.950575, -82.457176],  tiles="Stamen Terrain")
Stamen Terrain瓷砖的地图。使用Folium和Open Street Map数据创建的图像。

我们还可以使用Stamen瓷砖创建美丽的水彩地图,代码如下所示。

folium.Map(location=[27.950575, -82.457176],  tiles="Stamen Watercolor")
坦帕的水彩地图。使用Folium和Open Street Map数据创建的图像。

添加地图标记

如果我们想在地图上添加标记,我们可以使用Folium的Marker类创建标记对象,并像下面演示的那样将它们添加到地图上。如预期的那样,我们可以使用坐标指定标记的位置。

m = folium.Map(location=[27.950575, -82.457176], tiles="Stamen Terrain")folium.Marker(    location=[27.9658533, -82.8001026],    popup="Clearwater",    icon=folium.Icon(icon="cloud")).add_to(m)folium.Marker(    location=[27.773082733154297, -82.64020538330078],    popup="St. Petersburg",    icon=folium.Icon(color='green')).add_to(m)m
带有标记的坦帕地图。使用Folium和Open Street Map数据创建的图像。

请注意,我已经在上面的地图上创建了Clearwater和Saint Petersburg的标记。

创建等值面地图

虽然创建地图是一个有用的功能,但能够在地图上绘制和可视化数据和趋势更好。Folium也可以创建等值面地图。在本节中,我将演示如何使用美国失业数据创建等值面地图。

读取数据

我们将使用Folium GitHub repo上的examples目录中提供的数据集。我们将读取一个CSV文件,其中包含2012年10月每个州的失业统计数据,以及一个用于生成地图的GeoJSON文件。

url = (    "https://raw.githubusercontent.com/python-visualization/folium/main/examples/data")state_geo = f"{url}/us-states.json"state_unemployment = f"{url}/US_Unemployment_Oct2012.csv"state_data = pd.read_csv(state_unemployment)state_data.head(10)
州失业数据。

上面的图像显示了使用pandas head函数显示的州失业数据的前十行。

生成地图

现在我们有了失业数据,我们可以生成等值面地图。我们将向等值面构造函数提供以下参数:

  • geo_data:用于生成地图的包含GeoJSON数据的文件的路径。
  • name:地图的名称
  • data:用于生成等值面地图中颜色的实际数据。
  • columns:将使用数据的列。
  • key_on:将数据绑定到GeoJSON文件中的变量(必须以feature开头,即feature.id)
  • fill_color:用于等值面地图的颜色方案
  • fill_opacity:颜色填充的不透明度。
  • line_opacity:地图中线条的不透明度。
  • legend_name:地图中图例的名称。
m = folium.Map(location=[46, -102], zoom_start=3)folium.Choropleth(    geo_data=state_geo,    name="choropleth地图",    data=state_data,    columns=["州名", "失业率"],    key_on="feature.id",    fill_color="Reds",    fill_opacity=0.7,    line_opacity=0.2,    legend_name="失业率 (%)",).add_to(m)folium.LayerControl().add_to(m)m
Choropleth地图显示美国的失业率。

如上所示,我们能够生成一张Choropleth地图,可视化了每个美国州的失业率。

将地图保存为HTML文件

我们也可以将地图保存为HTML文件,方便在Web应用程序中嵌入Folium地图。

m.save('choropleth_unemployment.html')

概述

Folium是一个有用的Python库,用于可视化地理数据。它允许我们创建交互式地图可视化,这些地图可保存为HTML文件并嵌入Web应用程序中。本文仅介绍了Folium的一些基本功能,您可以在Folium文档页面上找到更详细的功能列表。您还可以在GitHub上找到本文中使用的所有代码。

加入我的邮件列表

加入我的邮件列表,获取有关我的数据科学内容的更新。当您注册时,您还将获得我的免费解决机器学习问题的逐步指南!您还可以关注我的Twitter账号以获取内容更新。

顺便说一下,考虑加入小猪AI社区,以阅读来自成千上万其他作者的文章。

参考文献

  1. Rob Story, Folium 0.14.0文档,(2013),GitHub。