『ソードアート・オンライン(SAO)』、好きですか? 私は大好きです。
推し活ユーザー会は、「推しのデータを集めて、みんなで可視化する」Tableau コミュニティです。この記事は、第4回ハンズオン「推しの Viz を作ろう!」の解説資料です。
はじめに
この記事は 【第4回 推し活ユーザー会】20年分の夏アニメ、全部データにしてみた。 のハンズオン資料です。
CSV ファイルは Google Drive からダウンロードできます。
「Tableau インストールしたけど、何から始めればいいの?」という方向けの記事です。
夏アニメ(2006〜2026年)のデータを使って、次の 6 つを順番に体験します。
- データを確認する(CSV 6ファイルの中身)
- CSV を読み込む(リレーションシップで結合)
- 棒グラフを作る(ドラッグ&ドロップだけ)
-
SAOフラグ(
IF+CONTAINSで条件分類) - COUNTD(キャラ数・声優別キャラ数を数える)
- SAO声優さんフラグ(LOD 式で「声優単位」の判定)
計算式はすべて日本語で説明するので、Tableau が初めての方でも読み進められます。
QUEST 1 ▶ 使うデータを確認する
CSV 6 ファイルを Tableau のリレーションシップで結合しています。
| ファイル | 内容 |
|---|---|
001_アニメ.csv |
作品マスター(タイトル・人気度・スコアなど) |
002_キャラクター.csv |
キャラ名・役割・声優名(1作品に複数行) |
003_ジャンル.csv |
作品のジャンル(1行1ジャンル) |
004_スタジオ.csv |
制作スタジオ名(1作品に複数行) |
005_スタッフ.csv |
監督・脚本などスタッフ(役職・担当話数) |
006_テーマソング.csv |
主題歌(OP / ED・歌手) |
すべてのファイルは 作品ID で紐づいています。
001_アニメ.csv
1作品 = 1行のマスターデータです。今回の Viz づくりのメインになります。
| 列名 | 内容 | 例 |
|---|---|---|
作品ID |
各テーブルを結合するキー | 11757 |
タイトル |
アニメのタイトル | ソードアート・オンライン |
季節 |
放送シーズン(このデータは全部「夏」) | 夏 |
人気度 |
AniList のユーザー登録数(数字が大きいほど人気) | 682450 |
平均スコア |
評価スコア(0〜100) | 70 |
放送開始日 |
放送が始まった日付 | 2012-07-08 |
002_キャラクター.csv
1キャラクター = 1行。1作品に複数のキャラがいるため、アニメ1本に対して複数行あります。
| 列名 | 内容 | 例 |
|---|---|---|
作品ID |
アニメと紐づけるキー | 11757 |
キャラ名 |
キャラクターの名前(本名表記) | 桐ヶ谷和人 |
役割 |
主役 / サブキャラ / モブ
|
主役 |
声優名 |
担当声優の名前 | 松岡禎丞 |
003_ジャンル.csv
1作品 × 1ジャンル = 1行。1作品が複数ジャンルを持つため複数行になります。
| 列名 | 内容 | 例 |
|---|---|---|
作品ID |
アニメと紐づけるキー | 11757 |
ジャンル |
ジャンル名(日本語) | アクション |
※ 1作品が複数ジャンルを持つため、同じ
作品IDで「冒険」「ファンタジー」など複数行になります。
004_スタジオ.csv
1作品 × 1スタジオ = 1行。共同制作の場合は複数行になります。
| 列名 | 内容 | 例 |
|---|---|---|
作品ID |
アニメと紐づけるキー | 11757 |
スタジオ |
制作スタジオの名前 | A-1 Pictures |
005_スタッフ.csv
1スタッフ担当 = 1行。原作者・監督・音楽など役職ごとに行が分かれます。
| 列名 | 内容 | 例 |
|---|---|---|
作品ID |
アニメと紐づけるキー | 11757 |
氏名 |
スタッフの名前 | 伊藤智彦 |
役職 |
原作者 / 監督 / 音楽 など(日本語) |
監督 |
担当話数 |
担当したエピソード数(全話担当などは空欄) |
006_テーマソング.csv
1曲 = 1行。OP / ED それぞれ、複数曲あれば順番に行が分かれます。
| 列名 | 内容 | 例 |
|---|---|---|
作品ID |
アニメと紐づけるキー | 11757 |
種別 |
OP(オープニング)/ ED(エンディング) | OP |
順番 |
同じ種別内の曲順(1, 2, …) | 1 |
主題歌 |
曲のタイトル | crossing field |
歌手 |
アーティスト名 | LiSA |
QUEST 2 ▶ CSV を Tableau に読み込む
① CSV をダウンロードして Tableau で開く
- Google Drive から 6 ファイルをまとめてダウンロードする
- Tableau Desktop を起動し、左の「接続」パネルから 「テキストファイル」 を選択
-
001_アニメ.csvを選ぶ → データソースページが開く
② リレーションシップで 6 ファイルを結合する
JOIN ではなくリレーションシップで結合するのがポイントです。
JOIN だと「キャラクター数ぶん人気度が重複集計される」バグが起きます。
- 画面左の「接続パネル」に残り 5 ファイルをドラッグ or 「別のファイルに接続」で追加
- キャンバス上でテーブルをつなぐポップアップが出たら、結合キーを
作品ID=作品IDに設定 - 6 テーブル全部を
001_アニメ.csvを中心につなぐと完成
この画面(データソースページ)の見方
Tableau に CSV を読み込むと、まずこの「データソースページ」が開きます。各エリアの役割はこんな感じです。
-
左の接続パネル … 読み込んだファイルの一覧。今回主に使うのは
001_アニメ.csvと002_キャラクター.csvの 2 ファイルです。 -
中央のキャンバス … テーブル同士をつなぐ線(リレーションシップ)。
001_アニメ.csvを中心に、各テーブルが作品IDで繋がっています。 - 下のプレビュー … 実際のデータの中身を表で確認できます。
QUEST 3 ▶ 棒グラフを作る(ドラッグ&ドロップだけ)
グラフを描くのは「ワークシート」です。画面左下のタブにある「シート 1」をクリックすると(または ⊞ 新しいワークシートボタン)、まっさらな編集画面が開きます。
左側の データペインに列名が並び、上部に「行」「列」のシェルフ、中央にマークカードがあります。ここへ列をドラッグしてグラフを組み立てます。
手順
- 左ペインの
タイトルを 行シェルフ(画面上部「行」の枠)へドラッグ -
人気度を 列シェルフ(画面上部「列」の枠)へドラッグ - 自動で棒グラフが出来上がります 🎉
「人気順で見たいな」と思ったら、ツールバーの「降順ソート」ボタンをワンクリック。関数も SQL も書かずに、思いついた瞬間に並び替わります。これが Tableau のお手軽なところです。
QUEST 4 ▶ 色で SAO を目立たせる — SAOフラグ
「SAO(ソードアートオンライン)シリーズだけ色を変えたい」という場面で使う計算フィールドです。
計算フィールドを作る
データペイン右上の ▼(メニュー) をクリック →「計算フィールドの作成」を選びます。
開いたダイアログに、フィールド名と式を入力します。
フィールド名: SAOフラグ
IF CONTAINS([タイトル], "ソードアート") THEN "★ SAO" ELSE "その他" END
左下に「計算は有効です。」と出れば OK です。
式の読み方
| 部分 | 意味 |
|---|---|
CONTAINS([タイトル], "ソードアート") |
タイトルに「ソードアート」が含まれていれば TRUE
|
THEN "★ SAO" |
TRUE のときは "★ SAO" を返す |
ELSE "その他" |
FALSE のときは "その他" を返す |
= "ソードアート" ではなく CONTAINS を使うのがポイントです。
「ソードアートオンライン アリシゼーション」のようにシリーズ名や副題が付いていても一致します。
色をつける
作成した SAOフラグ は、データペインに新しいフィールドとして増えています。
これを マークカードの「色」へドラッグします。
それだけで「★ SAO」と「その他」が別の色で塗り分けられます。SAO シリーズだけがパッと浮かび上がります。
QUEST 5 ▶ キャラ数を数える — COUNTD
「このアニメ、キャラ何人いる?」「この声優さん、何キャラ担当してる?」を数えます。
COUNT と COUNTD の違いは次のとおりです。
| 関数 | 意味 |
|---|---|
COUNT([キャラ名]) |
行数をそのまま数える(同じ名前でも 1 ずつ) |
COUNTD([キャラ名]) |
重複を除いたユニーク数を数える |
実際に並べて比べると違いがよく分かります。同じ声優さんでも、カウント と 個別のカウント で数字がズレています(同じキャラを複数作品で演じていると重複するため)。
「キャラ何人ぶん担当したか」を正しく数えたいときは COUNTD を使います。
集計を「個別カウント」に変える
フィールドをシェルフに置いたあと、そのフィールドを右クリック →「メジャー」→「カウント(個別)」を選ぶと COUNTD になります。
声優別キャラ数
新しいシートを開き、行シェルフに 声優名、列シェルフに キャラ名(個別カウント)を置くと、
「この声優さんが担当したユニークなキャラ数」のランキングになります。
ビューの粒度に合わせて COUNTD は自動で動きます。
行に タイトル があればアニメ単位、声優名 があれば声優単位で集計されます。
QUEST 6 ▶ 声優単位で判定する — SAO声優さんフラグ(LOD)
「SAO に出演したことがある声優さん」を全出演作品でフラグ立てしたい、という場面です。
なぜ普通の計算ではうまくいかないか
IF [SAOフラグ] = "★ SAO" THEN "★ SAO声優" ELSE "その他" END と書くと、
その行のタイトルが SAO かどうかだけを見てしまいます。
つまり松岡禎丞さんがダンまちに出ている行は「その他」になってしまいます。
| 声優名 | タイトル | 普通の IF | 本当に欲しい結果 |
|---|---|---|---|
| 松岡禎丞 | ソードアートオンライン | ★ SAO声優 | ★ SAO声優 |
| 松岡禎丞 | ダンまちV | その他 ❌ | ★ SAO声優 ✅ |
「声優単位で SAO 出演歴があるか」を見るには、LOD 式が必要です。
LOD 式(FIXED)とは
{ FIXED [次元]: 集計 } という書き方で、ビューの粒度を無視して別の次元で集計できます。
フィールド名: SAO声優さんフラグ
IF { FIXED [声優名]: MAX(IF [SAOフラグ] = "★ SAO" THEN 1 ELSE 0 END) } = 1
THEN "★ SAO声優"
ELSE "その他"
END
式の読み方(内側から順に)
① SAO 出演なら 1、それ以外なら 0
IF [SAOフラグ] = "★ SAO" THEN 1 ELSE 0 END
② 声優名ごとに MAX を取る
{ FIXED [声優名]: MAX(…) }
声優名でグループ化して最大値を取ります。1 が 1 つでもあれば MAX = 1 になります。
なぜ MAX なのか?
声優さん 1 人には複数の出演行(作品)があります。これを 1 つの値にまとめるのが LOD の役割で、: の右側には必ず集計関数(SUM / MAX / MIN など)が必要です。
ここでやりたいのは「1 作品でも SAO に出ていれば ★」という判定。0/1 のフラグに対して MAX を取ると、1 が 1 つでもあれば 1=「SAO 出演が存在するか(OR 条件)」になります。
| 声優 | 各行のフラグ | MAX | 結果 |
|---|---|---|---|
| 松岡禎丞 | 1, 0, 0, 1 | 1 | ★ SAO声優 |
| 花江夏樹 | 0, 0, 0 | 0 | その他 |
-
MINだと「全作品が SAO なら 1(AND 条件)」になり、松岡さんも 0 になってしまう -
SUMでも>= 1で同じ判定はできるが、「出演回数」を数えることになり意図がぼやける。「あるか/ないか」を表すならMAXが一番素直
③ 結果が 1 なら "★ SAO声優"
IF … = 1 THEN "★ SAO声優" ELSE "その他" END
この式は「声優名」単位で計算した結果を全行に貼り付けるので、
松岡禎丞さんの行はタイトルが何であっても「★ SAO声優」になります。
このフラグを「色」に乗せると、SAO に出演歴のある声優さんだけが色分けされます。
QUEST 5 の声優別キャラ数ランキングに重ねれば、「SAO キャストが他にどれだけ活躍しているか」が一目で分かります。
まとめ
| やったこと | 使った機能 |
|---|---|
| 使うデータを確認する | CSV 6ファイルの中身を把握 |
| CSV を読み込んでリレーションシップを設定 | データソースページ・リレーションシップ |
| 棒グラフを作る | ドラッグ&ドロップ |
| SAO を色分け |
IF + CONTAINS
|
| キャラ数・声優別キャラ数 | COUNTD |
| 声優単位でフラグを立てる | LOD FIXED
|
まずは SAOフラグから作ってみて、動いたら次のステップへ進んでみてください!










