組み合わせの決め方と、分析側が整えるデータ(設計メモ)
令和8年度 千葉県地域医療提供体制データ分析チーム構築支援事業 / 指標ファーストの操作設計と、データ整備の考え方
この資料は、可視化ツールの
操作設計の考え方 (なぜ指標から選ぶのか、できない組み合わせをどう判別するのか)と、それを支える
データの整え方の要点 をまとめた設計メモです。位置づけは次のとおりで、詳細は正となる資料に委ねています。
データの正式な仕様 (ファイル構成・列定義・コード体系・検証ルール)は「データパック仕様書(分析班向け) 」が正です。本書には要点のみを置きます。
見せ方の一覧と「見せ方 × データ型」の対応 は、インタラクティブ図解の対応マトリクス が正です。本書には重複した対応表を置きません。
本書に固有の内容は、指標ファーストという操作設計の考え方 ・可否の判定ロジック ・サンプルデータが地図やグラフになる実例 ・施設単位データの扱い です。
1 指標(データ項目)ファースト ― 操作設計の考え方
指標を先に選び、その指標に宣言された「型(dtype)」と「軸」から、使える見せ方を自動的に決める。
職員は「何を見たいか(=指標・データ項目)」で考えるため、指標ファースト が入口として自然です。
選んだ指標の dtype (single/comp/flow/point)と軸 (datasets.csv の region_axis_id・filter_axes)から、使える見せ方だけを活性化 します。使えないものは灰色で「この指標では選べません」と示します。
2指標の掛け合わせ は「比較する指標を追加」という操作にし、どちらも single 型・同じ地域軸のときだけ 選べるようにします(二変量地図・散布図)。職員が“できない組み合わせ”に触れません。
この順序は既存プロトタイプで実装済み です(指標を選ぶ → 見せ方が自動で切り替わる → 比較指標を足す → 条件で絞り込む → 図と表を切り替える → 出力する → お気に入りに保存する)。
1 指標を選ぶ 例:手術実施率(dataset_id=surg_rate)
→
2 型・軸を読む dtype=single / region_axis_id=med9 / filter_axes=year;cancer;age
→
3 使える見せ方が出る 色分け地図・棒グラフ地図・ランキング・ヒートマップ
→
4 必要なら比較指標を足す single ×2 で二変量地図・散布図に切り替わる
なぜ「型を先に選ぶ」形にしないのか
A. 指標ファースト(採用)
指標を選ぶ → 宣言された型・軸から見せ方が自動で決まる。
長所
「何を見たいか」で操作でき、職員の語彙のまま進める。
不可能な組み合わせを提示しないので迷わない。
指標を足す=比較、と操作が自然に拡張する。
留意
構成比(comp)・フロー(flow)も「1つの指標」として指標リストに並べる必要がある(datasets.csv が1行=1指標なので、この形で成立している)。
B. 型ファースト(不採用)
データの種類(単値・構成比・フロー・施設点)を先に選ばせる。
長所
型ごとに見せ方が固定されるため実装は単純。
構成比・フローの存在を最初から明示できる。
留意
「型」は分析側の語彙 であって職員の語彙ではない。抽象概念を先に理解させることになる。
実装上はどちらも同じ dtype・軸のメタデータ で動きます。違いは“入口”だけなので、入口として自然な A を採っています。迷いを減らすため、よく使う組み合わせを少数の入口(テンプレート)として用意することもできますが、中身は同じ仕組みで動きます。
2 「できる/できない組み合わせ」の判定ロジック
可否は、選んだ指標の dtype と軸 が、各見せ方の要求する形 を満たすかで決まります。アプリはこれを機械的に照合し、満たさない見せ方を自動で選べなくします。判定に必要な情報はすべて datasets.csv の宣言に入っているため、指標ごとの画面の作り込みは不要 です。
判定ルール(擬似コード):
見せ方が使える = (指標.dtype が 見せ方の受け入れる型 に含まれる) かつ (見せ方が必要とする軸が 指標の region_axis_id / filter_axes に揃っている)
2指標の見せ方(二変量地図・散布図):もう一方の指標も dtype=single で、同じ地域軸・同一粒度 のときだけ選択可。
表:どの dtype でも可(常に出せるフォールバック)。
例:「平均在院日数」は single なので 色分け地図・棒グラフ地図・ランキング・ヒートマップが有効。二変量地図・散布図は「もう1つ single の指標」を足したときだけ有効になり、足すと今度は1指標用の見せ方(色分け地図・ランキング等)が対象外になります。構成比(comp)・フロー(flow)は型が違うので比較指標には選べません。この判定は職員に見える形(灰色)で表現します。
見せ方の一覧・対応表は「図解」が正
見せ方は全15種 (地図7・図7・表1)あります。どの見せ方がどのデータ型で使えるか、それぞれの読み方・注意点・分析項目への割付は、インタラクティブ図解の「見せ方 × データ型 対応マトリクス」および各見せ方のページ にまとめてあります(実装のロジックと一致させています)。本書には重複した対応表を置きません。
3 データの「型」は4種類(single・comp・flow・point)
1つの指標には必ず1つの型(dtype)を宣言します。型は次の4種類だけ で、使える見せ方はこの型から自動判定されます。
dtype 意味 values の主な列(型別の規約) 主な見せ方
single (地域単値) 地域を決めれば値が1つ決まる region, value, suppressed (+ year 以外の絞り込み軸列) 色分け地図/棒グラフ地図/ランキング/ヒートマップ (2つそろえて二変量地図・散布図)
comp (構成比) 地域ごとに合計100%になる内訳 region, category, value, suppressed (category は category_axis_id の軸を参照) 構成比/構成比地図
flow (ODフロー) 2地点間の量(どこから→どこへ) from_region, to_region, value, suppressed 受療動向フロー(地図)/受療動向サンキー
point (施設点) 施設ごとの位置と値 facility_id, name, region, lat, lon, {value_columns で宣言した指標列}, suppressed 施設点マップ/資源配置マップ/スコアカード/資源マトリクス
「クロス集計」は独立した型ではありません。 「地域 × がん種」「病院 × 医療圏」のようなクロス集計は、single の filter_axes に軸を宣言することで表現 します(軸の組合せごとに値が1つなら single です)。ヒートマップも single +カテゴリ軸で描きます。施設単位の値も region_axis_id=facility の single として持たせられます。
同様に「2指標」も型ではありません 。single の指標を2つ、同じ地域軸でそろえたときにだけ選べる見せ方の条件 です。
4 分析側が整えるデータ(要点)
ツールに渡すのはデータパック1式だけ です。個票は渡しません(集計・秘匿は分析側で完結)。ここでは考え方に関わる要点だけを示します。列定義・コード体系・検証ルールの正式な仕様は「データパック仕様書(分析班向け) 」 にあります。
パックの構成 中身 考え方の要点
master/axes.csv 軸マスタ。地域・がん種・年齢層などのドメイン軸 の選択肢(axis_id, code, label, sort, parent…) 年(時間)は書きません(暦から機械的に決まるものに誤記の窓口を作らないため)。曜日・時間帯・シナリオは循環的分類/業務判断の軸なのでここに書きます。施設軸は facilities.csv から自動導出 されるため書きません。
master/datasets.csv 指標カタログ。1行=1指標 (dataset_id, name, unit, dtype, region_axis_id, filter_axes, value_format, agg, disclosure_threshold, source, description …) 指標を増やす=1行足す だけで画面の選択肢に加わります。description はそのまま画面の用語ヘルプに出ます。
values/{dataset_id}/ {年度}.csv 実際の集計値。1行=1観測 年度はファイル名で表現し、行に year 列を持ちません。 年度更新は新年度ファイルを追加するだけ で、確定した過去年度のファイルは変更しません(追記オンリー)。
values/{dataset_id}.csv 年度に依存しないデータ(施設マスタ等) 単一ファイルのままにします。
geo/{axis_id}.topojson 地域境界(TopoJSON・WGS84) properties.code が axes.csv の code と一致することが結合キーです。新しい地域分けは軸1式+同名ファイルの追加で画面に出ます。
values の列は「型ごとの規約」で決まる(規約駆動)
values 各CSVの列は、datasets.csv の宣言から一意に決まります (dtype・filter_axes・series_type・category_axis_id・value_columns・from_axis_id/to_axis_id)。
列仕様を別ファイルで宣言する必要はありません。 検証ツールが「型別の必須列がすべて存在し、余分な列がない」ことを実CSVと機械照合します(列順は自由)。
例:dtype=single・filter_axes=year;cancer;age ⇒ values/surg_rate/2024.csv の列は cancer, age, region, value, suppressed(year はファイル名で表現)。
時間・推計・基準線の宣言(datasets.csv)
欄 意味と、なぜ要るのか
year_start 04-01=年度(会計年度) /01-01=暦年 。ファイル名は同じ 2024 でも、年度か暦年かはこの欄でしか判別できません 。画面ラベルを「2024年度」「2024年」と自動で出し分けるために使います(書き忘れると1年ずれた比較が起きます)。
series_type actual=実績/projection=将来推計。推計は values に time 列(対象年)を持ち、ファイル名の年は推計の発行時点(ヴィンテージ) を表します。画面は推計を実績と区別して表示します。
reference_value 閾値線・基準線の値 。宣言された値の基準線をグラフ・表に引きます(空欄=線を引かない)。どの値を基準とするかは県との協議事項で、仕様は「宣言された値を描く」仕組みだけを定めます。
from_axis_id to_axis_id flow の出発側/到着側の軸 。省略時は両方とも region_axis_id(医療圏→医療圏)。to_axis_id=facility と書けば列は from_region, to_facility となり「住所地(医療圏)→受診先(施設)」を表せます。
時間は年ベースのみ です(県確認済み)。時間の粒度は年に限定し、月次・週次の仕組みは含めません。ファイル分割の単位も年(納品単位)で統一します。なお曜日・時間帯は「時系列の粒度」ではなく年内の内訳集計軸 なので、時間ではなく axes.csv のドメイン軸として扱います。
秘匿処理・欠測の扱い(分析側で完結)
欠測=空欄 。秘匿セル=空欄+同行の suppressed に 1 。閾値未満の実数値はパックに入れません 。行ごと消すと「データなし」と「秘匿」の区別がつかなくなるため、行は残します 。
秘匿の検証は4型すべてが対象 です(構成比の内訳区分や施設別の指標列も、実数が閾値未満なら秘匿対象になりうるため)。
構成比は、秘匿行を含む地域・年度(×フィルタ組合せ)の「合計100±0.5」チェックを免除 し、警告として記録します(秘匿分が欠けるため合計は100に満たない)。1区分だけを秘匿しても合計から逆算できる ため、二次秘匿の要否は分析班の判断です。
アプリは suppressed を「*(秘匿)」・地図では灰色の「表示なし」として表示するだけで、閾値判定・二次秘匿は行いません 。
更新運用(要点)
年度更新 =values/{dataset_id}/ に新年度ファイルを追加して新版パックを発行。確定した過去年度は変更しません(版間差分照合 で「過去データを改変していないこと」を機械的に確認できます)。
新しい指標 =datasets.csv に1行+values にCSV。新しい地域分け =axes.csv に軸1式+geo に同名ファイル。いずれもアプリ改修なし で画面に出ます。
発行前に検証ツール が機械チェックし(列規約・コード整合・地図結合・一意性・秘匿・数値規約・manifest・版間差分)、エラーがあれば発行できません。
県担当者は受け取ったzipを管理画面からアップロード → 適用前の再検証 → 適用 します(版数履歴から1クリックで旧版に戻せます)。
5 サンプルデータ → 地図・グラフ表現(実例)
ここでは、分析側が整える values の実CSV が、ツール上で 実際にどの地図・グラフになるか を、
実在の千葉県の地理(国土数値情報の市区町村境界)を用いて示します。ツールはCSVの値を色や矢印に機械的に割り当てるだけ で、数値の意味(良い・悪い)は解釈しません。
1 分析側がCSVを整える dtype 別の列規約どおりに用意
2 コードで地図に結合 region=axes.csv の code=geo の properties.code
3 値を色/帯/矢印へ割当 アプリが描画(意味は判断しない)
4 県職員が分布を読む 解釈・政策判断は人が行う
例A:single(地域単値)→ 色分け地図(コロプレス)
dtype=single / values/surg_rate/2024.csv / 列:region, cancer, age, value, suppressed
▼ 分析班へ依頼するCSV(例:手術実施率 surg_rate を医療圏別に。1行=1つの集計値。年度はファイル名で表現)
region (名称) cancer age value suppressed
chiba (千葉) all all 59
tokatsu_s (東葛南部) all all 62
tokatsu_n (東葛北部) all all 57
inba (印旛) all all 49
kaiso (香取海匝) all all 45
sanbu (山武長生夷隅) all all 41
ichihara (市原) all all 54
kimitsu (君津) all all 47
awa (安房) all all 43
kaiso (香取海匝) lung 85 1
地図になる仕組み: CSVの region (例 tokatsu_s)を、geo/med9.topojson の properties.code で結合します。アプリは value を 5段階に区分して色に対応づけて塗る だけで、値の高低の意味は判断しません。(名称は axes.csv の label で対応。CSV本体はコードのみで可)
→ tokatsu_s 東葛南部=62 は最上位クラスとして最も濃い青で表示。
→ sanbu 山武長生夷隅=41 は最下位クラスとして最も薄い青。
→ suppressed=1 の行(少人数セル)は value を空欄にして渡し、地図では灰色「表示なし」。行は消しません。
― ツール上の表示イメージ(千葉県・二次医療圏/実地理)―
手術実施率(%)
40
65
表示なし(秘匿)
例B:comp(構成比)→ 構成比地図(各医療圏に帯を重ねる)
dtype=comp / values/treatment_mix/2024.csv / single との違い=category 列が1本増える (各地域で合計100)
― 構成比地図の表示イメージ(治療選択の内訳)―
手術(surgery)
放射線(radiation)
薬物(chemo)
無治療(none)
▼ 依頼するCSV(区分ごとに1行。地域ごとに合計が100になる内訳)
region (名称) category value suppressed
chiba (千葉) surgery 58
chiba (千葉) radiation 14
chiba (千葉) chemo 20
chiba (千葉) none 8
inba (印旛) surgery 49
…(印旛・安房も同様に4区分=4行ずつ。各医療圏で合計100)
single からの差分はこれだけ: category の列が1本増え、1つの地域が区分の数だけ行に分かれます(ロング形式)。区分のコードは datasets.csv の category_axis_id で指定した軸(ここでは treatment:手術/放射線/薬物/無治療)を参照します。アプリはこの内訳を各医療圏の 帯グラフ として地図上に重ね、構成の地域差を見せます。結合キーは single と同じ region です。
例C:flow(ODフロー)→ 受療動向フロー(住所地→受診先を矢印で)
dtype=flow / values/patient_flows/2024.csv / 地域の列が from_region・to_region の2本 になる
▼ 依頼するCSV(住所地→受診先の患者数。1行=1つの流れ=1本の矢印)
from_region (住所地) to_region (受診先) value suppressed
awa (安房) chiba (千葉) 210
kimitsu (君津) chiba (千葉) 160
sanbu (山武長生夷隅) chiba (千葉) 190
inba (印旛) tokatsu_n (東葛北部) 140
フローの見せ方: アプリは from_region と to_region のコードを両端の重心に結び、矢印の太さ=value(人数) で描きます。既定では出発側・到着側とも同じ地域軸ですが、datasets.csv で to_axis_id=facility と宣言すれば列は from_region, to_facility となり、「住所地(医療圏)→受診先(施設)」 のフローも同じ型で表せます。
→ 安房→千葉=210 が最も太い矢印。周辺から千葉への集約の分布が見える。
→ 地域内で完結した患者は描かれないため、流出の矢印だけで読まず自給率と併せて 確認します(判断は人が行う)。
3例に共通するのは、dtype 別の列規約さえ守れば、アプリの追加開発なしに地図へ描き分けられる という点です。分析側は型(single/comp/flow/point)に沿って列を用意することに集中すればよく、地図の作り込みはアプリが担います。
6 施設単位(point型)データ ― 実データ軸の例
「二次医療圏で集計」は表示粒度の選択 で、データの限界ではありません。入院系の多くは個別の病院単位 で公開されており(病床機能報告 個票・DPC退院患者調査)、施設の位置(緯度経度) も国土数値情報で取得できます。point 型は values/facilities.csv (年度に依存しないため単一ファイル)に facility_id, name, region, lat, lon, {value_columns で宣言した指標列} を持たせる形で、施設軸(facility)の選択肢はこのファイルの facility_id から自動導出 されます(軸マスタとの二重管理を避けるため)。ここでは実在の千葉県主要病院を実位置に 点で表示し、素材となる参照データ2種のカラム構成を、スイッチで切り替えて 確認できます。
円の大きさ=許可病床数(病床機能報告)
開設者:
大学病院系
自治体(県・市)
公的(日赤・独法等)
医療法人
円の大きさ=値の大小(面積比=平方根スケール)。位置は実在の緯度経度(同一投影で市町村境界に整合)。
下のスイッチで、地図に重ねている2つの参照データ の「カラム構成(データ辞書)と実サンプル行 」を切り替えて確認できます(現在表示中のデータが地図の円の大きさに反映されます)。これらを point 型の規約に整えたものが values/facilities.csv です。
A 病床機能報告 個票
B DPC退院患者調査(施設別)
出所:病床機能報告 個票 (千葉県オープンデータ・圏域別に病院/有床診療所の個票を公開)。位置は国土数値情報 医療機関(P04) の緯度経度で付与。値は公開値ベースの機能イメージ(機能別内訳は例示)。
カラム構成(データ辞書)
カラム 型/単位 説明
facility_id コード 医療機関コード(施設の識別子。施設軸の選択肢はこの列から自動導出)
name 文字 医療機関名
address 文字 所在地(市区町村・住所)
region コード その施設が所在する二次医療圏(結合キー)
opener 区分 開設者(国立大学法人/県/市/日赤/医療法人 等)
beds_total 床 許可病床数(合計)
func_kodo 床 高度急性期 病床数
func_kyusei 床 急性期 病床数
func_kaifuku 床 回復期 病床数
func_mansei 床 慢性期 病床数
lat, lon 度 緯度・経度(WGS84。P04で付与=地図の点)
実サンプル行(抜粋)
医療機関名 医療圏 開設者 許可病床 高度急性 急性 回復 慢性
総合病院国保旭中央病院 香取海匝 地方独法 989 60 720 90 119
千葉大学医学部附属病院 千葉 国立大学 850 320 530 0 0
亀田総合病院 安房 医療法人 865 100 600 90 75
松戸市立総合医療センター 東葛北部 市 600 80 520 0 0
value_columns の宣言例: beds_total;func_kodo;func_kyusei;func_kaifuku;func_mansei と datasets.csv に書けば、この5列が施設単位の指標として画面に出ます。
出所:DPC導入の影響評価に係る調査「退院患者調査」 (施設別に公表=病院情報の公表)。10件未満は「-」でマスク(秘匿) 。施設IDでP04の位置に接続。値は機能イメージ。
カラム構成(データ辞書)
カラム 型/単位 説明
facility_id コード 告示番号・通番(施設の識別子)
name 文字 施設名
dpc_total 人/年 年間退院患者数(DPC対象)
age_dist 人 年齢階級別 退院患者数(10歳刻み)
mdc_dist 人 診断群分類(MDC)別 患者数
alos_self 日 平均在院日数(自院)
alos_nation 日 平均在院日数(全国)
surg_major 件 診療科別 主要手術件数
suppressed フラグ 10件未満は値を空欄にし、この列に 1 を立てる(秘匿)
実サンプル行(抜粋)
施設名 年間退院患者 消化器(MDC06)例 平均在院日数(自院) 主要手術(例)
総合病院国保旭中央病院 22,300 2,850 11.8 4,120
千葉大学医学部附属病院 20,100 2,400 12.9 5,600
亀田総合病院 19,400 2,510 10.6 4,780
さんむ医療センター 3,450 210 13.2 (空欄)
秘匿の書き方: 公表側の「-」は、パックでは値を空欄にし suppressed=1 として渡します(行は残す)。秘匿の検証は point 型も対象です。
対応の要点: 分析側は「施設マスタ(facility_id・name・region・lat/lon・開設者区分) +施設別の集計値 (value_columns で宣言した病床数・患者数・機器の保有状態など)」を1ファイル1行=1施設 にまとめます。位置は国土数値情報P04(住所しかない場合はジオコーディング)。
なお「施設×年度」で値が変わるものは point ではありません 。同じ施設が何行にもなるため、region_axis_id=facility の single (年度別ファイル)として持たせます。施設を「地域」の代わりに使う考え方で、ランキングもヒートマップも同じ形で描けます。
7 まとめ(役割分担)
主体 やること
分析側(千葉大) 個票を集計・秘匿し、axes.csv(軸マスタ)+datasets.csv(指標カタログ)+values(年度別ファイル)+geo を整え、検証ツールでエラー0を確認して版数付きのデータパックを発行 する。指標を増やすときは datasets.csv に1行足す。
ツール datasets.csv を読み、選んだ指標の dtype と軸から使える見せ方を機械的に提示 。値を地図・グラフ・表で描画し、CSV/PNG/SVG・印刷で出力する。中身の良否は判断しない。
県担当者 受け取ったパックを管理画面から適用 (アップロード→適用前の再検証→版数・変更点の確認→適用/版数履歴からロールバック)。職員アカウントの管理も同じ画面で行う。パックの中身は編集しない。
県 各課・会議 指標を選んで分布を把握し、解釈・政策判断 を行う(所見メモ等に記入)。
この設計だと「できる組み合わせ/できない組み合わせ」はデータ(datasets.csv の宣言)が決める ため、画面の作り込みと分析データの整備を分離できます。分析側は“型・軸・説明・値”を整えることに集中すればよく、新しい指標や新しい地域分けはアプリ改修なしで画面に反映されます。
令和8年度 千葉県地域医療提供体制データ分析チーム構築支援事業 千葉大学医学部附属病院 企画情報部 / 資料一覧へ戻る