【问题标题】:Mapping gps coordinates with census tract Python用人口普查区Python映射gps坐标
【发布时间】:2021-10-10 09:15:00
【问题描述】:

我还没有找到解决我正在从事的一个小项目的困惑的答案。

我的目标是将人口普查区块 ID / block_fips 与我的数据框中的纬度/经度对匹配。

我之前没有使用过用于补充 Python 数据的 API。

这是一个经纬度数据集的 sn-p:

import pandas as pd
df = pd.DataFrame({'lat': [40.760659, 40.768254, 40.761573], 'lon': [-73.980420, -73.988639, -73.972628]})
print(df)

我遇到了人口普查转换 API https://www.fcc.gov/census-block-conversions-api。如果使用 Area API,我如何 (1) 获取然后 (2) 将“block_fips”与第一个 lat/lon 对匹配,在本例中,使用 Python 在 Anaconda 环境中的 Jupyter 笔记本中匹配“360610131001003”。

我希望的输出是:

dfcensus = pd.DataFrame({'lat': [40.760659, 40.768254, 40.761573], 'lon': [-73.980420, -73.988639, -73.972628], 'block': [360610131001003, 360610139003000, 360610112021004]})
print(dfcensus)

非常感谢您的任何意见!

【问题讨论】:

    标签: python pandas api geolocation census


    【解决方案1】:
    • 对 API 的逐行调用是最简单的方法
    • API 使用简单,使用 requests 构建 API 中记录的 URL 参数
    • 只需将此分配回数据框中的新列
    • 这是在 jupyter 实验室环境中运行的
    import requests
    
    url = "https://geo.fcc.gov/api/census/block/find"
    
    df = pd.DataFrame({"lat": [40.760659, 40.768254, 40.761573],
                       "lon": [-73.980420, -73.988639, -73.972628],})
    df.assign(
        block=df.apply(
            lambda r: requests.get(
                url, params={"latitude": r["lat"], "longitude": r["lon"], "format": "json"}
            ).json()["Block"]["FIPS"],
            axis=1,
        )
    )
    
    lat lon block
    0 40.7607 -73.9804 360610131001003
    1 40.7683 -73.9886 360610139003000
    2 40.7616 -73.9726 360610112021004

    【讨论】:

    • 你知道让代码更高效的方法吗?它在相对较小的数据集上效果很好,但是一旦有很多条目(即大的地理区域),它就会消耗很多时间。或者,如果它向网页发出请求,则无法提高速度(?)。
    • 优化将通过数据的特征进行。有多少个重复的长/纬度对?最昂贵的部分将是调用 API。减少不必要的 API 调用将是最简单/最有效的优化方法
    • 我只是快速编写了这个 API 调用。还有批处理接口吗?
    • 我不太确定你的意思,但它是一个大型 csv 文件(800000 行),可以在现场分析/运行。
    • 这很简单 - API 调用很昂贵。执行时间实际上是 API 调用的数量。减少 API 调用次数并减少执行时间。因此,如果有多行具有相同/相似的纬度/经度坐标给出相同的 bloc,则调用一次 API 进行组合以减少 API 调用次数并跨行重用结果
    猜你喜欢
    • 2012-10-19
    • 2019-01-01
    • 2017-12-29
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多