[
6月11日
-
5分钟阅读
[
拯救
用Kepler.gl实现Python地理数据可视化
在几分钟内建立并运行一个Python网络服务
照片:Killian CartigniesonUnsplash
如果你曾经处理过任何种类的地理数据,你就会知道仅仅盯着CSV、表格或JSON格式的数据是不太有用的。你需要把它放在地图上,以审查它并发现任何模式。这可能不是收集洞察力的全部方式,你仍然需要做一个适当的分析或/和在上面运行你的ML模型,但这是一个绝对的必须。
什么是Kepler.gl?
Kepler.gl是Uber的开源项目(GitHub链接在此),用于创建高性能的、与数据无关的网络应用。它建立在Mapbox之上,可以处理大型数据集,在配置你想可视化的内容和方式方面提供了很大的灵活性。
它使用图层作为基本构件,允许你创建互动地图--你可以添加、删除、显示和隐藏图层,并改变它们的外观。这是一个超级基本的例子,使用来自data.world的公共飞行数据集。

正如你所看到的,你可以将网格、点、弧线/线、多边形分层,甚至做一个3D地图。有一些方法可以让你做非常精细的过滤(在你的数据集允许的范围内)。
我在这里展示的数据集只有37,042行,但我试过它有数百万行,它处理得很好。地理计算是由GPU加速的,以提高性能。
在Uber的工程博客中也有一篇很好的文章,其中有很多关于如何表示数据的例子和关于Kepler本身的更多细节。
使用Kepler.gl的方法?
- 在他们的网站上上传一个数据集 演示页面- 如果你想看看这是什么,或者如果你需要一个一次性的快速方法来可视化适量的非敏感数据,这是个好办法。
- 作为一个 反应组件 - 如果你想把这个功能嵌入到你现有的项目中,这将给你很多控制权(对状态、数据流、外观等)。就这样做。
npm install kepler.gl
- 作为 python模块- 如果你是一个非前端专家,而且你需要快速完成工作,除了地图之外没有太多花哨的UI组件,这就是你的选择。首先,运行。
pip install keplergl
最后一个是我要快速浏览的,以展示你如何令人印象深刻地快速获得一个令人印象深刻的MVP应用程序,并将你的数据展示给没有耐心的利益相关者或客户。
用开普勒的Python模块创建一个Web应用程序
我将做一些简单的假设--你对Python、pandas和快速API有一定的了解(不需要成为专家来跟随)。
- 让我们导入我们需要的东西。
import uvicornimport pandas as pdfrom keplergl import KeplerGl from fastapi import FastAPIfrom fastapi.responses import HTMLResponse
- 载入你的数据。
# load a csv filedf = pd.read_csv('my_data.csv')# or a json filedf = pd.read_json('my_data.json')
现在,这可以而且可能会是一个以上的文件,所以只需要在一个循环中进行,并像这样把每个文件产生的dataframes 。
all_data = pf.concat([all_data, df])
3)初始化Kepler.gl地图。
kepler = KeplerGl(config=my_map_config)
这里的配置是你可能需要玩一下的,同时你要为你的任何使用情况找到合适的配置。
要做到这一点,至少对于它的纯粹表现方面,最好的方法是使用笔记本快速加载你的数据并根据需要进行定制,然后导出配置并应用于你的项目。你也可以从更多的功能角度出发,手动或以编程方式调整重要的参数。
一个配置的例子将是这样的。
config = { "version": "v1", "config": { "visState": { "filters": [ { "dataId": ["my_data"], "id": "11111", "name": ["some_col_name"], "type": "multiSelect", "value": [], "enlarged": False, "plotType": "histogram", "animationWindow": "free", "yAxis": None, "speed": 1, } ], "layers": [ { "id": "22222", "type": "point", "config": { "dataId": "my_data", "label": "my_data", "color": [30, 150, 190], "highlightColor": [252, 242, 26, 255], "isVisible": True, "visConfig": { "radius": 5, "fixedRadius": False, "opacity": 0.8, "outline": False, "thickness": 2, "strokeColor": None, ... }, "hidden": False } } ], "interactionConfig": { "tooltip": { "fieldsToShow": { "my_data": [ {"name": "col_1", "format": None}, {"name": "col_2", "format": None} ] }, "compareMode": False, "compareType": "absolute", "enabled": True, }, "brush": {"size": 0.5, "enabled": False}, "geocoder": {"enabled": False}, "coordinate": {"enabled": False}, }, "layerBlending": "normal", "splitMaps": [], "animationConfig": {"currentTime": None, "speed": 1}, }, "mapState": { "bearing": 0, "dragRotate": False, "latitude": 40.710394, "longitude": -74.000288, "pitch": 0, "zoom": 12.41, "isSplit": False, }, "mapStyle": { "styleType": "dark", "topLayerGroups": {}, "visibleLayerGroups": { "label": True, "road": True, "border": False, "building": True, "water": True, "land": True, "3d building": False, }, "threeDBuildingColor": [ 9.665468314072013, 17.18305478057247, 31.1442867897876, ], "mapStyles": {}, }, },}
基本上,有3个主要部分 -visState,mapState 和mapStyle 。
**MapState**是用来定义你每次重新加载页面时在世界地图上的起始位置,即起始/默认位置。
**MapStyles**设置KeplerGl应用程序的一般主题。它有几个预设选项,如黑暗、静夜、光明、静光和卫星。
**VizState**是更有趣的一个。它定义了 层数(无论是点、六边形、线等),以及每一层要使用的数据集--注意,我把dataId放在了黑体中,那是你如何将你的数据与配置绑定在一起的,在下一节中会展示一个例子。你还可以定义 滤波器你可以应用于一个或多个集合,并以该数据集的一个或多个字段为基础。此外,在这里你可以定义你想在你的工具提示(或其他互动选项)中显示什么以及如何显示。
- 将你的数据传递给开普勒
# the name here should match the dataId in the configkepler.add_data(data=all_data, name="my_data")
- 将地图变成HTML
kepler_html = kepler._repr_html_()
- 启动你的应用程序并返回生成的HTML
app = FastAPI()
- 享受它的乐趣
...并感谢您的阅读!