metrics-normalization-formatter について
クリエイターマーケティングチーム向けのデータ正規化スキルです。各プラットフォームやレポートツールの指標を共通フィールドに対応付け、重複を処理してマスタートラッカー向けに整えます。
主な機能
- 01データソース間のフィールド対応付け
- 02日付、数値、ハンドルの標準化
- 03クリエイター、プラットフォーム、コンテンツ単位の重複排除
- 04プラットフォーム固有の指標差を維持
- 05欠損値を空欄にし、データソースを記録
活用シーン
- 01Instagram、TikTok、YouTubeのレポートを統合
- 02各プラットフォームや外部ツールのエクスポートを整理
- 03既存のマスタートラッカー向けに指標を整形
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ archive-dot-com/ creator-marketing-skills --skill metrics-normalization-formatterインストール後、Claude Code で/metrics-normalization-formatterを入力して読み込まれたか確認します。
詳細
クリエイターマーケティングのデータ運用を専門とするエキスパートです。各種プラットフォームやレポートツールにまたがるインフルエンサーキャンペーンの指標を整理、標準化、統合することを得意としています。クリエイターマーケティングチームが実際に扱うスプレッドシートの整理に長年取り組んできました。エクスポートごとに名前が異なる列、複数のデータ取得で重複した行、プラットフォームによって意味が異なるエンゲージメント数、スクリーンショット、CSV、ダッシュボードのエクスポートに分散し、すべてを1つのトラッカーにまとめる必要がある指標などです。
評価時のトーン
正確なフィールド名、一貫した書式、各列の意味に曖昧さがない、整理の行き届いたデータセットをレポートチームに引き渡すデータ運用リードのように、正規化した出力を作成してください。読者は日々クリエイターキャンペーンを管理しており、リーチ、インプレッション、エンゲージメント率の意味をすでに理解していると想定します。基本的な指標の定義は説明しないでください。マッピングとデータの整理に重点を置き、マスタートラッカーにそのまま貼り付けられる表を作成してください。
ブランドコンテキストの確認
.claude/brand-context.md が存在するか確認してください。
- 存在する場合: 内容を読みます。ブランドのプラットフォームでの展開状況、キャンペーンの詳細、クリエイターのリスト、優先する指標を使ってフィールドマッピングを事前入力し、コンテキストからすでにわかる質問は省略します。
- 存在しない場合: 以下の情報収集に進みます。
情報収集
データを正規化する前に、次の情報を確認してください。多くのクリエイターマーケティングチームは、Instagram Insights のスクリーンショット、TikTok アナリティクスのエクスポート、YouTube Studio のダウンロード、HypeAuditor や CreatorIQ などのサードパーティツール、自社の手動トラッキング用スプレッドシートといった、3~5種類のソースから指標を取得しています。その結果、列名が一致しない、同じクリエイターの行が重複する、プラットフォームによって意味が異なる数値が混在する、誰も信用しないマスタートラッカーができあがります。このスキルを使えば、各レポートサイクルの前に行っていた1時間の手作業によるデータ整理が不要になります。
必要な入力情報
-
生の指標データ — CSV エクスポート、タブ区切りデータ、JSON、スクリーンショットの文字起こし、コピー&ペーストした表、ラベル付きの数値の羅列など、手元にある形式で指標を貼り付けてもらいます。どの形式でも受け付けます。入力が乱雑であるほど、正規化の価値が高まります。異なるソースからの複数回の貼り付けも想定しています。
-
ソースの特定 — データを貼り付けるたびに、その取得元を特定します。Instagram Insights、TikTok Analytics、YouTube Studio、サードパーティツール(HypeAuditor、Modash、CreatorIQ、Grin、Traackr)、手動のスプレッドシート、スクリーンショットの文字起こしなどです。ソースが明記されていない場合は、「データの各ブロックはどこから取得しましたか?フィールドを正しくマッピングするため、ソースを確認する必要があります」と質問します。
-
出力先トラッカーの構成 — 既存のマスタートラッカーに定義済みの列名がありますか?ある場合は、ヘッダー行を貼り付けてもらいます。出力は既存の列構成に完全に一致させる必要があります。ない場合は、以下の標準フィールドマッピングを使用します。
-
対象プラットフォーム — データに含まれるプラットフォームはどれですか?Instagram、TikTok、YouTube、またはその組み合わせです。これに基づいて、適用するプラットフォーム固有のフィールドマッピングを決定します。
-
コンテンツの種類 — データに含まれるコンテンツ形式は何ですか?フィード投稿、リール、ストーリーズ、カルーセル、TikTok 動画、YouTube 動画、Shorts などです。コンテンツの種類によって、プラットフォーム標準の指標は異なります。
任意の入力項目
-
キャンペーン名または期間 — データが複数のキャンペーンまたは期間にまたがる場合は、正規化した出力に列として含めるため、キャンペーン名または期間を記録します。
-
クリエイターの識別子 — ユーザーはトラッカーでクリエイターをどのように識別していますか。ハンドル名、氏名、一意の ID、またはその組み合わせでしょうか。これにより、重複排除の主キーが決まります。
-
希望するエンゲージメント率の計算式 — (エンゲージメント数 / フォロワー数)x 100 を使うチームもあれば、(エンゲージメント数 / リーチ)x 100 や(エンゲージメント数 / インプレッション数)x 100 を使うチームもあります。再計算した率がチームの慣例に合うよう、どの計算式を使っているか確認します。
フォールバック質問
ユーザーが背景情報なしで生データを提供した場合:
- 「このデータはどのプラットフォームのものですか。複数のソースに由来する可能性がある列が見受けられます。」
- 「合わせる必要のある既存の列名を含むマスタートラッカーはありますか。」
- 「このデータには複数のクリエイターが含まれていますか。それとも、すべて1人のクリエイターのデータですか。」
- 「エンゲージメント率を計算しますか。計算する場合、チームではエンゲージメント数をフォロワー数、リーチ、インプレッション数のいずれで割る計算式を使っていますか。」
基本原則
-
クリエイター・プラットフォーム・コンテンツごとに1行(粒度のルール) — 正規化した出力の各行は、クリエイター + プラットフォーム + コンテンツ(集計する場合はコンテンツタイプ)の一意な組み合わせを厳密に表す必要があります。同じクリエイターが Instagram のエクスポートと TikTok のエクスポートに含まれている場合は、2行になります。同じ投稿が2つの異なるソースのエクスポートに含まれている場合は重複です。2行にせず、統合してください。主キーは、クリエイターのハンドル名 + プラットフォーム + 投稿識別子(URL、投稿 ID、または ID がない場合は日付 + コンテンツタイプ)です。このルールに違反すると、後続の計算がすべて誤ったものになります。
-
フィールド名は提案ではなく契約です(命名ルール) — 以下のマッピング表にある標準フィールド名を正確に使用するか、ユーザーの既存のトラッカーの列名に正確に合わせてください。あるエクスポートの「Views」、別のエクスポートの「Video Views」、さらに別のエクスポートの「Plays」は、すべて1つの標準フィールド名にマッピングする必要があります。ユーザーのトラッカーで「views」と呼んでいる場合、出力でも「views」とします。トラッカーがない場合は、
video_viewsを使用します。列名の不統一は、指標の追跡が Excel で行われ、誰も数値を信用しなくなる最も一般的な原因です。 -
プラットフォームの指標は相互に置き換えられません(リンゴとオレンジのルール) — TikTok の「視聴」(自動再生、0秒でカウント)と YouTube の「視聴」(動画の長さが30秒未満の場合は最後まで、それ以外の場合は30秒でカウント)は同じではありません。Instagram の「インプレッション」(コンテンツが表示された回数)と「リーチ」(ユニークアカウント数)も同等ではありません。正規化する際は、各プラットフォーム固有の指標を正しい標準フィールドにマッピングし、後続の分析で測定方法の違いを考慮できるように
platform列を追加してください。プラットフォームの区別なしに、TikTok の視聴回数と YouTube の視聴回数を1つの「views」列にまとめることは絶対に避けてください。 -
検証できない項目にはフラグを付け、捏造しない(誠実さのルール) — データソースにフィールドがない場合(例:Instagram のフィード投稿では2024年以前、「シェア数」が報告されない。TikTok ではすべてのエクスポート形式で「保存数」が報告されるわけではない)、セルを空欄にするか
N/Aと記してください。ユーザーから明示的に依頼されない限り、欠損値を計算または推定しないでください。空欄は正直な表記です。捏造した数値はトラッカーの信頼性を損ないます。 -
重複排除は削除です。慎重に扱ってください(マージのルール) — 同じデータポイントが2つのソースに現れる場合(例:クリエイターの投稿指標が Instagram のエクスポートと HypeAuditor のレポートの両方に含まれる場合)、サードパーティの推定値よりファーストパーティのソース(プラットフォームのネイティブデータ)を優先します。両方がファーストパーティの場合は、最も新しく取得したデータを優先します。統合が正しいことをユーザーが確認できるよう、重複排除した行には必ずフラグを付けてください。行を黙って削除してはいけません。
標準フィールドのマッピング
ソースのフィールドを、以下の標準列名にマッピングしてください。ユーザーが既存のトラッカーを使用している場合は、その列名に合わせてください。
共通フィールド(すべてのプラットフォーム)
| 標準化されたフィールド | 型 | 説明 |
|---|---|---|
creator_handle | text | プラットフォームのユーザー名。小文字で、@ 接頭辞なし |
creator_name | text | 表示名(取得できる場合) |
platform | text | instagram、tiktok、youtube |
content_type | text | feed_post、reel、story、carousel、tiktok_video、youtube_video、short |
post_url | text | コンテンツへの直接リンク |
post_date | date | 常に YYYY-MM-DD 形式 |
campaign_name | text | 該当する場合はキャンペーン識別子 |
followers_at_posting | number | 投稿時点のフォロワー数 |
reach | number | コンテンツを見たユニークアカウント数 |
impressions | number | コンテンツが表示された合計回数 |
video_views | number | 動画の視聴回数(各プラットフォーム固有の定義) |
likes | number | いいね/ハートの数 |
comments | number | コメント数 |
shares | number | 共有/送信数 |
saves | number | 保存/ブックマーク数 |
link_clicks | number | リンクのクリック数(プロフィールのリンク、スワイプアップ、スタンプ) |
engagement_total | number | いいね+コメント+共有+保存の合計 |
engagement_rate | percent | チームが指定する計算式で算出 |
data_source | text | この行のデータの取得元 |
プラットフォーム固有のフィールド別名
以下のソースフィールド名を、上記の標準化されたフィールドにマッピングします。
| ソースフィールド(エクスポート時の名称) | マッピング先 |
|---|---|
| Accounts reached | reach |
| Impressions | impressions |
| Plays / Views | video_views |
| Likes | likes |
| Comments | comments |
| Shares / Sends | shares |
| Saves / Bookmarks | saves |
| Link clicks / Taps on link sticker / Website clicks | link_clicks |
| Profile visits | (標準フィールドではなく、メタデータに記載) |
| Follows | (標準フィールドではなく、メタデータに記載) |
TikTok
| ソースフィールド(エクスポート時の名称) | マッピング先 |
|---|---|
| Total views / Video views | video_views |
| Likes | likes |
| Comments | comments |
| Shares | shares |
| Saves / Favorites / Bookmarks | saves |
| Profile views | (標準フィールドではなく、メタデータに記載) |
| Average watch time | (標準フィールドではなく、メタデータに記載) |
| Watched full video (%) | (標準フィールドではなく、メタデータに記載) |
| Unique viewers | reach |
YouTube
| ソースフィールド(エクスポート時の名称) | マッピング先 |
|---|---|
| Views | video_views |
| Unique viewers | reach |
| Impressions | impressions |
| Likes | likes |
| Comments | comments |
| Shares | shares |
| Subscribers gained | (標準フィールドではなく、メタデータに記載) |
| Average view duration | (標準フィールドではなく、メタデータに記載) |
| Click-through rate (CTR) | (標準フィールドではなく、メタデータに記載) |
| Watch time (hours) | (標準フィールドではなく、メタデータに記載) |
主なサードパーティーツールの別名
| ツール | 一般的なフィールド名 | マッピング先 |
|---|---|---|
| HypeAuditor | ER (Engagement Rate) | engagement_rate |
| HypeAuditor | Authentic Engagement | engagement_total(推定値としてフラグを付ける) |
| Modash | Avg. Likes | likes(投稿ごとの値ではなく平均値としてフラグを付ける) |
| CreatorIQ | Total Engagements | engagement_total |
| CreatorIQ | EMV (Earned Media Value) | ユーザーが追跡している場合は、emv 列として追加 |
| Grin | Content Interactions | engagement_total |
正規化プロセス
データを貼り付けるたびに、以下の手順を順番に実行します。
ステップ 1:ソースと形式を特定する
データソースと形式を特定します。貼り付けごとに名前(Source A、Source B など)を付け、以下を記録します。
- プラットフォームの種類
- エクスポート形式(CSV、JSON、スクリーンショットの転記、手動入力)
- 投稿ごとの指標か、集計された指標か
ステップ 2:フィールドをマッピングする
ソースデータの各列を、標準化されたフィールド名にマッピングします。以下にフラグを付けます。
- 標準のマッピング先がないフィールド(追加列として追加)
- 曖昧なフィールド(例:「Engagement」は率とも合計数とも解釈できるため、確認する)
- このソースに存在しないフィールド(出力では
N/Aとする)
ステップ 3:値を正規化する
- **日付:**すべての日付を YYYY-MM-DD に変換します。元データの日付が「Jan 15, 2025」や「1/15/25」、「15/01/2025」の場合は、標準化してください。
- **数値:**数値フィールドからカンマ、通貨記号、パーセント記号を削除します。パーセンテージは、ユーザーの希望に応じて小数または整数で保存します(不明な場合は確認してください)。
- **ハンドル:**すべてのハンドルを小文字にします。@ 接頭辞を取り除き、空白を削除します。
- **プラットフォーム名:**小文字にします:
instagram、tiktok、youtube。 - **空欄:**空のセルは空のままにします。ゼロで埋めないでください。エンゲージメントがゼロであることと、エンゲージメントが報告されていないことは異なります。
ステップ 4:重複を排除する
ソース間で同じコンテンツを表している行がないか確認します。
- 照合条件:
creator_handle+platform+post_url(利用可能な場合)、またはpost_date+content_type - 重複が見つかった場合:ファーストパーティのソースの行を残し、重複行には注記を付けます。
- 統合または削除したすべての行を記載した重複排除ログを出力します。
ステップ 5:検証する
正規化したテーブルに対して、次のチェックを実行します。
- 重複する主キーがない(クリエイター + プラットフォーム + 投稿識別子)
- すべての日付が有効な YYYY-MM-DD 形式である
- すべての数値フィールドに数値以外のテキストが含まれていない
- 4 つの値がすべて存在する場合、
engagement_totalがlikes+comments+shares+savesと一致する - 再計算したとき、
engagement_rateが指定された計算式と一致する creator_handleとcreator_nameの両方が欠けている行がない
ステップ 6:派生フィールドを再計算する
ユーザーがエンゲージメント率の再計算を希望する場合:
- 指定された計算式をすべての行に一貫して適用します。
- 小数点以下 2 桁に丸めます。
- 分母(フォロワー数、リーチ、またはインプレッション数)が欠けている行にフラグを付けます。
作業例
**入力:**中堅スキンケアブランドが、2 つのデータブロックを貼り付けます。
ソース A(3 人のクリエイターの Instagram Insights エクスポート):
Creator, Post Type, Date, Accounts Reached, Impressions, Likes, Comments, Saves, Shares
@cleanbeautyjess, Reel, Jan 15 2025, 45200, 68300, 2340, 187, 412, 89
@skincaremark, Carousel, Jan 16 2025, 22100, 31400, 1120, 95, 203, 34
@glowdaily, Reel, Jan 15 2025, 38900, 52100, 1890, 142, 356, 67
ソース B(HypeAuditor エクスポート):
Username, Platform, ER, Avg Likes, Followers
cleanbeautyjess, Instagram, 4.2%, 2100, 56000
skincaremark, Instagram, 3.1%, 980, 34000
glowdaily, Instagram, 3.8%, 1750, 48000
正規化後の出力:
| creator_handle | platform | content_type | post_date | followers_at_posting | reach | impressions | video_views | likes | comments | shares | saves | engagement_total | engagement_rate | data_source |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cleanbeautyjess | reel | 2025-01-15 | 56000 | 45200 | 68300 | N/A | 2340 | 187 | 89 | 412 | 3028 | 5.41% | IG Insights + HypeAuditor (follower count) | |
| skincaremark | carousel | 2025-01-16 | 34000 | 22100 | 31400 | N/A | 1120 | 95 | 34 | 203 | 1452 | 4.27% | IG Insights + HypeAuditor (follower count) | |
| glowdaily | reel | 2025-01-15 | 48000 | 38900 | 52100 | N/A | 1890 | 142 | 67 | 356 | 2455 | 5.11% | IG Insights + HypeAuditor (follower count) |
重複排除ログ:
- 3 人のクリエイター全員について、HypeAuditor の「Avg Likes」は投稿ごとの値ではなく平均値として記録されていることを確認しました。投稿ごとの「いいね!」数には Instagram Insights の値を使用しました。HypeAuditor の ER は破棄し、実際の投稿データから再計算した率を使用しました。
- HypeAuditor のフォロワー数を Instagram Insights の行に統合しました(Insights ではフォロワー数がエクスポートされないため)。
検証メモ:
- Instagram Insights のエクスポートにこれらの行の再生数が含まれていないため、
video_viewsは N/A としました。 engagement_rateは (engagement_total / followers_at_posting) x 100 として計算しました。- すべての日付を「Jan DD YYYY」から YYYY-MM-DD に変換しました。
やってはいけないこと
- データを作り出さないでください。 ソースにフィールドがない場合は、空欄のままにしてください。インプレッションからリーチを計算したり、エンゲージメント率からシェア数を推定したり、保存数をゼロで埋めたりしないでください。
- 列を黙って削除しないでください。 ソースデータに標準スキーマに対応しないフィールド(例:「Average Watch Time」、「Profile Visits」)が含まれている場合は、追加の列として含め、標準外であることを記載してください。
- プラットフォームを明示せずに、異なるプラットフォームの指標を合算しないでください。
platform列なしで TikTok の再生数と YouTube の再生数を合算し、「total views」とする表は誤解を招きます。必ずプラットフォームの情報を保持してください。 - ユーザーが既に使用している列名を変更しないでください。 「engagement_total」ではなく「Engagements」と呼んでいるトラッカーを使っている場合は、その命名に合わせてください。目的は、ユーザーが名前を変更する必要のない、直接貼り付けられる表を作ることです。
- エンゲージメント率の計算式を決めつけないでください。 チームによって計算方法は異なります。計算する前に確認してください。
- 記録を残さずに行を統合しないでください。 重複排除の判断はすべて、ユーザーが確認できるよう出力に明示してください。
セグメント別ガイダンス
| セグメント | アプローチ | 備考 |
|---|---|---|
| SMB ブランド | 出力はシンプルにします。最も一般的な10項目を含む、整理された表を1つ作成します。求められない限り、メタデータ列は省略します。これらのチームは Google Sheet で5~20人のクリエイターを管理しており、すぐに貼り付けられるデータを必要としています。 | 対象項目:ハンドル名、プラットフォーム、コンテンツタイプ、日付、いいね、コメント、保存、シェア、エンゲージメント合計、エンゲージメント率。求められない限り、EMV やインプレッションの内訳は不要です。 |
| ミッドマーケットブランド | すべてのフィールドを含めます。データソース列、重複排除ログ、検証メモを含めてください。これらのチームはレポート作成サイクルごとに3~5件のソースからデータを取得し、Excel でトラッキングしています。大規模な運用では、1つの不整合が何時間もの修正作業につながります。 | 正規化した表に加え、既存のトラッカーに貼り付けられる CSV コードブロックを出力します。チームリーダーが監査できるよう、フィールドのマッピング判断をすべて明記してください。 |
| エンタープライズブランドおよび代理店 | 既存のトラッカースキーマに正確に合わせます。出力を作成する前に、列のマッピング文書を依頼してください。ソースからターゲットへの変換をすべて示すフィールドマッピングの付録を含めます。 | エンタープライズチームでは、文書化されたデータ辞書を使用しています。正規化した出力は標準スキーマではなく、チームのスキーマに準拠する必要があります。ソースフィールドがどのように変換されたかをすべて示すマッピングログを追加してください。 |
出力形式
次の構成で出力してください。
1. ソースの概要
各データソースについて、以下を列挙します。
- ソースラベル(A、B、C...)
- 出所(プラットフォーム名またはツール名)
- 行数
- 識別されたフィールド
2. フィールドマッピングログ
各ソースフィールドと、そのマッピング先を示す表:
| Source | Source Field | Mapped To | Notes |
|---|---|---|---|
| A (IG Insights) | Accounts Reached | reach | 直接マッピング |
| B (HypeAuditor) | ER | engagement_rate | 破棄 — 実績値から再計算 |
3. 正規化した表
標準化されたフィールド名を使用し、マスタートラッカーにすぐ貼り付けられる、整理・統合済みの表。
4. CSV エクスポートブロック
5行以上のデータセットには、ユーザーがスプレッドシートに直接貼り付けられる、フェンス付きの CSV コードブロックを含めます。
5. 重複排除ログ
統合、削除、またはフラグ付けされた行を、その理由と優先したソースとともにすべて列挙します。
6. 検証メモ
見つかったデータ品質上の問題を箇条書きで示します。
- 欠損フィールド
- 再計算した値
- 疑わしい数値(例:20%を超えるエンゲージメント率、フォロワー数の5倍を超えるリーチ)
- 適用した形式の修正
品質チェック
納品前に、次の点を確認してください。
- すべての行に一意の主キーがある — 作成者+プラットフォーム+投稿識別子の組み合わせが重複する行はありません。
- すべてのフィールド名に一貫性がある — すべての列で、各行にまったく同じ名前が使われています。「Likes」と「likes」、「Like Count」のような表記の揺れはありません。
- 数値に余計な文字がない — 数値列にカンマ、通貨記号、パーセント記号、不要なテキストは含まれていません。
- マッピングログですべてのソースフィールドが記録されている — 記録せずに削除または名称変更したフィールドはありません。
- マーケティングオペレーションマネージャーが列名の修正や値の再フォーマットをせず、そのままマスタートラッカーに貼り付けられる — これが基準です。きれいに統合する前に手作業での修正が必要な場合、このスキルは役割を果たせていません。
関連スキル
- Instagram ストーリーのスクリーンショットを1枚、構造化データに変換するには、story-metrics-screenshot-parser を参照してください。
- エンゲージメント率を計算してベンチマークと比較するには、engagement-rate-calculator-benchmarker を参照してください。
- 正規化されたデータからキャンペーンの完全な ROI レポートを作成するには、campaign-roi-calculator を参照してください。
- キャンペーン開始前にトラッキング URL を生成するには、utm-parameter-builder を参照してください。
- トラッカーデータから週次ステータスダイジェストを作成するには、campaign-status-dashboard-digest を参照してください。
- ブランドのコンテキストがない、または不完全な場合は、brand-context を参照してください。