この教材は原論文と同じデータを読み込み、同じ手順で計算し直しています。画面に出る数値と図は、あなたのブラウザがその場で計算した結果です。
| 原論文が使ったデータ | SSDSE-C・SSDSE-A・国勢調査・小売物価統計 分析単位:都道府県 中核手法:階層的クラスタリング法・相関分析 |
|---|---|
| この教材が使うデータ |
|
| 原論文(PDF) | 家計調査を用いた消費重心と多変量解析による地域性の導出 統計活用奨励賞/井手 健太(法政大学経済学部経済学科) |
原論文と同じ粒度のデータは、この教材にも同梱しています。これを読み込めば、原論文と同じ細かさで分析をやり直せます(下の「🐍 ブラウザで動かす」でコードを書き換えて試せます)。ただし原論文が使った項目がすべて収録されているとは限りません。足りない項目は、上の「できないこと」に書いた出典から取ってくる必要があります。
▶ ここに書いてある分析は、ページ下部の「🐍 ブラウザで動かす」でそのまま実行できます(インストール不要)。動かしているのは code/2021_U4_katsuyo.py(263 行)そのものです。
このページの均一消費型の変動係数(図3)と都道府県クラスター分析(図4)は、以下の手順で自分で再現できます。コードの編集は不要です。(消費重心の地理分布=図1、東西型の経度順=図2は、人口重心の経緯度がSSDSE-Cに無いため、原論文の報告値を可視化します。)
data/raw/ フォルダに入れます。html/figures/ に自動保存されます。
総務省統計局の基幹統計「家計調査」(全国約9千世帯を対象に収入・支出などを毎月調査)の結果は、品目別の都道府県庁所在市ランキングとしてまとめられている。ランキングは特産物や支出の多い地域を直観的に把握でき幅広い層に有用だが、著者は次の欠点を指摘する。
①ランキング上位に入らなかった品目・都道府県の特徴が捨象される。②複数あるいは全体で総合的に評価しにくい。——そこで本研究は、ランキング形式以外の方法で、消費品目別の特徴と都道府県別の特徴をそれぞれ導出することを目的とする。前者には独自指標「消費重心」を、後者には多変量解析(クラスター分析)を用いる。
大学生・一般の部 家計調査・SSDSE-C・国勢調査・小売物価統計 消費重心(重みつき平均) 階層的クラスタリング(ウォード法) 相関・分散・標準化
著者は複数の公的統計を組み合わせている。中心はSSDSE-C(家計調査由来の品目別支出)である。
| 用途 | データ |
|---|---|
| 中心データ | SSDSE-C-2021:二人以上世帯・都道府県庁所在市別・食料品目別 年間支出金額(2018〜2020年の平均) |
| 消費重心の重み補正 | SSDSE-A-2021:一般世帯数(2015) + 平成27年「国勢調査」の人口重心の経緯度 |
| 都会・地方型の判定 | 令和2年「国勢調査 人口速報集計」の人口密度(1km²あたり) |
| クラスター分析の実質化 | 「小売物価統計」2019 の10大費目別 消費者物価地域差指数(食料)で割って実質値化→標準化 |
市区町村の人口重心は、各地点の座標を人口で加重平均して求める。著者は重み wi(人口)を家計消費額 Ci に置き換えた。
著者は品目を次の①〜⑤の優先順に抽出してグルーピングする。
| 類型 | 抽出の尺度 |
|---|---|
| ①特定地域型 | 全国平均と都道府県別平均の差が大きい品目(特産物) |
| ②東西型 | ①以外で、消費重心の経度が東西に特に外れた品目(上位下位10%) |
| ③都会・地方型 | ①②以外で、消費額と人口密度の相関が正(都会型)/負(地方型)の品目 |
| ④均一消費型 | ①②③以外で、都道府県間の分散が小さい品目 |
| ⑤その他 | 残った品目 |
品目別支出を変数、都道府県を個体として階層的クラスタリングを行う。クラスター間距離にはウォード法を用いた(分析はSPSS)。物価地域差指数で実質化し標準化した値を投入し、結合過程をデンドログラムで可視化する。
原論文の図1は、消費重心を日本地図上にプロットしたものである。本ページでは地図の代わりに、補表が報告した経度×緯度の散布図で再表現する(人口重心の経緯度はSSDSE-Cに無いため再計算不可)。
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | centroid_report = { # 西側(経度小)=表1「西」に対応 'たい': (136.457, 35.071), 'あじ': (136.626, 35.085), 'まんじゅう': (136.695, 35.227), '合いびき肉': (136.715, 35.166), '揚げかまぼこ': (136.741, 35.199), 'ぶり': (136.780, 35.208), 'さば': (136.784, 35.247), 'いわし': (136.807, 35.243), '牛肉': (136.825, 35.197), 'ちくわ': (136.836, 35.310), '焼酎': (136.848, 35.299), '即席麺': (136.872, 35.303), 'ふりかけ': (136.907, 35.337), '砂糖': (136.913, 35.327), 'しょう油': (136.943, 35.345), 'ソース': (136.932, 35.335), '鶏肉': (136.940, 35.321), # 東側(経度大)=表1「東」に対応 'まぐろ': (137.640, 35.482), 'ワイン': (137.569, 35.528), '魚介の漬物': (137.542, 35.690), 'しゅうまい': (137.523, 35.411), 'ほたて貝': (137.458, 35.737), 'ウイスキー': (137.450, 35.655), 'さやまめ': (137.434, 35.438), '塩さけ': (137.432, 35.661), '干しあじ': (137.389, 35.309), 'メロン': (137.388, 35.797), '洋食': (137.381, 35.472), '他の麺類': (137.368, 35.449), '他の酒': (137.348, 35.488), '紅茶': (137.343, 35.407), 'やきとり': (137.329, 35.466), 'さんま': (137.303, 35.557), 'オレンジ': (137.298, 35.448), # 参考:ほぼ中央(全体の重心付近)の主食 '米': (137.082, 35.423), } cr = pd.Series({k: v[0] for k, v in centroid_report.items()}).sort_values() print(' 西側(経度が小さい=西日本で相対的に多い, 報告値):') for name, lon in cr.head(6).items(): print(f' {name:8s} 経度 {lon:.3f}') print(' 東側(経度が大きい=東日本で相対的に多い, 報告値):') for name, lon in cr.tail(6).iloc[::-1].items(): print(f' {name:8s} 経度 {lon:.3f}') print(f' ※ 全品目の重心は経度137前後に集中(人口重心の加重平均のため)。' f' たい {cr["たい"]:.3f} 〜 まぐろ {cr["まぐろ"]:.3f} の幅で東西差を表現。') |
=== [2] 報告値:東西型 消費重心の経度(原論文 補表) ===
西側(経度が小さい=西日本で相対的に多い, 報告値):
たい 経度 136.457
あじ 経度 136.626
まんじゅう 経度 136.695
合いびき肉 経度 136.715
揚げかまぼこ 経度 136.741
ぶり 経度 136.780
東側(経度が大きい=東日本で相対的に多い, 報告値):
まぐろ 経度 137.640
ワイン 経度 137.569
魚介の漬物 経度 137.542
しゅうまい 経度 137.523
ほたて貝 経度 137.458
ウイスキー 経度 137.450
※ 全品目の重心は経度137前後に集中(人口重心の加重平均のため)。 たい 136.457 〜 まぐろ 137.640 の幅で東西差を表現。
図1保存: html/figures/2021_U4_fig1_ranking.png
図2保存: html/figures/2021_U4_fig2_scatter.png
②「東西型」は、消費重心の経度が東西に特に外れた品目である。図1と同じ報告値を経度順の横棒に並べ替えると、西日本寄り・東日本寄りが一目で分かる。
家計調査小分類の品目を①〜⑤の優先順位でグルーピングした結果(原論文 表1)。以下はすべて原論文の報告値である。
| 類型 | 主な品目(かっこ内は代表的な都道府県) |
|---|---|
| ①特定地域型 | あじ(長崎)、かつお(高知)、かに(福井・鳥取)、しじみ(茨城・島根)、かき貝(広島)、ほたて貝(青森)、たらこ(福岡)、かまぼこ(宮城)、かつお節・削り節(沖縄)、ぶどう(山梨)、桃(福島・山梨・長野・和歌山・岡山)、メロン(北海道・茨城)、カステラ(長崎) ほか |
| ②東西型(西) | たい、まんじゅう、合いびき肉、ぶり、さば、いわし、牛肉、ちくわ、焼酎、即席麺、ふりかけ、砂糖、ソース、鶏肉、しょう油、えび、焼肉 ほか |
| ②東西型(東) | まぐろ、ワイン、魚介の漬物、しゅうまい、ウイスキー、さやまめ、塩さけ、干しあじ、洋食、他の麺類、紅茶、やきとり、しらす干し、ようかん、さんま、オレンジ ほか |
| ③都会型 | 他の主食的外食、喫茶代、ジャム、ねぎ、ピーマン、トマト、他の乳製品、バター、サラダ、調理パン、ハム、うなぎのかば焼き、チーズ、いちご ほか(外食・加工品・調理食品が多い) |
| ③地方型 | ソーセージ、つゆ・たれ、カレールウ、しめじ、マヨネーズ、学校給食、スポーツドリンク、食塩、キャンデー、バナナ、アイスクリーム、スナック菓子、みそ、カップ麺、小麦粉、いか、中華そば ほか |
| ④均一消費型 | ケチャップ、ココア・ココア飲料、豆類、パスタ、あさり、干ししいたけ、酢、もやし、プリン、他の大豆製品、だいこん、すいか、生しいたけ、さつまいも、はくさい、ドレッシング ほか(都道府県間の分散が小さい) |
③都会型は外食関連・加工品・調理食品が多く、「都市のイメージ」と整合的。③地方型は都市圏の消費量ランキングで上位に上がらない品目、と著者は解釈している。
ここからは実データでの再現。原論文が使ったSSDSE-C(品目別支出)はSSDSEに収録されているので、均一消費型の変動係数と都道府県クラスタリングを自分で計算できる。まず読み込む。
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | raw = pd.read_csv(DATA_C, encoding='cp932', header=0) labels = raw.iloc[0] # 日本語ラベル行 body = raw.iloc[1:].copy() # 全国(R00000)+47都道府県 CODE_COL = raw.columns[0] # 'SSDSE-C-2026'(地域コード) PREF_COL = raw.columns[1] # '2023-2025年'(都道府県名) FOOD_TOTAL = 'LB00' # 食料(合計) # 品目列=ラベルが数字で始まらない(=カテゴリ小計でない)列のうち食料合計以降 item_cols = [c for c in raw.columns[5:] if not re.match(r'^\d', str(labels[c]))] item_name = {c: str(labels[c]) for c in item_cols} for c in [FOOD_TOTAL] + item_cols: body[c] = pd.to_numeric(body[c], errors='coerce') # 全国=R00000、都道府県=R01100〜R47201(県庁所在市) nation = body[body[CODE_COL] == 'R00000'].iloc[0] pref = body[body[CODE_COL] != 'R00000'].copy() print(f' 品目数(小分類): {len(item_cols)}') print(f' 都道府県数 : {len(pref)}(+全国平均1)') print(f' 食料合計 全国 : {int(nation[FOOD_TOTAL]):,} 円/年') # 各品目を「食料合計に対する支出割合(シェア)」に変換(世帯規模・物価水準の影響を緩和) share = pref[item_cols].div(pref[FOOD_TOTAL], axis=0) share.index = pref[PREF_COL].values |
=== [1] SSDSE-C 読み込み(実再現の準備) === 品目数(小分類): 212 都道府県数 : 47(+全国平均1) 食料合計 全国 : 1,085,539 円/年
187 188 189 190 191 192 193 194 195 196 197 198 199 | mean_share = share.mean() cv = share.std() / mean_share cv_named = pd.Series(cv.values, index=[item_name[c] for c in item_cols]) mean_named = pd.Series(mean_share.values, index=[item_name[c] for c in item_cols]) # 平均シェアが極端に小さい品目はCVが不安定なので、平均シェア上位半分に絞る keep = mean_named[mean_named >= mean_named.median()].index cv_keep = cv_named[keep].sort_values() print(' 均一消費型の候補(CVが小さい上位10品目・実データ):') for name, v in cv_keep.head(10).items(): print(f' {name:12s} CV={v:.3f}') print(' 参考:特定地域型の候補(CVが大きい上位8品目・実データ):') for name, v in cv_keep.tail(8).iloc[::-1].items(): print(f' {name:12s} CV={v:.3f}') |
=== [3] 実再現:均一消費型(シェア変動係数が小さい品目, SSDSE-C-2026) ===
均一消費型の候補(CVが小さい上位10品目・実データ):
他の調味料 CV=0.050
豚肉 CV=0.063
食用油 CV=0.075
チョコレート CV=0.077
乾燥スープ CV=0.077
アイスクリーム・シャーベット CV=0.078
バナナ CV=0.090
牛乳 CV=0.091
たまねぎ CV=0.092
ケーキ CV=0.092
参考:特定地域型の候補(CVが大きい上位8品目・実データ):
まぐろ CV=0.485
そうざい材料セット CV=0.455
魚介の漬物 CV=0.445
学校給食 CV=0.386
ぶり CV=0.376
緑茶 CV=0.371
他の主食的外食 CV=0.370
合いびき肉 CV=0.363
図3保存: html/figures/2021_U4_fig3_ols.png
原論文の主結果は、都道府県のクラスター分析(図2)だった。SSDSE-Cの品目別支出があれば実際に計算できるので、ウォード法で再現する。
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | nation_share = (nation[item_cols].astype(float) / float(nation[FOOD_TOTAL])) share_all = pd.concat([share, pd.DataFrame([nation_share.values], columns=item_cols, index=['全国平均'])]) Z_std = (share_all - share_all.mean()) / share_all.std() Zmat = Z_std.fillna(0.0).values link = linkage(Zmat, method='ward') labels_all = list(share_all.index) # 2分割・6分割のクラスター所属 c2 = fcluster(link, t=2, criterion='maxclust') c6 = fcluster(link, t=6, criterion='maxclust') grp2 = pd.Series(c2, index=labels_all) grp6 = pd.Series(c6, index=labels_all) print(' 大きく2グループに分割した結果(原論文:近畿以北 vs 中国以南):') for g in sorted(grp2.unique()): members = [m for m in labels_all if grp2[m] == g] print(f' グループ{g}({len(members)}): {" ".join(members)}') nat_grp = grp6['全国平均'] same_as_nation = [m for m in labels_all if grp6[m] == nat_grp and m != '全国平均'] print(f'\n 全国平均と同じクラスターに入った都道府県(原論文:愛知・三重・岐阜):') print(f' {" ".join(same_as_nation)}') |
=== [4] 実再現:クラスター分析(ウォード法, SSDSE-C-2026) ===
大きく2グループに分割した結果(原論文:近畿以北 vs 中国以南):
グループ1(17): 鳥取県 島根県 岡山県 広島県 山口県 徳島県 香川県 愛媛県 高知県 福岡県 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県 沖縄県
グループ2(31): 北海道 青森県 岩手県 宮城県 秋田県 山形県 福島県 茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県 三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県 全国平均
全国平均と同じクラスターに入った都道府県(原論文:愛知・三重・岐阜):
富山県 石川県 福井県 岐阜県 愛知県 三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県
図4保存: html/figures/2021_U4_fig4_timeseries.png
原論文はデンドログラム(図2)を類似度6〜7の段階で切り、6クラスターを得た。以下は原論文の報告値である。
| クラスター | 構成(原論文の記述) |
|---|---|
| A | 中部地方・近畿地方+広島:「大阪・兵庫・広島」に「滋賀・京都・奈良」「愛知・三重・岐阜」「富山・石川・福井」が順に加わる |
| B | 北海道・東北地方+新潟・長野:「岩手・宮城」「新潟・長野」「山形」と、「青森・秋田」「北海道」が合わさる |
| C | 関東地方+福島・静岡:「栃木・群馬」に「茨城」「福島・山梨」、「1都3県」に「静岡」が加わる |
| D | 九州地方+島根:「大分・宮崎・熊本」に「鹿児島」、「福岡・佐賀」「島根・長崎」が合わさる |
| E | 中国地方・四国地方:「徳島・愛媛・岡山」に「和歌山」「山口・香川」「高知」「鳥取」が順に加わる |
| F | 沖縄(単独) |
結合の順は D→E、B→C、(D+E)→F、(B+C)→A で進み、最終的に「近畿以北(A・B・C)」と「中国以南(D・E・F)」の2つにまとまる。全国平均のデータが「愛知・三重・岐阜」と同じクラスターを形成したことから、この3県が食料において最も平均的な消費をしていると分かる、と著者は述べる。
消費重心という独自尺度を含む複数の尺度で、①特定地域型(特産物)②東西型(西:たい・まんじゅう…/東:まぐろ・ワイン…)③都会・地方型(都会:外食・加工品/地方:みそ・カップ麺…)④均一消費型⑤その他、の5類型に整理。ランキング形式では取り上げられない大まかな地方ごとの傾向まで反映できた。
①特定地域型では、品目別全国平均消費割合との差を用いることで、ランキング上位品目の中でも特に特定地域で消費される品目のみを抽出できた。②東西型では、都道府県ごとの単純比較ではなく、全体のデータと人口重心を使って総合的な中心点(消費重心)を求め、経度でソートして西・東の傾向を抽出した。③都会・地方型では人口密度との相関を用い、都会型が外食・加工品中心という「都市のイメージ」と整合的な結果を得た。
本研究は、家計調査のランキング形式では埋もれてしまう下位の消費品目や都道府県間の特徴を、独自指標「消費重心」と多変量解析(ウォード法クラスタリング)で総合的に導出した点に価値がある。消費品目は5類型に、都道府県は近畿以北/中国以南→A〜Fの6クラスターに大別でき、食料消費の地域性が「位置する地方」で概ね説明できることを示した。愛知・三重・岐阜が全国平均に最も近いという発見も、ランキングでは得られないものである。
このページの均一消費型の変動係数(図3)と都道府県クラスター分析(図4)は、以下から再現できます。
🐍 再現コード(.py) 📊 SSDSE-C-2026.csv
※ 消費重心の地理分布(図1)と東西型の経度順(図2)は、人口重心の経緯度がSSDSE-Cに無いため、原論文 補表・表1 の報告値を可視化したものです。図3・図4は最新版 SSDSE-C-2026(2023-2025年)による近似的再現で、原論文(SSDSE-C-2021・2018-2020年・物価地域差指数で実質化)とは年次・前処理が異なります。
この研究を読むとき・まねするときに陥りやすい誤解を整理する。
クリックすると各用語の詳しい解説ページに移動できます。
この研究で使われている手法を、手を動かす順に説明する。
この研究の「記述的に地域性を可視化した」という結論は、次の研究の出発点になる。
再現コードを少し変えるだけで試せる課題を、易しい順に用意した。
cv_keep.head(14) を head(25) に変えて、どんな品目まで「均一に消費される」のか広げて眺めよう。cv_keep.tail(15) を表示し、CVが大きい=地域に偏る品目を確認。原論文の①特定地域型(あじ・かつお・メロン等)とどれくらい重なるか比べよう。fcluster(link, t=6, ...) の t を 3 や 8 に変えて、各クラスターの構成都道府県がどう変わるか観察しよう。linkage(Zmat, method='ward') の method を 'average' や 'complete' に変え、「近畿以北 vs 中国以南」の2大分割が保たれるか確かめよう。sklearn.decomposition.PCA で品目シェアを2主成分に圧縮し、47都道府県を散布図にプロット。クラスターの色分けと重ねて、地域構造を別角度から可視化しよう。Zmat をそのまま PCA(n_components=2).fit_transform() に渡せる。「多次元のデータを重心や樹形図で束ね、全体像を可視化する」発想は、現場でも広く使われている。
この研究を読んで浮かびやすい疑問に答える。
この論文を理解できたか、クリックで確認しましょう。間違えても解説が出ます。
このページの分析は、この画面の中でそのまま実行できます。
Python をインストールする必要も、CSV をダウンロードする必要もありません。
下のセルの 「▶ ブラウザで実行」 を上から順に押すか、
「▶ 最初から全部実行」 で一気に流してください。
表示されるのは、本文の図表とまったく同じ計算の結果です
(動かしているのは再現スクリプト code/2021_U4_katsuyo.py そのもの)。
コードは書き換えられます。「✏️ 書き換える」で数字や変数を変えて ▶ を押すと、 結果がどう変わるかをその場で確かめられます(元に戻すボタンつき)。 ページを開いた時点で裏で実行環境の準備が始まっているので、待ち時間はほとんどありません。 初回だけ実行環境の取得にインターネット接続が必要です。