総務省 e-Stat のデータ「平成22年国勢調査(小地域) 2010/10/01」の「年齢別(5歳階級、4区分)、男女別人口」で「千代田区(10KB)」のヘッダの意味を読み解いてみる。間違ってたらコメントいただけるとありがたい。
基本的には「定義書」に書かれているべきな気がするが、定義書も意味がよく分からないところが多々…。「連番」とか「階層」とか説明が必要が見当たらない。
データを眺めると、次のような MultiIndex
のカラムになっているように読める。
0 | 1 |
---|---|
KEY_CODE | |
HYOSYO | |
CITYNAME | |
NAME | |
HTKSYORI | |
HTKSAKI | |
GASSAN | |
T000573001 | 総数、年齢「不詳」含む |
T000573002 | 総数0~4歳 |
T000573003 | 総数5~9歳 |
T000573004 | 総数10~14歳 |
T000573005 | 総数15~19歳 |
T000573006 | 総数20~24歳 |
T000573007 | 総数25~29歳 |
T000573008 | 総数30~34歳 |
T000573009 | 総数35~39歳 |
T000573010 | 総数40~44歳 |
T000573011 | 総数45~49歳 |
T000573012 | 総数50~54歳 |
T000573013 | 総数55~59歳 |
T000573014 | 総数60~64歳 |
T000573015 | 総数65~69歳 |
T000573016 | 総数70~74歳 |
T000573017 | 総数15歳未満 |
T000573018 | 総数15~64歳 |
T000573019 | 総数65歳以上 |
T000573020 | 総数75歳以上 |
T000573021 | 男の総数、年齢「不詳」含む |
T000573022 | 男0~4歳 |
T000573023 | 男5~9歳 |
T000573024 | 男10~14歳 |
T000573025 | 男15~19歳 |
T000573026 | 男20~24歳 |
T000573027 | 男25~29歳 |
T000573028 | 男30~34歳 |
T000573029 | 男35~39歳 |
T000573030 | 男40~44歳 |
T000573031 | 男45~49歳 |
T000573032 | 男50~54歳 |
T000573033 | 男55~59歳 |
T000573034 | 男60~64歳 |
T000573035 | 男65~69歳 |
T000573036 | 男70~74歳 |
T000573037 | 男15歳未満 |
T000573038 | 男15~64歳 |
T000573039 | 男65歳以上 |
T000573040 | 男75歳以上 |
T000573041 | 女の総数、年齢「不詳」含む |
T000573042 | 女0~4歳 |
T000573043 | 女5~9歳 |
T000573044 | 女10~14歳 |
T000573045 | 女15~19歳 |
T000573046 | 女20~24歳 |
T000573047 | 女25~29歳 |
T000573048 | 女30~34歳 |
T000573049 | 女35~39歳 |
T000573050 | 女40~44歳 |
T000573051 | 女45~49歳 |
T000573052 | 女50~54歳 |
T000573053 | 女55~59歳 |
T000573054 | 女60~64歳 |
T000573055 | 女65~69歳 |
T000573056 | 女70~74歳 |
T000573057 | 女15歳未満 |
T000573058 | 女15~64歳 |
T000573059 | 女65歳以上 |
T000573060 | 女75歳以上 |
KEY_CODE
, HYOSYO
, CITYNAME
, NAME
, HTKSYORI
, HTKSAKI
, GASSAN
は先ほどの定義書に載っていない。
これらの意味が重要。
KEY_CODE
行政コード。桁数に応じて区画の大きさが変わる。桁数は 5, 9, 11 とあり、行政コードのコード体系から始めて組み立てられている。大きい区画と、それに含まれる小さい区画も両方行として存在している。並行して存在しているときは、大きい区画には合計値が入っている。
HYOSYO
KEY_CODE
の組み立てられたコード体系の深さ?
CITYNAME
一番大きな単位での土地の名前
NAME
一番小さな単位での土地の名前
HTKSYORI
「秘匿処理」が行われているかどうか。「秘匿地域」と「合算地域あり」の二種類があり、これらは相互の関係にある。
HTKSAKI
HTKSYORI
が「秘匿地域」になっている場合に値が入っている。
該当行の KEY_CODE
先頭 5 文字と連結して使う。
GASSAN
HtKSYORI
が「合算地域あり」になっている場合に値が入っている。
該当行の KEY_CODE
先頭 5 文字と連結して使う。
複数の地域を合算している場合はセミコロンで複数が連結されている。
pandas
こんな感じ?
import pandas as pd
opts = dict(
header=[0,1],
converters={i:str for i in range(7)}
)
txt_ = pd.concat([pd.read_csv(open(f, encoding="CP932"), **opts) for f in glob.glob("tblT000573C27*.txt")])
txt_columns = txt_.columns
txt_.columns = [c[0] if c[1].startswith("Unnamed:") else c[1] for c in txt_.columns]
txt = pd.concat([txt_[txt_.columns[:7]],
txt_[txt_.columns[7:]].applymap(lambda s: 0 if s in ("-","X") else int(s))], axis=1)
for ri,r in txt.iterrows():
for s in r["GASSAN"].split(";"):
if not s:
continue
t = r["KEY_CODE"][:5]+s
assert txt[txt["KEY_CODE"]==t].shape[0] == 1