你是否曾经走在街上,心想:“嗯…又一条名为‘主街’的街道?真有创意…我想知道美国还有多少条‘主街’?🤔”
如果你和我一样,想知道的话,现在就不用再想了!MapnStreets 让你可以探索美国街道名称的流行程度和位置。在 HuggingFace 上试用它,或者从 GitHub 克隆它并在本地运行!
想知道 MapnStreets 是如何工作的吗?继续阅读!
站在巨人的肩膀上:开源软件包 🚀
MapnStreets 是各种开源软件包的组合,这些软件包共同创造了奇迹。
- Fugue:这个精巧的 Python 库负责可扩展的数据处理和分析。它就像幕后的智囊,可以高效地查询和处理大型数据集。
- Panel:这个软件包负责创建 MapnStreets 的交互式 Web 界面!使用 Panel,你无需了解 JavaScript;只需在 Python 中定义小部件、布局和交互性,然后即可服务!
- GeoPandas:GeoPandas 将 pandas 提升到了一个新的高度,因为它添加了地理空间功能。它主要处理地理空间数据结构和操作。换句话说,在处理地理数据集(例如 shapefile)时,它是一个救星。
- GeoViews:GeoViews 提供了地理空间数据的交互式可视化。使用 GeoViews,你可以创建动态地图和图表,可以放大和缩小。你还可以向左或向右平移。
- Parquet:你听说过既高效又可扩展的文件格式吗?Parquet 就是这样!在 MapnStreets 中,Parquet 可确保快速高效地存储和检索地理空间数据。
- DuckDB:DuckDB 是一个闪电般快速的内存分析数据库。在 MapnStreets 中,DuckDB(与 Fugue 结合使用)负责执行你的查询。
- Ray:Ray 在分布式执行方面是明星。它是一个灵活且高性能的框架,允许你在集群上并行化和分布计算。借助 Ray,MapnStreets 能够以闪电般的速度下载和处理超过 3,000 个文件!
这些出色的软件包及其支持的依赖项构成了 MapnStreets 的强大引擎,可提供高效的数据处理和有趣的可视化效果。
预处理:数据准备的魔力
在讨论 MapnStreets 的前端方面之前,让我们先看看数据预处理的神奇世界。以下是实现奇迹的方式。
- 获取数据:
我们首先向美国人口普查局提供的可用 TIGER/Line® Edges 分区 列表发送 GET 请求。然后,我们借助 BeautifulSoup 解析响应内容,以收集所有文件 URL。
- 下载和处理 shapefile:
有了文件 URL 后,我们便开始下载所有压缩的 shapefile!为了确保幂等下载并避免冗余处理,我们使用了一个巧妙的技巧。在下载每个 shapefile 之前,我们使用 done_path 变量检查是否存在相应的“.done”文件。如果文件已存在,我们会顺利跳过下一个文件,从而节省宝贵的时间和资源。文件下载完成后,我们将其加载到 GeoPandas 中,但由于 Parquet 本身不支持几何类型,因此我们使用了另一个技巧,我们将几何列转换为众所周知的文本 (WKT) 格式,以便将其导出为 Parquet!
- 使用 Fugue 和 Ray 拥抱并行化
使用 Fugue,你可以使用任何你喜欢的分布式计算后端,无论是 Dask、Ray 还是 Spark!在这里,选择 Ray 是因为它具有自动进度条。
完成这些步骤后,我们便为 MapnStreets 大放异彩准备好了舞台。街道名称的世界近在咫尺,等待着你用 MapnStreets 探索!
Web 应用程序:所有街道的地图
现在你已经了解了它的技术原理,让我们看看 MapnStreets 在前端是如何工作的。
- 满足好奇心 🧐
打开 MapnStreets 后,你会看到一个输入框。你可以在这里输入你感兴趣的街道名称。假设你输入“主街”。这时,神奇的事情就开始了!
- 神奇的发生 ✨
MapnStreets 开始行动!它使用 Fugue 基于你输入的名称并行查找街道数据,并且它可以出色地扩展,无论你拥有两个 CPU(HuggingFace 免费层)、四个 CPU 还是 n 个 CPU!它使用参数化的 SQL 查询进行过滤,瞧!它输出一个包含关于美国各地那些“主街”的所有重要信息的 DataFrame。DataFrame 的几何列使用 `wkt.loads` 反序列化,然后转换为 GeoPandas GeoDataFrame!
- 可视化、探索、重复 🗺️
现在,是时候可视化这些“主街”了!MapnStreets 使用 GeoViews 创建交互式地图。地图显示了美国所有“主街”的位置。你可以放大、缩小和探索不同的区域。这就像在虚拟街道名称世界中进行冒险!MapnStreets 还提供了一个表格,突出显示了每条“主街”的准确位置。它就像一张藏宝图,指引你找到每条“主街”的位置。太酷了,对吧?
最棒的是什么?这一切都在 Python 中完成,这得益于 Panel 的魔力。用户界面流畅、响应迅速,并且超级引人入胜。这就像在你指尖拥有自己的个人街道名称浏览器。
使用 MapnStreets 满足你的好奇心!
MapnStreets 是街道名称爱好者的终极应用程序。它将 Fugue、Panel、GeoPandas、GeoViews、Parquet、DuckDB 和 Ray 结合在一起,为你带来交互式且视觉上令人惊叹的体验。因此,下次你遇到一条街道名称很独特时,就用 MapnStreets 满足你的好奇心。它是探索美国各地街道名称的流行程度和位置的完美方式。祝你街道名称狩猎愉快!🚗🗺️