GeoPandas是一个开源项目,旨在让Python中的地理空间数据处理变得更轻松。它扩展了Pandas的数据类型,以允许对几何类型进行空间操作。GeoPandas的几何操作由Shapely执行,文件访问依赖于Fiona,绘图则使用Matplotlib。
在这篇文章中,我们将介绍如何使用GeoPandas进行基本的地理空间数据操作,包括数据加载、处理和可视化。我们还将展示如何将处理后的数据用于LLM应用(如聊天和问答)中,通过将GeoDataFrame加载为文档进行下游处理。
主要内容
1. 安装必要的库
首先,我们需要安装一些必要的Python库,包括sodapy, pandas, 和 geopandas。
%pip install --upgrade --quiet sodapy
%pip install --upgrade --quiet pandas
%pip install --upgrade --quiet geopandas
2. 数据加载
我们将使用Open City Data API从旧金山获取犯罪数据。为了提高API访问的稳定性和速度,可以使用API代理服务。
import ast
import geopandas as gpd
import pandas as pd
from langchain_community.document_loaders import OpenCityDataLoader
# 获取旧金山犯罪数据
dataset = "tmnf-yvry" # San Francisco crime data
loader = OpenCityDataLoader(city_id="data.sfgov.org", dataset_id=dataset, limit=5000) # 使用API代理服务提高访问稳定性
docs = loader.load()
3. 数据处理
将获取的数据转换为Pandas DataFrame,并提取纬度和经度。
# 转换为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 DataFrame,并确保数据在旧金山范围内。
# 创建GeoPandas DataFrame
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. 数据可视化
加载旧金山地图数据并绘制犯罪数据点。
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 DataFrame作为文档
将处理后的GeoPandas DataFrame加载为文档,以便用于下游处理(如嵌入、聊天等)。几何数据将作为page_content列,其余列作为元数据。
from langchain_community.document_loaders import GeoDataFrameLoader
loader = GeoDataFrameLoader(data_frame=gdf, page_content_column="geometry")
docs = loader.load()
# 示例文档
print(docs[0])
常见问题和解决方案
- 地理空间数据格式不匹配:确保所有数据在转换为GeoPandas DataFrame之前具有一致的坐标系统。
- API访问限制:某些地区的网络限制可能会影响API的稳定访问,建议使用API代理服务来提高访问稳定性。
- 数据预处理:地理空间数据的预处理(如坐标转换、数据清洗)通常会消耗大量时间和资源,应提前考虑这些步骤。
总结和进一步学习资源
在这篇文章中,我们介绍了如何使用GeoPandas进行地理空间数据的处理和可视化,并展示了如何将这些数据集成到LLM应用中。GeoPandas是一个功能强大的工具,能让你方便地处理和分析地理空间数据。如果你对这个领域感兴趣,可以进一步学习:
参考资料
- GeoPandas Official Documentation: geopandas.org/
- Shapely Documentation: shapely.readthedocs.io/
- Fiona Documentation: fiona.readthedocs.io/
- Matplotlib Documentation: matplotlib.org/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---