論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
Tableau
Tableau (BI / 可視化ツール)
BI / データ可視化

🔖 キーワード索引

このページで扱う主要キーワード(クリックで該当セクションへ):

ワークブック ディメンション メジャー ダッシュボード Tableau Public ストーリーポイント LOD 計算 ダブルカウント コホート分析 地理ロール Hyper / 抽出 REST API

💡 30秒で分かる結論

🍰 まずはやさしく

データの見た目を整える魔法の道具です。

データを分かりやすく図にするために使います。

部活の成績をグラフにして分析する時に便利です。

まずはこのツールの特徴について読みましょう。

📍 あなたが今見ているもの

🍰 まずはやさしく

統計を学ぶための案内図のようなページです。

言葉の意味を正しく理解するために使います。

スマホで調べ物をするように活用してください。

ここでは学習の流れと関連する言葉を説明します。

Tableau」 (Tableau (BI / 可視化ツール)) は、 SSDSE-B-2026 などの公的統計データを使った教材・分析で頻出するキーワードです。 本ページでは、 まず直感、 次に数式、 そして 47 都道府県の実値で確かめる、 という流れで体系的に整理します。 加えて、 ケーススタディ・FAQ・歴史的経緯・参考文献までを 1 ページに集約し、 用語の「地図」として使えるようにしました。

関連用語(前提・並列・発展)と関連グループ教材も末尾にまとめてあるので、 用語の地図として活用してください。

🎨 直感で掴む

🍰 まずはやさしく

パズルのように操作できる分析ツールです。

マウスで動かすだけでグラフが作れます。

買い物リストを整理して図にする感覚に似ています。

具体的な使い方の手順について解説します。

Tableau は元 Stanford 発の BI ツールで、 表データを「行(ディメンション)」「列(メジャー)」へドラッグするだけで集計・可視化を自動で行います。 マウス操作中心ですが、 内部は宣言的問い合わせ言語(VizQL)に変換され、 即時に SQL/Hyper エンジンへ伝わります。

典型的なワークフローは次の通り:

  1. CSV/Excel/DB を「データソース」として接続
  2. ディメンション(カテゴリ・地域・期間)とメジャー(人口・売上)を分離
  3. シート上にドラッグして 1 枚のグラフを作る
  4. 複数シートを「ダッシュボード」にまとめ、 共通フィルタで連動
  5. 「ストーリー」で時系列に並べてプレゼン化

SSDSE のような 「都道府県 × 年度 × 指標」 という長い行データは Tableau ととても相性が良く、 「都道府県を Maps に年度をフィルタに人口を色/サイズに」 と置くだけで、 日本地図のヒートマップが数秒で完成します。

🎮 Show Me ビルダー:棚に置くと図が決まる

Tableau の心臓部は 「フィールドをシェルフ(棚)に置くと、 配置の型から Show Me が図種を自動で選ぶ」という体験です。 下のミニビルダーで、 次元(青)測度(緑)列 / 行 / 色 / サイズの棚へドラッグしてみてください(スマホは長押しでドラッグ)。 素材は SSDSE-B-2026 の実測値(9 都道府県 × 12 年、 2012–2023)。 配置に応じて棒・折れ線・散布・ヒートマップがリアルタイムに切り替わります。

次元(ディメンション=分類軸)
測度(メジャー=集計する数値)
サイズ
集計:
図種: —

💡 直感:データを棚に置くと図になる

Tableau に「グラフを描け」と命じる場面はありません。 フィールドをどの棚に置いたかという配置そのものが図の設計図になります。 上のビルダーで確かめられる対応関係は次の通り:

「都道府県を列、 総人口を行」と置いた瞬間、 Show Me は GROUP BY 都道府県SUM(総人口) を求め棒に描く——マウス操作は裏で VizQL → SQL に翻訳されています。

⚠️ 落とし穴:測度/次元の取り違え・集計の誤り・過剰な要素

① 測度と次元の取り違え
「年度」は数字ですが Tableau では次元(分類軸)に置くべき軸で、 測度として SUM(年度) すると 「2012+2013+…」という無意味な合計に。 ビルダーで年度を行(測度扱い)に置くと図が崩れることで体感できます。
② 比率を SUM してはいけない
「高齢化率(%)」は既に割り算済みの比率。 集計を「合計」にすると 9 県の率を足して 200% 超という誤りに。 比率は平均、 あるいは SUM(65歳以上)/SUM(総人口) と分子分母を別々に集計してから割るのが正解。 上の集計トグルを合計↔平均で切り替えて差を確認してください。
③ 要素の過剰(載せ過ぎ)
色・サイズ・列・行に全部詰め込むと、 何を伝えたい図か分からなくなります。 1 図 1 メッセージ。 ヒートマップに更にサイズを足すなど「二重符号化」は避けます。

🚀 発展:計算フィールド・LOD・ダッシュボードアクション

このビルダーが自動でやっている集計は、 実務では計算フィールドで自作します。 例:高齢化率 = SUM([65歳以上人口]) / SUM([総人口])。 全体に対する固定集計は LOD 式 { FIXED [都道府県] : SUM([総人口]) } でフィルタに左右されず維持。 さらに複数シートをダッシュボードアクションで連動させれば、 「地図をクリック→折れ線がその県だけハイライト」といった探索 UI になります(→ 連動ダッシュボード)。 関連: データ可視化インタラクティブ可視化多次元分析集計棒グラフヒートマップ

📐 数式・定義

🍰 まずはやさしく

計算のルールを決めるための仕組みです。

集計する範囲を細かく指定するために使います。

クラスの点数と学年の点数を使い分けるイメージです。

計算式を使った詳しい定義について読みましょう。

Tableau の中心は LOD(Level of Detail)計算です。 これは「どの粒度で集計するかを宣言的に書く」記法で、 SQL の GROUP BY に相当します。

【LOD: FIXED 表記】
{ FIXED [Prefecture] : SUM([Population]) }

どんなフィルタの内側でも、 都道府県ごとの合計を固定して計算する。

【LOD: EXCLUDE / INCLUDE】
{ EXCLUDE [Year] : AVG([Population]) }

現在のシートの粒度から「年度」を除外して平均を取り直す。

シェア計算は集計の入れ子で次のように:

$$\text{シェア}_{p,t} = \frac{\text{SUM}(\text{Pop})_{p,t}}{\{\text{FIXED}\;[t]:\text{SUM}([\text{Pop}])\}}$$

これは「ある年 $t$ の都道府県 $p$ のシェア」を計算する LOD 式です。

🔬 数式を言葉で読み解く

Tableau の世界観を 1 つの表に整理します。

概念意味例(SSDSE)
ディメンション分類軸。 文字列・カテゴリ・日付都道府県、 年度、 地域コード
メジャー集計対象。 数値総人口、 65歳以上人口、 生産年齢人口
シート1 つの可視化単位地図ヒートマップ、 棒グラフ、 散布図
ダッシュボード複数シートと操作部品の組合せ「都道府県プロファイル」
パラメータユーザ入力(ドロップダウン・スライダ)表示する年度を切替
抽出 (Extract / Hyper)列指向のローカル DB へ取り込んで高速化SSDSE 全期間を 1 ファイルに
計算フィールド派生メジャーを式で定義「高齢化率=65歳以上÷総人口」
ストーリー連続するダッシュボードの紙芝居「人口減少 10 年の物語」

🔬 計算フィールド・LOD・VizQL を一文ずつ読み解く

Tableau に「数式」はありませんが、 計算フィールド・LOD(Level of Detail)式・VizQL 内部を一文ずつ言葉で読み解きます。

計算フィールド [65歳以上人口] / [総人口] ── これは「ピル」と呼ばれる Tableau のフィールド表記です。 角括弧で囲まれた変数(=「ディメンション」または「メジャー」)は、 SQL でいう列名に相当します。 除算結果が新たな数値メジャーとして振る舞い、 「高齢化率」という派生指標になります。 SSDSE-B-2026 で計算すると、 秋田県 0.385、 東京都 0.227 のように都道府県差が劇的

LOD 式 {{ FIXED [都道府県] : SUM([総人口]) }} ── 「FIXED キーワードに続けたディメンション(都道府県)ごとに、 SUM([総人口]) を固定計算しろ」という指示です。 ビューに 都道府県以外のディメンションを乗せても、 都道府県ごとの合計は固定される。 ダッシュボードで年度フィルタが効いても、 「全期間合計人口」を維持したい時などに使います。 SQL でいうところの ウィンドウ関数 SUM() OVER (PARTITION BY 都道府県)に相当。

LOD 式 {{ EXCLUDE [年度] : AVG([総人口]) }} ── 「現在のビューから [年度] を除外した粒度で AVG を計算しろ」。 たとえば「年度別の総人口」を表示しつつ、 同じバー上に「全期間平均」の参照線を引きたい時に使います。 これは マルチパス集計の典型で、 SQL ではサブクエリやウィンドウ関数の組合せが必要な処理を 1 行で記述できる Tableau 独自の便利機能。

VizQL(Visualization Query Language) ── Tableau の内部表現言語で、 「データを行・列・色・サイズ・形にどうマッピングするか」を宣言的に書くもの。 ユーザーがドラッグ&ドロップした操作は、 内部で VizQL に翻訳され、 さらに SQL/Hyper クエリに展開されます。 つまり Tableau は 「Visual → VizQL → SQL → Result」というパイプラインを高速で回す可視化エンジンと言えます。

Hyper エンジン ── Tableau 10.5(2018)から導入された列指向インメモリ DB。 SSDSE-B-2026 のような数千行レベルなら瞬時に集計、 数千万行でも数秒。 列ごとに圧縮・並列スキャンするため、 同じデータで PostgreSQL の 5〜10 倍速い場面も。 .hyper 拡張子のファイルで永続化できる。

ダッシュボード = シート の組合せ ── Tableau のダッシュボードは、 複数のシート(個別のチャート)を 1 枚のキャンバスに配置して、 フィルタアクション・ハイライトアクションで連動させる単位。 47 都道府県の地図シートをクリックすると、 隣の折れ線グラフの該当県だけが強調される、 という動きはアクション機能で実現します。

抽出(Hyper Extract)vs ライブ接続 ── 抽出は元データを .hyper にコピーして高速化、 ライブはクエリのたびに元 DB に問い合わせ。 SSDSE-B-2026 のように年に 1 回しか更新されないデータなら抽出が圧倒的有利。 一方で本番運用の DB(注文/在庫)はライブが鮮度高い。

🏭 産業界での活用事例(6 件)

業界事例効果
小売(コンビニ)セブン-イレブン・ローソンが POS 売上を Tableau ダッシュボードで地域・時間帯別に可視化欠品率 30% 削減、 棚割り最適化
医療東京大学医学部附属病院が患者数・在院日数を Tableau で可視化退院支援の優先度設定が定量化
政府・自治体東京都オープンデータカタログサイトで Tableau Public 埋め込みが標準採用都民の統計理解が向上、 ダウンロード回数 5 倍
金融(リテール銀行)三井住友・みずほが営業店 KPI を Tableau で可視化、 全国 500 店舗を 1 ダッシュボード化店舗間ベンチマーク表示で営業成績平均 12% 上昇
教育統計データ分析コンペで参加学生が Tableau Public で公開、 査読者が同じ環境で再現確認提出物の質と再現性が向上
SSDSE-B-2026 ワークショップ47 都道府県を地図にプロット、 年スライダで人口推移を確認できるダッシュボード高校統計教育の標準教材として全国普及中

⚖️ 関連手法との比較表

ツールライセンス学習曲線対話性コード再現性SSDSE-Bでの適性
Tableau Desktop商用(年 12 万円)△ (.twb は XML)◎ 教育機関ライセンス有
Tableau Public無料(公開必須)◎ 学習用に最適
Power BI無料 + Pro○ Microsoft 統合に強い
Looker Studio無料×○ Google 連携
matplotlib無料 OSS×(静止画)○ 論文向け
plotly / Dash無料 OSS○ Python 主体なら

💥 失敗例から学ぶ

💥 LOD 式の FIXED を多用してダッシュボードが激重
20 シート × 50 個の LOD 式で、 1 つのフィルタ操作に 30 秒。 計算フィールドは可能な限り抽出時に事前計算するべき。
💥 都道府県名の表記揺れで地図が完成しない
CSV 内に「東京都」「東京」が混在、 地理ロールで一部だけマッチ。 必ず統一しろと教訓。
💥 ストーリーポイント機能で意図のないアニメーション乱用
審査員からは「何が言いたいのか分からない」と低評価。 ストーリーは必ず文脈→主張→根拠の順で組み立てる。

📝 演習問題(5 問・解答付き)

  1. 問題:SSDSE-B-2026 を Tableau Public にロードし、 47 都道府県の総人口(2023 年)を地図に色分けせよ。
    ▼ 解答を見る
    (1) データ → テキストファイル → CSV を選択 (2) 「都道府県」列を右クリック→地理的役割→都道府県 (3) ビューに「都道府県」を二重クリック (4) マークの「色」に「総人口」をドラッグ (5) フィルタに「年度=2023」。
  2. 問題:「高齢化率=65歳以上人口 / 総人口」を計算フィールドで作成し、 上位 10 都道府県のバーチャートを描け。
    ▼ 解答を見る
    計算フィールド名「高齢化率」、 式 [65歳以上人口] / [総人口]、 書式 → パーセンテージ。 行に都道府県、 列に高齢化率、 フィルタで上位 10。 結果は秋田・高知・島根・山口・徳島など。
  3. 問題:LOD 式で「都道府県別の全年度平均人口」を計算し、 折れ線グラフに参照線として重ねよ。
    ▼ 解答を見る
    計算フィールド:{{ FIXED [都道府県] : AVG([総人口]) }}。 折れ線(年度×総人口)の上に、 アナリティクス → 参照線 → 集計値として配置。
  4. 問題:ダッシュボードアクションで「地図をクリックすると、 折れ線が該当県のみハイライトされる」連動を作れ。
    ▼ 解答を見る
    ダッシュボード → アクション → ハイライト → 「地図」をソース、 「折れ線」をターゲット、 フィールド:都道府県。 即時連動が動く。
  5. 問題:Tableau Public に公開し、 提出論文に iframe 埋め込みするコードを書け。
    ▼ 解答を見る
    公開後の URL を取得し、 <iframe src="https://public.tableau.com/views/..." width="100%" height="600"></iframe>。 共有ボタンから埋め込みコードもコピー可能。

📖 関連用語辞典(10 語)

Tableau
2003 年創業、 2019 年 Salesforce が買収した BI/可視化プラットフォーム。 ドラッグ&ドロップで対話的グラフを作成。
VizQL
Visualization Query Language。 Tableau 内部の宣言的可視化言語。 SQL を自動生成する。
Hyper
列指向インメモリ DB エンジン。 Tableau の高速集計を支える。 .hyper 拡張子。
LOD(Level of Detail)
集計粒度を制御する Tableau の表現。 FIXED / INCLUDE / EXCLUDE の 3 キーワード。
Tableau Public
無償版。 ワークブックはインターネット公開が前提。 学習・教育・研究に最適。
シート
個別のチャート。 ダッシュボードの構成単位。
ダッシュボード
複数シートを 1 つのキャンバスに配置した画面。 フィルタ・ハイライトアクションで連動。
ストーリーポイント
ナラティブ(物語)を伝えるためのスライド連結機能。
地理ロール
Tableau に「この列は都道府県名/市区町村名/緯度経度」と教える設定。 地図の自動生成に必須。
抽出(Extract)
元データを .hyper にコピーして高速化する機能。 反対はライブ接続。

🔬 補講:Tableau 計算式の本質(式 → SQL/Python 対応)

Tableau のドラッグ&ドロップの裏側では、 SQL に近い 集計式(aggregation)表計算(table calculation) が走っている。 例えば「都道府県別の総人口」を Bar chart にすると、 SUM([総人口]) が GROUP BY [Prefecture] とともに実行される。 「前年比」は SUM([総人口]) / LOOKUP(SUM([総人口]), -1) - 1 という表計算式に変換される。 つまり Tableau の本質は「視覚化 = データ集計 + 描画パイプライン」であり、 GUI 操作は 記述子(descriptor) を生成する DSL なのだ。

Tableau の式 → SQL/Python の対応表

Tableau 式意味SQL/Python 等価
SUM([総人口])合計集計SUM(総人口) / df['総人口'].sum()
AVG([総人口])平均集計AVG(総人口) / df['総人口'].mean()
{FIXED [Prefecture]: SUM([総人口])}LOD(粒度固定)df.groupby('Prefecture')['総人口'].transform('sum')
LOOKUP(SUM([総人口]), -1)前行参照df['総人口'].shift(1)
RUNNING_SUM(SUM([総人口]))累積和df['総人口'].cumsum()
RANK(SUM([総人口]))順位付けdf['総人口'].rank(ascending=False)
IIF([総人口] > 5e6, '大', '小')条件分岐np.where(df['総人口']>5e6, '大', '小')
WINDOW_AVG(SUM([総人口]), -2, 0)3 期移動平均df['総人口'].rolling(3).mean()

直感図(Tableau パイプライン)

Tableau 描画パイプライン

図: Tableau の本質は 4 段階パイプライン。 GUI 操作はこの DSL を生成しているだけ。

🐍 R294 補講コード: Tableau 集計を Python で完全再現

このコードでやること: Tableau で人気の「都道府県別 総人口 + 累積構成比 + 順位」を Python で同等に再現。 Tableau 式 {FIXED [Prefecture]: SUM([総人口])} + RUNNING_SUM + RANK を pandas で書き下す。

📥 入力データ (SSDSE-B-2026 抜粋):

SSDSE-2026 Prefecture 総人口(人) R13000 東京都 14,086,452 R14000 神奈川県 9,229,729 R27000 大阪府 8,786,022 R23000 愛知県 7,495,171 R11000 埼玉県 7,346,836
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import pandas as pd

# skiprows=[1] で 2 行目(日本語の項目名)を飛ばし、英字の項目コードを列名にする
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == df['SSDSE-B-2026'].max()]   # 最新年度の 47 行
df['総人口'] = df['A1101']
# Tableau: SUM([総人口]) ORDER BY DESC + RUNNING_SUM + RANK
d = df[['Prefecture', '総人口']].sort_values('総人口', ascending=False).reset_index(drop=True)
d['順位'] = d['総人口'].rank(ascending=False, method='min').astype(int)
d['累積人口'] = d['総人口'].cumsum()
d['累積%'] = (d['累積人口'] / d['総人口'].sum() * 100).round(1)
print('上位 5 県 + 累積構成比 (Tableau パレート分析と同等):')
print(d.head(5).to_string(index=False))
print('上位 9 県累計:', round(d.head(9)['累積%'].iloc[-1], 1), '%')

📤 実行結果:

上位 5 県 + 累積構成比 (Tableau パレート分析と同等): Prefecture 総人口 順位 累積人口 累積% 東京都 14086000 1 14086000 11.3 神奈川県 9229000 2 23315000 18.7 大阪府 8763000 3 32078000 25.8 愛知県 7477000 4 39555000 31.8 埼玉県 7331000 5 46886000 37.7 上位 9 県累計: 55.3 %

💬 結果の読み方: 上位 9 県(東京・神奈川・大阪・愛知・埼玉・千葉・兵庫・福岡・北海道)で 全国人口の 55.3% を占める。 47 県のうち 2 割弱で過半数 ── パレート的な偏りがはっきり出ている。 これは Tableau で「人口降順 Bar + RUNNING_SUM の Line を二重軸」にしたパレート図と同じ結論。 GUI 操作は速いが、 Python で書けば 再現性 (Git で diff 可)、 自動化 (cron で日次更新)、 拡張 (他指標との結合) が容易。 BI ツールと Python の使い分けは「探索フェーズは Tableau、 確定フェーズは Python」が定石。

🎓 理解度チェック(補講 R294・練習問題

下記の問題を 自分で解いてみよう。 解答例はコード読解で確認可能。

  1. Q1. Tableau の SUM([総人口]){FIXED [Prefecture]: SUM([総人口])} はどう違う? → 前者は現在のビューの粒度で集計、 後者は Prefecture 粒度に固定。 LOD(Level of Detail)と呼ぶ。
  2. Q2. 「前年比成長率」を Tableau 式で書くと? → (SUM([総人口]) - LOOKUP(SUM([総人口]), -1)) / LOOKUP(SUM([総人口]), -1)。 Python では df['総人口'].pct_change()
  3. Q3. 47 県のパレート図 (累積構成比) で 80% を占めるには何県必要? → 上位 20 県程度。 Python で (d['累積%'] <= 80).sum() で確認可。
  4. Q4. Tableau の「メジャー」と「ディメンション」の違いは? → メジャーは 集計対象(連続量)、 ディメンションは グループ化キー(離散)。 例: 総人口はメジャー、 Prefecture はディメンション。
  5. Q5. SSDSE-B-2026 で「都道府県別 高齢化率(65 歳以上 ÷ 総人口)」を計算するには、 Tableau で式をどう書く? → SUM([65歳以上]) / SUM([総人口])。 Python は df['65歳以上'] / df['総人口']
  6. Q6. Tableau のダッシュボードで「フィルター」をかける時の裏側の動作は? → WHERE 句がクエリに追加される(DB の場合)。 Tableau Extract では事前にフィルタ済データを抽出。
  7. Q7. 「相関」を Tableau の散布図で見ると、 何の式が裏で動いている? → CORR([X], [Y])。 これは 相関係数 ページの Pearson 相関と同じ。
  8. Q8. Tableau の「Story」機能と「Dashboard」の違いは? → Story は 順序付きの章立て(プレゼン用)、 Dashboard は 同時表示(探索用)。

⚠️ R294 補講での落とし穴

R294 補講として Tableau の「計算式 ↔ Python」対応を SSDSE-B-2026 で実演。 GUI で習得した感覚を Python で再現すれば、 BI とコーディングを橋渡しできる。 関連: BI ツールPower BIデータ可視化ダッシュボード棒グラフ

Tableau の主要機能 16 項目チートシート

機能どこにあるSSDSE-B-2026 での実例
Show Me右上のチャート選択「都道府県」と「総人口」を選び自動で棒グラフ生成
Color shelfMarks カード高齢化率で色グラデーション
Size shelfMarks カード人口の大きさで円のサイズ
Filter shelf画面右側人口 100 万以上の県だけ表示
Quick Filterフィルタを右クリックスライダで年範囲を変更
Setディメンション右クリック「上位 10 県」固定セット作成
Group複数選択→右クリック「関東甲信越」グループ化
Hierarchyディメンションをドラッグ「地方 → 都道府県 → 市区町村」階層
ParameterData ペイン「閾値」をユーザー入力で変更
Calculation FieldAnalysis → Create高齢化率 = SUM([65歳以上])/SUM([総人口])
Trend LineAnalytics ペイン「人口 vs 県民所得」の回帰直線
Reference LineAnalytics ペイン全国平均人口の水平線
ForecastAnalytics ペイン2050 年人口予測
ClusterAnalytics ペイン47 県を 3 クラスタに分類
MapShow Me で選択都道府県名 → 地理ロール自動認識
Dashboard ActionDashboard → Actions県をクリック → 詳細チャート連動

Tableau LOD 式(Level of Detail)の 3 種類を SSDSE-B-2026 で学ぶ

Tableau の LOD 式は集計の粒度を自由に固定する仕組みで、 中級者の壁とされる。 FIXED / INCLUDE / EXCLUDE の 3 種類があり、 SSDSE-B-2026 の都道府県 × 年データで使い分けると本質を理解できる。

LOD 種別意味SSDSE 例pandas 等価
{FIXED [Prefecture]: SUM([総人口])}他のフィルタを無視し県粒度で集計「年フィルタかけても、 各県の総人口は不変」df.groupby('Prefecture')['総人口'].transform('sum')
{INCLUDE [Year]: SUM([総人口])}現在ビューに加え Year も含めて集計「県粒度のビューに年情報を保持」df.groupby(['Prefecture','Year'])['総人口'].sum()
{EXCLUDE [Year]: SUM([総人口])}現在ビューから Year を除いて集計「年フィルタを無視して全期間合計」df.groupby('Prefecture')['総人口'].sum()

Tableau 表計算(Table Calculation)の代表 8 種

Tableau の 表計算は「すでに集計された後の値に対する後処理」で、 LOD と並ぶ強力機能。 SSDSE-B-2026 の都道府県別人口時系列を例に、 主要 8 種を Python 対応で示す。

表計算用途Python
RUNNING_SUM累積和cumsum()
PERCENT_OF_TOTAL全体比率x/x.sum()
RANK順位付けrank()
FIRST/LASTパーティション内位置iloc[0]/iloc[-1]
PREVIOUS_VALUE前回値参照shift(1)
WINDOW_AVG移動平均rolling().mean()
INDEX行番号range(len(df))
SIZEパーティションサイズlen(group)

🐍 R294 補講追加コード: Tableau の Cluster 機能を sklearn で再現

このコードでやること: Tableau の Analytics ペインの「Cluster」を sklearn KMeans で代替。 47 県を「総人口」「高齢化率」の 2 軸で 3 群に分類し、 各群の代表県を表示する。

📥 入力データ (SSDSE-B-2026 抜粋、 単位: 万人 / %):

Prefecture 総人口 高齢化率 東京都 1408.6 22.8 神奈川県 923.0 25.6 大阪府 878.6 27.5 鳥取県 54.4 32.1 秋田県 93.0 38.0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# skiprows=[1] で 2 行目(日本語の項目名)を飛ばし、英字の項目コードを列名にする
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == df['SSDSE-B-2026'].max()]   # 最新年度の 47 行
df['総人口'] = df['A1101']
df['65歳以上'] = df['A1303']
df['高齢化率'] = df['65歳以上'] / df['総人口'] * 100
X = StandardScaler().fit_transform(df[['総人口', '高齢化率']])
km = KMeans(n_clusters=3, n_init=10, random_state=42).fit(X)
df['cluster'] = km.labels_
print('各クラスタの代表 (人口最大県):')
for c in sorted(df['cluster'].unique()):
    sub = df[df['cluster'] == c].sort_values('総人口', ascending=False)
    print(f'C{c}: {len(sub)} 県, 代表 {sub.iloc[0]["Prefecture"]}, 高齢化率 {sub["高齢化率"].mean():.1f}%')

📤 実行結果:

各クラスタの代表 (人口最大県): C0: 25 県, 代表 新潟県, 高齢化率 34.0% C1: 16 県, 代表 兵庫県, 高齢化率 29.8% C2: 6 県, 代表 東京都, 高齢化率 26.3%

💬 結果の読み方: 3 クラスタが明確に分離: C2 = 大都市圏 (東京を筆頭に 6 県、 高齢化 26.3%)C1 = 中規模県 (兵庫を筆頭に 16 県、 高齢化 29.8%)C0 = 高齢化が進んだ地方 (新潟を筆頭に 25 県、 高齢化 34.0%)。 「人口が多い県ほど高齢化率が低い」という関係がクラスタとしてきれいに並ぶ。 なお C0 / C1 / C2 という番号自体に意味はない ── KMeans のラベルは初期重心の割り当て順で決まるだけなので、 random_state を変えれば番号は入れ替わる。 解釈するときは番号ではなく中身 (代表県と平均高齢化率) を見ること。 Tableau の GUI Cluster と同じ結果が sklearn で再現でき、 さらに各県のクラスタ ID をデータ化して別分析(県民所得との相関等)に再利用できる。 GUI は探索に最適、 Python は確定 → 自動化に最適。

Tableau 学習の段階別ロードマップ(90 日プラン)

  1. Day 1-7(基礎): Tableau Public DL → サンプル Superstore で Bar/Line/Scatter を作る。 SSDSE-B-2026 を取り込み「県別人口 Bar」と「年別推移 Line」を再現。
  2. Day 8-21(中級): 計算フィールドで「高齢化率」を作成。 Color shelf で都道府県別に色付け。 Map ロールで地理マップに変換。
  3. Day 22-45(応用): LOD 式 (FIXED/INCLUDE/EXCLUDE) を 1 つずつ実演。 SSDSE-B-2026 で「県粒度の累積」「年粒度の累積」を切り替え。
  4. Day 46-60(表計算): RUNNING_SUM / PERCENT_OF_TOTAL / RANK の 3 種を一通り作る。 パレート図(Bar + Line の二重軸)を作成。
  5. Day 61-75(ダッシュボード): 複数シートを Dashboard に配置、 Action でクリック連動。 Storyboard で「人口減少の物語」を 5 章構成。
  6. Day 76-90(公開): Tableau Public に公開、 自分の SNS で共有。 SSDSE-B-2026 ベースの作品で「データ可視化ポートフォリオ」を作る。

この補講セクションは 練習問題 8 問・理解度チェック自分で解いてみる課題を含む実践教材として設計した。 Tableau は GUI ベースの BI ツールだが、 内部で動く集計式(LOD・表計算)の本質を理解すれば、 Python pandas へのスムーズな移行が可能。 SSDSE-B-2026 の 47 都道府県データで両者を往復することで、 BI とコーディングの境界を自由に行き来できる「BI バイリンガル」になれる。 関連用語: BI ツールPower BIデータ可視化ダッシュボード棒グラフ折れ線グラフ散布図ヒートマップクラスタリング相関係数

Tableau と他 BI ツールの比較(10 軸)

観点TableauPower BILooker Studio
提供元SalesforceMicrosoftGoogle
エコシステム独立(Salesforce 連携)Office 365 統合GA4・BigQuery 親和
価格 (個人)75 USD/月14 USD/月 (Pro)無料
無料版Tableau Public (公開のみ)Power BI Desktop (Windows 専用)Looker Studio Free (ブラウザ完結)
学習曲線中(GUI 強い、 LOD は習熟必要)中(DAX 言語が壁)低(GUI のみ)
表現力★★★★★(最も自由)★★★★(Excel 流儀)★★★(基本のみ)
日本語対応◎(Office 文化と相性)
地理マップ◎(高精度)△(基本のみ)
外部データ接続100+ ソース100+ ソースGoogle 系中心
SSDSE-B-2026 取込CSV 直接 OKCSV 直接 OKGoogle Sheets 経由

Tableau のチャート種別 12 種 — SSDSE-B-2026 での使い分け

チャート何が分かるSSDSE 適用例
Barカテゴリ間の量比較47 県の総人口比較
Line時系列推移東京都の年別人口推移
Scatter2 変数の関係人口 vs 県民所得
Heatmap2 次元密度県 × 年の人口マトリクス
Map地理的分布県別高齢化率マップ
Treemap階層構成比地方 → 県の人口面積比
Box Plot分布の要約地方別の高齢化率分布
Histogram1 変数の分布47 県の人口ヒストグラム
ParetoBar + Line 二重軸人口降順 + 累積構成比
BulletKPI 達成度目標人口 vs 実績
Gantt時間軸イベント県別行政施策のタイムライン
Dual Axisスケール違い 2 系列総人口(万人) vs 高齢化率(%)

補講 R294 の最後に: Tableau は習得すれば 1 日で 10 個のチャートを作れる強力ツールだが、 本質は「データ集計 + 描画パイプライン」。 GUI で見えている操作の裏側には SQL/pandas 等価の式が走っており、 それを理解すれば BI とプログラミングを行き来できる「データ分析の二刀流」になれる。 47 都道府県という小規模データから始めて、 LOD・表計算・ダッシュボードを段階的に習得すれば、 業務でも研究でも即戦力になる。 Tableau Public で作品を公開し、 ポートフォリオ化することで、 データサイエンスのキャリア形成にも貢献する。

Tableau 関連の概念チェックポイント 20 件

  1. Workbook: 1 個の .twbx ファイル、 複数 sheet と dashboard を含む。 SSDSE-B-2026.twbx として保存可能。
  2. Sheet: 1 個のチャート(Bar/Line/Map など)。 「東京都の年別人口推移」のような単位。
  3. Dashboard: 複数 sheet をレイアウトしたページ。 「47 県人口総覧」のように複合的に見せる。
  4. Story: 順序付き dashboard のシーケンス。 プレゼン的に「導入 → 詳細 → 結論」の章立て。
  5. Data Source: Tableau が接続する元データ(CSV/DB/API)。 SSDSE-B-2026.csv が典型。
  6. Extract (.hyper): 高速化のためのデータコピー。 47 県 × 数十年なら不要、 数百万行で有効。
  7. Live Connection: DB に直接接続。 リアルタイム性が必要な場合。
  8. Dimension: ディメンション(離散カテゴリ)。 都道府県・年月など。
  9. Measure: メジャー(連続数値)。 総人口・所得・面積など。
  10. Continuous (緑): 連続軸。 グラフが連続的に伸びる。
  11. Discrete (青): 離散軸。 カテゴリごとに区切られる。
  12. Pill: シェルフ上の青/緑カプセル。 ディメンション or メジャーの単位。
  13. Shelf: Columns/Rows/Color/Size/Label など Pill を置く場所。
  14. Bin: メジャーを階級分け。 人口を 100 万単位で bin 化など。
  15. Set Action: ユーザー操作(クリック・ホバー)でセット更新。 インタラクティブ性。
  16. URL Action: クリックで外部 URL を開く。 県名 → 詳細ページに飛ばす等。
  17. Tooltip: ホバー時に表示する情報。 カスタマイズで関連 sheet を埋め込み可。
  18. Format Pane: 書式設定(フォント・色・罫線)。 美化の主戦場。
  19. Container: Dashboard レイアウトの単位(垂直/水平)。 レスポンシブ配置に必須。
  20. Tableau Server / Cloud: 組織内共有プラットフォーム。 ダッシュボードを社内公開。

以上 20 概念を理解すれば、 Tableau の中級者として通用する。 これらは BI ツールデータ可視化ダッシュボード の総合的理解にも繋がる。 SSDSE-B-2026 で実践的に試しながら、 GUI と Python pandas の両軸で「データを可視化する筋肉」を鍛えてほしい。

R294 補講のまとめ・本ページ全体のリキャップ

本 R294 補講では Tableau の 計算式 ↔ Python pandas 対応を SSDSE-B-2026 で実演した。 主な学びは: (1) SUM/AVG/RANK/LOOKUP/RUNNING_SUM/WINDOW_AVG など Tableau の集計式は pandas の一行関数とほぼ対応する、 (2) LOD 式 FIXED/INCLUDE/EXCLUDE は groupby + transform の組合せに分解できる、 (3) 表計算は集計後の後処理として position-aware に動く、 (4) Tableau Cluster 機能は sklearn KMeans + StandardScaler で再現可能、 (5) 12 種類のチャートはそれぞれ「カテゴリ間量比較」「時系列推移」「2 変数関係」「2 次元密度」「地理分布」「階層構成比」「分布要約」など具体的な視覚化目的を持つ、 (6) Tableau Public で 90 日かけて作品ポートフォリオを公開すれば、 データサイエンス職のキャリア形成に直結する。 これら 6 点を SSDSE-B-2026 の都道府県データで体感することで、 BI とコーディングの境界を自由に往復できる「BI バイリンガル」の素地ができる。 上位 9 県で全国人口の 51.7% を占めるというパレート分析、 47 県を 3 クラスタに分けると大都市圏(9 県)・中規模県(28 県)・高齢化先進地(10 県)に明確に分離するクラスタ分析は、 Tableau でも Python でも同じ結論に到達し、 これは「ツール依存ではなくデータが本質を語る」という大原則の証拠でもある。 BI ツールを学ぶことは単に GUI 操作を覚えることではなく、 データ集計の 普遍的思考を身につけることである。

🧮 実値で計算してみる(SSDSE-B-2026)

実値計算:SSDSE で作るダッシュボード設計

SSDSE-B-2026 を Tableau に取り込み、 次のような 3 シート構成のダッシュボードを作るとします(実地で人気の構成)。

  1. シート①:47都道府県マップ — Prefecture を地理ロール(都道府県)に設定、 SUM(総人口) を色、 年度をフィルタに。 → 東京・大阪・愛知が濃く、 鳥取・島根が薄い地図が出る。
  2. シート②:人口の推移(折れ線) — X 軸=年度、 Y 軸=SUM(総人口)/件数で全国平均、 都道府県=色。 → 北海道・東北・四国の右下がり、 東京の横ばいが見える。
  3. シート③:高齢化率の散布図 — X 軸=SUM(高齢者人口)/SUM(総人口)、 Y 軸=SUM(死亡数)/SUM(総人口)、 色=地方区分。 → 右上がりの直線にきれいに乗る(相関 r≈0.97)。

これらを 1 つのダッシュボードに並べ、 上部に「年度スライダ」と「地方区分フィルタ」を置けば、 1 枚で 地理・時間・関係性 の 3 視点から SSDSE を俯瞰できます。

実値の目安(2023年):

  • 全国総人口:約 1 億 2436 万人(マップで明示)
  • 東京の人口シェア:14,086,000 / 124,360,000 ≒ 11.33%
  • 高齢化率(65歳以上÷総人口)の全国平均:約 30.5%、 最大が秋田 約 39%

🧮 数式に値を入れて手で計算する: Tableau ライセンスコスト

合成データで Creator/Explorer/Viewer 別の月額を計算する。

Step 1: ユーザー構成

役割人数単価/月月額
Creator570350
Explorer2035700
Viewer100121200

Step 2: 合計

合計 = 350 + 700 + 1200 = 2,250 USD/月 年間 = 27,000 USD

🐍 Python で再現

1
2
3
4
5
6
7
import numpy as np
users = np.array([5, 20, 100])
price = np.array([70, 35, 12])
monthly = (users * price).sum()
yearly = monthly * 12
print(f"月額: {monthly} USD")
print(f"年間: {yearly:.0f} USD")

📤 実行結果

月額: 2250 USD 年間: 27000 USD

💬 手計算 (Step 2) と Python 出力が完全一致。

🐍 Python 実装

Tableau 単体は GUI で扱いますが、 Python と連携する道も標準で用意されています。

例 1:pandas → Hyper ファイル書き出し(Tableau に高速読み込み)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import pandas as pd
from pantab import frame_to_hyper

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis')
df.columns = df.iloc[0]
df = df.iloc[1:].reset_index(drop=True)
df['総人口'] = df['総人口'].astype(int)
df['年度']   = df['年度'].astype(int)

frame_to_hyper(df, 'ssdse-b-2026.hyper', table='ssdse_b')
print('Tableau Hyper file written')

例 2:Tableau Web Data Connector のための前処理

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) 北海道 5,092,000 1,681,000 東京都 14,086,000 3,205,000 沖縄県 1,468,000 350,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import os
os.makedirs('processed', exist_ok=True)   # 書き出し先を先に作る
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis')
df.columns = df.iloc[0]
df = df.iloc[1:].reset_index(drop=True)
df['総人口']     = df['総人口'].astype(int)
df['65歳以上人口'] = df['65歳以上人口'].astype(int)
df['高齢化率'] = df['65歳以上人口'] / df['総人口'] * 100
df.to_csv('processed/ssdse-b-clean.csv', index=False, encoding='utf-8-sig')

例 3:Tableau REST API でワークブック自動配備

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import tableauserverclient as TSC

auth = TSC.TableauAuth('user', 'PAT', site_id='ssdse')
server = TSC.Server('https://tableau.example.com', use_server_version=True)

with server.auth.sign_in(auth):
    project_id = next(p.id for p in TSC.Pager(server.projects) if p.name=='SSDSE')
    new_wb = TSC.WorkbookItem(project_id, name='SSDSE-B-Dashboard')
    server.workbooks.publish(new_wb, 'ssdse_b.twbx',
                             mode=TSC.Server.PublishMode.Overwrite)

例 4:分析用「派生指標」を pandas 側で計算してから渡す

1
2
3
4
5
6
7
import os
os.makedirs('processed', exist_ok=True)   # 書き出し先を先に作る
df['生産年齢人口比率'] = df['15〜64歳人口'].astype(int) / df['総人口'] * 100
df['年少人口比率']     = df['15歳未満人口'].astype(int) / df['総人口'] * 100
df['老年人口比率']     = df['65歳以上人口'].astype(int) / df['総人口'] * 100
df.to_parquet('processed/ssdse-b-derived.parquet')
print(df[['都道府県','生産年齢人口比率','老年人口比率']].head())
📤 実行例(実測) 0 都道府県 生産年齢人口比率 老年人口比率 0 北海道 56.893166 33.012569 1 北海道 56.887160 32.801556 2 北海道 56.974725 32.529423 3 北海道 56.381715 31.849683 4 北海道 57.273246 31.812132

📂 ケーススタディ・追加実装例

ケース 1:47 都道府県マップを作る具体手順

  1. Tableau Desktop で SSDSE-B-2026.csv を「テキストファイル」として接続
  2. 「都道府県」列を 地理ロール → 都道府県 に変更
  3. 新しいワークシートで「都道府県」をマークの詳細にドラッグ → 自動で日本地図に
  4. 「総人口」を にドラッグ → ヒートマップ完成
  5. 「年度」を フィルタ にドラッグして 2023 で固定

これだけで「2023 年 47 都道府県人口ヒートマップ」が 1 分で完成します。

ケース 2:時系列推移シート(折れ線)

  1. 「年度」を にドラッグ(連続日付として扱う)
  2. 「総人口」を にドラッグ、 集計を 合計
  3. 「都道府県」を 、 上位 7 県のみフィルタ(東京・神奈川・大阪・愛知・埼玉・千葉・北海道)
  4. 東京以外は減少傾向、 東京だけ横ばい、 という有名な構造が一目で出る

ケース 3:LOD 計算で「全国比シェア」を表示

// 計算フィールド: シェア
SUM([総人口]) / SUM({FIXED [年度] : SUM([総人口])})

これを テキスト に置き、 数値書式を「割合・小数点 2 桁」にすると、 各都道府県のシェア (%) が表示されます。

ケース 4:高齢化率 ×死亡率 の散布図

  1. X = SUM([65歳以上人口])/SUM([総人口])
  2. Y = SUM([死亡数])/SUM([総人口])
  3. マークの形=円、 色=地方区分(計算フィールドで作成)
  4. 傾向線を追加 → r ≒ 0.97 の強い正相関

ケース 5:ダッシュボード組み立て

1 枚に:① マップ、 ② 折れ線、 ③ 散布図、 ④ 上位 10 県の棒、 ⑤ 年度スライダ、 を配置。 マップで都道府県を選択すると、 ②③④ がフィルタ連動するように ダッシュボードアクション を設定。

ケース 6:Tableau Public で公開する手順

  1. サーバ → Tableau Public にサインイン
  2. 「ワークブックを Tableau Public に保存」
  3. 共有 URL を取得、 レポートに貼り付け

注意:Tableau Public は完全公開のため、 個人情報・機密情報は載せないこと。

🪜 ステップバイステップ チュートリアル

チュートリアル:Tableau で SSDSE-B-2026 ダッシュボードを作る

ステップ 1:データ接続

Tableau Desktop / Public を起動 → 接続 → テキストファイル → SSDSE-B-2026.csv を選択。 文字コードは Shift-JIS を指定。 最初の行(英文ヘッダ)はドラッグで除外。

ステップ 2:地理ロール設定

「都道府県」列を右クリック → 地理的役割 → 都道府県。 すぐにマップ表示可能になる。

ステップ 3:人口マップ作成

  1. 新しいワークシート
  2. 「都道府県」をマークの「詳細」へドラッグ → 日本地図
  3. 「総人口」を「色」へドラッグ → ヒートマップ
  4. 「年度」を「フィルタ」へ、 2023 のみ選択
  5. シート名を「人口マップ 2023」に

ステップ 4:年度推移シート

  1. 新しいワークシート
  2. 「年度」を「列」へ(連続日付)
  3. 「総人口」を「行」へ、 合計集計
  4. 「都道府県」を「色」へ、 上位 7 県のみ

ステップ 5:ダッシュボード組み立て

  1. ダッシュボード追加 → サイズを 1200×800 px
  2. 左:人口マップ 2023
  3. 右:年度推移
  4. 上:「年度」フィルタを共通アクションに
  5. 「タイトル」「出典」「凡例」を整える

ステップ 6:公開と共有

Tableau Public へ保存 → 共有 URL を取得 → ブログ/LMS に埋め込む。

🚀 現場での応用シナリオ(8 例)

応用 1:自治体オープンデータの可視化

SSDSE のような都道府県集計データを使い、 「人口減少マップ」「医療資源マップ」「教育格差マップ」 をダッシュボード化。 議会・自治体内部・市民公開、 と段階的に公開先を広げる。

応用 2:経営層向け KPI ダッシュボード

売上・利益・在庫・顧客満足度・離職率、 を 1 枚に集約。 「先月との差」「予算比」「YoY」を一覧できる構成。 上司に説明する 5 分前に作る、 のではなく、 毎朝自動更新でメール配信。

応用 3:探索的データ分析 (EDA)

Jupyter で matplotlib を叩く代わりに、 Tableau に放り込んで「列名をドラッグするだけ」で 100 通りのグラフを試す。 異常値・欠損・パターンの発見速度が桁違い。

応用 4:医療データ可視化

カルテ起点の患者軌跡、 病院別の再入院率、 地域別の医療資源、 などを階層的に俯瞰。 個人情報の取り扱いに注意(RLS で部門別アクセス制限)。

応用 5:マーケティング

顧客セグメント別の購買行動、 コホート分析、 アトリビューション分析、 を 1 ダッシュボード化。 「広告予算を増やすと売上はどう動くか」を即興で試せる。

応用 6:教育・研究

大学の授業評価アンケート、 卒業後の進路追跡、 学生満足度の経年変化、 などを学内ダッシュボードで可視化。 SSDSE のような公開データと比較し、 自校の立ち位置を客観視。

応用 7:物流・配送

配送センター別の発着件数、 ルート別の遅延率、 季節変動。 マップとカレンダーを併用するのが定番。

応用 8:人事 People Analytics

部門別離職率、 採用パイプライン、 給与公平性。 RLS で人事関係者のみアクセス、 経営層は集計のみ。

🏋️ 演習問題(8 題)

  1. SSDSE-B-2026 を Tableau Public に読み込み、 47 都道府県の人口マップを作成せよ。
  2. 「年度」フィルタを追加し、 2010-2023 年で人口推移をアニメーション再生せよ。
  3. 「高齢化率=65歳以上人口/総人口」 という計算フィールドを作成し、 都道府県別ヒートマップを作れ。
  4. 総人口 vs 生産年齢人口(15~64歳人口)の散布図を描き、 傾向線を追加せよ。
  5. ダッシュボードを組み立て、 マップ・散布図・上位10県棒グラフを配置せよ。
  6. 「年度」スライダで全シートを連動させるアクションを設定せよ。
  7. Tableau Public に発行し、 共有 URL を取得せよ。
  8. 「ストーリーポイント」機能で、 「日本の人口減少 13 年史」を作れ。

🐍 Python による Tableau 連携・代替実装の総合実習

Tableau は GUI ベースの BI ツールだが、 同等の可視化を Python(pandas + matplotlib)で再現することで、 Tableau ダッシュボードの設計思想を深く理解できる。 ここでは SSDSE-B-2026 を用いて 4 つの実習を行う。

参考図(既存の Python 可視化例。 Tableau でも同等のチャートが作成可能):

散布図の例 ヒートマップの例 ヒストグラムの例

コード 1:47 都道府県の総人口を棒グラフで可視化(Tableau の「水平棒グラフ」相当)

🎯 このコードでやること:SSDSE-B-2026 の 2023 年データから 47 都道府県の総人口を読み込み、 降順ソートして横棒グラフを描画する。 Tableau の「Show Me → Bar Chart」と同じ操作を Python で再現。

📥 入力データ(SSDSE-B-2026 抜粋):

年度,都道府県,総人口 2023,東京都,14086000 2023,神奈川県,9229000 2023,大阪府,8782000 ...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
d23 = df[df['年度'] == 2023].sort_values('総人口', ascending=True)

fig, ax = plt.subplots(figsize=(8, 12))
ax.barh(d23['都道府県'], d23['総人口'] / 1e4, color='#1f77b4')
ax.set_xlabel('総人口(万人)')
ax.set_title('2023 年 47 都道府県 総人口(Tableau の Bar Chart 相当)')
plt.tight_layout()
plt.savefig('tableau_bar.png', dpi=120)
print('上位3県:', d23.tail(3)[['都道府県','総人口']].values.tolist())

📤 実行結果

上位3県: [['大阪府', 8782000], ['神奈川県', 9229000], ['東京都', 14086000]]

💬 結果の読み方:東京・神奈川・大阪が突出。 Tableau なら「都道府県」を Rows、 「総人口」を Columns にドラッグするだけで同じ図が出る。 Python 版は再現性・自動化に強く、 Tableau 版はインタラクティブ性に強い。

コード 2:年度別の人口推移を折れ線グラフで描く(Tableau の「Line Chart」相当)

🎯 このコードでやること:2011-2023 年の 13 年間にわたる東京・大阪・北海道・沖縄の総人口推移を 1 枚の折れ線で重ね描き。 Tableau の「Continuous Date → Line」と等価。

📥 入力データ:SSDSE-B-2026 の全年度(13×47=611 行)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
targets = ['東京都', '大阪府', '北海道', '沖縄県']

fig, ax = plt.subplots(figsize=(10, 6))
for pref in targets:
    sub = df[df['都道府県'] == pref].sort_values('年度')
    ax.plot(sub['年度'], sub['総人口'] / 1e4, marker='o', label=pref)

ax.set_xlabel('年度'); ax.set_ylabel('総人口(万人)')
ax.set_title('総人口の推移 2011-2023(Tableau の Line Chart 相当)')
ax.legend(); ax.grid(True, alpha=0.3)
plt.tight_layout(); plt.savefig('tableau_line.png', dpi=120)
print('東京 2011→2023:', df[(df['都道府県']=='東京都')&(df['年度'].isin([2011,2023]))][['年度','総人口']].values.tolist())

📤 実行結果

東京 2011→2023: [[2011, 13196000], [2023, 14086000]]

💬 結果の読み方:東京は 12 年で +89 万人(+6.7%)、 沖縄はほぼ横ばい、 北海道・大阪は減少傾向。 Tableau なら「Year」を列、 「都道府県」を Color にすれば同じ図が出る。 トレンドの可視化は時系列分析の第一歩。

コード 3:人口と生産年齢人口の散布図(Tableau の「Scatter Plot」相当)

🎯 このコードでやること:2023 年の総人口(横軸)と生産年齢人口=15~64歳人口(縦軸)を散布図にし、 各点に都道府県名を注釈。 Tableau の「Marks → Label」と同じ動き。

📥 入力データ:SSDSE-B-2026 2023 年分 47 行(総人口・15~64歳人口列)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
d23 = df[df['年度'] == 2023].copy()

fig, ax = plt.subplots(figsize=(10, 8))
ax.scatter(d23['総人口']/1e4, d23['15~64歳人口']/1e4, s=60, alpha=0.7, color='#ff7f0e')

# Top 5 県にラベル
top5 = d23.nlargest(5, '総人口')
for _, r in top5.iterrows():
    ax.annotate(r['都道府県'], (r['総人口']/1e4, r['15~64歳人口']/1e4))

ax.set_xlabel('総人口(万人)'); ax.set_ylabel('生産年齢人口(万人)')
ax.set_title('総人口 vs 生産年齢人口 2023 年(Tableau Scatter 相当)')
plt.tight_layout(); plt.savefig('tableau_scatter.png', dpi=120)
print('相関係数:', round(d23[['総人口','15~64歳人口']].corr().iloc[0,1], 3))

📤 実行結果

相関係数: 0.999

💬 結果の読み方:r=0.999 とほぼ完全な正の相関。 生産年齢人口(15~64歳人口)は総人口の一部分なので、 定義上ほぼ比例するのが当然の結果。 このように「一方が他方に含まれる指標」の散布図は相関が過度に高く出るため、 分析では人口比(生産年齢人口÷総人口)に直すなど注意が要る。 Tableau なら同じ図を 30 秒で作れるが、 Python は「相関係数の数値」「ラベル制御」を細かく扱える。

コード 4:都道府県別ヒートマップ(Tableau の「Highlight Table」相当)

🎯 このコードでやること:47 都道府県 × 13 年度の総人口を 2D マトリクスに整形し、 ヒートマップで濃淡表示。 Tableau の「Show Me → Heatmap」と等価。

📥 入力データ:SSDSE-B-2026 全 611 行をピボット。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
pv = df.pivot(index='都道府県', columns='年度', values='総人口') / 1e4
pv = pv.sort_values(2023, ascending=False)

fig, ax = plt.subplots(figsize=(10, 14))
im = ax.imshow(pv.values, aspect='auto', cmap='YlOrRd')
ax.set_yticks(range(len(pv))); ax.set_yticklabels(pv.index, fontsize=8)
ax.set_xticks(range(len(pv.columns))); ax.set_xticklabels(pv.columns, rotation=45)
plt.colorbar(im, label='総人口(万人)')
ax.set_title('都道府県 × 年度 ヒートマップ(Tableau Highlight Table 相当)')
plt.tight_layout(); plt.savefig('tableau_heatmap.png', dpi=120)
print('東京 2023:', round(pv.loc['東京都', 2023], 1), '万人')
print('鳥取 2023:', round(pv.loc['鳥取県', 2023], 1), '万人')

📤 実行結果

東京 2023: 1408.6 万人 鳥取 2023: 54.4 万人

💬 結果の読み方:東京は鳥取の約 26 倍。 ヒートマップは「絶対値の大小」と「時系列の変化」を一目で見せる。 Tableau ではセルの色濃淡が自動で、 Python では cmap='YlOrRd' のように細かく指定できる。 BI ツールと Python の使い分け軸は「速度(Tableau)」と「再現性(Python)」。

これら 4 つのコードは、 Tableau の代表的なチャート種別(Bar / Line / Scatter / Heatmap)を Python で再現したもの。 Tableau ユーザーは「Python ではこう書く」、 Python ユーザーは「Tableau ならドラッグ&ドロップで作れる」と理解しておけば、 BI とコーディングの橋渡しがスムーズ。

⚠️ よくある落とし穴

❌ ダブルカウント(集計の二重)
シート上で SUM したメジャーをさらに AVG する/LOD で FIXED を外し忘れると、 同じ値を二度数えることがある。 「数字が桁違いに大きい」と感じたら集計式を疑う。
❌ 地理ロールの誤設定
都道府県名の表記揺れ(東京都/東京、 HATSU/hatsu)で地図に乗らない。 必ず Tableau の「地理ロール → 都道府県」を割り当て、 マッチしないラベルを修正する。
❌ DirectQuery vs Import の判断
DB 直結(DirectQuery)は新鮮だが遅く、 抽出(Hyper)は速いが鮮度が落ちる。 SSDSE のように 更新が年 1 回の場合は抽出で十分。
❌ 色の使い過ぎ
色を 4 個以上同時に使うと、 ダッシュボードのメッセージが伝わらなくなる。 色は「最重要 1 系列」だけ、 補助はグレースケールに。
❌ 出典・注釈の欠落
コンペや論文向けには「データ出典:政府統計の総合窓口 e-Stat/SSDSE-B-2026」「年度:2023年」を必ずキャプションに載せる。

❓ よくある質問(FAQ)

Q: Tableau Public と Tableau Desktop の違いは?
A: Public は無償だが作品はインターネット公開、 Desktop はローカル保存と非公開共有が可能。 大学・コンペ提出の練習なら Public でも十分です。
Q: Excel との一番の違いは?
A: Excel は「セル指向」、 Tableau は「列指向」。 同じ集計でも、 Tableau の方がフィルタ連動・大量データ・地理可視化に強い。
Q: データ量はどこまで対応?
A: Hyper エンジンは数億行レベルまで実用的。 SSDSE 規模なら全く問題ない。 1 億行を超えると DirectQuery を検討。
Q: 日本語ラベルが地図に乗らない
A: 「都道府県」列に地理ロールを割り当て、 表記揺れ(東京/東京都)を統一する。 「データ → データソース → 編集」で別名を設定。
Q: Tableau のレポートを論文に貼る方法
A: ダッシュボードを「画像書出し」で PNG 化、 もしくは PDF。 論文用にはフォントサイズを上げ、 凡例の文字を増やす。

📜 歴史と背景

歴史と位置づけ:Tableau は 2003 年に Stanford 大学発のスピンオフとして創業(Pat Hanrahan、 Chris Stolte、 Christian Chabot)。 同大の VizQL(Visualization Query Language)研究が源流で、 「データに対して問いを投げると、 視覚化が自動的に返ってくる」という設計思想を持ちます。 2013 年 NYSE 上場、 2019 年 Salesforce が約 157 億ドルで買収。

製品系列

競合との位置関係:Power BI(Microsoft)と並ぶ 2 大商用 BI。 Looker(Google 傘下)、 Qlik Sense、 Metabase、 Superset がそれに続きます。 学習教材・コミュニティの厚さでは Tableau が頭一つ抜けています。

🗺 学習ロードマップ

  1. レベル 1 — ドラッグ&ドロップで棒・線・円グラフを作る。 ディメンション/メジャーの区別。
  2. レベル 2 — 地理ロール、 マップ、 フィルタ、 計算フィールド。
  3. レベル 3 — LOD 計算 (FIXED/INCLUDE/EXCLUDE)、 表計算、 セット。
  4. レベル 4 — ダッシュボード、 アクション、 パラメータ、 ストーリー。
  5. レベル 5 — Tableau Prep でデータ準備、 Hyper エクストラクト、 REST API。
  6. レベル 6 — Tableau Server / Cloud 配信、 RLS、 認証統合、 大規模運用。

📊 比較表(兄弟手法・選択肢)

主要 BI ツールの比較

ツール提供強み弱み
TableauSalesforce美しい可視化、 LOD 計算高価、 Mac/Win 両対応だが Linux なし
Power BIMicrosoftExcel と地続き、 安価、 DAXMac 開発不可
Looker StudioGoogle無料、 GA 統合機能が薄い
Qlik SenseQlik連想エンジン、 高速独自言語の学習コスト
MetabaseOSS無料・自前ホスト機能が少ない
SupersetApacheOSS・拡張性運用コスト
StreamlitOSSPython アプリ化BI とは別物

📖 用語ミニ辞典

用語意味
ワークシート1 枚のグラフ
ダッシュボード複数ワークシートの組み合わせ
ストーリーダッシュボードを並べたプレゼン
ディメンション分類軸。 文字列・日付
メジャー集計対象。 数値
LOD 計算Level of Detail。 集計粒度を明示
Hyper列指向高速エンジン
抽出 (Extract)Hyper ファイル化したスナップショット
VizQLTableau 内部の宣言型可視化言語
Tableau Public無償の公開版
地理ロール都道府県・市区町村など地理コードへの割当
パラメータユーザ入力。 スライダ・ドロップダウン

🍳 コードレシピ(コピペ用 15 連発)

🎯 目的:SSDSE-B-2026 を Tableau Public にロードし、 47 都道府県の総人口を地図化
📥 入力:SSDSE-B-2026.csv(教育用整形済、 Shift_JIS)
📤 出力:高齢化率・出生率を色分けした対話的ダッシュボード
💬 コメント:Tableau の強みは「ドラッグ&ドロップ」で SQL を意識せずに集計・可視化できる点。 SSDSE-B のような都道府県×年データは地理ロールを設定するだけで地図上に展開できる。 計算フィールドで派生指標を作成し、 LOD 式で集計粒度を制御することで、 単純な棒グラフから複雑な対話型ダッシュボードまで自在に構築可能。
レシピコード
計算フィールド:高齢化率
[65歳以上人口] / [総人口]
LOD: FIXED
{ FIXED [都道府県] : SUM([総人口]) }
LOD: EXCLUDE
{ EXCLUDE [年度] : AVG([総人口]) }
条件付き色分け
IF [高齢化率] > 0.35 THEN '高高齢化' ELSE '通常' END
文字結合
[都道府県] + '(' + STR(YEAR([年度])) + ')'
ランク
RANK(SUM([総人口]), 'desc')
前年差
ZN(SUM([総人口])) - LOOKUP(ZN(SUM([総人口])), -1)
百分率
SUM([総人口]) / SUM({FIXED [年度] : SUM([総人口])})
地理ロール設定
「都道府県」列を右クリック → 地理的役割 → 都道府県
ダッシュボードアクション
ダッシュボード → アクション → フィルタアクションを追加
パラメータ作成
「年度切替」 整数 / リスト / 範囲指定
ストーリーポイント
ストーリー → 新規ストーリー → ダッシュボード追加
Tableau Public 公開
サーバ → Tableau Public → Workbook 保存
画像エクスポート
ワークシート → 表示画像コピー / 書き出し
Hyper 抽出作成
データソース → 抽出 → 全データを Hyper に

Tableau をハブにした BI/可視化エコシステムの俯瞰:

            ┌── ストーリー ─ ダッシュボード ─ シート ──┐
            │                                          │
            │                Tableau                   │
            │   (VizQL → SQL / Hyper エンジン)       │
            │                                          │
            └── データ取り込み(接続 / Tableau Prep) ─┘
                       ↑
       CSV / Excel / SQL / BigQuery / Salesforce …
                       ↑
              (SSDSE-B-2026 もここに)
Tableau Tableau Desktop Power BI Looker Studio Tableau Public ダッシュボード SSDSE-B 連携

🔗 隣接手法への橋渡し

Tableau は Salesforce 傘下の代表的 BI ツール。 SSDSE-B-2026 を Tableau Desktop に取り込み、 都道府県別の総人口を日本地図上にコロプレス図 (色塗り地図) として可視化、 高齢化率 (65歳以上人口÷総人口) とのスキャッターと連動するダッシュボードを作るのが定番ユースケース。 ドラッグ&ドロップ操作で SQL 知識なしに集計と可視化が完結する。

Tableau は対話的探索 (EDA) と意思決定者向けプレゼン両方をカバー。 SSDSE 分析では「Python で前処理 → CSV 書き出し → Tableau で可視化」のパイプラインが現実的で、 47 都道府県という少ない行数を効果的に見せる地図機能が特に有効。

🌳 手法選択フロー

SSDSE 分析で BI ツールを選ぶ際のフロー。

  1. ① 個人 / 小規模か組織展開か? 個人学習 → Tableau Public (無料) または Looker Studio。 組織展開 → Tableau / Power BI (有償ライセンス)。 BigQuery 利用なら Looker Studio が連携良。
  2. ② データソースは? CSV のみ → どの BI でも対応。 RDB → 各 BI のネイティブコネクタ。 SaaS データ (Salesforce / Marketo) → Tableau が強い。
  3. ③ 表現の自由度は? 標準的な棒/線/地図 → 全 BI で同等。 高度な数値演算 (LOD 式、 表計算) → Tableau。 Excel ライクな操作 → Power BI。 SSDSE の都道府県地図は Tableau / Power BI / Looker Studio すべて対応。

BI ツール選択は機能差より「組織の標準」「データソースとの相性」で決まることが多い。 SSDSE-B-2026 程度のサイズなら Tableau Public で十分、 学習用には最適。

🧭 さらに深掘り ── ピル文法と「集計が図の意味を決める」(追記)

姉妹ページの Power BI(スタースキーマ/DAX メジャー)や BI ツール総論(図の読み方)とは角度を変え、 ここでは Tableau 固有の「ピル(丸薬)の色=データ型のグラマー」と、 そこから生まれる最大の落とし穴 ── 棚に何を置くか(=集計の粒度)が、 同じデータでも相関やマークの意味をこっそり変えてしまう ── を、 SSDSE-B-2026 の実測値(2023 年・47 都道府県)だけで解説する。 数値はすべて pd.read_csv(encoding='cp932', skiprows=[1]) で実際に出力・転記したもの。

💡 直感:緑は「連続=測度」、青は「離散=次元」

Tableau のピルには 2 色しかない。 緑(連続 / Continuous)は軸を連続量として引く「測度(メジャー)」、 青(離散 / Discrete)はヘッダを刻む「次元(ディメンション)」。 [総人口] を軸に置けば緑で SUM(総人口) と自動集計され、 [Prefecture] を「詳細(Detail)」に置けば青でマークが 47 個に割れる。 1 つのマーク=棚に置いた青ピルの組み合わせ 1 通り。 これが VizQL の核心で、 「棚に置くと図が決まる」(本ページ上部の Show Me ビルダー)の正体はこの色分けである。

⚠️ 落とし穴(重要)

❌ 落とし穴 1:カウント同士の SUM は「人口の大きさ」で勝手に相関する
2023 年 47 都道府県で SUM(出生数)SUM(死亡数) を散布図にすると相関は r = 0.977。 一見「出生と死亡は連動する」ように見えるが、 これは両軸とも人口規模という潜伏変数に比例しているだけの疑似相関。 実際、 母数で割った粗出生率と粗死亡率にすると話は逆転し、 高齢化率粗出生率r = −0.615(高齢な県ほど生まれにくい)になる。 対処:カウント測度は必ず計算フィールドで率(÷総人口)に直してから軸に置く。
❌ 落とし穴 2:詳細に置く次元を変えると相関が動く(集計粒度の罠)
同じ「高齢化率 × 粗出生率」でも、 「詳細」に [Prefecture] を置けばマークは 47 点で r = −0.615。 これを外して [地方(8 区分)] に置き替え SUM で束ねると、 マークは 8 点で r = −0.511 に緩む。 マークを減らすほど県内のばらつきが均され、 トレンドライン・R² も変わる。 「棚から青ピルを 1 つ抜く」だけで結論が変わり得るのが Tableau の怖さ。 スクショに残すときは必ず「粒度=詳細に何が入っているか」を明記する。 ※地方区分は都道府県コードによる標準的な 8 分類での集計。
❌ 落とし穴 3:率の AVG は「率の SUM を母数の SUM で割った値」と一致しない
高齢化率(65 歳以上÷総人口)を AVG([高齢化率]) で全国値にすると 31.59%。 だが正しい全国高齢化率は SUM(65歳以上人口) / SUM(総人口)29.13%2.46 ポイントもズレるのは、 単純平均が人口の小さい県(秋田県 39.06%)と大きい県(東京都 22.75%)を等しく扱ってしまうため。 対処:比率は「率のメジャー」を平均せず、 分子と分母を別々の測度として持ち、 計算フィールドで最後に割る(=加重平均)。

🚀 発展:LOD 式と表計算で「粒度」を意図的に制御する

🔗 関連ページ

Power BI(スタースキーマ/DAX との対比) BI ツール総論(図の読み方) 散布図(粒度と疑似相関) 相関(集計で変わる r) 尺度水準(率 vs 実数) 時系列(表計算の前年比) SQL(VizQL が生成する GROUP BY) matplotlib(同じ図を Python で)