様式1のペイロード項目詳細を扱いやすい形に変換する
前回に引き続き、様式1データを扱います。 まず、前回紹介したペイロードマスタを読み込みましょう。
payload = pd.read_csv('ペイロードマスタ.csv')
payload.head()
コード | ペイロー ド種別 | レコード必須 条件等 有 | 連番 | ペイ ロード番号 | 項目 必須 条件 有 | 項目名 |
---|---|---|---|---|---|---|
A000010 | 患者属性 | ○ | - | 1 | ○ | 生年月日 |
A000010 | 患者属性 | ○ | - | 2 | ○ | 性別 |
A000010 | 患者属性 | ○ | - | 3 | ○ | 患者住所地域の郵便番号 |
A000020 | 入院情報 | ○ | - | 1 | ○ | 入院年月日 |
A000020 | 入院情報 | ○ | - | 2 | ○ | 入院経路 |
A000020 | 入院情報 | ○ | - | 3 | ※A | 他院よりの紹介の有無 |
A000020 | 入院情報 | ○ | - | 4 | ※A | 自院の外来からの入院 |
A000020 | 入院情報 | ○ | - | 5 | ※A | 予定・救急医療入院 |
A000020 | 入院情報 | ○ | - | 6 | ※A | 救急車による搬送の有無 |
A000020 | 入院情報 | ○ | - | 7 | ※A | 入院前の在宅医療の有無 |
A000020 | 入院情報 | ○ | - | 8 | ※A | 自傷行為・自殺企図の有無 |
こんな感じのデータが出てくるはずです。
さて、このまんまでは煮ても焼いても食えません。
まずやるべきことは、コード
とペイロード番号
のセットを作り、項目名
と紐付けることです。
いかにも辞書型を使うケースですよね。
さて、Pythonの辞書型は{key : value}
のようにキーと値を紐付けるものです。
keyの部分は変更不可能なものなら何でも使うことが出来ます。例えば、リストは変更可能なのでキーに使えませんが、タプルは使えます。
(どんな用途があるか思いつきませんが、関数も変更不可能なのでキーに使えます)
なので、今回はコード
とペイロード番号
のタプルをキーにした辞書を作ってみましょう。
辞書内包表記を使うのが簡単です。
paydict = {(k1,k2):v for k1,k2,v in zip(payload['コード'],payload['ペイロード番号'],payload['項目名'])}
とすれば、
{('A000010', 1): '生年月日', ('A000010', 2): '性別', ('A000010', 3): '患者住所地域の郵便番号', ('A000020', 1): '入院年月日', ('A000020', 2): '入院経路', ('A000020', 3): '他院よりの紹介の有無', ('A000020', 4): '自院の外来からの入院', ('A000020', 5): '予定・救急医療入院',
このようにコード
とペイロード
のタプルをキーにした、項目リストが作れます。
逆転したものが欲しければ、
reverse = {v:k for k,v in paydict2.items()}
としてやるだけで、
{'24 時間以内の死亡の有無': ('A000030', 4), 'BurnIndex': ('M160010', 2), 'Hugh-Jones 分類': ('M040010', 2), 'ICD10 コード': ('A006040', 2), 'NYHA 心機能分類': ('M050010', 2), 'UICC 病期分類(M)': ('CAN0020', 5), 'UICC 病期分類(N)': ('CAN0020', 4), 'UICC 病期分類(T)': ('CAN0020', 3), 'UICC 病期分類(版)': ('CAN0020', 6), 'がんの初発、再発': ('CAN0010', 3),
このように、キーと値を逆転させた辞書が手に入ります。
「うーん、タプルの順番だけでコードとペイロード番号を管理するのは引っかかるぞ…」という向きには、名前付きタプルが使えます。
from collections import namedtuple Paykey = namedtuple('payload_key',['code','number'])
名前付きタプルは、その名の通り、タプルの要素に名前を付けて管理できます。ちょっと使い捨てクラスっぽいですね。
paydict = {Paykey(k1,k2):v for k1,k2,v in zip(payload['コード'],payload['ペイロード番号'],payload['項目名'])}
としてやれば、
{payload_key(code='A000010', number=1): '生年月日', payload_key(code='A000010', number=2): '性別', payload_key(code='A000010', number=3): '患者住所地域の郵便番号', payload_key(code='A000020', number=1): '入院年月日', payload_key(code='A000020', number=2): '入院経路', payload_key(code='A000020', number=3): '他院よりの紹介の有無', payload_key(code='A000020', number=4): '自院の外来からの入院', payload_key(code='A000020', number=5): '予定・救急医療入院', payload_key(code='A000020', number=6): '救急車による搬送の有無', payload_key(code='A000020', number=7): '入院前の在宅医療の有無',
このように要素に名前をつけて管理できます。
さて次回は、様式1データそのものの加工を行ってみましょう。