2

我的任务是在区块级别挖掘人口普查数据。在学习了如何导航并找到我要找的东西后,我遇到了障碍。tabblock 多边形(块级多边形)的 id 由 15 个长度的字符串组成,

例如:'471570001022022'

但人口普查数据的格式标记为:

“田纳西州谢尔比县人口普查区 2022 区块组 2”

块 ID 的格式为:state-county-tract-group-block,带有一些前导零以构成 15 个字符。sscccttttggbbbb

有谁知道将其转换为可用格式的快速方法?在我花时间尝试编写 python 脚本之前,我想我会问一下。

谢谢,gm

4

3 回答 3

1

假设此数据是正确的,并且您已将其解析为两个字典,state_ids并且county_ids,其中键是实体的字符串表示形式,值是字符串形式的数字表示形式:

def get_tabblock_id(tabblock_string):
    block, block_group, tract, county, state = re.match('Block (\\d+), Block Group (\\d+), Census Tract (\\d+), (.+), (.+)', tabblock_string).groups()
    return state_ids[state].zfill(2) + county_ids[county].zfill(3) + tract.zfill(4) + block_group.zfill(2) + block.zfill(4)
于 2013-01-31T19:54:19.303 回答
1

好吧,我明白了。

ex = '田纳西州谢尔比县人口普查区 2022 街区组 2'

new_id = '47157' + ex[40:len(ex)-26].zfill(4) + '0' + ex[24] + ex[6:10]

州和县的值是恒定的;块组仅达到一位数(afaik)。

于 2013-01-31T19:37:30.210 回答
1

使用 struct 可能更整洁

>>> import struct
>>> r = '471570001022022'
>>> f = '2s3s4s2s4s'
>>> struct.unpack(f, r)
('47', '157', '0001', '02', '2022')
>>> s, c, t, g, b = unpack(f, r)
>>> print s
47
于 2013-01-31T19:40:29.087 回答