2

私は、国勢調査データをブロック レベルで掘り下げる任務を負っています。ナビゲートして探しているものを見つける方法を学んだ後、思わぬ障害にぶつかりました。タブブロック ポリゴン (ブロック レベルのポリゴン) には、長さ 15 の文字列で構成される ID があります。

例: 「471570001022022」

ただし、国勢調査データの形式には次のラベルが付けられています。

「ブロック 2022、ブロック グループ 2、国勢調査区 1、シェルビー郡、テネシー州」

ブロック ID は次のようにフォーマットされます: state-county-tract-group-block、先頭にゼロを付けて 15 文字にします。ssccctttttggbbbb

これを使用可能な形式にする簡単な方法を知っている人はいますか? Python スクリプトの作成に時間を費やす前に、質問しておこうと思いました。

ありがとう、GM

4

3 に答える 3

1

さて、私はそれを手に入れました。

ex = 'ブロック 2022、ブロック グループ 2、国勢調査区 1、シェルビー郡、テネシー'

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

州と郡の値は定数です。ブロック グループは 1 桁にしか移動しません (afaik)。

于 2013-01-31T19:37:30.210 に答える
1

構造体を使用すると、よりきれいになる可能性があります

>>> 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 に答える
1

このデータが正しいと仮定し、それを 2 つの辞書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 に答える