【问题标题】:Reformat census title重新格式化人口普查标题
【发布时间】:2013-02-01 03:54:19
【问题描述】:

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

例如:'471570001022022'

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

''Block 2022, Block Group 2, Census Tract 1, Shelby County, Tennessee'

块 id 的格式为: state-county-tract-group-block,用一些前导零组成 15 个字符。 sscccttttggbbbb

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

谢谢, 通用

【问题讨论】:

  • 来自人口普查:'Block 2022, Block Group 2, Census Tract 1, Shelby County, Tennessee',但我需要读取:'471570001022022'。
  • 您如何获得州和县名称及其数字表示之间的映射?

标签: python gis census


【解决方案1】:

嗯,我明白了。

ex = 'Block 2022, Block Group 2, Census Tract 1, Shelby County, Tennessee'

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

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

【讨论】:

  • 最佳答案:从人口普查页面上的“事实查找器”中的给定选项下载正确的格式。 csv 提供了一个格式正确的 ID 字段。
  • plus:格式为 ss-ccc-tttttt-bbbb(州、县、道、块)且块组不存在。使用它,我使用 dict{} 来查找小册子并提供正确的格式。然后当我找到下载选项时,我把它刮掉了。
【解决方案2】:

使用 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

【讨论】:

    【解决方案3】:

    假设 this data 是正确的,并且您已将其解析为两个字典,state_idscounty_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)
    

    【讨论】:

    • 当我回到工作场所看看情况如何时,我会这样旋转。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多