磐创AI分享
作者 | ABHISHEK SHARMA
编译 | VK
来源 | Analytics Vidhya
请查看这张完全用Python创建的美观的纽约三维地理空间地图:
一个精美的图片!我特别喜欢城市周围的线条,它们交织在一起,呈现出一幅非常精确的城市地图的实际面貌。这个可视化地理空间数据是我最喜欢的项目之一。
使用地理空间数据有很多应用程序——位置跟踪、基于位置的营销和广告,将你与最近的骑手或送货员联系起来,以及其他用例。事实上,这一领域已经开始在业界崭露头角,所以现在是了解这一领域的最佳时机。
在这里,我们将学习如何使用名为kepler.gl的python库。我们很快就会看到,它是处理地理空间数据的强大工具。我们会在一个数据集上应用kepler.gl,让你了解如何实现它。
你以前听过kepler(开普勒)这个词吗?这可能听起来很熟悉,你可能会想到:
望远镜开普勒
或者他:
德国天文学家开普勒
你说得对,但是我们两个都不是。这是一个Python库,用于可视化地理空间数据。
❝kepler.gl是由Uber的可视化团队创建的一个基于web的高性能工具,用于大规模地理空间数据集的可视化探索。 ❞
它建在deck.gll上,这是Uber对大型数据集进行可视化探索性数据分析的另一个框架。最令人惊奇的是kepler.gl它也可以在我们的Jupyter中使用,这使得它成为数据科学界一个方便的工具。
这是我的地理空间数据可视化工具。是的,我们将创建我们在简介部分看到的可视化。
kepler.gl默认情况下不会安装。因此,必须在计算机上手动安装。安装它类似于任何其他Python库-只需运行以下命令:
!pip install keplergl
现在已经准备好进入地理空间可视化的世界了。
❝问题陈述:出租车是纽约市的重要组成部分。每天很多人都用它在城市里移动。因此,重要的是将这些移动可视化,以便进一步分析。 ❞
所以,我们必须可视化纽约的出租车出行。kepler.gl非常适合这个任务。
我们知道我们的最终目标,但如果没有数据,我们就无法达到目标,所以让我们了解我们拥有的数据集。数据包括2015年1月15日的出租车记录。让我们导入我们的数据集并查看它:
import pandas as pd
df=pd.read_csv('kepler.gl-data/nyctrips/data.csv')
print('Shape=>',df.shape)
df.head()
数据集包含12列和97000多行。让我们看看数据集中的列:
df.columns
我们的数据集包括出租车接送时间、纬度、经度、行程距离、车费、小费、乘客人数和支付给司机的总金额等功能。现在,让我们检查一下数据集是否包含任何空值:
df.isnull().sum()
太好了!我们的数据集中没有任何空值。我们现在准备将这些数据可视化。
现在我们知道了数据集,所以让我们开始使用kepler.gl。我们首先必须使用「KeplerGl()」 类创建一个映射对象。这可以采用3个参数:height(可选)、data(可选)和config(可选)。height高度,data是要添加到映射的数据,config是kepler.gl的配置:
from keplergl import KeplerGl
map1=KeplerGl(height=500)
map1
视频:https://youtu.be/5CtxkzZ-3VY
太好了!是时候给它添加数据了。数据可以添加到kepler.gl使用map对象的add_data()方法映射。
这个方法有两个参数:data和name。它接受CSV、GeoJSON、Pandas和geopandas数据帧形式的数据。name参数用于在映射的配置中为数据集分配名称:
map1.add_data(data=df,name='New York City Taxi Trips')
视频:https://youtu.be/nSq3-Fes9ME
你可以看到向地图添加数据是多么容易。以及kepler.gl它自动识别数据集中的模式并为其创建绘图。如果你注意到了,地图左边有很多控件。我们将在下一节中逐一介绍。
我们必须编写一些代码来创建地图并向其中添加数据,但现在我们不必编写一行代码来创建可视化效果和执行数据分析。这使得它成为最适合初学者的可视化工具。
自定义地图和执行数据分析总共需要了解四件事:
让我们从了解图层部分开始。图层部分包含修改图层的选项。现在,你可能想知道什么是图层?kepler.gl地图中的一层是可视化的一层,可以根据用例创建、修改和删除。下面我演示了如何修改图层。
视频:https://youtu.be/fZEz11w-Xyo
kepler.gl提供了许多类型的图层,你可以创建用于数据分析。你可以在这里读到更多关于他们的文档:https://docs.kepler.gl/docs/user-guides/c-types-of-layers。
你刚刚看到修改图层是多么容易。稍后你将看到使用kepler.gl. 现在你知道如何修改图层了,让我们了解一下过滤器。
正如你可能已经猜到的,过滤器用于过滤数据,这正是该功能存在的原因。在数据分析过程中,我们经常需要过滤数据集。下面我根据旅行距离过滤了地点。
视频:https://youtu.be/sOugr6lsP3U
你可以看到上面,我已经创建了一个5英里的窗口,并根据它过滤了出租车取车点。有许多其他类型的过滤器,你可以使用基于选定列筛选数据。
交互面板用于修改鼠标指针和地图之间的交互。你可以使用它修改工具提示,向地图添加地理编码器,添加画笔以选择地图的一部分,并获取鼠标指针在纬度和经度中的位置坐标。
视频:https://youtu.be/ujaGtilP8Iw
在上面的视频中,我修改了工具提示,还使用了交互面板的其他功能。当你希望在地图上显示光标移动的更多信息时,这些功能在场景中非常有用。现在让我们看看“底图”选项卡。
“底图”选项卡具有修改底图的选项。但底图是什么?
底图是在kepler.gl所有图层的底图 还记得我们以前创建地图对象并将其可视化的时候吗?那是底图。底图在表示信息时非常有用,可以提供美观的效果:
视频:https://youtu.be/Md3WkrDJc1Q
你可以在上面看到底图的颜色是如何使我们的视觉效果与众不同的。你不仅可以更改底图,还可以修改底图的元素。我最喜欢的底图是深色和浅色,因为它们有助于设置对比度。
实际上,底图的选择完全取决于我们正在创建的可视化。
如果你在前面的视频中注意到,还有第五个标签。这是配置选项,包含kepler.gl地图的配置。
此配置用于复制kepler.gl地图。你需要记住的一件事是,添加的数据名称应该保持不变,在本例中是“New York City Taxi Trips”。既然你现在知道了kepler.gl,让我们跳到下一节,在其中我们将创建一些美丽的可视化效果并体验kepler.gl.
在可视化方面,kepler.gl通过在数据中找到一些模式并为其创建可视化,我们的任务已经变得更容易了。你可以在下面的视频中看到这个。它已经在地图上标出了旅行的起降点。此外,它还使用弧和线的层来可视化行程:
视频:https://youtu.be/OSHlHkPK73g
我删除了线条层,因为它看起来不像弧形。在上面的视频中,我们看到最初的弧线看起来并没有什么信息。但当我们在3D里看到它的时候,一切都颠倒了。这就是为什么我喜欢kepler.gl,它允许你在不编写任何代码的情况下创建三维可视化效果。
❝另外,如果你注意到的话,有一条弧线离纽约市很远。如果我们不使用kepler.的话,这是一个异常值。因此,地理空间可视化是必不可少的。它们可以显示数据的某些方面,但是异常值如果通过表格是显示不出来的。 ❞
而且,弧线的源和目标颜色是分开的,这一特点不仅使我们的弧线更具解释性,而且画龙点睛。我们的可视化现在看起来非常漂亮。
还有一件事,互动画笔让我们可以看一看从纽约某个特定地区拍摄的旅行,这可以帮助我们确定该市最繁忙的地区。
但是等等!所有这些可视化都是由kepler.gl做的,我们还没有创造出什么东西,所以让我们纠正它。我能想到的一个很好的视觉效果是取货地点的热图,它将为我们提供人们取货地点的信息。
在kepler.gl创建热图我们需要遵循以下步骤:
视频:https://youtu.be/KnroJWaRyP4
我们已经成功地创建了热图。但这里有一个陷阱——由于数据是在一天中不同的时间点收集的,我们的热图显示了当天所有的取货地点。我们可以通过使用过滤器为我们的映射添加更多的粒度。
在这里,我使用过滤器并选择了包含用于筛选数据集的取货时间的列。现在,我们可以查看当天不同情况下的取货地点热图。这幅图像为我们提供了一天中不同时间纽约市最繁忙地区的信息。
在下一节中,我们将创建与你在简介中看到的相同的可视化效果。
❝问题说明:人口普查区域是为进行人口普查而确定的地理区域。将它们可视化可以为我们提供有关整个纽约市人口分布的信息。 ❞
问题陈述非常简单。我们只需要创建一个可以显示整个纽约市人口分布的可视化模型。显示人口普查区域的三维地图非常适合这一目的。所以让我们创造一个。
我们将使用一个包含2010年人口普查图的数据集,从这里获取的纽约市人口数据:https://github.com/uber-web/kepler.gl-data。
选择的数据集采用GeoJSON格式。GeoJSON是一种基于JavaScript对象表示法(JSON)的格式,用于编码各种几何特征。它使用各种几何类型,如点、线串、多边形、多点和其他。
因为这次我们的数据集的格式不同,所以我们将使用不同的库来处理这个数据集。我们会用geopandas做这个。
Geopandas是一个Python库,它使使用Python处理地理空间数据更加容易。Geopandas结合了各种顶级库,如numpy、shapely、fiona、geopy、descartes、matplotlib和Pandas。如果你知道如何使用Pandas,那么你在使用它时不会遇到任何问题。
因此,让我们导入库并查看我们的数据集:
from keplergl import KeplerGl
import geopandas as gpd
import matplotlib.pyplot as plt
import matplotlib
census=gpd.read_file('kepler.gl-data/nyc_census/data.json')
print('Shape=>',census.shape)
census.head()
我们的数据集包含纽约市2166个人口普查区的人口、邻里表区号(ntacode)、社区发展区补助资格(cdeligibil)、区号(boro_code)、人口普查区面积(shape_area)等信息。
如果你注意到上面,有一个名为geometry的列。它包含普查区域的几何信息,即普查区域的形状为多边形。你可以在此处阅读有关数据集其他功能的更多信息。
https://data.cityofnewyork.us/api/views/fxpq-c8ku/files/c1bc6807-5120-44ac-b0b2-138dc622a4a8?download=true&filename=nyct2010_metadata.pdf
现在,让我们不使用kepler.gl绘制数据集,看看它是否正确.
你可以使用geopandas的**plot()**函数查看GeoJSON:
census.plot(figsize=(12,10))
太好了!这看起来像纽约市。我们现在已经准备好了数据集,所以让我们跳到可视化部分。
你已经知道我们的第一步是什么–我们必须创建一个地图,然后将数据添加到其中:
map2=KeplerGl(height=500,data={'Census Data':census})
map2
视频:https://youtu.be/hkwWXmUObPQ
如果你注意到了,我没有在这里使用「add_data()「方法。我只是将数据传递给了」KeplerGl()」。这是向其中添加数据的另一种方式。kepler.gl已经检测到几何列并将其绘制出来,但它看起来不太吸引人,而且它也不在3D中。因此,让我们将其进行设置:
视频:https://youtu.be/VvkzEP2LREI
你可以在上面看到,我们不需要做太多的工作来绘制三维的人口普查图。最后,现在你已经创建了一个三维的人口普查图,它看起来和我之前展示给你的一模一样。你的3D地图看起来非常漂亮。
有两种方法可以保存可视化效果。首先,保存Jupyter,然后将map导出为HTML。所以让我们看看第一种方法:
只需单击SaveNotebook小部件状态按钮,就保存在Jupyter中。现在让我们看看第二种方法。此操作要求你运行一行代码:
map2.save_to_html(file_name='nyc_census.html',read_only=True)
注意:这只保存可见的图层,同时隐藏左侧面板。如果要自定义生成的地图并查看所有图层,则需要运行以下代码:
map2.save_to_html(file_name='nyc_census-customize.html')
最后,我们到达了本文的结尾。现在,我可以说你已经知道如何使用kepler.gl用于可视化地理位置数据集。
为了进行更深入的分析,我强烈建议阅读他们的文档,这些文档制作精美,易于阅读。
https://docs.kepler.gl/
原文链接:https://www.analyticsvidhya.com/blog/2020/06/learn-visualize-geospatial-data-jupyter-kepler/