如何使用Folium生成交互地图
使用这个Python库创建地图可视化
数据可视化是数据科学中最容易被忽视的领域之一。机器学习和统计分析的重要性不言而喻,但能够可视化数据,特别是不同类型的数据,是数据叙事的关键方面。虽然许多入门级数据科学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()
请注意,默认地图是投影,并且在左上角包含缩放控件,以便我们可以与地图进行交互并在需要时聚焦于特定区域。
通过坐标绘制位置
我们可以通过向Map函数的位置参数添加坐标列表来创建围绕特定位置的地图。使用下面的代码,我们可以生成一个围绕Florida的Tampa的地图。
folium.Map(location=[27.950575, -82.457176])
更改地图瓷砖
我们还可以使用“tiles”参数更改地图瓷砖以创建外观不同的地图。我们可以使用此处详细描述的Stamen Toner瓷砖。
folium.Map(location=[27.950575, -82.457176], tiles="Stamen Toner")
请注意,相同的Tampa地图现在是黑白的。我们也可以创建地形图,如下所示。
folium.Map(location=[27.950575, -82.457176], tiles="Stamen Terrain")
我们还可以使用Stamen瓷砖创建美丽的水彩地图,代码如下所示。
folium.Map(location=[27.950575, -82.457176], tiles="Stamen Watercolor")
添加地图标记
如果我们想在地图上添加标记,我们可以使用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
请注意,我已经在上面的地图上创建了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地图,可视化了每个美国州的失业率。
将地图保存为HTML文件
我们也可以将地图保存为HTML文件,方便在Web应用程序中嵌入Folium地图。
m.save('choropleth_unemployment.html')
概述
Folium是一个有用的Python库,用于可视化地理数据。它允许我们创建交互式地图可视化,这些地图可保存为HTML文件并嵌入Web应用程序中。本文仅介绍了Folium的一些基本功能,您可以在Folium文档页面上找到更详细的功能列表。您还可以在GitHub上找到本文中使用的所有代码。
加入我的邮件列表
加入我的邮件列表,获取有关我的数据科学内容的更新。当您注册时,您还将获得我的免费解决机器学习问题的逐步指南!您还可以关注我的Twitter账号以获取内容更新。
顺便说一下,考虑加入小猪AI社区,以阅读来自成千上万其他作者的文章。
参考文献
- Rob Story, Folium 0.14.0文档,(2013),GitHub。