使用GeoPandas处理地理空间数据:从数据加载到可视化

引言

在地理空间数据处理领域,GeoPandas是一个强大的工具,它简化了在Python中处理地理数据的流程。通过扩展Pandas的数据类型,GeoPandas允许在几何类型上进行空间操作。同时,它结合了Shapely、Fiona和Matplotlib等库的强大功能。本篇文章将指导你如何使用GeoPandas加载、处理和可视化地理空间数据,特别是来自开放城市数据的实际应用。

主要内容

1. 安装必要的库

为了开始使用GeoPandas,我们需要安装几个Python库。确保你已经安装了以下库:

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

2. 加载开放城市数据

GeoPandas可以很容易地与开放数据API结合。本例中,我们将使用San Francisco的犯罪数据。由于某些地区的网络限制,可能需要考虑使用API代理服务。

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

# 使用API代理服务提高访问稳定性
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])

3. 创建GeoPandas DataFrame

将普通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. 数据可视化

使用Matplotlib可视化GeoPandas DataFrame中的地理数据。

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()

常见问题和解决方案

  1. API访问问题:由于网络限制,建议使用API代理服务保障访问稳定性。
  2. 数据转换错误:检查CSV或JSON结构,确保字段正确对应。
  3. 可视化问题:确保Matplotlib和GeoPandas兼容版本。

总结和进一步学习资源

通过本文的学习,你已经掌握了如何使用GeoPandas加载、处理和可视化地理数据。GeoPandas与Shapely结合的能力非常强大,适合更复杂的空间分析。

进一步学习资源

参考资料

  1. GeoPandas GitHub
  2. Open City Data API

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值